我正在使用OSMDroid API,我想知道是否有辦法限制地圖在北部和南部。我的意思是,這有可能防止地圖在Y軸上不斷重複。OSMDroid將地圖限制在北/南
,我發現這個問題在Github上的「osmdroid」項目,但該補丁程序的代碼太舊,不能被應用到新版本osmdroid的(4.2)
編輯
我試着setScrollableAreaLimit方法,但在左上角有一個錯誤(可能)。當我接近結束時,地圖跳到另一邊。
謝謝你提前通過
我正在使用OSMDroid API,我想知道是否有辦法限制地圖在北部和南部。我的意思是,這有可能防止地圖在Y軸上不斷重複。OSMDroid將地圖限制在北/南
,我發現這個問題在Github上的「osmdroid」項目,但該補丁程序的代碼太舊,不能被應用到新版本osmdroid的(4.2)
編輯
我試着setScrollableAreaLimit方法,但在左上角有一個錯誤(可能)。當我接近結束時,地圖跳到另一邊。
謝謝你提前通過
我修改了兩行類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;
}
[...]
}
我是延長的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);
}
當向上移動地圖(向北)時,這種方式起作用,但向南移動時(不停地向後移動) – spy
我能夠通過擴大對@賢治的回答克服這一點。通過子類方法,我發現快速縮小有時會將地圖重置爲南極。爲了防止出現這種情況,需要先將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);
}
對我不起作用。你確定這是修復嗎? – spy