Usando PostGIS 2.0.0 necesito filtrar los resultados de una función, que devuelve muchos PUNTOS, para encontrar los que se encuentran dentro de un área elíptica (como una línea de gran círculo con un buffer alrededor) definida por dos puntos y una distancia (todos los parámetros pasados en la consulta).
Un filtro usando ST_Distance hace el truco, pero me pregunto si hay alguna manera de acelerarlo.
Consulta simplificada:
SELECT candidate_point
FROM my_function(some, params)
WHERE
ST_Distance(candidate_point, 'SRID=4326;POINT(1 2)'::geography) +
ST_Distance(candidate_point, 'SRID=4326;POINT(3 4)'::geography) <= 60000
Intenté usar ST_DWithin como filtro adicional, pero eso lo hace diez veces más lento. Dado que candidate_point proviene de una función, no de una tabla, no hay ningún índice que utilizar.
1 votos
No entiendo tu respuesta, Reality: en el fondo, esta pregunta no parece tener nada que ver con ningún polígono. Al igual que antes, pide seleccionar puntos relativos a dos focos de una elipse. Parece que ambas preguntas se refieren a posibles soluciones para un criterio de selección que aún no has articulado. ¿Por qué no empiezas de nuevo y haces la pregunta que realmente debe preguntarse: ¿cuál es exactamente el criterio de selección que quiere aplicar? Deje que sus encuestados utilicen su creatividad y experiencia para sugerir soluciones en lugar de centrarse en hacer que sus soluciones tengan éxito.
0 votos
Esta pregunta sí tiene un polígono: el creado por ST_Buffer. Esa forma no es una elipse, como antes (los requisitos han cambiado). El contexto es que necesito encontrar filas coincidentes para las características que se encuentran en el camino entre dos puntos. Los criterios completos de la trayectoria que se debe utilizar son muy complejos y la mayor parte del trabajo se realiza fuera de la DB (por otra persona). Mi tarea es hacer un filtro preliminar para eliminar las características que están definitivamente demasiado lejos para ser relevantes. Primero me pidieron que encontrara características dentro de una elipse, pero ahora se ha reducido a un "corredor", es decir, una línea expandida.
0 votos
Así que en realidad se trata de la misma cuestión, como ha sospechado @underdark: quieres seleccionar puntos que estén "cerca" de la geodésica entre dos puntos dados. El enfoque del buffer aquí y el enfoque de la elipse en la pregunta anterior son sólo dos formas posibles de resolver el mismo problema.
0 votos
Vale, no importa.
0 votos
Prueba a eliminar ::geografía. Eso podría ayudar