Płaszczyzny w KML

Standard KML pozwala na definiowanie płaszczyzn z dowolną liczbą wierzchołków. Dodatkową opcją jest możliwość wykonywania otworów w płaszczyźnie - poprzez dodawanie wewnętrznych krawędzi. Podobnie jak w przypadku linii, płaszczyzna także może posiadać atrybut extrude, co powoduje, że jej wierzchołki są sprowadzane do powierzchni - co umożliwia łatwiejsze tworzenie modeli np. domków o płaskim lub jednospadowym dachu.



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.

Prześlij dalej:

Brak komentarzy:

Prześlij komentarz