为啥我在 Google 地图中使用 GroundOverlay 设置图像时会变形?
Posted
技术标签:
【中文标题】为啥我在 Google 地图中使用 GroundOverlay 设置图像时会变形?【英文标题】:Why does an image is distorted when I set it using GroundOverlay in my Google Map?为什么我在 Google 地图中使用 GroundOverlay 设置图像时会变形? 【发布时间】:2017-11-28 18:32:12 【问题描述】:我正在尝试使用 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
为什么会这样?如何正确设置图片?
已编辑
我可以通过图像中心的 LatLng 坐标和图像的宽度来设置图像而不会失真,但问题是 GroundOverlayOptions 对象需要以公里为单位的宽度,我使用捕获的那一刻图像的两个机器人点之间的距离进行计算。
我的问题是,图像的比例设置正确,但位置错误。 如何保存属性以将图像设置在地图上与拍摄时完全相同的位置?
【问题讨论】:
看来你的代码没问题。可能borders
有错误的坐标。可能是因为borders = GoogleMap.getProjection().getVisibleRegion().latLngBounds;
在不合适的地方调用。尝试在GoogleMap.OnMapLoadedCallback
中调用它。
感谢您的回复。我试过了,但我得到了完全相同的结果。我编辑了我的问题,因为现在我可以设置它而不会失真,但不是在正确的位置。希望你能帮助我@AndriiOmelchenko
似乎问题出在borders
对象中。尝试使用 Logcat 进行协调和分析。
我做到了,有中心和边框,但它们被拍得很好。我现在用.position(center, distance);
做这件事。中心很好,但我认为问题是距离(计算为Location.distanceBetween(...)
和两个南边界的纬度和经度),在我将其更改为米之后(根据需要使用浮点数)你认为是问题吗那个?还能是什么?谢谢@AndriiOmelchenko
您能通过邮件联系我并寻求帮助吗?我很生气,对我的论文有很大帮助 trollmada@gmail.com @AndriiOmelchenko
【参考方案1】:
试试这个代码,它会在mScreenshotButton
press 上获取屏幕截图,而不是将其添加为 mAddOverlayButton
press 上的覆盖:
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
。
【讨论】:
是的!有用!你知道如何正确设置旋转吗?因为如果我在截屏时旋转地图,图像也会失真。非常感谢您的回复伙伴! @thEmadA 1. 欢迎您! 2.这是另一个问题。 你是对的,我创建了一个新帖子here以上是关于为啥我在 Google 地图中使用 GroundOverlay 设置图像时会变形?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Google 地图在我的 Android 应用程序中显示空白屏幕?
为啥我的自定义 Google 地图图标在 PC 浏览器中显示,但在 Android 浏览器中不显示?
为啥这不是 google.maps.Map 的地图实例? InvalidValueError:setMap:不是 Map 的实例;