Definicja płaszczyzny zawiera się w znaczniku <Polygon>, który uprzednio musi być umieszczony w znaczniku <Placemark>. Wierzchołki płaszczyzny są podawane w specjalnym znaczniku <outerBoundaryIs>, który zawiera w sobie element <LinearRing>, w którym dopiero podajemy wierzchołki. Kolejność współrzędnych taka sama jak przy liniach czyli długość geo. (longitude), szerokość (latitude) oraz opcjonalnie wysokość nad ziemią.
<?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://www.opengis.net/kml/2.2"> <Document> <name>KmlFile</name> <Style id="transBluePoly"> <LineStyle> <width>1.5</width> </LineStyle> <PolyStyle> <color>7dff0000</color> </PolyStyle> </Style> <Placemark> <name>Absolute</name> <visibility>1</visibility> <styleUrl>#transBluePoly</styleUrl> <Polygon> <extrude>0</extrude> <altitudeMode>absolute</altitudeMode> <outerBoundaryIs> <LinearRing> <coordinates> 16.21091,50.505041,424 16.21191,50.505041,424 16.21191,50.506041,444 16.21091,50.506041,444 16.21091,50.505041,424 </coordinates> </LinearRing> </outerBoundaryIs> </Polygon> </Placemark> </Document> </kml>
Odniesienie do powierzchni także może być definiowane - w przypadku <altitudeMode> możliwe są trzy ustawienia, w przypadku skorzystania z rozszerzenia Google <gx:altitudeMode> dostępne są dodatkowe dwie definiujące odniesienie do morza. Definicje znacznika altitudeMode opisałem już w poście dotyczącym linii - dla płaszczyzn jest dokładnie tak samo :).
Utworzenie otworów polega na tworzeniu wewnętrznych krawędzi. W tym celu umieszczamy parametry w konstrukcji podobnej jak definicja współrzędnych z tym, że główny znacznik to <innerBoundaryIs>, a w nim znana struktura <LinearRing> i <coordinates>.
<?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://www.opengis.net/kml/2.2"> <Document> <name>KmlFile</name> <Style id="transBluePoly"> <LineStyle> <width>1.5</width> </LineStyle> <PolyStyle> <color>7dff0000</color> </PolyStyle> </Style> <Placemark> <name>Absolute</name> <visibility>1</visibility> <styleUrl>#transBluePoly</styleUrl> <Polygon> <extrude>0</extrude> <altitudeMode>absolute</altitudeMode> <outerBoundaryIs> <LinearRing> <coordinates> 16.21091,50.505041,424 16.21191,50.505041,424 16.21191,50.506041,444 16.21091,50.506041,444 16.21091,50.505041,424 </coordinates> </LinearRing> </outerBoundaryIs> <innerBoundaryIs> <LinearRing> <coordinates> 16.21111,50.505241,454 16.21171,50.505241,454 16.21171,50.505442,454 16.21111,50.505442,454 16.21111,50.505241,454 </coordinates> </LinearRing> </innerBoundaryIs> </Polygon> </Placemark> </Document> </kml>
Nowe krawędzie powodują, że płaszczyzna jest do nich rozciągana - co powoduje, że możemy utworzyć wypiętrzenie w płaszczyźnie - należy pamiętać, że zbyt duża różnica wysokości powoduje, że płaszczyzna się nie wyświetla (a jedynie krawędzie). Otwór można zminimalizować poprzez podanie odpowiednio małych różnic współrzędnych - jeżeli nie będzie różnicy wówczas płaszczyzna nie będzie rozciągnięta do tych punktów.
Istnieje także możliwość umieszczenia wielu elementów innerBoundaryIs - wówczas pojawia się wiele otworów.
<?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://www.opengis.net/kml/2.2"> <Document> <name>KmlFile</name> <Style id="transBluePoly"> <LineStyle> <width>1.5</width> </LineStyle> <PolyStyle> <color>7dff0000</color> </PolyStyle> </Style> <Placemark> <name>Absolute</name> <visibility>1</visibility> <styleUrl>#transBluePoly</styleUrl> <Polygon> <extrude>0</extrude> <altitudeMode>absolute</altitudeMode> <outerBoundaryIs> <LinearRing> <coordinates> 16.21091,50.505041,424 16.21191,50.505041,424 16.21191,50.506041,444 16.21091,50.506041,444 16.21091,50.505041,424 </coordinates> </LinearRing> </outerBoundaryIs> <innerBoundaryIs> <LinearRing> <coordinates> 16.21111,50.505241,454 16.21171,50.505241,454 16.21171,50.505342,454 16.21111,50.505342,454 16.21111,50.505241,454 </coordinates> </LinearRing> </innerBoundaryIs> <innerBoundaryIs> <LinearRing> <coordinates> 16.21111,50.505661,434 16.21171,50.505661,434 16.21171,50.505742,434 16.21111,50.505742,434 16.21111,50.505661,434 </coordinates> </LinearRing> </innerBoundaryIs> </Polygon> </Placemark> </Document> </kml>
Włączenie właściwości extrude powoduje, że od krawędzi płaszczyzny są tworzone płaszczyzny do powierzchni. Powoduje to, że poprzez definicję jednego kwadratu możemy stworzyć prostą kostkę. Idąc dalej można stworzyć bardziej skomplikowane kształty - np. Google skonstruował swój kampus w USA.
Podsumowując płaszczyzny w KML dają bardzo duże możliwości jeśli chodzi o ich wykorzystanie - zwłaszcza do modelowania uproszczonych kształtów domów.
Brak komentarzy:
Prześlij komentarz