将 Google 地图缩放到 android 中以英里为单位的特定半径
Zooming Google map to specific radius in miles in android
我想 zoom
Google map
以英里为单位的特定半径,例如 10 miles/20 miles/30 英里等,根据我在 android 中的条件。
我需要的是从当前经纬度点绘制一个特定半径(10/20/30.. 英里)的圆,并将地图缩放到我绘制半径圆的特定英里。
我可以指出我现在的位置,画圈。但是我无法仅将地图缩放到所需的半径英里(圆应该以我当前位置为中心在指定英里的屏幕上聚焦)。
目前我正在使用以下代码进行缩放:
gooMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(selectedLat, selectedLong), 15));
gooMap.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);
Log.e("Circle Lat Long:", selectedLat + ", " + selectedLong);
circle.remove();
circle = gooMap.addCircle(new CircleOptions()
.center(new LatLng(selectedLat, selectedLong))
.radius(iMiles * 1609.34) // Converting Miles into Meters...
.strokeColor(Color.RED)
.strokeWidth(5));
circle.isVisible();
我知道将缩放级别设置为 15 不会将地图缩放到所需的英里数。但我需要缩放地图以达到所需的英里半径。我怎样才能实现它。任何人都可以帮助我吗?
编辑:- 添加的图片详细说明了我的需要。
Image_1:- 当我将半径设置为 10 英里时,地图应如图所示缩放。
Image_2 当我将半径设置为 50 英里时,地图应该如图所示缩放。
请查看地图位置的差异以分析我需要的缩放级别。
提前致谢。
您需要计算刷新视图时屏幕的距离。我不太熟悉新的 API 和视图,但像这样的东西应该可以工作:
LatLngBounds bounds = map.getProjection().getVisibleRegion().latLngBounds;
double llNeLat = bounds.northeast.latitude;
double llSwLat = bounds.southwest.latitude;
double llNeLng = bounds.northeast.longitude;
double llSwLng = bounds.southwest.longitude;
float results[] = new float[5];
Location.distanceBetween(llNeLat, llNeLng, llSwLat, llSwLng, results);
float radius = results[0];
// radius is distance top right to bottom left on screen in metres
// so use maybe 3/4 of this, then conert your miles to that value
// in metres
然后将该值添加到 addCircle 调用
我得到了相同的解决方案,这是一个:
// Zoom in, animating the camera.
double iMeter = iMiles * 1609.34;
circle.remove();
circle = gooMap.addCircle(new CircleOptions()
.center(new LatLng(selectedLat, selectedLong))
.radius(iMeter) // Converting Miles into Meters...
.strokeColor(Color.RED)
.strokeWidth(5));
circle.isVisible();
float currentZoomLevel = getZoomLevel(circle);
float animateZomm = currentZoomLevel + 5;
Log.e("Zoom Level:", currentZoomLevel + "");
Log.e("Zoom Level Animate:", animateZomm + "");
gooMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(selectedLat, selectedLong), animateZomm));
gooMap.animateCamera(CameraUpdateFactory.zoomTo(currentZoomLevel), 2000, null);
Log.e("Circle Lat Long:", selectedLat + ", " + selectedLong);
我们根据设备计算缩放级别的方法如下:
public float getZoomLevel(Circle circle) {
float zoomLevel=0;
if (circle != null){
double radius = circle.getRadius();
double scale = radius / 500;
zoomLevel =(int) (16 - Math.log(scale) / Math.log(2));
}
return zoomLevel +.5f;
}
我想 zoom
Google map
以英里为单位的特定半径,例如 10 miles/20 miles/30 英里等,根据我在 android 中的条件。
我需要的是从当前经纬度点绘制一个特定半径(10/20/30.. 英里)的圆,并将地图缩放到我绘制半径圆的特定英里。
我可以指出我现在的位置,画圈。但是我无法仅将地图缩放到所需的半径英里(圆应该以我当前位置为中心在指定英里的屏幕上聚焦)。
目前我正在使用以下代码进行缩放:
gooMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(selectedLat, selectedLong), 15));
gooMap.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);
Log.e("Circle Lat Long:", selectedLat + ", " + selectedLong);
circle.remove();
circle = gooMap.addCircle(new CircleOptions()
.center(new LatLng(selectedLat, selectedLong))
.radius(iMiles * 1609.34) // Converting Miles into Meters...
.strokeColor(Color.RED)
.strokeWidth(5));
circle.isVisible();
我知道将缩放级别设置为 15 不会将地图缩放到所需的英里数。但我需要缩放地图以达到所需的英里半径。我怎样才能实现它。任何人都可以帮助我吗?
编辑:- 添加的图片详细说明了我的需要。
Image_1:- 当我将半径设置为 10 英里时,地图应如图所示缩放。
Image_2 当我将半径设置为 50 英里时,地图应该如图所示缩放。
请查看地图位置的差异以分析我需要的缩放级别。
您需要计算刷新视图时屏幕的距离。我不太熟悉新的 API 和视图,但像这样的东西应该可以工作:
LatLngBounds bounds = map.getProjection().getVisibleRegion().latLngBounds;
double llNeLat = bounds.northeast.latitude;
double llSwLat = bounds.southwest.latitude;
double llNeLng = bounds.northeast.longitude;
double llSwLng = bounds.southwest.longitude;
float results[] = new float[5];
Location.distanceBetween(llNeLat, llNeLng, llSwLat, llSwLng, results);
float radius = results[0];
// radius is distance top right to bottom left on screen in metres
// so use maybe 3/4 of this, then conert your miles to that value
// in metres
然后将该值添加到 addCircle 调用
我得到了相同的解决方案,这是一个:
// Zoom in, animating the camera.
double iMeter = iMiles * 1609.34;
circle.remove();
circle = gooMap.addCircle(new CircleOptions()
.center(new LatLng(selectedLat, selectedLong))
.radius(iMeter) // Converting Miles into Meters...
.strokeColor(Color.RED)
.strokeWidth(5));
circle.isVisible();
float currentZoomLevel = getZoomLevel(circle);
float animateZomm = currentZoomLevel + 5;
Log.e("Zoom Level:", currentZoomLevel + "");
Log.e("Zoom Level Animate:", animateZomm + "");
gooMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(selectedLat, selectedLong), animateZomm));
gooMap.animateCamera(CameraUpdateFactory.zoomTo(currentZoomLevel), 2000, null);
Log.e("Circle Lat Long:", selectedLat + ", " + selectedLong);
我们根据设备计算缩放级别的方法如下:
public float getZoomLevel(Circle circle) {
float zoomLevel=0;
if (circle != null){
double radius = circle.getRadius();
double scale = radius / 500;
zoomLevel =(int) (16 - Math.log(scale) / Math.log(2));
}
return zoomLevel +.5f;
}