Einzelnen Beitrag anzeigen

BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#1

[Android] Maps Marker ressource schonend laden/verwalten??

  Alt 30. Sep 2016, 10:23
Ich verwende eine Tmaps Karte und lade Marker hinzu aus einer Datenbank.
Derzeit bin ich bei etwa 300 Markern und merke schon wie die App in die Knie geht, also ruckelt... es dauert immer länger bis die Marker geladen sind je mehr es sind. Der normale betrieb der App ist kein Problem aber das Laden macht Probleme.
Wende ich dann einen Filter an, macht sich das richtig bemerkbar.

Ich habe eine ähnliche App aus dem Markt und dort kann man viele hundert Marker einladen ohne das sich das irgendwie bemerkbar macht.

Habt ihr ein paar Tipps was ich tun kannn damit das bei meiner App auch funktioniert?

Hier mal meine Prozedur um die Datenbank zu lesen:
Code:
// Datenbank lesen
procedure TTabbedwithNavigationForm.read_database;
var
  lat, lon : String;
  Position: TMapCoordinate;
begin
  sqlquery1.SQL.Clear;
  SQLQuery1.SQL.Text := 'SELECT * FROM p_marker ORDER BY Min';
  SQLQuery1.Active := true;
  SQLQuery1.First;
  while not SQLQuery1.Eof do begin
    if not SQLQuery1.IsEmpty then begin
      lat := sqlquery1.FieldByName('Lat').Asstring;
      lon := sqlquery1.FieldByName('Lon').Asstring;
      lat := stringreplace(lat,'.',',',[rfReplaceAll]);
      lon := stringreplace(lon,'.',',',[rfReplaceAll]);
      position.Latitude := strtofloat(lat);
      position.Longitude:= strtofloat(lon);

      maxtime := sqlquery1.FieldByName('Min').AsInteger +20;
       if maxtime >60  then
         maxtime := maxtime -60;

      mapview1.BeginUpdate;
      MyMarker := TMapMarkerDescriptor.Create(Position, sqlquery1.FieldByName('Name').Asstring+' :'+format('%.2d',[sqlquery1.FieldByName('Min').Asinteger])+'-'+format('%.2d',[maxtime]));
        MyMarker.Draggable := False;

      if sqlquery1.FieldByName('Type').AsString ='bl' then
          MyMarker.Icon := Image1.Bitmap;
        if sqlquery1.FieldByName('Type').AsString ='rd' then
          MyMarker.Icon := Image2.Bitmap;
        if sqlquery1.FieldByName('Type').AsString ='blu' then
          MyMarker.Icon := Image3.Bitmap;
        if sqlquery1.FieldByName('Type').AsString ='ye' then
          MyMarker.Icon := Image4.Bitmap;
        MyMarker.Visible :=True;
        Fmarkers.Add(MapView1.AddMarker(MyMarker));
        sqlquery1.Next;
    end;
  end;
    mapview1.EndUpdate;
end;
mapview.beginupdate bringt leider nicht den gewünschten erfolg ähnlich bei grid's .
  Mit Zitat antworten Zitat