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;