2016-06-23 18 views
1

私はmultipolygonジオメトリからまったく同じポリゴンを削除しようとしています。私はST_RemoveRepeatedPointsを試しましたが、ジオメトリを削除していないようです。どのように私はそれらを削除することができます誰に教えてください?マルチポリゴンから同じポリゴンの複数のエントリを削除するにはどうすればよいですか?

+0

しないでください[クロスポスト](http://gis.stackexchange.com/:

CREATE or REPLACE FUNCTION clean_multipoly(input_multipoly geometry) RETURNS GEOMETRY AS $$ DECLARE single_poly geometry; polygons_array geometry[]; poly_array_element GEOMETRY; is_contained BOOLEAN; BEGIN -- initialize the array to a empty array polygons_array = array[]::geometry[]; -- now iterate over the single polygons FOR single_poly IN SELECT (ST_Dump(input_multipoly)).geom LOOP is_contained = false; -- Now you need the iterate again over the array you are building -- and check every element if is equal to the actual single polygon. -- You cannot use a array operator for checking if a element is already contained in the array, -- because this would eliminate polygons which are different but have the same extent. -- Only ST_Equals checks properly for geometries equality FOREACH poly_array_element IN ARRAY polygons_array LOOP IF ST_equals(single_poly, poly_array_element) THEN is_contained = TRUE; END IF; END LOOP; IF is_contained = FALSE THEN polygons_array = array_append(polygons_array, single_poly); END IF; END LOOP; RETURN ST_collect(polygons_array); END; $$ LANGUAGE plpgsql; 

はとても機能を使用しますq/199662/1872) –

答えて

1

単一のSQLクエリでは困難ですが、plpgsql関数を使用すると簡単です。

機能ST_Dump()は、マルチゲージを単一のジオメトリに展開します。あなたは、単一のジオメトリを反復処理し、一意性を確認することができるより:

SELECT clean_multipoly(your_geom) FROM your_table; 
関連する問題