sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL:visa resor inom en begränsningsram

Eftersom dina koordinater lagras i x,y-kolumner måste du använda ST_MakePoint att skapa en riktig geometri. Efter det kan du skapa en BBOX med funktionen ST_MakeEnvelope och kontrollera om start- och slutkoordinater finns inuti BBOX med ST_Contains , t.ex.

WITH bbox(geom) AS (
  VALUES (ST_MakeEnvelope(-8.68494,41.24895,-8.47569,41.11591,4326))
)
SELECT * FROM trips,bbox
WHERE 
  ST_Contains(bbox.geom,ST_SetSRID(ST_MakePoint(lon_start,lat_start),4326)) AND
  ST_Contains(bbox.geom,ST_SetSRID(ST_MakePoint(lon_end,lat_end),4326));

Obs! CTE är egentligen inte nödvändigt och finns i frågan bara i illustrationssyfte. Du kan upprepa ST_MakeEnvelope funktion på båda villkoren i WHERE sats istället för bbox.geom . Den här frågan antar också SRS WGS84 (4326).



  1. Villkorsförklaring - Php Mysqli

  2. När SIGTERM skickas, stänger den underordnade processen mysql-anslutningen?

  3. Bulkinsats med hjälp av lagrad procedur

  4. Hur jämför man ett datum från mySQL från det aktuella datumet i java?