Android: как загрузить KML

может кто-нибудь, пожалуйста, скажите мне, есть ли способ загрузить файл kml в карту Google в Android.

Благодарность


person i_raqz    schedule 20.10.2010    source источник


Ответы (3)


Здесь вы можете найти пример кода, который получает данные kml из Google и отображает их на карте:

Как нарисовать путь на карту с использованием файла kml?

person Mathias Conradt    schedule 21.10.2010
comment
@ Матиас ... большое тебе спасибо! но если я могу спросить вас. есть ли способ получить доступ к кмл с sd карты телефона. kml, который я использую, никогда не изменится. поэтому нет смысла получать его с сервера каждый раз, когда включаете приложение. еще раз спасибо - person i_raqz; 21.10.2010
comment
конечно, вы можете поместить его в текстовый файл и прочитать его с помощью обычных методов java.io.file - person Mathias Conradt; 21.10.2010
comment
так вы хотите сказать .. Мне нужно скопировать содержимое kml в текстовый файл и проанализировать его с помощью метода io .. (строковый токенизатор и тому подобное)? невозможно ли сохранить kml в телефоне и использовать синтаксический анализатор sax для его анализа? - person i_raqz; 21.10.2010
comment
хм, не понимаю, что вы имеете в виду. чтение файла не связано напрямую с его анализом. Конечно, вы можете использовать синтаксический анализатор sax, но вам нужно получить контент для синтаксического анализа откуда-то, чтобы передать его синтаксическому анализатору sax. или если ваш синтаксический анализатор sax позволяет просто передать имя файла в качестве параметра, конечно, вам не нужно загружать его вручную. Я думаю, что любой источник ввода будет работать, например xr.parse (new InputSource (aUrl.openStream ())); - person Mathias Conradt; 22.10.2010
comment
Я сохранил файл kml в телефоне, проанализировал его с помощью синтаксического анализатора SAx, а затем наложил то же самое на карту Google ... все сработало нормально ... но поскольку количество LineStrings было большим, телефон разбился из-за нехватки памяти. . есть ли способ получить карту Google + наложенный файл kml (как один объект) на телефон? таким образом .. телефон не должен делать все вычисления ... - person i_raqz; 22.10.2010
comment
Значит, это должен быть довольно большой маршрут. насколько велик ваш kml файл на телефоне? или сколько строк? это должно означать, что вы фактически используете все 24 МБ (Nexus One, Desire и т. д.) или даже 48 МБ (SGS) памяти в зависимости от вашего телефона. Уверены, что проблема с памятью вызвана данными kml? - person Mathias Conradt; 23.10.2010

Несколько месяцев назад я искал аналогичную функцию, но не мог найти способ загрузить файл с SDCard - или даже с помощью поставщика контента. С тех пор я не смотрел.

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

получить карты для приема динамически сгенерированного файла KML?

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

final Intent myIntent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("geo:0,0?q=http://website.com/kml_gen.php?id=1kj312"));
startActivity(myIntent);

Сервер вернул список KML для использования приложением карты.

Обновление после комментариев ниже:

final Intent myIntent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("geo:0,0?q=http://code.google.com/apis/kml/documentation/KML_Samples.kml"));
startActivity(myIntent);

Попробуйте запустить приведенный выше код - когда вы запустите его, вы увидите, что приложение карты Google открывается, и оно запрашивает файл kml, в данном случае файл образцов из Google. Это карта с наложением, но теперь это приложение карты Google и больше не выполняется внутри вашего приложения.

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

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

Другое решение, которое я использовал, было опубликовано выше - если у вас есть статические данные на телефоне (я бы пошел с БД с данными), создайте оверлей, рисующий элементы, а также запросите динамические результаты с сервера добавьте их в настраиваемый оверлей. Эта опция будет означать, что вам придется закодировать любую дополнительную функцию, которую вы хотите, например, поиск местоположения на карте, вид со спутника ... Обязательно выполняйте операцию в отдельном потоке, а не в потоке пользовательского интерфейса, особенно при создании больших наложения, или вы, вероятно, получите диалоговое окно «Принудительное закрытие / ожидание».

person Scoobler    schedule 20.10.2010
comment
@Scoobler ... спасибо за это. Итак, как мне наложить этот файл kml на карту Google? - person i_raqz; 21.10.2010
comment
@raqz, что именно ты имеешь в виду? У вас есть файл kml, который вы хотите наложить на карту, или у вас есть набор координат, и вы ищете способ показать их на карте, т.е. вы создаете файл kml динамически? - person Scoobler; 21.10.2010
comment
@Scoobler ... У меня есть файл kml с постоянными данными. Мне нужно нанести эти геометрические формы в kml на карте, т.е. наложите это на карту Google. Кроме того, у меня есть еще один файл kml, который динамически создается на сервере, и я должен отображать его на телефоне. Таким образом, структура будет следующей: сначала карта Google, затем постоянный файл kml, а затем, наконец, поверх обоих… это динамически сгенерированный kml. есть способ сделать. очень ценю вашу помощь ... спасибо - person i_raqz; 21.10.2010
comment
@raqz Я бы сказал, что есть несколько способов сделать это - если вы хотите использовать приложение карты, которое сделает всю работу за вас. Похоже, вам нужно принять решение - вы говорите, что динамический файл создается на вашем сервере. Вы можете передать статический файл с телефона на сервер, чтобы ваш сервер включил свои данные и поместил его в один динамический файл и дал вам ссылку, это будет означать наименьшую обработку на телефоне (легко). В качестве альтернативы вы можете использовать действие карты, создать собственное наложение со всеми точками из KML и дополнительными динамическими данными. Первый простой, но он основан на сигнале данных. - person Scoobler; 21.10.2010
comment
@ Scoobler ... спасибо за идеи ... но не могли бы вы подробнее рассказать, как я могу добиться того, чтобы приложение с картой выполняло всю работу за меня. у меня есть файл kml со всей информацией. как сделать так, чтобы приложение карты извлекало как карту Google, так и kml как наложение как единый компонент. как вы сказали, я обработал весь kml на телефоне, но телефон вылетает из-за нехватки памяти ... пожалуйста, помогите ... - person i_raqz; 22.10.2010

Я использовал файлы GPX на карте (Android 1.5), но не было ничего для загрузки KML или GPX. Если он не был добавлен в более новых версиях Android, я думаю, вам придется прочитать файл самостоятельно. Вот что я сделал 10 месяцев назад ...

person WarrenFaith    schedule 20.10.2010