Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

258
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!