Pregunta

Estoy usando la función frompixels () en OSMDroid (3.05) como así:

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

Estoy desplazando el mapa en algún lugar cerca de -0.0029109 51.9933734 pero en la tostada obtengo:
-0.9613029999999999 76.605544499999999 por lo que parece que el LAT está muy lejos (el converso a decimal
Los grados están bien, solo me multiplico por 1e -6)
¿Estoy usando la función incorrectamente?
Por lo que leí parece que mi uso está bien, también leí que solía haber un problema con
esa función pero que debería solucionarse ahora

¡Gracias por adelantado!
Omri

¿Fue útil?

Solución

Sé que este hilo es un poco viejo, pero la respuesta a esta pregunta se puede encontrar en http://code.google.com/p/osmdroid/issues/detail?id=209El punto es establecer la extensión máxima del mapa y restringir el desplazamiento en esa medida. A continuación se muestra el resumen del problema mencionado anteriormente (agregue el código a continuación a 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);
}

Ahora puede llamar al método setScrollableArealImit cuando se crea la vista de mapa o puede expandir el constructor con el parámetro Boundingboxe6.

Espero que esto ayude.

Además de esto, se necesita una corrección para el error de doble toque 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.
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top