<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Flexmaniak.pl &#187; Google Maps API</title>
	<atom:link href="http://blog.flexmaniak.pl/tag/google-maps-api/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.flexmaniak.pl</link>
	<description>Flex, Papervision3D, PHP, Symfony</description>
	<lastBuildDate>Sat, 07 Aug 2010 11:49:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Flex i Google Maps API</title>
		<link>http://blog.flexmaniak.pl/flex/google-maps-api-flex/flex-i-google-maps-api</link>
		<comments>http://blog.flexmaniak.pl/flex/google-maps-api-flex/flex-i-google-maps-api#comments</comments>
		<pubDate>Wed, 09 Jun 2010 15:38:43 +0000</pubDate>
		<dc:creator>Piotr Wierzgała</dc:creator>
				<category><![CDATA[Google Maps API]]></category>
		<category><![CDATA[ClientGeocoder]]></category>
		<category><![CDATA[InfoWindowOptions]]></category>
		<category><![CDATA[Marker]]></category>
		<category><![CDATA[MarkerOptions]]></category>

		<guid isPermaLink="false">http://blog.na14.pl/wordpress/?p=192</guid>
		<description><![CDATA[Google Maps API to zestaw narzędzi do wyświetlania i zarządzania mapami niemal wszystkich rejonów świata. Dzięki tej bibliotece będziemy mogli dodawać do mapy oznaczenia, okna informacyjne, obsługiwać zdarzenia interakcji z mapą, rysować po mapie własne kształty, geolokalizować obiekty architektoniczne, ulice, miasta, rejony geograficzne itd., wyznaczać trasy pomiędzy wybranymi lokacjami oraz korzystać różnych z innych funkcji [...]]]></description>
			<content:encoded><![CDATA[<p>Google Maps API to zestaw narzędzi do wyświetlania i zarządzania mapami niemal wszystkich rejonów świata. Dzięki tej bibliotece będziemy mogli dodawać do mapy oznaczenia, okna informacyjne, obsługiwać zdarzenia interakcji z mapą, rysować po mapie własne kształty, geolokalizować obiekty architektoniczne, ulice, miasta, rejony geograficzne itd., wyznaczać trasy pomiędzy wybranymi lokacjami oraz korzystać różnych z innych funkcji map Google.<br />
<span id="more-192"></span></p>
<h3>Spis treści</h3>
<ul>
<li><a href="http://blog.flexmaniak.pl/flex/flex-i-google-maps-api-wstep" target="_blank">Wstęp</a></li>
<li><a href="http://blog.flexmaniak.pl/flex/flex-i-google-maps-api-markery" target="_blank">Markery</a></li>
<li><a href="http://blog.flexmaniak.pl/flex/flex-i-google-maps-api-okna-informacjyne" target="_blank">Okna informacyjne</a></li>
<li><a href="http://blog.flexmaniak.pl/flex/flex-i-google-maps-api-rysowanie-po-mapie" target="_blank">Rysowanie po mapie</a></li>
<li><a href="http://blog.flexmaniak.pl/flex/flex-i-google-maps-api-geolokalizacja" target="_blank">Usługa geoloklizacji</a></li>
<li><a href="http://blog.flexmaniak.pl/flex/flex-i-goole-maps-api-wyznaczanie-trasy" target="_blank">Usługa wyznaczania tras</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.flexmaniak.pl/flex/google-maps-api-flex/flex-i-google-maps-api/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Flex i Google Maps API &#8211; wyznaczanie trasy</title>
		<link>http://blog.flexmaniak.pl/flex/google-maps-api-flex/flex-i-goole-maps-api-wyznaczanie-trasy</link>
		<comments>http://blog.flexmaniak.pl/flex/google-maps-api-flex/flex-i-goole-maps-api-wyznaczanie-trasy#comments</comments>
		<pubDate>Wed, 09 Jun 2010 15:38:26 +0000</pubDate>
		<dc:creator>Piotr Wierzgała</dc:creator>
				<category><![CDATA[Google Maps API]]></category>
		<category><![CDATA[Directions]]></category>
		<category><![CDATA[DirectionsOptions]]></category>
		<category><![CDATA[Driving Directions]]></category>
		<category><![CDATA[Wyznaczanie trasy]]></category>

		<guid isPermaLink="false">http://blog.flexmaniak.pl/?p=413</guid>
		<description><![CDATA[Wyznaczanie trasy pomiędzy dowolnymi lokacjami to jedna z usług do jakiej dostęp umożliwia Google Maps API. Dzięki niej ustalimy parametry wyznaczania trasy, odrysujemy na mapie trasę przebiegającą przez dowolną ilość lokacji oraz uzyskamy dostęp do wskazówek podróży, które pozwolą nam podążać wzdłuż określonej ścieżki. Spis treści Aplikacja Przygotowanie komunikacji z usługą Parametry wyznaczania trasy Wysłanie [...]]]></description>
			<content:encoded><![CDATA[<p>Wyznaczanie trasy pomiędzy dowolnymi lokacjami to jedna z usług do jakiej dostęp umożliwia Google Maps API. Dzięki niej ustalimy parametry wyznaczania trasy, odrysujemy na mapie trasę przebiegającą przez dowolną ilość lokacji oraz uzyskamy dostęp do wskazówek podróży, które pozwolą nam podążać wzdłuż określonej ścieżki.<br />
<span id="more-413"></span></p>
<h3>Spis treści</h3>
<ul>
<li><a href="#aplikacja">Aplikacja</a></li>
<li><a href="#przygotowanie">Przygotowanie komunikacji z usługą</a></li>
<li><a href="#parametry">Parametry wyznaczania trasy<a/></li>
<li><a href="#wysylanie">Wysłanie zapytania wyznaczenia trasy</a></li>
<li><a href="#odbieranie">Odebranie wyniku zapytania wyznaczenia trasy</a>
<ul>
<li><a href="#sukces">Wyznaczanie trasy zakończyło się sukcesem</a></li>
<li><a href="#blad">Wyznaczanie trasy zakończyło się błędem</a></li>
</ul>
</li>
</ul>
<h3><a name="aplikacja">Aplikacja</a></h3>
<p>Poniższa aplikacja demonstruje możliwości usługi <strong>Driving Directions</strong>: wyznaczania trasy pomiędzy dwiema lub trzema lokacjami, ustawiania parametrów wyznaczania trasy, odrysowywania trasy na mapie, przeglądania wskazówek podróżowania według wyznaczonej trasy. Dostęp do źródła można uzyskać poprzez kliknięcie prawym przyciskiem myszy w obszar aplikacji i wybranie opcji &#8222;View Source&#8221; z menu kontekstowego.<br />
<a href="http://blog.na14.pl/examples/GoogleMapsAPI/1.18/driving_directions/application/application.html" target="_blank" alt="Kliknij aby otworzyć aplikację w osobnym oknie"><img src="http://blog.na14.pl/examples/GoogleMapsAPI/1.18/driving_directions/application_thumb.jpg" /></a></p>
<h3><a name="przygotowanie">Przygotowanie komunikacji z usługą</a></h3>
<p>W celu wyznaczenia trasy musimy posłużyć się obiektem klasy <strong>Directions</strong>. Za jego pośrednictwem ustawimy wszystkie parametry wyznaczania trasy, wyślemy zapytanie do serwera i odbierzemy jego wynik. Do obiektu klasy Directions dodajemy nasłuchiwanie na dwa zdarzenia: DirectionsEvent.DIRECTIONS_SUCCESS i DirectionsEvent.DIRECTIONS_FAILURE, które będą informować nas odpowiednio o pomyślnym lub niepomyślnym zakończeniu procesu wyznaczania trasy.</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> directions:Directions = <span style="color: #000000; font-weight: bold;">new</span> Directions<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; directions.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>DirectionsEvent.<span style="color: #006600;">DIRECTIONS_SUCCESS</span>, directions_DIRECTIONS_SUCCESS<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; directions.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>DirectionsEvent.<span style="color: #006600;">DIRECTIONS_FAILURE</span>, directions_DIRECTIONS_FAILURE<span style="color: #66cc66;">&#41;</span>;</div></div>
<h3><a name="parametry">Parametry wyznaczania trasy</a></h3>
<p>Parametry wyznaczania trasy określamy za pomocą obiektu klasy <strong>DirectionsOptions</strong>, który możemy przekazać do konstruktora klasy Directions lub ustawić ustawić w dowolnym momencie za pomocą metody setOptions klasy Directions. Określić możemy cztery parametry:</p>
<ul>
<li><strong>avoidHighways </strong>- Wartość logiczna określająca czy autostrady mają być brane pod uwagę podczas wyznaczania trasy. Domyślna wartość to true.</li>
<li><strong>countryCode </strong>- Oznaczenie kraju (&#8222;PL&#8221;,&#8221;EN&#8221; itp.) dla zapytania wyznaczania trasy. W przypadku nie ustawienia tego parametru zostanie użyta wartość zapisana w polu countryCode mapy (o ile sama została ustawiona). Nie zauważyłem żadnych zmian w działaniu aplikacji przy różnych ustawieniach tego parametru.</li>
<li><strong>language </strong>- Język (&#8222;en&#8221;, &#8222;pl&#8221; itd.) dla zapytania dla wyznaczania trasy. W przypadku nie ustawienia tego parametru zostanie użyta wartość zapisana w polu language mapy, a jeżeli i ta wartość nie jest ustawiona wtedy język zostanie ustalony na podstawie ustawień przeglądarki. Wartość tego parametru wpływa na język w jakim będą dostępne opisy kolejnych kroków trasy.</li>
<li><strong>travelMode </strong>- Rodzaj podróżowania dla jakiego zostanie wyznaczona trasa. Do wyboru mamy podróżowanie przy pomocy auta lub pieszo, dla których parametr powinien przyjąć odpowiednio wartości: TRAVEL_MODE_DRIVING lub TRAVEL_MODE_WALKING. Wartość domyślna to TRAVEL_MODE_DRIVING.</li>
</ul>
<p>Przykład:</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">var</span> options:DirectionsOptions = <span style="color: #000000; font-weight: bold;">new</span> DirectionsOptions<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; avoidHighways: <span style="color: #000000; font-weight: bold;">true</span>,<br />
&nbsp; &nbsp; <span style="color: #0066CC;">language</span>: <span style="color: #ff0000;">'en'</span>,<br />
&nbsp; &nbsp; countryCode: <span style="color: #ff0000;">'US'</span>,<br />
&nbsp; &nbsp; travelMode: DirectionsOptions.<span style="color: #006600;">TRAVEL_MODE_WALKING</span><br />
<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div></div>
<h3><a name="wysylanie">Wysłanie zapytania wyznaczenia trasy</a></h3>
<p>Zapytanie wyznaczenia trasy wysyłamy za pomocą metody <strong>load</strong> klasy Directions, która jako parametr przyjmuje łańcuch opisujący lokacje przez jakie powinna przebiegać trasa.</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">directions.<span style="color: #0066CC;">load</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;from: Lublin to: Warszawa to: Kraków&quot;</span><span style="color: #66cc66;">&#41;</span>;</div></div>
<p>Minimalnie wystarczy podać jedna lokację po &#8222;from:&#8221; i jedną po &#8222;to:&#8221;. Jeżeli jednak chcemy wyznaczyć trasę przebiegającą przez jakieś konkretne lokacje wtedy podajemy je, w dowolnej ilości, po kolejnych  ciągach &#8222;to:&#8221;. Zamiast podawania nazw lokacji dopuszczalne jest podawanie ich współrzędnych geograficznych. Można w tym celu skorzystać z geolokaliztatora dostępnego np. w aplikacjach zamieszczonych we wpisach &#8222;Flex i Google Maps API &#8211; rysowanie po mapie&#8221; lub &#8222;Flex i Google Maps API &#8211; geolokalizacja&#8221;.</p>
<h3><a name="odbieranie">Odebranie wyniku zapytania wyznaczenia trasy</a></h3>
<p>Po wywołaniu metody load wykonany zostanie kod jednej z dwóch funkcji obsługujących zdarzenia pomyślnego i niepomyślnego zakończenia procesu wyznaczania trasy.</p>
<p><br/><strong><a name="sukces">Wyznaczanie trasy zakończyło się sukcesem</a></strong><br/><br />
Po pomyślnym wyznaczeniu trasy możemy odwołać się do obiektu directions w celu uzyskania różnych interesujących nas danych trasy takich jak:</p>
<ul>
<li>długość trasy,</li>
<li>przybliżony czas trwania podróży,</li>
<li>opis kolejnych kroków podróży,</li>
<li>graficzna reprezentacja trasy.</li>
</ul>
<p>Dostęp do trzech pierwszych uzyskujemy poprzez wywołanie metody <strong>getRoute</strong> obiektu directions, która jako parametr przyjmuje numer trasy. Jeżeli trasa została wyznaczona od punktu A do punktu B wtedy istnieje tylko jedna trasa. Jeżeli jednak wysłaliśmy zapytanie, w którym zdefiniowaliśmy np. dwie dodatkowe lokacje na drodze do punktu docelowego wtedy będziemy posiadali dostęp do trzech tras łączących odpowiednio punkty: A-B, B-C, C-D. Każda z tych tras będzie miała oddzielnie określoną długość, czas podróży oraz kolejne kroki podróży.</p>
<p>Przykładowe pobranie danych o długości trasy i czasie podróży:</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">routeLengthTextArea.<span style="color: #0066CC;">htmlText</span> = directions.<span style="color: #006600;">getRoute</span><span style="color: #66cc66;">&#40;</span>routeIndex<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">distanceHtml</span>; <br />
travelTimeTextArea.<span style="color: #0066CC;">htmlText</span> = directions.<span style="color: #006600;">getRoute</span><span style="color: #66cc66;">&#40;</span>routeIndex<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">durationHtml</span>;</div></div>
<p>Dostęp do poszczególnych kroków podróży uzyskujemy poprzez wywołanie metody <strong>getStep</strong> na wyniku zwróconym przez metodę getRoute. Metoda getStep zwraca obiekt klasy <strong>Step</strong>, który zawiera informacje o wybranym kroku podróży:</p>
<ul>
<li>opis,</li>
<li>czas wykonania,</li>
<li>współrzędne graficzne,</li>
<li>indeks pierwszego punktu tworzącego ten krok w graficznej reprezentacji trasy.</li>
</ul>
<p>Przykładowe pobranie opisu pierwszego kroku pierwszej trasy:</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">stepTextArea.<span style="color: #0066CC;">htmlText</span> = directions.<span style="color: #006600;">getRoute</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">getStep</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">descriptionHtml</span>;</div></div>
<p>Chcąc narysować na mapie kształt trasy wystarczy dodać jako warstwę rezultat wywołania metody <strong>createPolyline</strong>.</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">map.<span style="color: #006600;">addOverlay</span><span style="color: #66cc66;">&#40;</span>directions.<span style="color: #006600;">createPolyline</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;</div></div>
<p><br/><strong><a name="blad">Wyznaczanie trasy zakończyło się błędem</a></strong><br/></p>
<p>W przypadku wystąpienia błędu podczas wyznaczania trasy wywołana zostanie funkcja obsługująca zdarzenie DirectionsEvent.DIRECTIONS_FAILURE. Żeby zidentyfikować przyczynę błędu pobieramy jego kod znajdujący się w polu status zdarzenia i sprawdzamy jego znaczenie w <a href="http://code.google.com/intl/pl/apis/maps/documentation/flash/reference.html#ServiceStatus" target="_blank">dokumentacji</a> lub poniżej:</p>
<ul>
<li>400: Zapytanie nie mogło zostać poprawnie przetworzone przez serwer</li>
<li>500: Wystąpiły problemy po stronie serwera geolokalizacji.</li>
<li>601: Nie podano adresu do geolokalizacji.</li>
<li>602: Nieznany lub nieprawidłowy adres.</li>
<li>603: Ze względów prawnych lub innych wynik zapytania nie może zostać zwrócony.</li>
<li>604: Trasa nie może zostać wyznaczona.</li>
<li>620: Liczba dozwolonych zapytań w ciągu ostatnich 24 godzin została przekroczona.</li>
</ul>
<p>Przykładowa implementacja metody obsługującej zdarzenie niepomyślnego wyznaczenia trasy:</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> directions_DIRECTIONS_FAILURE<span style="color: #66cc66;">&#40;</span>event:DirectionsEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> description:<span style="color: #0066CC;">String</span>;<br />
&nbsp; &nbsp; <span style="color: #b1b100;">switch</span> <span style="color: #66cc66;">&#40;</span>event.<span style="color: #006600;">directions</span>.<span style="color: #0066CC;">status</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">400</span>: description = <span style="color: #ff0000;">&quot;Zapytanie nie mogło zostać poprawnie przetworzone przez serwer.&quot;</span>; <span style="color: #b1b100;">break</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">500</span>: description = <span style="color: #ff0000;">&quot;Wystąpiły problemy po stronie serwera geolokalizacji.&quot;</span>; <span style="color: #b1b100;">break</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">601</span>: description = <span style="color: #ff0000;">&quot;Nie podano adresu do geolokalizacji.&quot;</span>; <span style="color: #b1b100;">break</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">603</span>: description = <span style="color: #ff0000;">&quot;Ze względów prawnych lub innych wynik zapytania nie może zostać zwrócony.&quot;</span>; <span style="color: #b1b100;">break</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">602</span>: description = <span style="color: #ff0000;">&quot;Nieznany lub nieprawidłowy adres.&quot;</span>; <span style="color: #b1b100;">break</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">603</span>: description = <span style="color: #ff0000;">&quot;Ze względów prawnych lub innych wynik zapytania nie może zostać zwrócony.&quot;</span>; <span style="color: #b1b100;">break</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">604</span>: description = <span style="color: #ff0000;">&quot;Trasa nie może zostać wyznaczona.&quot;</span>; <span style="color: #b1b100;">break</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">620</span>: description = <span style="color: #ff0000;">&quot;Liczba dozwolonych zapytań w ciągu ostatnich 24 godzin została przekroczona.&quot;</span>; <span style="color: #b1b100;">break</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">default</span>: description = <span style="color: #ff0000;">&quot;Nieobsługiwany błąd: &quot;</span>+event.<span style="color: #006600;">directions</span>.<span style="color: #0066CC;">status</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; Alert.<span style="color: #0066CC;">show</span><span style="color: #66cc66;">&#40;</span>description,<span style="color: #ff0000;">&quot;Błąd&quot;</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #66cc66;">&#125;</span></div></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.flexmaniak.pl/flex/google-maps-api-flex/flex-i-goole-maps-api-wyznaczanie-trasy/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flex i Google Maps API &#8211; geolokalizacja</title>
		<link>http://blog.flexmaniak.pl/flex/google-maps-api-flex/flex-i-google-maps-api-geolokalizacja</link>
		<comments>http://blog.flexmaniak.pl/flex/google-maps-api-flex/flex-i-google-maps-api-geolokalizacja#comments</comments>
		<pubDate>Wed, 09 Jun 2010 15:38:14 +0000</pubDate>
		<dc:creator>Piotr Wierzgała</dc:creator>
				<category><![CDATA[Google Maps API]]></category>
		<category><![CDATA[ClientGeocoder]]></category>
		<category><![CDATA[ClientGeocoderOptions]]></category>
		<category><![CDATA[Geocoding]]></category>
		<category><![CDATA[GeocodingEvent]]></category>
		<category><![CDATA[Geolokalizacja]]></category>
		<category><![CDATA[Placemark]]></category>

		<guid isPermaLink="false">http://blog.flexmaniak.pl/?p=544</guid>
		<description><![CDATA[Geolokalizacja jest jedną z usług, z której możemy korzystać za pomocą Google Maps API. Dzięki niej posługując się odpowiednimi słowami kluczowymi odnajdziemy na mapie świata dowolną lokację: ulicę, miasto, państwo, obiekt architektoniczny czy krainę geograficzną. Spis treści Aplikacja Przygotowanie komunikacji z usługą Parametry geolokalizacji Wysłanie zapytania geolokalizacji Odebranie wyniku zapytania geolokalizacji Geolokalizacja zakończyła się sukcesem [...]]]></description>
			<content:encoded><![CDATA[<p>Geolokalizacja jest jedną z usług, z której możemy korzystać za pomocą Google Maps API. Dzięki niej posługując się odpowiednimi słowami kluczowymi odnajdziemy na mapie świata dowolną lokację: ulicę, miasto, państwo, obiekt architektoniczny czy krainę geograficzną.<br />
<span id="more-544"></span></p>
<h3>Spis treści</h3>
<ul>
<li><a href="#aplikacja">Aplikacja</a></li>
<li><a href="#przygotowanie">Przygotowanie komunikacji z usługą</a></li>
<li><a href="#parametry">Parametry geolokalizacji<a/></li>
<li><a href="#wysylanie">Wysłanie zapytania geolokalizacji</a></li>
<li><a href="#odbieranie">Odebranie wyniku zapytania geolokalizacji</a>
<ul>
<li><a href="#sukces">Geolokalizacja zakończyła się sukcesem</a></li>
<li><a href="#blad">Geolokalizacja zakończyła się błędem</a></li>
</ul>
</li>
</ul>
<h3><a name="aplikacja">Aplikacja</a></h3>
<p>Poniższa aplikacja demonstruje możliwości usługi <strong>Geocoding</strong>. Dodatkowo pokazuje wszystkie informacje zwrócone przez serwer po pomyślnym przetworzeniu zapytania. Dostęp do źródła można uzyskać poprzez kliknięcie prawym przyciskiem myszy w obszar aplikacji i wybranie opcji &#8222;View Source&#8221; z menu kontekstowego.<br />
<a href="http://blog.na14.pl/examples/GoogleMapsAPI/1.18/geocoding/application/application.html" target="_blank" alt="Kliknij aby otworzyć aplikację w osobnym oknie"><img src="http://blog.na14.pl/examples/GoogleMapsAPI/1.18/geocoding/application_thumb.jpg" /></a></p>
<h3><a name="przygotowanie">Przygotowywania komunikacji z usługą</a></h3>
<p>Z usługi gelokalizacji będziemy korzystać za pomocą klasy <strong>ClientGeocoder</strong>. Jej konstruktor przyjmuje tylko jeden, opcjonalny parametr, którym jest obiekt klasy <strong>ClientGeocoderOptions</strong> definiujący parametry geolokalizowania.<br />
Po utworzeniu instancji klasy ClientGeocoder dodajemy do niej nasłuchiwanie zdarzeń: GeocodingEvent.GEOCODING_SUCCESS i GeocodingEvent.GEOCODING_FAILURE, które będą informować nas odpowiednio o pomyślnym lub niepomyślnym zakończeniu procesu geolokalizacji.</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">var</span> clientGeocoder:ClientGeocoder = <span style="color: #000000; font-weight: bold;">new</span> ClientGeocoder;<br />
clientGeocoder.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>GeocodingEvent.<span style="color: #006600;">GEOCODING_SUCCESS</span>, clientGeocoder_GEOCODING_SUCCESS<span style="color: #66cc66;">&#41;</span>;<br />
clientGeocoder.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>GeocodingEvent.<span style="color: #006600;">GEOCODING_FAILURE</span>, clientGeocoder_GEOCODING_FAILURE<span style="color: #66cc66;">&#41;</span>;</div></div>
<h3><a name="parametry">Parametry geolokalizacji</a></h3>
<p>Parametry geolokalizacji określamy za pomocą obiektu klasy ClientGeocoderOptions, który możemy przekazać do konstruktora klasy ClientGeocoder lub ustawić ustawić w dowolnym momencie za pomocą metody setOptions klasy ClientGeocoder. Określić możemy trzy parametry:</p>
<ul>
<li><strong>countryCode</strong>: Oznaczenie kraju (&#8222;PL&#8221;,&#8221;EN&#8221; itp.) dla zapytania geolokalizacji. W przypadku nie ustawienia tego parametru jego wartość zostanie ustalona na podstawie ustawień przeglądarki. Nie zauważyłem żadnych zmian w działaniu aplikacji przy różnych ustawieniach tego parametru.</li>
<li><strong>language</strong>: Język (&#8222;en&#8221;, &#8222;pl&#8221; itd.) dla zapytania dla geolokalizacji. W przypadku nie ustawienia tego parametru jego wartość zostanie ustalona na podstawie ustawień przeglądarki. Wartość tego parametru wpływa na język w jakim będą dostępne informacje o lokacji.</li>
<li><strong>viewport</strong>: Współrzędne wyznaczające obszar podwyższonego priorytetu w procesie geolokalizacji. Jeżeli w wyznaczonym obszarze znajdzie się lokacja pasująca do słów kluczowych wtedy wtedy zostanie zwrócona tylko ona, w przeciwnym razie zostaną zwrócone wszystkie odnalezione lokacje</li>
</ul>
<p>Przykład:</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">var</span> clientGeocoderOptions:ClientGeocoderOptions = <span style="color: #000000; font-weight: bold;">new</span> ClientGeocoderOptions<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; countryCode: <span style="color: #ff0000;">&quot;EN&quot;</span>, <br />
&nbsp; &nbsp; <span style="color: #0066CC;">language</span>: <span style="color: #ff0000;">&quot;en&quot;</span>, <br />
&nbsp; &nbsp; viewport: <span style="color: #000000; font-weight: bold;">new</span> LatLngBounds<span style="color: #66cc66;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">new</span> LatLng<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">51.00</span>,<span style="color: #cc66cc;">22.05</span><span style="color: #66cc66;">&#41;</span>, <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">new</span> LatLng<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">51.53</span>,<span style="color: #cc66cc;">23.10</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#41;</span><br />
<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div></div>
<h3><a name="wysylanie">Wysłanie zapytania geolokalizacji</a></h3>
<p>Zapytanie geolokalizacji wysyłamy za pomocą metody <strong>geocode</strong> klasy ClientGeocoder, która jako parametr przyjmuje łańcuch opisujący szukaną lokację.</p>
<p>Przykład:</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">clientGeocoder.<span style="color: #006600;">geocode</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;stara wieś&quot;</span><span style="color: #66cc66;">&#41;</span>;</div></div>
<h3><a name="odbieranie">Odebranie zapytania geolokalizacji</a></h3>
<p>Po wywołaniu metody geocode wykonany zostanie kod jednej z dwóch funkcji obsługujących zdarzenia pomyślnego i niepomyślnego zakończenia procesu geolokalizacji.</p>
<p><br/><strong><a name="sukces">Geolokalizacja zakończyła się sukcesem</a></strong><br/></p>
<p>W przypadku pomyślnego zakończenia geolokalizacji wywołana zostanie funkcja obsługująca zdarzenie GeocodingEvent.GEOCODING_SUCCESS. W niej odwołujemy się kolejno do pól request i placermarks zdarzenia w celu uzyskania dostępu do danych wszystkich lokacji pasujących do klucza. Dane przechowywane są w tablicy ponieważ do jednego klucza może pasować wiele lokacji. Wystarczy np. zlecić geolokalizatorowi odnalezienie &#8222;starej wsi&#8221; aby przekonać się o tym, że jest ich w Polsce co najmniej dziesięć.</p>
<p>Przykład:</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> clientGeocoder_GEOCODING_SUCCESS<span style="color: #66cc66;">&#40;</span>event:GeocodingEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> placemarks:<span style="color: #0066CC;">Array</span> = event.<span style="color: #006600;">response</span>.<span style="color: #006600;">placemarks</span>;<br />
<span style="color: #66cc66;">&#125;</span></div></div>
<p>Tablica placemarks zawiera obiekty klasy <strong>Placemark</strong>, które przechowują dane o:</p>
<ul>
<li>adresie lokacji (typ: String),</li>
<li>szczegółach adresu lokacji (typ: Object),</li>
<li>współrzędnych geograficznych lokacji (typ: LatLng).</li>
</ul>
<p>Dostęp do powyższych danych uzyskujemy poprzez odwołanie się do następujących pól klasy Placemark:</p>
<table style="width: 580px;">
<tr>
<td style="font-size: 11px; text-align: right; padding: 4px;"><strong>adres lokacji:</strong></td>
<td style="font-size: 9px; width: 100%; text-align: left; padding: 4px;">address</td>
</tr>
<tr>
<td style="font-size: 11px; text-align: right; padding: 4px;"><strong>kod kraju:</strong></td>
<td style="font-size: 9px; width: 100%; text-align: left; padding: 4px;">AddressDetails.Country.CountryNameCode</td>
</tr>
<tr>
<td style="font-size: 11px; text-align: right; padding: 4px;"><strong>nazwa kraju:</strong></td>
<td style="font-size: 9px; width: 100%; text-align: left; padding: 4px;">AddressDetails.Country.CountryName</td>
</tr>
<tr>
<td style="font-size: 11px; text-align: right; padding: 4px;"><strong>województwo:</strong></td>
<td style="font-size: 9px; width: 100%; text-align: left; padding: 4px;">AddressDetails.Country.AdministrativeArea.AdministrativeAreaName</td>
</tr>
<tr>
<td style="font-size: 11px; text-align: right; padding: 4px;"><strong>powiat:</strong></td>
<td style="font-size: 9px; width: 100%; text-align: left; padding: 4px;">AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.SubAdministrativeAreaName</td>
</tr>
<tr>
<td style="font-size: 11px; text-align: right; padding: 4px;"><strong>miasto:</strong></td>
<td style="font-size: 9px; width: 100%; text-align: left; padding: 4px;">AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName</td>
</tr>
<tr>
<td style="font-size: 11px; text-align: right; padding: 4px;"><strong>ulica:</strong></td>
<td style="font-size: 9px; width: 100%; text-align: left; padding: 4px;">AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.Thoroughfare.ThoroughfareName</td>
</tr>
<tr>
<td style="font-size: 11px; text-align: right; padding: 4px;"><strong>kod pocztowy:</strong></td>
<td style="font-size: 9px; width: 100%; text-align: left; padding: 4px;">AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode.PostalCodeNumber</td>
</tr>
<tr>
<td style="font-size: 11px; text-align: right; padding: 4px;"><strong>dokładność:</strong></td>
<td style="font-size: 9px; width: 100%; text-align: left; padding: 4px;">AddressDetails.Accuracy</td>
</tr>
<tr>
<td style="font-size: 11px; text-align: right; padding: 4px;"><strong>współrzędne:</strong></td>
<td style="font-size: 9px; width: 100%; text-align: left; padding: 4px;">point</td>
</tr>
<table>
<p>Jedyną z powyższych informacji, która nie tłumaczy się sama jest dokładność. Dokładność przyjmuje wartości od 0 do 9 oznaczające stopień precyzji z jakim udało się wyznaczyć położenie danej lokacji.</p>
<p>Opis stopni precyzji:</p>
<ul>
<li><strong>0</strong>: nieokreślona,</li>
<li><strong>1</strong>: państwo,</li>
<li><strong>2</strong>: województwo,</li>
<li><strong>3</strong>: powiat,</li>
<li><strong>4</strong>: miasto,</li>
<li><strong>5</strong>: kod pocztowy,</li>
<li><strong>6</strong>: ulica,</li>
<li><strong>7</strong>: skrzyżowanie (ang. intersection),</li>
<li><strong>8</strong>: numer budynku,</li>
<li><strong>9</strong>: nazwa lokacji (budynku, posiadłości, uczelni, centrum handlowego).</li>
</ul>
<p>Ze wszystkich powyższych nie udało mi się jedynie uzyskać wyniku o stopniu dokładności równym 7 dlatego nie mam pewności co on tak naprawdę oznacza. Nie wydaje mi się żeby to było skrzyżowanie, ale też nie mam pomysłu co innego może oznaczać słowo <em>intersection</em>.</p>
<p><br/><strong><a name="blad">Geolokalizacja zakończyła się błędem</a></strong><br/><br />
W przypadku wystąpienia błędu podczas geolokalizacji wywołana zostanie funkcja obsługująca zdarzenie GeocodingEvent.GEOCODING_FAILURE. Żeby zidentyfikować przyczynę błędu pobieramy jego kod znajdujący się w polu status zdarzenia i sprawdzamy jego znaczenie w <a href="http://code.google.com/intl/pl/apis/maps/documentation/flash/reference.html#ServiceStatus" target="_blank">dokumentacji</a> lub poniżej:</p>
<ul>
<li><strong>400</strong>: Zapytanie nie mogło zostać poprawnie przetworzone przez serwer</li>
<li><strong>500</strong>: Wystąpiły problemy po stronie serwera geolokalizacji.</li>
<li><strong>601</strong>: Nie podano adresu do geolokalizacji.</li>
<li><strong>602</strong>: Nieznany lub nieprawidłowy adres.</li>
<li><strong>603</strong>: Ze względów prawnych lub innych wynik zapytania nie może zostać zwrócony.</li>
<li><strong>620</strong>: Liczba dozwolonych zapytań w ciągu ostatnich 24 godzin została przekroczona.</li>
</ul>
<p>Przykładowa implementacja metody obsługującej zdarzenie niepomyślnego wyznaczenia trasy:</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> clientGeocoder_GEOCODING_FAILURE<span style="color: #66cc66;">&#40;</span>event:GeocodingEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">var</span> description:<span style="color: #0066CC;">String</span>;<br />
&nbsp; &nbsp; <span style="color: #b1b100;">switch</span> <span style="color: #66cc66;">&#40;</span>event.<span style="color: #006600;">directions</span>.<span style="color: #0066CC;">status</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">400</span>: description = <span style="color: #ff0000;">&quot;Zapytanie nie mogło zostać poprawnie przetworzone przez serwer.&quot;</span>; <span style="color: #b1b100;">break</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">500</span>: description = <span style="color: #ff0000;">&quot;Wystąpiły problemy po stronie serwera geolokalizacji.&quot;</span>; <span style="color: #b1b100;">break</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">601</span>: description = <span style="color: #ff0000;">&quot;Nie podano adresu do geolokalizacji.&quot;</span>; <span style="color: #b1b100;">break</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">603</span>: description = <span style="color: #ff0000;">&quot;Ze względów prawnych lub innych wynik zapytania nie może zostać zwrócony.&quot;</span>; <span style="color: #b1b100;">break</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">602</span>: description = <span style="color: #ff0000;">&quot;Nieznany lub nieprawidłowy adres.&quot;</span>; <span style="color: #b1b100;">break</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">603</span>: description = <span style="color: #ff0000;">&quot;Ze względów prawnych lub innych wynik zapytania nie może zostać zwrócony.&quot;</span>; <span style="color: #b1b100;">break</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">case</span> <span style="color: #cc66cc;">620</span>: description = <span style="color: #ff0000;">&quot;Liczba dozwolonych zapytań w ciągu ostatnich 24 godzin została przekroczona.&quot;</span>; <span style="color: #b1b100;">break</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">default</span>: description = <span style="color: #ff0000;">&quot;Nieobsługiwany błąd: &quot;</span>+event.<span style="color: #006600;">directions</span>.<span style="color: #0066CC;">status</span>;<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; Alert.<span style="color: #0066CC;">show</span><span style="color: #66cc66;">&#40;</span>description,<span style="color: #ff0000;">&quot;Błąd&quot;</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #66cc66;">&#125;</span></div></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.flexmaniak.pl/flex/google-maps-api-flex/flex-i-google-maps-api-geolokalizacja/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flex i Google Maps API &#8211; rysowanie po mapie</title>
		<link>http://blog.flexmaniak.pl/flex/google-maps-api-flex/flex-i-google-maps-api-rysowanie-po-mapie</link>
		<comments>http://blog.flexmaniak.pl/flex/google-maps-api-flex/flex-i-google-maps-api-rysowanie-po-mapie#comments</comments>
		<pubDate>Wed, 09 Jun 2010 15:38:03 +0000</pubDate>
		<dc:creator>Piotr Wierzgała</dc:creator>
				<category><![CDATA[Google Maps API]]></category>
		<category><![CDATA[GroundOverlay]]></category>
		<category><![CDATA[GroundOverlayOptions]]></category>
		<category><![CDATA[Overlays]]></category>
		<category><![CDATA[Polygon]]></category>
		<category><![CDATA[PolygonOptions]]></category>
		<category><![CDATA[Polyline]]></category>
		<category><![CDATA[PolylineOptions]]></category>

		<guid isPermaLink="false">http://blog.flexmaniak.pl/?p=445</guid>
		<description><![CDATA[Google Maps API umożliwia dodawanie trzech rodzajów graficznych elementów do mapy: lini (łamanych), wielokątów, obiektów graficznych. Do powyższej listy można zaliczyć jeszcze markery i okna informacyjne, ale ponieważ są one czymś więcej niż tylko graficznymi elementami mapy zostały omówione w oddzielnych wpisach. Spis treści Aplikacja Rysowanie linii (łamanych) Rysowanie wielokątów Wstawianie obiektów graficznych Aplikacja Poniżej [...]]]></description>
			<content:encoded><![CDATA[<p>Google Maps API umożliwia dodawanie trzech rodzajów graficznych elementów do mapy:</p>
<ul>
<li>lini (łamanych),</li>
<li>wielokątów,</li>
<li>obiektów graficznych.</li>
</ul>
<p>Do powyższej listy można zaliczyć jeszcze markery i okna informacyjne, ale ponieważ są one czymś więcej niż tylko graficznymi elementami mapy zostały omówione w oddzielnych wpisach.<br />
<span id="more-445"></span></p>
<h3>Spis treści</h3>
<ul>
<li><a href="#aplikacja">Aplikacja</a></li>
<li><a href="#polyline">Rysowanie linii (łamanych)</a></li>
<li><a href="#polygon">Rysowanie wielokątów</a></li>
<li><a href="#groundoverlays">Wstawianie obiektów graficznych</a></li>
</ul>
<h3><a name="aplikacja">Aplikacja</a></h3>
<p>Poniżej zamieszczam link do aplikacji, która może okazać się pomocna podczas wyznaczania współrzędnych geograficznych punktów na mapie. Dostęp do źródła można uzyskać poprzez kliknięcie prawym przyciskiem myszy w obszar aplikacji i wybranie opcji &#8222;View Source&#8221; z menu kontekstowego.<br />
<a href="http://blog.na14.pl/examples/GoogleMapsAPI/1.18/overlays/application/application.html" target="_blank" alt="Kliknij aby otworzyć aplikację w osobnym oknie"><img src="http://blog.na14.pl/examples/GoogleMapsAPI/1.18/overlays/application_thumb.jpg" /></a></p>
<h3><a name="polyline">Rysowanie linii (łamanych)</a></h3>
<p>Linię rysuje się za pomocą klasy <strong>Polyline</strong>, której konstruktor przyjmuje dwa parametry: tablicę współrzędnych geograficznych zawierającą wszystkie punkty, przez które będzie przechodzić linia oraz opcjonalny parametr będący obiektem klasy <strong>PolylineOptions</strong> definiujący właściwości rysowanej linii.</p>
<p>Za pomocą klasy PolylineOptions możemy zdefiniować dwa parametry rysowania linii:</p>
<ul>
<li><strong>geodesic</strong>: Określa czy podczas rysowania linii zostanie uwzględniona krzywizna kuli ziemskiej. Dla wartości <em>true</em> tego parametru kolejne punkty zostaną połączone za pomocą najkrótszej linii biegnącej po powierzchni Ziemi, w przeciwnym razie będzie to najkrótsza linia biegnąca po płaszczyźnie mapy. Domyślna wartość tego parametru to <em>false</em>.<br />
<a href="http://blog.na14.pl/examples/GoogleMapsAPI/1.18/overlays/geodesic.jpg" target="_blank"><img src="http://blog.na14.pl/examples/GoogleMapsAPI/1.18/overlays/geodesic_thumb.jpg"></a><br />
Obie linie na powyższym rysunku łączą te same punkty. Różnice w kształcie wynikają z tego, że parametr geodesic czerwonej linii jest ustawiony na <em>true</em> a niebieskiej na <em>false</em>.
</li>
<li><strong>strokeStyle</strong>: Określa takie parametry linii jak: kolor, grubość i przeźroczystość. Kolor linii powinien zostać podany w formie szesnastkowej (np. 0xff0000). Domyślne parametry linii to: kolor: 0x0000ff, grubość: 5, przeźroczystość: 0.45.</li>
</ul>
<p>Przykład:</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">var</span> polyline:Polyline = <span style="color: #000000; font-weight: bold;">new</span> Polyline<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#91;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">new</span> LatLng<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">51.24</span>, <span style="color: #cc66cc;">22.56</span><span style="color: #66cc66;">&#41;</span>, <br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">new</span> LatLng<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">40.70</span>, -<span style="color: #cc66cc;">74.02</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>,<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">new</span> PolylineOptions<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; geodesic: <span style="color: #000000; font-weight: bold;">true</span>, <br />
&nbsp; &nbsp; &nbsp; &nbsp; strokeStyle: <span style="color: #000000; font-weight: bold;">new</span> StrokeStyle<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">color</span>: 0xff0000,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; thickness: <span style="color: #cc66cc;">4</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alpha: <span style="color: #cc66cc;">0.7</span><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #66cc66;">&#41;</span>;</div></div>
<p>Żeby linia pojawiła się na mapie należy dodać ją do warstw mapy za pomocą metody <strong>addOverlay</strong>:</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">map.<span style="color: #006600;">addOverlay</span><span style="color: #66cc66;">&#40;</span>polyline<span style="color: #66cc66;">&#41;</span>;</div></div>
<p>W przypadku rysowania złożonych kształtów zaleca się kodowanie współrzędnych punktów tworzących linię za pomocą specjalnego algorytmu. Nie planuję o tym pisać dlatego zainteresowanych odsyłam do źródeł. Więcej o tworzeniu linii składających się z zakodowanych punktów można przeczytać <a href="http://code.google.com/intl/pl/apis/maps/documentation/flash/overlays.html#Encoded_Polylines" target="_blank">tu</a> a o samym algorytmie kodowaniu <a href="http://code.google.com/intl/pl/apis/maps/documentation/utilities/polylinealgorithm.html" target="_blank">tu</a>.</p>
<h3><a name="polygon">Rysowanie wielokątów</a></h3>
<p>Wielokąt rysuje się za pomocą klasy <strong>Polygon</strong>, której konstruktor przyjmuje dwa parametry: tablicę współrzędnych geograficznych zawierającą wszystkie wierzchołki wielokąta oraz opcjonalny parametr będący obiektem klasy <strong>PolygonOptions</strong> definiujący właściwości rysowanego wielokąta.</p>
<p>Przykładowy wielokąt narysowany na mapie:<br />
<a href="http://blog.na14.pl/examples/GoogleMapsAPI/1.18/overlays/polygon.jpg" target="_blank"><img src="http://blog.na14.pl/examples/GoogleMapsAPI/1.18/overlays/polygon_thumb.jpg"></a></p>
<p>Zaleca się zamykanie wielokątów poprzez podawanie ostatniego punktu równego pierwszemu. Teoretycznie niezastosowanie się do tej reguły może powodować niepożądane efekty, jednak z moich kilku szybkich testów wynika, że wielokąty rysują się tak samo, niezależnie od tego czy ostatni wierzchołek pokrywa się z pierwszym czy nie.</p>
<p>Za pomocą klasy PolygonOptions możemy zdefiniować trzy parametry rysowania wielokątów:</p>
<ul>
<li><strong>fillStyle</strong>: Określa kolor i przeźroczystość wypełnienia wielokąta. Domyślne wartości wypełnienia to: kolor: 0x0055ff, przeźroczystość: 0.25.</li>
<li><strong>strokeStyle</strong>: Określa kolor, grubość i przeźroczystość obrysowania wielokąta. Domyślne wartości obrysowania to: kolor: 0x0000ff, grubość: 2, przeźroczystość: 0.45.</li>
<li><strong>tooltip</strong>: Informacja tekstowa wyświetlana po najechaniu kursorem myszy na wielokąt.</li>
</ul>
<p>Przykład:</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">var</span> polygon:Polygon = <span style="color: #000000; font-weight: bold;">new</span> Polygon<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#91;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">new</span> LatLng<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">51.24</span>, <span style="color: #cc66cc;">22.56</span><span style="color: #66cc66;">&#41;</span>,<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">new</span> LatLng<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">52.23</span>, <span style="color: #cc66cc;">21.01</span><span style="color: #66cc66;">&#41;</span>,<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">new</span> LatLng<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">51.76</span>, <span style="color: #cc66cc;">19.45</span><span style="color: #66cc66;">&#41;</span>,<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">new</span> LatLng<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">51.24</span>, <span style="color: #cc66cc;">22.56</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>, <br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">new</span> PolygonOptions<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; strokeStyle: <span style="color: #000000; font-weight: bold;">new</span> StrokeStyle<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">color</span>: 0xff0000,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; thickness: <span style="color: #cc66cc;">3</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alpha: <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>, <br />
&nbsp; &nbsp; &nbsp; &nbsp; fillStyle: <span style="color: #000000; font-weight: bold;">new</span> FillStyle<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">color</span>: 0x00ff00,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alpha: <span style="color: #cc66cc;">0.5</span><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; tooltip: <span style="color: #ff0000;">&quot;Ten wielokąt ma czerwone obrysowanie.&quot;</span>,<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #66cc66;">&#41;</span>;</div></div>
<p>Żeby wielokąt pojawił się na mapie należy dodać go do warstw mapy za pomocą metody <strong>addOverlay</strong>:</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">map.<span style="color: #006600;">addOverlay</span><span style="color: #66cc66;">&#40;</span>polygon<span style="color: #66cc66;">&#41;</span>;</div></div>
<h3><a name="groundoverlays">Wstawianie obiektów graficznych</a></h3>
<p>Obiekt graficzny wstawia się za pomocą klasy <strong>GroundOverlay </strong>, której konstruktor przyjmuje trzy parametry: referencję do obiektu graficznego typu DisplayObject, współrzędne obszaru, na którym grafika zostanie wyświetlona oraz opcjonalny parametr będący obiektem klasy <strong>GroundOverlayOptions</strong> definiujący różne cechy wstawianej grafiki.</p>
<p>Przykładowy obiekt graficzny wstawiony na mapę:<br />
<a href="http://blog.na14.pl/examples/GoogleMapsAPI/1.18/overlays/ground_overlay.jpg" target="_blank"><img src="http://blog.na14.pl/examples/GoogleMapsAPI/1.18/overlays/ground_overlay_thumb.jpg"></a></p>
<p>Za pomocą klasy GroundOverlayOptions możemy zdefiniować pięć parametrów:</p>
<ul>
<li><strong>applyProjection</strong>: Wartość logiczna określająca czy dany obiekt graficzny wymaga rzutowania. W przypadku ustawienia wartości <em>true</em> obiekt graficzny zostanie poddany rzutowaniu podczas renderowania jego warstwy (overlay), w przeciwnym razie zostanie założone, że obiekt został już poddany rzutowaniu. Domyślna wartość tego parametru to <em>false</em>. </li>
<li><strong>renderContent</strong>: Wartość logiczna określajaca czy dany obiekt graficzny będzie renderowany na mapie czy też wyświetlany na niej w zwyczajny sposób z zastosowaniem odpowiednich przekształceń geometrycznych. Domyślanie renderContent posiada wartość <em>true</em>. W przypadku zmiany wartości na <em>false</em> parametr applyProjection zostanie zignorowany, obiekt graficzny nie będzie poddawany wygładzaniu oraz straci wsparcie 3D.<br/><br />
Fragment obiektu graficznego z wygładzaniem i bez wygładzania:<br />
<a href="http://blog.na14.pl/examples/GoogleMapsAPI/1.18/overlays/renderContent_smooth.jpg" target="_blank"><img src="http://blog.na14.pl/examples/GoogleMapsAPI/1.18/overlays/renderContent_smooth_thumb.jpg"></a>
</li>
<li><strong>rotation</strong>: Określa obrót obiektu graficznego podany w stopniach i wykonany zgodnie z ruchem wskazówek zegara. Sposób jaki obrót zostanie wykonany zależy od wartości parametru applyProjection. Jeżeli jego wartość to <em>false</em> wtedy zostanie uznane, że obiekt graficzny został już poddany rzutowaniu i wykonany zostanie obórt. W przeciwnym razie obiekt graficzny zostanie poddany rzutowaniu na powierzchnię sfery i dopiero wtedy obrócony czego konsekwencją będzie zniekształcenie obiektu graficznego zgodnie z krzywizną sfery.<br/><br />
Obrót obiektu graficznego o 180 stopni względem jego środka przy różnych wartościach parametru applyProjection:<br />
<a href="http://blog.na14.pl/examples/GoogleMapsAPI/1.18/overlays/rotation.jpg" target="_blank"><img src="http://blog.na14.pl/examples/GoogleMapsAPI/1.18/overlays/rotation_thumb.jpg"></a>
</li>
<li><strong>rotationContentCenter</strong>: Współrzędne punktu, wokół którego obiekt graficzny będzie obracany. Domyślnie obrót nastąpi wokół środka obiektu graficznego.</li>
<li><strong>strokeStyle</strong>: Określa obrysowanie obiektu graficznego. Korzystanie z tego parametru wygląda tak samo jak w przypadku linii i wielokątów. Obrysowanie zadziałało u mnie dopiero po ustawieniu parametru renderContent na <em>false</em>, trudno powiedzieć dlaczego &#8211; w dokumentacji nie ma mowy o istnieniu takiej zależności.</li>
</ul>
<p>Przykład:</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">var</span> groundOverlay:GroundOverlay = <span style="color: #000000; font-weight: bold;">new</span> GroundOverlay<span style="color: #66cc66;">&#40;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">new</span> ShipIcon<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> as DisplayObject,<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">new</span> LatLngBounds<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> LatLng<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">54.48</span>,<span style="color: #cc66cc;">18.64</span><span style="color: #66cc66;">&#41;</span>, <span style="color: #000000; font-weight: bold;">new</span> LatLng<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">54.53</span>,<span style="color: #cc66cc;">18.88</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>,<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">new</span> GroundOverlayOptions<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; strokeStyle: <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">color</span>: 0xff0000,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alpha: <span style="color: #cc66cc;">1</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; thickness: <span style="color: #cc66cc;">3</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; rotation: <span style="color: #cc66cc;">180</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; rotationContentCenter: <span style="color: #000000; font-weight: bold;">new</span> Point<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">100</span>,<span style="color: #cc66cc;">100</span><span style="color: #66cc66;">&#41;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; applyProjection: <span style="color: #000000; font-weight: bold;">true</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; renderContent: <span style="color: #000000; font-weight: bold;">false</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #66cc66;">&#41;</span>;</div></div>
<p>Gdzie ShipIcon jest ikoną statku wkompilowaną w aplikację.<br/></p>
<p>Żeby obiekt graficzny pojawił się na mapie należy dodać go do warstw mapy za pomocą metody <strong>addOverlay</strong>:</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">map.<span style="color: #006600;">addOverlay</span><span style="color: #66cc66;">&#40;</span>groundOverlay<span style="color: #66cc66;">&#41;</span>;</div></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.flexmaniak.pl/flex/google-maps-api-flex/flex-i-google-maps-api-rysowanie-po-mapie/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flex i Google Maps API &#8211; okna informacjyne</title>
		<link>http://blog.flexmaniak.pl/flex/google-maps-api-flex/flex-i-google-maps-api-okna-informacjyne</link>
		<comments>http://blog.flexmaniak.pl/flex/google-maps-api-flex/flex-i-google-maps-api-okna-informacjyne#comments</comments>
		<pubDate>Wed, 09 Jun 2010 15:37:53 +0000</pubDate>
		<dc:creator>Piotr Wierzgała</dc:creator>
				<category><![CDATA[Google Maps API]]></category>
		<category><![CDATA[InfoWindow]]></category>
		<category><![CDATA[InfoWindowOptions]]></category>

		<guid isPermaLink="false">http://blog.flexmaniak.pl/?p=695</guid>
		<description><![CDATA[Okna informacyjne pozwalają wyświetlać dane w tak zwanych &#8222;dymkach&#8221; pojawiających na mapie po kliknięciu w marker. Spis treści Aplikacja Otwarcie okna informacyjnego Opcje okna informacyjnego Aplikacja Poniższa aplikacja pozwala na przetestowanie działania większości pól opcji okna informacyjnego. Dostęp do źródła można uzyskać poprzez kliknięcie prawym przyciskiem myszy w obszar aplikacji i wybranie opcji &#8222;View Source&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>Okna informacyjne pozwalają wyświetlać dane w tak zwanych &#8222;dymkach&#8221; pojawiających na mapie po kliknięciu w marker.</p>
<div style="width: 100%; text-align:center"><img src="http://blog.na14.pl/examples/GoogleMapsAPI/1.18/information_windows/information_window.jpg" alt="okno informacyjne"/></div>
<p><span id="more-695"></span></p>
<h3>Spis treści</h3>
<ul>
<li><a href="#aplikacja">Aplikacja</a></li>
<li><a href="#otwarcie">Otwarcie okna informacyjnego</a></li>
<li><a href="#opcje">Opcje okna informacyjnego</a></li>
</ul>
<h3><a name="aplikacja">Aplikacja</a></h3>
<p>Poniższa aplikacja pozwala na przetestowanie działania większości pól opcji okna informacyjnego. Dostęp do źródła można uzyskać poprzez kliknięcie prawym przyciskiem myszy w obszar aplikacji i wybranie opcji &#8222;View Source&#8221; z menu kontekstowego.<br />
<a href="http://blog.na14.pl/examples/GoogleMapsAPI/1.18/information_windows/application/application.html" target="_blank" alt="Kliknij aby otworzyć aplikację w osobnym oknie"><img src="http://blog.na14.pl/examples/GoogleMapsAPI/1.18/information_windows/application_thumb.jpg" /></a></p>
<h3><a name="otwarcie">Otwarcie okna informacyjnego</a></h3>
<p>Okno informacyjne nie posiada konstruktora. Jest tworzone jedynie poprzez wywołanie metody <strong>openInfoWindow</strong> klasy Marker. Na poniższym przykładzie przedstawiony jest sposób otwarcia okna informacyjnego w funkcji obsługującej zdarzenie kliknięcia w marker:</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0066CC;">private</span> &nbsp;<span style="color: #000000; font-weight: bold;">function</span> marker_CLICK<span style="color: #66cc66;">&#40;</span>event:MapEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; event.<span style="color: #0066CC;">target</span>.<span style="color: #006600;">openInfoWindow</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #66cc66;">&#125;</span></div></div>
<p>Metoda openInfoWindow przyjmuje dwa opcjonalne parametry:</p>
<ul>
<li><strong>options</strong>: Obiekt klasy <strong>InfoWindowOptions</strong> definiujący właściwości okna informacyjnego.</li>
<li><strong>useSeparatePane</strong>: Wartość logiczna określająca czy okno informacyjne zostanie wygenerowane na własnej warstwie. Podczas korzystania z mapy 3D domyślnie okno informacyjne generowane jest na tej samej warstwie co marker dzięki czemu jest umieszczane w tej samej odległości od obserwatora co marker. Ustawienie tego parametru na <em>true</em> w przypadku korzystania z mapy 3D wymusi wygenerowanie okna informacyjnego na oddzielnej warstwie tak jak ma to miejsce w przypadku korzystania z mapy 2D.</li>
</ul>
<h3><a name="opcje">Opcje okna informacyjnego</a></h3>
<p>Za pomocą obiektu klasy InfoWindowOptions możemy ustawić następujące właściwości okna informacyjnego:</p>
<ul>
<li><strong>content</strong>: Treść pojawiająca się w oknie informacyjnym.</li>
<li><strong>contentFormat</strong>: Obiekt typu <a href="http://livedocs.adobe.com/flex/3/langref/flash/text/TextFormat.html">TextFormat</a> definiujący wygląd treści podanej w polu <em>content</em>.</li>
<li><strong>contentHTML</strong>: Treść pojawiająca się oknie informacyjnym zapisana w formacie HTML.</li>
<li><strong>contentStyleSheet</strong>: Obiekt typu <a href="http://livedocs.adobe.com/flex/3/langref/flash/text/StyleSheet.html">StyleSheet</a> definiujący arkusz stylów treści okna informacyjnego.</li>
<li><strong>cornerRadius</strong>: Stopień zaokrąglenia narożników okna informacyjnego.</li>
<li><strong>customCloseRect</strong>: Obiekt typu <a href="http://livedocs.adobe.com/flex/3/langref/flash/geom/Rectangle.html">Rectangle</a> określający obszar, w obrębie którego kliknięcie będzie zamykało okno informacyjne. W przypadku kiedy ustawiona jest własność <em>customContent</em> wtedy wyznaczony obszar zamykający okno nie będzie widoczny, ale pozostanie aktywny. Natomiast w przypadku kiedy własność <em>customContent</em> jest równa <em>null</em> wtedy obszar customCloseRect może zostać użyty do w celu narysowania przycisku zamykającego okno w wybranym miejscu.<br/><br/>
<p>		Poniższy rysunek pokazuje domyśle ustawienie przycisku zamykającego okno oraz jego przykładowe ustawienie za pomocą pola <em>customCloseRect</em>.</p>
<div style="width: 100%; text-align:center"><img src="http://blog.na14.pl/examples/GoogleMapsAPI/1.18/information_windows/customCloseRect.jpg" alt="customCloseRect"/></div>
</li>
<li><strong>customContent</strong>: Obiekt typu <a href="http://livedocs.adobe.com/flex/3/langref/flash/display/DisplayObject.html">DisplayObject</a>, który zostanie narysowany zamiast okna informacyjnego.
	</li>
<li><strong>customOffset</strong>: Obiekt typu Point określający przesunięcie obiektu zdefiniowanego w polu <em>customContent</em>. W przypadku kiedy pole <em>customContent</em> nie jest ustawione lub kiedy pole <em>drawDefaultFrame</em> posiada wartość <em>true</em> wtedy pole <em>customOffset</em> nie będzie brane pod uwagę podczas rysowania okna informacyjnego.</li>
<li><strong>drawDefaultFrame</strong>: Wartość logiczna określająca czy okno informacyjne mają być rysowane jako tło obiektu zdefiniowanego w polu <em>customContent</em>.<br/><br/>
<p>		Poniższy rysunek przedstawia zestawienie wyniku rysowania okna informacyjnego ze zdefiniowanym polem <em>customContent</em> przy włączonej i wyłączonej opcji <em>drawDefaultFrame</em>.</em>.</p>
<div style="width: 100%; text-align:center"><img src="http://blog.na14.pl/examples/GoogleMapsAPI/1.18/information_windows/drawDefaultFrame.jpg" alt="drawDefaultFrame"/></div>
</li>
<li><strong>fillStyle</strong>: Obiekt typu <a href="http://code.google.com/intl/pl/apis/maps/documentation/flash/reference.html#FillStyle">FillStyle</a> określający styl wypełnienia okna informacyjnego.</li>
<li><strong>hasCloseButton</strong>: Wartość logiczna określająca czy na oknie informacyjnym będzie rysowany przycisk zamykający.</li>
<li><strong>hasShadow</strong>: Wartość logiczna określająca czy okno informacyjne będzie rzucało cień na mapę.</li>
<li><strong>hasTail</strong>: Wartość logiczna określająca czy okno informacyjne będzie posiadać ogon.</li>
<li><strong>height</strong>: Wysokość okna informacyjnego.</li>
<li><strong>padding</strong>: Wielkość odstępu pomiędzy tytułem i treścią okna informacyjnego a jego obramowaniem.</li>
<li><strong>pointOffset</strong>: Obiekt typu <a href="http://livedocs.adobe.com/flex/3/langref/flash/geom/Point.html">Point</a> określający przesunięcie okna informacyjnego.</li>
<li><strong>strokeStyle</strong>: Obiekt typu <a href="http://code.google.com/intl/pl/apis/maps/documentation/flash/reference.html#StrokeStyle">StrokeStyle</a> określający styl obrysowania okna informacyjnego.</li>
<li><strong>tailAlign</strong>: Wyrównanie ogona okna informacyjnego. Dostępne wartości tego pola to:
<ul>
<li><em>InfoWindowOptions.ALIGN_LEFT</em>,</li>
<li><em>InfoWindowOptions.ALIGN_CENTER</em>,</li>
<li><em>InfoWindowOptions.ALIGN_RIGHT</em>.</li>
</ul>
</li>
<li><strong>tailHeight</strong>: Wysokość ogona okna informacyjnego.</li>
<li><strong>tailOffset</strong>: Obiekt typu <a href="http://livedocs.adobe.com/flex/3/langref/flash/geom/Point.html">Point</a> określający przesunięcie ogona okna informacyjnego.</li>
<li><strong>tailWidth</strong>: Szerokość ogona okna informacyjnego.</li>
<li><strong>title</strong>: Nagłówek okna informacyjnego.</li>
<li><strong>titleFormat</strong>: Obiekt typu <a href="http://livedocs.adobe.com/flex/3/langref/flash/text/TextFormat.html">TextFormat</a> definiujący wygląd napisu podanego w polu <em>title</em>.</li>
<li><strong>titleHTML</strong>: Nagłówek okna informacyjnego zapisany w formacie HTML.</li>
<li><strong>titleStyleSheet</strong>: Obiekt typu <a href="http://livedocs.adobe.com/flex/3/langref/flash/text/StyleSheet.html">StyleSheet</a> definiujący arkusz stylów tytułu okna informacyjnego</li>
<li><strong>width</strong>: Szerokość okna informacyjnego.</li>
</ul>
<p>Przykładowe zastosowanie:</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:100%;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">var</span> infoWindowOptions:InfoWindowOptions = <span style="color: #000000; font-weight: bold;">new</span> InfoWindowOptions<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; fillStyle: <span style="color: #000000; font-weight: bold;">new</span> FillStyle<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">color</span>: 0xffffff, <br />
&nbsp; &nbsp; &nbsp; &nbsp; alpha: <span style="color: #cc66cc;">1</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>,<br />
&nbsp; &nbsp; strokeStyle: <span style="color: #000000; font-weight: bold;">new</span> StrokeStyle<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">color</span>: 0x000000,<br />
&nbsp; &nbsp; &nbsp; &nbsp; alpha: <span style="color: #cc66cc;">1</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; thickness: <span style="color: #cc66cc;">2</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>,<br />
&nbsp; &nbsp; title: <span style="color: #ff0000;">&quot;Title&quot;</span>,<br />
&nbsp; &nbsp; hasTail: <span style="color: #000000; font-weight: bold;">true</span>,<br />
&nbsp; &nbsp; hasCloseButton: <span style="color: #000000; font-weight: bold;">true</span>,<br />
&nbsp; &nbsp; contentHTML: <span style="color: #ff0000;">&quot;&lt;b&gt;ContentHTML&lt;/b&gt;&quot;</span>,<br />
&nbsp; &nbsp; padding: <span style="color: #cc66cc;">10</span>,<br />
&nbsp; &nbsp; widht: <span style="color: #cc66cc;">320</span>,<br />
&nbsp; &nbsp; <span style="color: #0066CC;">height</span>: <span style="color: #cc66cc;">100</span>,<br />
&nbsp; &nbsp; tailOffset: <span style="color: #cc66cc;">20</span>,<br />
&nbsp; &nbsp; pointOffset: <span style="color: #000000; font-weight: bold;">new</span> Point<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span>,-<span style="color: #cc66cc;">60</span><span style="color: #66cc66;">&#41;</span>,<br />
&nbsp; &nbsp; drawDefaultFrame: <span style="color: #000000; font-weight: bold;">false</span>,<br />
&nbsp; &nbsp; hasShadow: <span style="color: #000000; font-weight: bold;">false</span>,<br />
&nbsp; &nbsp; cornerRadius: <span style="color: #cc66cc;">20</span><br />
<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div></div>
<p>Żeby zastosować tak stworzony obiekt klasy InfoWindowOptions przekazujemy go jako parametr metody <em>openInfoWindow</em> klasy Marker.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.flexmaniak.pl/flex/google-maps-api-flex/flex-i-google-maps-api-okna-informacjyne/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flex i Google Maps API &#8211; markery</title>
		<link>http://blog.flexmaniak.pl/flex/google-maps-api-flex/flex-i-google-maps-api-markery</link>
		<comments>http://blog.flexmaniak.pl/flex/google-maps-api-flex/flex-i-google-maps-api-markery#comments</comments>
		<pubDate>Wed, 09 Jun 2010 15:37:38 +0000</pubDate>
		<dc:creator>Piotr Wierzgała</dc:creator>
				<category><![CDATA[Google Maps API]]></category>
		<category><![CDATA[Marker]]></category>
		<category><![CDATA[MarkerOptions]]></category>

		<guid isPermaLink="false">http://blog.flexmaniak.pl/?p=651</guid>
		<description><![CDATA[Markery służą do oznaczania wybranych pozycji na mapie. Domyślna ikona markera to mały, blado-czerwony, obrazek z czarnym obramowaniem w kształcie odwróconej łzy. Spis treści Aplikacja Marker Opcje markera Aplikacja Poniższa aplikacja pozwala na przetestowanie działania większości pól opcji markera. Dostęp do źródła można uzyskać poprzez kliknięcie prawym przyciskiem myszy w obszar aplikacji i wybranie opcji [...]]]></description>
			<content:encoded><![CDATA[<p>Markery służą do oznaczania wybranych pozycji na mapie. Domyślna ikona markera to mały, blado-czerwony, obrazek z czarnym obramowaniem w kształcie odwróconej łzy.</p>
<div style="width: 100%; text-align:center"><img src="http://blog.na14.pl/examples/GoogleMapsAPI/1.18/markers/marker.jpg" alt="marker"/></div>
<p><span id="more-651"></span></p>
<h3>Spis treści</h3>
<ul>
<li><a href="#aplikacja">Aplikacja</a></li>
<li><a href="#marker">Marker</a></li>
<li><a href="#opcje">Opcje markera</a></li>
</ul>
<h3><a name="aplikacja">Aplikacja</a></h3>
<p>Poniższa aplikacja pozwala na przetestowanie działania większości pól opcji markera. Dostęp do źródła można uzyskać poprzez kliknięcie prawym przyciskiem myszy w obszar aplikacji i wybranie opcji &#8222;View Source&#8221; z menu kontekstowego.<br />
<a href="http://blog.na14.pl/examples/GoogleMapsAPI/1.18/markers/application/application.html" target="_blank" alt="Kliknij aby otworzyć aplikację w osobnym oknie"><img src="http://blog.na14.pl/examples/GoogleMapsAPI/1.18/markers/application_thumb.jpg" /></a></p>
<h3><a name="marker">Marker</a></h3>
<p>Marker tworzymy za pomocą klasy <strong>Marker</strong>. Jej konstruktor przyjmuje dwa parametry: współrzędne geograficzne, które będzie oznaczał marker, oraz opcjonalnie obiekt klasy <strong>MarkerOptions </strong>definiujący właściwości markera. Po stworzeniu markera dodajemy go do mapy za pomocą metody <strong>addOverlay</strong>.</p>
<p>Przykład:</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">var</span> marker:Marker = <span style="color: #000000; font-weight: bold;">new</span> Marker<span style="color: #66cc66;">&#40;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">new</span> LatLng<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">51.24</span>,<span style="color: #cc66cc;">22.56</span><span style="color: #66cc66;">&#41;</span>,<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">new</span> MarkerOptions<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #66cc66;">&#41;</span>;<br />
map.<span style="color: #006600;">addOverlay</span><span style="color: #66cc66;">&#40;</span>marker<span style="color: #66cc66;">&#41;</span>;</div></div>
<h3><a name="opcje">Opcje markera</a></h3>
<p>Właściwości markera jakie możemy ustawić za pomocą klasy <strong>MarkerOptions</strong> to:</p>
<ul>
<li><strong>clickable</strong>: Wartość logiczna określająca czy marker będzie klikalny. Markery, które nie są klikalne nie generują zdarzeń MapMouseEvent.CLICK i MapMouseEvent.DOUBLE_CLICK, ale mogą, o ile ich zmienna draggable ma wartość true, generować inne zdarzenia. Nad markerami, które nie są klikalne nie pojawia się kursor dłoni.</li>
<li><strong>distanceScaling</strong>: Wartość logiczna określająca czy marker będzie skalowany wraz ze zmianą odległości na mapie 3D. Wartość tej zmiennej jest ignorowana jeżeli mapa 3D nie jest aktywna.</li>
<li><strong>draggable</strong>: Wartość logiczna określająca czy marker będzie mógł przeciągany po mapie.</li>
<li><strong>gravity</strong>: Siła z jaką marker będzie przyciągany do mapy.</li>
<li><strong>hasShadow</strong>: Wartość logiczna określająca czy marker będzie rzucał cień.</li>
<li><strong>tooltip</strong>: Treść napisu pojawiającego się po najechaniu na marker.</li>
<li><strong>label</strong>: Treść napisu wyświetlanego na markerze.</li>
<li><strong>labelFormat</strong>: Obiekt typu <a href="http://livedocs.adobe.com/flex/3/langref/flash/text/TextFormat.html">TextFormat</a> definiujący wygląd napisu wyświetlanego na markerze.</li>
<li><strong>radius</strong>: Określa promień (rozmiar) markera.</li>
<li><strong>fillStyle</strong>: Obiekt typu <a href="http://code.google.com/intl/pl/apis/maps/documentation/flash/reference.html#FillStyle">FillStyle</a> określający styl wypełnienia markera.</li>
<li><strong>strokeStyle</strong>: Obiekt typu <a href="http://code.google.com/intl/pl/apis/maps/documentation/flash/reference.html#StrokeStyle">StrokeStyle</a> określający styl obrysowania markera.</li>
<li><strong>icon</strong>: Obiekt typu <a href="http://livedocs.adobe.com/flex/3/langref/flash/display/DisplayObject.html">DisplayObject</a> określający ikonę markera.</li>
<li><strong>iconAlignment</strong>: Określa punkt markera, który zostanie użyty do wyrównania jego pozycji względem przypisanych mu współrzędnych geograficznych. </li>
<li><strong>iconOffset</strong>: Obiekt klasy <a href="http://livedocs.adobe.com/flex/3/langref/flash/geom/Point.html">Point</a> określający wartości przesunięcia markera wzdłuż osi X i Y względem punktu wyrównania markera (icon alignment).</li>
</ul>
<p>Przykład:</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">var</span> markerOptions:MarkerOptions = <span style="color: #000000; font-weight: bold;">new</span> MarkerOptions<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; clickable: <span style="color: #000000; font-weight: bold;">true</span>,<br />
&nbsp; &nbsp; hasShadow: <span style="color: #000000; font-weight: bold;">true</span>,<br />
&nbsp; &nbsp; radius: <span style="color: #cc66cc;">20</span>,<br />
&nbsp; &nbsp; gravity: <span style="color: #cc66cc;">10</span>,<br />
&nbsp; &nbsp; iconOffset: <span style="color: #000000; font-weight: bold;">new</span> Point<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span>,<span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>,<br />
&nbsp; &nbsp; tooltip: <span style="color: #ff0000;">&quot;tooltip&quot;</span>,<br />
&nbsp; &nbsp; label: <span style="color: #ff0000;">&quot;label &quot;</span>,<br />
&nbsp; &nbsp; fillStyle: <span style="color: #000000; font-weight: bold;">new</span> FillStyle<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">color</span>: 0xff0000,<br />
&nbsp; &nbsp; &nbsp; &nbsp; alpha: .7<br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>,<br />
&nbsp; &nbsp; strokeStyle: <span style="color: #000000; font-weight: bold;">new</span> StrokeStyle<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">color</span>: 0x000000,<br />
&nbsp; &nbsp; &nbsp; &nbsp; alpha: <span style="color: #cc66cc;">1</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; thickness: <span style="color: #cc66cc;">2</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</div></div>
<p>Żeby zastosować tak stworzony obiekt klasy MarkerOptions przekazujemy go jako drugi parametr konstruktora klasy Marker lub jako parametr metody <strong>setOptions</strong> klasy Marker.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.flexmaniak.pl/flex/google-maps-api-flex/flex-i-google-maps-api-markery/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Flex i Google Maps API &#8211; wstęp</title>
		<link>http://blog.flexmaniak.pl/flex/google-maps-api-flex/flex-i-google-maps-api-wstep</link>
		<comments>http://blog.flexmaniak.pl/flex/google-maps-api-flex/flex-i-google-maps-api-wstep#comments</comments>
		<pubDate>Wed, 09 Jun 2010 15:36:39 +0000</pubDate>
		<dc:creator>Piotr Wierzgała</dc:creator>
				<category><![CDATA[Google Maps API]]></category>

		<guid isPermaLink="false">http://blog.flexmaniak.pl/?p=410</guid>
		<description><![CDATA[Zbiór informacji na temat bibiloteki Google Maps jakie można uznać za wstępne to: podstawowe warunki korzystanie z map, sposób dodania mapy w aplikacji, różne problemy związane z użytkowaniem map Google oraz przydatne linki. Spis treści Warunki korzystania z map Dodanie mapy do aplikacji Problem bindowania Przydatne linki Warunki korzystania z map Pełną licencję korzystania z [...]]]></description>
			<content:encoded><![CDATA[<p>Zbiór informacji na temat bibiloteki Google Maps jakie można uznać za wstępne to: podstawowe warunki korzystanie z map, sposób dodania mapy w aplikacji, różne problemy związane z użytkowaniem map Google oraz przydatne linki.<br />
<span id="more-410"></span></p>
<h3>Spis treści</h3>
<ul>
<li><a href="#warunki">Warunki korzystania z map</a></li>
<li><a href="#dodanie">Dodanie mapy do aplikacji</a></li>
<li><a href="#bindowanie">Problem bindowania</a></li>
<li><a href="#linki">Przydatne linki</a></li>
</ul>
<h3><a name="warunki">Warunki korzystania z map</a></h3>
<p>Pełną licencję korzystania z map Google można przeczytać <a href="http://code.google.com/intl/pl/apis/maps/terms.html">tu</a> lub podczas generowania klucza &#8211; o czym mowa w sekcji &#8222;<a href="#dodanie">Dodanie mapy do aplikacji</a>&#8222;. Niektóre z najważniejszych warunków licencji na jakie zwraca uwagę Google to:</p>
<ul>
<li>Nie ma żadnego limitu na liczbę stron wygenerowanych z użyciem Google Maps API.</li>
<li>Limit na liczbę geolokalizacji wynosi 2 500 na dobę. Po przekroczeniu tej bariery geocoder będzie zwracał błąd o statusie 620. Ten sam błąd może być zwracany również w przypadku zbyt częstego wysyłania zapytań o geolokalizację.</li>
<li>Korzystanie z usługi Google Maps musi być całkowicie darmowe i ogólnodostepne.</li>
<li>Google Maps nie zawiera żadnej formy reklamy narzuconej przez Google a gdyby miałoby się to zmienić użytkownicy zostaną o tym poinformowani z co najmniej 90-o dniowym wyprzedzeniem za pomocą <a href="http://code.google.com/intl/pl/apis/maps/faq.html#notify">subskrypcji lub grupy dyskusyjnej</a>.</li>
<li>Nie zezwala się na zasłanianie lub edytowanie loga Google widocznego na mapie.</li>
</ul>
<p>Całkiem dokładny opis warunków umowy znalazłem na <a href="http://maciejmarczewski.blogspot.com/2009/12/regulamin-google-maps-api-czyli-co.html">blogu</a> Macieja Marczewskiego i zgodnie z zasadą Ockhama nie będę mnożył bytów ponad potrzebę pisząc ponownie to samo tylko odsyłam wszystkich zainteresowanych na wspomniany blog.</p>
<h3><a name="dodanie">Dodanie mapy do aplikacji</a></h3>
<p>Zaczynamy od utworzenia <a href="http://code.google.com/intl/pl/apis/maps/signup.html">klucza Google Maps API</a>, dzięki któremu będziemy mogli korzystać z biblioteki Google Maps. Każdy wygenerowany klucz będzie działać tylko w obrębie domeny lub katalogu jaki podamy podczas generowania klucza. Nie ma ograniczenia na ilość wygenerowanych kluczy.</p>
<p>Następnie pobieramy interesujące nas <a href="http://maps.googleapis.com/maps/flash/release/sdk.zip">biblioteki</a>. W pobranym archiwum znajdziemy dwa pliki o rozszerzeniu <strong>swc</strong>. Wybieramy z nich ten, który ma w nazwie słowo <strong>flex</strong> i kopiujemy go do katalogu <strong>libs</strong> naszego projektu. Pozostały plik przeznaczony jest dla aplikacji typu <em>AIR</em>.</p>
<p>Na koniec dodajemy do aplikacji poniższy kod a jako wartość atrybutu &#8216;<em>key</em>&#8216; podajemy klucz, którzy przed chwilą wygenerowaliśmy.</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">&lt;</span>maps:Map id=<span style="color: #ff0000;">&quot;map&quot;</span><br />
&nbsp; &nbsp; <span style="color: #0066CC;">key</span>=<span style="color: #ff0000;">&quot;Klucz_Google_Maps_API&quot;</span><br />
&nbsp; &nbsp; mapevent_mapready=<span style="color: #ff0000;">&quot;onMapReady(event)&quot;</span> <span style="color: #66cc66;">/&gt;</span></div></div>
<p>W funkcji obsługującej zdarzenie <strong>mapevent_mapready</strong> umieszczamy kod, który zostanie wykonany po utworzeniu obiektu mapy. Jeżeli spróbujemy zrobić coś z mapą przed wywołaniem tego zdarzenia najprawdopodobniej zobaczymy błąd odwołania do obiektu typu <strong>null</strong>.</p>
<p>Przykładowa definicja funkcji obsługującej zdarzenie mapevent_mapready:</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> onMapReady<span style="color: #66cc66;">&#40;</span>event:MapEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; map.<span style="color: #006600;">setCenter</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> LatLng<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">50.06</span>,<span style="color: #cc66cc;">19.94</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>; <br />
&nbsp; &nbsp; map.<span style="color: #006600;">addControl</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> ZoomControl<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp; map.<span style="color: #006600;">addControl</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> MapTypeControl<span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #66cc66;">&#125;</span></div></div>
<h3><a name="bindowanie">Problem bindowania</a></h3>
<p>Bindowanie nie działa z obiektami biblioteki Google Maps. Jeżeli chcielibyście w swojej aplikacji umieścić slider, który zmieniałby np. rozmiar markera na pewno nie osiągniecie tego przypisując polu value slidera wartosć pola radius markera.</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">&lt;</span>s:HSlider value=<span style="color: #ff0000;">&quot;{marker.radius}&quot;</span><span style="color: #66cc66;">/&gt;</span></div></div>
<p>Sposobem w jaki można to obejść jest dodanie nasłuchiwania na zdarzenie chage slidera i zmienianie rozmiaru markera w metodzie obsługującej to zdarzenie:</p>
<div class="codecolorer-container actionscript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="actionscript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #66cc66;">&lt;</span>fx:Script<span style="color: #66cc66;">&gt;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&lt;!</span><span style="color: #66cc66;">&#91;</span>CDATA<span style="color: #66cc66;">&#91;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> radiusSlider_CHANGE<span style="color: #66cc66;">&#40;</span>event:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span> <span style="color: #66cc66;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; marker.<span style="color: #006600;">getOptions</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">radius</span> = event.<span style="color: #0066CC;">target</span>.<span style="color: #006600;">value</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #66cc66;">&#93;</span><br />
<span style="color: #66cc66;">&lt;/</span>fx:Script<span style="color: #66cc66;">&gt;</span><br />
<br />
<span style="color: #66cc66;">&lt;</span>s:HSlider id=<span style="color: #ff0000;">&quot;radiusSlider&quot;</span> change=<span style="color: #ff0000;">&quot;radiusSlider_CHANGE(event)&quot;</span><span style="color: #66cc66;">/&gt;</span></div></div>
<p>Problem został zgłoszony w odpowiednie miejsce już jakiś czas temu. Pod <a href="http://code.google.com/p/gmaps-api-issues/issues/detail?id=368">tym</a> adresem można śledzić rozwój sytuacji.</p>
<h3><a name="linki">Przydatne linki</a></h3>
<ul>
<li><a href="http://code.google.com/intl/pl/apis/maps/documentation/flash/intro.html">Podręcznik użytkownika Google Maps API</a></li>
<li><a href="http://code.google.com/intl/pl/apis/maps/documentation/flash/reference.html">Dokumentacja Google Maps API</a></li>
<li><a href="http://groups.google.com/group/google-maps-api-for-flash/">Grupa dyskusyjna Google Maps API for Flash</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.flexmaniak.pl/flex/google-maps-api-flex/flex-i-google-maps-api-wstep/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
