高德地图定位相关API

一:如果是直接定位到当前位置,可以参考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);
    }


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值