PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

postgresql postgis Jeśli punkt wewnątrz okręgu

Po pierwsze - zakładam, że lat_long to kolumna typu georafy. Jeśli jest to kolumna typu geometry będziesz musiał zmodyfikować moje przykłady do jakiegoś innego EPSG (prawdopodobnie 3857 metryczne EPSG dla całego świata). Jest to bardzo ważne, ponieważ st_dwithin sprawdza metry dla typu geopraphy , aw jednostkach mapy dla geometrii (a dla EPSG 4326 jednostką jest stopień, a nie metr)

Wstaw swoje dane w ten sposób

insert into car_wash values (1,'aaa',st_setsrid(st_makepoint(54.51, 22.54),4326))

Wyjaśniam po co używać st_setsrid, st_makepoint i co to do diabła jest 4326.- 4326 to EPSG 4326 - jest to najbardziej znany układ odniesienia współrzędnych (gdzie masz szerokość i długość w stopniach).

  • st_makepoint - utworzy punkt geograficzny z twoich współrzędnych szerokości i długości geograficznej. Będzie wyglądać jak bajty, ale nie martw się, jeśli będziesz potrzebować lat i long z jakichś powodów, możesz je uzyskać za pomocą funkcji st_x() i st_y() lub st_astext(). Najlepszą rzeczą w posiadaniu geomów lub geogów (w tym przypadku) jest to, że możesz użyć indeksu gist. Bardzo potężne narzędzie, które przyspiesza Twoje zapytania geograficzne.

  • st_setsrid - st_makepoint utworzy punkt, ale z srid=0. Musisz poinformować POSTGIS, w jakim EPSG ma odczytywać Twoje dane. Na przykład, jeśli powiesz mu, żeby przeczytał to z 4326, będzie we właściwych miejscach na mapie świata google, ale jeśli powiesz na przykład 3857 będzie w zupełnie innym miejscu, ponieważ 3857 to system metryczny, a nie stopień, więc będzie około 50 i 50 metrów od lewego dolnego rogu (a może w lewo w górę, nie pamiętaj)

Utwórz indeks w geog

create index on car_wash using gist (geog);

Mamy tabelę, mamy w niej dane i indeksujemy. Teraz chcemy sprawdzić, czy Twój punkt znajduje się blisko którejkolwiek z Twoich myjni samochodowych.

select *
  from car_wash cw
 where ST_DWithin (cw.geog,ST_GeogFromtext('SRID=4326;POINT(54.21 22.54)'),1000)
  AND cw.was_deleted=false

W ST_DWithin trzecim parametrem jest odległość w metrach (georpahy) lub jednostkach mapy (geometria). W tym przypadku pokaże Ci wszystkie myjnie samochodowe, które znajdują się w odległości do 1000 metrów od Twojej lokalizacji użytkownika i nie zostały usunięte.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Eksportuj tabelę z bazy danych Postgres (na serwerze) do pliku csv (na lokalnie) w java

  2. funkcje tablicy biginteger

  3. Uzyskaj czas wykonania zapytania PostgreSQL

  4. urlencode tylko z wbudowanymi funkcjami

  5. Zapytanie Postgresql do aktualizacji pól za pomocą wyrażenia regularnego