2009-11-23 50 views
1

我正在考虑创建一个位置感知的iPhone应用程序,它可以通过打包感兴趣点列表(POI)来脱机工作。该应用程序将从CoreLocation中读取用户的当前位置,并按照与用户当前位置接近的顺序生成POI列表。用于iPhone的地理空间库

我需要两个基本的地理空间功能才能将此应用程序关闭。第一个是测试某个点(用户的当前位置)是否位于特定地理空间边界内的函数。第二个是可以给我两个经纬度点之间距离的函数。我将使用第二个函数按照用户当前位置的接近度对POI列表进行排序。

据我所知,这个问题领域很好,有开源的选项。主要候选人(我知道)是GEOS C++库。我想我会用这样的方式是通过编译GEOS作为静态库

我的问题是(和链接作为项目依赖,因为你做的包括three20库):

  1. 什么是将两个必要功能加入到我的应用程序中的最佳方式。

  2. 如果问题1的最佳答案是将GEOS编译为静态库并将其链接到我的项目,那么以前做过这些的人能否提供一些指针?我是编译新手,静态库构建等。我很想看到一些示例代码或教程,介绍如何将GEOS编译并包含在一个具有简单示例用法的项目中。

+0

+1对于编译iPhone的GEOS产生的静态lib。你设法达到这个目标吗?我目前正在尝试(或打击:/)让iPhone在空间上工作,GEOS可能需要某些功能。所以我对这个GEOS部分的进展感兴趣。感谢您的反馈意见。 – yonel 2010-03-20 14:45:02

+0

对于我需要做的事情'CLLocation'的'getDistanceFrom:'对我来说效果不错,我没有把GEOS编译成一个静态库 - 但是如果你挖掘了任何东西,我们会再次评论。 – Prairiedogg 2010-03-20 15:25:41

回答

1

对于点之间的距离,请参见CLLocationgetDistanceFrom:方法。

我不确定您的地理空间边界是什么意思,但如果您的意思是您有一个矩形定义位置,则可以将其转换为CGRect,将所有点的纬度和经度偏移90和180分别确保您没有负数,请将CLLocation对象转换为CGPoint,然后使用CGRectContainsPoint来确定您的位置是否在该矩形内。

所有描述的功能都是标准iPhone SDK的一部分。

+0

我所说的地理空间边界是某种几何形状(也许是投射在球体或地球模型上的多边形或某物)。对于我的使用情况(确定经纬度点是否落在某个城市内部),覆盖城市外部的矩形可以很好地工作。 – Prairiedogg 2009-11-23 12:11:35

+0

在这种情况下,首先获取数据是最困难的部分。根据所需的精确度,您甚至可以使用(比如说)Geonames.org找到城市的中心,然后查看您的观点是否在15英里内或其他地方。 – iKenndac 2009-11-23 13:27:28

3

好吧,我花了一些时间,但现在我认为我能够为iPhone构建静态库或GEOS(对于模拟器和实际设备都是x86和ARM):libgeos.alibgeos_c.a:实现和它的API。

你可以得到binaires那里(用于GEOS版本3.1.1,这是不是非常最后一个): http://bit.ly/aTKsI6

(还有一些其他的二进制文件存在,其余的是spatialite)

这项工作主要通过了解通过.sh脚本完成交叉编译的方式来实现。这个博客是必须看到的:http://robertcarlsen.net/2009/07/15/cross-compiling-for-iphone-dev-884

+0

非常感谢分享二进制文件。以下是如何将不同体系结构的多个* .a文件合并为一个通用二进制文件的工具:http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/lipo.1。 html – 2011-01-12 18:40:20

+0

GEOS位于LGPL之下,因此以这种方式分发应用程序可能违反许可证。请参阅http://osgeo-org.1803224.n2.nabble.com/licensing-when-doing-a-static-link-of-GEOS-in-iOS-td6289131.html – 2011-07-19 11:10:09