3

我想zoomGoogle map以特定的半徑(以英里爲單位),比如我的條件在android中爲10英里/ 20英里/ 30英里等。將Google地圖縮放到以英里爲單位的特定半徑android

我需要的是從當前經緯度長點畫出一個特定半徑(10/20/30 ..英里)的圓,然後將地圖縮放到特定的英里數,我已經繪製了半徑爲圓的圓。

我可以指出我目前的位置,畫圓圈。但是我無法將地圖縮放到所需的半徑英里(圓圈應該以當前位置爲中心,以指定的里程爲焦點)。

目前我使用下面的代碼來放大:

gooMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(selectedLat, selectedLong), 15)); 
        gooMap.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null); 
        Log.e("Circle Lat Long:", selectedLat + ", " + selectedLong); 
        circle.remove(); 
        circle = gooMap.addCircle(new CircleOptions() 
          .center(new LatLng(selectedLat, selectedLong)) 
          .radius(iMiles * 1609.34) // Converting Miles into Meters... 
          .strokeColor(Color.RED) 
          .strokeWidth(5)); 
        circle.isVisible(); 

我知道給縮放級別15將地圖無法放大的慾望英里。但我需要將地圖縮放到需要的英里半徑。我怎麼能實現它。任何人都可以幫助我一樣。 編輯: -圖片添加解釋了我需要的細節。 Image_1: - 當我將我的半徑設置爲10英里時,地圖應如圖所示放大。 Image_2當我將半徑設置爲50英里時,地圖應該如圖所示放大。 請查看地圖位置的區別以分析我需要的縮放級別。 Image_1 Image_2 在此先感謝。

+0

你是什麼意思的「動物園做米慾望(原文如此)英里半徑「?縮放是一個無量綱單位。你的意思是你想讓圓圈填滿屏幕,或者說屏幕高度的50%?就目前來看,這個問題毫無意義。 – NickT

+0

@NickT我需要當我縮放屏幕時,應該只在屏幕上顯示圓圈。 –

+0

我再次問 - 你想要多大的圈子?填寫屏幕高度?填寫屏幕寬度?佔據屏幕的一半? – NickT

回答

0

當視圖被刷新時,你需要找到屏幕上的距離。我不是太熟悉新的API和意見,但這樣的事情應該工作:

LatLngBounds bounds = map.getProjection().getVisibleRegion().latLngBounds; 
     double llNeLat = bounds.northeast.latitude; 
     double llSwLat = bounds.southwest.latitude; 
     double llNeLng = bounds.northeast.longitude; 
     double llSwLng = bounds.southwest.longitude; 
     float results[] = new float[5]; 
     Location.distanceBetween(llNeLat, llNeLng, llSwLat, llSwLng, results); 
     float radius = results[0]; 
     // radius is distance top right to bottom left on screen in metres 
     // so use maybe 3/4 of this, then conert your miles to that value 
     // in metres 

則該值添加到addCircle調用

1

我得到了相同的解決方案,這是一個:

// Zoom in, animating the camera. 
       double iMeter = iMiles * 1609.34; 
       circle.remove(); 
       circle = gooMap.addCircle(new CircleOptions() 
         .center(new LatLng(selectedLat, selectedLong)) 
         .radius(iMeter) // Converting Miles into Meters... 
         .strokeColor(Color.RED) 
         .strokeWidth(5)); 
       circle.isVisible(); 
       float currentZoomLevel = getZoomLevel(circle); 
       float animateZomm = currentZoomLevel + 5; 

       Log.e("Zoom Level:", currentZoomLevel + ""); 
       Log.e("Zoom Level Animate:", animateZomm + ""); 

       gooMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(selectedLat, selectedLong), animateZomm)); 
       gooMap.animateCamera(CameraUpdateFactory.zoomTo(currentZoomLevel), 2000, null); 
       Log.e("Circle Lat Long:", selectedLat + ", " + selectedLong); 
是計算縮放級別按設備

而我們的方法如下:

public float getZoomLevel(Circle circle) { 
     float zoomLevel=0; 
     if (circle != null){ 
      double radius = circle.getRadius(); 
      double scale = radius/500; 
      zoomLevel =(int) (16 - Math.log(scale)/Math.log(2)); 
     } 
     return zoomLevel +.5f; 
    } 
相關問題