2013-12-16 75 views
4

我需要用許多(〜400)點填充我的覆蓋圖,將它們添加到PathOverlay,然後設置縮放級別,以便用戶可以在屏幕上看到整個路徑。OSMDroid:縮放以顯示整個PathOverlay

一個解決方案是保持最大經度,最小經度,最小經度,最小經度,最後根據這4個數字計算出來(這是我還沒弄清楚的部分,因爲我不知道int如何在setZoom()與地圖上的距離有關)計算適當的縮放級別。然後我會用setCenter()的方法。

有沒有更簡單的方法來使用OSMDroid做到這一點?如果不是,我應該如何確定正確的縮放級別?

+0

名單得到boundingBox的你找到解決辦法嗎? – Bikash

+0

@bikash我沒有,但你可能想看看新版本的OSMDroid,他們可能已經修復了這個問題。 – syntagma

回答

0

通過記憶去這裏...應該是這樣的:

double north = 47.111111; 
double east = -122.111111; 
double south = 46.111111; 
double west = -120.111111; 

BoundingBoxE6 boundingBox = new BoundingBoxE6(north, east, south, west); 

mMapView.getController().zoomToSpan(boundingBox); 
+1

'IMapController'沒有這種方法'zoomToSpan'。使用'mMapView.zoomToBoundingBox(boundingBox,bool animate)' – theBugger

1

的問題是舊的,但有沒有一個明確的答案,所以我會後我的:

我用這個片段每天。這將處理地圖視圖剛剛創建的情況。事實上,它可能會發生,你想放大到一個邊界框作爲地圖的開始行爲。如果您在顯示視圖之前調用此方法,則視圖準備就緒後,將立即註冊偵聽器以執行縮放。

map是我的MapView

public void zoomToBounds(final BoundingBox box) { 
     if (map.getHeight() > 0) { 
      map.zoomToBoundingBox(box, true); 

     } else { 
      ViewTreeObserver vto = map.getViewTreeObserver(); 
      vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 

       @Override 
       public void onGlobalLayout() { 
        map.zoomToBoundingBox(box, true); 
        ViewTreeObserver vto2 = map.getViewTreeObserver(); 
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { 
         vto2.removeGlobalOnLayoutListener(this); 
        } else { 
         vto2.removeOnGlobalLayoutListener(this); 
        } 
       } 
      });  
     }  
    } 

下面是如何從GeoPoints

public BoundingBox computeArea(ArrayList<GeoPoint> points) { 

     double nord = 0, sud = 0, ovest = 0, est = 0; 

     for (int i = 0; i < points.size(); i++) { 
      if (points.get(i) == null) continue; 

      double lat = points.get(i).getLatitude(); 
      double lon = points.get(i).getLongitude(); 

      if ((i == 0) || (lat > nord)) nord = lat; 
      if ((i == 0) || (lat < sud)) sud = lat; 
      if ((i == 0) || (lon < ovest)) ovest = lon; 
      if ((i == 0) || (lon > est)) est = lon; 

     } 

     return new BoundingBox(nord, est, sud, ovest); 

    }