百度地图API(三)电子围栏—地图点击事件创建多边形

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

分析

电子围栏:顾名思义就是一个多边形,然后终端或者其他什么东西在这个围栏中,如果离开围栏则通知离开了围栏,而做这个电子围栏应该就是鼠标点击多个点然后形成一个多边形。所以我们可以拆分业务

  1. 地图点击连线形成多边形
  2. 点击保存不再点击连线并将最新的围栏数据传给后台
  3. 点击创建重新创建电子围栏
  4. 显示服务器保存的数据的围栏
  5. 判定终端是否在围栏内部

下面是代码,分析都在注释里面了

class fence {
   constructor(props) {
       //传入map对象
       this.map = props;
       //点数据
       this.points = [];
       //绘制多边形用的数据
       this.bPoints = []
       //多边形
       this.polyLine;
       //因为使用addEventListener绑定的事件使用了bind,所以移除不了事件就定一个key吧
       this.canDraw;
   }
   add() {
       this.init()
   } //重新画图初始化
   init() {
       //注意this指向
       this.canDraw = true;
       this.points = []; //重新
       this.bPoints = [];
       this.remove()
       this.map.setDefaultCursor("crosshair");
       this.map.addEventListener("click", this.overlayerComplete.bind(this), false);
   }
   save() {
       this.map.setDefaultCursor("default");
       this.canDraw = false; //将数据传给后台--------- this.points
   }
   show(points) {
       points.forEach(element = > {
           let[lng, lat] = element;
           let Bpoint = new BMap.Point(lng, lat)
           this.bPoints.push(Bpoint) this.drawLine()
       });
   }
   overlayerComplete(e) {
       if (!this.canDraw) return;
       let[lng, lat] = [e.point.lng, e.point.lat];
       let point = [e.point.lng, e.point.lat];
       this.points.push(point) //添加进点中
       this.bPoints.push(Bpoint) //添加进画多边形
       //画线
       this.drawLine()
   }
   remove() { //删除电子围栏 多边形+
       var overLayers = this.map.getOverlays();
       for (var item of overLayers) {
           if (item.fence) {
               this.map.removeOverlay(item);
           }
       }
   }
   inFence(point) {
       let {
           lng,
           lat
       } = point;
       let Bpoint = new BMap.Point(lng, lat)
       let result = 3;
       if (_fence.polyLine) {
           result = BMapLib.GeoUtils.isPointInPolygon(Bpoint, _
           }
           return result;
           fence.polyLine) == true ? 1 : 2;
   }
   return result;
   }
}

使用

// 注册电子围栏画图
 _fence = new fence(map)
//显示电子围栏

function showFence() {
    var points = [
            [113.961565, 22.549194], [113.969255, 22.551998], [113.971339, 22.547659], [113.97195, 22.544588], [113.965338,
                22.544788], [113.961637, 22.549261]]
    _fence.show(points)
}
function addFence() {
    _fence.init()
}
function saveFence() {
    _fence.save()
} //测试是否在电子围栏中

function isOver() {
    var point = {
        lng: '113.969255',
        lat: '22.551998',
    }
    const result = _fence.inFence(point) let a = {
        1: () = > {
            layer.msg('终端在围栏中 ')
        },
        2: () = > {
            layer.msg('终端不在围栏中 ')
        },
        3: () = > {
            layer.msg('没有电子围栏')
        }
    }
    a[result]()
}
在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 ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值