少し時間がかかりましたが、最終的に何かを考え出しました。 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の位置、幅、高さでフロアプランが保存されている場所を更新する保存ボタンがあればいいです。ベアリングを手動で調整するために別のマーカーを追加することは可能ですが、それは私が今必要とするよりも数学的です。私は元々それを設定するときに調整を続けます。この問題を抱えている人は誰でも助けてくれることを願っています。