Использование ST_Intersection с тремя или более таблицами - PullRequest
0 голосов
/ 14 марта 2019

Я пытаюсь добиться пересечения нескольких таблиц с PostGIS, сохраняя геом для каждой фигуры.

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

Так, например:

480128 | 3Sh3W | Otamatea | MOZ | S | 2 | B' | 5 | P 5 | geom
480128 | 3Sh3W | Turangai| MOZ | L/S | 2 | B' | 5 | P 5 | geom
480128 | 3Sh3W | Makahu | ZOT | L/S | 2 | B' | 5 | P 5 | geom

SQL, который я использовал до сих пор:

CREATE TABLE sd_processed AS 
SELECT 
    A.title_no, 
    B.erosion, 
    C.series, 
    C.domnzsc nzsc,
    C.ps, 
    D.prd_class as prd, 
    E.slope as slope, 
    F.drain_clas as drain,
    G.veg,
    ST_DUMP(ST_INTERSECTION(
        A.geom, 
        ST_INTERSECTION(A.geom,
            ST_INTERSECTION(B.geom, 
                ST_INTERSECTION(C.geom,
                    ST_INTERSECTION(D.geom, 
                        ST_INTERSECTION(E.geom, 
                            ST_INTERSECTION(F.geom, G.geom)
                        )
                    )
                )
            )
        )
    )) geom
FROM
    sd_title A,
    sd_erosion B,
    sd_particle_size C,
    sd_potential_rooting_depth D,
    sd_slope E,
    sd_soil_drainage F,
    sd_vegetation G
WHERE
    ST_INTERSECTS(A.geom, B.geom) = true
    AND ST_INTERSECTS(A.geom, C.geom) = true
    AND ST_INTERSECTS(A.geom, D.geom) = true
    AND ST_INTERSECTS(A.geom, E.geom) = true
    AND ST_INTERSECTS(A.geom, F.geom) = true
    AND ST_INTERSECTS(A.geom, G.geom) = true
    AND ST_INTERSECTS(B.geom, C.geom) = true
    AND ST_INTERSECTS(B.geom, D.geom) = true
    AND ST_INTERSECTS(B.geom, E.geom) = true
    AND ST_INTERSECTS(B.geom, F.geom) = true
    AND ST_INTERSECTS(B.geom, G.geom) = true
    AND ST_INTERSECTS(C.geom, D.geom) = true
    AND ST_INTERSECTS(C.geom, E.geom) = true
    AND ST_INTERSECTS(C.geom, F.geom) = true
    AND ST_INTERSECTS(C.geom, G.geom) = true
    AND ST_INTERSECTS(D.geom, E.geom) = true
    AND ST_INTERSECTS(D.geom, F.geom) = true
    AND ST_INTERSECTS(D.geom, G.geom) = true
    AND ST_INTERSECTS(E.geom, F.geom) = true
    AND ST_INTERSECTS(E.geom, G.geom) = true
    AND ST_INTERSECTS(F.geom, G.geom) = true
LIMIT 1000;

Однако, это приводит к работе ST_INTERSECTION ()в некоторых строках все остальные строки возвращают пустую геометрию.

Кто-нибудь знает другой подход, чтобы использовать здесь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...