一个解法
这个问题有点老了,但是任何可以使用 Qt 的人都有一个解决方案。该解决方案不仅限于 Windows Phone 平台,我已经针对 Android 完成了它,它也适用于我的桌面。
在 Qt 中,您需要修补 QtLocation 使用的 OSM 插件。它简单、快速和容易。
怎么做 ?
快速实现可以修改QGeoTiledMappingManagerEngineOsm
该类,使其调用您自己的QGeoTileFetcher
而不是QGeoTileFetcherOsm
. 可能有更好的方法来实现这一点,但至少它对我有用。
基本上,您制作了一个从文件系统而不是网络读取切片的 fetcher。例如,您从在线资源(见下文)构建文件系统数据库一次,然后将其与应用程序一起部署以供离线使用。
我从哪里得到瓷砖?
此处提供了如何将图块用于离线实施的信息:
http ://wiki.openstreetmap.org/wiki/Slippy_map_tilenames
这里有两个可以免费使用的瓷砖来源:
- 打开 Street Maps 项目服务器
- Mapquest Open Tiles 服务器
注意许可和使用条款。
打开街道地图
- 项目:wiki.openstreetmap.org/wiki/Main_Page
- 许可证:www.openstreetmap.org/copyright
- 使用条款:wiki.openstreetmap.org/wiki/Tile_usage_policy
- 服务器当前命名为*.tile.openstreetmap.org
MapQuest-OSM 瓷砖
- 项目:developer.mapquest.com/web/products/open/map
- 许可证:opendatacommons.org/licenses/odbl/
- 使用条款:developer.mapquest.com/web/info/terms-of-use
- 服务器当前命名为otile*.mqcdn.com
(抱歉奇怪的链接:我没有足够的声誉来发布真实的链接)。