[PostNAS Suite] Einlesen von Kreisbögen

Peter Korduan peter.korduan at gdi-service.de
Mi Aug 3 09:06:35 PDT 2016


Am 30.06.16 um 09:42 schrieb Anja Gruenberger:
> Hallo zusammen,
>
> beim Einlesen von Kreisbögen werden Zwischenpunkte  erzeugt. Dies führt
> bei Verschneidungen zu kleinsten Splitterflächen.
> Ich verwende ogr2ogr mit GDAL 1.11.3, released 2015/09/16.
>
> Hier mal ein Beispiel:
>
> Polygon aus Postgres:
> -------------------------------------
> 288983.809 5661449.159,
> 288986.624 5661451.339,
> 288986.928 5661451.417,
> 288989.928 5661453.326,
> 288994.382 5661456.007,
> 288994.094 5661456.55,
> 289000.686 5661460.615,
> 288994.675 5661470.059,
> 288994.385686349 5661470.18947708,
> 288994.175663501 5661470.2635365,
> 288993.960986135 5661470.32276506,
> 288993.649 5661470.381,
> 288993.333128978 5661470.40793843,
> 288993.110431014 5661470.408043,
> 288992.888268237 5661470.39261268,
> 288992.575 5661470.344,
> 288977.95 5661455.266,
> 288983.809 5661449.159
>
>
> Polygon in NAS-Datei:
> ---------------------------------
> 288983.809 5661449.159 288986.624 5661451.339
> 288986.624 5661451.339 288986.928 5661451.417
> 288986.928 5661451.417 288989.928 5661453.326
> 288989.928 5661453.326 288994.382 5661456.007
> 288994.382 5661456.007 288994.094 5661456.550
> 288994.094 5661456.550 289000.686 5661460.615
> 289000.686 5661460.615 288994.675 5661470.059
> 288994.675 5661470.059 288993.649 5661470.381 288992.575 5661470.344
> 288992.575 5661470.344 288977.950 5661455.266
> 288977.950 5661455.266 288983.809 5661449.159
>
> Weiß jemand woran das liegt und ob man das beheben kann?
>
> Viele Grüße,
> Anja Grünberger.
>
>
> _______________________________________________
> NAS mailing list
> NAS at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/nas
>

Hallo Anja,

das kommt, weil jeder Kreisbogen jeder Geometrie einzeln interpoliert 
wird. Wenn nun die Laufrichtungen der Geometrien in unterschiedliche 
Richtungen verlaufen, liegen die Interpolationspunkte nicht an den 
selben Stellen. Ich würde mal sagen dass es der Grund ist warum Lücken, 
aber auch Überlappungen entstehen können.

Eine Lösung haben wir dafür noch nicht, aber Lücken in gemergten Flächen 
wie die nach einem Union aller Flurstücke einer Flur schließen wir mit 
folgender Funktion:

CREATE OR REPLACE FUNCTION filter_rings(
     geometry,
     double precision)
   RETURNS geometry AS
$BODY$
  SELECT ST_Collect( CASE WHEN d.inner_rings is NULL OR NOT 
st_within(st_collect(d.inner_rings), ST_MakePolygon(c.outer_ring)) THEN 
ST_MakePolygon(c.outer_ring) ELSE ST_MakePolygon(c.outer_ring, 
d.inner_rings) END) as final_geom		-- am 20.07.2016 angepasst
   FROM (/* Get outer ring of polygon */
         SELECT ST_ExteriorRing(b.the_geom) as outer_ring
           FROM (SELECT (ST_DumpRings((ST_Dump($1)).geom)).geom As 
the_geom, path(ST_DumpRings((ST_Dump($1)).geom)) as path) b
           WHERE b.path[1] = 0 /* ie the outer ring */
         ) c,
        (/* Get all inner rings > a particular area */
         SELECT ST_Accum(ST_ExteriorRing(b.the_geom)) as inner_rings
           FROM (SELECT (ST_DumpRings((ST_Dump($1)).geom)).geom As 
the_geom, path(ST_DumpRings((ST_Dump($1)).geom)) as path) b
           WHERE b.path[1] > 0 /* ie not the outer ring */
             AND ST_Area(b.the_geom) > $2
         ) d
  $BODY$
   LANGUAGE sql IMMUTABLE
   COST 100;

Im zweiten Parameter eine Flächengröße eingeben ab der die inner Rings 
weggelassen werden sollen. Z.B. Splitterlöcher kleiner 0.01 (1 cm2)

Gruß Peter

-- 
GDI-Service Rostock
Dr. Peter Korduan
Joachim-Jungius-Str. 9
18059 Rostock
Tel: 0381 40344444
Mobil: 0175 5446411
E-Mail: peter.korduan at gdi-service.de


Mehr Informationen über die Mailingliste NAS