<?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; Polyline</title>
	<atom:link href="http://blog.flexmaniak.pl/tag/polyline/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; rysowanie po mapie</title>
		<link>http://blog.flexmaniak.pl/flex-libraries/google-maps-api-flex/flex-i-google-maps-api-rysowanie-po-mapie</link>
		<comments>http://blog.flexmaniak.pl/flex-libraries/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 1.18]]></category>
		<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 &#8220;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-libraries/google-maps-api-flex/flex-i-google-maps-api-rysowanie-po-mapie/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

