Frage

Ich verwende die Funktion von Pixels () in Osmdroid (3.05) wie SO:

public boolean onScroll(ScrollEvent e) {

    //get the scroll's destination
    GeoPoint g = (GeoPoint) e.getSource().getProjection().fromPixels(e.getX(), e.getY());
    Toast.makeText(e.getSource().getContext(), "in e6: " +
    g.getLongitudeE6() + " " + g.getLatitudeE6() + " in deg's" + 
    convertToDecimalDegrees(g.getLongitudeE6())
    + " " + convertToDecimalDegrees(g.getLatitudeE6()), Toast.LENGTH_LONG).show();}  

Ich scrolle die Karte irgendwo in der Nähe von -0.0029109 51.9933734, aber im Toast bekomme ich:
-0.9613029999999999 76.60554499999999
Grad ist in Ordnung - ich multipliziere nur mit 1E -6)
Verwende ich die Funktion falsch?
Nach dem, was ich gelesen habe, scheint meine Verwendung in Ordnung zu sein, auch ich habe gelesen, dass es früher ein Problem gab
Diese Funktion, aber dass sie jetzt behoben werden sollte

Danke im Voraus!
Omri

War es hilfreich?

Lösung

Ich weiß, dass dieser Thread etwas alt ist, aber die Antwort auf diese Frage finden Sie auf http://code.google.com/p/osmdroid/issues/detail?id=209Zum Ziel ist es, maximales Ausmaß der Karte festzulegen und das Scrollen so weit einzuschränken. Im Folgenden finden Sie die oben genannte Zusammenfassung der oben genannten Ausgabe (fügen Sie den folgenden Code zu mapview.java hinzu).

protected Rect mScrollableAreaLimit = null;

public void setScrollableAreaLimit(BoundingBoxE6 boundingBox) {  
    final int worldSize_2 =  TileSystem.MapSize(MapViewConstants.MAXIMUM_ZOOMLEVEL) / 2;
    // Clear scrollable area limit if null passed.
    if (boundingBox == null) {
        mScrollableAreaLimit = null;
        return;
    }

    // Get NW/upper-left
    final Point upperLeft = TileSystem.LatLongToPixelXY(boundingBox.getLatNorthE6() / 1E6,
            boundingBox.getLonWestE6() / 1E6, MapViewConstants.MAXIMUM_ZOOMLEVEL, null);
    upperLeft.offset(-worldSize_2, -worldSize_2);

    // Get SE/lower-right
    final Point lowerRight = TileSystem.LatLongToPixelXY(boundingBox.getLatSouthE6() / 1E6,
            boundingBox.getLonEastE6() / 1E6, MapViewConstants.MAXIMUM_ZOOMLEVEL, null);
    lowerRight.offset(-worldSize_2, -worldSize_2);
    mScrollableAreaLimit = new Rect(upperLeft.x, upperLeft.y, lowerRight.x, lowerRight.y);
}

Jetzt können Sie die Methode SetScrollableAralimit aufrufen, wenn die MAP -Ansicht erstellt wird, oder Sie können den Konstruktor mit dem BoundingBoxe6 -Parameter erweitern.

Hoffe das hilft.

Zusätzlich dazu ist eine Korrektur für Doppel -Tap -Fehler erforderlich http://code.google.com/p/osmdroid/issues/detail?id=209#c23

@Override
public void computeScroll() {
    if (mScroller.computeScrollOffset()) {
        if (mScroller.isFinished()) {
            // This will facilitate snapping-to any Snappable points.
            setZoomLevel(mZoomLevel);
        } else {
            /* correction for double tap */
            int targetZoomLevel = getZoomLevel();
            if (targetZoomLevel == mZoomLevel)
                scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
        }
        postInvalidate(); // Keep on drawing until the animation has
        // finished.
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top