簡體   English   中英

Postgis中的2個點之間的距離,以43米為單位的srid 4326

[英]Distance between 2 POINTs in Postgis in srid 4326 in metres

這可能是一個簡單的問題,但我不是很擅長PostGIS,也沒有完全理解這一切。

基本上我有一個帶有POINT列( point )的表( nodes )。 我在這個專欄上創建了一個索引

create index nodes__points on nodes using gist (point)

該列是用。創建的

select addgeometrycolumn('nodes', 'points', 'POINT', 4326, 2)

我正在使用srid 4326,因為我正在添加形式(緯度,經度)的數據。 (即愛爾蘭都柏林的位置= 53.353 lon = -6.264的坐標系統(我已經使用GeomFromText('POINT(-6.264 53.535)') ))。

對於每個點,我想找到大致位於該點中心的1km框內的所有點(因此selcet a.id, count(*) from nodes as a, nodes as b where SOME_DISTANCE_FUNCTION_HERE(a.point, b.point, 1000) group by a.id; .它不一定是精確的,只是一個粗略的人文形象.1km的bbox很好,1km的圓很好。它不一定是1km,只是那個順序數量級。

ST_Distance / ST_DWithin / ST_DWithin 所有都使用SRID的單位,4326 / WGS64是度(因此1 = 1度的緯度/經度)。 但我想用米。

我嘗試了ST_distance_spherest_dwithin ,可以使用米,但如果我這樣做, explain顯示索引沒有被使用。

我怎樣才能大致得到我想要的東西, 使用地理索引?

更新 :這是在PostgreSQL 9.1和PostGIS 2.0 svn構建上。

您可以使用ST_Transform來使用儀表,還要記住並非所有功能都可用於地理類型,但如果您真的需要速度使用ST_DWithin,則是最快的方法。 這是度數和米之間轉換的近似值:

| places | degrees    | distance |
| ------ | ---------- | -------- |
| 0      | 1.0        | 111 km   |
| 1      | 0.1        | 11.1 km  |
| 2      | 0.01       | 1.11 km  |
| 3      | 0.001      | 111 m    |
| 4      | 0.0001     | 11.1 m   |
| 5      | 0.00001    | 1.11 m   |
| 6      | 0.000001   | 0.111 m  |
| 7      | 0.0000001  | 1.11 cm  |
| 8      | 0.00000001 | 1.11 mm  |

自寫這篇文章以來,我發現了“地理”而不是PostGIS中的“幾何”類型,它可能完全符合我的要求。

老問題,但你只需要像這樣: ST_Distance(p.geom::geography, u.geom::geography)其中p和u是兩個表的別名

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM