Warnung: Use of undefined constant MYSQL_NUM - assumed 'MYSQL_NUM' (this will throw an Error in a future version of PHP) in ..../includes/init.php (Zeile 156)

Warnung: Use of undefined constant MYSQL_ASSOC - assumed 'MYSQL_ASSOC' (this will throw an Error in a future version of PHP) in ..../includes/init.php (Zeile 156)

Warnung: Use of undefined constant MYSQL_BOTH - assumed 'MYSQL_BOTH' (this will throw an Error in a future version of PHP) in ..../includes/init.php (Zeile 156)

Warnung: Use of undefined constant VB_FRAMEWORK - assumed 'VB_FRAMEWORK' (this will throw an Error in a future version of PHP) in ..../includes/functions.php (Zeile 8101)

Warnung: Use of undefined constant archive_postsperpage - assumed 'archive_postsperpage' (this will throw an Error in a future version of PHP) in ..../archive/index.php (Zeile 456)
OSM Roads for XP [Archiv] - X-Plane Schweiz

PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : OSM Roads for XP



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.

Cedric Loup
31.01.2009, 21:04
Hallo Dietmar

Super die Zeit die Du Dir genommen hast um dies hier zu erläutern.
Ich selber versehe auch bloss Bahnhof, aber sicher gibt es andere Cracks, die damit was anfangen können.

Merci viel mal für Deine Mühe.

Liebe Grüsse

Cedric

kva
31.01.2009, 22:40
Hallo

Danke für die ausführliche Anleitung. Das hilft sicher jedem der sich mit diesem Thema auseinandersetzen will. Auf mühsamen Wegen habe ich mir das meiste auf x-plane.org zusammengekrümelt und auch zum Laufen gebracht. Aber der Hinweis mit dem Bug bei 4.0°E oder 51°N, von dem lese ich hier zum ersten mal.

Wie schon an anderer Stelle erwähnt sind die OSM Daten für die Schweiz nicht vollumfänglich definiert, darum sieht die Schweiz bei ganz naher Betrachtung nicht so toll aus.

Um sich die Kleinarbeit/Feinanpassung mit den überlappenden Kacheln zu sparen könnte man auch:
- sich ganz Europa in xposm.py Script definieren
- mit der Datei "Europe.osm" arbeiten.

Aber dafür braucht man sicher min. 2-3GB Festplattenplatz und vermutlich 1-2 Tage Rechenzeit!

Und ebenfalls woanders erwähnt wäre es gut wenn dieses Strassepaket irgendwann zum Standard gehört. Momentan kocht hier jeder sein eigenes Süppchen. Die Idee OSM zu nutzen finde ich genial, aber die Ausführung befriedigt mich nicht.

Beiliegend noch 2 Screenshots die das machen was oben erklärt wurde:

XPOSM Script

http://www.tino.net/fly/XPOSM-usage.jpg

DSF Tool
http://www.tino.net/fly/DSFTool-usage.jpg

Dietmar
01.02.2009, 13:06
Aber der Hinweis mit dem Bug bei 4.0°E oder 51°N, von dem lese ich hier zum ersten mal.


Um sich die Kleinarbeit/Feinanpassung mit den überlappenden Kacheln zu sparen könnte man auch:
- sich ganz Europa in xposm.py Script definieren
- mit der Datei "Europe.osm" arbeiten.

Aber dafür braucht man sicher min. 2-3GB Festplattenplatz und vermutlich 1-2 Tage Rechenzeit!



Hallo Valentin,
das ist kein Bug, also ein Fehler dieser Pythonscripts, sondern es ist so, das X-Plane verlangt, nur die Daten einer Kachel von 1°x1° angeboten zu bekommen.

Bleiben wir bei einem Beispiel ..\+50+000\+51+004.dsf

BEGIN_SEGMENT 0 46 124075 4.119869 51.956736 0.315791
SHAPE_POINT 4.119900 51.955800 0.267696
SHAPE_POINT 4.119999 51.955503 0.383798
SHAPE_POINT 4.120000 51.955500 0.382395
END_SEGMENT 124040 4.120200 52.0000000 0.165799

Dort finden wir 52.0000000 .
Dieser Wert gehört aber nicht zu ..\+50+000\+51+004.dsf sondern zu ..\+50+000\+52+004.dsf

Ebenso darf auch der Wert 5.0000000 in obigen Beispiel nicht vorkommen. Wenn dort stünde
SHAPE_POINT 5.000000 51.955500 0.382395
dann gehörte dies zu ..\+50+000\+51+005.dsf

Das ist das Problem, welches DSF2Text.exe erkennt und dann logischerweise die Fehlermeldung ausgibt.

Dein Vorschlag, ganz Europa in einem Aufwasch zu bearbeiten klingt erst mal verlockend - nur das wird wohl nichts.

Denn erstens, die komplette Europa-OSM wäre so gross, dass abgesehen von den enormen Gigabytes die dafur notwendig wären, es wohl ein 64bit OS sein müsste um die gigantische Zeilenanzahl überhaupt lesen zu können. Meines Wissens ist das irgendwie begrenzt.

Und zweitens, da wären sehr, sehr viele 1°x1° Kacheln in dieser einzigen Textdatei --- und DSF2Text.exe (also das DSFTool) kann damit nichts anfangen.
Siehe meine obigen Ausführungen, wir brauchen nun mal leider für jede 1°x1° Kachel eine eigene Textdatei, die dann zu xxx.dsf zu konvertieren ist.
Alternativ, wenn ein PC-System die ganze Europe.osm verarbeiten könnte, müsste man trotzdem die einzelnen 1°x1° Abschnitte eintragen.

Also, mit einem einzigen Eintrag bei *interest=[(-30,20, *40,80)] geht es nicht. Das DFSTool hustet uns was!

kva
01.02.2009, 13:41
Hallo

Dass man die einzelnen 1°x1° Bereiche in die xposm.py Datei eintagen muss, ist mir klar. Aber die Übung wird an der schieren Datemenge scheitern. Es war ja auch nur eine Idee.