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

news2024/11/15 5:46:35

在这里插入图片描述

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

关联文章:
高德地图JS API 开发——区划浏览DistrictExplorer

目录

  • 高德地图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.pathArray<LngLat> I Array<Array<LngLat>> I Array<Array<Array<LngLat>>>多多边形轮廓线的节点坐标数组。 支持 单个普通多边形({Array }),单个带孔多边形({Array}),多个带孔多边形({Array<Array>})
opts.zIndexnumber多边形覆盖物的叠加顺序。地图上存在多个多边形覆盖物叠加时,通过该属性使级别较高的多边形覆盖物在上层显示。默认值为 10
opts.bubbleboolean是否将覆盖物的鼠标或 touch 事件冒泡到地图上(自v1.3 新增)。默认值为 false
opts.cursorstring?指定鼠标悬停时的鼠标样式, 自定义cursor,IE仅支持cur/ani/ico格式,Opera不支持自定义cursor
opts.strokeColorstring线条颜色,使用 16 进制颜色代码赋值。默认值为 #00D3FC
opts.strokeOpacitynumber轮廓线透明度,取值范围 [0,1] ,0表示完全透明,1表示不透明。默认为0.9
opts.strokeWeightnumber轮廓线宽度。默认值为 2
opts.fillColorstring多边形填充颜色,使用 16 进制颜色代码赋值。默认值为 #00B2D5
opts.fillOpacitynumber多边形填充透明度,取值范围 [0,1] ,0表示完全透明,1表示不透明。默认为0.5
opts.draggableboolean设置多边形是否可拖拽移动,默认为 false
opts.heightnumber设置 polygon 是否离地绘制,默认值为0 。大于0时离地绘制,此时平面高度等于 height 属性值加 polygon 质心点绝对海拔高度值,可以通过getPlaneHeight() 方法获取当前平面高度值(此属性适用于 JSAPI v2.1Beta及以上的版本)。,默认值为 0
opts.extrusionHeightnumber设置多边形是否拉伸为的立面体高度值,默认值为 0
opts.wallColor(Array<String> I String)polygon 立面体侧面颜色,支持 rgba、rgb、十六进制等。默认值为 #00D3FC
opts.roofColor(Array<String> I String)polygon 立面体侧面颜色,支持 rgba、rgb、十六进制等。默认值为 #00B2D5
opts.extDataobject?用户自定义属性,支持JavaScript API任意数据类型,如Polygon的id等。
opts.strokeStyle("solid" I "dashed")轮廓线样式,实线:solid,虚线:dashed
opts.strokeDasharrayArray<number>?勾勒形状轮廓的虚线和间隙的样式,此属性在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({
    // 关键字对应的行政区级别,country表示国家
    level: 'country',
    //  显示下级行政区级数,1表示返回下一级行政区
    subdistrict: 1
  })
  // 搜索所有省/直辖市信息
  districtSearch.search('中国', function(status, result) {
    // 查询成功时,result即为对应的行政区信息
  })
})
// 除了获取所有省份/直辖市信息外,您可以通过修改level和subdistrict并配合search传入对应keyword查询对应信息。

运行示例

实现步骤

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

注意使用AMap.DistrictSearch前,检查是否已经引入AMap.DistrictSearch插件

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

<!-- Vue 2 Code -->
// 加载DistrictSearch
district = new window.AMap.DistrictSearch({
    subdistrict: 0, //获取边界不需要返回下级行政区
    extensions: "all", //返回行政区边界坐标组等具体信息
    level: "city", //查询行政级别为 国country 市city 区县district 商圈biz_area
});
// district.setLevel("district"); //  设置级别 即同上level
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) {
    //生成行政区划polygon
    for (var i = 0; i < bounds.length; i += 1) {
      //构造MultiPolygon的path
      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); //视口自适应
  }
});

在这里插入图片描述

完整代码

<!-- 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.0\src\views\components\district.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, // 不显示3D楼块
        // showLabel: false, // 取消地图层标注
        scrollWheel: true, // 开启缩放
        dragEnable: true, // 开启鼠标拖动
        showIndoorMap: false,
        doubleClickZoom: false, // 禁止双击
        // resizeEnable: true, //是否监控地图容器尺寸变化
      });
      this.setDistrict();
    },
    // 加载行政区边界
    setDistrict() {
      // 加载DistrictSearch
      district = new window.AMap.DistrictSearch({
        subdistrict: 0, //获取边界不需要返回下级行政区
        extensions: "all", //返回行政区边界坐标组等具体信息
        level: "city", //查询行政级别为 国country 市city 区县district 商圈biz_area
      });
      // district.setLevel("district"); //  设置级别 即同上level
      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) {
          //生成行政区划polygon
          for (var i = 0; i < bounds.length; i += 1) {
            //构造MultiPolygon的path
            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)

在这里插入图片描述
如果你觉得这篇文章对你有帮助,请点赞 👍、收藏 👏 并关注我!👀
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2129545.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大模型LLM之SpringAI:Web+AI(二)

2.2.2、ChatModel API(聊天模型API) 聊天模型太多了,这里只写OpenAI和Ollama ChatModel和ChatClient区别:ChatClient针对的是所有模型,共用一个客户端。而ChatModel是针对各个模型实现的。 (1)OpenAI 自动配置 <dependency><groupId>org.springframework…

vue3 内置组件 <Suspense>

官方文档&#xff1a; <Suspense> 指南-Suspense 官方提示&#xff1a; <Suspense> 是一项实验性功能。它不一定会最终成为稳定功能&#xff0c;并且在稳定之前相关 API 也可能会发生变化。 <Suspense>是一个内置组件&#xff0c;用来在组件树中协调对异步依…

git删除本地分支报错:error: the branch ‘xxx‘ is not fully merged

git删除本地分支报错&#xff1a;error: the branch xxx is not fully merged error: the branch xxx is not fully merged 直接&#xff1a; git branch -D xxx 就可以。 如果删除远程分支&#xff1a; git push origin --delete origin/xxx git强制删除本地分支 git branc…

如何将Git本地代码推送到Gitee云端仓库

如何将Git本地代码推送到Gitee云端仓库 在使用Git进行版本控制时&#xff0c;将本地代码推送到远程仓库是一个基本且重要的操作。本文将详细介绍如何将你的Git本地代码推送到Gitee&#xff08;码云&#xff09;云端仓库。Gitee是一个国内非常流行的代码托管平台&#xff0c;类…

NX—UI界面生成的文件在VS上的设置

UI界面保存生成的三个文件 打开VS创建项目&#xff0c;删除自动生成的cpp文件&#xff0c;将生成的hpp和cpp文件拷贝到项目的目录下&#xff0c;并且在VS项目中添加现有项目。 修改VS的输出路径&#xff0c;项目右键选择属性&#xff0c;链接器中的常规&#xff0c;文件路径D:…

线性代数 第七讲 二次型_标准型_规范型_坐标变换_合同_正定二次型详细讲解_重难点题型总结

文章目录 1.二次型1.1 二次型、标准型、规范型、正负惯性指数、二次型的秩1.2 坐标变换1.3 合同1.4 正交变换化为标准型 2.二次型的主要定理3.正定二次型与正定矩阵4.重难点题型总结4.1 配方法将二次型化为标准型4.2 正交变换法将二次型化为标准型4.3 规范型确定取值范围问题4.…

《中国制药设备行业市场现状分析与发展前景预测研究报告》

报告导读&#xff1a;本报告从国际制药设备发展、国内制药设备政策环境及发展、研发动态、供需情况、重点生产企业、存在的问题及对策等多方面多角度阐述了制药设备市场的发展&#xff0c;并在此基础上对制药设备的发展前景做出了科学的预测&#xff0c;最后对制药设备投资潜力…

​​操作系统 ---- 进程调度的时机、切换与过程

目录 一、进程调度的时机 1.1 什么时候需要进行进程调度与切换&#xff1f; 1.2 什么情况下不能进行进程调度与切换&#xff1f; 二、进程调度的方式 2.1 非抢占方式(Nonpreemptive Mode) 2.2 抢占方式(Preemptive Mode) 三、总结 一、进程调度的时机 进程调度&am…

FreeRTOS内部机制学习04(任务通知和软件定时器)

文章目录 何为任务通知&#xff1f;任务通知使用例子任务通知的优势以及劣势优势劣势 深入源码看看API函数内部干了什么函数的种类函数都做了啥&#xff1f; 软件定时器软件定时器的作用软件定时器内部到底做了什么实现了“闹钟”功能引入守护任务&#xff0c;守护任务做了啥&a…

SprinBoot+Vue网上购物商城的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…

我们怎么把自动化测试落地到一个项目上呢?

现在的软件测试行业已经不是原先的点点点的功能测试&#xff0c;要想在软件测试这一行中扎根稳住&#xff0c;就需要你会的很多&#xff0c;不局限于功能测试&#xff0c;还要会自动化测试、接口测试、性能测试等。 今天就来说一下自动化测试&#xff0c;首先什么是自动化测试…

简单分享-获取.txt文件内数据 文件内数据逗号分隔 分隔符 C语言

简单分享-获取.txt文件内数据 文件内数据逗号分隔 分隔符 C语言 数据存储到文件中&#xff0c;把文件数据读取到数组&#xff0c;方便数据处理。 # include <stdio.h> # include <stdlib.h> # include <string.h>#define DATANUM 307200 //数组个数 int ma…

Linux之MySQL定时备份

#!/bin/bash #author: zking #MySQL定义备份并发送邮件 #定义变量 DATE$(date %F"_"%H:%M:%S) HOST127.0.0.1 DBdb1 USERNAMEroot PASSWORDun1xR00t MAILdonkeevip.qq.com BACKUP_DIR/data/db_backup SQL_FILE${DB}_sql_$DATE.sql#判断备份目录是否存在 if [ ! -d $B…

Visual Studio提示:无法安装CPpython.Exe.x64

如果你需要在Visual Studio中使用python环境&#xff0c;而且你本身已经有一个python环境&#xff0c;则只需要将你自己的python环境配置到Visual Studio中即可&#xff0c;可以无视如题报错&#xff0c;将不会产生实质性的问题或影响。 解决办法&#xff1a; 工具->获取工…

zabbix“专家坐诊”第255期问答

问题一 Q&#xff1a;大家好&#xff0c;问一下&#xff0c;zabbix做聚合图的时候&#xff0c;可以做到两根线在一个图里- 吗&#xff1f;还是说只能&#xff0c;单边计算聚合&#xff0c;然后再最后作图的时候&#xff0c;添加两条线上去 A&#xff1a;两个数据吗 Q&#xff…

安全政策与安全意识(上)

目录 1、信息安全保障 信息安全保障的三大支柱 2、网络犯罪 2.1 网络犯罪的概念 网络犯罪与计算机犯罪区别 2.2 网络犯罪的特点 2.3 犯罪形式 2.4 网络犯罪的原因(主观) 2.5 网络犯罪的原因(客观) 2.5预防网络犯罪的对策 2.6 计算机信息网络国际联网安全保护管理办法…

C语言知识体系思维导图

为了更清晰地描述C语言知识体系&#xff0c;笔者用一个结构化的思维导图来概括其主要组成部分。见下&#xff1a; 这个思维导图旨在提供一个全面而系统的视角&#xff0c;帮助学习者逐步构建扎实的C语言知识体系。随着学习的深入&#xff0c;可以根据个人兴趣和职业需求&#x…

缓存预热/雪崩/穿透/击穿

1. 缓存预热 预先将MySQL中的数据同步至Redis的过程 2. 缓存雪崩 Redis主机出现故障&#xff0c;或有大量的key同时过期大面积失效导致Redis不可用 Redis中key设置为永不过期&#xff0c;或者过期时间错开Redis缓存集群实现高可用多缓存结合预防雪崩服务降级 3. 缓存穿透 …

51单片机-AT24C02(IIC总线介绍及其时序编写步骤)-第一节(下一节实战)

IIC开始通信&#xff08;6大步&#xff09; 我以前的文章也有对基本常用的通信协议讲解&#xff0c;如SPI UART IIC RS232 RS485 CAN的讲解&#xff0c;可前往主页查询&#xff0c;&#xff08;2024.9.12,晚上20&#xff1a;53&#xff0c;将AT24C02存储芯片&#xff0c;掉电不…

Element UI按钮组件:构建响应式用户界面的秘诀

Element UI按钮组件&#xff1a;构建响应式用户界面的秘诀 一 . 创建按钮二 . 按钮的属性2.1 type 属性2.2 朴素按钮、圆角按钮2.3 size 属性2.4 圆形按钮2.5 加载状态2.6 禁用功能2.7 默认聚焦 三 . 按钮组 在现代网页设计中&#xff0c;按钮不仅是用户交互的核心元素&#xf…