gb.map

Alle Fragen zur Programmierung, die nicht in die speziellen Themen passen
Antworten
reinhard-adam
Foriker
Beiträge: 20
Registriert: Fr 18. Sep 2020, 16:31
Wohnort: Marksuhl
Kontaktdaten:

gb.map

Beitrag von reinhard-adam » Di 9. Jul 2024, 17:57

Hallo Leute, ich habe folgendes Problem:
In meinem Navigationsprogramm, was eigentlich tadellos funktioniert, tritt ein Problem mit dem zentrieren der Karte auf.
Ist das gb.map Steuerelement quadratisch ist alles ok.
mit gambas code
MapView1.Map.Center = MapPoint(50.914249, 10.207549)  'Karte auf Mittelpunkt
MapView1.Refresh 
bekomme ich den Punkt mittig.
Wenn ich aber das Steuerelement verbreitere, also rechteckig mache, wird die Position viel zu tief gezeigt.
Mit einem Faktor der das Seitenverhältniss berücksichtigt geht es nicht wegen Zoom.

Hat jemand eine Ide?

vuott
Foriker
Beiträge: 245
Registriert: Fr 16. Jan 2015, 01:27
Wohnort: Europäische Union - Italia
Kontaktdaten:

Re: gb.map

Beitrag von vuott » Di 9. Jul 2024, 19:39

:? Seltsam.
Ich habe versucht, die 'MapView' seitlich oder nach unten zu vergrößern, aber das von Ihnen beschriebene Problem ist nicht aufgetreten.
Europaeus sum

reinhard-adam
Foriker
Beiträge: 20
Registriert: Fr 18. Sep 2020, 16:31
Wohnort: Marksuhl
Kontaktdaten:

Re: gb.map

Beitrag von reinhard-adam » Mi 10. Jul 2024, 10:58

Ich zweifle schon an mir.
Es ist aber so.
Die in map.center angegebenen Koordinaten sind nicht im Mittelpunkt vom Steuerelements bei ungleichmäßiger Höhe und Breite.
Frage ich die Breite und Länge des Center ab, so sind es abweichende Koordinaten. ??????????

reinhard-adam
Foriker
Beiträge: 20
Registriert: Fr 18. Sep 2020, 16:31
Wohnort: Marksuhl
Kontaktdaten:

Re: gb.map

Beitrag von reinhard-adam » Mi 10. Jul 2024, 12:05

Ich habe hier mein Testprogramm zu diesem Effekt, bitte probiere es nochmal. Die Form ist als Anlage.

gambas code
' Gambas class file


Public Sub Button1_Click()


  MapView1.Map.AddTile("OpenStreetMap", "http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png").Copyright = " ©OpenStreetMap "
  MapView1.Map.Zoom = 5
  
  MapView1.Map.Center = MapPoint(50.4, 9.7)  'Karte auf Mitte Deutschland
  
  Dim anz As Integer = 1
  
  MapView1.Map.AddShape("punkt" & anz)   'Marker auf die Koordinaten, die im Mittelpunkt stehen sollen
  MapView1.Map["punkt" & anz].AddPoint("punkt", MapPoint(50.914249, 10.207549))

End

Public Sub Button2_Click()
  'Karte auf die angegebenen Koordinaten zentrieren
  
  MapView1.Map.Center = MapPoint(50.914249, 10.207549)  'Karte auf Mittelpunkt
  
  MapView1.Refresh  
  MapView1.Map.Refresh
  End

Public Sub Button3_Click()
  'Koordinaten des Center abfragen
    TextBox1.text = MapView1.Map.center.Lat & " " & MapView1.Map.Center.Lon
End

Public Sub MapView1_MouseDown()
  ' Koordinaten auf Maus Doppelklick
    Dim pt As New Point(Mouse.X, Mouse.Y)
    Dim mp As MapPoint = MapView1.Map.PixelToMapPointRel(pt)
     
    TextBox2.text = Format(mp.Lat, "0.000000") 
    TextBox3.text = Format(mp.Lon, "0.000000")


End

Form.jpg
Form.jpg (56.93 KiB) 263 mal betrachtet

Benutzeravatar
tionov
Site Admin
Beiträge: 518
Registriert: So 18. Mai 2014, 23:40
Kontaktdaten:

Re: gb.map

Beitrag von tionov » Mi 10. Jul 2024, 12:50

Du kannst in der Gambas IDE mit Projekt->Quellarchiv ein projekt.tar.gz erstellen und die Datei hier an ein Posting anhängen.
Alles Gute,

tionov

reinhard-adam
Foriker
Beiträge: 20
Registriert: Fr 18. Sep 2020, 16:31
Wohnort: Marksuhl
Kontaktdaten:

Re: gb.map

Beitrag von reinhard-adam » Mi 10. Jul 2024, 13:47

Der Marker der die zu zentrierende Position darstellt wird am unteren Rand angezeigt.
neu-0.0.1.tar.gz
(11.94 KiB) 9-mal heruntergeladen

vuott
Foriker
Beiträge: 245
Registriert: Fr 16. Jan 2015, 01:27
Wohnort: Europäische Union - Italia
Kontaktdaten:

Re: gb.map

Beitrag von vuott » Mi 10. Jul 2024, 19:50

Uhmmmm... :? klingt aber konsequent.
In der Routine "Button1_Click()" wird das Zentrum der "MapView" durch die Koordinaten "MapPoint(50.4, 9.7)" dargestellt.
In der Routine "Button2_Click()" wird das Zentrum der "MapView" durch die Koordinaten "MapPoint(50.914249, 10.207549)" dargestellt.

Vielleicht fällt es besser auf mit dem folgenden Code:
gambas code
Public Sub Button1_Click()

  With MapView1
    .Map.AddTile("OpenStreetMap", "http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png").Copyright = " ©OpenStreetMap "
    .Map.Zoom = 5
 'Karte auf Mitte Deutschland
    .Map.Center = MapPoint(50.4, 9.7)
    .Map.AddShape("punctum").AddPoint("punctum", MapPoint(50.4, 9.7), 0, Picture["icon:/22/marker"].Image)

 'Marker auf die Koordinaten, die im Mittelpunkt stehen sollen
    .Map.AddShape("punkt")
    .Map["punkt"].AddPoint("punkt", MapPoint(50.914249, 10.207549))
  End With

End

Public Sub Button2_Click()
 
  With MapView1
    .Map.Center = MapPoint(50.914249, 10.207549)  'Karte auf Mittelpunkt
    .Refresh
  End With  

End
Wenn Sie mit "Button1" klicken, bemerken Sie, dass der schwarze Marker die Mitte der "MapView" einnimmt.
Wenn Sie die Spitze eines Bleistifts auf diesen schwarzen Marker legen und dann mit "Button2" klicken, beachten Sie, dass die Mitte des orangefarbenen Markers die Mitte des "MpaView" einnimmt und den schwarzen ersetzt.

:? ...oder vielleicht habe ich das Problem falsch verstanden, das du wegen einer schlechten Übersetzung vom Deutschen ins Italienische hast.
Europaeus sum

reinhard-adam
Foriker
Beiträge: 20
Registriert: Fr 18. Sep 2020, 16:31
Wohnort: Marksuhl
Kontaktdaten:

Re: gb.map

Beitrag von reinhard-adam » Do 11. Jul 2024, 10:47

Du hast das Problem nicht richtig erkannt.
Die Marker werden richtig dargestellt nor nicht in der Mitte von MapView wenn MapView nicht quadratisch ist.
Ich habe ein Bild angefügt, der rote Marker soll im Centrum stehen.
form1.jpg
form1.jpg (45.25 KiB) 226 mal betrachtet

vuott
Foriker
Beiträge: 245
Registriert: Fr 16. Jan 2015, 01:27
Wohnort: Europäische Union - Italia
Kontaktdaten:

Re: gb.map

Beitrag von vuott » Do 11. Jul 2024, 14:19

reinhard-adam hat geschrieben:
Do 11. Jul 2024, 10:47
Die Marker werden richtig dargestellt nor nicht in der Mitte von MapView wenn MapView nicht quadratisch ist.
Hello,
Ich habe den Test sowohl mit einer quadratischen 'MapView' als auch mit einer rechteckigen 'MapView' durchgeführt; für mich funktioniert das gut: In beiden Fällen befinden sich die Marker in der Mitte der MapView.

Ich weiß leider :( nicht, warum dieses Problem bei Ihnen auftritt.
Europaeus sum

reinhard-adam
Foriker
Beiträge: 20
Registriert: Fr 18. Sep 2020, 16:31
Wohnort: Marksuhl
Kontaktdaten:

Re: gb.map

Beitrag von reinhard-adam » Fr 12. Jul 2024, 10:06

Danke für die Hilfe, ich muss den Fehler weiter suchen.
Gruß Reinhard

vuott
Foriker
Beiträge: 245
Registriert: Fr 16. Jan 2015, 01:27
Wohnort: Europäische Union - Italia
Kontaktdaten:

Re: gb.map

Beitrag von vuott » Fr 12. Jul 2024, 13:13

reinhard-adam hat geschrieben:
Fr 12. Jul 2024, 10:06
ich muss den Fehler weiter suchen.
...Ich denke, 'gb.map' ist nicht die Ursache.
Europaeus sum

reinhard-adam
Foriker
Beiträge: 20
Registriert: Fr 18. Sep 2020, 16:31
Wohnort: Marksuhl
Kontaktdaten:

Re: gb.map

Beitrag von reinhard-adam » Sa 13. Jul 2024, 14:28

Ich habe keinen anderen Fehler gefunden, Problem ist immer noch.
Ich habe eine neue Funktion geschrieben, wo die zu zentrierende Position korrigiert wird.
Jetzt funktioniert es super.
gambas code
Function zentrieren_neu(brei As Float, lang As Float)  'Funktion zum zentrieren der Position da Befehl Center nicht richtig geht

 
   MapView1.Map.Center = MapPoint(brei, lang)  'Mittelpunkt setzen den falschen
    
    Dim pt As New Point(MapView1.Width / 2, MapView1.Height / 2)  'Größe mapview Steuerelement in Mitte
    Dim mp As MapPoint = MapView1.Map.PixelToMapPointRel(pt)      'Koordinaten Mittelpunkt
    Dim zentbr As Float = MapView1.Map.PixelToMapPointRel(pt).Lat   'Breite im Mittelpunkt
    Dim zentla As Float = MapView1.Map.PixelToMapPointRel(pt).Lon    'Länge im Mittelpunkt
    Dim difbr As Float    'Differenz Breite
    Dim difla As Float    'Differenz Länge
   
    difbr = brei - zentbr   'Abweichung Breite
    difla = lang - zentla   'Abweichung Länge

    MapView1.Map.Center = MapPoint((brei + difbr), (lang + difla)) 'Mittelpunkt setzen den richtigen
    
    MapView1.Refresh
    MapView1.Map.Refresh     
End



Antworten

Wer ist online?

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