проблема в st_contains postgis vie postgres - PullRequest
0 голосов
/ 12 марта 2019

Я новичок в postgis и у меня возникла проблема при использовании st_contains в postgressql.У меня есть две таблицы: одну таблицу с типом MultiLineString и SRID 3857, как это:

1002

MultiLineString ((5422968,66785559 3677150.09505449,5422968.65492085 3677150.0886859,5422952.17411073 3677141.94577852,5422933.98180744 3677132.88239635,5422908.89206302 3677120.3831169,5422889.41793598 3677110.66168418,5422860.41342641 3677096,31330017,5422843.29303681 3677087.88278276), (5422968.4135149 3677150,59358815,5422980.01582934 3677156,57635076,5422990,22979481 3677161,61762274,5423006,301291313 36 * 16 * * 100 * * 100 * * 100 * * 100 * * 100 * * 100 * * 100 * * 100 * * 100 * * 100 * * 100 * * 100 * * 100 * * 100 * * * 100 * * 100 * * * * 100 * * * * 100 * * 100(48.6977500915527 31.3106079101563) '

я использую из st_buffer для первой таблицы, которая имеет многоуровневый тип geom, и ожидаю найти любую точку из таблицы 2, которая находится внутри этого буфера

, когда я использую st_contains,не вернуть ни одной строки, в чем проблема?хотя оба srid 3857

select ST_X(P.geom) lng , ST_Y(P.geom) lat from public."Zone" A
inner join public."Points" P on ST_Contains(ST_Buffer(A.geom, 100), P.geom)

Ответы [ 2 ]

0 голосов
/ 12 марта 2019

Точка не в 3857, а скорее в 4326. Вам нужно сначала преобразовать ее в 3857

select st_asText(st_transform(st_GeomFromText('POINT(48.6977500915527 31.3106079101563)',4326),3857));
                st_astext
------------------------------------------
 POINT(5421008.74296974 3673153.53251071)

При этом более надежно использовать st_dwithin, а не st_buffer.

0 голосов
/ 12 марта 2019

От: https://postgis.net/docs/ST_X.html

И

https://postgis.net/docs/ST_Y.html

Это говорит о том, что geom внутри st_X и st_Y должен быть точкой, или NULL, если он недоступен.

Можете ли вы попробовать просто запустить

select A.geom as lines, P.geom as point from public."Zone" A
inner join public."Points" P on ST_Contains(ST_Buffer(A.geom, 100), P.geom);

Чтобы узнать, что он возвращает?

...