geoc_wgs84togcj02_multipolygon.sql 793 B

123456789101112131415161718192021222324
  1. CREATE OR REPLACE FUNCTION "public"."geoc_wgs84togcj02_multipolygon"("source_geom" "public"."geometry")
  2. RETURNS "public"."geometry" AS $BODY$
  3. DECLARE
  4. target_parts geometry[];
  5. single_polygon geometry;
  6. single_polygon_trans geometry;
  7. final_geom geometry;
  8. BEGIN
  9. IF ST_GeometryType(source_geom) != 'ST_MultiPolygon' THEN
  10. RETURN source_geom;
  11. END IF;
  12. FOR single_polygon IN SELECT (ST_Dump($1)).geom LOOP
  13. single_polygon_trans := geoc_wgs84togcj02_polygon(single_polygon);
  14. target_parts := array_append(target_parts,single_polygon_trans);
  15. END LOOP;
  16. SELECT st_multi(ST_Union(target_parts)) INTO final_geom;
  17. raise NOTICE 'final_geom: %',final_geom;
  18. RETURN final_geom;
  19. END;
  20. $BODY$
  21. LANGUAGE plpgsql VOLATILE
  22. COST 100