2011-06-09 39 views
3

我在postgis中遇到了st_distance函數的問題。它返回錯誤結果 - 對於小距離,錯誤不是很大--10,也許是20米,但對於更遠的距離,我的結果與例如谷歌地圖結果之間的差異太大 - 700米高達2公里或更高。我使用srid = 4326.第二件事 - 也許就是這個問題 - 說我有4公里的地方。 Postgis說這是〜0.0417 {{some_units}}。現在我只需將結果乘以100即可得到或多或少的準確結果。我可以通過一些參數來說這個函數會說「以公里/米計的返回值」嗎?Postgis - st_distance

ps。 postgres版本是9.0.1

+0

根據postgis文檔計算,默認單位是米,如果沒有設置其他值。 – Rufinus 2011-06-09 09:04:36

+0

@Rufinus,這對於地理數據類型是正確的,但似乎他正在使用幾何數據類型。比返回的單位與存儲數據相同。 – 2011-06-09 11:26:09

回答

3

您應該使用地理數據類型。

使用幾何數據類型使用的函數,您將返回與數據存儲在同一單位。在您的案例度。

度不能以任何簡單的方式轉換爲米。爲了從未投影的參考系統中以米爲單位來計算結果,計算需要在地球上的綿狀體周圍的「大圓」上進行計算。您正在使用的計算只是使用畢達哥拉斯定理來計算飛機上的距離。

因此,PostGIS不會給出錯誤的結果。 根據您的數據是否覆蓋了大面積,因此地球四捨五入成爲問題,您可以移動到基於計量表的空間參考系統。如果是這樣,則應該使用地理數據類型,並使用srid 4326.

HTH

尼克拉斯

1

,如果你在使用儀表要ST_transform這樣,你應該用你的投影,就目前它是在度:

ST_Distance(st_transform(ST_GeometryFromText('POINT(longitude  latitude)',4326),900913),st_transform(point,900913)) 
0

你應該做的說的西里爾和改造喲你的幾何形狀可以使用以米爲單位的距離單位,例如900913.將你現在以度數(使用srid = 4326)得到的數乘以100,不是要走的路。

根據您的位置,可能有一個以米爲單位的當地地區,對您的位置更準確 - 例如,瑞士的SRID是21781。請檢查:http://gothos.info/tag/coordinate-systems/對於美國地區的一些地區。

0

詳圖Nicklas'answer,因爲所有的geoms具有SRID 4326,您可以使用:

select st_distance(geom1::geography,geom2::geography) 

得到米

或者,更準確的距離,變換分析的幾何形狀,以區域特異性的投影像CRS EPSG:25832 ETRS89/UTM區32N:

select st_distance(st_transform(geom1,25832),st_transform(geom2,25832)) 
0

SRID:4326 ie.WGS1984是表示在緯度和longitude.So世界座標CO當u灣噸至測量距離,我只好在UTM.You項目可以參考在數據庫中

spatial_ref_sys

表,看看哪個SRID使用哪個單位。 要衡量你把它投影到UTM。您可以使用utmzone函數找到所需的utm區域,然後您可以使用下面的查詢。

select st_distance(st_transform(geom1,utmzone(geom1)),st_transform(geom2,utmzone(geom2))) 
0

如果您有數據爲geom回答sal是好的。如果您的數據爲拉長,請嘗試以下操作:

select st_distance(point1,point2) from 
(SELECT ST_GeogFromText('SRID=4326;POINT(0 0)') point1, 
ST_GeogFromText('SRID=4326;POINT(0.25 0.4)') point2) a