【问题标题】:Geospatial library for the iPhoneiPhone 的地理空间库
【发布时间】:2009-11-23 11:43:55
【问题描述】:

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

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

我知道这个问题领域已经广为人知,并且有开源选项。领先的候选人(据我所知)是GEOS C++ 库。我想我会使用它的方式是将 GEOS 编译为静态库(并将链接作为项目依赖项,就像您包含 three20 库一样。)

我的问题是:

  1. 将这两个必要功能放入我的应用程序的最佳方法是什么。

  2. 如果问题 1 的最佳答案是将 GEOS 编译为静态库并将其链接到我的项目,那么在此之前做过此操作的任何人都可以提供一些建议吗?我是编译、静态库构建等方面的新手。我希望看到一些示例代码或教程,了解如何通过简单的示例用法编译 GEOS 并将其包含在项目中。

【问题讨论】:

  • +1 对于为 iPhone 编译 GEOS 产生的静态库。你有没有做到这一点?我目前正在尝试(或战斗:/)让空间站在 iPhone 上工作,某些功能可能需要 GEOS。所以我对你在这个 GEOS 部分的进展很感兴趣。感谢您的反馈。
  • 对于我需要做的事情 CLLocationgetDistanceFrom: 对我来说效果很好,我没有追求将 GEOS 编译为静态库 - 但如果你有任何发现,请再次评论。跨度>

标签: iphone static-libraries geospatial


【解决方案1】:

好的,我花了一些时间,但现在我认为我能够正确地为 iPhone 构建静态库或 GEOS(模拟器和真实设备的 x86 和 ARM):libgeos.alibgeos_c.a : 实现及其 api。

您可以在那里获得二进制文件(对于 GEOS 版本 3.1.1,这不是最后一个): http://bit.ly/aTKsI6

(那里还有一些其他的二进制文件,其余的都是用于spatialite)

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

【讨论】:

【解决方案2】:

点间距离见CLLocationgetDistanceFrom:方法。

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

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

【讨论】:

  • 我所说的地理空间边界是某种几何形状(可能是投影在球体上的多边形或地球模型或其他东西)。对于我的用例(确定纬度/经度点是否落在某个城市内),覆盖城市外部的矩形可以正常工作。
  • 在这种情况下,首先获取数据是最困难的部分。根据所需的精度,您甚至可以使用(例如)Geonames.org 找到城市中心,然后查看您的点是否在距离它 ​​15 英里之内。
猜你喜欢
  • 1970-01-01
  • 2012-06-29
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多