是否有适用于 iOS 的离线地理编码框架、库或数据库?
Posted
技术标签:
【中文标题】是否有适用于 iOS 的离线地理编码框架、库或数据库?【英文标题】:Is there an offline geocoding framework, library, or database for iOS? 【发布时间】:2011-05-21 09:33:51 【问题描述】:是否有适用于 ios 的(离线)地理编码框架、库或数据库?从哪里获取数据?
我需要能够将全球(或至少在美国)城市中的街道地址地理编码为纬度和经度,以便计算日出和日落。
信息必须采用适用于 iPhone 操作系统的格式。 (数据库文件或用 C/Objective-C 编写)
【问题讨论】:
【参考方案1】:我会推荐什么:
从 Open Street Maps 获取数据,许可证只是暗示您提及来源。有一些针对某些国家/地区的 OSM 提取物,我不知道是否已经为某些城市制作了一些,但我认为这可以在您这边实现。[编辑] 例如,您可以从 http://www.openstreetmap.org 下载数据,只需单击导出选项卡,选择 Open Street Map XML Data 格式,然后导出数据:您将获得所选边界框的 OSM 数据。 更多数据可以从 cloudmade 下载:http://downloads.cloudmade.com/
然后将此数据导入到 sqlite DB 中。然后从这个 sqlite DB 中创建一个空间索引,其中包含地理信息:可以使用spatialite 来实现这样的事情(spatialite 是 Sqlite 的一个非常好的 GIS 扩展)[编辑] Spatialite 提供了一个 GUI 工具,用于从各种数据源格式创建空间数据库。该工具可以从这里以二进制形式下载:http://www.gaia-gis.it/spatialite-2.4.0-4/binaries.html (spatialite_gui) 我正在链接到 2.4.0 测试版,因为那是最支持 .osm 文件的版本。
另一个很好的资源是 QGis,用于可视化 OSM 数据/创建空间数据库。它是免费/开源的并且非常成熟: http://www.qgis.org/
完成此操作后,您将能够实现一个基本的地理编码器,因为 spatialite 实现了诸如“给我这个 GPS 坐标最近的线”(基本 GIS 功能)之类的功能。这些是非常粗略的线条。如果您对这种方法感兴趣,我可以提供更深入的细节:我已经实现了这一点。我知道如何为 iOS 编译 spatialite(这花了我一些时间......)以及如何导入 OSM 数据并为其创建空间索引。
【讨论】:
请多解释,我将不胜感激。具体来说,我如何/从哪里下载 Open Street Maps 数据?另外,请解释如何进行数据库导入和空间操作。谢谢! 我添加了更多细节。如果你觉得我的回答很有趣,请投票! ;) 添加了对 QGis 的引用。我刚刚下载并试用了1.6.0版本,对OSM的支持得到了改进,spatialite也是如此。 您是否与 GEOS 和 Proj.4 一起构建了 Spatialite?我现在有针对 iOS 构建的裸 Spatialite,但是当我查看 GEOS 源时,它变得可怕。 :) 对于所有感兴趣的人,这里是我最后两个 cmets 的答案:groups.google.com/group/spatialite-users/browse_thread/thread/…【参考方案2】:我不确定如何做你想做的事情,但这里有一些框架:
http://code.google.com/apis/maps/documentation/geocoding/(在线) http://www.gisgraphy.com/(我认为是离线)
此链接也可能对您有所帮助:
How to convert an address to a latitude/longitude?
希望这有帮助:)
编辑:
这也可能对您有所帮助:) http://www.geonames.org/export/
在寻找答案时,我发现有些人声称这是资源密集型的,我认为他们可能是对的 :) 所以在创建应用程序时考虑一下;)
【讨论】:
这就是我想做的,但我需要离线进行。【参考方案3】:我认为没有可用的现有框架。但是,您可以比联系这个骗子的作者做得更糟:Reverse Geocoding Without Web Access
【讨论】:
是否至少有任何地方可以从中获取数据? 如何将数据作为 sql 或 sqlite 文件获取? 我认为您必须自己构建它或转到另一个线程。【参考方案4】:这个答案可能会有所帮助: How to convert an address to a latitude/longitude?
你可能需要做一些额外的工作。
【讨论】:
【参考方案5】:世界上每个地方(或美国)的所有地址...这占用了大量空间,超出了普通 iOS 设备的处理能力。所以,绝对不是离线版本。
但是,您可以简单地使用 Open Street Maps,它可以帮助您获取一些数据,将其存储在某种缓存中(例如,仅存储 5 英里半径内的所有内容)并在您离开该区域时刷新此缓存。
【讨论】:
【参考方案6】:如果开发人员正在搜索 OpenStreetMaps 路径的教程,我强烈推荐这个教程:
http://shikii.net/blog/offline-maps-in-ios-using-openstreetmap-and-route-me/
这是一个简单的教程,可帮助您开始使用使用 Route-me github 存储库的 Open Street Maps。这是github上的示例应用程序:
https://github.com/Label305/iOS-OfflineMaps-Example
希望对你有帮助
【讨论】:
以上是关于是否有适用于 iOS 的离线地理编码框架、库或数据库?的主要内容,如果未能解决你的问题,请参考以下文章
是否有适用于 Windows 的 JSLint 的离线版本?
是否有适用于 Android 和 iOS 的 OCR 开源库或 sdk(免费)? [关闭]
如何使用 android 中的 OSM 数据为单个城市实现离线地理编码器?