Как отобразить движущуюся лодку в Google Earth? - PullRequest
20 голосов
/ 29 октября 2009

Я новичок в формате KML и пытаюсь выяснить, как отображать лодку (png), перемещаясь от места к другому вдоль пути (простая линия, составленная из нескольких линий).

Я вижу, как отображать метку, даже с иконкой, и путь отдельно.

Что бы я хотел увидеть при нажатии на KML-файл:

  • лодка, появляющаяся в пункте отправления;
  • Сам путь прорисовывается до прибытия;
  • значок лодки, движущийся с удобной скоростью (в качестве бонусного пункта я могу установить время / прогресс в рационе, дополнительный бонус, если я могу нажать на старт, паузу или перемотку назад) от отправления до прибытия по пути.

Это вообще возможно? Я знаю, что это с Google Map, но вы можете запрограммировать его с помощью Javascript, что значительно облегчает работу.

Ответы [ 8 ]

11 голосов
/ 04 ноября 2009

Единственный способ, с помощью которого я смог выполнить эту работу в статическом KML, - это интерполировать между начальной и конечной точками и добавлять метки для каждого кадра, который я хочу анимировать. Итак, от t = 0 до t = 1 нарисуйте метку в начальной точке. От t = 1 до t = 2 нарисуйте метку в следующей точке и т. Д.

Это дает вам временную панель игрока в Google Earth, и вы можете перематывать или продвигать анимацию. Однако это немного раздражает, потому что вы попадаете в каждую точку интерполяции в дереве меток. Помещение меток в их собственную папку исключает их, но скрыть их от пользователя невозможно.

Взгляните на http://code.google.com/apis/kml/documentation/time.html#animating Пример с китовой акулой делает более или менее то, что вы хотите для метки. (URL для значка маркера не работает). Анимация движения по дорожке может быть выполнена с помощью того же трюка.

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

У этого подхода есть некоторые серьезные недостатки , поскольку для его работы требуется внешняя программа для управления Google Планета Земля, и он не предоставляет пользователю доступ к встроенной временной панели проигрывателя Google Планета Земля. Также необходимо, чтобы все данные загружались по сетевой ссылке - данные KML из файла не могут быть обновлены. Это означает, что ваша программа драйвера должна действовать как http-сервер. Кроме того, в этой модели очень сложно точно определить, когда Google Планета Земля закончила загрузку и создание обновления. На самом деле я не рекомендую делать это; вы можете заставить его работать, используя Google Earth COM API, но это всегда будет хрупким решением.

9 голосов
/ 19 февраля 2012

Это старый вопрос, и теперь есть лучший способ переместить метку (или даже лучше модель) вдоль заранее определенной строки. Посмотрите на использование этой функции:

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

Пример кода:

<?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">
<Folder>
  <Placemark>
    <gx:Track>
     <when>2010-05-28T02:02:09Z</when>
     <when>2010-05-28T02:02:35Z</when>
     <when>2010-05-28T02:02:44Z</when>
     <when>2010-05-28T02:02:53Z</when>
     <when>2010-05-28T02:02:54Z</when>
     <when>2010-05-28T02:02:55Z</when>
     <when>2010-05-28T02:02:56Z</when>
     <gx:coord>-122.207881 37.371915 156.000000</gx:coord>
     <gx:coord>-122.205712 37.373288 152.000000</gx:coord>
     <gx:coord>-122.204678 37.373939 147.000000</gx:coord>
     <gx:coord>-122.203572 37.374630 142.199997</gx:coord>
     <gx:coord>-122.203451 37.374706 141.800003</gx:coord>
     <gx:coord>-122.203329 37.374780 141.199997</gx:coord>
     <gx:coord>-122.203207 37.374857 140.199997</gx:coord>
   </gx:Track>
 </Placemark>
</Folder> 
</kml>
3 голосов
/ 05 ноября 2009

Существует плагин для браузера, который позволяет встраивать Google Планета Земля в страницу браузера. Оттуда вы можете использовать JavaScript для анимации вашей метки, изменения путей и т. Д. Ознакомьтесь с Руководством разработчика по Google Планета Земля .

0 голосов
/ 06 октября 2015

У меня есть следующий пример на сайте Google. Надеюсь, что это поможет.

(подробности внутри: https://sites.google.com/site/canadadennischen888/home/kml/auto-refresh-3d-tracking)

  1. подготовить сервис RestFul для генерации файла KML из БД (образец как в https://sites.google.com/site/canadadennischen888/home/kml/3d-tracking)

  2. Мой другой код сгенерирует файл KMZ со ссылкой на мою службу Restful (образец как на этой странице)

  3. Файл KMZ имеет значение InInval

  4. Веб-страница позволяет пользователю загружать KMZ-файл, URL которого содержит ссылку на мой сервис Restful

  5. Когда Google Планета Земля откроет файл KMZ, Google Планета Земля автоматически обновится, чтобы получить новые данные из этой службы Restful

0 голосов
/ 06 мая 2011

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

<?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">

<Document>

<Placemark id="boat">
    <Point>
        <coordinates>0,0</coordinates>
    </Point>
</Placemark>

<gx:Tour>
    <name>Play me!</name>
    <gx:Playlist>
      <gx:FlyTo>
        <gx:duration>5.0</gx:duration>
        <LookAt>
          <longitude>0</longitude>
          <latitude>0</latitude>
          <altitude>0</altitude>
          <heading>-95</heading>
          <tilt>65</tilt>
          <range>250000</range>
          <altitudeMode>relativeToGround</altitudeMode>
        </LookAt>
      </gx:FlyTo>

        <gx:AnimatedUpdate>
            <gx:duration>5.0</gx:duration>
            <Update>
                <targetHref/>
                 <Change>
                     <Placemark targetId="boat">
                         <Point>
                             <coordinates>1,1</coordinates>
                         </Point>
                     </Placemark>
                 </Change>
            </Update>
        </gx:AnimatedUpdate>
        <gx:Wait>
            <gx:duration>6.0</gx:duration>
        </gx:Wait>
    </gx:Playlist>
</gx:Tour>

</Document>

</kml>

Путь может быть отмечен точками, видимость которых изменяется в нужный момент.

0 голосов
/ 06 ноября 2009

Возможно, вы захотите посмотреть туры: http://code.google.com/apis/kml/documentation/touring.html

Я видел что-то подобное, используя комбинацию (количество) тегов <gx:AnimatedUpdate> для перемещения ранее созданной метки, представляющей вашу лодку, и теги <gx:FlyTo> для перемещения вида (я думаю) все в пределах <gx:Playlist>.

Надеюсь, это поможет.

0 голосов
/ 29 октября 2009

Если вы собираетесь отображать лодку в Google Планета Земля, лучше использовать 3D-модель, чем изображение, поскольку пользователи могут изменять угол обзора.

0 голосов
/ 29 октября 2009
...