Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

267
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda