2015-06-09 60 views
1

我正在使用OSMDroid API,我想知道是否有辦法限制地圖在北部和南部。我的意思是,這有可能防止地圖在Y軸上不斷重複。OSMDroid將地圖限制在北/南

,我發現這個問題在Github上的「osmdroid」項目,但該補丁程序的代碼太舊,不能被應用到新版本osmdroid的(4.2)

編輯

我試着setScrollableAreaLimit方法,但在左上角有一個錯誤(可能)。當我接近結束時,地圖跳到另一邊。

謝謝你提前通過

回答

0

我修改了兩行類MapView

我換成x += worldSize;通過x=0;y += worldSize;通過y=0;

 public void scrollTo(int x, int y) { 
     final int worldSize = TileSystem.MapSize(this.getZoomLevel(false)); 
     while (x < 0) { 
      //x += worldSize; 
     x=0; 
     } 
     while (x >= worldSize) { 
      x -= worldSize; 
     } 
     while (y < 0) { 
      // y += worldSize; 
      y=0; 
     } 
     while (y >= worldSize) { 
      y -= worldSize; 
     } 
    [...] 
    } 
+0

對我不起作用。你確定這是修復嗎? – spy

0

我是延長的MapView,並覆蓋到scrollTo()

public void scrollTo(int x, int y) { 
    final int worldSize = TileSystem.MapSize(this.getZoomLevel(false)); 
    if(y < 0) { // when over north pole 
     y = 0; // scroll to north pole 
    }else if(y + getHeight() >= worldSize) { // when over south pole 
     y = worldSize-getHeight() - 1; // scroll to south pole 
    } 
    super.scrollTo(x,y); 
} 
+0

當向上移動地圖(向北)時,這種方式起作用,但向南移動時(不停地向後移動) – spy

0

我能夠通過擴大對@賢治的回答克服這一點。通過子類方法,我發現快速縮小有時會將地圖重置爲南極。爲了防止出現這種情況,需要先將y值縮小(正如在版本5.6.5中的super class所做的那樣)。

@Override 
public void scrollTo(int x, int y) { 

    final int worldSize = TileSystem.MapSize(this.getZoomLevel(false)); 
    final int mapViewHeight = getHeight(); 

    // Downscale the y-value in case the user just zoomed out. 
    while (y >= worldSize) { 
     y -= worldSize; 
    } 

    if (y < 0) { 
     y = 0; 
    } else if ((y + mapViewHeight) > worldSize) { 
     y = worldSize - mapViewHeight; 
    } 

    super.scrollTo(x, y); 
}