WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Designer Forum (http://www.wcm.at/forum/forumdisplay.php?f=61)
-   -   Simple Moving Map in XML? (http://www.wcm.at/forum/showthread.php?t=178638)

Isra 18.11.2005 19:42

Simple Moving Map in XML?
 
Hallo Zusammen!
Ich würde gerne eine einfache Moving Map in ein Panel einbauen, also nicht eine in der Form des GPS im FS2004.
Dazu möchte ich ein BMP (Karte) benützen welches sich so quasi dreht oder bewegt.
Hat jemand eine Ahnung wie sich das in XML umsetzen lässt
:confused:
Ich stelle mir das irgendwie so vor: Man nimmt dieses BMP und definiert die Mitte davon als Koordinaten nördlich/westlich. Dann müsste man wohl auch noch weitere Koordinaten des BMP definieren wie z.B. links recht oben unten....oder wie geht das?

Vielen Dank für jede Hilfestellung:-)

Schulli 23.11.2005 11:03

du meinst bestimmt sowas wie auf der airshow.

mittelpunkt definieren, nach N,S,W,E in abhängigkeit vom abstand vom ausgangspunkt verschieben und danach entsprechend aircraft heading drehen. zum zoomen einfach verschiedene bmp mit unterschiedlicher auflösung verwenden und über <visible>tags anwählen.

aber wo kriegste denn ne bmp her, die die gesamte erde abdeckt und ne gute detaillierte auflösung bringt? so ein bmp von nem abgerollten globus ist doch zu weit weg, da siehste ja nicht, wenn sich der flieger bewegt.

derBruchpilot 23.11.2005 19:10

Ich sehe da ein grundsätzliches Problem:

Die Karte könnte man als Hintergrund-bitmap in das gauge übernehmen. Oder als Element, dass unter einer Maske verschoben wird. Allerdings könnte man sie nicht wechseln oder zoomen, sondern nur die jeweils benötigte Karte sichtbar schalten. Der gesamte Kartensatz müsste also im gauge "fest verdrahtet" sein, ebenso die Referenzierung. Damit ließe sich nur ein sehr begrenzter Teil der Erdoberfläche abdecken.

Zum "Wechseln" der Kartenblätter müsste man Dateien lesen können, diese Funktion wird aber von xml meines Wissens nicht unterstützt.

:confused:

Harry, übernehmen Sie!:rolleyes:

Gruß R.

harry3 23.11.2005 20:23

Also solange die Karte klein genug ist, ist das möglich. Also eine Karte von deinem Heimatland, der Schweiz, wird sicher möglich sein. Dort fällt die Erdkrümmung auch noch nicht so ins Gewicht.

Aber ein viel größeres Gebiet halte ich für unmachbar.

Grundsätzlich würde ich es so machen wie Schulli geschrieben hat. Also 2 Shift für x und y Richtung. Damit kannst du die Karte im "North Up" Modus verschieben. North Up ist das einfachste.

Schwieriger wirds mit Kursverfolgung, also wenn die Karte immer in Flugrichtung gedreht wird.
Dann musst du zusätzlich ein Rotate für die Himmelsrichtung einbauen.
Außerdem kannst du die Karte dann nicht mehr so ohne weiteres verschieben. Denn es kann ja sein dass Norden dann nicht oben ist, sondern z.B. rechts.
Du musst also mit den Winkelfunktionen sin und cos herausrechnen, in welche Richtung verschoben werden muss.
Also z.B.:

Shift x = Breite*sin(Flugrichtung)+Länge*cos(Flugrichtung)
(ich hoffe ich hab mich jetzt nicht mit sin und cos vertan...!)



Grüße,
Harri

Isra 23.11.2005 22:14

Hallo Zusammen!
Danke für Eure Inputs :-)
Ich hab wohl vergessen zu erwähnen dass sich die Map nur auf das schweizer Ländle beziehen soll.
Also mit freundlicher Mithilfe gestaltet sich die Sache so:
Die Koordinaten beziehen sich nicht auf die Schweiz im folgenden Beispiel (noch nicht)! Das Problem dass ich dabei noch habe ist wie und wo ich die Koordinaten genau eingebe.
Bei diesem gauge gibt es also 2 Maps, full und small wo man also eine Zoom Position hat. Kann mir evtl. jemand helfen wie man die Koordinaten einträgt?

Gruss Beat

PHP-Code:

<Gauge Name="moving map" Version="1.0">

<
Element>
 <
Size X="350" Y="338"/>
  
<
Visible>(A:Circuit general panel onbool)</Visible>

<
Element>
  
<
Visible>(G:Var1== (A:PLANE LATITUDEdegreess0 58.2 &lt; &amp;&ampl0 49.8 &gt; &amp;&amp; (A:PLANE LONGITUDEdegreess1 -10.8 &gt; &amp;&ampl1 2.2 &lt; &amp;&amp;
</
Visible>
  <
Position X="0" Y="0"/>
  
<
MaskImage Name="map_mask.bmp" Bright="Yes" ImageSizes="350,338,0,0">
    
<
Axis X="0" Y="0"/>
     
</
MaskImage>
      <
Image Name="swiss_full.bmp" Bright="Yes" ImageSizes="4480,4800,0,0">
        
<
Axis X="2149" Y="1822"/>
        
</
Image>
         
<
Shift>
          
<
Value>55 (A:PLANE LATITUDEdegrees) - 96 s0 -3.5 (A:PLANE LONGITUDEdegrees) - 2.5 s1 l0 s2 l1 801 l2 
</
Value>
         
<
Scale X="1.00"/>
         
</
Shift>
         
<
Shift>
          
<
Value>1500 3.7 dgrd tan 46 s0 -3.5 (A:PLANE LONGITUDEdegrees) - 4.5 3.7 abs dgrd cos l0 s1 l0 l1 s2 (&gt;G:Var255 (A:PLANE LATITUDEdegrees) - / -2777 l2 
</
Value>
         
<
Scale Y="1.00"/>
         
</
Shift>

</
Element>


<
Element>
  
<
Visible>(G:Var1) (A:PLANE LATITUDEdegreess0 58.2 &lt; &amp;&ampl0 49.8 &gt; &amp;&amp; (A:PLANE LONGITUDEdegreess1 -10.8 &gt; &amp;&ampl1 2.2 &lt; &amp;&amp;
</
Visible>
  
<
Position X="0" Y="0"/>
   
<
MaskImage Name="map_mask.bmp" Bright="Yes" ImageSizes="350,338,0,0">
    <
Axis X="0" Y="0"/>
     
</
MaskImage>
      
<
Image Name="swiss_small.bmp" Bright="Yes" ImageSizes="1493,1600,0,0">
        <
Axis X="600" Y="495"/>
        </
Image>
         
<
Shift>
          
<
Value>55 (A:PLANE LATITUDEdegrees) - 32 s0 -3.5 (A:PLANE LONGITUDEdegrees) - 2.5 s1 l0 s2 l1 267 l2 
</
Value>
         
<
Scale X="1.00"/>
         
</
Shift>
         
<
Shift>
          
<
Value>55 (A:PLANE LATITUDEdegrees) - / -926 s0 (G:Var2l0 
</
Value>
         
<
Scale Y="1.00"/>
         
</
Shift>

</
Element>


<
Element>
  
<
Visible>(A:PLANE LATITUDEdegreess0 58.2 &gt;= l0 49.8 &lt;= || (A:PLANE LONGITUDEdegreess1 -10.8 &lt;= || l1 2.2 &gt;= ||
</
Visible>
      
<
Image Name="Out_Of_Range.bmp" Bright="Yes" ImageSizes="350,338,0,0"/>

</
Element>


<
Element>
  
<
Visible>(A:PLANE LATITUDEdegreess0 58.2 &ltl0 49.8 &gt; &amp;&amp; (A:PLANE LONGITUDEdegreess1 -10.8 &gt; &amp;&ampl1 2.2 &lt; &amp;&amp;
</
Visible>
 
<
Position X="175" Y="169"/>
  
<
Image Name="map_pointer.bmp" Bright="Yes" ImageSizes="61,61,0,0">
   
<
Axis X="30.5" Y="30.5"/>
  
</
Image>
    
<
Rotate>
     
<
Value>(A:Plane heading degrees gyroradians)
</
Value>
    
</
Rotate>

</
Element>


</
Element>

  
<
Mouse>
   
<
Tooltip>%Moving Sectional Chart</Tooltip>
    
<
Area Left="0" Top="278" Width="60" Height="60">
     
<
Tooltip>%Zoom (%((G:Var1))%{if}%In%{else}%Out%{end})</Tooltip>
      
<
Cursor Type="Hand"/>
       
<
Click>(G:Var1) ! (&gt;G:Var1)</Click>
    
</
Area>
  
</
Mouse>
 
</
Gauge

:-)

derBruchpilot 23.11.2005 23:44

So, ich habe Deinen Code der Form halber mal in eine andere Form gebracht:
PHP-Code:


<Element
       <
Visible>
        (
G:Var1== 
        (
A:PLANE LATITUDEdegreess0 58.2 < &amp;&amp
        
l0 49.8 > &amp;&amp
        (
A:PLANE LONGITUDEdegreess1 -10.8 > &amp;&amp
        
l1 2.2 < &amp;&amp
    </
Visible
      <
Position X="0" Y="0"/> 
                   
    <
MaskImage Name="map_mask.bmp" Bright="Yes" ImageSizes="350,338,0,0"
             <
Axis X="0" Y="0"/> 
          </
MaskImage>
 
          <
Image Name="swiss_full.bmp" Bright="Yes" ImageSizes="4480,4800,0,0"
             <
Axis X="2149" Y="1822"/> 
         </
Image
          
    <
Shift>            
        <
Value>
            
55 (A:PLANE LATITUDEdegrees) - 96 s0 -3.5 
            
(A:PLANE LONGITUDEdegrees) - 2.5 s1 l0 s2 l1 801 l2 
        </
Value>           
        <
Scale X="1.00"/> 
          </
Shift
          
    <
Shift
               <
Value>
            
1500 3.7 dgrd tan 46 s0 -3.5 
            
(A:PLANE LONGITUDEdegrees) - 4.5 3.7 abs dgrd cos l0 s1 l0 l1 s2 (>G:Var2)                     55 (A:PLANE LATITUDEdegrees) - / -2777 l2 
        </
Value
              <
Scale Y="1.00"/> 
          
    </
Shift
</
Element


derBruchpilot 24.11.2005 00:07

Weenn ich es richtih interpreteiren, steuert der Ausdruck
PHP-Code:

       <Visible>
        (
G:Var1== 
        (
A:PLANE LATITUDEdegreess0 58.2 < &amp;&amp
        
l0 49.8 > &amp;&amp
        (
A:PLANE LONGITUDEdegreess1 -10.8 > &amp;&amp
        
l1 2.2 < &amp;&amp
    </
Visible

die Sichtbarkeit der ersten Karte. Sie soll sichtbar sein, wenn
1. die Variable G1 gleich Null ist:
PHP-Code:

(G:Var1== 

2. die geogr Breite kleiner als 58.2 und größer als 49.8 ist:
PHP-Code:

        (A:PLANE LATITUDEdegreess0 58.2 < &amp;&amp
        
l0 49.8 > &amp;&amp

3. die geogr Länge kleiner als 2.2 und größer als 10.8 ist:
PHP-Code:

        (A:PLANE LONGITUDEdegreess1 -10.8 > &amp;&amp
        
l1 2.2 < &amp;&amp

damit hättest Du doch schon mal Koordinaten angegeben?

Anschließend verschiebst Du. Da Du kein rotate vorgesehen hast, also die Karte nicht drehst, halte ich die sin- und cos-Geschichte erst einmal für entbehrlich.

Zum Berechnen der Shift-größe folgende Überlegung:
Der Abstand zwischen zwei Längengraden (Meridianen) beträgt am Äquator ca. 111 km. Deine Karte hat eine Ausdehnung von -10.8 bis 2.2 in der Breite, also 13 Längengrade, macht 1443 km.
Das bitmap ist 4480 Pixel breit, also deckt ein Pixel 0,3 KM ab. Oder anders herum, bei einer Flugstecke von 1km müsstest Du die Karte ca. 3 Pixel in x-Richtung verschieben.
Dazu müsstest Du Deinen momentanen Standort vom gedachten Kartenmittelpunkt (-4.3) subtrahieren, und, da sich die Karte unter dem flugzeug wegschiebt, mit -1 multiplizieren:
PHP-Code:

<Value>
  (
A:PLANE LONGITUDEdegrees)  4.3 /-/ - /-/ 
</
Value

Wenn Du genau die Entfernung zwischen zwei Meridianen zurückgelegt hättest, müsstest Du die Karte um 113km * 3 Pixel = 339 Pixel verschieben:
PHP-Code:

<Shift>            
  <
Value>
    (
A:PLANE LONGITUDEdegrees)  4.3 /-/ - /-/ 
  </
Value
  <
Scale X="339.00"/> 
</
Shift

Soweit, sogut. Da der Abstand zwischen zwei Meridianen zu den Polen hin immer kleiner wird, kannst Du ja noch eine Breitenkorrektur anbringen. Unter der Annahme, das MS eine Kugeloberfläche verwendet, ließe sich das über den Kosinus bewerkstelligen:
PHP-Code:

<Shift
 <
Value>
   (
A:PLANE LONGITUDEdegrees)  (A:PLANE LATITUDEradianscos *   4.3 /-/ - /-/ 
  </
Value
  <
Scale X="339.00"/> 
</
Shift


derBruchpilot 24.11.2005 01:22

BTW: Du solltest vielleicht auch bdedenken, dass das von Dir gewählte Bitmap swiss_full in der gedachten Größe 63Mb schwer ist.


Gruß R.

Isra 25.11.2005 18:50

Guten Abend!
Vielen Dank für die Übersetzung :-)!!! Ich hab damit nun noch etwas rumgebastelt und das Ganze in ein Hornet-Panel eingebaut was nun folgendermassen ausschaut:

http://www.opus2.ch/Hornetnight.jpg

Womit Du absolut Recht hast ist das Problem mit der Grösse der Karte.
Meines ist zwar nicht ganz so gross wie Du genannt hast, aber dennnoch sehr unattraktiv für ein Gauge. Es müsste immense Ausmasse haben um wirklich reinzoomen zu können um überhaupt noch scharfe Konturen erkennen zu können.
Da bleibt mir wohl nichts anderes übrig als zu der Vektoren-Version zurück zu kehren.

Beim traditionellen GPS des FS9 lässt sich soweit ich weiss die Farbgebung des Terrains nicht ändern. Da ich eben dieses blaustichige Terrain benötige, müsste ich wohl eine einfärbende Folie über das Terrain legen. Weiss jemand in welchem Format ich dieses erstellen/speichern müsste?

harry3 25.11.2005 19:30

Du könntest aber auch die Karte in mehrere eile zerhacken.
Und auch nicht zu bviele Zoomstufen einbauen, z.B. nur 2.

Die bmp's für die Karten am besten nur als 16Farben BMP abspeichern.

Irgendwie müsste es also schon möglich sein das Gauge lauffähig zu machen!


Grüße,
Harri


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag