Как улучшить производительность кмл при работе со слишком большим количеством данных?

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

Таким образом, мы получаем файлы KML размером более 20 Мб, содержащие более 30 тысяч меток, Google Планета Земля просто не может с этим справиться, их абсолютно невозможно использовать ни на одном из наших компьютеров.

Могу ли я что-нибудь сделать, сохраняя его в виде векторных данных (точную локальную копию наших обслуживаемых карт)?

1 ответ

Решение

Файл KML с 30000 метками обычно не слишком велик для обработки в Google Планета Земля. Например, этот инструмент генерирует файл KMZ с до 25 000 меток для тестирования. Файл KML, созданный с использованием до 100000 меток в Google Планета Земля, по-прежнему работает с небольшим снижением производительности. Образец одного из ваших файлов KML и / или его условный пример может помочь определить основную проблему, с которой вы столкнулись. В любом случае, существует ряд методов, которые можно использовать при разработке KML для масштабирования до больших количеств.

Google Планета Земля может масштабироваться до большого количества объектов (50000 или более), если функции разделены на несколько файлов KML, а KML определен так, что все файлы sub-KML не отображаются одновременно. KML предоставляет механизмы для управления отображением объектов или вложенных KML-файлов с использованием фильтрации по времени, региону или высоте.

Большие KML-файлы могут масштабироваться с использованием любого из следующих методов:

  1. NetworkLinks
  2. Папка регионов
  3. Радио стиль или явная видимость = 0

NetworkLinks

NetworkLink предоставляет ссылку на другой файл KML либо с относительной ссылкой на файл, либо с абсолютным URL. Вы можете иметь любой уровень NetworkLinks из корневого KML-файла от простого (один KML-файл с множеством сетевых ссылок на все другие KML-файлы) до глубокого (с каждым KML-файлом с NetworkLink на другие KML-файлы, каждый со своими собственными NetworkLinks). Зависит от того, как вам нужно структурировать ваш KML и насколько велики данные.

Ключевым моментом является то, что Google Earth выбирает первый KML в качестве корневого файла KML, поэтому вы должны убедиться, что первый файл (обычно с именем doc.kml) является корневым файлом KML, который загружает другие файлы KML по сетевым ссылкам. Общая структура состоит в том, чтобы включать дополнительные файлы KML в подпапку "kml", чтобы отличать ее от корневого файла KML.

Вот пример KMZ с 4 записями файла: корневой файл KML (doc.kml), который содержит NetworkLink для "kml / sub1.kml", а другой - для "kml / sub2.kml", который, в свою очередь, имеет NetworkLink для "sub3". kml"также в подпапке" kml ".

== test.kmz ==

+doc.kml
   NetworkLink > kml/sub1.kml
   NetworkLink > kml/sub2.kml
+kml/sub1.kml
+kml/sub2.kml
   NetworkLink > sub3.kml
+kml/sub3.kml

Вот структура такого файла doc.kml:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
  <Document>
    <NetworkLink>
        <name>NetworkLinked sub-item</name>
        <Link>
          <href> kml/sub1.kml </href>
        </Link>
    </NetworkLink>
    <NetworkLink>
        <name>NetworkLinked sub-item</name>
        <Link>
          <href> kml/sub2.kml </href>
        </Link>
    </NetworkLink>
    ...
  </Document>
</kml>

районы

Регион влияет на видимость геометрии метки или изображения наложения. Регионы в сочетании с NetworkLinks обеспечивают доступ к огромным объемам данных в файлах KML. Регион может дополнительно иметь минимальную и максимальную высоту для фильтрации уровня высоты.

Для получения дополнительной информации см. Учебник по регионам в KML https://developers.google.com/kml/documentation/regions

Радио Папки

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

Вот пример радиопапки, позволяющей пользователю выбирать только одну из ссылок NetworkLink одновременно. Это используется, когда контент является взаимоисключающим, и в любой момент времени должен появляться только один набор функций.

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
    <Document>
        <Style id="rf">
            <ListStyle>
                <listItemType>radioFolder</listItemType>
            </ListStyle>
        </Style>

        <Folder>        
            <name>One at a time example</name>
            <open>1</open>
            <description>Link 1 visible by default</description>
            <styleUrl>#rf</styleUrl>

            <NetworkLink>
                <name>NetworkLinked sub-item-1</name>
                <Link>
                    <href> kml/sub1.kml </href>
                </Link>
            </NetworkLink>

            <NetworkLink>
                <name>NetworkLinked sub-item-2</name>
                <visibility>0</visibility>
                <Link>
                    <href> kml/sub2.kml </href>
                </Link>
            </NetworkLink>

        </Folder>
    </Document>
</kml>
Другие вопросы по тегам