我正在考虑通过打包一系列兴趣点(POI)来创建一个可以脱机工作的位置感知iPhone应用程序。该应用程序将从CoreLocation
读取用户的当前位置,并按照与用户当前位置的接近顺序生成POI列表。
我需要两个基本的地理空间功能才能让这个应用程序开始运行。第一个是测试点(用户的当前位置)是否位于某些地理空间边界内的函数。第二个函数可以给出两个纬度/经度点之间的距离。我会使用第二个函数按邻近用户的当前位置对POI列表进行排序。
据我所知,这个问题区域已经走得很远,并且有开源选项。领先的候选人(我所知道的)是GEOS C ++库。我想我将使用它的方法是将GEOS编译为静态库(并链接为项目依赖项,就像包含three20库一样。)
我的问题是:
将两个必要功能纳入我的应用程序的最佳方法是什么。
如果对问题1的最佳答案是将GEOS编译为静态库并将其链接到我的项目,那么之前做过此操作的人是否可以提供一些指示?我是编译,静态库构建等的新手。我希望看到一些示例代码或教程,介绍如何编译GEOS并将其包含在项目中,并使用一些简单的示例。
答案 0 :(得分:3)
好的,我花了一些时间,但现在我认为我能够为iPhone构建静态库或GEOS(模拟器和真实设备的x86和ARM):libgeos.a
和{ {1}}:实现及其api。
你可以在那里买到binaires(对于GEOS 3.1.1版本,这不是最后一个): http://bit.ly/aTKsI6
(那里有一些其他的二进制文件,其余的是用于spaceite)
这项工作主要是通过了解通过libgeos_c.a
脚本完成交叉编译的方式来实现的。这个博客是必须看到的:http://robertcarlsen.net/2009/07/15/cross-compiling-for-iphone-dev-884
答案 1 :(得分:1)
对于点之间的距离,请参阅CLLocation
的{{1}}方法。
我不确定你的地理空间边界是什么意思,但如果你的意思是你有一个定义位置的矩形,你可以将它转换为getDistanceFrom:
,从而抵消所有点的纬度和经度。分别为90和180以确保您没有负数,将CGRect
对象转换为CLLocation
s,然后使用CGPoint
确定您的位置是否在该矩形内。
所有描述的功能都是标准iPhone SDK的一部分。