Autor Beitrag
goose
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 93



BeitragVerfasst: So 19.02.06 11:12 
Hallo,

hat jemand Zeit und Lust mir bei einem Projekt zu helfen ?

Also es geht um die Schematische Darstellung eines Airports.
Nur die Startbahnen und noch einige Punkte, aber nur im direkten Umkreis !
Ich will also keine Weltkarte !

Ich muss das so hinkriegen das ich an eine Procedure einen Center Punkt übergebe
und noch einige Punkte im Umkreis ( Anflug und abflugstrecken sind das dann ).
Das Problem ist das ich alle Punkte nur im Real Format habe, also Latitude und Longitude im DEG format.

Für Leipzig sähe das so aus :

Das Center wäre

Lat=51.414997
Lon=12.226944

Einige Punkte würden das hier z.B. sein :

PunktNr = Lat:Lon
01=51.433655:12.267141 (( werden dann mit Canvas oder so LineTo verbunden ))
02=51.427933:12.145728
03=51.994987:11.794295

Das müsste dann auf einem Bildchen dargestellt werden.

Zur Erklärung mal noch :

Lat und Lon von Center und von den Punkten können für Latitude Werte von -90 bis 90
und Longitude von -180 bis 180 sein.
Die dazugehörigen Punkte sind aber immer ganz in der Nähe ( gehören ja zu dem jeweiligen Flughafen )

Ich hab das schon mal versucht, und habs aber nicht hinbekommen :-(
Deshalb hab ich eingesehen das ich dazu nun immer noch Hilfe von Euch brauche.

Jemand hier aus dem Forum hatte mir schon mal einen Tip gegeben das ich da einen Umrechnungsfaktor brauch. Ich hab das dann versucht, aber habs nicht hinbekommen weil die Werte die ich an eine bmp.canvas z.B. übergeben kann ja nur integer werte sein dürfen.
Umrechnungsfaktor gut und schön, aber egal was ich versucht habe, es kommen immer zahlen raus die sich nicht unterscheiden.
Das heisst wenn ich den Punkt 01=51.433655:12.267141 und den Punkt 02=51.427933:12.145728
umrechne sind die errechneten Zahlen nicht weit genug auseinander so das man was auf das Canvas bringen könnte.

Ich hoffe das war so einigermassen verständlich ?
Falls nicht dann einfach nochmal fragen.

Ich wär Euch wirklich dankbar für jegliche Hilfe !

Matthias

Ps.: Beispiel für einen Flughafen "am anderen Ende der Welt" :-)
nur damit Ihr mal die zur Verfügung stehenden Daten seht :

Center :
Lat=68.534439
Lon=-89.808052

einige Punkte des Flughafens :

01=68.533501:-89.787781
02=68.576164:-89.466835
03=68.553833:-89.317001
04=68.566498:-89.249664
05=68.592880:-89.281342
06=68.596138:-89.306648
07=68.533501:-89.787781
08=68.551331:-89.654869
09=68.545906:-89.774620
10=68.540230:-89.791946

Wenn ich eine Procedure hätte der ich einmal die ersten Punkte von Leipzig übergeben könnte und ein Bild davon gezeichnet bekomme und zum anderen diese Punkte hier, dann wär ich glücklich !

ich hab mal ein Bildchen gemacht. Wenn das so aussieht,dann wär das genial !!
die beiden recht waagerechten striche sind die Startbahnen und die beiden links sind dann die beiden punkte die durch eine Linie verbunden sind.

Das ist aber schon viel zu weit gegriffen. Eine kleine Rechnung wie ich das mit den Punkten berechnen kann und wie ich die dann auf ein bild bekomme recicht ja !!

Matthias
Einloggen, um Attachments anzusehen!
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: So 19.02.06 20:44 
Nun du musst IMHO konsequent die "Datenebene" von der Darstellungsebene trennen. Also

1.Ebene: Die EingangsDaten(alle Orte,jeweils X/Y) im Realformat
2.Ebene: Datenebene(alle Orte, jeweils X/Y) im Integerformat

Dafür brauchst du dann zwei Funktionen
1. Input2Point(NewPoint:TInputPoint):TDisplayPoint;
2. DrawPoint(NewPoint:TDisplayPoint);

Aber du müsstest mal mehr Informationen dazu posten WAS für Koordinaten das sind(also welches Koordinatensystem).
Dann nochmal was es mit dem Center auf sich hat. Du erwähntest Anflug, das wäre dann aber ein Vektor, also nochmal kurz und knapp was du machen willst, was dir zu Verfügung steht und so...
Und vielleicht nochmal ein größeres Bild mit unterschiedlichen Farben,Bezeichnungen und den Koordinaten.
LLCoolDave
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 212

Win XP
Delphi 2005
BeitragVerfasst: So 19.02.06 21:01 
Ich würde das ganze einfach folgendermaßen angehen:

Du ermittelst den östlichsten, nördlichsten, westlichsten und südlichsten wert aus allen Punkten.
Du ermittelst die Größe, auf der das ganze dargestellt werden soll, z.B. ein Bitmap der Größe 640*480, kannst du auch variabel gestalten, wie du willst.
Aus Darstellungszwecken sollte an allen Seiten etwas Platz freibleiben, damit die Punkte nicht direkt auf dem Rand liegen, ich würde z.B. 20 Pixel wählen, aber das kommt auch ganz drauf an wie du das ganze haben willst.
Als Umrechnungsfaktor gilt dann: abs(NördlichsterWert-SüdlichsterWert)/(Bildhöhe-2*Randabstand) (analog für Ost/West Richtung), der Betrag ist, weil ich mir wegen den Vorzeichen nicht sicher bin ;)
Ein beliebiger Punkt wird dann bei Round(abs(NördlichsterWert-ZuZeichnenderPunktWert)*Umrechnungsfaktor)+Randabstand gezeichnet.

Dieses Vorgehen hat aber auch ein paar Probleme:
Das Bild wird in eine von beiden Richtungen gestreckt. Um das zu umgehen nimmst du für beide Seiten jeweils den größeren Umrechnungsfaktor, dann ist das Bild nicht mehr gestreckt.
Wenn der Center Punkt auch in der Mitte ist musst du nicht den Abstand Nördlichster/Südlichster Wert sondern Nördlichster/Center und Südlichster/Center Wert betrachten und wieder den größeren der Umrechnungsfaktoren nehmen.
Die Grundlegende Vorgehensweise ist dir hoffentlich klar geworden. Ob das ganze auch für dein Problem geeignet ist, kann ich nicht sicher sagen, hab mir die Punkte nicht näher angeschaut, aber ich hoffe ich hab dir einen entsprechenden Denkanstoß gegeben.

PS: Ist nicht getestet, kann sein dass ich mich irgendwo vertan hab ... :P