天地图绘制区域图层

news2024/11/27 10:22:15

背景:

业务方要求将

原效果图
原效果图
参考效果图
最终实现效果

变更点:

1.将原有的高德地图改为天地图

2.呈现形式修改:加两层遮罩:半透明遮罩层mask+区域覆盖物mask

实现过程:

1.更换地图引入源

 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/maptalks/dist/maptalks.css" />
  <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/maptalks/dist/maptalks.min.js"></script>

2.天地图基本配置-tk

3.实用方法封装

1)初始化地图方法封装

/**
 * 初始化地图
 */
export const initMap = (dom: any) => {
  window.maptalksMap = new window.maptalks.Map(dom, mapOptions)
}

2)初始化底图

/**
 * 初始化底图
 */
export const initBaseLayer = () => {
  const baseLayer = new window.maptalks.TileLayer(mapLayers.baseLayer, {
    urlTemplate: TianDiTuTile,
    subdomains: ['1', '2', '3', '4', '5'],
    attribution:
      '&copy; <a target="_blank" href="http://www.tianditu.cn">Tianditu</a>'
  })
  window.maptalksMap.setBaseLayer(baseLayer)
}

3)初始化底图的地点文字标记

/**
 * 初始化底图的地点文字标记
 */
export const initBaseMarkLayer = () => {
  const baseMarkLayer = new window.maptalks.TileLayer(mapLayers.baseMarkLayer, {
    urlTemplate: TianDiTuMark,
    subdomains: ['1', '2', '3', '4', '5']
  })
  baseMarkLayer.addTo(window.maptalksMap)
}

4)设置半透明遮罩层mask,其中,maskGeoJSon为导出的高德数据

/**
 * 设置半透明遮罩层mask
 */
export const initMaskPolygonLayer = () => {
  const maskPolygonLayer = new window.maptalks.VectorLayer(
    mapLayers.maskLayer
  )
  const geojson: any = maskGeoJSon.features[0].geometry
  const wgsJson = gcoord.transform(geojson, gcoord.GCJ02, gcoord.WGS84);
  const polygons = window.maptalks.GeoJSON.toGeometry(
    wgsJson,
    (geometry: any) => {
      geometry.setSymbol({
        lineColor: '#01e0f1',
        lineWidth: 4,
        lineOpacity: 0.4,
        polygonFill: '#014493',
        polygonOpacity: 0.3
      })
    }
  )
  maskPolygonLayer.addGeometry(polygons)
  maskPolygonLayer.addTo(window.maptalksMap)
}

5)设置覆盖物-某区域轮廓

/**
 * 设置覆盖物-嘉善轮廓
 */
export const initAreaPolygonLayer = () => {
  const areaPolygonLayer = new window.maptalks.VectorLayer(
    mapLayers.areaPolygonLayer
  )
  const polygons = window.maptalks.GeoJSON.toGeometry(
    jiashanGeoJSon,
    (geometry: any) => {
      geometry.setSymbol({
        lineColor: '#01e0f1',
        lineWidth: 4,
        lineOpacity: 1,
        polygonFill: '#0e4d96',
        polygonOpacity: 0.8
      })
    }
  )
  areaPolygonLayer.addGeometry(polygons)
  areaPolygonLayer.addTo(window.maptalksMap)
}

6)设置地名

/**
 * 设置地名
 */
export const initAreaNameLayer = () => {
  const areaNameLayer = new window.maptalks.VectorLayer(mapLayers.areaNameLayer)
  jiashanTownCenter.forEach(item => {
    new window.maptalks.Marker(item.position, {
      symbol: {
        textName: item.name,
        textSize: 20,
        textFill: '#ccc'
      }
    }).addTo(areaNameLayer)
  })
  areaNameLayer.addTo(window.maptalksMap)
}

4.应用

useEffect(() => {
    if (amapDomRef.current) {
      initMap(amapDomRef.current) // 初始化地图
      initBaseLayer() // 初始化底图
      initBaseMarkLayer() // 初始化底图的地点文字标记
      // initBackgroundLayer()
      initMaskPolygonLayer() // 设置半透明遮罩层mask
      initAreaPolygonLayer() // 设置覆盖物-区域(某地区)轮廓
      initAreaNameLayer() // 设置地名
      const data: any[] = getAllRealSchoolByMap().map(c => {
        return {
          name: c.title,
          position: c.position,
          status: c.checkStatus
        }
      })
      setCampusSecurySchoolMarkerToMap(data) // 业务数据点
    }
  }, [amapDomRef])

运行效果:不理想,出现了白色间隙,后面找出原因是因为高德地图和天地图不是同个坐标系(因为高德地图是火星坐标,而天地图是wgs84墨卡托4490),所以从高德地图上拉取的数据在天地图上不能完全适配,就出现了这样的间隙。

高德:火星坐标

天地图:wgs84墨卡托4490

解决方案:用gcoord进行坐标转换,参考文章:高德地图更换天地图底图(坐标转换)—使用高德API(WMTS)_高德经纬度转天地图经纬度_❄️文宸er的博客-CSDN博客

const wgsJson = gcoord.transform(geojson, gcoord.GCJ02, gcoord.WGS84);

最后,附上接口文档

MapTalks手册:https://doc.maptalks.com/docs/style/symbols/

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

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

相关文章

BI系统上的报表怎么导出来?附方法步骤

在BI系统上做好的数据可视化分析报表&#xff0c;怎么导出来给别人看&#xff1f;方法有二&#xff0c;分别是1使用报表分享功能&#xff0c;2使用报表导出功能。下面就以奥威BI系统为例&#xff0c;简明扼要地介绍这两个功能。 1、报表分享功能 作用&#xff1a; 让其他同事…

SqlServer备份与还原 System.Data.SqlClient.SqlError: 媒体集有 2 个媒体簇,但只提供了 1 个。必须提供所有成员

System.Data.SqlClient.SqlError: 媒体集有 2 个媒体簇,但只提供了 1 个。必须提供所有成员。 (Microsoft.SqlServer.Smo) 这是由于你备份时&#xff0c;没有去掉默认的C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\数据库名.bak&#xff0c;而又添加了一个新路…

【扩散生成模型】Diffusion Generative Models

提出扩散模型思想的论文&#xff1a; 《Deep Unsupervised Learning using Nonequilibrium Thermodynamics》理解 扩散模型综述&#xff1a; “扩散模型”首篇综述论文分类汇总&#xff0c;谷歌&北大最新研究 理论推导、代码实现&#xff1a; What are Diffusion Models?…

【办公小神器】:快速批量转换Word、Excel、PPT为PDF脚本!

文章目录 ✨哔哩吧啦✨脚本使用教程✨温馨小提示设置&#x1f4da;资源领取 专栏Python零基础入门篇&#x1f525;Python网络蜘蛛&#x1f525;Python数据分析Django基础入门宝典&#x1f525;小玩意儿&#x1f525;Web前端学习tkinter学习笔记Excel自动化处理 ✨哔哩吧啦 前…

Linux 安装 git

一 . 安装git 方式1&#xff1a;通过yum 安装 yum -y install git查看是否安装成功 git --version安装目录在&#xff1a;/usr/libexec/git-core yum 安装有一些缺点 &#xff1a;不能自己指定安装目录、安装版本 方式 2 下载tar.gz 包 配置 查看git 版本&#xff1a;Index…

windows11专业版下安装ubuntu20终端应用

主要步骤如下&#xff1a; https://blog.csdn.net/i_ziyu/article/details/127603934 https://blog.csdn.net/qq_17525509/article/details/122287051 搜索windows功能&#xff1a; 在设置里面&#xff1a; 设置–更新和安全–开发者选项 打开开发者模式。 去应用商店下载&a…

ChatGPT实战-构建文章分析AI聊天机器人

视频版本&#xff1a; ChatGPT实战-构建文章分析AI聊天机器人 简介 本文实现如下功能&#xff1a; 当浏览一篇文章&#xff0c;点击分享&#xff0c;分享到聊天软件的对话框中。它就会生成一个文章的总结和分析结果。例如分析是否有逻辑问题&#xff0c;是否有诱导购买&#…

基于SSM+Vue的在线购书商城系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

浅谈 React 与 Vue 更新机制的差异

前言 哈喽&#xff0c;大家好&#xff0c;我是 Baker &#xff01;&#x1f389; 对于前端的 Vue 和 React 相信大家并不陌生&#xff0c;这两个库有着截然不同的设计思想和发展目标&#xff0c;对于我们上层使用者来说&#xff0c;研究它们的差异不仅让我们更加深入的去理解…

使用自定义插槽(slot)来将数据传递给插槽内容。el-step

description为描述性文字&#xff0c;需使用slot来自定义文字。 A 是 Vue 3 中的语法糖&#xff0c;用于简洁地定义插槽。用来绑定step组件中description。step可使用插槽 B是绑定date数据实现自定义描述文字。

VoxWeekly|The Sandbox 生态周报|20230918

欢迎来到由 The Sandbox 发布的《VoxWeekly》。我们会在每周发布&#xff0c;对上一周 The Sandbox 生态系统所发生的事情进行总结。 如果你喜欢我们内容&#xff0c;欢迎与朋友和家人分享。请订阅我们的 Medium 、关注我们的 Twitter&#xff0c;并加入 Discord 社区&#xf…

linux安装配置 flume

目录 一 解压安装包 二 配置部署 &#xff08;1&#xff09;修改配置 &#xff08;2&#xff09;下载工具 &#xff08;3&#xff09;创建配置文件 &#xff08;4&#xff09;启动监听测试 &#xff08;5&#xff09;flume监控文件 一 解压安装包 这里提供了网盘资源 链…

狂热过后,RPA到底是什么?

随着科技的不断进步&#xff0c;人工智能正在逐步渗透到各个领域&#xff0c;并不断演变&#xff0c;成为更加便捷的方式步入万家&#xff0c;让科技的变革的春风吹入了千行百业&#xff0c;落入千家万户。而“RPA”&#xff08;Robotic Process Automation&#xff0c;即机器人…

视频去LOGO的方法,AI自动完美地去除视频LOGO

喜欢做影视剧剪辑的朋友&#xff0c;可能会遇到下载的影视剧本身存在字幕、台标的情况&#xff0c;这些和新的剪辑主题不相符的原片元素&#xff0c;都会影响我们最终的成片效果。不过也无需烦恼哦&#xff0c;我们可以利用AI视频处理工具&#xff0c;自动去除视频中的logo或其…

6个超好用的团队任务管理工具,帮你解决团队工作任务“杂乱难”

当团队面临大量任务和复杂工作时&#xff0c;任务管理往往变得杂乱且困难。为了提高团队效率和组织能力&#xff0c;许多团队都在寻找适合他们需求的任务管理工具。在这篇文章中&#xff0c;我们将介绍6个超级好用的团队任务管理工具&#xff0c;它们可以帮助团队更好地组织、分…

【Redis】第1讲 互联网架构的演变历程

第1阶段 数据访问量不大&#xff0c;简单的架构就可以&#xff01; 第2阶段 数据访问量大&#xff0c;使用缓存技术缓存数据库的压力&#xff0c;不同的业务访问不同的数据库。 第3阶段 之前的缓存技术确实能够缓解数据库的压力&#xff0c;但是写和读都集中在一个数据库上&…

PLC串口通讯和通讯接口知识汇总

在使用PLC的时候会接触到很多的通讯协议以及通讯接口&#xff0c;最基本的PLC串口通讯和基本的通讯接口你都了解吗&#xff1f; 一、什么是串口通讯&#xff1f; 串口是一种接口标准&#xff0c;是计算机上一种非常通用设备通信的协议。它规定了接口的电气标准&#xff0c;没…

国家加快培育数据要素市场的重要意义是什么

加快培育数据要素市场 中国大数据发展趋势如何?据工业和信息化部官网9月29日消息&#xff0c;9月28日&#xff0c;2021全国大数据标准化工作会议在山东省济南市召开。工信部信发司副司长王建伟参加会议并致辞。当前&#xff0c;数据已成为重要的生产要素&#xff0c;是加快经…

buuctf-[网鼎杯 2020 朱雀组]phpweb

1.打开网站&#xff0c;吓我一跳 2.查看源代码&#xff0c;主要看到timezone&#xff0c;然后这个页面是五秒就会刷新一次 一开始去搜了这个&#xff0c;但是没什么用 3.使用bp抓包 会发现有两个参数&#xff0c;应该是用func来执行p 4.修改func和p file_get_contents&#…

linux离线安装glibc.i686

一、下载相关rpm包 链接&#xff1a;https://pan.baidu.com/s/1Of1myRZa2ClrlSYw43OR3Q 提取码&#xff1a;hlsq 二、将相关rpm包复制到服务器上 三、执行sh install.sh即可