vue 接入天地图并且在地图上画基站扇形覆盖物

vue接入天地图倒是不难,但是要在地图上画扇形倒是有点点麻烦。
为什么选择天地图呢,因为百度地图或者是高德地图在定位的时候都会使用自家的算法在经纬度信息上进行加密,所以说与实际有很大的差距,但是天地图比较专业,当然也有瑕疵了,在天地图开发过程中就会发现,呵呵,个性化的东西就是不如商业气息浓厚的百度地图做的精致。

vue接入天地图

天地图官网

天地图开发者中心

其实天地图和百度地图的用法类似,根据官方提供的文档和案例可是实现很多的功能,然后在vue里面使用的话也很简单。

首先需要开发者创建一个应用,然后获取一个应用的 token。

然后就简单了,只需要在 vue 项目的 index.html 文件中引入天地图。

<script src="https://api.tianditu.gov.cn/api?v=4.0&tk=这里是你申请的key" type="text/javascript"></script>

好了,引完了,就可以直接开发了。

创建一张天地图地图

首先在我们需要创建地图的页面添加一个div用来放置地图。

<div id="mapDiv"></div>

注意:这个div需要设置高度和宽度,否则地图显示不出来哈!

然后写ts代码就可以了,会vue的话看得懂,有些声明自己声明一下,我这里写关键代码哈。

initMap() {map = new T.Map("mapDiv");map.centerAndZoom(new T.LngLat(116.40769, 39.89945), 15); //地图的初始化中心点,此为北京的经纬度map.setMinZoom(5);   // 设置地图缩放比map.setMaxZoom(18);   // 设置地图缩放比
}

这样,地图就展示出来了!

地图缩放

这个就很简单了,文档写的很清楚,放大或缩小就一行代码。

map.zoomIn()  // 区域放大地图map.zoomOut() // 区域缩小地图

可以写两个按钮,然后按照需要,分别执行上面两行代码。

测距

测量距离的话,官网案例也写的很详细。

首先需要在地图创建完成之后,创建一个测量工具。

lineTool = new T.PolylineTool(map, {showLabel: true
});

然后我们可以写一个按钮,点击执行开始测距功能。

lineTool.open()    // 开始测距

测量面积

测面积和测距差不多。

首先需要创建一个测量面积的工具。

polygonTool = new T.PolygonTool(map, {showLabel: true,color: "#4aa8b0", weight: 3, opacity: 0.5, fillColor: "#9dd8d2", fillOpacity: 0.5
});

然后写一个按钮,点击就执行开始测面积的方法。

polygonTool.open()   // 开始测面积


当然,无论是测面积还是测距离,看官方文档,可以设置线的颜色、粗细等,具体查找官方文档哈!

鼠标移动地图,获取地图可视范围

这个就是鼠标移动地图之后,我想知道地图范围是从多少到多少,或者是当前缩放比例是多少,其实不难,就是监听一下移动结束事件。

map.addEventListener("moveend", (e) => {let zoom = map.getZoom();  // 当前地图缩放等级let bs = map.getBounds();let bssw = bs.getSouthWest();   //可视区域左下角经纬度let bsne = bs.getNorthEast();   //可视区域右上角经纬度
});  // 获取鼠标移动结束事件

获取到之后,我们可以根据需要处理一下然后展示在界面上。

这个根据自己的需要随便设计,无所谓的都。

绘制点

然后绘制点啥的直接看官方文档就可以,写的十分的详细,也是没有很大问题的,当然了,当覆盖物太多也会卡顿,如果是渲染单纯的点,可以使用海量点,使用海量点的话就不能点击啥的,样式也不能自定义,只是单纯的点。

绘制基站扇形覆盖物

绘制扇形是这个样子,需要有中心点经纬度信息,每个扇形偏转信息,扇形的半径信息。我这个效果图的弧度是默认30°的。我的效果就是下面的图的样子,如果你们要做的不是这个样子,那就抓紧退出,别看错了哈。我这个图画出来会随着缩放同时放大缩小,和坐标点不一样的。

数据准备

首先我们需要一些模拟数据,我这边是这样的哈

红框标出来的是一个基站的数据,x标识经度,y标识纬度,name标识基站名称,data是一个列表,里面包含着多个扇区,每一个扇区包含一个 r 表示偏转角度,msg表示扇区的名称,其实也可以添加一个半径,我默认一公里了,也就是1000米。

开始绘制扇形

首先我们创建一个方法遍历这些数据开始一个一个的绘制基站,list表示模拟数据列表。

this.list.forEach(element => {this.makeSectors(element)
});

调用了makeSectors方法,这个方法绘制一个基站

makeSectors(mapPoints) {// 遍历基站的扇区for (var i = 0; i < mapPoints.data.length; i++) {let point = new T.LngLat(mapPoints.x, mapPoints.y);  // 基站点的位置,也就是扇区的尖let azimuth1 = 90 - mapPoints.data[i].r - 15  // 旋转角度是扇区中间,我默认30°,一半是15°let azimuth2 = 90 - mapPoints.data[i].r + 15  // 同上边// 然后画扇形的覆盖物,调用了Sector1方法,500是扇区半径,这是500米let oval = new T.Polygon(this.Sector1(point, 500, azimuth1, azimuth2, "wjw"), {color: "blue",weight: 1,opacity: 0.6,fillColor: "#ff7200",fillOpacity: 0.6});map.addOverLay(oval);var info = [];  // 给每个扇形添加一个信息框,点击弹出info.push("<b>名称:</b>" + mapPoints.name);info.push("<b>经度:</b>" + mapPoints.x);info.push("<b>纬度:</b>" + mapPoints.y);info.push("<b>扇区信息:</b>" + mapPoints.data[i].msg);info.push("<b>扇区转角:</b>" + mapPoints.data[i].r + ' °');let content = info.join("<br/>");this.addClickHandler(content, oval); //调鼠标用点击事件this.addMouseOver(oval);//调鼠标悬停事件this.addMouseOut(oval);//调用鼠标离开事件}
},

Sector1方法

      // 获取扇形坐标点Sector1(point2, radius, sDegree, eDegree, opts) {let points = []; //创建构成多边形的点数组  let step = ((eDegree - sDegree) / 10) || 10; //根据扇形的总夹角确定每步夹角度数,最大为10  points.push(point2);for (let i = sDegree; i < eDegree + 0.001; i += step) { //循环获取每步的圆弧上点的坐标,存入点数组 points.push(this.EOffsetBearing(point2, radius, i));}points.push(point2);if (sDegree == eDegree) {let planepoint = points[1];let marker = new T.Marker(planepoint);let opts = {width: 200,     // 信息窗口宽度height: 100,     // 信息窗口高度title: "wjw", // 信息窗口标题};map.addOverLay(marker);}return points;},

计算扇形坐标的方法

   // 计算扇形坐标EOffsetBearing(point3, dist, bearing) {let lngConv = map.getDistance(point3, new T.LngLat(point3.lng + 0.1, point3.lat)) * 10; //计算1经度与原点的距离let latConv = map.getDistance(point3, new T.LngLat(point3.lng, point3.lat + 0.1)) * 10; //计算1纬度与原点的距离let lat = dist * Math.sin(bearing * Math.PI / 180) / latConv; //正弦计算待获取的点的纬度与原点纬度差let lng = dist * Math.cos(bearing * Math.PI / 180) / lngConv; //余弦计算待获取的点的经度与原点经度差return new T.LngLat(point3.lng + lng, point3.lat + lat);},

鼠标移入扇形区的方法

  // 鼠标移入扇形区addMouseOver(oval) {oval.addEventListener("mouseover", function () {oval.setWeight(2);//边界变宽oval.setOpacity(.8);//边界颜色变深oval.setFillOpacity(.8);//填充颜色变深});},

鼠标移出扇形区的方法

  // 鼠标移出扇形区addMouseOut(oval) {oval.addEventListener("mouseout", function () {oval.setWeight(1);//边界恢复oval.setOpacity(.6);//边界透明度变化oval.setFillOpacity(.6);//填充颜色变化});},

点击扇区

addClickHandler(content, marker) {let that = thismarker.addEventListener("click", function (e) {that.openInfo(content, e);});
},

打开信息弹窗

  //打开信息弹窗openInfo(content, e) {let that = thislet point = e.lnglat;that.marker = new T.Marker(point); // 创建标注 contentlet markerInfoWin = new T.InfoWindow(content, {offset: new T.Point(0, -20)}); // 创建信息窗口对象map.openInfoWindow(markerInfoWin, point); //开启信息窗口},


然后就可以了!

vue 接入天地图并且在地图上画基站扇形覆盖物相关推荐

  1. qgis在地图上画导航线_在Laravel中的航线

    qgis在地图上画导航线 For further process we need to know something about it, 为了进一步处理,我们需要了解一些有关它的信息, The rou ...

  2. ArcGIS API for JavaScript根据两个点坐标在地图上画线

    ArcGIS API for JavaScript根据两个点坐标在地图上画线 比如说a(xxxx,xxxxx),b(xxxx,xxxxx).利用这两个点画一条线 var polyline = new ...

  3. Arcgis for Android在地图上画多边形并进行边长、周长和面积的测量

    Arcgis for Android的地图操作里,放大缩小地图.图层切换.定位.测距测面等都是它的一些基本操作,封装后一般调用就是了,很简单.不过最近有了个需求,在地图上画一个多边形时候同时进行多边形 ...

  4. python比例图_python在地图上画比例的实例详解

    现在用python画图已经难不倒一直跟小编学习的小伙伴们了,甚至有的小伙伴画图比小编还要厉害.为此小编还偷偷下了一番功夫,画图这种事情,细节上的完善肯定能让图片更加好看.所以小编知道大家会画地图,但是 ...

  5. 如何在百度地图上画镂空圆 Android

    百度API提供了在地图上画圆形的类,但画出圆只能是实心圆,也就是不能实现让圆内没有颜色而圆外有颜色的镂空圆.那么我们应该实现镂空圆呢? 首先我发现API还提供一个画多边形的类.而一个镂空圆分解成两个多 ...

  6. Bing必应地图中国API - 在地图上画圆

    Bing必应地图中国API - 在地图上画圆 2011-05-24 14:49:37|  分类: Bing&Google|字号 订阅 <变形金刚2>上映4日国内票房过亿,基本上我只 ...

  7. OpenLayers 在地图上画线,获取点坐标(以天地图为例)

    应用场景: 最近在开发过程中,有个需求,需要在天地图中画线,结束后获取对应的坐标集合,查阅 OpenLayers API 和网上的相关资料后得以实现,特此记录. 因为直线间的点是无数个,我们不可能去获 ...

  8. 有效数据外含有额外数据_basemap之地图上画额外数据

    有时候我们想将自己的数据画在地图上,比如点,线,热体图等.我们先画地图地形底图,然后将数据点画在地图之上. 1. 散点 Basemap.scatter() 比如我们经常会将站点画在地图上,如地震台站, ...

  9. 高德地图 瓦片地图上画圆,线段等

    根据api只能在实际地图上显示,瓦片地图上则不能显示 zIndex需要设置值,大于0

  10. 生成世界地图并在地图上画圆圈

    figure worldmap('world')% 添加海洋和陆地的颜色 oceanColor = [0.5 0.7 0.9]; % 海洋颜色 landColor = [0.5 0.5 0.5]; % ...

最新文章

  1. 百万级商品数据实时同步,查询结果秒出
  2. eclipse - unresolved inclusion: stdio.h
  3. antv图例出现分页_带图例、文本的饼图
  4. Jackson 注解 -- 类型转换(序列化,反序列化)、私有字段
  5. EntityFramework Core映射关系详解
  6. spring boot +spring security + jwt 实现认证模块
  7. libvirt中的message bus
  8. linux修改vcf编码格式,VCF乱码终极解决大法
  9. 通过ERP系统提高仓库性能并降低成本
  10. EXCEL条件筛选函数
  11. matlab 水箱fuzzy,matlab中使用fuzzy工具箱
  12. go实现简单的chan
  13. Swift guard let 的使用
  14. 爬取天眼查 的python 代码
  15. 网上医疗预约挂号系统
  16. 《个人金融信息保护技术规范》JRT 0171-2020专家解读(转自中国存储网)
  17. HTML+CSS大作业:使用html设计一个简单好看的公司官网首页 浮动布局
  18. STM32F4的DMA
  19. Koa2仿知乎服务端项目:Webpack配置
  20. Mixamo上传自定义模型动画导入Unreal4

热门文章

  1. 操作系统和各类编辑器的豆沙绿设置
  2. 啃完999页Java面试高频宝典,最新整理
  3. 芽庄新世界酒店将于2023年盛大揭幕
  4. 【PMP考试必读】100个定律
  5. 【数据集收集】可用于深度学习模型的遥感数据集(持续更新,最后更新时间2020-06)
  6. 一键生成数据库表结构文档认准:screw工具(超级好用^_^)
  7. java爬虫入门第二弹——通过URL下载图片(以下载百度logo为例)
  8. excel工作表限制编辑怎么删除
  9. Aircrack-ng破解无线WIFI密码
  10. 台式计算机内存两个缺口,台式机内存条正确安装方法|台式电脑怎样安装两个内存条...