Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/117: Рейтинг темы: голосов - 117, средняя оценка - 4.80
9 / 6 / 5
Регистрация: 12.05.2011
Сообщений: 282

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

18.02.2015, 19:14. Показов 25533. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток! Необходимо сделать навигатор по городу, планируется его использование без постоянного подключения к интернету. Думаю для этого необходимо использовать карты от 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
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.02.2015, 19:14
Ответы с готовыми решениями:

C# OSM rendering (отрисовка карт OpenStreetMap)
Доброго времени суток. Прошу отозватся тех, кто сталкивался с отрисовкой карт OpenStreetMap. Интересует любая информация, а так же: ...

Ищу простой и легкий плагин карт OSM или Google
Добрый вечер. Подскажите, пожалуйста, перерыл большинство плагинов карт, но подходящего не нашел, особенно по отображению всех меток...

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

29
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,664
Записей в блоге: 21
18.02.2015, 19:15
загвоздка GIS - это то, что данные, хранящиеся в системе, невозможо красиво нарисовать "на лету"
поэтому для каждого масштаба специальными серверами генерируются "тайлы" - квадратики, покрывающие некую площадь карты
количество изображений таково, что объем сильно превышает возможности мобильного устройства, так что сервер, откуда это все брать по запросу, все-таки нужен
OSM - это бесплатные данные, но не бесплатные сервера! там есть список серверов, за вполне доступную денежку готовых обслужить ваше приложение. либо заводите свой, генерируйте на нем картинки и по запросу отдавайте их на мобильник.

программы-навигаторы с файлами по 500 мб генерируют сильно упрощенную картинку, изготовить которую тоже надо суметь.
сомневаюсь, что все карты влезли в эту библиотеку
0
9 / 6 / 5
Регистрация: 12.05.2011
Сообщений: 282
18.02.2015, 19:47  [ТС]
Ну с картами я можно сказать разобрался С навигацией теперь ступор... Если у кого есть опыт в этом поделитесь пожалуйста)

Добавлено через 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>
0
9 / 6 / 5
Регистрация: 12.05.2011
Сообщений: 282
18.02.2015, 21:13  [ТС]
Поспешил - людей насмешил....
По какойто неведомой мне причине карты не загружаются из архива. Архив закидывал и на карту памяти и на память телефона, тоже самое и с разархивированой папкой, безрезультатно... Может кто разберется
Миниатюры
Интеграция карт OSM в проект  
0
9 / 6 / 5
Регистрация: 12.05.2011
Сообщений: 282
18.02.2015, 22:06  [ТС]
Попробовал создать проект по официальной документации: http://code.google.com/p/osmbo... 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:
XML
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
XML
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 Кб, 17 просмотров)
0
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
19.02.2015, 09:48
SkN[i]lpl[e][r], привет!
Молодец, что решил разобраться. Советую отдельные фразы из Logcat вставлять в Google и искать. Сразу поднимешь уровень.
По последней ошибке:
https://groups.google.com/foru... BdC8Wy3zic
http://stackoverflow.com/quest... founderror
Выдало несколько ссылок на YouTube, также рекомендую поглядеть.
Вы уверены, что ваш город есть в OSM?
0
 Аватар для Gabberr
105 / 105 / 19
Регистрация: 13.10.2009
Сообщений: 406
19.02.2015, 10:21
Писал навигатор с использованием осм карт, если хотите чтоб карты были офлайн и мало весили, нужно юзать векторные карты, osmdroid кушает только растровые тайлы, но он лучше в плане отображения, можно вращать карту, удобнее работа со слоями итд. Делал следующим образом: есть либа mapsforge, она как раз юзает векторные карты, нужно взять из нее пару классов и встроить их в osmdroid, чтоб он научился генерировать тайлы из векторной карты, вот даже мануал есть
Для построения маршрута офлайн лучшая либа graphhopper
Встраивается достаточно просто, если что обращайтесь.
2
9 / 6 / 5
Регистрация: 12.05.2011
Сообщений: 282
19.02.2015, 11:49  [ТС]
CoolMind, Здорова!
Цитата Сообщение от CoolMind Посмотреть сообщение
Вы уверены, что ваш город есть в OSM?
Да, город есть, довольно подробная карта, в растровом виде скачал её (OpenStreetMap MapQuest). Спасиб за инфу, буду разбираться

Добавлено через 4 минуты
Gabberr, с векторными картами будут подтормаживать слабые устройства я думаю, но этот вариант я тоже рассмотрю, если что попробую 2 проекта сделать с векторными и с растровыми картами что лучше будет потом посмотрим)) Спасибо огромное за инфу) Если что, буду писать в эту тему)
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,664
Записей в блоге: 21
19.02.2015, 13:44
можно сделать векторы почти без особых проблем, там же размер экранчика-то небольшой
вот выделить из БД только нужные векторы - задача нереально объемная
так что мейнстрим - готовые картинки )
0
 Аватар для Gabberr
105 / 105 / 19
Регистрация: 13.10.2009
Сообщений: 406
19.02.2015, 15:05
Тормозов совсем не было, рендеринг тайлов происходит в бекграунде, просто где-то быстрее отрисовывает карту, где-то медленнее.
вот выделить из БД только нужные векторы - задача нереально объемная
так что мейнстрим - готовые картинки )
Векторные карты генерируются с помощью утилиты, на выходе один файл - map.osm, путь к которому указываем в коде, либа всё делает за вас.
0
9 / 6 / 5
Регистрация: 12.05.2011
Сообщений: 282
22.02.2015, 12:53  [ТС]
Мне удалось с помощью мануала по примеру подключить к Osmdroid библиотеки от mapsforge. для работы нужна карта формата .map.
Все никак не могу разобраться как сохранить карты в формате "*.map". Инструкции как делать есть, но на скачивание библиотек и программ ссылки почему то не работают. Может есть альтернативный способ как получить карты в формате для mapsforge?

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

Добавлено через 1 час 5 минут
Gabberr, у вас не осталось архива с osmosis? весь интернет перерыл, найти не могу. с оффициального сайта не качается у меня
0
 Аватар для Gabberr
105 / 105 / 19
Регистрация: 13.10.2009
Сообщений: 406
22.02.2015, 15:50
Все осталось на предыдущем месте работы, можете собрать из исходников
А вот и нашел где скачать http://www.filewatcher.com/m/o... 385-0.html
1
9 / 6 / 5
Регистрация: 12.05.2011
Сообщений: 282
22.02.2015, 15:59  [ТС]
Gabberr,
Цитата Сообщение от Gabberr Посмотреть сообщение
Для построения маршрута офлайн лучшая либа graphhopper
Встраивается достаточно просто
Не получается у меня, сложновато... Даже пример не получается, сотни ошибок, без понятия что делать...

Добавлено через 5 минут
Gabberr, Спасиб за osmosis
0
 Аватар для Gabberr
105 / 105 / 19
Регистрация: 13.10.2009
Сообщений: 406
24.02.2015, 17:25
Инструкция же есть пошаговая
https://github.com/graphhopper... d/index.md
1
9 / 6 / 5
Регистрация: 12.05.2011
Сообщений: 282
27.02.2015, 19:47  [ТС]
я не могу понять где они эти команды пишут в эклипсе:
$ git clone git://github.com/graphhopper/graphhopper.git graphhopper
$ cd graphhopper
$ ./graphhopper.sh import your-area.pbf

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

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

Добавлено через 5 минут
Полагаю, под виндой сидишь, раз сходу не понял, что в терминале нужно писать, если так - советую скорей переходить на линуху.
1
9 / 6 / 5
Регистрация: 12.05.2011
Сообщений: 282
28.02.2015, 15:44  [ТС]
да под виндой, теперь понял что делать)

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

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

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

Добавлено через 13 минут
я так понимаю graphhopper отдельно идет от osmdroid? Его нужно встраивать как то?
1
9 / 6 / 5
Регистрация: 12.05.2011
Сообщений: 282
01.03.2015, 14:50  [ТС]
Помогите пожалуйста убрать правильно лишнее из MainActivity.
В общем при запуске программа просит выбрать сохраненные карты на карте памяти, либо загрузить их с интернета.
только после этого открывается окно просмотра карты.
Необходимо убрать пункты выбора и чтобы программа при запуске загружала сразу же карты с карты памяти и показывала их. (карта одна и та же).
Ниже скриншот как выглядит начальный экран. нужно все это удалить и убрать все процедуры и функции из MainActivity. я много раз пытался, ничего не получается вечно ошибки выдает...
Листинг в архиве, сайт не дал мне весь листинг выложить
Миниатюры
Интеграция карт OSM в проект  
Вложения
Тип файла: rar MainActivity.rar (5.5 Кб, 72 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.03.2015, 14:50
Помогаю со студенческими работами здесь

Интеграция шаблонизатора в свой проект
Хочу в свой проект с определенной объектной моделью интегрировать шаблонизатор Twig. Но так, чтобы он, в случае чего, не не конфликтовал с...

Svg интеграция в проект изменение цвета
Подскажите, как грамотно вставлять в проект svg, если дизайнер тебе прислал здоровенные иконки по 2кб. Достаточно ли вставить их в простой...

Интеграция Newtonsoft.Json в свой проект
мне нужно использовать Newton json в проэкте. https://github.com/JamesNK/Newtonsoft.Json чтобы избавится от зависимости в виде .dll я...

Интеграция vue.js + vuex в проект asp.net core
Всем привет. Скачал шаблон vue/vuex в связке с asp.net core с github. Но все же хотелось бы узнать, как самому установить vue/vuex в...

Интеграция qsvn в свой проект: ошибки компиляции undefined reference
Добрый день! Есть необходимость в свое приложение встроить функционал работы с SVN. При этом крайне нежелательно использовать внешние...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru