LazMapViewer Karte zentrieren (gelöst)
- h-elsner
- Lazarusforum e. V.
- Beiträge: 318
- Registriert: Di 24. Jul 2012, 15:42
- OS, Lazarus, FPC: LINUX Mint21.1, Win10, Lazarus 4.3, FPC3.2.3
- CPU-Target: X86-64; arm 32bit
- Wohnort: Illertissen
- Kontaktdaten:
LazMapViewer Karte zentrieren (gelöst)
Ich mache meine ersten Versuche mit LazMapViewer. Ich habe eine Komponente MapView auf das Formular gelegt, einen Provider ausgewählt und die Karte wird dargestellt. Ich starte mit Zoomfaktor 10.
Zum Zentrieren der Karte habe ich einen TRealPoint, wo nur lat und lon gesetzt sind.
Diesen weise ich MapView.Center zu. Soweit so gut. Bis Zoomstufe10 geht das auch, aber bei höheren Zoomstufen liegt das Zentrum irgendwo, aber nicht auf der Koordinate. Es sieht so aus, als ob das Kartenzentrum nach Süd-Westen weggewandert ist und der eigentliche Punkt gar nicht mehr auf der Karte ist, z.B. bei Zoomstufe 11 zwar noch auf der Karte aber nahe am oberen Rand.
Frage ist das so (vielleicht wegen der Tiles)oder gibt es einen Trick, auch bei höheren Zoomstufen den die eigentliche Position noch ins Bild zu bekommen?
Zum Zentrieren der Karte habe ich einen TRealPoint, wo nur lat und lon gesetzt sind.
Diesen weise ich MapView.Center zu. Soweit so gut. Bis Zoomstufe10 geht das auch, aber bei höheren Zoomstufen liegt das Zentrum irgendwo, aber nicht auf der Koordinate. Es sieht so aus, als ob das Kartenzentrum nach Süd-Westen weggewandert ist und der eigentliche Punkt gar nicht mehr auf der Karte ist, z.B. bei Zoomstufe 11 zwar noch auf der Karte aber nahe am oberen Rand.
Frage ist das so (vielleicht wegen der Tiles)oder gibt es einen Trick, auch bei höheren Zoomstufen den die eigentliche Position noch ins Bild zu bekommen?
Zuletzt geändert von h-elsner am Mi 6. Mai 2026, 10:52, insgesamt 1-mal geändert.
Re: LazMapViewer Karte zentrieren
Zoomst du mit dem Mausrad? Dann musst du ZoomToCursor auf false einstellen, andernfalls ist der Zoom-Fixpunkt die Position des Mauscursors.
In dem beigefügten Test bleibt bei allen Zoom-Einstellungen immer das Brandenburger Tor in Berlin in der Mitte der Karte.
In dem beigefügten Test bleibt bei allen Zoom-Einstellungen immer das Brandenburger Tor in Berlin in der Mitte der Karte.
- Dateianhänge
-
center.zip- (2.5 KiB) 6-mal heruntergeladen
- h-elsner
- Lazarusforum e. V.
- Beiträge: 318
- Registriert: Di 24. Jul 2012, 15:42
- OS, Lazarus, FPC: LINUX Mint21.1, Win10, Lazarus 4.3, FPC3.2.3
- CPU-Target: X86-64; arm 32bit
- Wohnort: Illertissen
- Kontaktdaten:
Re: LazMapViewer Karte zentrieren
Danke vielmals, das schaue ich mir heute an.
Ich mache eigentlich beides:
Ich lese aus einem GPS-Modul die Daten im NMEA-Format aus.
Beim Start des Programms setzte ich die Zoomstufe auf 10, übergebe eine Default-Position als TRealPoint an die Karte. Der Punkt liegt da schon nicht so richtig in der Mitte, ist aber wenigstens darauf.
Wenn ich das GPS Modul connecte, dann soll die erste erkannte Koordinate die Karte zentrieren. Von da aus sollen (später) die Punkte jede Sekunde eingetragen werden, aber soweit bin ich noch nicht. Vor dem Connecten verschiebe ich (zum Test) die Karte mit der Maus irgendwo hin und änders die Zoomstufe. Wenn ich dann wieder connect drücke soll wieder zentriert werden, aber da geht es nicht mehr.
Das Projekt ist hier: https://codeberg.org/h-elsner/NMEA_reader
Ich mache eigentlich beides:
Ich lese aus einem GPS-Modul die Daten im NMEA-Format aus.
Beim Start des Programms setzte ich die Zoomstufe auf 10, übergebe eine Default-Position als TRealPoint an die Karte. Der Punkt liegt da schon nicht so richtig in der Mitte, ist aber wenigstens darauf.
Wenn ich das GPS Modul connecte, dann soll die erste erkannte Koordinate die Karte zentrieren. Von da aus sollen (später) die Punkte jede Sekunde eingetragen werden, aber soweit bin ich noch nicht. Vor dem Connecten verschiebe ich (zum Test) die Karte mit der Maus irgendwo hin und änders die Zoomstufe. Wenn ich dann wieder connect drücke soll wieder zentriert werden, aber da geht es nicht mehr.
Das Projekt ist hier: https://codeberg.org/h-elsner/NMEA_reader
- h-elsner
- Lazarusforum e. V.
- Beiträge: 318
- Registriert: Di 24. Jul 2012, 15:42
- OS, Lazarus, FPC: LINUX Mint21.1, Win10, Lazarus 4.3, FPC3.2.3
- CPU-Target: X86-64; arm 32bit
- Wohnort: Illertissen
- Kontaktdaten:
Re: LazMapViewer Karte zentrieren
Ich hatte das viel zu kompliziert gemacht.
Das Konstrukt war mir nicht klar:
Ich hatte es umständlich gemacht:
Irgendwie ging das nicht richtig, kann ich aber jetzt auch nicht mehr nachstellen, komisch.
Aber hauptsächlich funktioniert das jetzt alles und es sieht eleganter aus. Danke.
Edit:
Ach, kann sein, dass ZoomToCursor:=true, das anfängliche Problem war.
Das Konstrukt war mir nicht klar:
Code: Alles auswählen
MapView1.Center := RealPoint(52.516275, 13.377704); Code: Alles auswählen
var
point: TRealPoint;
...
point.lat:=52.516275;
point.lon:=13.377704;
....
MapView.Center.lat:=point.lat:
MapView.Center.lon:=point.lon:
Aber hauptsächlich funktioniert das jetzt alles und es sieht eleganter aus. Danke.
Edit:
Ach, kann sein, dass ZoomToCursor:=true, das anfängliche Problem war.
-
sstvmaster
- Beiträge: 589
- Registriert: Sa 22. Okt 2016, 23:12
- OS, Lazarus, FPC: W10, L 4.6
- CPU-Target: 32+64bit
- Wohnort: Dresden
Re: LazMapViewer Karte zentrieren (gelöst)
Hallo,
habe es auch mal probiert.
Wenn ich mich mit meinem GPS Modul verbinde und dann auf Map klicke, wird die Karte südwestlich von Afrika positioniert.
Habe dann mal geschaut warum. In der NEMA_reader.pas in Zeile 525,526 wurde für position.Lat und Lon nur "0" (null) zurück gegeben.
Habe dann in der NEMA_suff.pas die function CoordinateToFloat folgend umgebaut:
Jetzt springt die Karte auch auf meine Coordinaten.
Grüße Maik
habe es auch mal probiert.
Wenn ich mich mit meinem GPS Modul verbinde und dann auf Map klicke, wird die Karte südwestlich von Afrika positioniert.
Habe dann mal geschaut warum. In der NEMA_reader.pas in Zeile 525,526 wurde für position.Lat und Lon nur "0" (null) zurück gegeben.
Habe dann in der NEMA_suff.pas die function CoordinateToFloat folgend umgebaut:
Code: Alles auswählen
function CoordinateToFloat(const c, d: shortstring): double;
var
FCoordinate: double;
FCode: integer;
begin
val(c, FCoordinate, FCode);
if FCode=0 then begin
result:=FCoordinate/100;
//result:=StrToFloatDef(c, 0)/100;
if (d='S') or (d='W') then
result:=-result;
end;
end;
Grüße Maik
LG Maik
Windows 10,
- Lazarus 4.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 4.99 (trunk) + fpc 3.3.1 (main/trunk)
Windows 10,
- Lazarus 4.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 4.99 (trunk) + fpc 3.3.1 (main/trunk)
-
sstvmaster
- Beiträge: 589
- Registriert: Sa 22. Okt 2016, 23:12
- OS, Lazarus, FPC: W10, L 4.6
- CPU-Target: 32+64bit
- Wohnort: Dresden
Re: LazMapViewer Karte zentrieren (gelöst)
Hi,
habe gerade noch mit der neuen Version vom Git probiert.
Ohne aktiven GPS, startet die Map mit Illertissen. Mit aktiven GPS wird Lat und Lon wieder zu 0°.
Ich bin hier unter Windows mit Laz Stable, als 32bit.
Außerdem fehlt in der "nmea_reader_main.pas" die Unit DateUtils, deshalb wird auch "UniversalTimeToLocal" nicht gefunden.
habe gerade noch mit der neuen Version vom Git probiert.
Ohne aktiven GPS, startet die Map mit Illertissen. Mit aktiven GPS wird Lat und Lon wieder zu 0°.
Ich bin hier unter Windows mit Laz Stable, als 32bit.
Außerdem fehlt in der "nmea_reader_main.pas" die Unit DateUtils, deshalb wird auch "UniversalTimeToLocal" nicht gefunden.
LG Maik
Windows 10,
- Lazarus 4.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 4.99 (trunk) + fpc 3.3.1 (main/trunk)
Windows 10,
- Lazarus 4.6 (stable) + fpc 3.2.2 (stable)
- Lazarus 4.99 (trunk) + fpc 3.3.1 (main/trunk)