Google 地图 Android 设置可见边界
Google Maps Android Set Visible Bounds
首先我对我的英语感到抱歉。
我尝试在 google 地图 android api 中设置精确的可见范围。例如,地图将只显示美国地区,用户无法将地图滚动到加拿大。当您查看 link 时,您可以理解我试图 do.I 认为我可以使用 CameraChangeListener 并获得可见区域来做到这一点,但我无法实现算法。你能帮助我吗 ?
http://sehirharitasi.ibb.gov.tr/
它不像您的 link 那样简单好用,但它是可行的:
//When you setup the map:
map.setOnCameraChangeListener(new OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition cameraPosition) {
checkBounds();
}
});
并且 CheckBounds 函数可以检查可见区域是否在允许的范围内:
public void checkBounds() {
//non ricostruire allowedbounds ogni volta, sono sempre gli stessi, fatti il build nell'onCreate
LatLngBounds actualVisibleBounds = map.getProjection().getVisibleRegion().latLngBounds;
if (allowedBounds.contains(actualVisibleBounds)){
return
}else{
map.animateCamera(CameraUpdateFactory.newLatLngBounds(allowedBounds));
}
}
或者您可以使用视口的中心并检查它是否在允许的区域内(以允许边界缩放)
public void checkBounds() {
LatLngBounds.Builder builder = new LatLngBounds.Builder();
builder.include(northeast);
builder.include(southwest);
final LatLngBounds allowedBounds = builder.build();
LatLngBounds centro = map.getProjection().getVisibleRegion().latLngBounds;
if (allowedBounds.contains(centro.getCenter()))
return;
else {
map.animateCamera(CameraUpdateFactory.newLatLngZoom(defaultLatLng, zoomLevel));
}
}
首先我对我的英语感到抱歉。 我尝试在 google 地图 android api 中设置精确的可见范围。例如,地图将只显示美国地区,用户无法将地图滚动到加拿大。当您查看 link 时,您可以理解我试图 do.I 认为我可以使用 CameraChangeListener 并获得可见区域来做到这一点,但我无法实现算法。你能帮助我吗 ? http://sehirharitasi.ibb.gov.tr/
它不像您的 link 那样简单好用,但它是可行的:
//When you setup the map:
map.setOnCameraChangeListener(new OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition cameraPosition) {
checkBounds();
}
});
并且 CheckBounds 函数可以检查可见区域是否在允许的范围内:
public void checkBounds() {
//non ricostruire allowedbounds ogni volta, sono sempre gli stessi, fatti il build nell'onCreate
LatLngBounds actualVisibleBounds = map.getProjection().getVisibleRegion().latLngBounds;
if (allowedBounds.contains(actualVisibleBounds)){
return
}else{
map.animateCamera(CameraUpdateFactory.newLatLngBounds(allowedBounds));
}
}
或者您可以使用视口的中心并检查它是否在允许的区域内(以允许边界缩放)
public void checkBounds() {
LatLngBounds.Builder builder = new LatLngBounds.Builder();
builder.include(northeast);
builder.include(southwest);
final LatLngBounds allowedBounds = builder.build();
LatLngBounds centro = map.getProjection().getVisibleRegion().latLngBounds;
if (allowedBounds.contains(centro.getCenter()))
return;
else {
map.animateCamera(CameraUpdateFactory.newLatLngZoom(defaultLatLng, zoomLevel));
}
}