ICAO Karte nachbauen

hallo nochmal,
ich möchte eine mir vorhandene icao karte im papierformat digitalisieren bzw. diese durch daten aus dem openstreet projekt nachbauen. meine icao karte erstreckt sich vom 51 - 53 längengrad und 6 - 12 breitengrad.

zur theorie :
ich analysiere zunächst alle osm daten die in dem oben genannten gebiet liegen. im nächsten schritt definere ich ein fenster in der größe von 1000 x 1000 pixel. damit innnerhalb dieses fensters jede geografische koordinate auf dem richtigen pixel landet nutze ich folgende formel :

public function ermittleKoordinateAlsPixel($L,$B)  
{
   $L1   = $this->reference["nw"]["long"];  // Längengrad für die Nord-West Grenze also linke obere Ecke des Fensters
   $B1   = $this->reference["nw"]["lat"];    // Breitengrad für die Nord-West Grenze also linke obere Ecke des Fensters
   $x1   = $this->reference["nw"]["x"];      // x-Pixelwert also linke obere Ecke des Fensters 
   $y1   = $this->reference["nw"]["y"];      // y-Pixelwert also linke obere Ecke des Fensters
   
   $L2   = $this->reference["ne"]["long"];
   $B2   = $this->reference["ne"]["lat"];
   $x2   = $this->reference["ne"]["x"];
   $y2   = $this->reference["ne"]["y"];

   $L3   = $this->reference["sw"]["long"];
   $B3   = $this->reference["sw"]["lat"];
   $x3   = $this->reference["sw"]["x"];
   $y3   = $this->reference["sw"]["y"];
   
   $L4   = $this->reference["se"]["long"];
   $B4   = $this->reference["se"]["lat"];
   $x4   = $this->reference["se"]["x"];
   $y4   = $this->reference["se"]["y"];
   
   $B11   = $B1 + ($L - $L1) / ($L2 - $L1) * ($B2 - $B1);
   $x11   = $x1 + ($L - $L1) / ($L2 - $L1) * ($x2 - $x1);
   $y11   = $y1 + ($L - $L1) / ($L2 - $L1) * ($y2 - $y1);
   
   $B12   = $B3 + ($L - $L3) / ($L4 - $L3) * ($B4 - $B3);
   $x12   = $x3 + ($L - $L3) / ($L4 - $L3) * ($x4 - $x3);
   $y12   = $y3 + ($L - $L3) / ($L4 - $L3) * ($y4 - $y3);

   $x   = $x11 + ($B - $B11) / ($B12 - $B11) * ($x12 - $x11);
   $y   = $y11 + ($B - $B11) / ($B12 - $B11) * ($y12 - $y11);

   return array($x,$y);
}

ist mein lösungsansatz richtig oder falsch ?

Wenn Du so direkt fragst: Falsch!

Ich habe mich vor einiger Zeit mal mit genau demselben Thema beschäftigt ;-).

ICAO Karten verwenden die sog. “Winkeltreue Kegelprojektion mit zwei längentreuen Bezugsbreitenkreisen” (siehe auch auf einer Papier-ICAO-Karte ganz rechts oben). Diese ist auch als “Lambert-Projektion” bekannt.
Der Grund, daß diese Projektion verwendet wird, ist nach

http://en.wikipedia.org/wiki/Lambert_conformal_conic_projection

“Pilots favor these charts because a straight line drawn on a Lambert conformal conic projection approximates a great-circle route between endpoints.”, d.h. Großkreise entpsrechen ziemlich gut Geraden bei dieser Projektionsart.

OSM verwendet sowohl bei Mapnik als auch bei Osmarender die sog. Mercator-Projektion. Den Unterschied zwischen den beiden Projektionsarten (Mercator / Lambert) kann man gut auf den folgenden beiden Seiten sehen:

http://mathworld.wolfram.com/MercatorProjection.html

http://mathworld.wolfram.com/LambertConformalConicProjection.html

Wie Du anhand der Formeln unter den Bildern siehst ist die Mercator-Projektion mathematisch gesehen um einiges einfacher als die Lambert-Projektion.
Du musst Dich also zuerst für eine dieser Projektionsarten für Dein Programm/Projekt entscheiden: Lambert ist die Projektion der Original-ICAO-Karte, hat aber einen sehr viel höheren mathematischen Aufwand, Mercator ist einfacher, hat aber einige kleine Nachteile. Ich würde Dir zur Mercator-Projektion raten.

Die Formel der Mercator-Projektion findest Du auf

http://wiki.openstreetmap.org/index.php/Slippy_map_filenames

für OSM wieder. Diese kannst Du, wenn Du Dich für Deine Karte für die Mercator-Projektion entscheidest, als Grundlage für Deine Umrechnungsformel verwenden.

Bei meinen früheren Recherchen bin ich auch auf diese (Computer-lesbare) Beschreibung von Lufträumen gestossen:

http://www.daec.de/aul/downfiles/090312_OpenAir.txt

bzw.

http://www.daec.de/aul/luftr_d.php

Daten für andere “Gadgets” (z.B. Flugplätze, Funkfeuer, Hindernisse, usw.) müsste es wohl auch irgendwo zum Download geben.

Schöne Grüße

PA94