проблема с преобразованием из пикселя в широту/долготу

Я использую функцию fromPixels() в osmdroid (3.05) следующим образом:

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

Я прокручиваю карту где-то рядом с -0,0029109 51,9933734, но в тосте я получаю:
-0,9613029999999999 76,60554499999999, так что кажется, что широта далеко (преобразование в десятичные
градусы в порядке - я просто умножаю на 1E- 6)
Я использую функцию неправильно?
Судя по тому, что я читал, мое использование в порядке, также я читал, что раньше
была проблема с этой функцией, но теперь она должна быть исправлена.

Заранее спасибо!
Омри


person omri    schedule 05.09.2011    source источник
comment
Этот поток очень похож на этот: stackoverflow.com/questions/7898313/   -  person rahstame    schedule 07.12.2011


Ответы (1)


Я знаю, что эта ветка устарела, но ответ на этот вопрос можно найти на странице http://code.google.com/p/osmdroid/issues/detail?id=209 Указать означает установить максимальную протяженность карты и ограничить прокрутку до этой степени. Ниже приведено краткое описание проблемы, упомянутой выше (добавьте приведенный ниже код в 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);
}

Теперь вы можете вызвать метод setScrollableAreaLimit при создании представления карты или расширить конструктор с помощью параметра BoundingBoxE6.

Надеюсь это поможет.

В дополнение к этому необходимо исправить ошибку двойного касания 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.
    }
}
person zoran.nikolic    schedule 18.11.2011
comment
Только сейчас увидела! Большое спасибо! Я дам ему попробовать. - person omri; 08.01.2012