下载osmdroid的地图

时间:2014-04-04 12:14:24

标签: android osmdroid

我正在开发一个我需要离线使用地图的应用程序。我使用的是osmdroid和osmbonuspack

要下载我尝试过的地图:

对我而言,理想的情况是从应用程序本身下载地图,我只想下载您在轨道上的地图,而不是完整的部分。

我该如何解决?

有没有办法通过我的应用程序从手机下载地图?

4 个答案:

答案 0 :(得分:20)

使用MobileAtlasCreator / MOBAC的工作解决方案:

有一个osmdroid documentation,但它很弱,有时过时了。

我在连续的问题上挣扎了一段时间。以下是osmdroid v4.1的工作解决方案的详细信息。

1)使用MOBAC构建离线地图时:

  • 由于Mapnik地图被有效锁定,请选择“OpenStreetMap MapQuest”作为源。
  • Atlas格式:选择“Osmdroid ZIP”
  • 注意勾选您需要的所有缩放级别。默认情况下,未选择任何一个。

选择您的区域,创建“地图集”。这会生成一个zip文件。

在/ sdcard / osmdroid /上传设备上的zip文件 (确切路径可能因设备而异。如果您已经使用过osmdroid,则该目录必须已存在)

文件名无关紧要。扩展必须是“.zip”

2)现在,在你的osmdroid应用程序中,你的onCreate方法应该是这样的:

@Override protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    map = (MapView) findViewById(R.id.map);
    map.setTileSource(new XYTileSource("MapQuest",
        ResourceProxy.string.mapquest_osm, 0, 18, 256, ".jpg", new String[] {
            "http://otile1.mqcdn.com/tiles/1.0.0/map/",
            "http://otile2.mqcdn.com/tiles/1.0.0/map/",
            "http://otile3.mqcdn.com/tiles/1.0.0/map/",
            "http://otile4.mqcdn.com/tiles/1.0.0/map/"}));
    map.setBuiltInZoomControls(true);
    map.setMultiTouchControls(true);
    map.setUseDataConnection(false); //optional, but a good way to prevent loading from the network and test your zip loading. 
    IMapController mapController = map.getController();
    mapController.setZoom(_A ZOOM LEVEL YOU HAVE IN YOUR ZIP_);
    GeoPoint startPoint = new GeoPoint(_POSITION SOMEWHERE INSIDE YOUR MAP_);
    mapController.setCenter(startPoint);
}

在此代码中,2个参数值非常重要:

“MapQuest”名称(使用此EXACT拼写)是MANDATORY =>这用作zip文件中的内部路径。如果您打开zip文件,您将看到MOBAC创建了这个“MapQuest”目录。

“。jpg”扩展名也是MANDATORY =>因为MOBAC在带有.jpg扩展名的zip中创建MapQuest磁贴(重要的是要注意,因为osmdroid中的标准磁贴源都使用“.png”扩展名)。

在这个阶段,它应该没问题 - 只要您真正将地图视图定位在地图集的一部分区域(缩放级别和位置)。

3)返回MOBAC ...您还可以选择以下Atlas格式:“Osmdroid SQLite”或“MBTiles SQLite”。 在/ sdcard / osmdroid /

中传输设备上的文件(Layer.sqlite或Layer.mbtiles)

同样,在你的XYTileSource构造函数中,扩展名必须是“.jpg”。这个名字并不重要。

两者都运作良好。

4)选择“Osmdroid GEMF”格式不起作用:在GEMF中处理jpg图块是known bug。 编辑>在MOBAC中,您可以使用“自定义图块处理”功能将JPG图块转换为PNG格式。那么“Osmdroid GEMF”就可以了。

答案 1 :(得分:5)

关于第二个 - 首选 - 在问题中提出的方法: "有没有办法通过我的应用程序从手机下载地图?"

=>现在回答:是的!

从OSMBonusPack v4.6开始,有一个CacheManager类,允许直接从Android应用程序下载(矩形)区域的切片。 Tiles加载到标准的osmdroid tile缓存中。

可以使用OSMNavigator进行测试。

答案 2 :(得分:4)

首先感谢MKer和来自另一篇文章的Tom Kincaid,将两者放在一起。以下适用于我:

这就是我需要做的与MKer不同的事情:

    String[] urls = {"http://127.0.0.1"};
    mapView.setTileSource(new XYTileSource("MapQuest", // name of the main file that has been zipped
            ResourceProxy.string.mapquest_osm, 
            2,        // min map zoom level
            14,       // max map zoom level
            256,      // tile size pixels
            ".jpg",   // extension of the tiles (can be ".png" as well)
            urls));

使用Mobile Atlas Creator创建地图后

答案 3 :(得分:0)

今天只有OSM Map Tile Packager适用于地图图块mapnik,它在PNG中做地图,所以

 if(ConexaoInternet.verificaConexao(getActivity())) { //<-- here i am Checking if has conection with internet
        mapView.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE);
    }else{
        String[] urls = {"http://127.0.0.1"};
        mapView.setTileSource(new XYTileSource("Mapnik", // name of the main file that has been zipped
                ResourceProxy.string.mapquest_osm,
                9,        // min map zoom level
                15,       // max map zoom level
                256,      // tile size pixels
                ".png",
                new String[]{"http://a.tile.openstreetmap.org/", "http://b.tile.openstreetmap.org/", "http://c.tile.openstreetmap.org/"}));
    }

我更喜欢把一些网址混凝土。