在天地图中添加多边形及注册面的点击事件

简介: 在天地图中添加多边形及注册面的点击事件

思路


准备一些多边形坐标,然后在天地图上利用这些坐标形成面,在面上添加监听事件(比如鼠标移入该面后出现信息框)


知识点


Polygon类创建多边形覆盖物。

构造参数:Polygon(points:Array[,opts:PolygonOptions])

points:坐标数组。

opts:多边形的属性对象,请参考 PolygonOptions。更多参数请参考天地图文档


效果图


html部分


<body onLoad="mapTDTLoad()">
    <div id="typeMap">
        <div class="mestable">
            <div class="registerbtn">
                <div class="regcolor1"οnclick="addPolygonClick();"><p>开始注册</p></div>
                <div class="regcolor2"οnclick="removePolygonClick();"><p>完成注册</p></div>
            </div>
        </div>
    </div>
</body>


css部分


*{
  padding: 0;
  margin: 0;
  box-sizing: border-box;
}
body, html{
  width: 100%;
  height: 100%;
  font-family:"微软雅黑";
}
#typeMap{
  width: 100%;
  height: 100%;
}
#typeMap .mestable{
  /*float:left;*/
  top: 50px;
  right: 50px;
  position: absolute;
  z-index: 999;
  width: auto;
  box-shadow: 0 50px 50px rgba(10, 16, 20, 0.24), 0 0 30px rgba(10, 16, 20, 0.12);
  background-color: #8D8D8D;
  cursor: pointer;
  /*display: none;*/
}
#typeMap .mestable .registerbtn{
  padding: 5px 0;
  /*background-color: #D9D9D9;*/
  background-color: rgba(255,255,255,1);
  width: 165px;
  height: 50px;
  display: flex;
  justify-content: space-around;
  align-items: center;
}
#typeMap .mestable .registerbtn>div{
  padding: 0 5px;
  width: 60px;
  height: 30px;
  border-radius: 2px;
  box-shadow: 0 1px 0 rgba(255,255,255,0.34) inset,
              0 2px 0 -1px rgba(0,0,0,0.13),
              0 3px 0 -1px rgba(0,0,0,0.08),
              0 3px 13px -1px rgba(0,0,0,0.21);
}
#typeMap .mestable .registerbtn>div p{
  text-align: center;
  height: 30px;
  line-height: 30px;
  color: #ffffff;
}
#typeMap .mestable .registerbtn>div.regcolor1{
  background-color: #3498db;
}
/*#typeMap .mestable .registerbtn>div.regcolor1:focus{*/
/*  background-color: #fd9644;*/
/*}*/
#typeMap .mestable .registerbtn>div.regcolor2{
  background-color: #f1c40f;
}


js部分


var map,zoom = 17,polygon2;
function mapTDTLoad() {
  const imageURL = "http://t0.tianditu.gov.cn/img_w/wmts?" +
    "SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles" +
    "&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=你的秘钥";
  const imageURLT = "http://t0.tianditu.gov.cn/cia_w/wmts?" +
    "SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cia&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles" +
    "&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}" +
    "&tk=你的秘钥";
  //创建自定义图层对象
  const lay1 = new T.TileLayer(imageURL, {minZoom: 1, maxZoom: 18});
  const lay2 = new T.TileLayer(imageURLT, {minZoom: 1, maxZoom: 18});
  var config = {layers: [lay1, lay2]};
  map = new T.Map('typeMap', config);
  map.centerAndZoom(new T.LngLat(107.52292,22.35511), zoom);
  //禁用双击放大。
  map.disableDoubleClickZoom();
  //添加面覆盖物
  Polygons();
}
//添加面覆盖物
function Polygons() {
  var points2 = [];
  // points2.push(new T.LngLat());
  points2.push(new T.LngLat(107.52387,22.35681));
  points2.push(new T.LngLat(107.52345,22.35654));
  points2.push(new T.LngLat(107.52306,22.3563));
  points2.push(new T.LngLat(107.52279,22.35609));
  points2.push(new T.LngLat(107.52225,22.35561));
  points2.push(new T.LngLat(107.52284,22.35488));
  points2.push(new T.LngLat(107.52443,22.35597));
  config2 = {
    color: "#ffffff",
    // color: "#16a085",
    weight: 3,
    opacity: 0.5,
    // fillColor: "#eb3b5a",
    fillColor: "#16a085",
    fillOpacity: 0.5
  }
  polygon2 = new T.Polygon(points2, config2);
  //向地图上添加面
  map.addOverLay(polygon2);
}
function addPolygonClick(){
  //开始操作
  layer.msg('开始操作');
  // //移除面的点击事件,防止多次注册
  // removePolygonClick();
  //所有注册面的触发事件
  polygon2.addEventListener("click", tagging);
}
function removePolygonClick(){
  //移除面的注册事件
  polygon2.removeEventListener("click", tagging);
  // 完成操作
  layer.msg('完成操作');
}
//在面的覆盖物上添加标注信息
function tagging() {
  var lnglat = new T.LngLat(107.52303,22.35559);
  //创建信息窗口对象
  var infoWin = new T.InfoWindow();
  //设置信息窗口要显示的内容
  var Content =
    `
    <div id="win_box" style="height: auto; ">
      <table style=" width:300px;border-collapse: separate;font-size:14px;border-spacing:0 6px;table-layout:fixed;">
        <caption style="font-weight:bold;font-size:16px;text-align: left;border-bottom: #d1d8e0 1px solid">地块详情</caption>
        <tr><td style=" width: 20%;font-weight:bold;text-align:left;">地点:</td><td style="text-align:left;width:45%;word-break:keep-all;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">崇左市江州区渠留屯周边</td></tr>
        <tr><td style=" font-weight:bold;text-align:left;">类别:</td><td style="text-align:left;width:80%;word-break:keep-all;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">耕地</td></tr>
        <tr><td style=" font-weight:bold;text-align:left;">面积:</td><td style="text-align:left;width:80%;word-break:keep-all;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">22.5亩</td></tr>
        <tr><td style=" font-weight:bold;text-align:left;">种植类型:</td><td style="text-align:left;width:80%;word-break:keep-all;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">粤糖 55</td></tr>
        <tr><td style=" font-weight:bold;text-align:left;">种植时间:</td><td style="text-align:left;width:80%;word-break:keep-all;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">2019/02/04</td></tr>
        <tr><td style=" font-weight:bold;text-align:left;">联系人名:</td><td style="text-align:left;width:80%;word-break:keep-all;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">龙先生</td></tr>
        <tr><td style=" font-weight:bold;text-align:left;">联系电话:</td><td style="text-align:left;width:80%;word-break:keep-all;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">135****7823</td></tr>
        <tr><td style=" font-weight:bold;text-align:left;color: #fa8231;cursor: pointer" οnclick="massifExhibit()">最新情况:</td><td style="text-align:left;width:80%;word-break:keep-all;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;"><a href="http://www.tly.cloud/web/index.html#/index">更多内容</a></td></tr>
      </table>
    </div>
    `;
  infoWin.setContent(Content);
  infoWin.setOffset(new T.Point(0,-30))
  infoWin.setLngLat(lnglat);
  //向地图上添加信息窗口
  map.addOverLay(infoWin);
  polygon2.removeEventListener("click",PolygonClick);
}
function massifExhibit() {
  layer.open({
    type:2,
    title: false,
      content: `massiftype/rotat`,
    area: ['600px', '431px'],
  });
}
相关文章
|
JavaScript 前端开发
如何优雅的只在当前页面中覆盖ui库中组件的样式(vue的问题)
如何优雅的只在当前页面中覆盖ui库中组件的样式(vue的问题)
320 0
如何优雅的只在当前页面中覆盖ui库中组件的样式(vue的问题)
uniapp页面之间通信、传参、传值方法(父→传→子,子→传→父);获取被打开页面的数据→传→当前页面;当前页面的数据→传→被打开页面
uniapp页面之间通信、传参、传值方法(父→传→子,子→传→父);获取被打开页面的数据→传→当前页面;当前页面的数据→传→被打开页面
|
Web App开发 开发框架 前端开发
移动端window.open跳转链接时,iOS没有反应的问题
【10月更文挑战第9天】在移动端使用 `window.open` 跳转链接时,iOS 可能无响应,原因是 iOS 的安全策略和弹出窗口阻止功能。解决方法包括:确保在用户交互后触发 `window.open`,将目标设置为 `_self`,使用锚点链接模拟跳转,或利用专门的移动端框架。需综合考虑这些方案以优化用户体验。
2769 62
|
6月前
|
弹性计算 监控 安全
等保2.0合规实践:利用阿里云产品快速满足三级等保要求
网络安全等级保护2.0是企业必须履行的法定责任。上云企业可依托阿里云“责任共担”模型,继承其三级等保合规基座,聚焦租户侧安全建设。通过VPC、云防火墙、WAF、云安全中心、RAM、SLS等产品,体系化构建“一个中心、三重防护”的云上合规架构,实现快速、低成本过保,并将合规转化为持续安全能力。(238字)
|
资源调度 JavaScript API
【Vue2 / Vue3】 一个贼nb,贼强大的自定义打印插件
【Vue2 / Vue3】 一个贼nb,贼强大的自定义打印插件
13694 120
|
JavaScript
Vue路由传参实战指南:三种常用方法示例演示
Vue路由传参实战指南:三种常用方法示例演示
1038 0
|
移动开发 JavaScript 前端开发
UniApp H5 跨域代理配置并使用(配置manifest.json、vue.config.js)
这篇文章介绍了在UniApp H5项目中处理跨域问题的两种方法:通过修改manifest.json文件配置h5设置,或在项目根目录创建vue.config.js文件进行代理配置,并提供了具体的配置代码示例。
UniApp H5 跨域代理配置并使用(配置manifest.json、vue.config.js)
|
前端开发 JavaScript
uniapp纯CSS实现圆形进度条组件
uniapp纯CSS实现圆形进度条组件
968 0
|
JavaScript
cnpm 的安装与使用
本文介绍了npm和cnpm的概念、安装nodejs的步骤,以及cnpm的安装和使用方法,提供了通过配置npm使用中国镜像源来加速包下载的替代方案,并说明了如何恢复npm默认仓库地址。
cnpm 的安装与使用
|
JavaScript 测试技术 API
如何从 Vue 2 无痛升级到 Vue 3,一文搞定!
如何从 Vue 2 无痛升级到 Vue 3,一文搞定!
13708 8