Aktuelle Zeit: 07.08.2020 20:14

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Fragen/Hilfe um die Landkarte .............
BeitragVerfasst: 13.09.2016 11:55 
Offline

Registriert: 20.02.2010 20:10
Hallochen,

ich mochte ein kleine Programm f. unser Funkprojekt erstellen, da soll
unter anderem grafisch auf der Landkarte zwei Funkstationen dargestellt
werden und diese mit einer Linie verbunden werden, es sind immer
verschiedene Stationen von denen ich die koordinaten erhalte oder
sie aus einer DB hole.
Es muss nicht 100% 'passen' , halt so genau wie moeglich.

Im ersten Step soll es erstmal mit Europa funktionieren, hab mir ein
paar Grafiken runtergeladen als Hi-Res Bild

Ich hab jetzt aber irgendwie als dummy nicht so die Idee wies starten
soll, koenntet ihr mir vllcht Tips geben und mich in die richtige Richtung
'stubsen' , vielen Dank!

vG
Charly

_________________
vlG Charly / PB 5.42 x86


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fragen/Hilfe um die Landkarte .............
BeitragVerfasst: 13.09.2016 12:28 
Offline
Admin
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Als Vorlage kannst du folgendes nutzen: http://www.purebasic.fr/english/viewtop ... 27&t=66320
Damit kannst du auch Marker erstellen und anzeigen lassen.

_________________
BildBildBildBild BildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fragen/Hilfe um die Landkarte .............
BeitragVerfasst: 13.09.2016 13:13 
Offline

Registriert: 20.02.2010 20:10
Danke f. den Link, hab das mal ueberflogen, wenn ich das richtig
versteh ist das etwas 'oversize' , ich haeng mal ein Beispiel-Bild
an, es muessen quasi keine Details vorhanden sein und Offline
funktionieren

http://prntscr.com/chh0rj

vG
Charly

Bild

EDIT: die genaugkeit der Koordinaten ist laut Wiki: ~6,33 km in Längenrichtung und ~4,63 km in Breitenrichtung f. DL

_________________
vlG Charly / PB 5.42 x86


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fragen/Hilfe um die Landkarte .............
BeitragVerfasst: 14.09.2016 09:10 
Offline
Benutzeravatar

Registriert: 29.08.2008 09:13
Wohnort: hinterm Mond
Als erstes brauchst Du eine Karte in Mercator-Projektion. Dann brauchst Du noch einen Nullpunkt(in der Karte in Pixeln z.B. London), von dem Du die Koordinaten berechnest und dazu die Längen- und Breitengrade, da die Koordinaten, die Du eintragen willst wahrscheinlich in ° ' '' in Länge und Breite sind. Und dann am besten noch einen 2.Ort mit Pixelkoordinaten und Längen und Breitengraden, damit man die Längen und Breitengrade in Pixel umrechnen kann. Und dann kann man schon loszeichnen :) . Wenn Du beim Zeichnen noch Probleme hast, einfach noch mal nachfragen.

_________________
Win8 32Bit / PB 5.10 / PB 5.20


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fragen/Hilfe um die Landkarte .............
BeitragVerfasst: 14.09.2016 10:46 
Offline

Registriert: 20.02.2010 20:10
Danke f. die Antw. alter Mann,
genau mit dem Zeichen da haengt es noch, meine jetzige Karte hat ueber 4000 x 4000 Pixel
ich stell mir vor das ich ein Fenster entweder 640*480 oder 800*600 habe indem ich einen
Bereich meiner Karte oder auch die ganze Karte darstelle und dann die Luftlinie zw. den
zwei Funkstationen dazuzeichne. Da bin ich am testen / expirementieren, bin halt mehr
der AVR programmiere, in PB bin ich noch Frischling hihi

vG
Charly

_________________
vlG Charly / PB 5.42 x86


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fragen/Hilfe um die Landkarte .............
BeitragVerfasst: 14.09.2016 13:00 
Offline
Benutzeravatar

Registriert: 29.08.2008 09:13
Wohnort: hinterm Mond
Ich hab mal mit Deiner Karte eine Linie von Berlin nach Paris gezeichnet (einfach auf den Button Zeichnen klicken). Da sieht man, wie wichtig die Mercator-Projektion ist. Die Positionen von Rom und London sind zwar nur geschätzt, aber so daneben liegen die nicht.

Zum Spielen:

Code:
EnableExplicit

Enumeration WINDOW
  #MAIN_WINDOW
EndEnumeration

Enumeration GADGET
  #IMAGE_GADGET
  #TEXT_GADGET_KOORDINATEN_EINGABE
  #TEXT_GADGET_KOORDINATEN_ANZEIGE
  #STRING_GADGET_VON
  #STRING_GADGET_BIS
  #BUTTON_ZEICHNEN
EndEnumeration 

Enumeration IMAGE
  #IMAGE_1
EndEnumeration

Procedure.i InSekunden(iGrad.i,iMinuten.i,iSekunden.i)
  ProcedureReturn 3600*iGrad+60*iMinuten+iSekunden
EndProcedure

Procedure.i Init(*dSekundenproPixelX.Double,*dSekundenproPixelY.Double,*dNullX.Double,*dNullY.Double)
  Protected iGrad1x.i=0 ,iMinuten1x.i=0 ,iSekunden1x.i=0
  Protected iGrad1y.i=51,iMinuten1y.i=31,iSekunden1y.i=0 ; London
  Protected iGrad2x.i=12,iMinuten2x.i=29,iSekunden2x.i=0
  Protected iGrad2y.i=41,iMinuten2y.i=53,iSekunden2y.i=0 ; Rom
  Protected iPixel1x.i=217,iPixel1y.i=175                ; London auf dem Bild (geschätzt) - kein Mercator
  Protected iPixel2x.i=346,iPixel2y.i=396                ; Rom auf dem Bild (geschätzt) - kein Mercator
;  Protected iPixel1x.i=279,iPixel1y.i=310                ; London auf dem Bild (geschätzt)
;  Protected iPixel2x.i=419,iPixel2y.i=471                ; Rom auf dem Bild (geschätzt)
  Protected dDiffx.d=iPixel2x-iPixel1x,dDiffy.d=iPixel2y-iPixel1y
  *dSekundenproPixelX\d = (InSekunden(iGrad2x,iMinuten2x,iSekunden2x)-InSekunden(iGrad1x,iMinuten1x,iSekunden1x))/dDiffx
  *dSekundenproPixelY\d = (InSekunden(iGrad2y,iMinuten2y,iSekunden2y)-InSekunden(iGrad1y,iMinuten1y,iSekunden1y))/dDiffy
  *dNullX\d = -iPixel1x * *dSekundenproPixelX\d + InSekunden(iGrad1x,iMinuten1x,iSekunden1x)
  *dNullY\d = -iPixel1y * *dSekundenproPixelY\d + InSekunden(iGrad1y,iMinuten1y,iSekunden1y)
EndProcedure

Procedure.i IsDigit(zString.s)
  If Asc(zString) >= Asc("0") And Asc(zString) <= Asc("9")
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure

Procedure.i StringInSekunden(zKoordinate.s)
  Protected zGrad.s,zMinute.s,zSekunde.s,zRest.s
  Protected iFaktor.i
  ReplaceString(zKoordinate," ","",#PB_String_InPlace)
  zGrad = StringField(zKoordinate,1,"°")
  zRest = StringField(zKoordinate,2,"°")
  zMinute = StringField(zRest,1,"'")
  zSekunde = StringField(zRest,2,"'")
 
  If Right(UCase(zSekunde),1) = "S" Or Right(UCase(zSekunde),1) = "W" : iFaktor = -1 : Else : iFaktor = 1 : EndIf
   
  While Len(zSekunde)>0 And IsDigit(Right(zSekunde,1))=#False
    zSekunde = Left(zSekunde,Len(zSekunde)-1)
  Wend
 
  ProcedureReturn InSekunden(Val(zGrad),Val(zMinute),Val(zSekunde))*iFaktor
EndProcedure

Procedure.s SekundenInString(iSekunden.i,iX.i)
  Protected zKoordinate.s = ""
  Protected iSek.i = iSekunden
 
  If iSek < 0 : iSek = -iSek : EndIf
 
  zKoordinate = Str(iSek/3600)+"°"+Str((iSek%3600)/60)+"'"+Str(iSek%60)+Chr(34)
 
  If iX
    If iSekunden<0
      zKoordinate + "W"
    Else
      zKoordinate + "E"
    EndIf
  Else
    If iSekunden<0
      zKoordinate + "S"
    Else
      zKoordinate + "N"
    EndIf
  EndIf 
  ProcedureReturn zKoordinate
EndProcedure

Procedure Main()
  Protected zFileKarte.s,zKoordinaten.s,zKoordinateVon.s,zKoordinateBis.s
  Protected iImageID.i=0,iEvent.i,iX,iY,iXvon.i,iYvon.i,iXbis.i,iYbis.i
  Protected dNullX.Double,dNullY.Double,dFakX.Double,dFakY.Double
 
  zFileKarte=OpenFileRequester("Karte","D:\Temp\Karte.png","Bilddateien | *.png;*.jpg",1)
 
  If FileSize(zFileKarte)>=0
    UsePNGImageDecoder()
    UseJPEGImageDecoder()
    If LoadImage(#IMAGE_1,zFileKarte)
      iImageID = ImageID(#IMAGE_1)
    EndIf
  EndIf
 
  If iImageID = 0
    MessageRequester("Hinweis","Karte nicht ladbar")
    End
  EndIf
 
  If OpenWindow(#MAIN_WINDOW,0,0,1200,1000,"Karte",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
    ImageGadget(#IMAGE_GADGET,10,10,ImageWidth(#IMAGE_1),ImageHeight(#IMAGE_1),iImageID,#PB_Image_Border)
    TextGadget(#TEXT_GADGET_KOORDINATEN_EINGABE,10, GadgetY(#IMAGE_GADGET)+GadgetHeight(#IMAGE_GADGET)+10,100,15,"Koordinateneingabe")
    StringGadget(#STRING_GADGET_VON,GadgetX(#TEXT_GADGET_KOORDINATEN_EINGABE)+GadgetWidth(#TEXT_GADGET_KOORDINATEN_EINGABE), GadgetY(#TEXT_GADGET_KOORDINATEN_EINGABE),200,20,"52°31'0"+Chr(34)+"N:13°24'0"+Chr(34)+"E")
    StringGadget(#STRING_GADGET_BIS,GadgetX(#STRING_GADGET_VON)+GadgetWidth(#STRING_GADGET_VON)+10, GadgetY(#STRING_GADGET_VON),200,20,"48°51'0"+Chr(34)+"N:2°21'0"+Chr(34)+"E")
    ButtonGadget(#BUTTON_ZEICHNEN,GadgetX(#STRING_GADGET_BIS)+GadgetWidth(#STRING_GADGET_BIS)+10, GadgetY(#STRING_GADGET_BIS),50,20,"Zeichnen")
    TextGadget(#TEXT_GADGET_KOORDINATEN_ANZEIGE,10, GadgetY(#TEXT_GADGET_KOORDINATEN_EINGABE)+GadgetHeight(#TEXT_GADGET_KOORDINATEN_EINGABE)+10,200,15,"")   
   
    Init(@dFakX,@dFakY,@dNullX,@dNullY)
   
    Repeat
      iEvent = WaitWindowEvent()
     
      iX = WindowMouseX(#MAIN_WINDOW) - GadgetX(#IMAGE_GADGET)
      iY = WindowMouseY(#MAIN_WINDOW) - GadgetY(#IMAGE_GADGET)
     
      If iX > 0 And iX < GadgetWidth(#IMAGE_GADGET) And iY > 0 And iY < GadgetHeight(#IMAGE_GADGET)
        zKoordinaten = SekundenInString(Int(dNullX\d+iX*dFakX\d),#True)
        zKoordinaten + ":"
        zKoordinaten + SekundenInString(Int(dNullY\d+iY*dFakY\d),#False)
        SetGadgetText(#TEXT_GADGET_KOORDINATEN_ANZEIGE,zKoordinaten)
      EndIf
     
      Select iEvent
         
        Case #PB_Event_Gadget
          If EventGadget() = #BUTTON_ZEICHNEN
            zKoordinateVon = GetGadgetText(#STRING_GADGET_VON)
            zKoordinateBis = GetGadgetText(#STRING_GADGET_BIS)
            iXvon = StringInSekunden(StringField(zKoordinateVon,2,":"))
            iYvon = StringInSekunden(StringField(zKoordinateVon,1,":"))
            iXbis = StringInSekunden(StringField(zKoordinateBis,2,":"))
            iYbis = StringInSekunden(StringField(zKoordinateBis,1,":"))
           
            If (iXvon<>iXbis Or iYvon<>iYbis) And StartDrawing(ImageOutput(#IMAGE_GADGET))
              LineXY(Int((iXvon-dNullX\d)/dFakX\d), Int((iYvon-dNullY\d)/dFakY\d), Int((iXbis-dNullX\d)/dFakX\d), Int((iYbis-dNullY\d)/dFakY\d),RGB(255,0,0))
              StopDrawing()
              SetGadgetState(#IMAGE_GADGET,ImageID(#IMAGE_1))
            EndIf
           
          EndIf
      EndSelect     
    Until iEvent = #PB_Event_CloseWindow
   
  EndIf
EndProcedure

Main()


Das Fenster habe ich so groß gemacht, weil ich es auch mal mit einem Mercator-Bild versucht habe.

__________________________________________________
Leerzeichen im Code hinzugefügt
14.09.2016
RSBasic

_________________
Win8 32Bit / PB 5.10 / PB 5.20


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fragen/Hilfe um die Landkarte .............
BeitragVerfasst: 14.09.2016 14:38 
Offline

Registriert: 20.02.2010 20:10
DANKESCHOEN!!!

die naechsten Tage sind 'gerettet' jetzt gehts ans 'umbauen'...........

 
 
 

_________________
vlG Charly / PB 5.42 x86


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye