如何在Android应用程序中使用OSM映射。是否有任何教程可以学习如何在android中使用OSM。

时间:2014-03-10 08:58:36

标签: android google-maps-api-3 openstreetmap osmdroid

大家好过去一周我正在寻找教程/手册或步骤将Open street map包含到我的android应用程序中。我发现的任何一个都是一个功能更多的大项目,否则很多问题都没有得到关于“如何”的正确结论......!

是否有适当的博客/网站或文档可供新人参考。

5 个答案:

答案 0 :(得分:15)

我不知道任何教程,但这里是我为使用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,但此过程尚未完成。此页面downloads包含广告连结的链接

答案 1 :(得分:5)

This OSMdroid sample project绝对是我遇到的最简单的。启动和运行不超过5分钟。注意清单文件。

为了更复杂一点,this tutorial会显示一个包含当前地点的地图。

来自各个项目的

Here are some snippets。然而,Haven没有测试过所有这些。

您应该下载OSMdroidSLF4J,放入libs文件夹,Add as Library osmdroid,修复具有适当权限的AndroidManifest.xml(请参阅第一个教程)。如果您这样做,则无需按照第一个教程中的建议更改gradle.build文件。

我建议您在使用这些时使用旧版本的osmdroid(3.x)作为初学者。一旦感到舒服,请迁移到较新版本的osmdroid(4.x或5.x)。

GeoPoint和MapController类会更新较新版本的名称,因此请注意INCOMPATIBLE TYPES ERROR

  

IGeoPoint无法转换为GeoPoint

     

IMapController无法转换为MapController

答案 2 :(得分:3)

我已经解释了步骤HERE。 我还建议你看看他们的Sample Project非常有用。关于HOW;)

的文档

离线使用

1-您必须使用MOBAC下载地图。

2-将其放入/mnt/sdcard/osmdroid/

完成这些步骤后,一切都与@Nick解释的相同。

答案 3 :(得分:2)

人们使用谷歌地图服务的一个错误就是他们将OpenStreetMap视为地图图块提供者。您需要知道OpenStreetMap实际上是一个可自由编辑的大型wiki地理数据库,您可以通过三种不同的方式使用此数据库。

  1. 您可以创建工具来写入此数据库。有REST Api https://wiki.openstreetmap.org/wiki/API_v0.6。如果您必须对数据库进行更改,则使用此选项。这是最不常见的用例,但是最全面的文档记录。 API是主要的OSM API,也可用于下载数据,但不是推荐的下载OSM数据的方法。

  2. 接下来,您可以从此数据库中读取数据。最好的方法是下载由geofabrik https://wiki.openstreetmap.org/wiki/Planet.osm托管的行星提取物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产品都是开源的。如果你努力工作,你也应该能够为自己拼凑其他解决方案。

  4. 希望这会有所帮助。

答案 4 :(得分:1)

OSM确实很棒,但是很难与它的google api一起专门使用,并且也没有太多的教程和文档,最好的选择是使用mapbox之类的服务 其中包含出色的文档和大量资源,易于使用且价格合理。希望这会有所帮助。