estoy tratando de resolver el problema de encontrar los vecinos más cercanos usando n PostGIS:Buscar n Vecinos más cercanos para un punto determinado usando PostGIS?
Punto de Partida: geoname
- tabla con geonames (de geonames.org) que contiene latitud/longitud (WSG- 84)
- añadido un geom GeometryColumn con srid = 4,326 y tipo de datos = punto de
- geom Lleno de valores: geoname ACTUALIZACIÓN SET geom = ST_Se tSRID (ST_Point (longitud, latitud), 4326);
- índice GIST Creado para geom (Crear geom_index ÍNDICE DE LA geoname USO GIST (geom);)/geom_index clúster: geom_index clúster en geoname;)
- Creado PRIMARY KEY índice UNIQUE BTREE para geonameid
problema: Find n (por ejemplo, 5) vecinos más cercanos para un determinado punto en la tabla geoname representados por id (geoname.geonameid
Posible solución:.
Inspirado por http://www.bostongis.com/PrinterFriendly.aspx?content_name=postgis_nearest_neighbor, probé la siguiente consulta: tiempo
"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"
de procesamiento: aproximadamente 60
también intentó un enfoque basado en 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"
Tiempo de ejecución: sobre 120s
La aplicación prevista es algún tipo de autocompletar. Por lo tanto, cualquier enfoque que tome más de> 1s no es aplicable. ¿Es generalmente posible lograr un tiempo de respuesta de < 1s con PostGIS?
Creo que tienes una mejor oportunidad en http://gis.stackexchange.com/ para obtener una respuesta. –