Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 41, средняя оценка - 4.61
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 230
#1

Интеграция карт OSM в проект - Android

18.02.2015, 19:14. Просмотров 5552. Ответов 23
Метки нет (Все метки)

Доброго времени суток! Необходимо сделать навигатор по городу, планируется его использование без постоянного подключения к интернету. Думаю для этого необходимо использовать карты от OpenStreetMap, т.к. они единственные офлайновые. Но вот в чем загвоздка, я не смог в просторах интернета найти примера как подключать и использовать данные библиотеки, сами библиотеки конечно же есть (вот ссылка: https://github.com/osmdroid/osmdroid). На официальном сайте, описание неполное и не понятное. Может кто поможет разобраться или объяснить как это делать, буду очень благодарен!

Добавлено через 3 часа 48 минут
В общем нашел кое что интересное по данной теме
Офлайн карты OpenStreetMap.
Скачаем основную библиотеку (osmdroid-android-3.0.7.jar) и вспомогательную (slf4j-android-1.5.8.jar), которая требуется для работы основной и добавим их в наш проект.
Далее в MainActivity добавляем код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package com.yourpackage.name;
 
 
 
import org.osmdroid.util.GeoPoint;
 
import org.osmdroid.views.MapView;
 
 
 
import android.app.Activity;
 
import android.os.Bundle;
 
 
 
public class OSMDroidMapActivity extends Activity {
 
    public void onCreate(Bundle savedInstanceState){
 
        super.onCreate(savedInstanceState);
 
 
 
        MapView mapView = new MapView(this, 256); //constructor
 
        mapView.setClickable(true);
 
        mapView.setBuiltInZoomControls(true);
 
        setContentView(mapView); //displaying the MapView
 
        mapView.getController().setZoom(15); //set initial zoom-level, depends on your need
 
        mapView.getController().setCenter(new GeoPoint(52.221, 6.893)); //This point is in Enschede, Netherlands. You should select a point in your map or get it from user's location.
 
        mapView.setUseDataConnection(false); //keeps the mapView from loading online tiles using network connection.
Этого достаточно для отображения карт и их прокрутки и зумирования.

Ещё необходимо скачать карты с помощью Mobile Atlas Creator. Там выбираем формат сохранения карт "Osmdroid ZIP". На карте находим необходимую локацию, выделяем ее. Выбираем тип карты а также масштабы тайлов. Называем карты и нажимаем на "add selection". После того как все настроено нажимаем на "Create atlas". Начнут скачиваться карты. Когда карты загрузятся просто переместите архив в /mnt/sdcard/osmdroid/. Либо разорхивировав в /mnt/sdcard/osmdroid/tiles/. Вот в приципе и все.

Добавлено через 3 минуты
Кстати, если будет ошибка и будет подчеркнуто
Java
1
OSMDroidMapActivity
то замените на
Java
1
MainActivity
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
krapotkin
2137 / 2075 / 533
Регистрация: 14.04.2014
Сообщений: 10,067
18.02.2015, 19:15     Интеграция карт OSM в проект #2
загвоздка GIS - это то, что данные, хранящиеся в системе, невозможо красиво нарисовать "на лету"
поэтому для каждого масштаба специальными серверами генерируются "тайлы" - квадратики, покрывающие некую площадь карты
количество изображений таково, что объем сильно превышает возможности мобильного устройства, так что сервер, откуда это все брать по запросу, все-таки нужен
OSM - это бесплатные данные, но не бесплатные сервера! там есть список серверов, за вполне доступную денежку готовых обслужить ваше приложение. либо заводите свой, генерируйте на нем картинки и по запросу отдавайте их на мобильник.

программы-навигаторы с файлами по 500 мб генерируют сильно упрощенную картинку, изготовить которую тоже надо суметь.
сомневаюсь, что все карты влезли в эту библиотеку
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 230
18.02.2015, 19:47  [ТС]     Интеграция карт OSM в проект #3
Ну с картами я можно сказать разобрался С навигацией теперь ступор... Если у кого есть опыт в этом поделитесь пожалуйста)

Добавлено через 3 минуты
krapotkin, Ну это обобщенный пример, и карта лично для себя не такая уж и большая нужна, я с помощью Mobile Atlas Creator скачал карту своего города и размер её 28 Мб составил.

Добавлено через 9 минут
krapotkin, Ну, а вообще если глобально делать приложение, то да, без своего сервера с картами не обойтись, тут вы правы!

Добавлено через 17 минут
Да, совсем забыл, В манифесте нужно добавить эти строки:
Java
1
2
3
4
5
6
7
8
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
 <uses-permission android:name="android.permission.READ_INTERNAL_STORAGE"></uses-permission>
 <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE"></uses-permission>
 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 230
18.02.2015, 21:13  [ТС]     Интеграция карт OSM в проект #4
Поспешил - людей насмешил....
По какойто неведомой мне причине карты не загружаются из архива. Архив закидывал и на карту памяти и на память телефона, тоже самое и с разархивированой папкой, безрезультатно... Может кто разберется
Миниатюры
Интеграция карт OSM в проект  
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 230
18.02.2015, 22:06  [ТС]     Интеграция карт OSM в проект #5
Попробовал создать проект по официальной документации: http://code.google.com/p/osmbonuspack/wiki/Tutorial_0
Ошибок никаких не выдало, но при запуске на телефоне выдает ошибку... Логи ошибок прилагаю. Помогите разобраться в чем проблема...

вот сам проект:
MainActivity:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package com.craft.proga_karty;
 
import org.osmdroid.api.IMapController;
import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;
 
import android.support.v7.app.ActionBarActivity;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
 
 
public class MainActivity extends Activity {
 
    @Override public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        MapView map = (MapView) findViewById(R.id.karta);
        map.setTileSource(TileSourceFactory.MAPNIK);
        map.setBuiltInZoomControls(true);
        map.setMultiTouchControls(true);
 
        GeoPoint startPoint = new GeoPoint(48.13, -1.63);
        IMapController mapController = map.getController();
        mapController.setZoom(9);
        mapController.setCenter(startPoint);
    }
}
экран main:
Java
1
2
3
4
5
6
7
8
9
10
11
12
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:orientation="vertical" 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        
        <org.osmdroid.views.MapView
            android:id="@+id/karta"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
                
</LinearLayout>
Manifest
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.craft.proga_karty"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="9" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
 
</manifest>
подключал библиотеки :
commons-lang3-3.3.2.jar
gson-2.2.4.jar
osmbonuspack_v5.1.jar
osmdroid-android-4.2.jar
Вложения
Тип файла: txt log.txt (5.9 Кб, 7 просмотров)
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
19.02.2015, 09:48     Интеграция карт OSM в проект #6
SkN[i]lpl[e][r], привет!
Молодец, что решил разобраться. Советую отдельные фразы из Logcat вставлять в Google и искать. Сразу поднимешь уровень.
По последней ошибке:
https://groups.google.com/forum/#!to...id/_BdC8Wy3zic
http://stackoverflow.com/questions/1...sdeffounderror
Выдало несколько ссылок на YouTube, также рекомендую поглядеть.
Вы уверены, что ваш город есть в OSM?
Gabberr
101 / 101 / 17
Регистрация: 13.10.2009
Сообщений: 402
19.02.2015, 10:21     Интеграция карт OSM в проект #7
Писал навигатор с использованием осм карт, если хотите чтоб карты были офлайн и мало весили, нужно юзать векторные карты, osmdroid кушает только растровые тайлы, но он лучше в плане отображения, можно вращать карту, удобнее работа со слоями итд. Делал следующим образом: есть либа mapsforge, она как раз юзает векторные карты, нужно взять из нее пару классов и встроить их в osmdroid, чтоб он научился генерировать тайлы из векторной карты, вот даже мануал есть
Для построения маршрута офлайн лучшая либа graphhopper
Встраивается достаточно просто, если что обращайтесь.
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 230
19.02.2015, 11:49  [ТС]     Интеграция карт OSM в проект #8
CoolMind, Здорова!
Цитата Сообщение от CoolMind Посмотреть сообщение
Вы уверены, что ваш город есть в OSM?
Да, город есть, довольно подробная карта, в растровом виде скачал её (OpenStreetMap MapQuest). Спасиб за инфу, буду разбираться

Добавлено через 4 минуты
Gabberr, с векторными картами будут подтормаживать слабые устройства я думаю, но этот вариант я тоже рассмотрю, если что попробую 2 проекта сделать с векторными и с растровыми картами что лучше будет потом посмотрим)) Спасибо огромное за инфу) Если что, буду писать в эту тему)
krapotkin
2137 / 2075 / 533
Регистрация: 14.04.2014
Сообщений: 10,067
19.02.2015, 13:44     Интеграция карт OSM в проект #9
можно сделать векторы почти без особых проблем, там же размер экранчика-то небольшой
вот выделить из БД только нужные векторы - задача нереально объемная
так что мейнстрим - готовые картинки )
Gabberr
101 / 101 / 17
Регистрация: 13.10.2009
Сообщений: 402
19.02.2015, 15:05     Интеграция карт OSM в проект #10
Тормозов совсем не было, рендеринг тайлов происходит в бекграунде, просто где-то быстрее отрисовывает карту, где-то медленнее.
вот выделить из БД только нужные векторы - задача нереально объемная
так что мейнстрим - готовые картинки )
Векторные карты генерируются с помощью утилиты, на выходе один файл - map.osm, путь к которому указываем в коде, либа всё делает за вас.
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 230
22.02.2015, 12:53  [ТС]     Интеграция карт OSM в проект #11
Мне удалось с помощью мануала по примеру подключить к Osmdroid библиотеки от mapsforge. для работы нужна карта формата .map.
Все никак не могу разобраться как сохранить карты в формате "*.map". Инструкции как делать есть, но на скачивание библиотек и программ ссылки почему то не работают. Может есть альтернативный способ как получить карты в формате для mapsforge?

Добавлено через 44 минуты
я не могу скачать osmosis для конвертирования из карт OpenStreetMap в формат карт для mapsforge. Ссылка недоступна пишет

Добавлено через 1 час 5 минут
Gabberr, у вас не осталось архива с osmosis? весь интернет перерыл, найти не могу. с оффициального сайта не качается у меня
Gabberr
101 / 101 / 17
Регистрация: 13.10.2009
Сообщений: 402
22.02.2015, 15:50     Интеграция карт OSM в проект #12
Все осталось на предыдущем месте работы, можете собрать из исходников
А вот и нашел где скачать http://www.filewatcher.com/m/osmosis...6837385-0.html
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 230
22.02.2015, 15:59  [ТС]     Интеграция карт OSM в проект #13
Gabberr,
Цитата Сообщение от Gabberr Посмотреть сообщение
Для построения маршрута офлайн лучшая либа graphhopper
Встраивается достаточно просто
Не получается у меня, сложновато... Даже пример не получается, сотни ошибок, без понятия что делать...

Добавлено через 5 минут
Gabberr, Спасиб за osmosis
Gabberr
101 / 101 / 17
Регистрация: 13.10.2009
Сообщений: 402
24.02.2015, 17:25     Интеграция карт OSM в проект #14
Инструкция же есть пошаговая
https://github.com/graphhopper/graph...droid/index.md
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 230
27.02.2015, 19:47  [ТС]     Интеграция карт OSM в проект #15
я не могу понять где они эти команды пишут в эклипсе:
$ git clone git://github.com/graphhopper/graphhopper.git graphhopper
$ cd graphhopper
$ ./graphhopper.sh import your-area.pbf

Добавлено через 6 минут
я вот с этим и завис, какая то командная строка что ли...

Добавлено через 2 часа 57 минут
кажись догадался, через командную строку maven работают
Gabberr
101 / 101 / 17
Регистрация: 13.10.2009
Сообщений: 402
27.02.2015, 22:52     Интеграция карт OSM в проект #16
Это не в эклипсе, а в командной строке.
git clone - клонирует проект из удаленного репозитория
cd - переход в папку
./graphhopper.sh import your-area.pbf - запуск баш скрипта graphhopper.sh с параметром your-area.pbf
your-area.pbf - исходник osm карты, из которого нужно сгенерировать граф дорог.

Добавлено через 5 минут
Полагаю, под виндой сидишь, раз сходу не понял, что в терминале нужно писать, если так - советую скорей переходить на линуху.
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 230
28.02.2015, 15:44  [ТС]     Интеграция карт OSM в проект #17
да под виндой, теперь понял что делать)

Добавлено через 7 часов 16 минут
я смог выполнить эти команды с помощью терминала cygdrive для виндовс, вроде как получился граф дорог. Так же с помощью Android Studio смог скомпилировать проект и закинул apk на телефон. Установил все, работает, карты с интернета прога качает и прекрасно по ним строит маршруты. Но при выборе моей карты, которую я закинул на карту памяти, пишет "Приложение остановлено". Использовал карту Казахстана.
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 230
28.02.2015, 15:51  [ТС]     Интеграция карт OSM в проект #18
Вот скриншот консоли при создании графа, ошибок вроде как не видно, значит все правильно я думаю...
Миниатюры
Интеграция карт OSM в проект  
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 230
28.02.2015, 20:23  [ТС]     Интеграция карт OSM в проект #19
Ура! ну наконец то заработало!)
Опишу порядок своих действий:
Скачал проект graphhopper с официального сайта.
Скачал Android Studio (Eclipse не поддерживается почемуто).
Использовал эту инструкцию по настройке проекта в Android Studio.
Скачал cygdrive и maven (т.к. сижу под виндой).
Проделал все манипуляции в командной строке для получения графа маршрутов.
Получил apk файл из android studio и установил его на телефон.
Закинул граф маршрутов с картой на карту памяти телефона.
Вот в принципе и все много мороки было с обрезкой карты, пришлось скачать сначала карту страны, потом с помощью osmosis удалось ее обрезать и преобразовать в формат .map с помощью плагина от mapsforge.

Добавлено через 2 минуты
навигация неплохо работает, меньше чем за секунду строит маршрут! да и карта меньше мегабайта! супер просто теперь нужно разобраться как выбирать по адресу начало маршрута и также адрес конца маршрута, а то в примере по удержанию на экране ставились точки.

Добавлено через 55 секунд
а, еще как бы сделать чтобы просмотр карты происходил только в определенной области, чтоб за границы города не выходил...

Добавлено через 13 минут
я так понимаю graphhopper отдельно идет от osmdroid? Его нужно встраивать как то?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.03.2015, 14:50     Интеграция карт OSM в проект
Еще ссылки по теме:

Android API Google Карт
Реализация карт с метками Android
Границы google карт Android
Android Интеграция библиотеки с GitHub в Студию
Android Google maps метод поиска фрагмента карт на разметке для разных версий андроид

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 230
01.03.2015, 14:50  [ТС]     Интеграция карт OSM в проект #20
Помогите пожалуйста убрать правильно лишнее из MainActivity.
В общем при запуске программа просит выбрать сохраненные карты на карте памяти, либо загрузить их с интернета.
только после этого открывается окно просмотра карты.
Необходимо убрать пункты выбора и чтобы программа при запуске загружала сразу же карты с карты памяти и показывала их. (карта одна и та же).
Ниже скриншот как выглядит начальный экран. нужно все это удалить и убрать все процедуры и функции из MainActivity. я много раз пытался, ничего не получается вечно ошибки выдает...
Листинг в архиве, сайт не дал мне весь листинг выложить
Миниатюры
Интеграция карт OSM в проект  
Вложения
Тип файла: rar MainActivity.rar (5.5 Кб, 38 просмотров)
Yandex
Объявления
01.03.2015, 14:50     Интеграция карт OSM в проект
Ответ Создать тему
Опции темы

Текущее время: 12:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru