【问题标题】:Offline maps OSM离线地图 OSM
【发布时间】:2015-07-17 01:30:21
【问题描述】:

我对 android 应用程序中的离线地图的想法有点坚持。

我想使用 Open Street Maps。但是我怎样才能重新设计他们的风格,然后在我的项目中使用呢?顺便说一句,我正在寻找的资源必须是免费的..

有什么好的教程吗?我是新来的,所以非常感谢您提供任何有用的信息。

【问题讨论】:

  • 您需要全球报道吗?
  • 免费和开源或者只是有一个免费的使用计划?
  • 你需要离线做什么?只是显示一张地图,还是有一些其他的功能,如搜索或路由?
  • @dkiselev 我只需要几个城市。城市数量将不断增长。我需要离线重新设计的地图,能够将其文件存储在服务器上并将其下载到应用程序中。并且必须有在地图上搜索和路线的可能性。
  • @lostintranslation 我需要能够下载几张本地地图(例如,纽约地图、洛杉矶地图)。

标签: android dictionary openstreetmap offline-mode


【解决方案1】:

以下是基础知识:

光栅图块很糟糕。在我看来,这种移动地图的方法非常过时并且没有任何优势(除非您的计划是制作一个非常难看的应用程序)。

另一件事是矢量图块。所有数据都以更有效的方式保存,并且可以非常漂亮地显示。

解决方案(提名)是:

  1. Mapsforge - 感谢@dkiselev
  2. OSMAnd app - 感谢@dkiselev
  3. Mapbox GL(android 版现在还没有发布,但是他们真的很努力)。如果你真的喜欢mapbox,可以考虑 Mapbox Android SDK,它使用光栅图块,但我相信, 当 GL 库发布时,切换到 Mapbox GL 并不难。
  4. AirBNB AirMapView - 开源并已发布版本
  5. Urban Labs Sputnik Demo - 也是有趣的解决方案,但我没有使用它。
  6. Mapzen Open - 开源 android 应用程序,它使用来自任何地方的所有最好的东西。 - 获胜者!

顺便说一句,mapbox gl 实际上允许渲染您自己的地图数据(来自您自己的提供商)。几天前我打开了一个closed issue on github,其中一位项目开发人员给出了很好的回答。

如果您不关心使用自己的数据源并希望在您的项目中快速实现自定义(不是 google/apple)地图 - 也有许多解决方案适合您。你可以想到MapboxScobblerGetYourMap,或者再次谷歌搜索以查找更多信息。实际上,OSM 网站上有一个great article,其中介绍了最流行的 Android 库和应用程序。

最后,祝您好运,您的制图项目。永远不要忘记:

如果你找不到某样东西并不意味着它真的不存在 - 可能你搜索的还不够。

【讨论】:

  • maps.me 也是开源的,但您需要一些技巧来剪切渲染引擎并将其粘贴到您的应用中。
【解决方案2】:

离线栅格切片缓存

如果您需要使用自定义样式显示您的地图离线,您可以使用任何类型的 OSM 渲染。 http://wiki.openstreetmap.org/wiki/Rendering

对于几个城市的情况,我会推荐你​​http://wiki.openstreetmap.org/wiki/AlaCartehttp://wiki.openstreetmap.org/wiki/TileMill

创建您自己的样式,并将地图图块导出到 sqlite db 存档。

之后,您需要为 OSMDroid 库创建自己的 TileProvider。这个答案可以帮助你How to use MOBAC created OSMDroid SQLite tile source file offline?

离线矢量图块。

获取你的地图

如果您需要的不仅仅是使用自定义样式进行渲染,您可以使用: https://getyourmap.com/ 它是 OSM 矢量渲染器。但是访问原始数据以创建路由和搜索会有一些问题。

OSMAND

也许最难但最好的方法是使用 OSMANd。它是开源的,有很多功能,但它是一个应用程序,而不是一个组件或库。

因此,如果您想创建一个独立的应用程序。您将需要切断您不需要的功能。

Mapsforge

https://github.com/saintbyte/mapsforge 它是开源的,因此可以添加路由和搜索。样式,据我所知可能是定制的,但我没有尝试过。

【讨论】:

  • 感谢您的回答。我肯定会使用矢量图块,因为它们的内存消耗更少。但是有没有关于这一切的好教程?因为当我查看 OSM 和 github repo 时,我明白我需要学习如何处理地图。
  • 有免费的矢量渲染器吗?或者也许可以免费使用 Mapbox 渲染器(不是他们提供的数据,而只是渲染引擎)?因为正如我所见,getyourmap 实际上并没有显示他们的渲染器代码..
  • OSMAnd 使用OSMAnd Map Creator 将 osm 数据编码到 protobuffer 切片中。而且要处理 OSMAnd 作为渲染库一点也不容易。可能正在为 OSMand 创建一个插件,这将是您的一个选择。 GetYourMaps 有一个免费选项,但它仍然是封闭源代码。抱歉,这里没有简单的方法。据我所知,MapBox GL 使用 Node.js 作为后端,使用 js 进行客户端渲染。因此,将其转换为 Android 渲染库可能比使用 OSMANd 的相同技巧更加复杂。还有一个选项,我忘记了。 github.com/saintbyte/mapsforge(见答案正文)
  • 我找到了一个绝妙的解决方案!它叫做mapzen,它的项目叫做Open。这是一个 android 应用程序,它使用 OpenScienceMap 进行渲染。所有代码都在github上。这可能是迄今为止发现的最好的开源解决方案。
猜你喜欢
  • 2019-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-10
  • 1970-01-01
  • 2013-04-08
  • 1970-01-01
相关资源
最近更新 更多