gpt4 book ai didi

android - 在 LatLngBounds 构建器上设置最大缩放级别

转载 作者:IT老高 更新时间:2023-10-28 22:12:23 25 4
gpt4 key购买 nike

我在搜索中没有找到答案,有一些关于 SO 的答案,但它们对我不起作用。

我在 map 上有 2 个标记,我正在使用 LatLngBounds 构建器,以便让相机缩放到正确的缩放级别以将它们都包含在内。除了一件事,一切都按预期工作,当 2 个标记彼此非常接近时, map 非常非常缩放,而且,这种缩放级别没有任何意义。

LatLngBounds.Builder builder = new LatLngBounds.Builder();
builder.include(firstMarker.getPosition());
builder.include(secondMarker.getPosition());
LatLngBounds bounds = builder.build();

CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, markerPadding);

有没有办法强制一定程度的变焦,之后相机就不会变焦?这将避免 map 过于放大/缩小。基本上我使用 15.0f 作为缩放级别。如果这些点太远,我希望缩放适合它们。如果点越来越近,我不希望缩放级别超过 15.0f。

最佳答案

我有一个类似的情况,我想要至少 2 公里的 map 对角线。因此,我只是在构建器中添加了两个附加点:第一个位于原始边界中心西北 1 公里处,第二个位于中心东南 1 公里处。如果这些在界限内,它们不会改变任何东西。如果它们超出原始边界,它们会将边界增加到有意义的大小。

这是一个完整的代码示例:

public LatLngBounds createBoundsWithMinDiagonal(MarkerOptions firstMarker, MarkerOptions secondMarker) {
LatLngBounds.Builder builder = new LatLngBounds.Builder();
builder.include(firstMarker.getPosition());
builder.include(secondMarker.getPosition());

LatLngBounds tmpBounds = builder.build();
/** Add 2 points 1000m northEast and southWest of the center.
* They increase the bounds only, if they are not already larger
* than this.
* 1000m on the diagonal translates into about 709m to each direction. */
LatLng center = tmpBounds.getCenter();
LatLng northEast = move(center, 709, 709);
LatLng southWest = move(center, -709, -709);
builder.include(southWest);
builder.include(northEast);
return builder.build();
}

private static final double EARTHRADIUS = 6366198;
/**
* Create a new LatLng which lies toNorth meters north and toEast meters
* east of startLL
*/
private static LatLng move(LatLng startLL, double toNorth, double toEast) {
double lonDiff = meterToLongitude(toEast, startLL.latitude);
double latDiff = meterToLatitude(toNorth);
return new LatLng(startLL.latitude + latDiff, startLL.longitude
+ lonDiff);
}

private static double meterToLongitude(double meterToEast, double latitude) {
double latArc = Math.toRadians(latitude);
double radius = Math.cos(latArc) * EARTHRADIUS;
double rad = meterToEast / radius;
return Math.toDegrees(rad);
}


private static double meterToLatitude(double meterToNorth) {
double rad = meterToNorth / EARTHRADIUS;
return Math.toDegrees(rad);
}

编辑,因为这似乎仍然很受欢迎:

请参阅 https://stackoverflow.com/a/23092644/2808624下面:现在人们会使用 SphericalUtil 来移动 LatLng 坐标,而不是自己编码。

关于android - 在 LatLngBounds 构建器上设置最大缩放级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20571951/

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