Вызов функции PostGIS для набора геометрий - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь перебрать набор геометрий и посмотреть, не пересекаются ли они с другой геометрией, так что-то вроде этого:

select unnest(
    ARRAY[
        ST_Intersects(box,ST_GeomFromText('POINT(4 4)')),
        ST_Intersects(box,ST_GeomFromText('POINT(4.0001 4.0001)')),
        ST_Intersects(box,ST_GeomFromText('POINT(4.4 4.4)')),
        ST_Intersects(box,ST_GeomFromText('POINT(4.4002 4.4002)')),
        ST_Intersects(box,ST_GeomFromText('POINT(5 5)'))
    ]
) from (select ST_MakeBox2D(ST_Point(3,2),ST_Point(5,4)) as box) as sq

Как я могу это сделать, не вызывая ST_Intersects для каждой точки отдельно

1 Ответ

0 голосов
/ 04 февраля 2019

Если вы имеете в виду, что не хотите писать st_intersects на каждом из них, вы можете перевернуть их:

select st_intersects(st_MakeBox2D(ST_Point(3,2),ST_Point(5,4)), point) from unnest(
    ARRAY[
        ST_GeomFromText('POINT(4 4)'),
        ST_GeomFromText('POINT(4.0001 4.0001)'),
        ST_GeomFromText('POINT(4.4 4.4)'),
        ST_GeomFromText('POINT(4.4002 4.4002)'),
        ST_GeomFromText('POINT(5 5)')
    ]) point;

Таким образом, вы не повторяете пересечение, просто вставляетемассив и проверить пересечение с коробкой.Конечно, внутренне проверка всегда выполняется для каждого из них.

...