设置上的LatLngBounds Builder中的最大缩放级别 [英] Set a max zoom level on LatLngBounds builder
问题描述
我还没有发现在我寻求答案,也有在这么几个答案,但他们并没有为我工作。
I haven't found an answer in my search, there are a few answers on SO but they didn't work for me.
我有2个标记在地图上,我使用的LatLngBounds建设者为了让相机变焦向右缩放级别,包括他们两人。一切都按预期工作一边一件事,当两个标记都非常接近对方,地图是非常非常缩放和幸福,它没有任何意义,具有缩放的这个水平。
I have 2 markers on the map and I am using LatLngBounds builder in order to let the camera zoom to the right zoom level to include them both. Everything works as expected aside one thing, when the 2 markers are really close to each other, the map is very very zoomed and well, it doesn't make any sense to have this level of zooming.
LatLngBounds.Builder builder = new LatLngBounds.Builder();
builder.include(firstMarker.getPosition());
builder.include(secondMarker.getPosition());
LatLngBounds bounds = builder.build();
CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, markerPadding);
有没有办法强制一定程度放大,之后,相机将无法放大?这将避免过于放大/缩小地图。基本上我用15.0f缩放水平。如果点太远我想缩放以适应他们。如果点越来越靠近,我不希望缩放级别超越15.0f。
Is there a way to force a certain level of zoom, after which the camera won't zoom ? This would avoid having the map too zoomed in/out. Basically I am using 15.0f as level of zoom. If the points are too far away I want the zoom to fit them both. If points are getting close I don't want the zoom level to go beyond 15.0f.
推荐答案
我也有类似的情况,在这里我想至少有一对角2公里地图。 所以我只是添加两个点的建设者:在第1公里西北原有界限的中心和每秒1公里中心的东南部。如果这些边界内,他们不会改变任何东西。如果它们是原始的边界外,它们增加的边界到一个有意义的大小。
I have a similar case, where I want at least a map diagonal of 2 kilometers. Therefore I just add two additional points to the builder: the first 1 km north-west of the center of the original bounds and the second 1 km south-east of the center. If these are inside the bounds, they do not change anything. If they are outside of the original bounds, they increase the bounds to a meaningful size.
下面是一个完整的code例如:
Here is a full code example:
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);
}
这篇关于设置上的LatLngBounds Builder中的最大缩放级别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!