Erstellen von Flugplänen

Diskussionen, Hinweise, Feedback, usw. rund um LockOn Mods und Add-Ons.

Moderator: JaBoG32 Stab

33| 309th_Hedgehog
Schaut öfter mal vorbei
Beiträge: 29
Registriert: 27. Aug 2005, 07:20

Erstellen von Flugplänen

Beitrag von 33| 309th_Hedgehog » 30. Okt 2005, 15:37

Das manuelle Erstellen von Flugplänen artet ganz schön in Arbeit aus:

[url=http://img470.imageshack.us/my.php?imag ... 9cv.jpghkd][imghkd]http://img470.imageshack.us/img470/5108 ... 9cv.th.jpg[/imghkd][/urlhkd]

Die Daten sind ja in der Mission enthalten. Weiß von euch jemand, ob man an die Daten 'rankommt?

Benutzeravatar
Dirty
Intermediate Member
Beiträge: 199
Registriert: 13. Aug 2004, 14:25

Beitrag von Dirty » 31. Okt 2005, 09:45

Also, wenn du eine .mis file im Texteditor öffnest erhälst du in etwa das:

[quotecd6]ÐÏࡱá > þÿ þÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿþÿÿÿþÿÿÿ
þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿR o o t E n t r y ÿÿÿÿÿÿÿÿ Yá¦Å @ L o c k O n _ M i s s i o n ÿÿÿÿÿÿÿÿÿÿÿÿ > ÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿ

! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ<LockOn_Mission MissionID="1"><Objects><Missions><Mission ID="1" version="0.96" Title="BJT1" StartTime="32400" RedCoalitionID="1" BlueCoalitionID="2" MeteoID="1" MissionGoalID="1" MissionOptionsID="1" LastMissionID="1" ReadOnly="0" MapPositionLeft="497965" MapPositionTop="-232012.3" MapPositionRight="579957.8" MapPositionBottom="-170525.3" EventLogID="1"/></Missions><Coalitions><Coalition ID="1"><Country ID="1"/></Coalition><Coalition ID="2"/></Coalitions><Countries><Country ID="1" CLSID="{EFADDFE6-9360-4523-8CAB-2D74182617FD}"><GroupCategory CLSID="{C168A850-3C0B-436a-95B5-C4A015552560}"><Group ID="1"/></GroupCategory></Country></Countries><Groups><Group ID="1" Name="AirgroupUSA01" RouteID="1"><SubGroup ID="1"/></Group></Groups><Routs><Route ID="1" StartTime="32400"><RoutePoint ID="1"/><RoutePoint ID="2"/></Route></Routs><RoutePoints><RoutePoint ID="1" Speed="483.1122" PositionID="1" RouteTaskID="1"/><RoutePoint ID="2" Speed="483.1122" PositionID="2" RouteTaskID="1"/></RoutePoints><Positions><Position ID="1" Latitude="-210533.09375" Longitude="532841.6875" Altitude="609.600036621094"/><Position ID="2" Latitude="-196573.09375" Longitude="522672.71875" Altitude="609.600036621094"/><Position ID="3"/></Positions><RouteTasks><RouteTask ID="1" CATID="{2D0C3C57-2AB3-48ee-A1C2-BE75934F76F6}" WorldTypeID="0"/></RouteTasks><Airports/><Ships/><Commanders><Commander ID="1" Name="Pilot1" SkillID="1"/></Commanders><Skills><Skill ID="1" WorldTypeID="5"/></Skills><PlayerOptions><PlayerOption ID="1" Immortal="1" CrashRecovery="1" CivTraffic="0" UnlimitedFuel="1" UnlimitedWeapons="0" EasyFlight="0" EasyRadar="0" RadioAssist="0" ExternalLabels="1" ExternalView="1" AwacsView="1" AircraftSwitching="1" AutoLockOn="0" AdvancedFlightModel="0" PadLock="1" MiniHUD="0" GEffects="2" AwacsViewFilter="7"/></PlayerOptions><SubGroups><SubGroup ID="1" Name="Enfield" IsHumanCrashed="0" TaskID="1" CallSignCLSID="{F55E6D97-9C9E-417a-A275-B23ABC556414}"><Unit CATID="{C168A850-3C0B-436a-95B5-C4A015552560}" ID="1" IsDead="0"/></SubGroup></SubGroups><Planes><Plane ID="1" CLSID="{8FDB2742-2283-450D-B417-CFC47774E8B6}" PositionID="3" CommanderID="1" FuelQuantity="4853" BoardNum="1" PaintSchemeCLSID="{D7FBDFAC-7CDA-4857-9999-CDC0F2AFD1CA}" WorldID="16777472" SUSPENDED="" MissionID="1"/></Planes><Payloads/><Cars/><Fortifications/><Tasks><Task ID="1" CatID="2" WorldTypeID="15"/></Tasks><TargetInfos/><WorldObjects/><Places/><LandObjects/><Weapons/><Meteos><Meteo ID="1" Temperature="20" Visibility="80" SeasonID="1" FogID="1" CloudsID="1"><AtmLayer ID="1" Height="0"/><AtmLayer ID="2" Height="2000"/><AtmLayer ID="3" Height="8000"/></Meteo></Meteos><Seasons><Season ID="1" CLSID="{E87084B2-8469-46F1-8FDB-71A2F73E97B6}"/></Seasons><Fogs><Fog ID="1" Density="0" Thickness="50"/></Fogs><Clouds><Cloud ID="1" Base="300" Density="0" Thickness="100"/></Clouds><AtmLayers><AtmLayer ID="1" Turbulance="0" WindID="1"/><AtmLayer ID="2" Turbulance="0" WindID="2"/><AtmLayer ID="3" Turbulance="0" WindID="3"/></AtmLayers><Winds><Wind ID="1" Speed="0" Direction="360"/><Wind ID="2" Speed="0" Direction="360"/><Wind ID="3" Speed="0" Direction="360"/></Winds><Precipitations/><MissionGoals><MissionGoal ID="1" Captured="0"/></MissionGoals><VictoryConditions/><MissionOptions><MissionOption ID="1" MissilesEffectiveness="50" WorldDensity="3" UserID="1" PlayerOptionsID="1" MissionFailuresID="1"/></MissionOptions><MissionFailures><MissionFailure ID="1" Probability="100"/></MissionFailures><EventLogs><EventLog ID="1"/></EventLogs><ShotEvents/><HitInfos/><TakeOffEvents/><LandEvents/><CrashEvents/><EjectionEvents/><RefuelingEvents/></Objects></LockOn_Mission>

[/quotecd6]

Kannst ja mal durchschauen und mit dem Editor rumexperimentieren
welche Daten du so findest. Ich denke die Koordinaten der Waypoints
sollten (in welcher form auch immer) auslesbar sein. Alles was du
brauchst sind die Koordinaten der Waypoints, Höhe und Speed


Ich habe auch schon mit der Idee eines Flightplaners gespielt, aber mir
fehlt die fähigkeit zu programmieren. Wenn Du die Daten gefunden hast
und auslesen kannst, kann ich Dir mit der nötigen Mathematik helfen. Um
genau zu sein, haben wir alle Formeln die du brauchst schon in unserem
ATC-Radar-Tool verbaut.


Melde Dich, wenn du was findest oder Hife brauchst.

Dirty :-)
It's not the speed that kills you,... it's the sudden stop!!!

33| 309th_Hedgehog
Schaut öfter mal vorbei
Beiträge: 29
Registriert: 27. Aug 2005, 07:20

Beitrag von 33| 309th_Hedgehog » 31. Okt 2005, 13:36

ok. Für's erste kann ich mal das mis-File so umbauen, dass ein simples XML-File draus wird. Dann ist wohl alles da.

Ihr habt doch ausgiebig mit den Koordinaten in eurem ATC Tool herumgerechnet.
Wie komme ich auf die Koordinaten, wenn ich solche Positionsangaben habe:
[codec1w]<Position ID="1" Latitude="-164482.328125" Longitude="462246.375" Altitude="30"/>
<Position ID="2" Latitude="-168620.140625" Longitude="454734.59375" Altitude="700"/>
<Position ID="3" Latitude="-172678.796875" Longitude="466964.3125" Altitude="700"/>
[/codec1w]

Benutzeravatar
Dirty
Intermediate Member
Beiträge: 199
Registriert: 13. Aug 2004, 14:25

Beitrag von Dirty » 1. Nov 2005, 13:30

...dafür gibts 'ne "einfache" Formel. Zugegeben, so einfach ist die nicht, aber du sollst sie ja nicht verstehen, sondern nur anwenden ;-) Zillion sollte diese Formel haben und kann sie ja mal hier Posten.

Hintergrund:
Die Welt ist rund (wer hätt's gedacht?), deshalb rechnet man in RL mit sphärischer Geometrie (kompliziert!!!). Die LockOn Welt hingegen ist flach, deshalb gibt es diese LockOn Koordinaten (Einfach!!!). Der Ursprung liegt irgendwo in der Gegend um Simferopol. Kannst Dir mit ALT-Z (Deutsche Tastatur) in der Außenansicht die LO koordinaten einblenden lassen.

Mein Tipp:
Wenn du nicht unbedingt die RL Koordinaten brauchst, dann rechne einfach mit den LO Koordinaten. Genaueres kann ich, oder auch Zillion Dir gerne per TS erklären. Wer Pythagoras versteht, hat die halbe Miete!!

Ich find die Idee mit dem Flightplanner super, und würde gerne Helfen. Wir können uns ja mal im Public TS treffen.

Dirty :-)
It's not the speed that kills you,... it's the sudden stop!!!

Benutzeravatar
Zillion
Intermediate Member
Beiträge: 227
Registriert: 22. Apr 2004, 21:47

Beitrag von Zillion » 2. Nov 2005, 01:51

Kannst du mir mal erklären wie du die .mis dateien in eine XML verwandelst ?

Hier die Umrechnung:

Die Formel von Lockon XZ zu lat/long und wieder zurück lautet wie folgt:

https://www.polymoon.org/tobi/privat/latlong2xz.zip

[quoteadu]

//original code by Valery from Eagle Dynaics=-=-=-=-=-=-


//-------------------------------------------------------------------------
//Variable Declarations:
[/coloradu]
ToDegree = 180/Math.PI;

zeroX = 5000000;
zeroZ = 6600000;

centerX = 11465000-zeroX;
centerZ = 6500000-zeroZ;

pn40x24_X = 4468608.57-zeroX; // point 40dgN : 24dgE
pn40x24_Z = 5730893.72-zeroZ;

pn48x24_X = 5357858.31-zeroX; // point 48dgN : 24dgE
pn48x24_Z = 5828649.53-zeroZ;

pn40x42_X = 4468608.57-zeroX; // point 40dgN : 42dgE
pn40x42_Z = 7269106.20-zeroZ;

pn48x42_X = 5357858.31-zeroX; // point 48dgN : 42dgE
pn48x42_Z = 7171350.00-zeroZ;

// distances from the circle center to 48dgN and 40dgN


lenNorth = Math.sqrt((pn48x24_X-centerX)*(pn48x24_X-centerX)+(pn48x24_Z-centerZ)*(pn48x24_Z-centerZ));
lenSouth = Math.sqrt((pn40x24_X-centerX)*(pn40x24_X-centerX)+(pn40x24_Z-centerZ)*(pn40x24_Z-centerZ));

lenN_S = lenSouth-lenNorth;

RealAngleMaxLongitude = Math.atan((pn40x24_Z-centerZ)/(pn40x24_X-centerX))*ToDegree;

// Map bounds. Degrees!
EndWest = 24;
EndEast = 42;
EndNorth = 48;
EndSouth = 40;

MiddleLongitude = (EndWest+EndEast)/2;
ToLengthN_S = (EndNorth-EndSouth)/lenN_S;
ToAngleW_E = (MiddleLongitude-EndWest)/RealAngleMaxLongitude;

//-----------------------------------------------------------------------------

//function from lat/long to XZ:[/coloradu]


function latlong2xz (inLongitudeGrad,inLatitudeGrad) {

var realAng = (inLongitudeGrad-MiddleLongitude)/ToAngleW_E/ToDegree;
var realLen = lenSouth-(inLatitudeGrad-EndSouth)/ToLengthN_S;
var outX = centerX-realLen*Math.cos(realAng);
var outZ = centerZ+realLen*Math.sin(realAng);
var returns = outX+":"+outZ;
return returns;
}

//-----------------------------------------------------------------------------

//function from XZ to lat/long:[/coloradu]

function xz2latlong (x,z) {

var realAng = Math.atan((z-centerZ)/(centerX-x))
var realLen = Math.sqrt((z-centerZ)*(z-centerZ)+(centerX-x)*(centerX-x))
var LongitudeGrad = realAng * ToAngleW_E * ToDegree + MiddleLongitude
var LatitudeGrad =(lenSouth-realLen) * ToLengthN_S + EndSouth
var returns = LatitudeGrad+":"+LongitudeGrad
return returns;
}
[/quoteadu]

Ich hoffe es hilft... ist in ActionScript umgewndelt... Wie Dirty schon sagt, ich verstehs auch nich so ganz aber ES FUNKTIONIERT...

Falls du LockOn Positionen mal mit ECHTEN Karten vergleichen willst musst du die lat/long auch noch in UTM Koordinaten umrechnen, dafür habe ich dann diese Formel und die hats wirklich in sich:
[/coloradu]
https://www.polymoon.org/tobi/privat/WSG842UTM.swf
^heisst eigentlich WGS84 und nicht WSG84

[quoteadu]/*
original code by
Paul Hastings paul@sustainableGIS.com

29-Aug-2005:
ported to ActionScript by
Tobias Houfek
ibot@snafu.de
zillion@virtual-jabog32.de
*/


// some static vars/required values
iLONGITUDE = 1-1; // cf arrays start at 1...
iLATITUDE = 2-1; // <tobi> :) Flash Arrays start 0
iEASTING = 1-1;
iNORTHING = 2-1;


//WGS84
semiMajorAxis = 6378137.0;
inverseFlattening = 298.257223563;

a = semiMajorAxis;
f = 1.00 / inverseFlattening;

// UTM Parameters
longitude1 = -177; // Longitude of initial central meridian (Zone one) = 177 degrees west longitude
zoneWidth = 6; // Zone width = 6 degrees

centralScaleFactor = 0.9996;
k0 = centralScaleFactor;
falseEasting = 500000; // False easting = 500,000m
falseNorthing = 0; // False northing in the northern hemisphere, southern = 10,000,000m

e2 = (2 * f) - (f * f); // Eccentricity
e = Math.sqrt(e2);

longitude0West = longitude1 - (zoneWidth * 1.5);
longitude0 = longitude0West + (zoneWidth * 0.5);

projectionName="UTM";
ellipsoidName="WGS84";


errMessages = new Object();
errMessages.NOT_ENOUGH_POINTS_MESSAGE = "ProjectionException: Less than 2 coordinates supplied";
errMessages.INVALID_PROJECTION_NAME_MESAGE = "ProjectionException: unknown projection";
errMessages.UTM_ZONE_NOT_DEFINED_MESSAGE = "ProjectionException: UTM zone not defined";
errMessages.LONGITUDE_OUT_OF_RANGE_MESSAGE = "ProjectionException: longitude out of range";
errMessages.LATITUDE_OUT_OF_RANGE_MESSAGE = "ProjectionException: latitude out of range";


function pow(a,b){
return Math.pow(a, b);
}//pow

function sec(value) {
return 1.0 / Math.cos(value);
} //sec

function toDegrees(radians){
return (radians / Math.PI) * 180.0;
} //toDegrees

function toRadians(degrees) {
return (degrees / 180.0) * Math.PI;
} // toRadians

function getProjectionName(){
var name="";
if (UTMzone == undefined)
trace(errMessages.UTM_ZONE_NOT_DEFINED_MESSAGE);
else {
name=projectionName+" (Zone"+utmZone+")";
return name;
}
}//getProjectionName

function getEllipsoidName(){
return ellipsoidName;
}//getEllipsoidName

function setEllipsoid(ellipsoid){

return EllipsoidName;
}//setEllipsoid

function getUTMzone(){
return UTMzone;
} //getUTMzone

// used for geographic to UTM, calculates somethings about UTM
function setUTMZone(longitude, latitude) {
// make these known to app
var thisZone=0;
var hemisphere="N"; // default hemisphere
if (Math.abs(longitude) > 180)
trace(errMessages.LONGITUDE_OUT_OF_RANGE_MESSAGE+": "+longitude);
if (Math.abs(latitude) > 90)
trace(errMessages.LATITUDE_OUT_OF_RANGE_MESSAGE+": "+latitude);
var thisZoneTest =Math.round(longitude)+180;
thisZone = Math.floor((thisZoneTest / zoneWidth) + 1);
centralMeridian = thisZone * zoneWidth + longitude0;
if (latitude < 0) {
hemisphere = "S";
falseNorthing = 10000000;
}
utmZone = thisZone + hemisphere;
//initErrorMessages();
} //setUTMzone

// used for UTM to geographic, need to know somethings about UTM
function initUTM(zone) {
// make these known to app
var hemisphere="N"; // default hemispehere
var thisZone=0;
if (zone.substr(-1,1) == "S") {
hemisphere="S";
falseNorthing = 10000000;
}

//------------------------Hope it works out------
//<tobi> OMG !! :| original:
//>>>>>thisZone=rereplace(zone,"N|S","","ALL");<<<<<<<<<
//Flashs string methods are really limited
if(zone.indexOf("N") != -1){
var zoneI=zone.indexOf("N");
}else if(zone.indexOf("S") != -1){
var zoneI=zone.indexOf("S");
}
thisZone = zone.slice(0,zoneI)
//-----------------------------------------------

centralMeridian = thisZone * zoneWidth + longitude0;
utmZone= thisZone + hemisphere;
//initErrorMessages();
} //getUTMzone

function getEasting() {
var easting=0.0;
term1 = (omega[3] / 6.0) * c[3] * (psi[2] - t[3]);
term2 = (omega[5] / 120.0) * c[5] * ( 4 * psi[4] * (1.0 - 6.0 * t[3]) + psi[3] * (1.0 + 8.0 * t[3]) - psi[2] * 2.0 * t[3] + t[5] );
term3 = (omega[7] / 5040.0) * c[7] * (61.0 - 479.0 * t[5] - t[7]);
eDash = (k0 * nu * omega[2] * c[2]) * (1 + term1 + term2 + term3);
easting = eDash + falseEasting;
return easting;
} //geteasting

function getNorthing() {
var northing =0.0;
term1 = (omega[3] / 2.0) * nu * s * c[2];
term2 = (omega[5] / 24.0) * nu * s * c[4] * (4.0 * psi[3] + psi[2] - t[3]);
term3 = (omega[7] / 720.0) * nu * s * c[6] * ( 8.0 * psi[5] * (11.0 - 24.0 * t[3]) - 28.0 * psi[4] * (1.0 - 6.0 * t[3]) + psi[3] * (1.0 - 32.0 * t[3]) - psi[2] * (2.0 * t[3]) + t[5] );
term4 = (omega[9] / 40320.0) * nu * s * c[8] * (1385.0 - 3111.0 * t[3] + 543.0 * t[5] - t[7]);
nDash = k0 * (m + term1 + term2 + term3 + term4);
northing = nDash + falseNorthing;
return northing;
}//getnorthing

function getLatitude() {
var latitude=0.0;
term1 = (tDash[2] / (k0 * rhoDash)) * (eDash * x[2] / 2.0);
term2 = (tDash[2] / (k0 * rhoDash)) * (eDash * x[4] / 24.0) * ( -4.0 * psiDash[3] + 9.0 * psiDash[2] * (1.0 - tDash[3]) + 12.0 * tDash[3] );
term3 = (tDash[2] / (k0 * rhoDash)) * (eDash * x[6] / 720.0) * ( 8.0 * psiDash[5] * (11.0 - 24.0 * tDash[3]) - 12.0 * psiDash[4] * (21.0 - 71.0 * tDash[3]) + 15.0 * psiDash[3] * (15.0 - 98.0 * tDash[3] + 15.0 * tDash[5]) + 180.0 * psiDash[2] * (5.0 * tDash[3] - 3.0 * tDash[5]) + 360.0 * tDash[5] );
term4 = (tDash[2] / (k0 * rhoDash)) * (eDash * x[8] / 40320.0) * (1385.0 + 3633.0 * tDash[3] + 4095.0 * tDash[5] + 1575.0 * tDash[7]);
latitude = phiDash - term1 + term2 - term3 + term4;
return toDegrees(latitude);
} //getLatitude

function getLongitude() {
var longitude=0.0;
var omegaL=0.0; // "global" omega is array
if (centralMeridian == undefined)
trace(errMessages.UTM_ZONE_NOT_DEFINED_MESSAGE);
term1 = x[2] * secDash;
term2 = (x[4] / 6.0) * secDash * (psiDash[2] + 2.0 * tDash[3]);
term3 = (x[6] / 120.0) * secDash * ( -4.0 * psiDash[4] * (1.0 - 6.0 * tDash[3]) + psiDash[3] * (9.0 - 68.0 * tDash[3]) + 72.0 * psiDash[2] * tDash[3] + 24.0 * tDash[5] );
term4 = (x[8] / 5040.0) * secDash * (61.0 + 662.0 * tDash[3] + 1320.0 * tDash[5] + 720.0 * tDash[7]);
omegaL = term1 - term2 + term3 - term4;
longitude = toRadians(centralMeridian) + omegaL;
return toDegrees(longitude);
} //getLongitude

function meridianDistance(phi) {
var A0 = 1.0 - (e2 / 4.0) - (3.0 * e2*e2 / 64.0) - (5.0 * e2*e2*e2 / 256.0);
var A2 = (3.0/8.0) * (e2 + e2*e2 / 4.0 + 15.0 * e2*e2*e2 / 128.0);
var A4 = (15.0/256.0) * (e2*e2 + 3.0 * e2*e2*e2 / 4.0);
var A6 = 35.0 * e2*e2*e2 / 3072.0;
var mM = 0.0;
mM = a * ( (A0 * phi) - A2 * Math.sin(2.0 * phi) + A4 * Math.sin(4.0 * phi) - A6 * Math.sin(6.0 * phi) );
return mM;
} //meridianDistance

function footPointLatitude(mM) {
var n = f / (2.0 - f);
var n2 = n*n;
var n3 = n2*n;
var n4 = n3*n;
var phiDash=0.0;
var G = a * (1.0 - n) * (1.0 - n2) * (1.0 + (9.0/4.0) * n2 + (225.0/64.0) * n4) * (Math.PI/180.0);
var sigma = (mM * Math.PI) / (180.0 * G);
phiDash = sigma + ((3.0 * n / 2.0) - (27.0 * n3 / 32.0)) * Math.sin(2.0 * sigma) + ((21.0 * n2 / 16.0) - (55.0 * n4 / 32.0)) * Math.sin(4.0 * sigma) + (151.0 * n3 / 96.0) * Math.sin(6.0 * sigma) + (1097.0 * n4 / 512.0) * Math.sin(8.0 * sigma);
return phiDash;
} //footPointLatitude

function RoC(s,returnWhat) {
var rho = a * (1.0 - e2) / pow(1.0 - (e2 * s), 1.5);
var nu = a / pow((1.0 - e2 * s), 0.5);
var psi = nu / rho;

if (returnWhat == "rho") return rho;
if (returnWhat == "Nu") return Nu;
if (returnWhat == "Psi") return psi;
} //RoC

function GeographicalToGrid(latitude, longitude) {
var latRadians = toRadians(latitude);
if (centralMeridian == undefined)
trace(errMessages.UTM_ZONE_NOT_DEFINED_MESSAGE);
// calculate cos^n(latitude) for n in (1..7)

c = new Array;
c[1] = 1.0;
c[2] = Math.cos(latRadians);
c[3] = c[2] * c[2];
c[4] = c[3] * c[2];
c[5] = c[4] * c[2];
c[6] = c[5] * c[2];
c[7] = c[6] * c[2];
c[8] = c[7] * c[2];

t = new Array;
t[1] = 1.0;
t[2] = Math.tan(latRadians);
t[3] = t[2] * t[2];
t[4] = t[3] * t[2];
t[5] = t[4] * t[2];
t[6] = t[5] * t[2];
t[7] = t[6] * t[2];

omega = new Array;
omega[1] = 1.0;
omega[2] = toRadians(longitude - centralMeridian);
omega[3] = omega[2] * omega[2];
omega[4] = omega[3] * omega[2];
omega[5] = omega[4] * omega[2];
omega[6] = omega[5] * omega[2];
omega[7] = omega[6] * omega[2];
omega[8] = omega[7] * omega[2];
omega[9] = omega[8] * omega[2];

s = Math.sin(latRadians);

nu = RoC(s*s,"Nu");

psi = new Array;
psi[1] = 1.0;
psi[2] = RoC(s*s,"Psi");
psi[3] = psi[2] * psi[2];
psi[4] = psi[3] * psi[2];
psi[5] = psi[4] * psi[2];

m = meridianDistance(latRadians);
} //GeographicalToGrid

function GridToGeographical(easting,northing) {
nDash = northing - falseNorthing;
m = nDash / k0;
phiDash = footPointLatitude(m);
tDash = new Array;
tDash[1] = 1.0;
tDash[2] = Math.tan(phiDash);
tDash[3] = tDash[2] * tDash[2];
tDash[4] = tDash[3] * tDash[2];
tDash[5] = tDash[4] * tDash[2];
tDash[6] = tDash[5] * tDash[2];
tDash[7] = tDash[6] * tDash[2];
sDash = Math.sin(phiDash);
rhoDash = RoC(sDash*sDash,"rho");
nuDash = RoC(sDash*sDash,"Nu");
psiDash = new Array;
psiDash[1] = 1.0;
psiDash[2] = RoC(sDash*sDash,"Psi");
psiDash[3] = psiDash[2] * psiDash[2];
psiDash[4] = psiDash[3] * psiDash[3];
psiDash[5] = psiDash[4] * psiDash[2];
eDash = easting - falseEasting;

x = new Array;
x[1] = 1.0;
x[2] = eDash / (k0 * nuDash);
x[3] = x[2] * x[2];
x[4] = x[3] * x[2];
x[5] = x[4] * x[2];
x[6] = x[5] * x[3];
x[7] = x[6] * x[2];
x[8] = x[7] * x[2];
secDash = sec(phiDash);
} // GridToGeographical

function getGridConvergence() {
var gamma = 0.0;
term1 = -omega[2] * s;
term2 = (omega[4] / 3.0) * s * c[3] * (2 * psi[3] - psi[2]);
term3 = (omega[6] / 15.0) * s * c[5] * (psi[5] * (11.0 - 24.0 * t[3]) - psi[4] * (11.0 - 36.0 * t[3]) + 2 * psi[3] * (1.0 - 7.0 * t[3]) + psi[2] * t[3]);
term4 = (omega[8] / 315.0) * s * c[7] * (17.0 - 26.0 * t[3] + 2.0 * t[5]);
gamma = term1 + term2 + term3 + term4;
return gamma;
} //getGridConvergence

function getPointScaleFactorGeo() {
// GeographicalToGrid
var k=0.0;
term1 = (omega[3] / 2.0) * psi[2] * c[3];
term2 = (omega[5] / 24.0) * c[5] * ( 4 * psi[4] * (1.0 - 6.0 * t[3]) + psi[3] * (1.0 + 24.0 * t[3]) - 4.0 * psi[2] * t[3] );
term3 = (omega[7] / 720.0) * c[7] * (61.0 - 148.0 * t[3] + 16.0 * t[5]);
k = k0 + k0 * term1 + k0 * term2 + k0 * term3;
return k;
} //getPointScaleFactorGeo

function getPointScaleFactorGrid() {

// GridToGeographical
var k=0.0;
var x = eDash*eDash / (k0*k0 * rhoDash * nuDash);
var x2 = x*x;
var x3 = x2*x;
term1 = x / 2.0;
term2 = (x2 / 24.0) * ( 4.0 * psiDash[2] * (1.0 - 6.0 * tDash[3]) - 3.0 * (1.0 - 16.0 * tDash[3]) - 24.0 * tDash[3] / psiDash[2] );
term3 = x3 / 720.0;
k = k0 + k0 * term1 + k0 * term2 + k0 * term3;
return k;
} //getPointScaleFactor

function projectionToGeographic(points){
//var i = 0;
for (var i=0; i<points.length; i++) {
if (points.length < 2) {
trace(errMessages.NOT_ENOUGH_POINTS_MESSAGE+": "+i);
}
GridToGeographical(points[iEASTING], points[iNORTHING]);
points[iLONGITUDE] = getLongitude();
points[iLATITUDE] = getLatitude();
}
return points;
} //projectionToGeographic

function geographicToProjection(points){
//var i = 0;
for (var i=0; i<points.length; i++) {
if (points.length < 2) {
trace(errMessages.NOT_ENOUGH_POINTS_MESSAGE+": "+i);
}
GeographicalToGrid(points[iLATITUDE], points[iLONGITUDE]);
points[iEASTING] = getEasting();
points[iNORTHING] = getNorthing();
}
return points;
} //geographicToProjection


//hier wird nur meine Flash datei vorbereitet
locations = new Array;
locations[0]="Philadelphia;18N;-75.25,39.96"
locations[1]="Torshavn;29N;-6.79,62.09"
locations[2]="Mbandaka;34N;18.25,0.09"
locations[3]="Bangkok;47N;100.52,13.75"
locations[4]="Chumporn;47N;99.07,10.65"
locations[5]="Hobart;55S;147.14,-42.68"
locations[6]="Melbourne;55S;145.02,-37.76"
locations[7]="Adelaide;54S;138.48,-34.66"
locations[8]="Alice Springs;53S;133.84,-23.55"
locations[9]="Darwin;52S;130.81,-12.29"
locations[10]="Brisbane;56S;153.05,-27.42"
locations[11]="Freemantle;50S;115.92,-32.03"
locations[12]="Perth;50S;115.85,-31.95"
locations[13]="Shackleton Ice Shelf;47S;100.30,-67.79"
locations[14]="Astrolabe Glacier;54S;140.28,-66.78"
locations[15]="Dibble Iceberg Tongue;53S;134.75,-65.27"
locations[16]="Thompson Glacier;51S;123.62,-66.78"
locations[17]="Humboldt Mountains;32S;11.44,-72.07"

locationsCombo.addItem("Philadelphia");
locationsCombo.addItem("Torshavn");
locationsCombo.addItem("Mbandaka");
locationsCombo.addItem("Bangkok");
locationsCombo.addItem("Chumporn");
locationsCombo.addItem("Hobart");
locationsCombo.addItem("Melbourne");
locationsCombo.addItem("Adelaide");
locationsCombo.addItem("Alice Springs");
locationsCombo.addItem("Darwin");
locationsCombo.addItem("Brisbane");
locationsCombo.addItem("Freemantle");
locationsCombo.addItem("Perth");
locationsCombo.addItem("Shackleton Ice Shelf");
locationsCombo.addItem("Astrolabe Glacier");
locationsCombo.addItem("Dibble Iceberg Tongue");
locationsCombo.addItem("Thompson Glacier");
locationsCombo.addItem("Humboldt Mountains");
[/coloradu]




//hier wird dann erst die ganze Grütze aufgerufen


function calculate() {
var indexer = locationsCombo.getSelectedIndex();
var PData = locations[indexer].split(";");
var placename=Pdata[0];
var orgZone=Pdata[1];
var somePoints=Pdata[2];
var somePointsSplit=somePoints.split(",");

latlong = new Array;
latlong.push(somePointsSplit);

testPoints = new Array;
testPoints.push(somePointsSplit);

setUTMZone(latlong[0][0],latlong[0][1]); //get UTM zone from this lat/long
newUTMPoints=geographicToProjection(testPoints);
gC=getGridConvergence();

// now lets round trip those UTM points
newLLpoints= new Array;
x=newUTMPoints[0];
newLLpoints[0]=x[0];
newLLpoints[1]=x[1];

testPoints= new Array;
testPoints[0] = new Array;
testPoints[0][0]=newLLpoints[0];
testPoints[0][1]=newLLpoints[1];
initUTM(UTMzone);
newLLPoints=projectiontoGeographic(testPoints);

Xresult = latlong[0][0];
Yresult = latlong[0][1];


}[/coloradu]

[/quoteadu]

PS: Wenn ihr wollt bauen wir ein klick auf die Karte, mache mission und Flugplan Programm, da hätte ich Spass dran...
Bild

Benutzeravatar
JaBoG32_Laud
Professional
Beiträge: 5240
Registriert: 24. Nov 2003, 14:05

Beitrag von JaBoG32_Laud » 2. Nov 2005, 04:44

Ich denk du hast im mom auf der Arbeit noch so viel zu proggen?!! ;)

Von mir aus können wir uns aber gerne mal über Sinn und Möglichkeiten eines solchen Tools unterhalten.

:P
Bild

Benutzeravatar
Zillion
Intermediate Member
Beiträge: 227
Registriert: 22. Apr 2004, 21:47

Beitrag von Zillion » 2. Nov 2005, 09:32

In der tat, denn während ich dies schreibe ernte ich ungeduldige Blicke meiner Mitarbeiter, besonders der Teamleiter...

Und btw, kauft euch mal Verliebt in Berlin das Spiel, wenns dann raus ist ...

:lol:

grüsse
Bild

33| 309th_Hedgehog
Schaut öfter mal vorbei
Beiträge: 29
Registriert: 27. Aug 2005, 07:20

Beitrag von 33| 309th_Hedgehog » 2. Nov 2005, 09:35

JaBoG32_Zillion hat geschrieben:Kannst du mir mal erklären wie du die .mis dateien in eine XML verwandelst ?[/quotemyk]

Da hat mich Dirty 'drauf gebracht: Die mis-Datei enthält ab einer bestimmten Stelle nur noch ASCII-Zeichen:
  • [*myk]Suche einen String in der Form "[bmyk]<LockOn_Mission[/bmyk] MissionID="1">"[/*:mmyk]
    [*myk]Speichere ab da alles in eine Datei[/*:mmyk]
    [*myk]Diese ist dann schon als XML lesbar[/*:mmyk][/listmyk]

    Ich mach' das momentan halt von Hand. Ist aber mit dem richtigen Editor sehr einfach.

    Danke für die Formeln. Ich bin erst mal platt!!!!

    Habe diesen Monat noch viel zu tun, aber im nächsten Monat würde ich mich mal der Sache annehmen.

JaBoG32_Chrissi
Site Admin
Beiträge: 6858
Registriert: 15. Jun 2003, 16:43

Beitrag von JaBoG32_Chrissi » 2. Nov 2005, 09:55

Ich persönlich hab noch nie mit XML gearbeitet, aber soweit Ich weiß bietet php schöne XML Parserfunktionen. Evtl. ist da was dabei, dass dir die Arbeit erleichtern würde?

https://de2.php.net/manual/de/ref.xml.php

EDIT: Geh am Anfang auf jeden Fall mit substr() über das Logfile und lass die ersten paar Zeichen weg... Dieses doofe Binärzeugsel könnte glaub sonst etliche Parse-Error hervorrufen.
2. JaBoG32 "Fighting Wildcats"

Gruß, Chrissi aka Kichi :D
Our Dreams are Wings

Bild

33| 309th_Hedgehog
Schaut öfter mal vorbei
Beiträge: 29
Registriert: 27. Aug 2005, 07:20

Beitrag von 33| 309th_Hedgehog » 2. Nov 2005, 10:57

JaBoG32_Chrissi hat geschrieben:Ich persönlich hab noch nie mit XML gearbeitet, aber soweit Ich weiß bietet php schöne XML Parserfunktionen. Evtl. ist da was dabei, dass dir die Arbeit erleichtern würde? [/quotewjo]
Ich auch nicht :wink:

Die Frage der Programmiersprache habe ich auch noch nicht geklärt. Da ich kein Windows-Programmierer bin, ist es mir eigentlich egal. Sollte 'Standard' sein. Können wir gerne mal zusammen diskutieren, was hier Sinn macht.
[listwjo][*wjo]Zum einen ist die Parserfunktion für XML der Punkt (wobei ich mir keine Sprache, d.h. Entwicklungsumgebung, mehr denken kann, die da heute noch nichts bietet)[/*:mwjo]
[*wjo]Aber dann ist da noch die Reportausgabe: das Ganze soll ja einigermaßen formatiert und druckbar sein.[/*:mwjo]
[*wjo]Dann wäre da noch die Frage, ob das Ganze auch Online laufen können muss. Seh' ich noch nicht. Aber wenn ich mir ansehe, was ihr alles auf die Beine gestellt habt (Respekt!), dann ist die Vorstellung prickelnd, auf einer Seite eures Lockon-Servers einen Button zu drücken und den Flugplan eines Piloten der aktuellen Mission sich anzeigen lassen zu können... 8) [/*:mwjo][/listwjo]

Antworten