2009-11-23 63 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