[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