<?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; DirectionsOptions</title>
	<atom:link href="http://blog.flexmaniak.pl/tag/directionsoptions/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; wyznaczanie trasy</title>
		<link>http://blog.flexmaniak.pl/flex-libraries/google-maps-api-flex/flex-i-goole-maps-api-wyznaczanie-trasy</link>
		<comments>http://blog.flexmaniak.pl/flex-libraries/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 1.18]]></category>
		<category><![CDATA[Directions]]></category>
		<category><![CDATA[DirectionsOptions]]></category>
		<category><![CDATA[Driving Directions]]></category>
		<category><![CDATA[Google Maps API]]></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 &#8220;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 (&#8220;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 (&#8220;en&#8221;, &#8220;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 &#8220;from:&#8221; i jedną po &#8220;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 &#8220;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 &#8220;Flex i Google Maps API &#8211; rysowanie po mapie&#8221; lub &#8220;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-libraries/google-maps-api-flex/flex-i-goole-maps-api-wyznaczanie-trasy/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

