En postgress, tengo la siguiente función que usa ST_MakeEnvelope
en función de las coordenadas de la ventana gráfica de Google Maps para devolver todos los proyectos dentro de esa ventana gráfica.
CREATE OR REPLACE FUNCTION public.search_projects_area( lngw double precision, lats double precision, lnge double precision, latn double precision ) RETURNS SETOF project_locations LANGUAGE sql STABLE AS $ function $ SELECT A.* FROM project_locations A WHERE st_intersects( A.location :: geography, ST_MakeEnvelope(lngw, lats, lnge, latn, 4326) :: geography ) $ function $
A continuación se muestra cómo obtengo las coordenadas para crear el sobre:
const bounds = this.map.getBounds(); const sw = this.map.getBounds().getSouthWest(); const ne = this.map.getBounds().getNorthEast(); const lngw = sw.lng(); const lats = sw.lat(); const lnge = ne.lng(); const latn = ne.lat();
El problema es que los proyectos en áreas específicas a veces no se recuperan dependiendo de dónde tengo el mapa ampliado o posicionado. Sin embargo, los proyectos están definitivamente dentro de la ventana gráfica en todos los casos.
Es como si el método ST_MakeEnvelope
no creara el rectángulo correcto en función de la ventana gráfica del mapa.
¿Es correcto mi código anterior?
Al convertir a geography
, los bordes del cuadro delimitador se crean utilizando grandes arcos circulares en lugar de líneas rectas. Por lo tanto, un punto que mira dentro de la ventana gráfica (proyectado en 3857) puede estar fuera de la caja.
Entonces, o desea trabajar con grandes arcos circulares y es un problema de visualización, o desea apegarse a lo que se muestra y necesitaría quitar el molde a geography
.