08.11.2008, 11:09
EddiVonDerAlm Wrote:Die Anzeige verwendet jetzt je nach Zoomlevel erheblich weniger Routenpunkte. Damit wird alles etwas schneller. Auch ein Bug beim Markieren habe ich beseitigt.
Hallo Eddi/Malte,
ich bin begeistert!
Vielen Dank für den Patch, Du löst damit ein paar Probleme, die ich schon länger vor mir herschiebe:
- das Zeichnen der Karte war viel zu langsam
- beim Löschen hängt sich das Zeichnen auf
- der Douglas Peucker Algorithmus ist viel besser als meine hemdsärmeligen Varianten
EddiVonDerAlm Wrote:Falls Du nicht alles von mir übernehmen willst, solltest Du wenigstens den Teil beim Löschen der Punkte übernehmen. Das Problem dort besteht darin, dass ein Script nicht mehr ausgeführt wird. Bei mir reproduzierbar: In einer großen Punkteliste (ca. 10.000 Punkte) 10 Einträge markieren, dann noch einen dazu und es wird auf der Karte nichts mehr aktualisiert. Programm läßt sich dann nur noch abschießen. Behoben wird das Problem, wenn man erst das Script mit dem Löschen der Punkte ausführt und dann das neu Setzen.
Ich habe alles übernommen, nicht 1:1 sondern in meinem Codestyle und Namen, die m.E. besser zum restlichen Code passen. Synce mal die Revisionen 877 bis 880.
Und ich habe den Filterdialog erweitert, damit man mit dem Douglas Peucker Algorithmus filtern kann. Angefangen hattest Du das ja in BaseRoute.
Die aktuelle Vorabversion 1.22.3 enthält Deinen Verbesserungspatch und den erweiterten Filterdialog.
Was mir noch nicht gefällt ist MapView#filterVisiblePositions()
private List<BaseNavigationPosition> filterVisiblePositions(List<BaseNavigationPosition> positions) {
BaseNavigationPosition northEast = getMapNorthEast();
BaseNavigationPosition southWest = getMapSouthWest();
// TODO what does that do?
double width = northEast.getLongitude() - southWest.getLongitude();
double height = southWest.getLatitude() - northEast.getLatitude();
northEast.setLongitude(northEast.getLongitude() + width);
northEast.setLatitude(northEast.getLatitude() - height);
southWest.setLongitude(southWest.getLongitude() - width);
southWest.setLatitude(southWest.getLatitude() + height);
List<BaseNavigationPosition> result = new ArrayList<BaseNavigationPosition>();
result.add(positions.get(0));
for (int i = 1; i < positions.size(); i++) {
BaseNavigationPosition position = positions.get(i);
if (Calculation.containsPosition(northEast, southWest, position)) {
result.add(position);
}
}
return result;
}
Was bezweckt die Berechnung von width und height sowie das Addieren und Subtrahieren?
--
Christian
Christian
