2011-12-28 125 views
1

我在我的應用程序中使用PostGis進行基於位置的計算。在表格中,我有一個名爲'location'的地理類型的列(Point(lon lat))...就像表中存在的行數一樣。 我想通過一個點(Point(lon lat)),並檢查這一點(我通過)和所有行中的位置列之間的距離....如果距離小於5米....它將返回點的名稱。如何查詢。查詢以查找PostGis中的點列和點之間的距離

回答

2

假設你的數據的SRID是4326,你正在尋找的查詢是:

SELECT the_geom FROM mytable WHERE ST_DWithin(the_geom,ST_GeomFromEWKT("srid=4326;POINT(lon lat)"), 0.0008); 

注意,在ST_DWithin單位(0.0008)是在你的投影至同一單位,在4326的情況下他們是學位。如果您的投影數據以米爲單位,您將能夠使用儀表。

對於生產應用程序,您應該使用幾何類型,速度更快。從計算器以前question

簡答題:地理是支持長距離 距離測量一個新的數據類型。如果您使用地理 - 您不需要 瞭解更多有關平面座標系的知識。如果您關心的只是測量距離和長度,並且您擁有來自世界各地的數據,則地理位置通常最好是 。幾何數據類型是一個較舊的數據類型,它具有許多支持它的功能,並且從第三方工具中獲得很大的支持 。如果您對 空間參考系統非常滿意,或者您正在處理的是所有數據都適合單個空間參考系統(SRID)的本地化數據,或者您需要進行大量空間處理,那麼這是最好的選擇。請參閱第8.8節「PostGIS 函數支持列表」,查看當前支持的內容以及 不支持的內容。

-3

太棒了。謝謝。它在數據庫中工作正常。我有以下代碼從PHP ..回調像查詢失敗:
$ locationresult = pg_query($ con,「SELECT id,name FROM gps.locationnames WHERE ST_DWithin(location,ST_GeographyFromText('POINT(lon lat)' ),500)「)或死亡('查詢失敗:'。pg_last_error($ con));

這裏有什麼問題..

+0

你應該發佈這是另一個問題。什麼是錯誤信息? – 2011-12-29 15:55:49

+0

輸入一個新問題,標記爲php – Twelfth 2011-12-29 18:59:15