我不仅是Skobbler的新手,也是Map的新手。这时,我正在尝试创建一个只显示一个区域的mapp应用程序。
而且,我想要的是:
我尝试了下面的绑定,但它不起作用:
SKBoundingBox boundingBox = new SKBoundingBox(47.087426, 8.257230, 46.874277, 8.637632);
mapView.fitBoundingBox(boundingBox, 0, 0);
请你提一些提示吗?
答案 0 :(得分:2)
目前,SDK不支持将地图操作限制为边界框。
作为一种解决方法,每当屏幕上可见的地图区域发生变化(由于平移,缩放或旋转)并且它超出定义的边界框时,地图将切换回内部的最后一个可见区域那个边界框:
public class MapActivity extends Activity implements SKMapSurfaceListener, ... {
...
// the box inside which map operations are allowed
private SKBoundingBox box = new SKBoundingBox(47.087426, 8.257230, 46.874277, 8.637632);
// last region that was visible on the screen and was inside the box
private SKCoordinateRegion lastValidRegion = null;
...
@Override
public void onSurfaceCreated(SKMapViewHolder mapHolder) {
...
// position the map somewhere inside your box
mapView.centerMapOnPosition(new SKCoordinate(8.304354, 47.050253));
}
...
// checks if a given region is inside the bounding box
private boolean isInBoundingBox(SKCoordinateRegion newRegion) {
SKBoundingBox newBoundingBox = mapView.getBoundingBoxForRegion(newRegion);
if (newBoundingBox.getTopLeftLatitude() > box.getTopLeftLatitude() || newBoundingBox.getBottomRightLatitude() < box.getBottomRightLatitude() ||
newBoundingBox.getTopLeftLongitude() < box.getTopLeftLongitude() || newBoundingBox.getBottomRightLongitude() > box.getBottomRightLongitude()) {
return false;
}
return true;
}
@Override
public void onMapRegionChanged(SKCoordinateRegion mapRegion) {
boolean inBoundingBox = isInBoundingBox(mapRegion);
if (inBoundingBox) {
// if mapRegion is valid save it
if (lastValidRegion == null) {
lastValidRegion = new SKCoordinateRegion(mapRegion.getCenter(), mapRegion.getZoomLevel());
} else {
lastValidRegion.setCenter(mapRegion.getCenter());
lastValidRegion.setZoomLevel(mapRegion.getZoomLevel());
}
} else {
// if mapRegion is invalid reposition the map inside the bounding box
if (lastValidRegion != null) {
mapView.changeMapVisibleRegion(lastValidRegion, false);
}
}
}
}
此外,如果需要,还可以使用SKMapSettings.setZoomLimits(...)方法将限制应用于缩放级别。