postgis получает геометрию в радиусе метров, используя wgs84

select *
from zones z
where st_intersects(z.geom, st_Buffer(ST_SetSRID(ST_Point(     2.336031, 48.863172), 3857),1));

Похоже, что '1' в st_buffer интерпретируется как градусы, мне нужно найти геометрию в пределах n метров от заданной точки.

Я нашел ссылку на новую функцию (st_Buffer_Meters), но, похоже, она не изменила ничего.

2 ответа

Решение

Фактический запрос, который в итоге работал:

 select nom
 from zones s
 where ST_DWITHIN(Geography(ST_Transform(s.geom,4326)), ST_Point($1, $2) ,$3);`

Где $1 - Долгота, $2 - Широта, а $3 - расстояние в метрах.

Кроме того, я изменил свои импортированные данные с SRID 3857 на SRID 4326

Вот вопрос gis.stackexchange: https://gis.stackexchange.com/questions/118472/postgis-get-geometries-within-a-radius-of-n-meters-using-wgs84/118476

И вот "Это было задано перед ссылкой https://gis.stackexchange.com/questions/77688/postgis-get-the-points-that-are-x-meters-near-another-point-in-meters

Во-первых, я упростил ваш запрос, чтобы использовать функцию расстояния, которая будет делать то же самое, что и ваш запрос с меньшим количеством слов. ST_Distance_Sphere вернет минимальное расстояние между двумя геометриями в метрах. Однако у меня возникли некоторые трудности с использованием вашего SRID, поэтому я использую ST_Transform для преобразования SRID в 4326

select *
from zones z
where st_distance_sphere(z.geom, 
     ST_TRANSFORM(ST_SetSRID(ST_Point( 2.336031, 48.863172), 3857), 4326  
)< 1000;
Другие вопросы по тегам