Am einfachsten geht es mit manuellem Eintragen.
In JOSM (z.B.) GPX-Track mit den Waypoints laden. Die Farbe des Tracks so ändern, dass man die Punkte auch sieht. Der Name der Waypoints wird dabei angezeigt. Die anderen (cmt, desc, sym und extension) siehts du nicht.
Wegpunkt-Tracks kannst du leider nicht in eine Datenebene konvertieren. Also dort wo ein Wegpunkt ist, per Hand die Meilensteine eintragen. Bei der Gelegenheit wo möglich die Lage anhand der umliegenden OSM-Daten und (soweit verfügbar) guter Luftbilder prüfen.
Die andere Methode wäre eine GPX-Datei mit einen Batch-Editor in eine für JOSM nutzbare OSM-Datei umzuschreiben.
Zu dem Zweck erstellst du in JOSM eine Ebene, die nur wenige neue Punkte mit/ohne Tags hat. Dies als .osm Datei speichern. So hast du ein Muster für dein Zielformat.
Die Zuordnung ist relativ klar:
171.0000000 wird ele=171
1003-Sonneborn wird name=1003-Sonneborn
cmt/desc wird zu note=* und desc=* (eventuell reicht eines von beiden)
für … und … gibt es
keine Entsprechung bei OSM. Das ist wahrscheinlich auch unnötig,
da nur für die Darstellung auf einem Garmin-Gerät wichtig.
Jetzt fehlen noch wichtige Informationen für OSM:
ID, Version, visible, …
user, user-id, …
timestamp, …
Deswegen brauchst du die vorher erstellte .osm-Datei um zu wissen, wie diese Informationen für ein neues Objekt aussehen sollen.
Deine Meilenstein-spezifischen Taggs muss du dir aus Description und Comment irgendwie zusammenbasteln.
User-ID, timestamp etc ? Ich dachte immer, man muss nur fortlaufende negative IDs vergeben. User-ID, timestamp, id, version etc wird doch vom Server vergeben afaik.
yep, wusste ich es doch. Um ein Node zu erstellen, reicht im Minimalfall OSM-ID (negative), lat und lon. In Deinem Fall noch die Tags dazu und Du kannst es hochladen.
Action=modify wäre bei einer Änderung eines bestehenden Nodes angebracht (positive ID). Eine negative ID erzeugt immer einen neuen Node beim Hochladen. visible=‘true’ kannst Du auch weglassen. Es geht auch ohne
also hier mal ein minimales Changeset. Speichere es als OSM, öffne es mit JOSM (wenn Du kein upload script hast) und lade es hoch. Lösche es aber hinterher bitte wieder.
Hi Jan,
ich weiss nicht ob Dir das hilft (ich glaube Du sprichst perl), aber mit folgendem PROGRESS Programm habe ich immer
meine GPX Files mit Hydranten POIs konvertiert:
/* gpx2osm */
def var ein-name as char format "x(60)". /* Eingabedateiname */
def var aus-name as char format "x(60)". /* Ausgabedateiname */
def var anz as int no-undo. /* Zaehler */
def temp-table t no-undo /* Temporaere Tabelle */
field t-nr as int format "->>>>>>9" label "nr"
field t-name as char format "x(15)" label "name"
field t-lat as dec format "->9.999999" label "lat"
field t-lon as dec format "->9.999999" label "lon"
index i1 is primary t-nr.
form /* Eingabe Formular */
skip(1)
ein-name colon 10
aus-name colon 10
skip(1)
with frame a width 80 side-labels three-d.
session:numeric-format = "AMERICAN".
session:data-entry-return = yes.
ein-name = "/users/cs/downloads/test.gpx".
aus-name = replace(ein-name,".gpx",".osm").
if aus-name = ein-name then aus-name = aus-name + ".gpx".
update /* Eingabe der Dateinamen */
ein-name
aus-name
with frame a.
anz = 0.
run read-gpx(ein-name).
run write-osm(aus-name).
quit.
/*********************************************************/
procedure write-osm.
def input param fname as char.
output to value(fname).
put "<?xml version='1.0' encoding='UTF-8'?>" skip.
put "<osm version='0.6' generator='JOSM'>" skip.
put "<bounds minlat='51.73' minlon='7.35' maxlat='51.80' maxlon='7.50' />" skip.
for each t break by t-nr descending :
put unformatted "<node id='" t-nr "' action='modify' timestamp='2012-01-09T17:15:00Z' visible='true' lat='" t-lat "' lon='" t-lon "'>" skip.
put unformatted " <tag k='emergency' v='fire_hydrant' />" skip.
put unformatted " <tag k='fire_hydrant:diameter' v='" t-name "' />" skip.
put unformatted " <tag k='fire_hydrant:type' v='underground' />" skip.
put unformatted "</node>" skip.
end.
put "</osm>" skip.
output close.
end procedure.
/*********************************************************/
procedure read-gpx.
def input param fname as char.
def var li as char no-undo.
def var s as char no-undo.
def var i as int no-undo.
def var lat as dec no-undo.
def var lon as dec no-undo.
def var name as char no-undo.
input from value(fname).
repeat:
import unformatted li.
li = trim(li).
if li = "" then next.
if li begins "<wpt " then do:
i = index(li, 'lat="') + 5.
s = substr(li,i).
s = entry(1,s,'"').
lat = dec(s).
i = index(li, 'lon="') + 5.
s = substr(li,i).
s = entry(1,s,'"').
lon = dec(s).
end.
if li begins "<name>" then do:
s = substr(li,7).
s = replace(s,"</name>","").
if name = "" then name = s.
end.
if li matches "*</wpt>" and lat <> 0 then do:
anz = anz + 1.
create t.
assign
t-nr = -1000 - anz
t-name = name
t-lat = lat
t-lon = lon.
lat = 0.
lon = 0.
name = "".
end.
end.
input close.
end procedure.
Das ist das Verhalten von JOSM, was der für den Upload daraus macht oder was die API als Minimum erfordert, ist eine andere Frage. Der Vorteil, das JOSM-kompatible zu machen, ist die Möglichkeit die Lage vor dem Upload prüfen zu können.
Man sollte immer daran denken, dass Consumer-GPS-Geräte nur eine begrenzte Genauigkeit haben. Auf freiem Feld mag das mal drei Meter sein, in schwierigeren Empfangssituationen kann das bei 10 Meter oder schlechter liegen. Zehn Meter heißt dann durchaus mal die falsche Straßenseite.
ich sehe da -mal wieder- ein ganz anderes Problem: Eigentlich ist das hier doch ein Import ungeprüfter Daten nach OSM - wobei mich das “ungeprüft” erheblich mehr stört als der Import an sich.
Anstelle da mal nachzuhaken, wird kräftig mitgeholfen. Find ich nicht so doll.
Was ist mit den Formalien bezüglich Imports nach OSM?
Wieviele Punkte sind es?
Wie ist die rechtliche Lage?
Wie sollen die generierten Daten übernommen werden?
Wie sieht es mit der Genauigkeit aus? Nachher stehen die Grenzsteine mitten auf einer Straße oder Kreuzung, im Fluß oder gar in einem Building.
Möglicherweise weil “unsere” Daten leicht daneben liegen und die Fremddaten sehr genau sind? Auf jeden Fall “unpassend”.
Welche Nachbearbeitung ist geplant?
Wird es Sammelrelation “Alle Grenzsteine in …” geben?
naja, warten mer mal ab.
obwohl eine Klärung der Formalien - insbesonders mit den Datenlieferanten - ja vor der Programmierung nicht schlecht wäre. Nachher sagt die NEE und das war’s dann.
Gruss
walter
ps: es handelt sich bei deinem Problem um eine einfache Konvertierung vom einer XML-Datei in eine andere. Sowas macht man mit einem XSLT-Programm. XALAN wäre eines davon.