下载osmdroid的地图

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

要下载我试过的地图:

  • MobileAtlasCreator, 但Mapnik地图被locking 。
  • osmdroid-packager 。 它的作品,但只下载9我放大

对我来说,理想的做法是从应用程序本身下载地图,我只想下载你在轨道上的地图,而不是一个完整的部分。

我怎么解决它?

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

使用MobileAtlasCreator / MOBAC的工作解决scheme:

有一个osmdroid文件 ,但它非常薄弱,有时过时。

我在连续的问题上挣扎了一段时间。 这里是osmdroid v4.1的工作解决scheme的细节。

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

  • 由于Mapnik地图有效locking,请select“OpenStreetMap MapQuest”作为源。
  • Atlas格式:select“Osmdroid ZIP”
  • 请注意选中所有需要的缩放级别。 默认情况下,没有select。

select你的地区,创build你的“地图集”。 这会产生一个zip文件。

上传你的设备上的zip文件,在/ sdcard / osmdroid /(确切的path可能会有所不同,如果你已经使用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”的名字(带有这个拼写)是MANDATORY =>这个被用作zip文件中的内部path。 如果你打开你的zip文件,你会看到MOBAC创build了这个“MapQuest”目录。

“.jpg”的扩展名也是MANDATORY =>,因为MOBAC使用.jpg扩展名创build了MapQuest磁贴(需要注意的是,osmdroid中的标准磁贴源全部使用“.png”扩展名)。

在这个阶段,应该没关系 – 只要你真的把地图视图定位在你地图集的一部分(缩放级别和位置)上。

3)返回MOBAC …你也可以select以下Atlas格式:“Osmdroid SQLite”或“MBTiles SQLite”。 在/ sdcard / osmdroid /下的设备上传输文件(Layer.sqlite或Layer.mbtiles)

同样,在你的XYTileSource构造函数中,扩展名必须是“.jpg”。 名字没有关系。

两者都很好。

4)select“Osmdroid GEMF”格式将不起作用:这是GEMF处理jpg拼图的已知错误 。 编辑>在MOBAC,您可以使用“自定义瓷砖处理”function将JPG瓷砖转换为PNG格式。 那么“Osmdroid GEMF”就可以了。

关于第二个首选的方法在问题中问:“有什么办法通过我的应用程序从手机下载地图?”

=>现在回答:是的!

从OSMBonusPack v4.6,有一个CacheManager类,允许直接从Android应用程序下载(矩形)区域的瓷砖。 瓷砖被加载到标准的osmdroid瓷砖caching中。

它可以使用OSMNavigator进行testing。

首先感谢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创build地图之后

今天只是OSM地图瓦片包装工作地图瓦片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/"})); } 

我更喜欢把具体的一些url。