Hilfe bei SQL-Syntax

Hallo,

ich hab eine Datenbank mit 2 Tabellen: “BergeA” und “BergeB” (beide aus Shapefiles importiert). Die Tabellen haben jeweils 2 Spalten: Name und Hoehe. Wie kann ich die Höhen aus BergeB an BergeA übergeben ? Also : Wenn Name von BergeA gleich Name von BergeB UND die Entfernung zwischen den beiden Punkten kleiner 2 KM ist ( um Verwechslung mit gleichnamigen anderen Bergen zu vermeiden) dann übernimm den Hoehenwert von BergeB.

Kann mir freundlicherweise jemand helfen, wie der entsprechende SQL-Befehl lauten müßte ?

Vielen Dank,

Melanie

Wo kommt plötzlich die Entfernung her in Deinen Tabellen?

Na gut, vielleicht hilft Dir folgendes:

[php]
test=# select * from berg_a;
name | hoehe | entfernung
-------±------±-----------
berg1 | 100 | 2
berg2 | 100 | 20
berg3 | 200 | 5
(3 rows)

test=*# select * from berg_b;
name | hoehe | entfernung
-------±------±-----------
berg1 | 1000 | 2
berg2 | 1000 | 20
berg3 | 250 | 5
(3 rows)

test=# update berg_a set hoehe = b.hoehe from berg_b b where berg_a.name=b.name and berg_a.entfernung<10 ;
UPDATE 2
test=
# select * from berg_a;
name | hoehe | entfernung
-------±------±-----------
berg2 | 100 | 20
berg1 | 1000 | 2
berg3 | 250 | 5
(3 rows)
[/php]

Alle mit Entfernung < 10 werden aktualisiert.


Andreas

Auf PostGIS mit Geometrien:

frei nach akretschmer:

update berg_a set hoehe = b.hoehe from berg_b b where berg_a.name=b.name and distance(berg_a.geom, b.geom)<10

geom bezeichnet das jeweilige Geometrie-Feld, das kann auch anders heissen.
Die Geometrien müssen eine SRID haben, und die muß gleich sein.

Gruß Uwe

Vielen Dank euch beiden !

update berg_a set hoehe = b.hoehe from berg_b b where berg_a.name=b.name and distance(berg_a.geom, b.geom)<10

ist genau das was ich suchte. Werde es später ausprobieren. Dazu allerdings noch zwei Fragen: Als SRID haben beide Tabellen 4326 - Einheit wäre also Dezimalgrad. Liefert distance(berg_a.geom, b.geom) das Ergebnis immer mit Einheit KM ?
Und berücksichtigt distance(berg_a.geom, b.geom) dass die Erde ein Rotationsellipsoid ist ?

LG, Melanie

Du könntest auch statt distance distance_sphere/spheroid verwenden. Die nutzen ein Spheroid zur Berechnung. Allerdings stellt sich die Frage wieviel das letztlich ausmacht bei vermutlich kurzen Entfernungen. Ob die Entfernungen metrisch ausgegeben werden müsstest du ausprobieren, das kann ich im Moment nicht mit Sicherheit sagen (WIMRE aber in der Einheit des SR, hier also Grad). Andernfalls könntest du die beteiligten Geometrien erst mit transform in z.B. GaussKrüger umwandeln und dann den Abstand berechnen.

Gruß Uwe

distance_sphere liefert die Distanz als einzige Funktion immer in Metern. Bei allen anderen Funktionen bekommt man soviel ich weiß die Einheit des SRIDs. Also würde ich einfach distance_sphere verwenden.

Attention: Meter! Nicht Kilometer! Ich betone das nur aus Erfahrung, da hier gerne Fehler gemacht werden :wink: