Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 18

Thema: Fehler bei length()

  1. #1
    sushi_2k ist offline Neuer Benutzer
    Registriert seit
    06.06.2007
    Beiträge
    6

    Standard Fehler bei length()

    Hallo,
    wir haben eine Postgre Datenbank aufgesetzt und danach PostGIS installiert. Danach haben wir eine Datenbank erstellt und einen neuen Table (strasse_linestring), der auch auf die PostGIS-Methoden zugreifen kann. Nun haben wir den Table mit Daten, in folgendem Format, gefüttert:

    49.78694444 9.93645278

    D.h. wir haben von Strassen jeweils die Anfangs und Endpunkte und haben sie als Linestring in die Datenbank geschrieben.
    In der Tabelle sind jetzt mehrere Strassen und wir wollen uns die Länge der Strassen anzeigen lassen. Allerdings liefert uns folgendes SQL-Statement

    Code:
    SELECT punkt, LENGTH ( geom ) AS laenge FROM strasse_linestring;
    als Ergebnis:

    Code:
    punkt              laenge  
    character var   double precision
    
    Muenzstrasse   0,0023158127895372
    ...
    Was sind jetzt diese 0,0023158127895372 und wie können wir uns m oder km ausgeben lassen? Oder sollten wir ein anderes Format wählen um die Daten in die Datenbank zu klopfen?
    Wir haben über Google Earth nachgemessen und das Ergebniss müssten ca. 160m sein.
    Schonmal Danke für die Hilfe

  2. #2
    Maik ist offline Benutzer
    Registriert seit
    20.07.2006
    Beiträge
    74

    Standard

    Bei der Koordinate die du eingegeben hast handelt es sich um eine geograpfische Koordinate. Also Länge und Breite. Das wird in ° angegeben. Du willst jetzt allerdings eine Distanz im metrischen System.
    Wenn du einen Punkt eingibst, dann musst du zuerst das Koordinatensystem angeben, dann in ein metrisches System umrechnen und erst dann bekommst du die Distanz in Meter.

    Das Koordinatensystem legst du mit folgendem Befehlfest:
    SetSRID(the_geom, ID des Systems) (the_geom steht für den Namen deiner Geometry-Spalte)

    Die ID wird auch EPSG-Nummer genannt.
    In deinem Fall kannst du einfach deinen Table mit folgendem Befehl updaten:
    UPDATE tablename set the_geom = SetSRID(the_geom, 4326)

    Die metrische Länge bekommst du dann z.B. über folgenden Befehl:
    select length(transform(the_geom, 32632)) from .....

    Die transformierst praktisch in ein metrisches System (hier UTM) und misst erst dann. Wenn du konform zum geltenden deutschen Koordinatensystem sein willst, dann musst du Gauss-Krüger statt UTM verwenden. Aber da weiß ich die EPSG-Nummer gerade nicht.

    Ich hoffe ich habe jetzt keinen Quark erzählt. Aber wenn du es nach der Anleitung machst, dann solltest du die Distanz in Metern bekommen.

  3. #3
    Gisman ist offline Erfahrener Benutzer
    Registriert seit
    20.01.2006
    Ort
    Pfalz
    Beiträge
    794

    Standard

    Zitat Zitat von Maik Beitrag anzeigen
    Die transformierst praktisch in ein metrisches System (hier UTM) und misst erst dann. Wenn du konform zum geltenden deutschen Koordinatensystem sein willst, dann musst du Gauss-Krüger statt UTM verwenden. Aber da weiß ich die EPSG-Nummer gerade nicht.
    Hallo!

    AFAIK wird in Deutschland gerade sukzessive auf UTM umgestellt, um ein europaweit einheitliches System herzustellen. Aber das wird wohl noch einge Zeit dauern, gängig ist immer noch Gauss-Krüger.
    DIE EPSG-Nummer von GK sind 31466 für GK2 bis 31469 für GK5.

    Grüssle Uwe
    Have a lot of fun!

  4. #4
    sushi_2k ist offline Neuer Benutzer
    Registriert seit
    06.06.2007
    Beiträge
    6

    Standard

    Schonmal vielen Dank für die Tipps. Ich hoffe es funktioniert

  5. #5
    sushi_2k ist offline Neuer Benutzer
    Registriert seit
    06.06.2007
    Beiträge
    6

    Standard

    Vielen Dank für die Antwort, das mit den SRID's war der Stein der Weisen. Und jetzt habe ich auch endlich verstanden wofür die SRID's gut sind

  6. #6
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    Dann würde ich vorschlagen, schreibe eine kurze Erklärung und poste sie hier, damit andere auch etwas von deinem Wissen haben ;-)
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  7. #7
    sushi_2k ist offline Neuer Benutzer
    Registriert seit
    06.06.2007
    Beiträge
    6

    Standard

    Die Antwort ist schlicht und ergrefeind, genau das was Maik geschrieben hat. Ich wollte aus geographischen Koordianten Längen berechnen, das geht aber nur wenn ich die SRID ändere mit Transform.
    Nochmal Danke für die Hilfe

  8. #8
    Gisman ist offline Erfahrener Benutzer
    Registriert seit
    20.01.2006
    Ort
    Pfalz
    Beiträge
    794

    Standard

    Zitat Zitat von sushi_2k Beitrag anzeigen
    Die Antwort ist schlicht und ergrefeind, genau das was Maik geschrieben hat. Ich wollte aus geographischen Koordianten Längen berechnen, das geht aber nur wenn ich die SRID ändere mit Transform.
    Nochmal Danke für die Hilfe
    Nur so als Ergänzung und Hintergrund: Die SRID gibt über eine Code-Zahl (z.B. von EPSG) das geographische System an, in dem die Geodaten vorliegen. Darüber wird auch bestimmt ob in Grad, Metern oder sonstwas gemessen wird. Dies wiederum bedeutet, man kann mit Geodaten ohne ein solches angegebenes System z.B. keine Längen und Flächen berechnen, weil man ja die Maßeinheiten nicht kennt.

    Grüssle und eine Schöne Woche
    Uwe
    Have a lot of fun!

  9. #9
    Maik ist offline Benutzer
    Registriert seit
    20.07.2006
    Beiträge
    74

    Standard

    Man sollte dringend immer das SRID angeben. Am besten schon dann, wenn man eine Geometrie einliest. Man kann viele Dinge zwar auch ohne SRID machen, alledings führt das zu Problemen sobald man irgendetwas macht bei dem aus den Koordinaten etwas berechnet wird, bzw. sobald man eine Maßzahl auf die Koordinaten anwenden will (z.B. bei einem Buffer). Wenn man konsquent mit SRIDs arbeitet erspart das einem im nachhinein sehr viel ärger.

    Btw: Außer der Funktion DistanceSphere(geometry) geben alle Messfunktionen die Maßeinheit des SRIDs zurück. Zumindest meines Wissens. DistanceSphere(geometry) gibt Meter zurück.

  10. #10
    Sauerkraut ist offline Benutzer
    Registriert seit
    24.01.2007
    Beiträge
    89

    Standard

    Kann man den genauen Abstand zwischen einem POINT und einer GEOMETRY bestimmen? Mein momentaniger Ansatz ist, dass ich jeweils den Start POINT und den END POINT bei einer Multiline verwende. Das ist aber etwas ungenau. Gibt es da irgendwelche Lösungsansätze?

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 13.02.2012, 16:18
  2. Fehler auf dem Mac 10.6.4
    Von Gargantua im Forum Konfiguration
    Antworten: 0
    Letzter Beitrag: 14.10.2010, 20:30
  3. Problem bei Berechnung mit length()
    Von Klink im Forum PostGIS
    Antworten: 3
    Letzter Beitrag: 23.08.2010, 12:10
  4. Fehler bei copy
    Von dantro32 im Forum Allgemeines
    Antworten: 1
    Letzter Beitrag: 16.08.2007, 13:27
  5. length() mit geometrischen Datentypen
    Von Fröstel im Forum Allgemeines
    Antworten: 6
    Letzter Beitrag: 07.02.2006, 00:42

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum