一:如果是直接定位到当前位置,可以参考demo中的小蓝点功能。
二:如果是根据得到的经纬度信息来定位到具体信息,可使用下面的API
aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(newLatLng(34.341568,108.940174), 18));// 设置指定的可视区域地图,其中18代表的是缩放级别
如果是单纯的设置缩放级别,可用下面的API
aMap.moveCamera(CameraUpdateFactory.zoomTo(18));
记住带在地图初始化的时候调用,而非定位成功后调用。
三:距离当前经纬度位置实际距离1000米的长方形区域四个角对应的经纬度求法,并判断某个经纬度是否在当前所画的长方形区域。。
//centerLatLng表示中心点,range表示距离中心点的实际距离(米为单位),
//这里可以根据需求进行适当的变换获取不同的点,但一定是要有规律的长方形,如果是不规则多边形,那么就比较麻烦,最好还是后台直接传递过来多边形的顶点经纬度来画区域。
private void adjustCamera(LatLng centerLatLng,int range) { //http://www.eoeandroid.com/blog-1107295-47621.html //当前缩放级别下的比例尺 //"每像素代表" + scale + "米" float scale = aMap.getScalePerPixel(); //代表range(米)的像素数量 int pixel = Math.round(range / scale); //小范围,小缩放级别(比例尺较大),有精度损失 Projection projection = aMap.getProjection(); //将地图的中心点,转换为屏幕上的点 Point center = projection.toScreenLocation(centerLatLng); //获取距离中心点为pixel像素的左、右两点(屏幕上的点 Point right = new Point(center.x + pixel, center.y); Point left = new Point(center.x - pixel, center.y); Point top = new Point(center.x,center.y + pixel); Point botoom = new Point(center.x,center.y - pixel); //将屏幕上的点转换为地图上的点 LatLng rightLatlng = projection.fromScreenLocation(right); LatLng LeftLatlng = projection.fromScreenLocation(left); LatLng TopLatlng = projection.fromScreenLocation(top); LatLng BotoomLatlng = projection.fromScreenLocation(botoom); System.out.println("转换hou的经纬度信息为:" + rightLatlng.latitude + "," + rightLatlng.longitude); System.out.println("转换后的距离为:" + AMapUtils.calculateLineDistance(new LatLng(31.050307,121.703118), rightLatlng)); // LatLngBounds bounds = LatLngBounds.builder().include(rightLatlng).include(LeftLatlng).build(); // aMap.getMapScreenMarkers(); //调整可视范围 //aMap.moveCamera(CameraUpdateFactory.newLatLngBounds(LatLngBounds.builder().include(rightLatlng).include(LeftLatlng).build(), 10)); } //下面的代码作用是:将上面计算出来的长方形上下左右四个点利用高德API画出来一个长方形区域,并判断某个经纬度是否在该长方形区域内。方便我们做其他的逻辑处理。 List<LatLng> latLngs = new ArrayList<>(); // 这里添加点的顺序也是有讲究的。左上右下正好是一个长方形,而如果是左右上下,那么就是两个三角形对着的效果。 latLngs.add(LeftLatlng); latLngs.add(TopLatlng); latLngs.add(rightLatlng); latLngs.add(BotoomLatlng); Polygon polygon = aMap.addPolygon(new PolygonOptions().addAll(latLngs).strokeWidth(1) .strokeColor(Color.argb(50, 1, 1, 1)) .fillColor(Color.argb(0, 0, 0, 0))); //判断多边形是否包含某个经纬度点,true表示包含,false表示不包含 boolean flag = polygon.contains(new LatLng(31.050307,121.703118)); System.out.println("flags:" + flag); }