[英]Android Google Map, Polylines and zoom
I am drawing a list of polylines on a Google Map. 我正在Google地图上绘制折线列表。 I am looking for a solution to fit the zoom of the map depending of the drawed polylines. 我正在寻找一种解决方案,以适应地图的缩放,具体取决于绘制的折线。 I've calculated the center point of all my polyline so I know on which point to center the map. 我已经计算了所有折线的中心点,所以我知道哪个点使地图居中。 But I don't find any solution to get the zoom level. 但我找不到任何解决方案来获得缩放级别。
Here the code I use: 这里是我使用的代码:
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(getZoomPoint(), 15));
private LatLng getZoomPoint() {
Double minLatitude = null;
Double minLongitude = null;
Double maxLatitude = null;
Double maxLongitude = null;
for (Feature feature : features) {
List<Coordinates> coordinates = ((LineString) feature.getGeometry()).getCoordinates();
for (Coordinates coordinate : coordinates) {
// --------------------------------------------------------- INITIALISATION
if (minLatitude == null) { // No matter on wich var we check
minLatitude = coordinate.getLatitude();
minLongitude = coordinate.getLongitude();
maxLatitude = coordinate.getLatitude();
maxLongitude = coordinate.getLongitude();
} else {
if (coordinate.getLatitude() < minLatitude) {
minLatitude = coordinate.getLatitude();
}
if (coordinate.getLatitude() > maxLatitude) {
maxLatitude = coordinate.getLatitude();
}
if (coordinate.getLongitude() < minLongitude) {
minLongitude = coordinate.getLongitude();
}
if (coordinate.getLongitude() > maxLongitude) {
maxLongitude = coordinate.getLongitude();
}
}
}
}
double meanLatitude = (minLatitude + maxLatitude) / 2;
double meanLongitude = (minLongitude + maxLongitude) / 2;
return new LatLng(meanLatitude, meanLongitude);
}
My first question is: is there a way to compute the zoom level value ? 我的第一个问题是:有没有办法计算缩放级别值? (here is '15' hard-coded). (这里是'15'硬编码)。
My second question is: how can I fit the polylines width depending on the camera zoom level ? 我的第二个问题是:如何根据相机缩放级别拟合折线宽度? I've added a listener: 我添加了一个监听器:
mMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition cameraPosition) {
Log.d("ZOOM = ", "" +mMap.getCameraPosition().zoom);
});
And I can change the polylines width using the setWidth(...)
method but I don't find a "formula" to compute the width value. 我可以使用setWidth(...)
方法更改折线宽度,但我找不到计算宽度值的“公式”。 Now, the polylines which is fix and don't depends on the zoom level. 现在,修复的折线不依赖于缩放级别。
Any suggestions ? 有什么建议么 ?
You can use LatLngBounds to make a fix bound focus. 您可以使用LatLngBounds来修复绑定焦点。
/**Latlng's to get focus*/
LatLng Delhi = new LatLng(28.61, 77.2099);
LatLng Chandigarh = new LatLng(30.75, 76.78);
LatLng SriLanka = new LatLng(7.000, 81.0000);
LatLng America = new LatLng(38.8833, 77.0167);
LatLng Arab = new LatLng(24.000, 45.000);
/**create for loop/manual to add LatLng's to the LatLngBounds.Builder*/
LatLngBounds.Builder builder = new LatLngBounds.Builder();
builder.include(Delhi);
builder.include(Chandigarh);
builder.include(SriLanka);
builder.include(America);
builder.include(Arab);
/**initialize the padding for map boundary*/
int padding = 50;
/**create the bounds from latlngBuilder to set into map camera*/
LatLngBounds bounds = builder.build();
/**create the camera with bounds and padding to set into map*/
final CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, padding);
/**call the map call back to know map is loaded or not*/
map.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
@Override
public void onMapLoaded() {
/**set animated zoom camera into map*/
map.animateCamera(cu);
}
});
As like above code you have a list of coordinates List<Coordinates>
as I am adding manual LatLng in code. 与上面的代码一样,您有一个坐标List<Coordinates>
的列表,因为我在代码中添加了手动LatLng。 add these coordinates LatLng object to the LatLngBounds.Builder then animate the camera, it will automatically zoom for the all covered LatLng's. 将这些坐标LatLng对象添加到LatLngBounds.Builder然后为相机设置动画,它将自动缩放所有覆盖的LatLng。
mMap = googleMap;
Log.d("mylog", "Added Markers");
mMap.addMarker(place1);
mMap.addMarker(place2);
int padding = 50;
/**create the bounds from latlngBuilder to set into map camera*/
LatLngBounds.Builder builder = new LatLngBounds.Builder();
builder.include(new LatLng(28.429730, 77.055400));
builder.include(new LatLng(28.403000, 77.318800));
LatLngBounds bounds = builder.build();
/**create the camera with bounds and padding to set into map*/
final CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, padding);
/**call the map call back to know map is loaded or not*/
mMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
@Override
public void onMapLoaded() {
/**set animated zoom camera into map*/
mMap.animateCamera(cu);
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.