Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

266
Vistas
POSTGIS Obtener consulta de ubicaciones más cercanas

Estoy tratando de ubicar todas las ofertas cerca de un usuario dentro de una distancia de 100 km. El usuario comparte la ubicación y la consulto en la tabla de ofertas: id, nombre, texto, addressId (addressId es la clave externa)

Tabla de direcciones: id, dirección, ubicación.

 Select Offers.id, Address.id from Offers, Address where ST_Distance( ST_Transform( [12.9406589,77.6185572] ]::Geometry, 3857), ST_Transform( Address.location::Geometry, 3857) < 100 and Address.id = Offers.addressId

Cuando ejecuto la consulta anterior, arroja un error de sintaxis:

Error de sintaxis de Postgres cerca de "]"

¿De qué otra manera debo dar las coordenadas?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Si bien las respuestas de JimJones cubren cómo crear un punto, hay varios otros problemas:

  1. st_distance usa la unidad del CRS, que es metros para 3857. Está buscando entradas dentro de los 100 m de dicha ubicación
  2. 3857 en una proyección utilizada solo para DISPLAY. No calcule la distancia en esta proyección, están muy distorsionados. Utilice una proyección local adecuada o utilice geography en lugar de la geometry , que utiliza metros de forma predeterminada
  3. Idealmente, tendría un índice en su geometría/geografía, y luego puede usar ST_DWithin en lugar de ST_Distance , ya que el primero utiliza el índice espacial
  4. Si sus datos están en la India en lugar del extremo norte, significa que ha cambiado la latitud y la longitud al crear el punto.

La consulta podría volverse similar a

 SELECT Offers.id, Address.id FROM Offers JOIN Address ON Address.id = Offers.addressId WHERE ST_DWithin(ST_MakePoint(77.6185572, 12.9406589)::geography, Address.location::Geography, 100000);

con un índice sobre la geografía

 CREATE INDEX geogidx ON Address USING GIST((location::geography));
over 4 years ago · Santiago Trujillo Denunciar

0

¿Ha intentado combinar ST_MakePoint and ST_SetSRID para crear su punto?

 SELECT Offers.id, Address.id FROM Offers, Address WHERE ST_Distance( ST_SetSRID(ST_MakePoint(12.9406589,77.6185572),3857), ST_Transform( Address.location::Geometry, 3857)) < 100 AND Address.id = Offers.addressId

Nota : la función ST_MakePoint espera los parámetros como longitude,latitude , no al revés.

Ver también esta answer relacionada.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda