PostGIS의 GEOMETRYCOLLECTION을 처리하는 동안 GEOMETRYCOLLECTION을 단순 GEOMETRY로 변환하는 것을 처리하는 것으로 보이는 here이 있지만 ST_Intersect 내부 함수에서만 작동합니다.함수 이름을 인수로 전달합니다.
게으르다. 나는 게으르다. 나는 함수가 인자로 실행되도록함으로써 더 강력하게 만드는 것이 좋을 것이라고 생각했지만, 그렇게하지 않는다.
CREATE OR REPLACE FUNCTION ST_GeoCollConv_(geofunction, geometry, geometry) RETURNS boolean AS $$
DECLARE
is1collection boolean;
is2collection boolean;
BEGIN
is1collection := GeometryType($1) = 'GEOMETRYCOLLECTION';
is2collection := GeometryType($2) = 'GEOMETRYCOLLECTION';
IF NOT is1collection AND NOT is2collection THEN
return PERFORM geofunction($1, $2);
END IF;
IF NOT is1collection THEN
FOR i IN 1..ST_NumGeometries($2) LOOP
IF PERFORM geofunction($1, ST_GeometryN($2, i)) THEN
RETURN true;
END IF;
END LOOP;
ELSIF NOT is2collection THEN
FOR i IN 1..ST_NumGeometries($1) LOOP
IF PERFORM geofunction(ST_GeometryN($1, i), $2) THEN
RETURN true;
END IF;
END LOOP;
ELSE
FOR i IN 1..ST_NumGeometries($1) LOOP
IF ST_GeoCollConv_(geofunction, $1, $2) THEN
RETURN true;
END IF;
END LOOP;
END IF;
RETURN false;
END;
$$ LANGUAGE 'plpgsql';
어떻게하면됩니까?
감사합니다 yieldsfalsehood, 특히 내가 ST_Overlaps 함수를 사용하는 경우, 지금까지 작성한 모든 실험보다 솔루션으로 더 많은 성공을 거두었습니다. 나는 다중 다각형을 사용하는 방법을 아직 모르고이 방향으로 조사 할 것이다. (+1에 대한 명성이 충분하지 않다.) – annoyed
다행스럽게도 나는 도울 수 있었고, 행운을 빈다. – yieldsfalsehood