Question

J'utilise la fonction fromPixels () dans osmdroid (3,05) comme ceci:

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();}  

Je suis quelque part le défilement carte près -0,0029109 51,9933734 mais dans le toast que je reçois:
-0,9613029999999999 76,60554499999999 il semble que le lats est loin (la convertir en décimal
Ok degrés est - je viens de multiplier par 1E-6)
Suis-je utiliser la fonction de façon incorrecte?
D'après ce que je lis, il semble que mon utilisation est très bien, je l'ai lu que il y avait un problème avec
cette fonction mais qu'il doit être fixé maintenant

Merci à l'avance!
Omri

Était-ce utile?

La solution

Je sais que ce fil est un peu vieux, mais la réponse à cette question se trouve sur http://code.google.com/p/osmdroid/issues/detail?id=209 Le point est de fixer l'étendue maximum de la carte et de limiter le défilement dans cette mesure. Voici le résumé de l'émission mentionnée ci-dessus (Ajoutez le code ci-dessous pour MapView.java)

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);
}

Maintenant, vous pouvez appeler la méthode setScrollableAreaLimit lorsque la vue de la carte est créée ou vous pouvez étendre votre constructeur avec le paramètre BoundingBoxE6.

Hope this helps.

En plus de cela, une correction pour bug double tap est nécessaire 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.
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top