Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 18 von 18

Thema: Fehler bei length()

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

    Standard

    Zitat Zitat von Sauerkraut Beitrag anzeigen
    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?
    Sollte über DISTANCE(geom,geom) gehen, das berechnet den kürzesten Abstand zwischen zwei Geometrien. Oder Max_Distance(line,line) den grössten Abstand zwischen Linien.

    Schönes WE

    Uwe
    Have a lot of fun!

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

    Standard

    @gisman

    Das ist ja mein Problem; Mit DISTANCE(geom,geom) kann ich ja nur entweder nur Polygone oder Punkte miteinander vergleiche, aber ich bäruchte etwas womit ich Punkte und Polygone vergleiche. In meinem Fall wäre das Polygon eine MultineLine und da mit Start und Endpunkt zu rechnen ist zu ungenau. Ich verwende gerade Distance_Spheroid und da habe ich das gleiche Problem,

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

    Standard

    Hm, distance_sheroid() verlangt ausdrücklich nach 2 Punkten, bei Distance() ist allgemeingültig geometry angegeben.
    Ich hab grad keine Zeit, aber ich werds mal ausprobieren heut nachmittag.
    Du könntest höchstens den Multilinestring in eine Liste von Linestrings zerlegen.

    Bis denne
    Uwe
    Have a lot of fun!

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

    Standard

    Ich benutze halt DISTANCE_SPHERE um ein genaues metrisches Mass zu erhalten.

    Inzwischen bin ich noch auf ein ganz anders Problem gestoßen, was sich Performance nennt. Da ich recht viele Datensätze verwalte und der Rechendaufwand von DISTANCE _SPHERE ziemlich hoch ist, kann das ganze Stunden dauern. Zwar werfe ich einiges mit the_geom && the_geom raus, aber es bleiben trotzdem noch zuviele zu vergleichende Datensätze übrig.

    SELECT the_geom FROM geom_table WHERE the_geom
    && 'BOX3D(90900 190900, 100100 200100)'::box3d AND
    distance( the_geom, GeomFromText( 'POINT(100000 200000)', -1 )
    ) < 100

    Im Grund würde ich auch gerne das Beispiel von der PostGIS Doku verwenden, um die Indizierung mit GIST voll ausnützen zu können, aber ich kann nicht die BOX3D fest definieren, da sich das ganze nicht auf einen Punkt oder Polygon festlegt.

    Im grunde bräuchte ich sowas:

    SELECT * FROM tab_punk punkt, tab_flaeche flaeche WHERE punkt.the_geom
    && (flaeche.the_geom + 50) <= Das wäre die Fläche für den Intersect, die man einfach um die benötigten 50m erweitert
    distance_sphere( punkt.the_geom, flaeche.the_geom, Sphere )
    ) < 50
    Geändert von Sauerkraut (17.09.2007 um 14:57 Uhr)

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

    Standard

    Also wenn ich das richtig verstanden habe möchtest du mit dem Befehl "(flaeche.the_geom + 50)" die Ränder der Fläche um 50m nach außen verlegen. Das machst du am besten mit
    "buffer(flaeche.the_geom, 50)". Zumindest, wenn du in einem metrischen Koordinatensystem bist. Gegebenenfalls musst du es noch mit Transform(geometry, EPSG-Nummer) umprojezieren und danach wieder zurücktransformieren.

    Statt der BOX könntest du es vielleicht auch mit envelope(geometry) versuchen. Das könnte unter umständen schneller sein. Ich habe es allerdings nicht ausprobiert.

    Was ich allgemein gerade nicht verstehe. Warum eigentlich BOX3D? Du benutzt doch 2d-Koordinaten. Oder stehe ich gerade irgendwie auf dem Schlauch?

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

    Standard

    Hab es vorerst so gelöst, ist aber immer noch nicht optimal:

    SELECT distinct point.poi_name, point.poi_id
    FROM poi point LEFT JOIN
    (SELECT point.poi_name as ppoi_name, point.poi_id as ppoi_id FROM poi point, streets line WHERE
    Expand(line.the_geom, 0.01) && point.the_geom AND
    (DISTANCE_SPHEROID(point.the_geom, StartPoint(line.the_geom), 'SPHEROID["WGS 84",6378137,298.257223563]') < 50.00 OR DISTANCE_SPHEROID(point.the_geom, Centroid(line.the_geom), 'SPHEROID["WGS 84",6378137,298.257223563]') < 50.00 OR DISTANCE_SPHEROID(point.the_geom, EndPoint(line.the_geom), 'SPHEROID["WGS 84",6378137,298.257223563]') < 50.00) ) As ce
    ON (ce.ppoi_name = point.poi_name and ce.ppoi_id = point.poi_id)
    WHERE ce.ppoi_name IS NULL GROUP BY point.poi_name, point.poi_id;

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

    Standard

    Ich bin gerade am grübeln, inwiefern diese Expand Funktion arbeitet. Sie vergrößert ja um die geometry die bounding box. Allerding verstehe ich das Attribut nicht, die den Umfang der zu expandierenden Box vorgibt. Desto kleiner die Zahl desto größer der Umfang? Welche Einheit ist das?

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

    Standard

    Also die Einheit sollte die Einheit deines SRIDs sein. Also bei geographischen Koordianten Grad und bei metrischen Systemen eben Meter.
    Das eine kleinere Zahl einen größeren Umfang bedeutet kann ich mir irgendwie nicht vorstellen. Und ich habe jetzt auch auf die schnelle keine Quelle gefunden, die so etwas besagen würde. Ich würde zuerst überprüfen ob du vielleicht im falschen SRID bist.

Seite 2 von 2 ErsteErste 12

Ä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