Как использовать карту OSM в приложении для android.? Есть ли учебник, чтобы узнать об использовании OSM в android.?

Привет, ребята из прошлой недели я ищу учебник / руководство или шаги, чтобы включить открытую карту улиц в мое приложение для android. Все, что я нашел, - это либо большой проект с гораздо большей функциональностью, либо так много вопросов закончилось без надлежащего вывода о "как"..!

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

4 ответов


Я не знаю никаких учебников, но вот код, который я написал для минимального примера с использованием Osmdroid.

// This is all you need to display an OSM map using osmdroid
package osmdemo.demo;

import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapController;
import org.osmdroid.views.MapView;
import android.app.Activity;
import android.os.Bundle;

public class OsmdroidDemoMap extends Activity {
    private MapView         mMapView;
    private MapController   mMapController;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.osm_main);
        mMapView = (MapView) findViewById(R.id.mapview);
        mMapView.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE);
        mMapView.setBuiltInZoomControls(true);
        mMapController = (MapController) mMapView.getController();
        mMapController.setZoom(13);
        GeoPoint gPt = new GeoPoint(51500000, -150000);
        mMapController.setCenter(gPt);
    }
}
/* HAVE THIS AS YOUR osm_main.xml
---------------------------------------------------------- XML START
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <org.osmdroid.views.MapView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/mapview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:clickable="true" />
</LinearLayout>
---------------------------------------------------------- XML END
Include slf4j-android-1.5.8.jar and osmdroid-android-4.1.jar in the build path
(Google search for where to get them from)
*/

обратите внимание, что теперь вы должны использовать последнюю версию (4.1), чтобы избежать блокировки загрузки плиток из OSM.

также обратите внимание, что они перемещают свои репозитории в Github, и процесс еще не завершен. Эта страница скачать держит ссылки для банок


этот образец проекта OSMdroid это, безусловно, самый простой,что я столкнулся. Не более 5 минут, чтобы быть запущен и работает. Обратите внимание на файл манифеста.

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

вот некоторые фрагменты из различных проектов. Но не все из них проверил.

вы должны скачать OSMdroid и SLF4J, в , Add as Library osmdroid, исправить AndroidManifest.xml с соответствующими разрешениями (см. первый учебник). Если вы это сделаете, нет необходимости изменять gradle.build файл, как рекомендовано в первом уроке.

Я рекомендую вам использовать для начала более старые версии osmdroid (3.х) при использовании этих. Как только вам будет удобно, перейдите на более новую версию osmdroid (4.x или 5.икс.)

классы GeoPoint и MapController меняют имена в более новых версии, так что следите за НЕСОВМЕСТИМЫЕ ТИПЫ ОШИБКА

IGeoPoint не может быть преобразован в GeoPoint

IMapController не может быть преобразован в MapController


Я объяснил шаги здесь. Я также рекомендую вам взглянуть на их Пример Проекта что очень полезно. И их документация о как ;)

и Автономного Использования

1 - Вы должны скачать карту, используя MOBAC.

2-Поместите его в /mnt/sdcard/osmdroid/

после этих шагов все то же самое, что объяснил @Nick.


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

  1. вы можете сделать инструменты для записи в эту базу данных. Есть REST Api https://wiki.openstreetmap.org/wiki/API_v0.6 . Это то, что вы используете, если вам нужно внести изменения в база данных. Это наименее распространенный вариант использования, но наиболее тщательно документирован. API является основным API OSM и может использоваться для загрузки данных, но это не рекомендуемый способ загрузки данных OSM.

  2. Далее вы можете прочитать данные из этой базы. Лучший способ сделать это, чтобы загрузить planet extracts https://wiki.openstreetmap.org/wiki/Planet.osm и меньшие выдержки, размещенные geofabrik http://download.geofabrik.de/. Если вы хотите сделать более конкретные запросы, лучшие варианты могут быть Overpass API https://wiki.openstreetmap.org/wiki/Overpass_API.

  3. наконец, есть ряд услуг, которые построены поверх данных OSM, таких как (плитки карты, маршрутизация, поиск POI, геокодирование). Это, скорее всего, то, что вы ищете, есть много вариантов для этого. Для Android хорошим полным решением является Mapbox https://www.mapbox.com/android-docs/map-sdk/overview/ . Великое дело о Mapbox Android sdk заключается в том, что они предоставляют все, как плитки карты, маршрутизация, поиск POI, геокодирование, Автономные карты и даже живой трафик с помощью одной службы. Также вы можете перейти по приведенной выше ссылке и посмотреть учебники и пример кода. Плохо то, что вам нужно будет использовать сервис mapbox, и есть риск блокировки поставщика, но большинство продуктов mapbox с открытым исходным кодом. Если вы работаете немного трудно, вы должны быть в состоянии собрать воедино другие решения для себя.

надеюсь, что это помогает.