Dietmar
31.01.2009, 20:20
Guten Tag auch!
Seit mehr als einen Monat gibt es von Marginal (kein Unbekannter in der X-Plane Gemeinde) 3 Pythonscripts.
Damit lassen sich Strassen (roads) mit Hilfe der Programmiersprache Python erzeugen.
Python gibts hier:
http://www.python.org/
Man installiere das Programm, das ist zuerst auch mal alles.
Als Datenbasis für die Strassen dient das OpenStreetMap-Projekt, kurz osm genannt.
Die Datenbasis gibts hier, man kann sich die Länder einzeln aussuchen:
http://download.geofabrik.de/osm/
Die 3 Pythonscripts gibts hier:
http://forums.x-plane.org/index.php?showtopic=35397&st=0&start=0
Um ins Forum zu kommen, muss man allerdings registriert sein.
Weiterhin benötigt man das DSFTool, "DSF2Text" mit dem DSF-Files in eine Textdatei und umgekehrt gewandelt werden können.
Gibt es hier:
http://scenery.x-plane.com/tools.php
Die Arbeitsweise ist einfach, DSF2Text.exe aufrufen und die umzuwandelnden Dateien (x.txt oder x.dsf) mittels drag and drop einfach auf das schmale Programmfeld mit der Maus hinziehen.
Das läuft alles unter der GNU GENERAL PUBLIC LICENSE und (c) OpenStreetMap contributors. Licensed under Creative Commons Attribution-ShareAlike 2.0.
Und natürlich noch einen Texteditor.
Ich will das nun an einem Beispiel (Niederlande und Belgien) erläutern, wie man so vorgehen kann.
Als OS habe ich Win XP.
Als erstes lade man netherlands.bz2 und belgium.bz2 herunter und entpacke sie.
Wer keinen, für dieses bz2-Format geeigneten Entpacker hat, kann danach googeln oder er holt sich ihn von hier:
http://www.tugzip.de/
Dieser hier ist für Windows, für Linux und Mac bekommt man aber auch was.
1. Man erstelle ein Arbeitsverzeichnis.
Dort hinein kommen die
netherlands.osm
DSFLib.py
layout.py und
xposm.py
2. Die xposm.py ist eine Textdatei und ist zu bearbeiten.Das Original von marginal enthält die Roaddaten von England.
Da steht:
-------------------------------------------------------------------------
# location of DSF files containing terrain mesh
dsfdir='c:/Games/X-Plane/Global Scenery/-global terrain-/Earth nav data'
# location of OSM data file, eg from http://download.geofabrik.de/osm/europe/
# or None to download from server
osmfile='great_britain.osm'
--------------------------------------------------------------------------
2a. !!!bei dsfdir='***hier ihr komplettes Verzeichnis zu den -global terrain-/Earth nav data eintragen***'
!!"mein Eintrag sieht folgendermassen aus:
dsfdir='d:/X-Plane 9/Global Scenery/-global terrain-/Earth nav data'
2b. *osmfile='great_britain.osm' umändern in osmfile='netherlands.osm'
2c. Hier ist nun die grösste Arbeit zu leisten, mit einem Atlas oder Autorootprogramm ermittle man die 1°x1° Koordinaten für die Niederlande.
Diese sind nach folgendem Schema einzutragen: West, Süd, Ost, Nord
Ich habe folgendes ermittelt und das ist hier einzutragen:
Beispiel für den ersten Wert im Eintrag: 3°West, 50°Süd, 4°Ost, 51°Nord
Das sehe dann komplett so aus:
interest=[(3,50, 4,51),
* * * * *(4,50, 5,51),
* * * * *(5,50, 6,51),
* * * * *(6,50, 7,51),
* * * * *(7,50, 8,51),
* * * * *(3,51, 4,52),
* * * * *(4,51, 5,52),
* * * * *(5,51, 6,52),
* * * * *(6,51, 7,52),
* * * * *(7,51, 8,52),
* * * * *(3,52, 4,53),
* * * * *(4,52, 5,53),
* * * * *(5,52, 6,53),
* * * * *(6,52, 8,53),
* * * * *(7,52, 8,53),
* * * * *(3,53, 4,54),
* * * * *(4,53, 5,54),
* * * * *(5,53, 6,54),
* * * * *(6,53, 8,54),
* * * * *(7,53, 8,54)
* * * * ]
Aber Achtung, hier kann es Ärger geben, wenn ein node oder ein shape_point direkt auf beispielsweise 4.0000000° Ost fällt, oder auf 51.0000000.
Das kommt leider öfter vor.
Dann gibts beim Übersetzen mit DSF2Text.exe eine Fehlermeldung: * * * * *
**************
Alert
The conversion failed: !"ERROR: Could not sink chain.\n" (DSFLibWrite.ccp:xxx)
**************
3. Um das zu vermeiden ändere ich die Koordinaten etwas ab. Intern wird zwar mit 7 Nachkommastellen gerechnet, aber bei der interest-Eingabe kann man nur 3 Nachkommastellen einstellen.
Gibt man mehr ein, wird es ignoriert.
Das sehe nun so aus:
interest=[(3.001,50.001, 3.999,50.999),
* * * * *(4.001,50.001, 4.999,50.999),
* * * * *(5.001,50.001, 5.999,50.999),
* * * * *(6.001,50.001, 6.999,50.999),
* * * * *(7.001,50.001, 7.999,50.999),
* * * * *(3.001,51.001, 3.999,51.999),
* * * * *(4.001,51.001, 4.999,51.999),
* * * * *(5.001,51.001, 5.999,51.999),
* * * * *(6.001,51.001, 6.999,51.999),
* * * * *(7.001,51.001, 7.999,50.999),
* * * * *(3.001,52.001, 3.999,52.999),
* * * * *(4.001,52.001, 4.999,52.999),
* * * * *(5.001,52.001, 5.999,52.999),
* * * * *(6.001,52.001, 6.999,52.999),
* * * * *(7.001,52.001, 7.999,52.999),
* * * * *(3.001,53.001, 3.999,53.999),
* * * * *(4.001,53.001, 4.999,53.999),
* * * * *(5.001,53.001, 5.999,53.999),
* * * * *(6.001,53.001, 6.999,53.999),
* * * * *(7.001,53.001, 7.999,53.999)
* * * * ]
* * * * *
4. Die xposm.py wird nun gespeichert. Dann kann das py-script "xposm.py" ausgeführt werden - Start - Ausführen - Durchsuchen.
5. Wenn Python ordnungsgemäss installiert ist, öffnet sich nun ein Windowsfenster (DOS) und das Programm spult ab.
Je nach Eintragungen und Grösse der Dateien kanns schon recht lange dauern.
6. Nun findet man die Textdateien im selben Ordner, die erste vom obigen Eintrag heisst +50+003.txt
7.Nun DSF2Text.exe aufrufen und die Datei +50+003.txt mit der Maus (linke Maustaste gedrückt halten dort drauf ziehen.
Wenns gut geht, steht nach kurzer Zeit dort eine Datei +50+003.txt.dsf. Man entferne das .txt es steht dann nur noch +50+003.dsf dort.
Das führe man für alle anderen xxx.txt.dsf auch durch.
8. In ..\Custom Scenery lege man ein Verzeichnis an, zB _NL-Netherlands roads
* In dieses Verzeichnis kommt ein weiteres Verzeichnis: Earth nav data
* darin muss ein weiteres Verzeichnis angelegt werden, welches jeweil einen Bereich von 10°x10° umfasst.
* Für die Niederlande wären das also: +50+000
Insges. sähe es so aus
..\Custom Scenery\_NL-Netherlands roads\Earth nav data\+50+000\+50+003.dsf ... und die anderen dsf-Dateien
Nun kann man das mit anderen Ländern auch durchführen, zB Belgien.
Man gehe genauso vor wie oben schon beschrieben. Die Netherlandsdateien können gelöscht werden, belgium.osm ist ins Arbeitsverzeichnis zu kopieren.
Dann muss natürlich xposm.py wiederum, nun aber für Belgien, also die Koordinaten und der filename geändert werden.
Alles andere wiederum wie oben beschrieben.
Jetzt hätte man einen Ordner zB _B-Belgium roads, mit allem Inhalt in ..\Custom Scenery.
UND NUN KOMMT WAS GANZ WICHTIGES!
Fliegt man nun in diesem Bereich, stellt man erschüttert fest, dass die Strassen in Belgien wohl da sind.
In den Niederlanden fehlen sie zum Teil, jeweils innerhalb verschiedener 1°x1° Kacheln.
Wie kommt das und was ist zu tun?
Nun, das kommt daher, das sich in beiden Verzeichnissen gleiche dsf-dateien befinden.
In diesem Beispiel sind es 3 Stück: +51+003.dsf, +51+004.dsf und +51+005.dsf
Es ist folgendes festzustellen: X-Plane liest die Custom Scenery Daten in Alphabetischer Reihenfolge ein!
Also käme hier _B-Belgium roads vor _NL-Netherlands roads.
Wir müssen nun die doppelten dsf in Belgien bearbeiten, denn diese werden hier zuerst eingelesen.
Dazu benötigen wir die dazugehörigen Textdatei.
Bei +51+004.txt steht ganz oben:
I
800
DSF2TEXT
PROPERTY sim/planet earth
PROPERTY sim/overlay 1
PROPERTY sim/creation_agent XPOSM 0.1
PROPERTY sim/author (c) OpenStreetMap contributors. Licensed under Creative Commons Attribution-ShareAlike 2.0.
PROPERTY sim/exclude_net 4.001/51.001/4.999/51.999
PROPERTY sim/west 4
PROPERTY sim/east 5
PROPERTY sim/south 51
PROPERTY sim/north 52
...
Von Bedeutung ist nun diese Zeile: PROPERTY sim/exclude_net 4.001/51.001/4.999/51.999
Sie besagt, das von nun an in allen weiteren Szenerien, also Custom sowie auch die Defaultszenerie das Strassennetz ausgeblendet wird.
Diese Zeile muss entfernt werden. Somit lautet die Datei am Anfang nun:
I
800
DSF2TEXT
PROPERTY sim/planet earth
PROPERTY sim/overlay 1
PROPERTY sim/creation_agent XPOSM 0.1
PROPERTY sim/author (c) OpenStreetMap contributors. Licensed under Creative Commons Attribution-ShareAlike 2.0.
PROPERTY sim/west 4
PROPERTY sim/east 5
PROPERTY sim/south 51
PROPERTY sim/north 52
...
Das muss mit allen DSF-Dateien, die doppelt vorkommen durchgeführt werden.
Hat man nur die DSF-Datei kann man sie auch mit DSF2Text.exe in eine Textdatei zurückverwandeln, sie ändern und anschliessend wieder zu einet dsf-Datei konvertieren.
Sind mehr als 2 Länder betroffen gehe man in gleicher Weise vor, aber immer darauf achten, das in der letzten DSF-Datei, die von X-Plane eingelesen wird, die PROPERTY sim/exclude_net ... Anweisung drinsteht, damit die Defaultstrassen ausgeblendet bleiben.
Ich selber habe zZt folgende Strassen aus den Ländern:
Finnland, Deutschland, Schweiz, Spanien von X-Plane .org
Irland, Österreich, Niederlande und Belgien habe ich selber erstellt.
Die aber dort hochzuladen bringt zZt nicht viel, da sich die Rohdaten von OpenStreetMap täglich ändern und erweitern.
Seit mehr als einen Monat gibt es von Marginal (kein Unbekannter in der X-Plane Gemeinde) 3 Pythonscripts.
Damit lassen sich Strassen (roads) mit Hilfe der Programmiersprache Python erzeugen.
Python gibts hier:
http://www.python.org/
Man installiere das Programm, das ist zuerst auch mal alles.
Als Datenbasis für die Strassen dient das OpenStreetMap-Projekt, kurz osm genannt.
Die Datenbasis gibts hier, man kann sich die Länder einzeln aussuchen:
http://download.geofabrik.de/osm/
Die 3 Pythonscripts gibts hier:
http://forums.x-plane.org/index.php?showtopic=35397&st=0&start=0
Um ins Forum zu kommen, muss man allerdings registriert sein.
Weiterhin benötigt man das DSFTool, "DSF2Text" mit dem DSF-Files in eine Textdatei und umgekehrt gewandelt werden können.
Gibt es hier:
http://scenery.x-plane.com/tools.php
Die Arbeitsweise ist einfach, DSF2Text.exe aufrufen und die umzuwandelnden Dateien (x.txt oder x.dsf) mittels drag and drop einfach auf das schmale Programmfeld mit der Maus hinziehen.
Das läuft alles unter der GNU GENERAL PUBLIC LICENSE und (c) OpenStreetMap contributors. Licensed under Creative Commons Attribution-ShareAlike 2.0.
Und natürlich noch einen Texteditor.
Ich will das nun an einem Beispiel (Niederlande und Belgien) erläutern, wie man so vorgehen kann.
Als OS habe ich Win XP.
Als erstes lade man netherlands.bz2 und belgium.bz2 herunter und entpacke sie.
Wer keinen, für dieses bz2-Format geeigneten Entpacker hat, kann danach googeln oder er holt sich ihn von hier:
http://www.tugzip.de/
Dieser hier ist für Windows, für Linux und Mac bekommt man aber auch was.
1. Man erstelle ein Arbeitsverzeichnis.
Dort hinein kommen die
netherlands.osm
DSFLib.py
layout.py und
xposm.py
2. Die xposm.py ist eine Textdatei und ist zu bearbeiten.Das Original von marginal enthält die Roaddaten von England.
Da steht:
-------------------------------------------------------------------------
# location of DSF files containing terrain mesh
dsfdir='c:/Games/X-Plane/Global Scenery/-global terrain-/Earth nav data'
# location of OSM data file, eg from http://download.geofabrik.de/osm/europe/
# or None to download from server
osmfile='great_britain.osm'
--------------------------------------------------------------------------
2a. !!!bei dsfdir='***hier ihr komplettes Verzeichnis zu den -global terrain-/Earth nav data eintragen***'
!!"mein Eintrag sieht folgendermassen aus:
dsfdir='d:/X-Plane 9/Global Scenery/-global terrain-/Earth nav data'
2b. *osmfile='great_britain.osm' umändern in osmfile='netherlands.osm'
2c. Hier ist nun die grösste Arbeit zu leisten, mit einem Atlas oder Autorootprogramm ermittle man die 1°x1° Koordinaten für die Niederlande.
Diese sind nach folgendem Schema einzutragen: West, Süd, Ost, Nord
Ich habe folgendes ermittelt und das ist hier einzutragen:
Beispiel für den ersten Wert im Eintrag: 3°West, 50°Süd, 4°Ost, 51°Nord
Das sehe dann komplett so aus:
interest=[(3,50, 4,51),
* * * * *(4,50, 5,51),
* * * * *(5,50, 6,51),
* * * * *(6,50, 7,51),
* * * * *(7,50, 8,51),
* * * * *(3,51, 4,52),
* * * * *(4,51, 5,52),
* * * * *(5,51, 6,52),
* * * * *(6,51, 7,52),
* * * * *(7,51, 8,52),
* * * * *(3,52, 4,53),
* * * * *(4,52, 5,53),
* * * * *(5,52, 6,53),
* * * * *(6,52, 8,53),
* * * * *(7,52, 8,53),
* * * * *(3,53, 4,54),
* * * * *(4,53, 5,54),
* * * * *(5,53, 6,54),
* * * * *(6,53, 8,54),
* * * * *(7,53, 8,54)
* * * * ]
Aber Achtung, hier kann es Ärger geben, wenn ein node oder ein shape_point direkt auf beispielsweise 4.0000000° Ost fällt, oder auf 51.0000000.
Das kommt leider öfter vor.
Dann gibts beim Übersetzen mit DSF2Text.exe eine Fehlermeldung: * * * * *
**************
Alert
The conversion failed: !"ERROR: Could not sink chain.\n" (DSFLibWrite.ccp:xxx)
**************
3. Um das zu vermeiden ändere ich die Koordinaten etwas ab. Intern wird zwar mit 7 Nachkommastellen gerechnet, aber bei der interest-Eingabe kann man nur 3 Nachkommastellen einstellen.
Gibt man mehr ein, wird es ignoriert.
Das sehe nun so aus:
interest=[(3.001,50.001, 3.999,50.999),
* * * * *(4.001,50.001, 4.999,50.999),
* * * * *(5.001,50.001, 5.999,50.999),
* * * * *(6.001,50.001, 6.999,50.999),
* * * * *(7.001,50.001, 7.999,50.999),
* * * * *(3.001,51.001, 3.999,51.999),
* * * * *(4.001,51.001, 4.999,51.999),
* * * * *(5.001,51.001, 5.999,51.999),
* * * * *(6.001,51.001, 6.999,51.999),
* * * * *(7.001,51.001, 7.999,50.999),
* * * * *(3.001,52.001, 3.999,52.999),
* * * * *(4.001,52.001, 4.999,52.999),
* * * * *(5.001,52.001, 5.999,52.999),
* * * * *(6.001,52.001, 6.999,52.999),
* * * * *(7.001,52.001, 7.999,52.999),
* * * * *(3.001,53.001, 3.999,53.999),
* * * * *(4.001,53.001, 4.999,53.999),
* * * * *(5.001,53.001, 5.999,53.999),
* * * * *(6.001,53.001, 6.999,53.999),
* * * * *(7.001,53.001, 7.999,53.999)
* * * * ]
* * * * *
4. Die xposm.py wird nun gespeichert. Dann kann das py-script "xposm.py" ausgeführt werden - Start - Ausführen - Durchsuchen.
5. Wenn Python ordnungsgemäss installiert ist, öffnet sich nun ein Windowsfenster (DOS) und das Programm spult ab.
Je nach Eintragungen und Grösse der Dateien kanns schon recht lange dauern.
6. Nun findet man die Textdateien im selben Ordner, die erste vom obigen Eintrag heisst +50+003.txt
7.Nun DSF2Text.exe aufrufen und die Datei +50+003.txt mit der Maus (linke Maustaste gedrückt halten dort drauf ziehen.
Wenns gut geht, steht nach kurzer Zeit dort eine Datei +50+003.txt.dsf. Man entferne das .txt es steht dann nur noch +50+003.dsf dort.
Das führe man für alle anderen xxx.txt.dsf auch durch.
8. In ..\Custom Scenery lege man ein Verzeichnis an, zB _NL-Netherlands roads
* In dieses Verzeichnis kommt ein weiteres Verzeichnis: Earth nav data
* darin muss ein weiteres Verzeichnis angelegt werden, welches jeweil einen Bereich von 10°x10° umfasst.
* Für die Niederlande wären das also: +50+000
Insges. sähe es so aus
..\Custom Scenery\_NL-Netherlands roads\Earth nav data\+50+000\+50+003.dsf ... und die anderen dsf-Dateien
Nun kann man das mit anderen Ländern auch durchführen, zB Belgien.
Man gehe genauso vor wie oben schon beschrieben. Die Netherlandsdateien können gelöscht werden, belgium.osm ist ins Arbeitsverzeichnis zu kopieren.
Dann muss natürlich xposm.py wiederum, nun aber für Belgien, also die Koordinaten und der filename geändert werden.
Alles andere wiederum wie oben beschrieben.
Jetzt hätte man einen Ordner zB _B-Belgium roads, mit allem Inhalt in ..\Custom Scenery.
UND NUN KOMMT WAS GANZ WICHTIGES!
Fliegt man nun in diesem Bereich, stellt man erschüttert fest, dass die Strassen in Belgien wohl da sind.
In den Niederlanden fehlen sie zum Teil, jeweils innerhalb verschiedener 1°x1° Kacheln.
Wie kommt das und was ist zu tun?
Nun, das kommt daher, das sich in beiden Verzeichnissen gleiche dsf-dateien befinden.
In diesem Beispiel sind es 3 Stück: +51+003.dsf, +51+004.dsf und +51+005.dsf
Es ist folgendes festzustellen: X-Plane liest die Custom Scenery Daten in Alphabetischer Reihenfolge ein!
Also käme hier _B-Belgium roads vor _NL-Netherlands roads.
Wir müssen nun die doppelten dsf in Belgien bearbeiten, denn diese werden hier zuerst eingelesen.
Dazu benötigen wir die dazugehörigen Textdatei.
Bei +51+004.txt steht ganz oben:
I
800
DSF2TEXT
PROPERTY sim/planet earth
PROPERTY sim/overlay 1
PROPERTY sim/creation_agent XPOSM 0.1
PROPERTY sim/author (c) OpenStreetMap contributors. Licensed under Creative Commons Attribution-ShareAlike 2.0.
PROPERTY sim/exclude_net 4.001/51.001/4.999/51.999
PROPERTY sim/west 4
PROPERTY sim/east 5
PROPERTY sim/south 51
PROPERTY sim/north 52
...
Von Bedeutung ist nun diese Zeile: PROPERTY sim/exclude_net 4.001/51.001/4.999/51.999
Sie besagt, das von nun an in allen weiteren Szenerien, also Custom sowie auch die Defaultszenerie das Strassennetz ausgeblendet wird.
Diese Zeile muss entfernt werden. Somit lautet die Datei am Anfang nun:
I
800
DSF2TEXT
PROPERTY sim/planet earth
PROPERTY sim/overlay 1
PROPERTY sim/creation_agent XPOSM 0.1
PROPERTY sim/author (c) OpenStreetMap contributors. Licensed under Creative Commons Attribution-ShareAlike 2.0.
PROPERTY sim/west 4
PROPERTY sim/east 5
PROPERTY sim/south 51
PROPERTY sim/north 52
...
Das muss mit allen DSF-Dateien, die doppelt vorkommen durchgeführt werden.
Hat man nur die DSF-Datei kann man sie auch mit DSF2Text.exe in eine Textdatei zurückverwandeln, sie ändern und anschliessend wieder zu einet dsf-Datei konvertieren.
Sind mehr als 2 Länder betroffen gehe man in gleicher Weise vor, aber immer darauf achten, das in der letzten DSF-Datei, die von X-Plane eingelesen wird, die PROPERTY sim/exclude_net ... Anweisung drinsteht, damit die Defaultstrassen ausgeblendet bleiben.
Ich selber habe zZt folgende Strassen aus den Ländern:
Finnland, Deutschland, Schweiz, Spanien von X-Plane .org
Irland, Österreich, Niederlande und Belgien habe ich selber erstellt.
Die aber dort hochzuladen bringt zZt nicht viel, da sich die Rohdaten von OpenStreetMap täglich ändern und erweitern.