Android:如何将地图视图的缩放级别设置为我当前位置周围1公里的半径?(Android: How do I set the zoom level of map view to 1 km radiu

编程入门 行业动态 更新时间:2024-10-25 04:27:27
Android:如何将地图视图的缩放级别设置为我当前位置周围1公里的半径?(Android: How do I set the zoom level of map view to 1 km radius around my current location?)

我想要将地图视图放大到1公里半径,但不能弄清楚如何?

该文档说,缩放级别1将地球赤道映射到256像素。 那么如何计算需要设置的缩放级别,以便地图视图显示1KM半径的区域?

更新: 阅读几篇博客文章后,我写了以下代码:

private int calculateZoomLevel() { double equatorLength = 6378140; // in meters double widthInPixels = screenWidth; double metersPerPixel = equatorLength / 256; int zoomLevel = 1; while ((metersPerPixel * widthInPixels) > 2000) { metersPerPixel /= 2; ++zoomLevel; } Log.i("ADNAN", "zoom level = "+zoomLevel); return zoomLevel; }

这个想法是,首先我计算缩放级别1中的每像素的米数 ,根据谷歌显示赤道地球使用256个像素。 现在每个随后的缩放级别放大2的等级,所以每个缩放级别每像素的一半米。 我做到这一点,直到我有一个缩放级别, 每米像素乘以屏幕宽度使我小于2000,即2公里。

但我不认为我得到的缩放级别显示2Km半径的地图。 有人可以告诉我我在这里做错了吗?

I want to set the map view zoomed to 1km radius but cant figure out how?

The doc says that the zoom level 1 will map earths equator to 256 pixels. So how do I calculate which zoom level I need to set so that the map view shows area in 1KM radius?

UPDATE: After reading a few blog posts I wrote the following code:

private int calculateZoomLevel() { double equatorLength = 6378140; // in meters double widthInPixels = screenWidth; double metersPerPixel = equatorLength / 256; int zoomLevel = 1; while ((metersPerPixel * widthInPixels) > 2000) { metersPerPixel /= 2; ++zoomLevel; } Log.i("ADNAN", "zoom level = "+zoomLevel); return zoomLevel; }

The idea is that first I calculate Meters per pixel in the zoom level 1, which according to google shows equator of earth using 256 pixels. Now every subsequent zoom level magnifies by a level of 2 so I half the meters per pixel for every zoom level. I do this until I have a zoom level where meters per pixel multiplied by the screen width gives me less than 2000 i.e 2 Km across.

But I dont think that the zoom level I am getting is showing the map of 2Km radius. Can some one tell me what I am doing wrong here?

最满意答案

虽然这个答案是合乎逻辑的,我发现它工作,但结果不准确我不知道为什么,但我厌倦了这种方法,这种技术是更准确的。

1)在所需半径的物体上做一个圆

Circle circle = mGoogleMap.addCircle(new CircleOptions().center(new LatLng(latitude, longitude)).radius(getRadiusInMeters()).strokeColor(Color.RED)); circle.setVisible(true); getZoomLevel(circle);

2)将该对象传递给此功能并设置缩放级别以下是一个链接

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; }

The following code is what ended up using. Given the screen width and the fact that at zoom level 1 the equator of Earth is 256 pixels long and every subsequent zoom level doubles the number of pixels needed to represent earths equator, the following function returns the zoom level where the screen will show an area of 2Km width.

private int calculateZoomLevel(int screenWidth) { double equatorLength = 40075004; // in meters double widthInPixels = screenWidth; double metersPerPixel = equatorLength / 256; int zoomLevel = 1; while ((metersPerPixel * widthInPixels) > 2000) { metersPerPixel /= 2; ++zoomLevel; } Log.i("ADNAN", "zoom level = "+zoomLevel); return zoomLevel; }

更多推荐

本文发布于:2023-07-15 19:03:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1117558.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:当前位置   为我   缩放   半径   视图

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!