2017-10-11 15 views
0

私は別のフロアプランをアップロードするために必要なGoogleマップアプリを持っています。AndroidスタジオでGoogleマップにフロアプランを手動で追加する

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

少し時間がかかりましたが、最終的に何かを考え出しました。 2つのコーナーを使ってオーバーレイを追加するのではなく、中心の緯度/経度と幅と高さを使用します。オーバーレイを次のように追加します。

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にフロアプランの初期値を与える必要があり、私は二つのマーカー、オーバーレイ(同じ緯度/経度)の中央と右端の中央に沿って配置された別の1に位置する1つを追加しましたオーバーレイ(mSizeMarker)の彼らはdraggableていることを確認します。右端にどこに配置するかを決めるために数学をする必要がありました。

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)); 
      } 
     } 
    }); 

あなたはフロアプランが配置したい場所をドラッグして中央のマーカーを使用し、幅を変更する権利上の1(高さはそれに応じて自動的に更新されます)。

画像が正しく配置されたら、mOverlayの位置、幅、高さでフロアプランが保存されている場所を更新する保存ボタンがあればいいです。ベアリングを手動で調整するために別のマーカーを追加することは可能ですが、それは私が今必要とするよりも数学的です。私は元々それを設定するときに調整を続けます。この問題を抱えている人は誰でも助けてくれることを願っています。

関連する問題