Първо - предполагам, че 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 метра от потребителското ви местоположение и не са изтрити.