高德地图之添加遮盖物

第一篇帖子已经把基本的配置和基础定位完成,这一篇主要是在图层上添加遮盖物,包括绘制点、线、圆形遮盖物、椭圆遮盖物和矩形、以及多边形遮盖物

绘制点遮盖物

 /**
         *  绘制点遮盖物
         */
        LatLng latLng = new LatLng(39.906901, 116.397972);
        aMap.addMarker(new MarkerOptions().position(latLng).title("北京").snippet("DefaultMarker"));

设置自定义遮盖物

 /**
         *  设置自定义遮盖物
         */
        MarkerOptions markerOption = new MarkerOptions();
        markerOption.position(latLng);
        markerOption.title("北京市").snippet("首都");
        markerOption.draggable(true);//设置Marker可拖动
        markerOption.icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory
                .decodeResource(getResources(), R.mipmap.badcar)));
        // 将Marker设置为贴地显示,可以双指下拉地图查看效果
        markerOption.setFlat(true);//设置marker平贴地图效果
        Marker marker = aMap.addMarker(markerOption);
添加marker动画

  /**
         * 添加marker动画
         */
        Animation animation = new RotateAnimation(marker.getRotateAngle(), marker.getRotateAngle() + 180, 0, 0, 0);
        long duration = 1000L;
        animation.setDuration(duration);
        animation.setInterpolator(new LinearInterpolator());
        marker.setAnimation(animation);
        marker.startAnimation();

marker点击事件

        // 定义 Marker 点击事件监听
        AMap.OnMarkerClickListener markerClickListener = new AMap.OnMarkerClickListener() {
            // marker 对象被点击时回调的接口
            // 返回 true 则表示接口已响应事件,否则返回false
            @Override
            public boolean onMarkerClick(Marker marker) {
                Toast.makeText(MainActivity.this, "点击marker了", Toast.LENGTH_SHORT);
                return false;
            }
        };
        // 绑定 Marker 被点击事件
        aMap.setOnMarkerClickListener(markerClickListener);
marker拖拽事件

// 定义 Marker拖拽的监听
        AMap.OnMarkerDragListener markerDragListener = new AMap.OnMarkerDragListener() {

            // 当marker开始被拖动时回调此方法, 这个marker的位置可以通过getPosition()方法返回。
            // 这个位置可能与拖动的之前的marker位置不一样。
            // marker 被拖动的marker对象。
            @Override
            public void onMarkerDragStart(Marker arg0) {
                Log.e("tag", "开始drag");

            }

            // 在marker拖动完成后回调此方法, 这个marker的位置可以通过getPosition()方法返回。
            // 这个位置可能与拖动的之前的marker位置不一样。
            // marker 被拖动的marker对象。
            @Override
            public void onMarkerDragEnd(Marker arg0) {
                Log.e("tag", "拖拽结束");

            }

            // 在marker拖动过程中回调此方法, 这个marker的位置可以通过getPosition()方法返回。
            // 这个位置可能与拖动的之前的marker位置不一样。
            // marker 被拖动的marker对象。
            @Override
            public void onMarkerDrag(Marker arg0) {
                Log.e("tag", "拖拽中");

            }
        };
        // 绑定marker拖拽事件
        aMap.setOnMarkerDragListener(markerDragListener);

        //设置infoWindow
        AMap.OnInfoWindowClickListener listener = new AMap.OnInfoWindowClickListener() {

            @Override
            public void onInfoWindowClick(Marker arg0) {

                arg0.setTitle("infowindow clicked");
            }
        };
        //绑定信息窗点击事件
        aMap.setOnInfoWindowClickListener(listener);
划线

        /**
         * 划线
         */
        List<LatLng> latLngs = new ArrayList<>();
        latLngs.add(new LatLng(39.999391, 116.135972));
        latLngs.add(new LatLng(39.898323, 116.057694));
        aMap.addPolyline(new PolylineOptions().
                addAll(latLngs).width(10).color(Color.argb(255, 1, 1, 1)));

画圆

 /**
         * 绘制圆
         */
        LatLng latLng2 = new LatLng(39.984059, 116.307771);
        aMap.addCircle(new CircleOptions().
                center(latLng2).
                radius(1000).
                fillColor(Color.argb(200, 1, 1, 1)).
                strokeColor(Color.argb(200, 1, 1, 1)).
                strokeWidth(15));

绘制椭圆

 /**
         * 绘制椭圆
         */
        aMap.addPolygon(new PolygonOptions()
                .addAll(createRectangle(new LatLng(40.238068, 116.501654), 1, 1))
                .fillColor(Color.TRANSPARENT).strokeColor(Color.RED).strokeWidth(1));
        PolygonOptions options = new PolygonOptions();
        int numPoints = 400;
        float semiHorizontalAxis = 5f;
        float semiVerticalAxis = 2.5f;
        double phase = 2 * Math.PI / numPoints;
        for (int i = 0; i <= numPoints; i++) {
            options.add(new LatLng(40.238068
                    + semiVerticalAxis * Math.sin(i * phase),
                    116.501654 + semiHorizontalAxis
                            * Math.cos(i * phase)));
        }
绘制椭圆
        aMap.addPolygon(options.strokeWidth(25)
                .strokeColor(Color.argb(50, 1, 1, 1))
                .fillColor(Color.argb(50, 1, 1, 1)));
 /**
     * 生成一个长方形的四个坐标点
     */
    private List<LatLng> createRectangle(LatLng center, double halfWidth,
                                         double halfHeight) {
        List<LatLng> latLngs = new ArrayList<>();
        latLngs.add(new LatLng(center.latitude - halfHeight, center.longitude - halfWidth));
        latLngs.add(new LatLng(center.latitude - halfHeight, center.longitude + halfWidth));
        latLngs.add(new LatLng(center.latitude + halfHeight, center.longitude + halfWidth));
        latLngs.add(new LatLng(center.latitude + halfHeight, center.longitude - halfWidth));
        return latLngs;
    }


绘制不规则多边形

        /**
         *  绘制不规则多边形
         */
        // 定义多边形的5个点点坐标
        LatLng latLng11 = new LatLng(40.742467, 116.842785);
        LatLng latLng12 = new LatLng(39.893433, 116.124035);
        LatLng latLng13 = new LatLng(39.058738, 116.463879);
        LatLng latLng14 = new LatLng(39.873426, 116.838879);
        LatLng latLng15 = new LatLng(40.8214661, 116.788097);

      // 声明 多边形参数对象
        PolygonOptions polygonOptions = new PolygonOptions();
     // 添加 多边形的每个顶点(顺序添加)
        polygonOptions.add(latLng11, latLng12, latLng13, latLng14, latLng15);
        polygonOptions.strokeWidth(15) // 多边形的边框
                .strokeColor(Color.argb(80, 1, 1, 1)) // 边框颜色
                .fillColor(Color.argb(80, 1, 1, 1));   // 多边形的填充色
        aMap.addPolygon(polygonOptions);
点平滑移动

 /**
         * 点平滑移动
         */
        // 获取轨迹坐标点
        List<LatLng> points=new ArrayList<>();
        points.add(latLng11);
        points.add(latLng12);
        points.add(latLng13);
        points.add(latLng14);
        points.add(latLng15);
        LatLngBounds bounds = new LatLngBounds(points.get(0), points.get(points.size() - 2));
        aMap.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, 50));
        SmoothMoveMarker smoothMarker = new SmoothMoveMarker(aMap);
       // 设置滑动的图标
        smoothMarker.setDescriptor(BitmapDescriptorFactory.fromResource(R.mipmap.navi_map_gps_locked));

        LatLng drivePoint = points.get(0);
        Pair<Integer, LatLng> pair = SpatialRelationUtil.calShortestDistancePoint(points, drivePoint);
        points.set(pair.first, drivePoint);
        List<LatLng> subList = points.subList(pair.first, points.size());

         // 设置滑动的轨迹左边点
        smoothMarker.setPoints(subList);
         // 设置滑动的总时间
        smoothMarker.setTotalDuration(40);
        // 开始滑动
        smoothMarker.startSmoothMove();
绘制海量点

  /**
         * 设置海量点
         */
        MultiPointOverlayOptions overlayOptions = new MultiPointOverlayOptions();
        overlayOptions.icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(),R.mipmap.goodcar)));//设置图标
        overlayOptions.anchor(0.5f,0.5f); //设置锚点

        multiPointOverlay = aMap.addMultiPointOverlay(overlayOptions);

        List<MultiPointItem> list = new ArrayList<>();
            //创建MultiPointItem存放,海量点中某单个点的位置及其他信息
            MultiPointItem multiPointItem = new MultiPointItem(latLng);
            MultiPointItem multiPointItem2 = new MultiPointItem(latLng12);
            MultiPointItem multiPointItem3 = new MultiPointItem(latLng13);
            MultiPointItem multiPointItem4 = new MultiPointItem(latLng14);
            list.add(multiPointItem);
            list.add(multiPointItem2);
            list.add(multiPointItem3);
            list.add(multiPointItem4);
        multiPointOverlay.setItems(list);//将规范化的点集交给海量点管理对象设置,待加载完毕即可看到海量点信息

        // 定义海量点点击事件
        AMap.OnMultiPointClickListener multiPointClickListener = new AMap.OnMultiPointClickListener() {
            // 海量点中某一点被点击时回调的接口
            // 返回 true 则表示接口已响应事件,否则返回false
            @Override
            public boolean onPointClick(MultiPointItem pointItem) {
                Log.e("tag","海量点数据点击"+pointItem.getLatLng());
                return false;
            }
        };
        // 绑定海量点点击事件
        aMap.setOnMultiPointClickListener(multiPointClickListener);


    }






  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
高德地图中,要给圆形覆盖添加内容,可以使用 `AMap.CircleMarker` 类来创建圆形覆盖,并结合自定义的 HTML 内容来实现。下面是一个示例代码: ```javascript // 创建地图对象 var map = new AMap.Map('mapContainer'); // 创建圆形覆盖 var circle = new AMap.CircleMarker({ center: [lng, lat], // 圆心位置,lng为经度,lat为纬度 radius: 100, // 半径,单位为像素 fillColor: '#FF0000', // 填充颜色 strokeColor: '#000000', // 描边颜色 strokeWeight: 2 // 描边宽度 }); // 创建自定义的 HTML 内容 var content = '<div class="circle-content">这是一个圆形覆盖</div>'; // 将自定义的 HTML 内容添加到圆形覆盖上 circle.setContent(content); // 将圆形覆盖添加到地图上 map.add(circle); ``` 在上述代码中,我们首先创建了一个地图对象,并将其放置在 id 为 "mapContainer" 的 DOM 元素中。然后,通过 `new AMap.CircleMarker()` 来创建一个圆形覆盖,设置了圆心位置、半径、填充颜色、描边颜色和描边宽度等属性。 接下来,我们创建了一个自定义的 HTML 内容,可以根据需要自定义样式和内容。然后,通过调用 `circle.setContent(content)` 将自定义的 HTML 内容添加到圆形覆盖上。 最后,通过调用 `map.add(circle)` 将圆形覆盖添加到地图上进行显示。 您可以根据实际需求,修改圆形覆盖的属性和自定义的 HTML 内容,来满足您的要求。 希望以上信息对您有所帮助!如果您有任何其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值