2017-09-11 1 views
0

Dieser CodeÜberführungsturbo: Beziehungen _inside_ Bereich?

rel[name="Rheinisch-Bergischer Kreis"][admin_level=6][boundary=administrative]; 
out geom; 

gibt mein Zielgebiet "Rheinisch-Bergischer Kreis" in Deutschland. Mit diesem Code

area[name="Rheinisch-Bergischer Kreis"][admin_level=6][boundary=administrative]; 
rel(area)[boundary="postal_code"]; 
out geom; 

Ich versuche, die postal_code Beziehungen zu erhalten, die in diesem Zielbereich sind. Wenn Sie die zwei Ausgaben vergleichen, können Sie sehen, dass der ausgewählte Bereich in der zweiten Abfrage größer als der in der ersten Abfrage ist. Aber es sollte die gleiche Größe sein.

Es gibt kleine Bruchteile einer Beziehung am westlichen Ende, die in mein Zielgebiet reichen und daher in der Ausgabe enthalten sind. Wie kann ich nur Beziehungen bekommen, deren Zentrum in meinem Zielgebiet liegt? Oder nur Beziehungen, die vollständig zu meinem Zielgebiet gehören?

EDIT

Danke MMD. Ich die Sackgasse akzeptieren und jetzt stelle ich meine „Lösung“ (und meine eigentliche Problem!), Vielleicht das jemand in der Zukunft helfen wird:

Ich verwende diesen Code

[timeout:900]; 

area[name="Nordrhein-Westfalen"][admin_level=4][boundary=administrative]; 

rel(area)[admin_level=5][boundary=administrative]; // regierungsbezirke 

foreach(
    out geom; 
    map_to_area; 
    rel(area)[admin_level=6][boundary=administrative]; // kreise 
    foreach(
    out geom; 
    map_to_area; 
    rel(area)[boundary="postal_code"]; 
    out geom; 
); 
); 

ein zu erhalten OSM-Datei, die zuerst die admin_level 5, dann admin_level 6 und dann jede Postleitzahl, die zu dieser admin_level 6 gehört, ausgibt. Mein Ziel war es, ein Wörterbuch zu bekommen, das Postleitzahlen von admin_level 6 auf admin_level 5 abbildet Datei kann ich das herausfinden. Leider meldet der Code oben 37 Postleitzahlen mehr als einmal in der OSM-Datei (grep für das Tag -> drucke den postal_code (mit awk z. B.) -> sort -> uniq -c -> sort -k 1,1). So habe ich von dem Verhalten erfahren, das ich in meiner Minimal-Beispiel-Frage beschrieben habe. Also, was ich jetzt tun werde ist, diese 37 Postleitzahlen, die mehrmals in der OSM-Datei erscheinen, per Hand zu filtern. Dann kann ich mein Wörterbuch aus der OSM-Datei erstellen, um diese Zuordnung zu erhalten.

+0

Duplizieren von https://forum.openstreetmap.org/viewtopic.php?id=59661 – mmd

+0

dass Gewinde 99% am Ende einer Sackgasse, so dass ich hoffe, dass jemand auf dem Stapel wissen könnte – user3182532

Antwort

1

In Bezug auf Ihr anfängliches Problem würde ich einen Ansatz vorschlagen, der vorhandene Knoten in dem jeweiligen Bereich nutzt. Es nimmt an, dass jeder postal_boundary mindestens einen Platzknoten hat. Wenn das aus irgendeinem Grund nicht der Fall ist, könntest du vielleicht stattdessen [Amenity] verwenden. Das ist so gut wie möglich. obwohl

rel[name="Rheinisch-Bergischer Kreis"][admin_level=6][boundary=administrative]; 
map_to_area; 
node(area)[place]; 
is_in; 
rel(pivot)[boundary="postal_code"]; 
out geom;