高德地图JS API加载行政区边界AMap.Polygon

18,495次阅读
没有评论

共计 5336 个字符,预计需要花费 14 分钟才能阅读完成。

高德地图 JS API 加载行政区边界 AMap.Polygon

🤖 作者简介:水煮白菜王,一位资深前端劝退师 👻
👀 文章专栏:高德 AMap 专栏,记录一下平时在博客写作中,总结出的一些开发技巧✍。
感谢支持💕💕💕

关联文章:
高德地图 JS API DistrictExplore 区划浏览 r
高德地图 JS API AMap.MouseTool 绘制

目录

  • 高德地图 API 加载行政区边界 AMap.Polygon
    • 前言
    • AMap.Polygon
    • AMap.DistrictSearch
    • 运行示例
    • 实现步骤
      • 1. 调用 AMap.DistrictSearch 获取边界数据
      • 2. 调用 AMap.Polygon 加载行政区边界
    • 完整代码
    • 更多

高德地图 API 加载行政区边界 AMap.Polygon

前言

在使用高德地图 JS API 开发过程中,对其地图所呈现的地区加上边界及区域面,一般来讲采用 AMap.Polygon 进行渲染,对 API 可谓是即拿即用,快速开发。

AMap.Polygon

在 AMap 文档说明中,AMap.Polygon 属于矢量图形,用于在地图上 绘制线、面 等矢量地图要素的类型,AMap.Polygon 构造多边形对象,通过 PolygonOptions 指定多边形样式。AMap 的矢量图形相关的 API 可以呈现很多图形体的绘制和编辑。

new AMap.Polygon(opts: PolygonOptions)

参数说明

opts (PolygonOptions)

属性 类型 描述
opts.path Array I Array> I Array>> 多多边形轮廓线的节点坐标数组。支持 单个普通多边形({Array}),单个带孔多边形({Array}),多个带孔多边形({Array})
opts.zIndex number 多边形覆盖物的叠加顺序。地图上存在多个多边形覆盖物叠加时,通过该属性使级别较高的多边形覆盖物在上层显示。默认值为 10
opts.bubble boolean 是否将覆盖物的鼠标或 touch 事件冒泡到地图上(自 v1.3 新增)。默认值为 false
opts.cursor string? 指定鼠标悬停时的鼠标样式,自定义 cursor,IE 仅支持 cur/ani/ico 格式,Opera 不支持自定义 cursor
opts.strokeColor string 线条颜色,使用 16 进制颜色代码赋值。默认值为 #00D3FC
opts.strokeOpacity number 轮廓线透明度,取值范围 [0,1],0 表示完全透明,1 表示不透明。默认为 0.9
opts.strokeWeight number 轮廓线宽度。默认值为 2
opts.fillColor string 多边形填充颜色,使用 16 进制颜色代码赋值。默认值为 #00B2D5
opts.fillOpacity number 多边形填充透明度,取值范围 [0,1],0 表示完全透明,1 表示不透明。默认为 0.5
opts.draggable boolean 设置多边形是否可拖拽移动,默认为 false
opts.height number 设置 polygon 是否离地绘制,默认值为 0。大于 0 时离地绘制,此时平面高度等于 height 属性值加 polygon 质心点绝对海拔高度值,可以通过 getPlaneHeight() 方法获取当前平面高度值(此属性适用于 JSAPI v2.1Beta 及以上的版本)。,默认值为 0
opts.extrusionHeight number 设置多边形是否拉伸为的立面体高度值,默认值为 0
opts.wallColor (Array I String) polygon 立面体侧面颜色,支持 rgba、rgb、十六进制等。默认值为 #00D3FC
opts.roofColor (Array I String) polygon 立面体侧面颜色,支持 rgba、rgb、十六进制等。默认值为 #00B2D5
opts.extData object? 用户自定义属性,支持 JavaScript API 任意数据类型,如 Polygon 的 id 等。
opts.strokeStyle ("solid" I "dashed") 轮廓线样式,实线:solid,虚线:dashed
opts.strokeDasharray Array? 勾勒形状轮廓的虚线和间隙的样式,此属性在 strokeStyle 为 dashed 时有效,此属性在 ie9+ 浏览器有效 取值:实线:[0,0,0] 虚线:[10,10],[10,10] 表示 10 个像素的实线和 10 个像素的空白(如此反复)组成的虚线 点画线:[10,2,10],[10,2,10] 表示 10 个像素的实线和 2 个像素的空白 + 10 个像素的实线和 10 个像素的空白(如此反复)组成的虚线

首先使用 AMap.Polygon 之前需要先获取其行政区划边界,调用 行政区查询 服务(AMap.DistrictSearch)的 API。

AMap.DistrictSearch

AMap.DistrictSearch 提供行政区信息的查询,使用该服务可以获取到行政区域的区号、城市编码、中心点、边界、下辖区域等详细信息,为基于行政区域的地图功能提供支持。在这里我们只实现区域边界,关于 AMap.DistrictSearch 的其他参数、成员函数先不过多阐述。可以先移步阅读 AMap.DistrictSearch 官方文档👀

官方示例

AMap.plugin('AMap.DistrictSearch', function () {
  var districtSearch = new AMap.DistrictSearch({
    
    level: 'country',
    
    subdistrict: 1
  })
  
  districtSearch.search('中国', function(status, result) {
    
  })
})

运行示例

实现步骤

1. 调用 AMap.DistrictSearch 获取边界数据

注意使用 AMap.DistrictSearch 前,检查是否已经引入AMap.DistrictSearch 插件 , 并且 AMap.DistrictSearch 必须配置高德密钥 securityJsCode 才能成功调用。

调用 AMap.DistrictSearch创建其实例,并查询其区划编码,查询接口支持区划名称(北京、南京),编码(110000、320100)。注意这里的区划编码是 6 位,如果要 加载市级 ,则在构建 DistrictSearch 实例配置 参数 level: "city",对其进行查询传入区划信息(编码或名称),对查询结果 result 获取多边形数据boundaries
所以在拿到边界数据之前,我们只需要关注传入查询的参数。即行政区级别的类型 和 所传区划主键

!-- Vue 2 Code -->

district = new window.AMap.DistrictSearch({
    subdistrict: 0, 
    extensions: "all", 
    level: "city", 
});

let code = "320100"; 

district.search(code, (status, result) => {
    console.log(result);
    var bounds = result.districtList[0].boundaries;
    if (bounds) {
        
    }
});

2. 调用 AMap.Polygon 加载行政区边界

拿到边界数据后,调用 AMap.Polygon,其调整指定的多边形样式。
对于 AMap.Polygon 更多指定多边形样式的配置其他成员函数,可以先移步阅读 AMap.Polygon 官方文档👀

这里注意要成功拿到多边形数据,再对其执行加载 AMap.Polygon

!-- Vue 2 Code -->

district.search(code, (status, result) => {
  console.log(result);
  if(result.info == 'OK') console.log('查询成功:'+result);
  var bounds = result.districtList[0].boundaries;
  if (bounds) {
    
    for (var i = 0; i  bounds.length; i += 1) {
      
      bounds[i] = [bounds[i]];
    }
    polygon = new window.AMap.Polygon({
      path: bounds, 
      strokeWeight: 2, 
      strokeColor: "#0091ea", 
      strokeOpacity: "1", 
      fillOpacity: 0.1, 
      fillColor: "#80d8ff", 
    });
    map.add(polygon);
    map.setFitView(polygon); 
  }
});

高德地图 JS API 加载行政区边界 AMap.Polygon

完整代码

!-- Vue 2 Code -->
!--
 * @Author: baicaiKing
 * @Date: 2024-09-10 18:04:31
 * @LastEditors: Do not edit
 * @LastEditTime: 2024-09-10 20:16:44
 * @FilePath: code2.0srcviewscomponentsdistrict.vue
 * @Description: Fill in the instructions here
-->
template>
  !-- 行政区边界-->
  div id="index" ref="appRef">
    !-- 地图 -->
    div id="container" ref="mapRef">/div>
  /div>
/template>
  script>
var map; 
var district = null;
var polygon;
export default {
  name: "componentsMap",
  data() {
    return {
      timing: null,
      adcode: 100000,
    };
  },
  created() {},
  mounted() {
    this.$nextTick(() => this.initMap());
  },
  beforeDestroy() {
    map?.destroy();
    map = null;
  },
  methods: {
    
    initMap() {
      map = new window.AMap.Map("container", {
        terrain: false, 
        showBuildingBlock: false, 
        
        scrollWheel: true, 
        dragEnable: true, 
        showIndoorMap: false,
        doubleClickZoom: false, 
        
      });
      this.setDistrict();
    },
    
    setDistrict() {
      
      district = new window.AMap.DistrictSearch({
        subdistrict: 0, 
        extensions: "all", 
        level: "city", 
      });
      
      let code = "320100"; 
      
      district.search(code, (status, result) => {
        console.log(result);
        if(result.info == 'OK') console.log('查询成功:'+result);
        var bounds = result.districtList[0].boundaries;
        if (bounds) {
          
          for (var i = 0; i  bounds.length; i += 1) {
            
            bounds[i] = [bounds[i]];
          }
          polygon = new window.AMap.Polygon({
            path: bounds, 
            strokeWeight: 2, 
            strokeColor: "#0091ea", 
            strokeOpacity: "1", 
            fillOpacity: 0.1, 
            fillColor: "#80d8ff", 
          });
          map.add(polygon);
          map.setFitView(polygon); 
        }
      });
    },
  },
};
/script>
  style lang="scss"  scoped>
#index {
  width: 1920px;
  height: 1080px;
  color: #ffffff;
  overflow: hidden;
  #container {
    width: 1920px;
    height: 1080px;
    z-index: 100;
  }
}
/style>
      
      

更多

在 AMap.Polygon 构造多边形对象的其他成员函数, 还有很多,比如移入移出等
如果想要深入层级实现关于 polygon 效果,AMap 的矢量图形相关的 API 可以呈现很多图形体的绘制和编辑👀,


polygon.on("mouseover", () => {
  polygon.setOptions({
    
    fillOpacity: 0.7, 
    fillColor: "#80d8ff",
  });
});

polygon.on("mouseout", () => {
  polygon.setOptions({
    fillOpacity: 0.1,
    fillColor: "#80d8ff",
  });
});

如果对加载其行政区边界包含其下子边界这种,可以考虑采用geojson 数据,使用 Map.GeoJSON 函数,最终也是通过 AMap.Polygon 进行呈现的,注意这里的 json 数据源要有丰富度存在子级边界数据。

new AMap.GeoJSON(opts: GeoJSONOptions)

高德地图 JS API 加载行政区边界 AMap.Polygon
如果你觉得这篇文章对你有帮助,请点赞 👍、收藏 👏 并关注我!👀
在这里插入图片描述

原文地址: 高德地图 JS API 加载行政区边界 AMap.Polygon

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-09-28发表,共计5336字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)