gpt4 book ai didi

android - 谷歌地图获取缩放级别的可见区域半径

转载 作者:行者123 更新时间:2023-11-29 01:09:59 29 4
gpt4 key购买 nike

我正在构建一个应用程序,我在其中从 onCameraIdle 中的 API 加载数据。该请求需要目标位置半径 才能为我提供结果。

我用来从当前相机获取半径的代码是:

/**
* @param map The Map on which to compute the radius.
* @return The circle radius of the area visible on map, in meters.
*/
public float getRadiusVisibleOnMap(GoogleMap map) {
VisibleRegion visibleRegion = map.getProjection().getVisibleRegion();

LatLng farRight = visibleRegion.farRight;
LatLng farLeft = visibleRegion.farLeft;
LatLng nearRight = visibleRegion.nearRight;
LatLng nearLeft = visibleRegion.nearLeft;

float[] distanceWidth = new float[1];
Location.distanceBetween(
(farRight.latitude + nearRight.latitude) / 2,
(farRight.longitude + nearRight.longitude) / 2,
(farLeft.latitude + nearLeft.latitude) / 2,
(farLeft.longitude + nearLeft.longitude) / 2,
distanceWidth
);


float[] distanceHeight = new float[1];
Location.distanceBetween(
(farRight.latitude + nearRight.latitude) / 2,
(farRight.longitude + nearRight.longitude) / 2,
(farLeft.latitude + nearLeft.latitude) / 2,
(farLeft.longitude + nearLeft.longitude) / 2,
distanceHeight
);

float radius;

if (distanceWidth[0] > distanceHeight[0]) {
radius = distanceWidth[0];
} else {
radius = distanceHeight[0];
}

return radius;
}

我从 here 得到的

在某些情况下,我需要只知道缩放级别来获取半径,以便在缩放动画完成时信息已经加载到 map 上。

我试图调整来自 here 的代码让半径知道缩放级别而不是相反。

public int getZoomLevel(Circle circle) {
if (circle != null) {
double radius = circle.getRadius();
double scale = radius / 500;
zoomLevel = (int) (16 - Math.log(scale) / Math.log(2));
}
return zoomLevel;
}

我得到了公式:formula

公式不正确。它不输出正确的尺寸。对于 14 的缩放级别,我使用相机的 VisibleRegion 获得了 2.697331km 的半径尺寸。如果我使用公式计算半径,结果是 0.008km。

最佳答案

看起来您的最佳做法是找到适合内部 map 矩形的最小半径值。

你几乎就在那里,使用下面使用 Pythagorean theorem 的修改函数找到包含 map “矩形”所需的最小半径。


enter image description here


@Override
public void onMapReady(GoogleMap googleMap) {
this.googleMap = googleMap;
googleMap.setOnMarkerClickListener(this);

googleMap.setOnCameraIdleListener(() -> {
CameraPosition cameraPosition = googleMap.getCameraPosition();
double radiusInMeters = getMapVisibleRadius();
double radiusInKilometers = radiusInMeters / 1000;
double latitude = cameraPosition.target.latitude;
double longitude = cameraPosition.target.longitude;

// TODO you take it from here,
// I use firebase to get relevant markers based on the lat,long,radius

});
}


private double getMapVisibleRadius() {
VisibleRegion visibleRegion = googleMap.getProjection().getVisibleRegion();

float[] distanceWidth = new float[1];
float[] distanceHeight = new float[1];

LatLng farRight = visibleRegion.farRight;
LatLng farLeft = visibleRegion.farLeft;
LatLng nearRight = visibleRegion.nearRight;
LatLng nearLeft = visibleRegion.nearLeft;

Location.distanceBetween(
(farLeft.latitude + nearLeft.latitude) / 2,
farLeft.longitude,
(farRight.latitude + nearRight.latitude) / 2,
farRight.longitude,
distanceWidth
);

Location.distanceBetween(
farRight.latitude,
(farRight.longitude + farLeft.longitude) / 2,
nearRight.latitude,
(nearRight.longitude + nearLeft.longitude) / 2,
distanceHeight
);

double radiusInMeters = Math.sqrt(Math.pow(distanceWidth[0], 2) + Math.pow(distanceHeight[0], 2)) / 2;
return radiusInMeters;
}

关于android - 谷歌地图获取缩放级别的可见区域半径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43892348/

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