PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

postgresql postgis Ако точка вътре в кръг

Първо - предполагам, че lat_long е колона от географски тип. Ако това е колона от геометричен тип, ще трябва да модифицирате моите примери към някои други EPSG (вероятно 3857 метрични EPSG за целия свят). Това е много важно, защото st_dwithin проверява в метри за тип geopraphy и в картни единици за геометрия (а за EPSG 4326 единицата е градус, а не метър)

Вмъкнете данните си по този начин

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

Обяснявам защо да използвате st_setsrid, st_makepoint и какво, по дяволите, е 4326.- 4326 е EPSG 4326 - това е най-известната координатна референтна система (където имате ширина и дължина в градуси).

  • st_makepoint - ще създаде географска точка от вашите шир и дълги координати. Ще изглежда като байтове, но не се притеснявайте, ако имате нужда от lat и long по някакви причини, можете да ги получите с функциите st_x() и st_y() или st_astext(). Най-доброто от geoms или geogs (в този случай) е, че можете да използвате gist index. Много мощен инструмент, който ускорява вашите географски заявки.

  • st_setsrid - st_makepoint ще създаде точка, но със srid=0. Трябва да кажете на POSTGIS в какъв EPSG трябва да чете вашите данни. Например, ако му кажете да го прочете с 4326, той ще бъде на правилните места на световната карта на Google, но ако кажете например 3857, той ще бъде на съвсем различно място, тъй като 3857 е метрична система, а не степен, така че ще бъде около 50 и 50 метра от левия долен ъгъл (или може би наляво нагоре, не помня)

Създайте индекс на geog

create index on car_wash using gist (geog);

Имаме таблица, имаме данни в нея и индекс върху нея. Сега искаме да проверим дали вашата точка е близо до някоя от вашите автомивки.

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

В ST_D В рамките на третия параметър е разстоянието в метри (георпатия) или единици на картата (геометрия). Така че в този случай ще ви покаже всички автомивки, които са до 1000 метра от потребителското ви местоположение и не са изтрити.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да разположите PostgreSQL в Docker контейнер с помощта на ClusterControl

  2. Записи, базирани на курсора в PostgreSQL

  3. PostgreSQL last_value игнорира нули

  4. PostgreSQL комбинации без повторения

  5. Postgresql ограничение от N групи