Как отобразить движущуюся лодку в Google Планета Земля?
Я новичок в формате KML и пытаюсь выяснить, как отображать лодку (png), перемещаясь из места в другое по пути (простая строка, состоящая из нескольких строк).
Я могу увидеть, как отображать метку, даже со значком и контуром, отдельно.
То, что я хотел бы видеть, когда я нажимаю на KML файл, это:
- лодка, появляющаяся в точке отправления;
- трассировка пути до прибытия;
- значок лодки перемещается с удобной скоростью (бонусная точка, я могу установить время/ход рациона, дополнительный бонус, если я могу нажать на начало, паузу или перемотку) от отправления до прибытия по пути.
Возможно ли это? Я знаю, что это с Google Map, но вы можете запрограммировать его с помощью Javascript, что значительно облегчает работу.
Ответы
Ответ 1
Это старый вопрос, и теперь есть лучший способ переместить метку (или даже лучше модель) вдоль заранее определенной линейной строки. Изучите эту функцию:
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>
Ответ 2
Единственный способ, которым я смог выполнить эту работу в статическом KML, - это интерполировать между точкой старта и остановки и добавлять метки для каждого кадра, который я хочу оживить. Итак, от t = 0 до t = 1, нарисуйте метку в начальной точке. От t = 1 до t = 2, нарисуйте метку в следующей точке и т.д.
Это дает вам временную панель проигрывателя в Google Планета Земля, и вы можете перемотать или продвинуть анимацию. Однако это немного раздражает, потому что вы заканчиваете каждую точку интерполяции в своем дереве меток. Размещение меток в их собственной папке не позволяет им скрыться, но нет способа скрыть их от пользователя.
Взгляните на http://code.google.com/apis/kml/documentation/time.html#animating
Пример китовой акулы делает более или менее то, что вы хотите для метки. (URL-адрес значка маркера не работает). Анимация хода по треку может быть выполнена с использованием того же трюка.
Если вы хотите попробовать что-то намного сложнее, вы можете попробовать использовать динамический KML. Попросите Google Earth загрузить сетевую ссылку на ваши исходные данные. Затем загрузите другую сетевую ссылку с тем, кто отправляет обновление для вашей метки в каждый момент времени.
Этот подход имеет несколько серьезных недостатков, поскольку для его использования требуется внешняя программа для Google Планета Земля, и она не дает пользователю доступа к встроенной панели временного игрока Google Earth. Он также требует, чтобы все данные загружались по сетевой ссылке - данные KML из файла не могут быть обновлены. Это означает, что ваша программа драйверов должна действовать как http-сервер. Кроме того, в этой модели очень сложно точно узнать, когда Google Планета Земля закончила загрузку и извлечение обновления. На самом деле я не рекомендую это делать; вы можете заставить его работать с помощью API Google Earth COM API, но он всегда будет хрупким решением.
Ответ 3
Имеется плагин для браузера, который позволяет вставлять Google Earth в страницу браузера. Оттуда вы можете использовать JavaScript для анимации вашей метки, изменения путей и т.д. Ознакомьтесь с Руководство разработчика API Google Планета Земля.
Ответ 4
Если вы собираетесь отображать лодку в Google Планета Земля, трехмерная модель будет лучшим подходом к изображению, так как пользователи могут изменить угол обзора.
Ответ 5
Вы можете посмотреть в турах: http://code.google.com/apis/kml/documentation/touring.html
Я видел что-то вроде этого, используя комбинацию (несколько) тегов <gx:AnimatedUpdate>
для перемещения ранее созданной метки, представляющей вашу лодку, и тегов <gx:FlyTo>
для перемещения представления (я думаю) все в пределах <gx:Playlist>
.
Надеюсь, это поможет.
Ответ 6
Я предполагаю, что эта функциональность не существовала при первоначальном ответе, но вы можете добиться эффекта, используя тур. Ниже показано, что такая метка перемещается таким образом.
<?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>
Путь может быть отмечен точками, видимость которых изменяется в туре в соответствующее время.
Ответ 7
У меня есть следующий образец на сайте Google. Надеюсь на эту помощь.
(подробности внутри: https://sites.google.com/site/canadadennischen888/home/kml/auto-refresh-3d-tracking)
-
подготовить службу RestFul для создания KML файла из базы данных
(образец, как в https://sites.google.com/site/canadadennischen888/home/kml/3d-tracking)
-
Мой другой код создаст файл KMZ, который имеет ссылку на мою службу Restful
(образец, как на этой странице)
-
Файл KMZ имеет onInterval
-
Веб-страница позволяет пользователю загружать KMZ файл с URL-адресом, который ссылается на мою услугу Restful
-
Когда Google Earth откроет KMZ файл, Google Earth будет автоматически обновляться, чтобы получить новые данные из этой службы Restitive
Ответ 8
Просто Google для "анимации времени kml"
KML: время и анимация
KML: Анимация
Анимация и динамические обновления с KML