我正在尝试使用Google地图提供的GroundOverlay将地图的屏幕截图设置为另一个地图。
首先,我在截取屏幕时保存地图的边界。我使用
获取它们borders = GoogleMap.getProjection().getVisibleRegion().latLngBounds;
使用该边界将屏幕截图设置为GroundOverlay图像后,图像显示失真。我这样做了
GroundOverlayOptions offlineMap = new GroundOverlayOptions()
.image(BitmapDescriptorFactory.fromBitmap(myBitmap))
.transparency(0)
.positionFromBounds(borders);
imageOverlay = map.addGroundOverlay(offlineMap);
以下是问题的屏幕截图: Screenshot of the image overlay distorted
为什么会这样?如何正确设置图像?
EDITED
我可以通过图像中心的 LatLng 坐标和图像的宽度来设置图像而不会产生扭曲,但事实是 GroundOverlayOptions 对象需要以公里为单位的宽度,我使用捕获的瞬间图像的两个bot点之间的距离进行计算。
我的问题是,图像设置的比例正确,但位置错误。 如何保存属性以将图像设置在地图上与拍摄时完全相同的位置?
答案 0 :(得分:0)
尝试使用此代码,在mScreenshotButton
按下获取屏幕截图,然后将其添加为mAddOverlayButton
上的叠加层:
public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {
private GoogleMap mGoogleMap;
private MapFragment mMapFragment;
private Button mAddOverlayButton;
private Button mScreenshotButton;
private Bitmap mScreenshot;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mScreenshotButton = (Button) findViewById(R.id.get_screenshot_button);
mScreenshotButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getMapScreenshot();
}
});
mAddOverlayButton = (Button) findViewById(R.id.add_overlay_button);
mAddOverlayButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LatLngBounds borders = mGoogleMap.getProjection().getVisibleRegion().latLngBounds;
GroundOverlayOptions overlay = new GroundOverlayOptions()
.image(BitmapDescriptorFactory.fromBitmap(mScreenshot))
.transparency(0f)
.positionFromBounds(borders);
mGoogleMap.addGroundOverlay(overlay);
}
});
mMapFragment = (MapFragment) getFragmentManager()
.findFragmentById(R.id.map_fragment);
mMapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
mGoogleMap = googleMap;
}
public void getMapScreenshot()
{
GoogleMap.SnapshotReadyCallback callback = new GoogleMap.SnapshotReadyCallback() {
Bitmap bitmap;
@Override
public void onSnapshotReady(Bitmap snapshot) {
mScreenshot = snapshot;
}
};
mGoogleMap.snapshot(callback);
}
}
没有任何失真。似乎你没有正确地获得borders
。