iOS有离线地理编码框架、库或数据库吗?

16

是否存在适用于iOS的(离线)地理编码框架、库或数据库?有没有获取数据的地方?

我需要将全球(或至少是美国)城市的街道地址转换为经纬度,以进行日出和日落计算。

必须使用可在iPhone OS上运行的格式(可以是数据库文件或使用C/Objective-C编写)提供信息。

6个回答

31

我的建议:

  • 从Open Street Maps获取数据,只需注明来源即可。一些国家的OSM提取物已经存在,我不知道是否已经针对某些城市进行了一些提取,但是我认为您可以自己完成这项工作。

[编辑] 例如,您可以从http://www.openstreetmap.org下载数据,只需单击导出选项卡,选择Open Street Map XML Data格式,然后导出数据:您将获得所选范围的OSM数据。 还可以从cloudmade下载更多数据:http://downloads.cloudmade.com/

  • 然后将此数据导入sqlite数据库。然后在其中包含地理信息创建一个空间索引:使用spatialite( spatialite是一个非常好的GIS扩展程序到Sqlite)可以实现此类操作。

[编辑] Spatialite提供了一个GUI工具,可以从各种数据源格式创建空间数据库。可以从这里下载该工具的二进制文件:http://www.gaia-gis.it/spatialite-2.4.0-4/binaries.html(spatialite_gui)。我链接到2.4.0 beta,因为它最能支持.osm文件。

另一个很好的资源是QGis,可以可视化OSM数据/创建spatialite DB。它是免费/开源的,并且非常成熟:http://www.qgis.org/

  • 完成上述步骤后,您就可以实现基本的地理编码器,因为spatialite实现了“给我最接近这个GPS坐标的线”等函数(基本GIS功能)。

以下是大致的内容。如果您对这种方法感兴趣,我可以提供更深入的细节:我在自己的侧面实现了这一点。我知道如何为iOS编译spatialite(这花费了我一些时间...),还知道如何导入OSM数据并为其创建空间索引。


请详细解释一下,我会很感激。特别是,我该如何从哪里下载Open Street Maps数据?另外,请说明如何进行数据库导入和spacialite操作。谢谢! - Moshe
1
我添加了一些更多的细节。如果你觉得我的回答有趣,请点赞!;) - yonel
增加了对QGis的引用。我刚刚下载并尝试了1.6.0版本,OSM的支持得到了改进,同样适用于spatialite。 - yonel
@Aleks:用于测量两个几何图形之间距离的SQL函数是distance()。http://www.gaia-gis.it/spatialite/spatialite-sql-2.3.1.html#p13 这在spatialite代码中映射到c函数“gaiaMinDistance”。据我所记,这是用弧度表示的。即将推出的2.4.0版本添加了一个以米为单位获取距离的函数ST_distance:http://www.gaia-gis.it/spatialite-2.4.0-4/spatialite-sql-2.4-4.html#p13 - yonel
显示剩余5条评论

1

我不确定如何做你想做的事情,但是这里有一些框架:

http://code.google.com/apis/maps/documentation/geocoding/(在线) http://www.gisgraphy.com/(我认为它是离线的)

这个链接也可能对你有帮助:

如何将地址转换为纬度/经度?

希望这能帮到你 :)

编辑:

这也可能会对你有所帮助 :) http://www.geonames.org/export/

在寻找答案时,我发现有些人声称这是资源密集型的,我认为他们可能是正确的 :) 所以在创建应用程序时请考虑这一点;)


这就是我想做的,但我需要离线完成。 - Moshe

0

有没有任何途径可以获取数据? - Moshe
如何将数据保存为 SQL 或 SQLite 文件? - Moshe
我认为你需要自己构建或者去其他线程。 - Rog

0

0

全球(或美国)每个地方的所有地址... 这需要大量的空间,超过了平均 iOS 设备的处理能力。因此,绝对不是离线版本。

然而,您可以简单地使用 Open Street Maps 来获取一些数据,将其存储在某种缓存中(例如仅存储 5 英里半径内的所有内容),并在离开该区域时刷新此缓存。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接