Синтаксис тега Region в KML

У меня есть несколько сотен меток, которые находятся в одной папке. Я пытаюсь сделать так, чтобы метки появлялись только ниже определенной высоты. (Метки были созданы путем экспорта слоя из ArcGIS, и я предполагаю, что высота должна быть указана в единицах, используемых системой координат слоя, в данном случае в футах; исправьте меня, если я ошибаюсь.) Однако, я ничего не делаю с <Region> тег, кажется, работает; этикетки с радостью появляются на всех высотах. Вот код, который я использую; кто-нибудь может сказать, что с ним не так?

<Document id="DocumentName">
  <name>NameGoesHere</name>
  <Snippet></Snippet>
  <Folder id="NameOfTheFolder">
    <name>NameGoesHere</name>
      <Region id="highAltitude">
        <LatLonAltBox>
          <north>40</north>
          <south>37</south>
          <east>-74</east>
          <west>-79</west>
          <minAltitude>50000</minAltitude>
          <maxAltitude>500000</maxAltitude>
        </LatLonAltBox>
        <LabelStyle id="styleNameHere">
          <scale>0</scale>
        </LabelStyle>
      </Region>
    <Snippet></Snippet>
                ...
    <placemark> ... </placemark>
    <placemark> ... </placemark>
    <placemark> ... </placemark>
                ...
  </Folder>
</Document>

Смысл всего этого кода в том, чтобы подавлять метки на высотах выше 50000 футов, но он ничего подобного не делает. К концу кода, после </Folder> тег, но до </Document> В теге есть некоторый код, сгенерированный при экспорте файла, который задает стили меток. Но удаляю ли я <scale> часть этого, кажется, не имеет никакого эффекта. Этот код выглядит следующим образом:

<Style id="Stylename">
  <IconStyle>
    ...
  </IconStyle>
  <LabelStyle>
    <color> ... </color>
    <scale> ... </scale>
  </LabelStyle>
  <PolyStyle>
     ...
  </PolyStyle>
</Style>

Я подозреваю, что я делаю что-то не так с точки зрения синтаксиса, но, поскольку у меня не было опыта работы с KML до нескольких дней назад, я не уверен, в чем проблема. Я ценю любые идеи относительно того, почему это не работает.

1 ответ

Решение

Вам необходимо определить Lod (уровень детализации) в регионе, иначе он всегда будет отображаться.

<Region id="highAltitude">
  <LatLonAltBox>
   ...
  </LatLonAltBox>
  <Lod>
    <minLodPixels>256</minLodPixels>
  </Lod>
<Region>

MinLodPixels определяет размер области, где, если это меньше, чем это минимальное количество пикселей на экране, тогда область не отображается.

https://developers.google.com/kml/documentation/kmlreference

Кроме того, LabelStyle недопустим в регионе. Это должно появиться в <Style> элемент. Если KML не работает так, как вы ожидаете, 9 из 10 раз синтаксис неверен - попробуйте проверить его с помощью средства проверки KML.

Другие вопросы по тегам