前言

Vue 使用高德地图,实现缩放,鼠标绘制,测距、测面积、行政区域范围绘制、关键词查询等操作。

参考资料

高德地图API官网:https://lbs.amap.com/

高德地图2.0参考手册:https://lbs.amap.com/api/jsapi-v2/documentation#pixel

高德地图2.0示例代码:https://lbs.amap.com/demo/list/jsapi-v2

Vue接入高德地图

引用

首相要在index.html文件中引入高德地图。

<script type="text/javascript" src="https://webapi.amap.com/maps?v=2.0&key=您申请的key值&plugin=AMap.ToolBar"></script>

使用

在需要写地图的页面中添加一个div用来展示地图,记得为这个div设置高度和宽度,不然显示不出来。

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

然后写 TS 代码把地图显示出来。

	  // 加载地图
      initMap() {
        map = new AMap.Map('mapDiv', {
          zoom: 11,//级别
          center: [116.34703902, 40.48188],//中心点坐标
          viewMode: '3D'//使用3D视图
        });
      },

然后地图就出现了。

实现点击按钮缩放功能

首先写两个静态按钮,缩放也很简单,就两行代码就可以了。

地图放大

map.zoomIn()

地图缩小

map.zoomOut()

测量距离

测量距离稍微麻烦点,但是也还好其实。

首先我们要在初始化地图完成之后,创建一个鼠标绘制工具。

    // 测距、测面积使用
    mouseTool = new AMap.MouseTool(map);

MouseTool 这个插件需要在index.html文件的script中引入一下,就是plugin参数后边加就可以,用英文的逗号隔开。

<script type="text/javascript" src="https://webapi.amap.com/maps?v=2.0&key=您申请的key值&plugin=AMap.ToolBar,AMap.MouseTool"></script>

然后写一个按钮“测距”,点击的时候就执行测距方法。

   // 开始测距
   start() {
       mouseTool.rule({
            startMarkerOptions: {//可缺省
              icon: new AMap.Icon({
                size: new AMap.Size(19, 31),//图标大小
                imageSize: new AMap.Size(19, 31),
                image: "//webapi.amap.com/theme/v1.3/markers/b/start.png"
              }),
              offset: new AMap.Pixel(-9, -31)
            },
            endMarkerOptions: {//可缺省
              icon: new AMap.Icon({
                size: new AMap.Size(19, 31),//图标大小
                imageSize: new AMap.Size(19, 31),
                image: "//webapi.amap.com/theme/v1.3/markers/b/end.png"
              }),
              offset: new AMap.Pixel(-9, -31)
            },
            midMarkerOptions: {//可缺省
              icon: new AMap.Icon({
                size: new AMap.Size(19, 31),//图标大小
                imageSize: new AMap.Size(19, 31),
                image: "//webapi.amap.com/theme/v1.3/markers/b/mid.png"
              }),
              offset: new AMap.Pixel(-9, -31)
            },
            lineOptions: {//可缺省
              strokeStyle: "solid",
              strokeColor: "#FF33FF",
              strokeOpacity: 1,
              strokeWeight: 2
            }
            //同 RangingTool 的 自定义 设置,缺省为默认样式
          });
    }

    //  停止测距
    stop() {
		mouseTool.close(true)//关闭,并清除覆盖物
	}

测量面积

测量面积和测距类似。

	// 开始测面积
	start() {
		mouseTool.measureArea({
          strokeColor: '#80d8ff',
          fillColor: '#80d8ff',
          fillOpacity: 0.3
       });
	}

	// 停止测面积
	stop() {
		mouseTool.close(true)//关闭,并清除覆盖物
	}

很简单吧!

行政区划查询渲染

这个也很简单哈宝宝们!

首先也是走接口去获取行政区划的范围啊。

需要用到这个插件AMap.DistrictSearch,和测距一样在index.html中引入一下。

然后在初始化地图完成的时候实例化一下。

   // 搜索行政区
   district = new AMap.DistrictSearch(opts);

首先写一个输入框,用来输入查询的行政区划的名称,比如输入“北京”,然后点击按钮走下面的方法来查询北京行政区划的范围信息。

	  // 行政区划搜索
      seachArea() {
        if (this.areaInput === "") {
          map.remove(areaPolygons)//清除上次结果
          return;
        }
        district.search(this.areaInput, (status, result) => {
          map.remove(areaPolygons)//清除上次结果
          areaPolygons = [];
          var bounds = result.districtList[0].boundaries;
          if (bounds) {
            for (var i = 0, l = bounds.length; i < l; i  ) {
              //生成行政区划polygon
              var polygon = new AMap.Polygon({
                strokeWeight: 3,
                path: bounds[i],
                fillOpacity: 0,
                fillColor: '#80d8ff',
                strokeColor: 'red'
              });
              areaPolygons.push(polygon);
            }
          }
          map.add(areaPolygons)
          map.setFitView(areaPolygons);//视口自适应
        });
      },

关键字搜索

这个其实和行政区划查询差不多。

首先呢,需要在地图初始化完成之后呢,创建一个关键字查询的实例。

		// 关键字搜索
        AMap.plugin(["AMap.PlaceSearch"], () => {
          //构造地点查询类
          placeSearch = new AMap.PlaceSearch({
            pageSize: 50, // 单页显示结果条数
            pageIndex: 1, // 页码
            autoFitView: false // 是否自动调整地图视野使绘制的 Marker点都处于视口的可见范围
          });
        });

这个还有其他的参数,可根据官方文档自己判断挑选使用呀!

有一个输入框,输入要查询的关键字,然后一个按钮来走接口查询相关的关键字。然后会返回给你一个列表包含着关键字搜索回来的数据。

	searchKeyWord() {
	   placeSearch.search("北京", (state, data) => {
          this.total = 0
          let dataList = data
          switch (dataList.info) {
            case 'OK':
              console.log("-------->", dataList.poiList.pois)
              break;
            case 'TIP_CITIES':
              console.log("-------->", dataList.cityList)
              break;
          }
        });
	}

上边 如果 info 为 OK,标识返回的是地点列表,如果是 TIP_CITIES,标识返回的是在下面这些城市里面有关于搜索关键字的相关数据。

比如搜索北京,返回地点列表。

比如搜索“动物园”,返回相关城市列表。

鼠标绘制区域

这个简单,就是点击一个按钮开始绘制多边形。

	  // 绘制区域
      startPolygon() {
        polyTool = new AMap.MouseTool(map);
        polyTool.polygon({
          strokeColor: "#1791fc",
          strokeOpacity: 1,
          strokeWeight: 1,
          fillColor: '#1791fc',
          fillOpacity: 0.4,
          strokeStyle: "solid",
          extData: {
            id: '123'
          }
        })
        polyTool.on('draw', (event) => {
          let poly = event.obj   // 绘制完多边形实力对象
          console.log('绘制图形顶点信息列表--------> ', poly.getOptions())
          console.log('绘制图形的自定义属性--------> ', poly.getOptions().path)
          polyTool.close()
          polyTool = null
        })
      },

完成了兄弟们!

总结

到此这篇关于Vue接入高德地图的文章就介绍到这了,更多相关Vue接入高德地图内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

Vue接入高德地图的完整实例的更多相关文章

  1. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  2. vue自定义加载指令v-loading占位图指令v-showimg

    这篇文章主要为大家介绍了vue自定义加载指令和v-loading占位图指令v-showimg的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  3. vue使用动画实现滚动表格效果

    这篇文章主要为大家详细介绍了vue使用动画实现滚动表格效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  4. 关于Vue 监控数组的问题

    这篇文章主要介绍了Vue 监控数组的示例,主要包括Vue 是如何追踪数据发生变化,Vue 如何更新数组以及为什么有些数组的数据变更不能被 Vue 监测到,对vue监控数组知识是面试比较常见的问题,感兴趣的朋友一起看看吧

  5. Vue子组件props从父组件接收数据并存入data

    这篇文章主要介绍了Vue子组件props从父组件接收数据并存入data的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  6. Vue h函数的使用详解

    本文主要介绍了Vue h函数的使用详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  7. VUE响应式原理的实现详解

    这篇文章主要为大家详细介绍了VUE响应式原理的实现,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

  8. vue+Element ui实现照片墙效果

    这篇文章主要为大家详细介绍了vue+Element ui实现照片墙效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  9. vue+elemet实现表格手动合并行列

    这篇文章主要为大家详细介绍了vue+elemet实现表格手动合并行列,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. iview+vue实现导入EXCEL预览功能

    这篇文章主要为大家详细介绍了iview+vue实现导入EXCEL预览功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部