zooming - osmdroid zoomToBoundingBox 不缩放到boundingBox坐标
问题描述
我正在使用 osmdroid bonuspack 绘制路线。这条路线的起点和终点坐标是:-
原点 - 52.24896,0.71795
目的地 - 54.27916,-1.9732
我的代码的相关部分是: -
BoundingBox b = getBoundingBox(origin,destination);
map.setMinZoomLevel(7d); // <<==== Needed to initialise zoom level
map.zoomToBoundingBox(b,false);
map.invalidate();
和
private BoundingBox getBoundingBox(GeoPoint start, GeoPoint end) {
double north;
double south;
double east;
double west;
if(start.getLatitude() > end.getLatitude()) {
north = start.getLatitude();
south = end.getLatitude();
} else {
north = end.getLatitude();
south = start.getLatitude();
}
if(start.getLongitude() > end.getLongitude()) {
east = start.getLongitude();
west = end.getLongitude();
} else {
east = end.getLongitude();
west = start.getLongitude();
}
return new BoundingBox(north, east, south, west);
}
我使用的地图图块是缩放级别 7-13。
如果没有 'setMinZoomLevel' 语句,起点/目的地标记会显示在屏幕的左上角,其缩放级别可以最好地描述为深空。如果我包含“setMinZoomLevel”,则地图将显示在该级别,并且不会缩放以适合边界框(应该在级别 8)。我尝试了一条小得多的路线,最终结果完全相同。
我究竟做错了什么?
解决方案
事实证明,地图需要已经被显示,大概是为了记录屏幕尺寸。因此,答案是首先使用 MapController 作为 onCreate 过程的一部分设置缩放级别,然后在 MapView.OnFirstLayoutListener 中调用 zoomToBoundingBox。我使用的代码是:-
map.addOnFirstLayoutListener(new MapView.OnFirstLayoutListener() {
public void onFirstLayout(View v, int left, int top, int right, int bottom) {
BoundingBox b = getBoundingBox(origin,destination);
map.zoomToBoundingBox(b,false,100);
map.invalidate();
}
});
推荐阅读
- c# - 是否可以使用 async/await 向 RabbitMQ 发布消息?
- ios - 框架类是否应该导入伞头
- android - 第二页的导航按钮出现在主页上
- python - 在给定黎曼度量的情况下计算测地线的包
- python - pandas 添加数据为 int 的 html 表值
- c# - C# 任务作为参数传递给其他任务
- ruby-on-rails - Capistrano 部署期间如何将文件上传到发布目录?
- php - 提交后获取内容
- javascript - Matomo Analytics:如何跟踪多次点击事件
- django - 使用格式函数时,ugettext_lazy 在模型选择中不起作用