KML Network Link - Fly To - PullRequest
       8

KML Network Link - Fly To

5 голосов
/ 09 сентября 2011

Я разрабатываю приложение, которое запускает Google Планета Земля с файлом KML, который связывается с другими локальными файлами через <NetworkLink>, что обновляет интервал времени.Я пытаюсь определить файл KML, который будет центрировать карту (летать) в определенном месте.

Сетевая ссылка имеет тег, который соответствует первой метке или FlyTo в файле.Тем не менее, это будет выполнять fly для всякий раз, когда файл обновляется, что в моем случае, когда истекает интервал времени.Можно ли каким-то образом выполнить команду fly-to только при изменении связанного сетевого файла, а не каждый раз?Есть ли способ запустить Fly To только один раз, пока связанный файл не будет изменен?Мой файл NetworkLink определен следующим образом:

  <NetworkLink>
    <name>My Fly To Request</name>
    <Link>
      <href>MyFlyTo.kmz</href>
      <refreshMode>onInterval</refreshMode>
      <refreshInterval>2</refreshInterval>
    </Link>
  </NetworkLink>  

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

1 Ответ

2 голосов
/ 18 февраля 2012

Я полагаю, что вы могли бы добиться этого, используя комбинацию атрибутов ID и элементов NetworkLinkControl и Update в Kml.

Файл MyFlyToRequest.kml содержит NetworkLink, который загружает файл данных, содержащий ваши данные, для него элемент flyToView имеет значение true. Обратите внимание, что сетевой канал также имеет идентификатор request

MyFlyToRequest.kml

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<NetworkLink id="request">
    <name>My Fly To Request</name>
    <Link>
      <href>http://www.yourserver.com/MyFlyTo.kmz</href>
      <refreshMode>onInterval</refreshMode>
      <refreshInterval>2</refreshInterval>
    </Link> 
    <flyToView>1</flyToView>   
</NetworkLink>
</kml>

Второй файл, MyFlyTo.kmz, является загруженным. Он содержит ваши текущие данные как есть. Однако он также имеет дополнительный NetworkLink, который загружает новый третий файл.

MyFlyTo.kmz - отредактировано

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document id="data">
  <visibility>1</visibility>
  <NetworkLink>
    <name>Update MyFlyToRequest</name>
    <Link>
      <href>http://www.yourserver.com/TurnOffFlyTo.kml</href>
    </Link>
  </NetworkLink>
  <Placemark>
    <name>This is flown to once (hopefully)</name>
      <Point>
        <coordinates>52,0,0</coordinates>
      </Point>
   </Placemark>
</Document>
</kml>

Новый третий файл TurnOffFlyTo.kml является частью ключа к настройке, он содержит NetworkLinkControl, предназначенный для request NetworkLink в первом файле MyFlyToRequest.kml. Он просто устанавливает flyToView элемент на 0.

TurnOffFlyTo.kml

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<NetworkLinkControl>
  <Update>
    <targetHref>http://www.yourserver.com/MyFlyToRequest.kml#request</targetHref>
    <Change>
        <NetworkLink id="request">
            <!-- turn off the flyto behaviour -->
            <flyToView>0</flyToView>   
        </NetworkLink>
    </Change>
  </Update>
</NetworkLinkControl>
</kml>

Последний файл TurnOnFlyTo.kml просто снова переключает поведение flyto.

TurnOnFlyTo.kml

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<NetworkLinkControl>
  <Update>
    <targetHref>http://www.yourserver.com/MyFlyToRequest.kml#request</targetHref>
    <Change>
        <NetworkLink id="request">
            <!-- turn off the flyto behaviour -->
            <flyToView>1</flyToView>   
        </NetworkLink>
    </Change>
  </Update>
</NetworkLinkControl>
</kml>

Логика следующая.

  1. MyFlyToRequest.kml загружает MyFlyTo.kml
  2. flyto включено, поэтому представление перемещает первую первую метку и т. Д. В MyFlyTo.kml
  3. Ссылка в MyFlyTo.kml загружает TurnOffFlyTo.kml.
  4. Update в TurnOffFlyTo.kml three отключает flyto в MyFlyToRequest.kml.
  5. Файл один, обновляет, загружает файл два ...

Если вам нужно снова включить flyto, вы просто загрузите Файл четыре. Если данные в MyFlyTo.kmz генерируются вами, это был бы простой случай загрузки TurnOnFlyTo.kml прямо там, где был вызван TurnOffFlyTo.kml.

Все, что сказано, это не проверено и как таковое может не работать как есть, хотя в принципе я не понимаю, почему это не будет.

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

Ссылка NetworkLinkControl

http://code.google.com/apis/kml/documentation/kmlreference.html#networklinkcontrol

Использование обновлений

http://code.google.com/apis/kml/documentation/updates.html

...