... the user friendly GPS tool


Thread Rating:
  • 1 Vote(s) - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Anzeige-Problem (Herunterskalierung)
#2
(05.09.2012, 20:45)lundefugl Wrote: Was ich sagen kann ist, dass der Fehler schon immer drin war. Ich hab das Ganze bis auf die V2.5 vor einem Jahr zurückverfolgt, als wir schon mal solche Effekte gesucht hatten. Vor der damaligen Optimierung hat es komplett nicht funktioniert und danach war dieser Effekt schon drin.

Hallo Thomas,

ich habe immer noch ein Archiv von Dir auf dem Desktop liegen, bin jetzt aber nicht dazu gekommen, zu analysieren, ob sich da etwas verbessern läßt.

596039 Positionen, 148 MByte Dateigröße ist auch nicht alltäglich. Das Laden erfordert mehr als 512 MByte Heap für die Java VM und dauert 2 Minuten. Alleine der Douglas-Peucker-Algorithmus rechnet 8 Sekunden, um die auf der Karte dargestellten Datenmenge bei Zoomlevel 3 auf 78 Positionen zu reduzieren, die dann ans Google Maps API übergeben werden.

Bei Zoomlevel 14 und der Hafeneinfahrt von Trelleborg kann man sehen, wie in 4 Stufen die Anzahl der Positionen radikal reduziert werden, damit Dir der Internet Explorer nicht abstürzt:

Code:
Sep 6, 2012 8:45:25 AM slash.navigation.converter.gui.mapview.BaseMapView filterPositionsWithoutCoordinates
INFO: Filtered positions without coordinates to reduce 596039 positions to 596039 in 41 milliseconds

Sep 6, 2012 8:45:25 AM slash.navigation.converter.gui.mapview.BaseMapView filterEveryNthPosition
INFO: Filtered every 11.920780th position to reduce 596039 positions to 50002 in 7 milliseconds

Sep 6, 2012 8:45:49 AM slash.navigation.converter.gui.mapview.BaseMapView filterSignificantPositions
INFO: Filtered significant positions to reduce 50002 positions to 26904 in 23686 milliseconds

Sep 6, 2012 8:46:17 AM slash.navigation.converter.gui.mapview.BaseMapView filterVisiblePositions
INFO: Filtered visible positions to reduce 26904 positions to 164 in 28121 milliseconds

Das könnte noch zu optimieren sein, damit besser passende 164 Positionen herauskommen oder vielleicht 200. Im Moment ist mir das nicht wichtig genug, um meine Zeit drauf zu verwenden. Magst Du vielleicht helfen?

BaseMapView#reducePositions ist ein guter Startpunkt:

Code:
private List<BaseNavigationPosition> reducePositions(List<BaseNavigationPosition> positions, int maximumPositionCount) {
        if (positions.size() < 2)
            return positions;

        if (positions.size() > 50000)
            positions = filterEveryNthPosition(positions, 50000);

        // determine significant positions for this zoom level
        positions = filterSignificantPositions(positions);

        // reduce the number of significant positions by a visibility heuristic
        if (positions.size() > maximumPositionCount) {
            positions = filterVisiblePositions(positions, 2.5, false);
            visibleNorthEast = northEast(positions);
            visibleSouthWest = southWest(positions);
            visibleNorthWest = asPosition(visibleSouthWest.getLongitude(), visibleNorthEast.getLatitude());
            visibleSouthEast = asPosition(visibleNorthEast.getLongitude(), visibleSouthWest.getLatitude());
        } else {
            visibleNorthEast = null;
            visibleSouthWest = null;
            visibleNorthWest = null;
            visibleSouthEast = null;
        }

        // reduce the number of visible positions by a JS-stability heuristic
        if (positions.size() > maximumPositionCount)
            positions = filterEveryNthPosition(positions, maximumPositionCount);

        return positions;
    }
--
Christian
Reply


Messages In This Thread
RE: Anzeige-Problem (Herunterskalierung) - by routeconverter - 06.09.2012, 07:56

Forum Jump:


Users browsing this thread: 3 Guest(s)