2010-05-03 74 views
3

如何在特定的邊界中搜索地理對象?例如。我有幾個對象,其緯度/經度座標存儲在我的數據庫中。現在我想要檢索位於特定周邊(10英里或20英里)周圍的所有物體。查詢圍繞地理編碼位置(緯度/經度)的邊界

我想我必須做的是要形成像一些查詢:

SELECT * FROM objects o where o.lat < (myPositionLat+x) AND o.lon < (myPositionLon+y) 

這是正確的?我如何確定/設置x和y的值?

回答

1

你必須記住經度之間的距離不是恆定的。緯度是平行的,相距大約111公里(69英里),但在赤道111公里處的經度最寬,在兩極處逐漸趨於零。

在北緯40度或南緯度,經度的距離大約爲85公里(53英里),緯度的距離大致相同,爲111公里(Source)。如果您的地理對象僅限於某個區域,並且可以接受非常粗糙的過濾器,則可以使用這些信息來確定您的偏移量爲xy

但是,如果您的物體在全球範圍內稀疏,則應該計算great-circle distance。幸運的是,這在haversine formula中相對容易。您可能想要進一步閱讀並查看Chris Veness在Calculate distance, bearing and more between Latitude/Longitude points處的實現。

如果您只有幾個地理對象,則可以簡單地計算從您的點到每個地理對象的大圓距離。然後,只需按距離對結果列表進行排序,然後按英里或公里過濾一些閾值。

但是,如果您將擁有多個地理對象,則應該考慮使用具有spatial indexing功能的數據庫。 MySQLPostgreSQLSQL Server 2008都具有地理空間特徵(本地或通過擴展),其中包括空間索引和半正式公式的實現。