<?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; ClientGeocoderOptions</title>
	<atom:link href="http://blog.flexmaniak.pl/tag/clientgeocoderoptions/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.flexmaniak.pl</link>
	<description>Flex, Papervision3D, PHP, Symfony</description>
	<lastBuildDate>Sun, 02 Oct 2011 08:36:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Flex i Google Maps API &#8211; geolokalizacja</title>
		<link>http://blog.flexmaniak.pl/flex-libraries/google-maps-api-flex/flex-i-google-maps-api-geolokalizacja</link>
		<comments>http://blog.flexmaniak.pl/flex-libraries/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 1.18]]></category>
		<category><![CDATA[ClientGeocoder]]></category>
		<category><![CDATA[ClientGeocoderOptions]]></category>
		<category><![CDATA[Geocoding]]></category>
		<category><![CDATA[GeocodingEvent]]></category>
		<category><![CDATA[Geolokalizacja]]></category>
		<category><![CDATA[Google Maps API]]></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 &#8220;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 (&#8220;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 (&#8220;en&#8221;, &#8220;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 &#8220;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-libraries/google-maps-api-flex/flex-i-google-maps-api-geolokalizacja/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

