在android中部分下载开放街道地图

时间:2014-02-22 08:15:30

标签: android android-mapview openstreetmap

我正在创建一个应用程序,允许用户使用在线和离线地图,在线地图我使用谷歌地图API,离线我使用开放街道地图(因为谷歌地图无法根据他们的政策下载或缓存),如何我可以部分下载地图吗?

例如,现在我有一个坐标为x,y的命运,如何在此坐标周围下载地图区域并保存在我的设备上供以后使用,以后如何加载它?

目前我只能使用地图视图显示和放大。

3 个答案:

答案 0 :(得分:2)

我推荐mapsforge,您可以为Android甚至桌面执行离线地图。与具有高缩放级别的图块相比,它需要更少的带宽。缺点是您必须在自己的服务器上为每个区域创建一个映射,就像我对graphhopper一样。

答案 1 :(得分:0)

您是在谈论由tiles或矢量地图组成的栅格地图吗?从官方OSM服务器下载大量磁贴是针对tile usage policy的,因为这些服务器运行在资金来源上。不过,您可以render your own tiles,例如TileMillMaperitive

如果您想使用矢量地图,只需转到OSM wiki并按照首页上的Download链接进行操作。

对于非常小的区域,比如某些街道,您可以使用regular API。对于较大的区域,比如一个城市,您应该尝试Overpass API。对于任何更大的东西,最好的是使用area or country extract。之后,您可以使用osmosispbftoosmosmconvert等工具进一步处理数据。

请注意,您仍需要将此原始地图数据渲染到矢量地图。

答案 2 :(得分:0)

你应该(深入)查看openstreetmap.org的wiki并在网上搜索“tiles offline osm”。

还有一个名为 osmdroid 的项目。它有一个小部件,其中包含Google Maps Widget的大部分功能。有一个离线磁贴提供程序,可以利用下载的磁贴(使用特殊工具创建的缓存和zip文件)。

该领域最大的问题之一是大多数磁贴服务器不允许下载大块磁贴以供离线使用。如果你使用像Mobile Atlas Creator这样的工具,你会被瓷砖服务器阻止,只下载告诉你“你被封锁”的图片。

因此,如果您想为具有更高缩放级别(> 14)的应用用户提供非常大的区域,则会遇到问题。但是,如果您只为一个小城市提供地图,您可以尝试使用其中一个开放式磁贴服务器(AFAIK MapQuest是具有更多解放下载策略的服务器之一)或从商业提供商处购买一定数量的磁贴(请参阅维基,我不想在这里做广告。)

如果存在某种当前地图的点对点文件共享,那就太好了。因为OSM的许可证(至少我如何理解)说,可以根据OSM数据销售地图,但这些地图可以以任何方式共享和发布。

如果有人找到共享地图的解决方案(没有太多的AWS / provider / cloudfront / ......),那么对于许多Android App程序员来说这将是有趣的。 osmdroid的优点是所有已安装的应用都可以重复使用相同的地图。