Kleine Fragen

Wenn Dir “bridge=yes” zu ungenau ist, würde ich in diesem Fall ein “bridge=arch” setzen. Gilt aber als proposed.

Ist es :wink: Ich finde auch bridge=arch noch zu ungenau, da damit nicht drin ist, dass der Verkehrsweg den Bogen auch macht. Falls jemand einen Vorschlag hat: Bitte hier nachtragen.

Die Brücke einfach splitten.
Einen Teil mit incline=up und den anderen mit incline=down taggen.

Alternative kannst du natürlich die Höhe der Fahrbahn per ele=* an mehreren Punkten des Weges erfassen.

Edbert (EvanE)

Ich will in JOSM bei mehreren Objekten gleichzeitig einen Key duplizieren, der Value soll jeweils identisch bleiben. Ich habe also a=* (mit verschiedenen Werten) und will a=* b=* (wobei beide jeweils den selben Wert haben). Mit “Schlüssel/Wert kopieren” erhalte ich nur einen der Werte. Wie macht man das (von mir aus auch mit einer anderen Anwendung)?

Nehme dir ein Objekt, dass die benötigten Werte hat, markiere und kopiere es (STRG+C). Solltest du so ein Objekt nicht haben, dann kannst du es auch temporär schaffen und vor dem Hochladen löschen. Benutze dann auf dem neues Objekt den Befehl “Merkmale einfügen” (STRG+UMSCHALT+V). Ich selbst benutze es seht oft, um Daten auf gleiche Objekte zu kopieren. Zum Beispiel bei neuen Wegen oder Häusern.

Es sind ja für jedes Objekt unterschiedliche Werte, nur der Schlüssel ist identisch (und soll geändert werden und gleichzeitig erhalten bleiben).

Nachtrag: Ich will also jede im OSM-XML mit

    <tag k='a' v='

beginnende Zeile duplizieren und eines der “k=‘a’” zu “k=‘b’” ändern. Es würde also aus

  <node id='1'>
    <tag k='a' v='11' />
  </node>
  <node id='2'>
    <tag k='a' v='20' />
  </node>
  <node id='1'>
    <tag k='a' v='11' />
    <tag k='b' v='11' />
  </node>
  <node id='2'>
    <tag k='a' v='20' />
    <tag k='b' v='20' />
  </node>

Bei JOSMs Kopieren wäre beim Zweiten der neue Wert auch 11. @Oli-Wan: “Texteditoren” wären auch eine akzeptable Lösung :wink:

Wo kann ich denn hier die visibility auf false für Layer Switcher setzen (Also so, dass der Haken im LayerSwitcher Standardmäßig nicht gesetzt ist)?

	map.addLayer (new OpenLayers.Layer.PopupMarker("Gipfel", {

		createHtmlFromData: function (data) {
			return "<p>"+this.html(data.name)+" ist mit "+data.ele+" Metern Höhe "+
				this.html(data.country)+"s höchster Berg";
		},

		createTooltipFromData: function (data) {
			return this.html(data.name + ' (' + data.ele + 'm)');
		},

		maxTooltipWidth: 220,

		createIconFromData: function (data) {
			return new OpenLayers.Icon ("i/"+data.cc+"_30x30.png", {w:30,h:30});
		},

		location: "gipfel.csv"
	} ));

Edit: Die EInstellung zum offset des ICONS geht mit: data.cc+“_30x30.png”, {w:20,h:20}, {x:-20,y:-28}

Ich gehe davon aus, daß das Ergebnis nicht direkt wieder zum OSM-Server hochgeladen werden soll, sondern entweder nur lokalen Bedürfnissen wie Rendering oder sonstiger Auswertung dient, oder die vorgesehene Bearbeitung zumindest nur eine Arbeitserleichterung für weitere, nichttriviale (und hoffentlich sinnvolle) Bearbeitungsschritte darstellt, in deren Zuge auch noch eine Kontrolle erfolgt. Nur unter diesen Voraussetzungen stelle ich den unten angegebenen Code zur Verfügung. (Eine konkrete Schilderung des Vorhabens würde zu meiner Beruhigung beitragen.)

Noch eine Anmerkung zum Format: die OSM-API und die meisten anderen Datenquellen verwenden “doppelte” Anführungszeichen; JOSM tanzt aus der Reihe und schreibt ‘einfache’. Der folgende Code ist jeweils auf “doppelte” gemünzt; eine evtl. nötige Anpassung sollte nicht besonders schwer fallen. Das Kopieren von Tags könnte theoretisch einzelne Programme durcheinanderbringen, falls sie alphabetisch geordnete Tags erwarten.

i) Lösung mit GNU Emacs.
Zu bearbeitende Datei öffnen. Ich unterstelle als Dateinamen foo.osm; Beispielcode bitte anpassen. Zu scratch wechseln (oder einen anderen Buffer im Lisp Interaction Mode), folgendes dort einfügen und (nach Änderung des Dateinamens sowie der Platzhalter “a” und “b”) ausführen (d.h. Cursor hinter die letzte Klammer bewegen und C-x C-e abfeuern). Es wird direkt der mit der Datei assoziierte Buffer bearbeitet, jedoch noch nicht gespeichert (ein (save-buffer) innerhalb der save-excursion-Form würde auch das erledigen). Alternativ kann man auch M-x replace-regexp interaktiv aufrufen und die beiden Argumente (mit einigen maskierenden \ weniger) selbst eintippen, aber das muß ja nicht sein.

(save-excursion
  (switch-to-buffer "foo.osm")
  (beginning-of-buffer)
  (replace-regexp
   "^\\([[:blank:]]*\\)<tag k=\"a\" v=\"\\([^\"]*\\)\"/>$"
   "\\&\n\\1<tag k=\"b\" v=\"\\2\"/>"))

ii) (Automatisierungsfreundlichere) Lösung mit sed. Das Ergebnis landet in der Standardausgabe, kann mit | oder > passend umgeleitet werden (jedoch nicht in die ursprüngliche Datei).

cat foo.osm | sed 's/^\([[:blank:]]*\)<tag k="a" v="\([^"]*\)"\/>/&\n\1<tag k="b" v="\2"\/>/'

Danke für die Erläuterung. Ich werde die sed-Variante nutzen (weil auf meinem System schon vorhanden) und habe wieder was dazugelernt (wie das mit dem RegExp-Ersetzen geht).

Dann will ich dich nun auch beruhigen: Es geht um die Adressen in der Mannheimer Quadratestadt, die ich nun umtaggen möchte. Nachdem das hier im Forum diskutiert und vom Haupterfasser (gefühlt zumindest; letzter Bearbeiter von 59%, danach Teddy73 mit 32% und dann du mit 3% der Objekte) in der OSM-Note gewünscht wurde dürfte das wohl in Ordnung sein.
Ich habe auch schon mehrfach geprüft, dass ich nichts fälschlicherweise erwischt habe. Da einige wichtige Anwendungen damit allerdings noch nicht kompatibel sind möchte ich vorübergehend das “addr:street”=* gleichzeitig beibehalten (die Entfernung davon ist dann einfacher).

Ich will ja nicht nerven, aber eigentlich ist das ein Job für einen XSLT-Prozessor wie z.B. Xalan.

Prinzip: XML-Datei + XSLT-Regeln → Xalan → neue XML-Datei

Da bereits Lösungen beschrieben wurden, spar ich mir den Rest. Aber wer immer wieder mal solche Konvertierungen braucht, sollte sich damit mal beschäftigen.

Gruss
walter

Damit bin ich in der Tat zumindest insoweit beruhigt, daß Du nichts Schlimmeres vorhast.
Da Du allerdings offenbar die komplette Änderung wie oben skizziert per Texteditor vornehmen und anschließend vermutlich mit JOSM hochladen willst, sind weitere Hinweise angebracht.
Erstens: die obigen Methoden erkennen nicht, ob ein Objekt bereits ein addr:place-Tag hat, schreiben also ggf. einfach eines dazu. In einem solchen Fall wird es unweigerlich Probleme geben.
Zweitens: Wenn Du die z.B. mit JOSM die Daten eines Bereichs herunterlädst, speicherst, diese mit sed etc. bearbeitest und anschließend das Ergebnis mit JOSM hochladen willst, wird nicht passieren: JOSM erkennt die Objekte nicht als bearbeitet.
Drittens: Egal wie Du im einzelnen vorgehst, solltest Du das Ergebnis einer (teil-)automatischen Bearbeitung sehr sehr gründlich kontrollieren. Ansonsten bewegst Du Dich im Bereich der “Mechanical Edit Policy”.

Eine Lösung zu den ersten zwei Punkten könnte so aussehen: in JOSM nur Objekte auswählen, die ein addr:street-Tag (mit passender Form), jedoch kein addr:place-Tag haben, und nur diese speichern. Bzw. umgekehrt alle auswählen, die beide Tags haben, verwerfen und den Rest speichern. Die zu bearbeitenden Objekte zuvor von JOSM als bearbeitet markieren lassen (Bogus-Tag hinzufügen und wieder löschen). Anschließend die Bearbeitung extern vornehmen, die geänderten Daten in JOSM einlesen, kontrollieren und hochladen.
Als Kontrolle würde ich vorschlagen, erstens vor dem Hochladen in JOSM die geänderten Objekte (“modified”) auszuwählen und mit dem Mauszeiger über der Auswahlliste zu kontrollieren, ob ihre Tags so aussehen wie sie sollen; zweitens eine stichprobenartige Kontrolle der Daten nach dem Hochladen, insbesondere ob nicht auch andere Tags verhunzt wurden. Alternativ eine unabhängige Kontrolle der Bearbeitungen mit einem separaten Programm (Vorher-Nachher-Vergleich).

Eigentlich ist das ein Job für einen richtigen OSM-Editor :wink:

(if (and (osm-obj-tag object "a") (not (osm-obj-tag object "b")))
    (osm-obj-add-tag object "b" (osm-obj-tag object "a")))

wäre die Lösung mit den Mitteln von Wall·E (welche die oben angerissenen Probleme vermeidet). Dazu noch fünf Zeilen und ein Haufen Klammern für Datei einlesen, Änderungssatz erstellen, Schleife über Objekte, Hochladen und Änderungssatz schließen.

Hast du den praktische Erfahrungen mit xslt? Irgendwie mag ich mir das nicht vorstellen.
So nebenbei ist das Zeug auch noch total unabhängig von der Plattform. Ok, Emacs gibt es auch unter Win, aber sed? Und was ist mit den Macs?

Egal, sein Problem ist gelöst und der Rest ist hier eh fehl am Platz.

Gruss
walter

@wambacher: Das sollte ein OSM-Editor trotzdem können. Und ein Linux hat doch eh jeder (Fernseher, Router, …) :wink:

Ist beides bereits gelöst (obwohl letzteres nicht bedacht wurde):

  • Die Objekte wurden per Overpass-Turbo geladen (area=* oder “addr:housenumber”=* in einer BB, die alle Quadrate vollständig enthält),

  • danach wurden die Quadrate-Flächen mit place=neighbourhood versehen (JOSM-Suche nach area=* ausgenommen highway=, leisure=, … und manuelle Korrektur),

  • dann alle “addr:street”=, deren Value auf den RegExp “[1][1-9]{1,}[a]{0,}” matcht auf “addr:place”= geändert (soweit ging es mit JOSM noch)

  • und jetzt wird bei diesen Objekten (andere mit “addr:place”=* sind nicht geladen) ein weiteres Tag hinzugefügt.

Ich werde dann auf jeden Fall nochmal drüberschauen, etwas anderes machen und dann nochmal drüberschauen, obwohl ich mir ziemlich sicher bin, dass dabei nichts schiefgeht (ich hab’ auch schon ein paar dabei entdeckte (vorher schon vorhandene) Fehler korrigiert).


  1. A-Z ↩︎

Nein, habe ich in der Tat nicht; habe ich auch nie gebraucht. Meine einzige Berührung mit XML bislang waren die diversen OSM-Dialekte. Und normalerweise bearbeite ich OSM-Daten (in Emacs oder Osmium-basierten Programmen) auch nicht als XML, sondern in einer internen Objektdarstellung. Als Beispiel dafür hatte ich den letzten Code-Schnipsel angeführt.

Nachfrage: Den folgenden Teil verstehe ich nicht ganz und er scheint auch nicht zu funktionieren:

v='\([^']*\)'\/>

(Ich brauche das in JOSMs Anführungszeichen)
Was genau soll das machen? Ich würde vermuten ‘[^"]*’ soll auf den Value matchen, aber warum sollte es das können (wenn es würde)?
Wenn nur der Value vorhanden ist matcht es, mit dem XML drumherum nicht, auch nicht, wenn ich einen Value direkt im RegExp einfüge.

Nachtrag: Vergesst es, da fehlt nur ein Leerzeichen.

Variante für ‘einfache’ Anführungszeichen:

cat foo.osm | sed "s/^\([[:blank:]]*\)<tag k='a' v='\([^']*\)'\/>/&\n\1<tag k='b' v='\2'\/>/"

[^']* matcht beliebig viele Zeichen ungleich ‘. ‘[^’]*’ matcht beliebig viele Zeichen ungleich ', eingeschlossen durch zwei '. Dies ist zufällig die Struktur eines Tagschlüssels oder -werts, wovon sed aber nichts weiß.

War ich mir seinerzeit auch, aber es gibt immer Überraschungen.

Gibt es ein landuse für historische Zonen, beispielsweise historischer Stadtkern.

nicht das ich das wüsste. Aber wenn du das findest, schreib 'nen schönen Namen dran - dann haben alle was davon :frowning:

Gruss
walter

doch:

boundary=protected_area
protect_class=22

http://wiki.openstreetmap.org/wiki/DE:Tag:boundary%3Dprotected_area

Sven

Das klingt aber alles hochoffiziell, wie eben die Naturschtuzgebiete oder UNESCO Weltschutzerbe. Dachte eher an was touristisches, vielleicht nehme ich attraction:tourism als Flächensymbol.