2017-10-11 244 views
0

我有一個谷歌地圖應用程序,我需要能夠上傳不同的平面圖。到目前爲止,我使用的是地面覆蓋物這樣添加展位圖圖像地圖:使用Android Studio手動添加平面圖到谷歌地圖

LatLngBounds bounds = new LatLngBounds(new LatLng(floorplan.get_swlat(), floorplan.get_swlng()), 
new LatLng(floorplan.get_nelat(), floorplan.get_nelng())); 

GroundOverlayOptions overlayOptions = new GroundOverlayOptions() 
        .image(BitmapDescriptorFactory.fromBitmap(floorplan.get_floorplanimage())).positionFromBounds(bounds); 

mMap.addGroundOverlay(overlayOptions); 

這增加的佈局圖的地圖,但問題是,它是唯一面向南北,所以它贏得不適合那些不完全坐在那裏的建築物。所以我想知道是否有辦法進入並手動放置它(並使用手指旋轉和縮放圖像)在我需要的位置。任何人都知道從哪裏開始?

回答

0

花了一些時間,但我終於想出了一些東西。我不使用兩個角來添加覆蓋圖,而是使用中心經緯度以及寬度和高度。我添加覆蓋如下。

mOverlayOptions = new GroundOverlayOptions() 
      .image(BitmapDescriptorFactory.fromBitmap(floorplan.get_floorplanimage())) 
      .position(new LatLng(floorplan.get_clat(), floorplan.get_clng()), (float) floorplan.get_width(), (float) floorplan.get_height()) 
      .bearing((float) floorplan.get_bearing()) 
      .transparency(mOpacity); 
mOverlay = mMap.addGroundOverlay(mOverlayOptions); 

所以你必須給佈局規劃初始值begin.Then我添加了兩個標誌,一個位於覆蓋中心(同緯度/經度),另一種沿右側邊緣的中心位於覆蓋圖(mSizeMarker)。確保它們是可拖動的。我不得不做一些數學弄清楚在何處放置在右邊緣的一個。

mCenterMarker = mMap.addMarker(new MarkerOptions().position(new LatLng(floorplan.get_clat(), floorplan.get_clng()))); 

Double new_longitude = floorplan.get_clng() + (floorplan.get_width()/2/(6371000)) * (180/3.14159265)/Math.cos(floorplan.get_clat() * 3.14159265/180); 
mSizeMarker = mMap.addMarker(new MarkerOptions().position(new LatLng(floorplan.get_clat(), new_longitude))); 

mCenterMarker.setDraggable(true); 
mSizeMarker.setDraggable(true); 

所有剩下的就是添加一個OnMarkerDragListener:

mMap.setOnMarkerDragListener(new GoogleMap.OnMarkerDragListener() { 
     @Override 
     public void onMarkerDragStart(Marker marker) { 
      } 
     } 

     @Override 
     public void onMarkerDrag(Marker marker) { 
      if (marker.equals(mCenterMarker)) { 
       mOverlay.remove(); 
       mOverlayOptions.position(marker.getPosition(), mOverlay.getWidth(), mOverlay.getHeight()); 
       mOverlay = mMap.addGroundOverlay(mOverlayOptions); 
       mSizeMarker.setPosition(new LatLng(marker.getPosition().latitude, marker.getPosition().longitude + (mOverlay.getWidth()/2/(6371000)) * (180/3.14159265)/Math.cos(marker.getPosition().latitude * 3.14159265/180))); 
      } 
      if (marker.equals(mSizeMarker)) { 
       marker.setPosition(new LatLng(mCenterMarker.getPosition().latitude, marker.getPosition().longitude)); 
       double newWidth = ((marker.getPosition().longitude - mCenterMarker.getPosition().longitude)/((180/3.14159265)/Math.cos(mCenterMarker.getPosition().latitude * 3.14159265/180))) * 6371000 * 2; 
       mOverlay.remove(); 
       mOverlayOptions.position(mCenterMarker.getPosition(), (float) newWidth); 
       mOverlay = mMap.addGroundOverlay(mOverlayOptions); 
      } 
     } 

     @Override 
     public void onMarkerDragEnd(Marker marker) { 
      if (marker.equals(mSizeMarker)) { 
       marker.setPosition(new LatLng(mCenterMarker.getPosition().latitude, marker.getPosition().longitude)); 
      } 
     } 
    }); 

使用中間的標記拖到你想要的佈局圖被定位,而一個,就可以改變寬度的右側(高度會自動更新)。

然後,當圖像被正確地定位,只是有一個保存按鈕的地方,其中所述布圖規劃存儲與位置,寬度和mOverlay的高度的更新。可以添加另一個標記來手動調整方位,但這比我現在需要做的更多的數學。當我最初設置它時,我會繼續調整它。希望這可以幫助別人誰沿着這問題就來了,我知道這個解決方案是對我工作的偉大至今。