Можно ли управлять порядком прорисовки полигонов в KML?

У меня есть смежные полигоны (clampToGround), где часть границ перекрывается. Я хотел бы иметь возможность контролировать, какой из них появляется сверху. Единственный метод, который я нашел работающим до сих пор, - это перечисление меток полигонов в порядке стека (последний в списке отображается вверху). Однако я хотел бы организовать метки на основе другой логики и хотел бы, чтобы метод кодирования указывал, какой многоугольник находится сверху.

Обратите внимание: я также пробовал использовать относительный уровень грунта и небольшие перепады высот, но это приводит к тому, что части заливки полигонов исчезают под топографией.


person user2611980    schedule 23.07.2013    source источник


Ответы (1)


Вы можете указать элемент <gx:drawOrder> (который является расширением Google Планета Земля), чтобы упорядочить полигоны. а также линии и кольца в вашем KML.

Обратите внимание, что в документации (см. ниже) указаны только строки LineString, но она также работает для Lines, LinearRings. и Полигоны. Везде, где «LineStrings» упоминается ниже, просто замените его на «Lines», «Rings» и «Polygons». Поддержка drawOrder для многоугольников не задокументирована, но была отмечена как проблема.

KML-документация:

<gx:drawOrder>

"Целочисленное значение, указывающее порядок отрисовки нескольких строчных строк. LineStrings, нарисованные первыми, могут быть частично или полностью скрыты LineStrings с более поздним ( или выше) порядок отрисовки. Этот элемент может потребоваться в сочетании с элементами <gx:outerColor> и <gx:outerWidth> в <LineStyle>, когда двухцветные линии пересекаются".

Обратите внимание, что это будет работать только в клиентах, поддерживающих расширения Google Планета Земля KML.

В приведенном ниже примере красный многоугольник нарисован поверх синего многоугольника. Чтобы синий многоугольник рисовал поверх красного, измените его значение drawOrder на большее число.

 <kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2">
    <Document>
        <Placemark>
            <name>Red Polygon</name>
            <description>gx:drawOrder=3</description>
            <Style>
              <LineStyle>
                <color>ff000000</color>
              </LineStyle>
              <PolyStyle>
                <color>ff0000ff</color>
              </PolyStyle>
            </Style>
            <Polygon>
                <gx:drawOrder>3</gx:drawOrder>
                <tessellate>1</tessellate>
                <outerBoundaryIs>
                    <LinearRing>
                        <coordinates>
                        14.456906,37.345497,0 14.949769,37.346531,0
                        14.960918,37.987563,0 14.45089,37.987521,0
                        14.456906,37.3455,0 
                    </coordinates>
                    </LinearRing>
                </outerBoundaryIs>
            </Polygon>
        </Placemark>        

        <Placemark>
            <name>Blue Polygon</name>
            <description>gx:drawOrder=2</description>
            <Style>
              <LineStyle>
                <color>ff000000</color>
              </LineStyle>
              <PolyStyle>
                <color>ffff0000</color>
              </PolyStyle>
            </Style>
            <Polygon>
                <gx:drawOrder>2</gx:drawOrder>
                <tessellate>1</tessellate>
                <outerBoundaryIs>
                    <LinearRing>
                        <coordinates>
                        14.83626,38.016863,0 14.835535,37.645589,0
                        15.47025,37.589266,0 15.470457,38.019158,0
                        14.83626,38.016862,0 
                    </coordinates>
                    </LinearRing>
                </outerBoundaryIs>
            </Polygon>
        </Placemark>
    </Document>
 </kml>
person JasonM1    schedule 24.07.2013