gpt4 book ai didi

android - GroundOverlay 图像未旋转

转载 作者:太空宇宙 更新时间:2023-11-03 13:47:04 27 4
gpt4 key购买 nike

关于在 map 上定位图像并给出其边界,Google map 的文档指出:

When the image is drawn on the map it will be rotated to fit the bounds. If the bounds do not match the original aspect ratio, the image will be skewed.

但是在我的代码中我有这个:

    GroundOverlayOptions goo2 = new GroundOverlayOptions()
.image(BitmapDescriptorFactory.fromResource(imgRes))
.positionFromBounds(new LatLngBounds(
new LatLng(44.415, 8.937),
new LatLng(44.42, 8.942)
));
mMap.addGroundOverlay(goo2);

图像未旋转,但始终笔直指向北方,并且倾斜。更改覆盖角只会更倾斜,而且它永远不会旋转一点。

我如何设置 GMaps 来旋转它,或者是否存在任何外部工具来旋转它?

最佳答案

我自己解决了这个问题。我认为谷歌的文档不是很清楚。它声明可以使用两种可能的方法定位 GroundOverlay:

There are two ways to specify the position of the ground overlay: Using a LatLng to center the overlay, and dimensions in meters to specify the size of the image. Using a LatLngBounds to specify the north east and south west corners of the image. You must specify the position of the ground overlay before it is added to the map.

我使用的是第二种方式,或者给它我想要应用的图像的两个地理角。不清楚的是,使用第二种方法旋转是不可能的每一个比例上的差异都将用倾斜的图像呈现。事实上,我的想法正是这样,给定平原上的两个点,我们正好有一个图像可以适合这两个点而不会拉伸(stretch),但只是旋转,我很失望地发现这不起作用。

但是,如果你有足够的耐心通过自己计算图像的尺寸和旋转,你可以确定一个角,或者图像的中心,并使用第一种方法,使用 LatLng 并明确指示 anchor ,例如 (0, 0) 表示左上角或 (0.5, 0.5) 表示中心,图片的高度(以米为单位)(这是找到它的好方法:How to convert latitude or longitude to meters?) ,使用三角函数找到一个旋转,仅此而已。

指出了一种以像素为单位查找图像大小的方法 here .

这是我的最终代码,为了内存:

        BitmapFactory.Options dimensions = new BitmapFactory.Options();
dimensions.inJustDecodeBounds = true;
BitmapFactory.decodeResource(getResources(), imgRes, dimensions);
int imgHeightPixels = dimensions.outHeight;

GroundOverlayOptions goo = new GroundOverlayOptions()
.image(BitmapDescriptorFactory.fromResource(imgRes))
.position(imgBottomLeftCorner, imgHeightInPixels)
.anchor(0, 1)
.bearing(imgRotation);
mMap.addGroundOverlay(goo);

请注意, map 上的 Y 坐标自下而上增长,而图像上的 Y 坐标自上而下增长,因此 anchor 为 (0,1)。

给定两个向量,这是我为找到它们的角度所做的工作,并因此找到图像旋转(使用由图像上的两点坐标构成的向量与由相同的两点地理坐标构成的向量):

private static double calcDistance(double x1, double y1, double x2, double y2) {
return (Math.sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1)));
}
private static double calcVectorRotation(double x1, double y1, double x2, double y2) {
return Math.asin( (y1-y2) / calcDistance(x1, y1, x2, y2) );
}

关于android - GroundOverlay 图像未旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40056802/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com