[NAS] Splines

"Jäger, Frank (KRZ)" F.Jaeger at KRZ.DE
Mit Mai 13 05:44:22 EDT 2009


Hallo,
im Projekt "EDBS2WKT", das ALK-Daten im Format "EDBS" in OGC-konforme Datenbanken (PostGIS) bringt, stellte sich ein ähnliches Problem.

In PostGIS können weder Kreisbögen noch interpolierte Kurven abgelegt werden.


** interpolierte Kurve: 

Siehe Modul "GEOkonv.bas", Sub "Geo_Spline"

Eine "interpolierte Kurven" aus der ALK wird zwischen zwei gegebenen Stützpunkten immer durch 5 zusätzliche gerechnete Punkte verdichtet und dann als MULTILINE in der Datenbank gespeichert.

Die magische Zahl "5" habe ich durch Probieren ermittelt. Mit EDBS2WKT wird auch ein Hilfsprojekt "Splinedemo" installiert. Damit kann man sich in einem Fenster einen Spline zusammen klicken, den man dann mit verschiedenen Parametern verdichten lässt. Dadurch habe ich den Eindruck gewonnen, dass "5 Punkte" ein ausreichender Kompromiss ist.

Dort können auch die Formeln für die interpolierte Kurve abgeschaut werden.
Der "Spline" der Mathematiker ist nämlich recht "eindimensional": 
   y = f(x)
Mit den gängigen Formeln kann man also nur arbeiten, solange x aufsteigend sortiert ist.

Wenn man aber den "Ententeich im Kurpark" komplett mit einer "interpolierten Kurve" umkreisen möchte, kommt man damit nicht weiter. In EDBS2WKT sind R- *und* H-Wert die Funktionswerte der angenäherten Streckenlänge.


** Kreisbogen:
 
Siehe Modul "GEOkonv.bas", Sub "KreisToPolyWKT"

Auch ein Kreisbogen der ALK muss in eine MULTILINE in PostGIS umgewandelt werden.
Die notwendige Anzahl zu interpolierenden Zwischenpunkte ist dabei abhängig vom Radius und vom Innenwinkel.
Die Kalkulation orientiert sich an der max. Abweichung im Scheitelpunkt der Kurve über jedem Sehenstück der Multiline. Diese Abweichung sollte innerhalb der Darstellungsgenauigkeit in den üblichen Maßstäben bleiben.

Ein flacher Bogen (kleiner Innenwinkel) braucht nur wenige Punkte, auch wenn er lang ist.
Ein kurzer Bogen (kleiner Radius) braucht ebenfalls nur wenige Punkte, auch wenn der Innenwinkel groß ist.

Die Formel zur Ermittlung der notwendigen Anzahl von Zwischenpunkten wurde iterativ aus konstanten, linearen und quadratischen Faktoren ermittelt.

Wenn man alle Punkte "auf den Kreisbogen" interpoliert, dann erzeigt man einen systematischen Fehler.
Alle Abweichungen der Polylinie vom ursprünglichen Kreisbogen liegen dann nämlich innerhalb des Bogens.
Bei Flächenberechnungen usw. würde die Fläche im inneren des Bogens *immer* zu klein berechnet.

EDBS2WKT setzt darum die interpolierten Punkte um die halbe Scheitelhöhe über der Sehne nach außen.
Die Ersatz-Multilinie schneidet den ursprünglichen Kreisbogen im Zick-Zack. Die Flächen fallen abwechselnd nach außen und innen und gleichen sich in der Summe etwa aus.
Gleichzeitig halbiert sich die max. Abweichung zwischen Kurve und Ersatz-Multilinie.

Siehe auch ausführliche Beschreibung in der Dokumentation zu EDBS2WKT auf:
   http://gis.krz.de/alk/edbs2wkt/help/kurven.htm



Mit freundlichen Grüßen

Frank Jäger


> -----Original Message-----
> From: nas-bounces at lists.osgeo.org 
> [mailto:nas-bounces at lists.osgeo.org] On Behalf Of Stefan Zaunseder
> Sent: Tuesday, May 12, 2009 6:09 PM
> To: Entwicklung einer NAS Schnittstelle
> Subject: [NAS] Splines
> 
> Hallo Liste,
> 
> wäre es nicht sinnvoll, in PostNAS eine Funktionalität 
> einzubauen, die nicht Simple Features-konforme Geometrien wie 
> Splines im Zuge des Imports annähert, z.B. per LineString? 
> Idealerweise sollte die Original-Geometrie in einem 
> Zusatz-Feld abgelegt werden, so dass man später bei Bedarf 
> darauf zugreifen kann.
> 
> Ohne eine derartige Funktionalität ist es unmöglich, die NAS 
> komplett in die Geo-DB zu bringen.
> 
> Wer hätte noch Interesse daran?
> 
> Viele Grüße,
> 
> Stefan Zaunseder
> 
> -- 
> 
> GISCAD-Institut - Prof. Dr. Gerd Peyke, Dipl.-Inform. Stefan 
> Zaunseder Büro LA - Moosburger Straße 8 - 84169 Altfraunhofen
> Fon: 08705/1377 - Fax: 08705/1367
> http://www.giscad.de/
>