百度地图API(四)电子围栏—DrawingManager

本来这个需求就是一开始没明确,不过今天早上被叫去讨论这个功能的具体需求了,所以从新改造了昨天的画图,这是昨天的
百度地图API(三)电子围栏—地图点击事件创建多边形

话不多说,开始今天的画图吧

引入工具类(DrawingManager)
<link rel="stylesheet" href=".asset/bMap/sdk/tools/DrawingManager_min.css">
<script type="text/javascript" src=".asset/bMap/sdk/tools/DrawingManager_min.js"></script>
业务代码
class drawFence {
    constructor(props) {
        this.map = props;
        //绘图工具
        this.drawingManager

        this.styleOptions = {
            strokeColor: "red", //边线颜色。
            fillColor: "red", //填充颜色。当参数为空时,圆形将没有填充效果。
            strokeWeight: 1, //边线的宽度,以像素为单位。
            strokeOpacity: 0.3, //边线透明度,取值范围0 - 1。
            fillOpacity: 0.3, //填充的透明度,取值范围0 - 1。
            strokeStyle: 'solid' //边线的样式,solid或dashed。
        };
        this.init()
    }
    init() {
        // 实例化鼠标绘制工具
        var drawingManager = new BMapLib.DrawingManager(map, {
            isOpen: false, //是否开启绘制模式
            enableDrawingTool: true, //是否显示工具栏
            drawingToolOptions: {
                anchor: BMAP_ANCHOR_TOP_RIGHT, //位置
                offset: new BMap.Size(5, 5), //偏离值
            },
            circleOptions: this.styleOptions //圆的样式
            polylineOptions: this.styleOptions, //线的样式
            polygonOptions: this.styleOptions, //多边形的样式
            rectangleOptions: this.styleOptions //矩形的样式

        });
        //添加鼠标绘制工具监听事件,用于获取绘制结果
        this.drawingManager.addEventListener('overlaycomplete', this.overlaycomplete.bind(this));
    }
    //获取绘制结果
    overlaycomplete(e) {
        console.log(this.drawingManager)
        //获取绘制类型
        let drawingMode = e.drawingMode;
        //边界点
        let path = e.overlay.getPath();
        //根据不同的绘制类型进行不同的操作
        const drawingModeOperate = {
            'circle': (e) = > { //绘制类型为圆
                //获取中心点
                let centerPoint = e.overlay.getCenter();
                //获取边界随便一个点和中心点距离就是半径
                let radius = this.drawingManager._map.getDistance(centerPoint, path[0]).toFixed(2);
                // console.log(centerPoint,radius);
            },
            'polygon': (e) = > { //绘制类型为多边形
                let points = path;
                // console.log(points)
            },
            'polyline': (e) = > {
                let points = path;
            }
            if (drawingModeOperate[drawingMode]) drawingModeOperate[drawingMode](e)
            this.close(); //关闭绘图
        }
    }
    //开启绘图
    open() {
        this.drawingManager.open()
    }
    //关闭绘图
    close() {
        this.drawingManager.close()
    }
    //画图(多种格式)
    draw(type) {
        this.drawingManager._setDrawingMode(type)
    }
    //画多边形
    drawPolygon() {
        this.open()
        this.draw('polygon')
    }
    //画圆
    drawCircle() {
        this.open()
        this.draw('circle')
    }
    //画线
    drawLine() {
        this.open()
        this.draw('polyline')
    }
}

使用
main.js

// 注册电子围栏画图
 _fence = new fence(map)
 
 function addCirCleFence() { //画圆
    _fence.drawCircle()
}
function addPolygonFence() { //画多边形
    _fence.drawPolygon()
}
function addLineFence() { //画线
    _fence.drawLine()
}

因为判定是否在范围内改为后台判定,我这边就不写了,上一个博客也有。后续还有比较复杂的业务需求,这只是简单的把图画出来啦

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
在Spring Boot中整合地图API划分电子围栏的过程可以分为以下几个步骤: 1. 首先,你需要引入相应的地图API依赖,这可以通过在项目的pom.xml文件中添加相关依赖来实现。例如,如果你想使用高德地图API,可以添加以下依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>spring-boot-starter-amap</artifactId> <version>1.0.0</version> </dependency> ``` 2. 接下来,你需要在Spring Boot的配置文件中配置地图API的相关参数。这些参数包括地图API的密钥、服务URL等。你可以在配置文件中添加以下内容: ```properties # 高德地图API配置 spring.amap.key=your_amap_api_key spring.amap.url=your_amap_api_url ``` 3. 在你的应用程序中,你可以创建一个Controller来处理电子围栏相关的请求。这个Controller可以包含一个接收坐标信息和围栏半径的API接口。你可以使用注解来标识这个接口,并通过参数注入地图API的相关服务。 ```java @RestController @RequestMapping("/fence") public class FenceController { @Autowired private AMapService aMapService; @PostMapping("/create") public String createFence(@RequestParam("longitude") double longitude, @RequestParam("latitude") double latitude, @RequestParam("radius") int radius) { // 调用地图API的方法来创建电子围栏 String result = aMapService.createFence(longitude, latitude, radius); return result; } } ``` 4. 最后,你可以创建一个地图API的服务类,用于与地图API进行交互。这个服务类可以使用地图API提供的方法来创建电子围栏。 ```java @Service public class AMapService { @Value("${spring.amap.key}") private String apiKey; @Value("${spring.amap.url}") private String apiUrl; public String createFence(double longitude, double latitude, int radius) { // 调用地图API的接口来创建电子围栏,并返回结果 String result = "调用地图API接口创建电子围栏"; return result; } } ``` 以上是在Spring Boot中整合地图API划分电子围栏的基本步骤。你可以根据具体的需求和选择的地图API来自定义和扩展这个过程。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [IT词汇量](https://blog.csdn.net/nshkfhwr/article/details/131284941)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值