gpt4 book ai didi

android - OSMDroid:缩放以显示整个 PathOverlay

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:55:01 27 4
gpt4 key购买 nike

我需要用许多(~400)个点填充我的叠加层,将它们添加到 PathOverlay,然后设置缩放级别,以便用户可以在屏幕上看到整个路径。

一个解决方案是保留最大经度、最小经度、最小经度、最小经度,最后根据这 4 个数字计算(这是我还没有弄清楚的部分,因为我不知道如何是 setZoom() 中与 map 上的距离相关的 int)计算适当的缩放级别。然后我会使用 setCenter() 方法。

有没有更简单的方法可以使用 OSMDroid 来做到这一点?如果不是,我应该如何确定正确的缩放级别?

最佳答案

这个问题很老,但没有明确的答案,所以我会发布我的:

我每天都使用这个 fragment 。这将负责处理刚刚创建 map View 的情况。事实上,您可能希望缩放到边界框作为 map 的开始行为。如果您在显示 View 之前调用此方法,它将注册一个监听器以在 View 准备好后立即执行缩放。

map 是我的 MapView

public void zoomToBounds(final BoundingBox box) {
if (map.getHeight() > 0) {
map.zoomToBoundingBox(box, true);

} else {
ViewTreeObserver vto = map.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

@Override
public void onGlobalLayout() {
map.zoomToBoundingBox(box, true);
ViewTreeObserver vto2 = map.getViewTreeObserver();
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
vto2.removeGlobalOnLayoutListener(this);
} else {
vto2.removeOnGlobalLayoutListener(this);
}
}
});
}
}

下面是如何从 GeoPoints 列表中获取 boundingBox

public BoundingBox computeArea(ArrayList<GeoPoint> points) {

double nord = 0, sud = 0, ovest = 0, est = 0;

for (int i = 0; i < points.size(); i++) {
if (points.get(i) == null) continue;

double lat = points.get(i).getLatitude();
double lon = points.get(i).getLongitude();

if ((i == 0) || (lat > nord)) nord = lat;
if ((i == 0) || (lat < sud)) sud = lat;
if ((i == 0) || (lon < ovest)) ovest = lon;
if ((i == 0) || (lon > est)) est = lon;

}

return new BoundingBox(nord, est, sud, ovest);

}

关于android - OSMDroid:缩放以显示整个 PathOverlay,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20608590/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com