Questa è probabilmente una domanda semplice, ma non sono molto bravo con PostGIS e non lo escludo completamente.Distanza tra 2 POINT in Postgis in srid 4326 in metri
Fondamentalmente ho una tabella (nodes
) con una colonna POINT (point
). Ho creato un indice su questa colonna
create index nodes__points on nodes using gist (point)
La colonna è stato creato con
select addgeometrycolumn('nodes', 'points', 'POINT', 4326, 2)
Sto usando srid 4326 perché sto aggiungendo i dati che è in forma (latitudine, longitudine). (cioè il sistema di coordinate in cui la posizione di Dublino, Irlanda è lat = 53.353 lon = -6.264 (che ho aggiunto con GeomFromText('POINT(-6.264 53.535)')
)).
Per ogni punto, voglio trovare tutti i punti che sono più o meno all'interno di una scatola di 1 km centrato su questo punto (così 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;
. Essa non deve essere precisi, solo una figura hueristic ruvida. Bbox un 1 km va bene, un cerchio 1 chilometro va bene. non deve essere esattamente 1 km, solo che ordine di grandezza.
il ST_Distance
/ST_DWithin
/etc. tutti utilizzano le unità del SRID, che per 4326/WGS64 è gradi (in modo 1 = 1 grado di lattitude/longitudine). ma voglio usare metri.
ho provato ST_distance_sphere
e st_dwithin
che può utilizzare metri, ma se lo faccio, il explain
mostra che l'indice non viene utilizzato.
Come posso ottenere approssimativamente quello che voglio, e utilizzare l'indice geografico?
UPDATE: questo è in PostgreSQL 9.1 e PostGIS 2.0 svn build.
Forse di qualche aiuto: [ST_DWithin prende come parametro di laurea, non metri, perché?] (Http://stackoverflow.com/questions/8444753/st-dwithin -takes-parameter-as-degree-not-meters-why) – radek
domanda obbligatoria: quale versione di PostGIS? Quale versione di PostgreSQL? – filiprem