[Talk-de] Polygongrösse ab API 0.6 max 2000 nodes?

Tobias Wendorff tobias.wendorff at uni-dortmund.de
Fr Jan 23 14:23:57 UTC 2009


Hallo Frederik,

Frederik Ramm schrieb:
> Auch; vorallem jedoch das Fehlen einer inkrementellen/partiellen 
> Bearbeitung von Objekten durch die API. Wer auch nur eine Bushaltestelle 
> in seiner Bounding Box hat, muss die ganze Relation herunterladen. Jede 
> Aenderung an einer Relation erfordert ein vollstaendiges Update. 
> Jedesmal, wenn Du Deiner Relation eine Bushaltestelle hinzufügst, muss 
> die ganze Relation mit 2500 Members an den Server hochgeladen, dort 
> verifiziert und vollstaendig in die History eingetragen werden. Das 
> kostet Zeit, Bandbreite und Speicherplatz.

Das verstehe ich nicht. Wieso kann eine Relation nicht partiell
editiert werden? Ich muss die Gruppe doch nicht auflösen!

Es gibt verschiedene Möglichkeit.
Nehmen wir an, ich habe die Nodes 123, 135, 212 und 732 in der
Relation "test" (relations-id 666).

Erste Möglichkeit: Keine Referenz-Datenbank.
In der Haupt-Datenbank stehen:
node-id | lat | lon | relation | ...
100     | xxx | xxx |
132     | xxx | xxx | "test"
135     | xxx | xxx | "test"
200     | xxx | xxx |
212     | xxx | xxx | "test"
732     | xxx | xxx | "test"

Wenn ich nun den Node 135 verschiebe, ist es doch vollkommen egal,
ob der in einer Relation ist oder nicht. Es ist doch in der
Datenbank nur ein Hinweis, dass Node 135 sich in der Relation
"test" befindet.

Wenn ich einen neuen Node in eine Relation packe, sagen wir
Node 839, wieso wird dieser dann nicht einfach - wie bei Ways
auch - hinten in die Relation drangepackt?

In der Haupt-Datenbank stehen:
node-id | lat | lon | relation | ...
100     | xxx | xxx |
132     | xxx | xxx | "test"
135     | xxx | xxx | "test"
200     | xxx | xxx |
212     | xxx | xxx | "test"
732     | xxx | xxx | "test"
839     | xxx | xxx | "test"

Wenn man nun den Node 212 aus der Relation rauslöschen würde:
node-id | lat | lon | relation | ...
100     | xxx | xxx |
132     | xxx | xxx | "test"
135     | xxx | xxx | "test"
200     | xxx | xxx |
212     | xxx | xxx |
732     | xxx | xxx | "test"
839     | xxx | xxx | "test"

Das ganze könnte natürlich bei unserer riesigen Datenbank
Performance-Probleme geben, aber dafür gibt's Clustering.
OSM ist kein 200 Leute Projekt mehr, also nicht in kleinen
Dimensionen denken.

Zweite Möglichkeit: Referenzdatenbank.
Vorteil: Die Hauptdatenbank wird nicht immer voll ausgelastet
und man kann die Relations-Datenbank auslagern.

In der Relations-Datenenbank 666 steht nun:
id | node-id
0  | 123
1  | 135
2  | 212
3  | 732

In der Haupt-Datenbank stehen:
node-id | lat | lon | ...
132     | xxx | xxx | ...
135     | xxx | xxx | ...
212     | xxx | xxx | ...
732     | xxx | xxx | ...

Wenn ich nun den Node 135 verschiebe, ist es genauso wie
in der 1. Variante vollkommen egal.

Wenn ich den Inhalt der Relation "test" abfrage, sollte die
Datenbank lediglich Verknüpfungen (joins) über die REF-ID
zu den obigen Nodes aufbauen und mir deren Information herauswerfen.

Wenn ich einen neuen Node in eine Relation packe, sagen wir
Node 839, wieso wird dieser dann nicht einfach - wie bei Ways
auch - hinten in die Relation drangepackt?

Die Relations-Datenbank 666 würde dann so aussehen:
id | node-id
0  | 123
1  | 135
2  | 212
3  | 732
4  | 839

In der Haupt-Datenbank stehen:
node-id | lat | lon | ...
132     | xxx | xxx | ...
135     | xxx | xxx | ...
212     | xxx | xxx | ...
732     | xxx | xxx | ...
839     | xxx | xxx | ...

Wenn man nun den Node 212 aus der Relation rauslöschen würde:
id | node-id
0  | 123
1  | 135
2  | NULL
3  | 732
4  | 839

Dann hat man nur einen Integer, der halt null rauswirft.
Durch geschicktes Datenbank-Handling kann man irgendwann die
Verknüpfungen wieder korrigieren.

Grüße
Tobias




Mehr Informationen über die Mailingliste Talk-de