sto cercando di risolvere il problema di trovare i vicini n vicine usando PostGIS:Trova n Vicini più vicini per un determinato punto utilizzando PostGIS?
Punto di partenza:
- Tavolo geoname con geonames (da geonames.org) contenente latitudine/longitudine (WSG- 84)
- aggiunta una geom GeometryColumn con srid = 4326 e tipo di dati = PUNTO
- geom Pieno di valori: UPDATE geoname SET geom = ST_Se tSRID (ST_Point (longitudine, latitudine), 4326);
- Creato indice GIST per geom (CREATE INDEX geom_index ON geoname UTILIZZO GIST (geom);)/geom_index Clustered: CLUSTER geom_index ON geoname;)
- Creato PRIMARY KEY indice UNIQUE BTREE per geonameid
problema: Find n (ad esempio 5) vicini più prossimi per un determinato punto nella tabella geoname rappresentate da id (geoname.geonameid
Possibile soluzione:.
Ispirato http://www.bostongis.com/PrinterFriendly.aspx?content_name=postgis_nearest_neighbor, ho provato la seguente domanda: tempo
"SELECT start.asciiname, ende.asciiname, distance_sphere(start.geom, ende.geom) as distance " +
"FROM geoname As start, geoname As ende WHERE start.geonameid = 2950159 AND start.geonameid <> ende.geonameid " +
"AND ST_DWithin(start.geom, ende.geom, 300) order by distance limit 5"
Processing: circa 60s
anche cercato un approccio basato su EXPAND:
"SELECT start.asciiname, ende.asciiname, distance_sphere(start.geom, ende.geom) as distance " +
"FROM geoname As start, geoname As ende WHERE start.geonameid = 2950159 AND start.geonameid <> ende.geonameid AND expand(start.geom, 300) && ende.geom " +
"order by distance limit 5"
Tempo di lavorazione: circa 120s
L'applicazione prevista è una sorta di completamento automatico. Pertanto, qualsiasi approccio che richiede più di> 1 s non è applicabile. È generalmente possibile ottenere un tempo di risposta di < 1s con PostGIS?
Penso che tu abbia una migliore possibilità su http://gis.stackexchange.com/ per ottenere una risposta. –