![]() |
[Android] Maps Marker ressource schonend laden/verwalten??
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:
mapview.beginupdate bringt leider nicht den gewünschten erfolg ähnlich bei grid's .
// 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; |
AW: [Android] Maps Marker ressource schonend laden/verwalten??
Lade die Marker Daten erstmal im Thread...
Werden den alle Marker auch angezeigt oder ist ggf. die aktuelle Zoomstufe so, dass 200 Marker nicht in view sind? Zeige erst die an, die in view und dann nach und nach die anderen setzen. Somit hast Du einen schnelle Reaktion für den User. Mavarik |
AW: [Android] Maps Marker ressource schonend laden/verwalten??
Das mit dem Thread kann ich mal versuchen. Danke.
Derzeit werden alle Marker geladen und auch angezeigt. Die Zoom-Stufe ist so gesetzt das die meisten auch im View sind. Zitat:
Ich müsste alle Marker laden und dann innerhalb einer If Schleife abfragen ob der betreffende Marker in View ist. Wenn ja anzeigen, wenn nein dann nicht. Oder? Ist das dann wirklich schneller? Laden und dann noch die Schleife? Mit anzeigen ist wahrscheinlich Visible gemeint.... |
AW: [Android] Maps Marker ressource schonend laden/verwalten??
Ich kanns mir nicht verkneifen:
![]() |
AW: [Android] Maps Marker ressource schonend laden/verwalten??
Zitat:
Delphi-Quellcode:
300 Marker aus einer SQLite Datenbank laden wirst Du kaum merken...
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; und ein
Delphi-Quellcode:
Kostet "garnix"..
for i:=0 to High(MarkerArray) do // Edit
begin if MarkerInView(MarkerArray[i]) then ShowMarker(I) else ShowMarkerQueued(I); end; |
AW: [Android] Maps Marker ressource schonend laden/verwalten??
Zitat:
|
AW: [Android] Maps Marker ressource schonend laden/verwalten??
Zitat:
Und das Format würde ich auch eliminieren. IMHO ist Format grottenlahm... Frank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz