LudekV napsal/a:
Nedá, mapa se snaží načíst vše co odpovídá filtru a je na zobrazeném území, limit 50 je tam natvrdo jako snad rozumná hranice. U menších měřítek se ti načte těch 50, u větších obvykle méně.
Ahoj,
performance hit bych videl mozna v tom ze se pravdepodobne z databaze nacte vsechno co odpovida filtru a velikosti zobrazovaneho uzemi a pak se z toho asi zobrazi 50 puntiku. Bez zdrojaku tezko rict jakej je tam SQL statement, takze budu jenom hadat.
Z maleho uzemi se tech 50 zobrazi jako nic, ale mapu cech mi to na PDA nacita pul hodiny a pak to stejne spadne.
Jako mozna reseni bych videl:
1) Pouzit u SQL dotazu klicove slovo LIMIT
Misto
SELECT * FROM geocache WHERE
(x > X_JIH AND x < X_SEVER ) AND (y > Y_ZAPAD AND y < Y_VYCHOD)
pouzit neco jako
SELECT * FROM geocache WHERE
(x > X_JIH AND x < X_SEVER ) AND (y > Y_ZAPAD AND y < Y_VYCHOD)
LIMIT 50
2) Je mozne ze LIMIT uz Ludku pouzivate a je mozne ze vykonove je to stejne problem. Je mozne ze sqlite stejne interne nacita cely rozsah databaze.
Pokud je to tak tak bych doporucil pro plochy vetsi nez 1km urcit nejprve iterativne z jak velkeho uzemi je potreba vybrat 50 cache a pak je teprve vybrat.
Pseudo code neco jako:
//Init promennych
maxcount=50
xmaxscale=abs(X_SEVER - X_JIH)
ymaxscale=abs(Y_VYCHOD - Y_ZAPAD)
xscale=0.01 /* priblizne jeden kilometr */
yscale=0.01*cos(X_SEVER) /* priblizne jeden kilometr */
count=0
//Dokud jsem v zadanem meritku a nenalezl jsem dostatek bodu
while ( (xscale <= xmaxscale) and count < maxcount) {
//Zdvojnasob plochu
xscale=xscale*2
yscale=yscale*2
//zkus kolik je nalezenych bodu v tomto vyseku
count = "select count(key) FROM geocache WHERE (x > X_JIH AND x < X_JIH + xscale ) AND (y > Y_ZAPAD AND y < Y_ZAPAD + yscale )
}
//nacti nalezene body
SELECT * FROM geocache WHERE
(x > X_JIH AND x < X_JIH + xscale ) AND (y > Y_ZAPAD AND y < Y_ZAPAD + yscale) LIMIT maxcount
Snad by to mohlo pomoci pri zobrazovani vetsich uzemi.
Dekuji
Mik