[gelöst] MapView und Images (Transparent)

Rund um die LCL und andere Komponenten
Antworten
Benutzeravatar
juelin
Lazarusforum e. V.
Beiträge: 342
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

[gelöst] MapView und Images (Transparent)

Beitrag von juelin »

Hallo,
ich weis gerade nicht weiter.
Ich habe ein Programm, indem ich eine Karte mit MapView anzeige
und als jpg-File speichere.
Das funktioniert auch und das File Map.jpg wird richtig erstellt. (siehe Anhang bild1)
Dazu habe ich noch zwei Images im MapView Image1 und Image2. (siehe Anhang bild3)
Nun lade ich das File iMap.jpg n Image1. Den Timer1 starte ich in Form7.FormActivate
und der Timer1 steht auf 1000ms.

Code: Alles auswählen

procedure TForm7.FormActivate(Sender: TObject);
begin
........
    knopf:=1;
    MapView1.Visible:=True;
    MapView1.MapProvider:='OpenStreetMap Standard';
    MapView1.Active:=True;
    MapView1.Zoom:=zoom;  // zoom = 13
    Mapview1.CenterOnArea(area);
    Timer1.Enabled:=True;
end;
          
procedure TForm7.Timer1Timer(Sender: TObject);
  var h1: integer;
begin
  Timer1.Enabled:=False;
  if FileExists(ExtractFilePath(ParamStr(0))+'Map.jpg') then
  begin
    DeleteFile(ExtractFilePath(ParamStr(0))+'Map.jpg');
  end;
  MapView1.SaveToFile(TJpegImage, ExtractFilePath(ParamStr(0))+'Map.jpg');
  Image1.Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+'Map.jpg');
  MapView1.Visible:=False;
  for h1:=1 to locatorindex do
  begin
    Kartenpunkt.Lat:=locatortab[h1].lat;
    Kartenpunkt.Lon:=locatortab[h1].lon;
    Punkt:=MapView1.LonLatToScreen(Kartenpunkt);
    Image2.Canvas.Pen.Color:=clRed;
    Image2.Canvas.Brush.Color:=clRed;
    Image2.Canvas.Ellipse(Punkt.X-10,Punkt.Y-10,Punkt.X+10,Punkt.Y+10);
    Image2.Canvas.Pen.Color:=clBlack;
  end;
end;

// Die Umschaltung von StringGrid aus Image erfolgt mit Button1.
procedure TForm7.Button1Click(Sender: TObject);
begin
  Label1.Caption:=UTF8Encode(#169)+'LINSOFT                                                 Q S O                                         Datum: '+FormatDateTime('DD.MM.YYYY',now);
  if (mtasts = 1) then
  begin
    Label2.Caption:='';
    if knopf = 1 then
    begin
      StringGrid1.Visible:=False;
      MapView1.Visible:=True;
      knopf:=2;
      Button1.Caption:='Anzeigen Daten';
    end else begin
      StringGrid1.Visible:=True;
      MapView1.Visible:=False;
      knopf:=1;
      Button1.Caption:='Anzeigen Karte';
    end;
  end;
end;
In Image2 zeichne ich drei Kreise. Image2 habe ich in den Eigenschaften auf Transparent gestellt.
Image2 liegt über dem Image1.
Leider wirkt sich das Transparent nicht aus. (siehe Anhang bild2)
Was mache ich falsch?
Hat Jemand eine Idee?
Danke und Gruß
Jürgen
Dateianhänge
bild3.jpg
(454.54 KiB) Noch nie heruntergeladen
bild2.jpg
(205.92 KiB) Noch nie heruntergeladen
bild1.jpg
(647.79 KiB) Noch nie heruntergeladen
Zuletzt geändert von juelin am Di 10. Mär 2026, 12:24, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 11226
Registriert: Mo 11. Sep 2006, 19:01

Re: MapView und Images (Transparent)

Beitrag von theo »

Warum malst du die Ellipsen nicht direkt auf das Kartenbild (Canvas)?
Das Bild würde ich ausserdem in einen Stream speichern. Das muss ja nicht auf die "Platte".

wp_xyz
Beiträge: 5395
Registriert: Fr 8. Apr 2011, 09:01

Re: MapView und Images (Transparent)

Beitrag von wp_xyz »

Ich habe das Gefühl, du willst hier das Rad neu erfinden, also etwas, was im MapViewer schon eingebaut ist. Schau dir doch einfach mal die Beschreibung im wiki an, da steht "alles" (ok... das meiste...): https://wiki.lazarus.freepascal.org/LazMapViewer

Hier Schritt für Schritt, wie man Markierungspunkte in die Map einfügt und ggfs selbst zeichnet:
  • MapView im Designmode selektieren
  • Den Button '...' neben der Eigenschaft "Layers" klicken, um den Layer-Editor zu öffnen. "Add" klicken, um eine neue Ebene hinzuzufügen
  • Im Objekt-Baum über dem Objektinspektor, auf "PointsOfInterest" rechts-klicken, nochmals "Add" um einen Markierungspunkt hinzuzufügen.
  • Den neuen Markierungspunkt im Objektbaum anwählen, und im Objektinspektor die Koordinaten des Punktes eintragen (Latitude, Longitude), sowie die Beschriftung (Caption). Wenn du im Formular eine ImageListe hast und diese mit der Eigenschaft POIImages der MapView verbunden hast, kannst du auch einen ImageIndex angegen für das Icon, das an diesem Punkt angezeigt werden soll. Roland hat für den Ordner "marker-images" eine Vielzahl von schönen Bildern zur Verfügung gestellt.
  • Alternativ zu einem vorgefertigten Icon, kann du auch die in deinem Post erwähnte Ellipse zeichnen. Nimm dafür das Event OnDrawPoint des Markierungspunktes. Zeichne nicht auf dem Canvas, sondern nimm den in der Parameterliste bereitgestellen Drawer, damit das alles auch dann funktioniert, falls du mit BGRABitmap zeichnen möchtest. Siehe dazu das beigefügte Mini-Projekt mit zwei Markierungspunkten.
Dateianhänge
ownerdrawn_markers.png
ownerdrawn_markers.png (380.89 KiB) 72 mal betrachtet
ownerdrawn_markers.zip
(2.38 KiB) 2-mal heruntergeladen

Benutzeravatar
juelin
Lazarusforum e. V.
Beiträge: 342
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: [gelöst] MapView und Images (Transparent)

Beitrag von juelin »

danke an Alle.
Habe inzwischen noch etwas selber experimentiert
und mein Problem gelöst.
Also nochmals Danke und Gruß
Jürgen

Antworten