记录--在高德地图实现流动的线图层

这篇具有很好参考价值的文章主要介绍了记录--在高德地图实现流动的线图层。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

记录--在高德地图实现流动的线图层

介绍

有朋友反馈说最近分享的内容不太好理解,那么今天来分享个早前开发的图层制作过程,基于GIS数据代码生成流动的车行线,上手很简单。下面我将在实现思路、具体开发、数据来源这几方面逐步讲解,希望读者能从中获取对数据可视化开发的兴趣。文中使用到高德地图JSAPI、three.js和一些GIS数据处理工具。

实现思路

1.这是我们通常能够获取到的数据,从geoJSON数据通常没有真正的曲线,得到通常是基于关键节点生成的线段几何体,只要线越密集,看上去就越平滑,所消耗的资源也就越多。

记录--在高德地图实现流动的线图层

 2.在空间几何中,线本身是没有宽度这个概念的,我们能看到不同粗细程度到线,其本质其实是一连串拼合的三角面带,这些面始终朝着相机,这样的话才保证我们在不同角度看到的始终是“均匀圆润”的线。

记录--在高德地图实现流动的线图层

 3.给这些几何赋予纯色材质,整条线看着像一个整体。

记录--在高德地图实现流动的线图层

 4.根据具体场景给几何体赋予贴图,我们知道如果用相机长曝光模式去拍摄夜晚车辆移动,能够看到一条从亮到暗的轨迹,因为给线图层也赋予这样一层贴图。

记录--在高德地图实现流动的线图层

 5.通过调整贴图的X轴偏移让线条动起来。

记录--在高德地图实现流动的线图层

 6.增加后期辉光效果,给图层赋予光的质感。

记录--在高德地图实现流动的线图层

实现步骤

1.编写构造函数,声明基础的参数。这里Layer为基类,封装了在高德地图上创建glCustomLayer图,管理图层,逐帧函数等基础操作。

class FlowlineLayer extends Layer {
  // 图层数据
        _data = []
        // 线材质
  _material = null

  /**
   *  @param {Object}   config
   *  @param {geoJSON}  config.data 路径数据  
   *  @param {Number}   [config.lineWidth=20.0] 路径线条宽度
   *  @param {Number}   [config.altitude=0.0] 整体海拔高度
   *  @param {Array}    [config.zooms=[5,14]] 显示区间
   *  @param {Boolean}  [config.animate=true] 是否显示动画
   *  @param {Number}   [config.speed=1.0]  流动速度系数
   *  @param {String}   [config.uvMapURL='./static/texture/road_bg1.png'] 线条纹理URL
   */
  constructor (config) {
    const conf = {
      data: null,
      speed: 1,
      animate: true,
      lineWidth: 20.0,
      altitude: 0.0,
      uvMapURL: './static/texture/road_bg1.png',
      ...config
    }

    super(conf)

    this.initData(conf.data)
  }	
}

2.将Polyline的geoJSON数据并转为空间坐标

initData (data) {
  const arr = data?.features.map(item => {
    return item?.geometry?.coordinates[0]
  })
	// 经纬度转为空间坐标
  const res = this.customCoords.lngLatsToCoords(arr)
  this._data = res
}
3.根据数据创建几何体,并设置材质。事实上我们得到的是一条没有宽度的线的数据,而最终的展示的是平行于地面的一条平面带,这里我们使用插件meshline,它提供的MeshLineGeometry能够自动帮我们生成所需的几何体。
import { MeshLineGeometry, MeshLineMaterial } from '../plugins/meshline.js'
//...

initLines () {
    const { scene } = this

	  //材质纹理
    const texture = new THREE.TextureLoader().load(this.mergeSourceURL(this._conf.uvMapURL))
    texture.wrapS = THREE.RepeatWrapping
    texture.wrapT = THREE.RepeatWrapping
    const material = new MeshLineMaterial({
      lineWidth: this._conf.lineWidth,
      sizeAttenuation: 1,
      useMap: 1,
      opacity: 1,
      map: texture,
      transparent: true,
      depthTest: true
    })
    this._material = material

	  //生成网格体
    const multiLine = [...this._data]
    multiLine.forEach(lineData => {
      const points = []
      lineData.forEach(([x, y]) => {
        points.push(new THREE.Vector3(x, y, this._conf.altitude))
      })

      const line = new MeshLineGeometry()
      line.setPoints(points)
      const mesh = new THREE.Mesh(line, material)

      scene.add(mesh)
    })
  }

4.在requestAnimationFrame逐帧修改纹理的x偏移量,形成动画效果

// 更新纹理偏移量
update () {
    if (!this._isAnimate) {
      return
    }
    if (this._material?.uniforms?.offset) {
      this._material.uniforms.offset.value.x -= 0.01 * this._conf.speed
    }
}

5.添加后期效果,这块不作展开,有兴趣可以看 这里

const layer = new FlowlineLayer({
    id: 'trafficLayer',
    //...
  })

  layer.on('complete',(layer)=>{
    new EffectLayer({
        layer,
        style:{
            strength: 1.0, //发光强度
            radius: 0.5 //泛光半径
        }
    })
  })

路径数据从哪来

1.通过地图引擎的路径导航功能获取路径,如下图所示,通过指定起点、终点、经过点可以从API中获取规划好的路径数据,适合在地图上能查得到的部分道路

记录--在高德地图实现流动的线图层

 2.自行绘制,如果需要展示的路径还处于规划中,或者属于园区内部道路数据,在官方地图上无法获取,则需要人工使用工具做绘制,这里推荐使用QGIS绘制矢量图层。

记录--在高德地图实现流动的线图层

 3.如果是涉及范围或数据量较大的路径,则需要通过某些途径导出了,通过OSM可以无套路导出所需的各种点线面数据,缺点就是有些数据实在太老旧了。在国内我们使用水经注之类的GIS数据下载器获取最新最全的数据,当然,优质的数据都是收费的。

记录--在高德地图实现流动的线图层

本文转载于:

https://juejin.cn/post/7294844864020348982

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

 记录--在高德地图实现流动的线图层文章来源地址https://www.toymoban.com/news/detail-736901.html

到了这里,关于记录--在高德地图实现流动的线图层的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 申请高德地图API【流程记录】

    现在我们需要使用高德地图的api进行功能的实现,这就需要我们申请一个高德地图的key 1.进入官网 登录账号 点击高德开放平台 | 高德地图API (amap.com)。进行登录 选择控制台 注册为开发者 填写邮箱获取验证码后,进行支付宝扫码进行实名认证 注册完成 点击确认即可 2.申请

    2024年01月17日
    浏览(39)
  • 记录--写一个高德地图巡航功能的小DEMO

    加载地图 使用 AMapLoader.load 加载地图,从 控制台  申请一个属于自己的key 使用 new AMap.Map 实例化地图,并设置 mapStyle 为 \\\"amap://styles/grey\\\" ,也可以在官网上自己设计属于自己的风格,主要讲的不是这部分所以大概交代一下就过去了,实例化Map后返回一个map实例,后续的操作

    2024年02月11日
    浏览(37)
  • 【学习记录】使用高德地图API开发一个简单基础的WebGIS系统(GIS考研院校专题地图网站)

    本人只是一个普普通通的 GIS 学生, 下面是记录我的写的一个作业 demo 的内容, 可能会存在一定的错误, 欢迎在评论区私信交流! *完整功能展示看这里 (B站) *感兴趣可以下载完整 demo 看看 (阿里云盘) 本网站(GIS考研院校可视化专题网站)为2022年GIS考研初期准备择校的学生服务

    2024年02月13日
    浏览(85)
  • 记录下uniapp开发结合webview调用高德地图(路线规划,多路选择,双向通信)

    uniapp结合webview实现(微信和app上)简单版导航打车应用,总体实现方案是 在uniapp上嵌入web网页,在web网页上调用高德地图api实现渲染地图及路线 去高德开放平台注册账号并创建web应用,再生成web安全密钥和key 如果需要运行到微信上则需要开通微信公众平台上应用需要的定位

    2024年02月19日
    浏览(38)
  • 高德地图系列(三):vue项目利用高德地图实现地址搜索功能

    目录 第一章 效果图 第二章 源代码 高德地图为我们提供了搜索联想,以及搜索结果标记,该案例已将基础功能打通,后续我们肯定还会对功能有所修改,想实现自己想要的效果,基本上看高德地图文档对着改就好了(跟我们用别的工具一样做即可)  代码描述如下:  注意事

    2024年02月03日
    浏览(51)
  • 【uniapp】uniapp使用高德地图定位打包成安卓app的一些记录,比如打包后定位失效、

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 我的项目是uniapp打包成安卓app,这里不会讲解微信小程序之类的踩坑,只记录app端的用法 首先要知道,定位是返回经纬度,地图是渲染页面。这个不能搞混。 在uniapp中有map组件,具体可看官网的文档

    2023年04月16日
    浏览(46)
  • 高德地图实现-微信小程序地图导航

    1、在高德开放平台注册成为开发者 2、申请开发者密钥(key)。 3、下载并解压高德地图微信小程序SDK 注册账号(https://lbs.amap.com/)) 申请小程序应用的 key 应用管理(https://console.amap.com/dev/key/app)) - 我的应用 - 创建新应用 生成的 key 即可用在程序中 下载相关 sdk 文件,导入 amap-

    2024年02月08日
    浏览(76)
  • Vue 引入高德地图:实现地图展示与交互

    本文将介绍如何在Vue项目中引入高德地图,以及如何实现地图的展示和交互功能。我们将从安装依赖开始,然后配置高德地图的密钥和相关插件,最后演示如何在Vue组件中使用地图组件和实现基本的交互功能。通过本文的指导,您将能够轻松地在Vue项目中集成高德地图,实现

    2024年02月08日
    浏览(50)
  • 基于高德地图 瓦片 实现 unity lbs

    参考文章:           1.国内主要地图瓦片坐标系定义及计算原理 | CntChen Blog         2.Unity LBS地图(瓦片地图,不接入任何SDK)_099_F11的博客-CSDN博客_unity离线地图 瓦片:高德等地图厂商把 世界地图分成了 好多张图片,每张图片就是一个瓦片 实现思路,根据 https 连接 请求

    2024年02月14日
    浏览(66)
  • Android中集成高德地图SDK实现地图定位和导航功能(一)

    名称和应用类型随便填 1.添加key 2.获取SHA1值 2.1.使用windwos+R 输入cmd 打开控制窗口 输入 where keytool 获取keytool的路径 2.2.在环境变量中配置keytools 的路径 2.3 然后接着cmd窗口中输入 keytool -v -list -keystore 后面是你签名证书的我的是keytool -v -list -keystore C:Users86181.androiddebug.keystor

    2024年02月12日
    浏览(88)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包