Как использовать NetworkLink refreshMode в файле KML / KMZ, который содержит только папки меток? - PullRequest
0 голосов
/ 16 февраля 2020

У меня есть куча меток, организованных в папки и затем сжатых в файл KMZ. Я использую Google Maps JavaScript API для отображения файла KMZ в качестве наложения карты, но примерно раз в неделю наложение исчезает. Я считаю, что это связано с истечением срока действия кэширования. Я немного прочитал о NetworkLink и refreshMode (https://developers.google.com/kml/documentation/kmlreference#Link), но я озадачен тем, как реализовать это для моей конкретной c ситуации.

Когда я распаковываю Файл KMZ, единственный файл внутри - это do c .kml, который выглядит примерно так:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<Document>
    <name>My Document</name>
<StyleMap> A BUNCH OF STYLES, not sure why all of these exist </StyleMap>
<Folder>
        <name>My Folder</name>
        <open>1</open>
        <Folder>
            <name>My Subfolder</name>
            <Placemark>
                <description><![CDATA[<br><br><br>
    <table border="1" padding="0">
      <tr><td>cableid</td><td>1</td></tr>
      <tr><td>spanid</td><td>1076</td></tr>]]></description>
                <styleUrl>#m_ylw-pushpin</styleUrl>
                <LineString>
                    <extrude>1</extrude>
                    <tessellate>1</tessellate>
                    <coordinates>
                        -79.86184,40.349647,0 -79.861864,40.350147,0 -79.860741,40.350056,0 
                    </coordinates>
                </LineString>
            </Placemark>
            <Placemark>
               ... etc
            </Placemark>
    </Folder>
</Folder>
</Document>
</kml>

Он содержит несколько документов и вложенных папок. Не уверен, что это имеет значение.

Нужно ли загружать файл do c .kml на сервер самостоятельно, а затем создавать отдельный файл KML с NetworkLink, ссылки на который делают c .kml? Не потеряю ли я преимущества сжатия KMZ? Есть другие идеи?

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Отвечая на мой собственный вопрос. Мне не нужно было разархивировать файл KMZ в файл KML - вы можете создать NetworkLink, который указывает на файл KMZ. Я создал новый файл KML, который содержит только NetworkLink, указывающий на мой файл KMZ на сервере. Этот файл выглядит следующим образом (назовем его link.kml):

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<NetworkLink>
  <Link>
    <href>https://example.com/myMapOverlay.kmz</href>
    <refreshMode>onExpire</refreshMode>
  </Link>
</NetworkLink>
</Document>
</kml>

Затем я загружаю этот новый KML-файл в качестве KmlLayer в свой код Google Maps.

var layer = new google.maps.KmlLayer({
                url: 'https://example.com/link.kml,
                preserveViewport: true,
                map: gMap
            });

Я также в моем .htaccess явно задано время истечения срока на сервере для файлов KMZ и KML.

<IfModule mod_expires.c>
  ExpiresByType application/vnd.google-earth.kml+xml A86400
  ExpiresByType application/vnd.google-earth.kmz A86400
</IfModule>

Этот параметр кэширует файлы KML и KMZ в течение 1 дня. Вы можете убедиться, что он работает, перейдя непосредственно к файлу KML или KMZ на вашем сервере, когда инструменты dev открыты на вкладке Network. На левой панели выберите файл, чтобы просмотреть заголовки ответа. Вы должны увидеть Expires: и дату. В конфигурации, описанной выше, даже если срок действия файла истекает ежедневно, он продолжает отображаться как наложение карты без перерыва.

0 голосов
/ 19 февраля 2020

Если вы только начинаете создавать свой собственный KML и отображать его в Google Maps JavaScript APi, вы можете обратиться к этой документации .

В документации также говорится, что публичный хостинг файл KML в inte rnet является обязательным требованием для всех приложений, которые загружают KML в KMLLayer, чтобы серверы Google могли находить и извлекать контент для отображения его на карте. Файлы KML можно отображать только в том случае, если они размещены по общедоступному URL-адресу, для доступа к которому не требуется проверка подлинности.

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

Вы также можете обратиться к этой документации Google Maps Platform, в которой обсуждаются производительность и вопросы кэширования и рекомендуемые советы для лучшей производительности.

...