Страница 1 из 1

Не работает ST_Buffer + ST_Crosses

Добавлено: 01 май 2017, 13:47
SmArtem
Здравствуйте, расскажите, пожалуйста, почему запрос не работает корректно. Без ST_Buffer возвращает хоть какие-то пересечения.

Код: Выделить всё

SELECT world_thickets.*
FROM world_roads, world_thickets
WHERE ST_Crosses(ST_Buffer(world_roads.geom, 10, 'endcap=round join=round'), world_thickets.geom);
В чем может причина? Есть альтернативный вариант найти геометрию вдоль мультилинии.

Re: Не работает ST_Buffer + ST_Crosses

Добавлено: 01 май 2017, 14:33
trir
глазками посмотри эти пересечения

Re: Не работает ST_Buffer + ST_Crosses

Добавлено: 01 май 2017, 18:36
Александр Мурый
Судя по слову "world" в названии таблиц могу предположить, что таблицы имеют SRID 4326. Радиус буфера задаётся у вас явно не в градусах.

Попробуйте преобразовать типа геометрии (geography ==> geometry) "на лету":

Код: Выделить всё

    SELECT world_thickets.*
    FROM world_roads, world_thickets
    WHERE ST_Crosses(ST_Buffer(world_roads.geom::geometry, 10, 'endcap=round join=round'), world_thickets.geom);

Re: Не работает ST_Buffer + ST_Crosses

Добавлено: 02 май 2017, 06:45
SmArtem
Извините, забыл указать проекцию. SRID 32646.
Ваша вставка не помогла.
Заработало с ST_Intersects

Код: Выделить всё

SELECT world_thickets.*
    FROM world_roads, world_thickets
    WHERE ST_Intersects(ST_Buffer(world_roads.geom, 10, 'endcap=round join=round'), world_thickets.geom);

Re: Не работает ST_Buffer + ST_Crosses

Добавлено: 02 май 2017, 08:19
trir
О юный падаван
DE-9IM познать следует тебе