GIS前端-地图标绘与动画

简介: GIS前端-地图标绘与动画

在GIS领域,电子地图发挥出了显著的作用,从衣、食、住、行各个方面影响着人们的日常生活,给人们带来极大的便利。从功能层面窥探GIS的图形绘制、地图标注、动画特效等客户端可视化功能:①图形绘制是最基础的客户端功能。一方面通过客户端图形绘制与地图交互,获得其他查询、分析等功能操作所需的空间几何;另一方面作为空间信息可视化的窗口,负责展现点、线、面等几何信息。②地图标注是电子地图的核心功能,与很多应用息息相关。例如,通过图片标注的形式,在地图上标识餐厅、医院、学校、银行等兴趣点;通过文字标注展示兴趣点的具体信息;通过Popup标注实现图文结合的展示效果等。③动画特效是一种形象逼真的展现方式,具有很广泛的应用场景。例如,一个快递从发货地运送到目的地,可以通过要素轨迹移动来实现;一个台风的影响范围,可以通过图形闪烁功能来表达等。

地图标绘与动画特效是WebGIS应用不可或缺的功能,丰富了地理信息客户端可视化功能,让WebGIS应用更多彩、更生动、更形象,增强用户体验。本章从图形绘制、地图标注、动画特效3部分着手,让读者感受这些功能在实际场景中的应用。此外,本章还重点讲述了基于Leaflet实现这些功能的一般方法、流程,每个功能都给出了核心实现代码,供用户参考。

图形绘制原理

形绘制功能,即在地图容器中绘制几何图形,包括点、线、圆、矩形与多边形等,既可以通过鼠标交互绘制,也可以直接添加进程序中绘制好的图形。


图形绘制是WebGIS非常重要的一部分,查询、编辑、分析等功能均涉及客户端的图形绘制。一般通过绘制图形来获取地图的空间范围,为查询、分析等功能提供几何条件限制及操作要素的空间范围等。


在Leaflet中,图形绘制的基类为L.Path,从该基类中派生出了多个子类,用于基本图形的绘制,包括L.Polyline、L.Polygon、L.Rectangle、L.Circle等。基于这些子类,调用相关的API接口,用户即可实现各种图形的绘制功能。Leaflet中的图形绘制类关系图如图

绘制图形时需要构造哪些参数,才能绘制出想要的图形?首先,构造该图形的坐标,只有设置了坐标,图形才能被绘制在指定位置;其次,设置图形的样式信息,如边线颜色、填充色、透明度、线条宽度、半径大小等。

下面以绘制线为例进行介绍,官网给出的接口为:

绘制几何图形

几何图形包括点、折线、圆、矩形、多边形等。本实例主要实现这些基本图形的绘制功能。无论当前地图是哪种参照系,在绘制图形时传入的坐标均为经纬度坐标,且一定要按照先纬度、后经度的格式组织。

本实例以天地图地图作为底图绘制几何图形,主要实现步骤如下。

(1)在中通过onload事件加载初始化函数,并创建一个div作为Map对象的容器。

(2)在初始化函数中,创建一个Map对象,设置显示中心、当前显示级数、参考坐标系等参数。

(3)通过L.TileLayer加载一幅天地图地图进行显示。

(4)在脚本函数drawGraphic()中实现几何图形的绘制功能,通过options设置所绘制的几何图形的参数,如边线颜色、透明度等。

代码如下:

在WebGIS应用中,交互绘制是一个核心功能,与许多应用相关联。比如,在地图上绘制一条线,显示实地距离;绘制一片多边形区域,得到实地面积;交互式单击拾取地物、拉框查询、交互编辑等,应用十分广泛。


交互绘制功能的核心显而易见,在于“交互”二字。Leaflet提供了很多交互事件供用户使用,如鼠标单击事件(mousedown)、鼠标移动事件(mousemove)、鼠标释放事件(mouseup)等。在事件的响应函数中可以动态获取坐标信息,如监听鼠标单击事件,当单击地图时,即可获取单击位置处的坐标;监听鼠标双击事件,当双击地图时,完成图形的绘制功能。


Leaflet提供了多个交互绘制及编辑的功能插件。本节以一个常用的交互编辑插件leaflet.draw.js为例,向读者介绍基于Leaflet进行交互绘制的功能及效果。


修改图形坐标点

Leaflet官网的插件库提供了图形交互绘制及编辑的插件(leaflet.draw.js插件下载地址为https://github.com/Leaflet/Leaflet.draw)。leaflet.draw.js插件封装了多种图形的绘制控件,如点、线、圆、矩形、多边形、标注等。在构造绘制对象时,以属性的形式加载这些控件。如果需要使用某个控件,则将该控件的属性值设置为true,反之设置为false。

除了基本图形绘制控件,leaflet.draw.js插件还封装了图形的几何节点编辑控件、图形删除控件,供用户对绘制的图形进行编辑操作。本实例基于leaflet.draw.js插件编写,主要实现步骤如下。

(1)在中通过onload事件加载初始化函数,并创建一个div作为地图容器。

(2)在初始化函数中,创建一个Map对象,设置显示中心、当前显示级数、参考坐标系等参数。

(3)通过L.TileLayer加载一幅天地图地图进行显示。

(4)创建绘制控件L.Control.Draw,设置需添加的各种绘制控件。

(5)监听绘制完成事件。

代码如下:

目录
相关文章
|
7月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
Animation属性 css3为Animation动画提供的几个属性如下: 属性名 属性值 animation-name 指定动画名称,该属性指定一个已有的关键帧定义。 animation-duration 指定动画持续时间。 animation-timing-funtion 指定动画变化速度。 animation-delay 指定动画延迟多长时间才开始执行。 animation-iteration-count 指定动画的循环执行次数。 animation:这是一个复合属性。
499 3
|
JSON 前端开发 JavaScript
前端使用lottie-web,使用AE导出的JSON动画贴心教程
前端使用lottie-web,使用AE导出的JSON动画贴心教程
2460 2
|
前端开发 UED 开发者
揭秘!前端大牛们如何巧妙利用动画效果,提升用户体验感!
前端开发中,动画不仅是美化网页的手段,更是提升用户体验的关键。本文介绍了三种常见的动画技术:渐进加载动画、过渡动画和SVG动画,分别用于提升页面响应速度、增强交互性和传递情感信息,帮助网页焕发新生。
461 4
|
前端开发 JavaScript API
前端开发的秘密武器:这些工具让你轻松应对各种复杂动画效果!
【10月更文挑战第30天】前端开发中,动画效果为页面增添了无限生机。CSS3的@keyframes规则和JavaScript动画库如GSAP、Anime.js等,使开发者能轻松实现从简单到复杂的动画效果。掌握动画原理和设计原则,结合工具和库,可以创造出既美观又实用的动画,提升用户体验。
366 4
|
iOS开发 Android开发 MacOS
从零到全能开发者:解锁Uno Platform,一键跨越多平台应用开发的神奇之旅,让你的代码飞遍Windows、iOS、Android、macOS及Web,技术小白也能秒变跨平台大神!
【8月更文挑战第31天】从零开始,踏上使用Uno Platform开发跨平台应用的旅程。只需编写一次代码,即可轻松部署到Windows、iOS、macOS、Android及Web(通过WASM)等多个平台。Uno Platform为.NET生态带来前所未有的灵活性和效率,简化跨平台开发。首先确保安装了Visual Studio或VS Code及.NET SDK,然后选择合适的项目模板创建新项目。项目结构类似传统.NET MAUI或WPF项目,包含核心NuGet包。通过简单的按钮示例,你可以快速上手并构建应用。Uno Platform让你的技术探索之旅充满无限可能。
865 0
|
前端开发 JavaScript
前端 css 经典:transition 过渡和 animation 动画
前端 css 经典:transition 过渡和 animation 动画
316 2
|
前端开发 定位技术 API
【Flutter前端技术开发专栏】Flutter中的第三方服务集成(如支付、地图等)
【4月更文挑战第30天】本文介绍了在Flutter中集成第三方服务,如支付和地图,以增强应用功能和用户体验。开发者可通过官方或社区插件集成服务,关注服务选择、API调用、错误处理和用户体验。支付集成涉及选择服务、获取API密钥、引入插件、调用API及处理结果。地图集成则需选择地图服务、获取API密钥、初始化地图并添加交互功能。集成时注意选择稳定插件、阅读文档、处理异常、优化性能和遵循安全规范。随着Flutter生态发展,更多第三方服务将可供选择。
449 0
【Flutter前端技术开发专栏】Flutter中的第三方服务集成(如支付、地图等)
|
前端开发 开发者 UED
【Flutter前端技术开发专栏】Flutter中的动画与过渡效果实现
【4月更文挑战第30天】Flutter UI框架以其高性能动画库著称,允许开发者轻松创建复杂动画。动画基于`Animation<double>`类,结合`Tween`、`Curve`和`AnimationController`实现。简单示例展示了一个点击按钮后放大效果的创建过程。此外,Flutter提供预定义动画组件和`Navigator`类实现页面过渡。`PageRouteBuilder`允许自定义过渡,而`Hero`动画则实现跨页面的平滑过渡。借助这些工具,开发者能提升应用的视觉吸引力和交互体验。
579 0
【Flutter前端技术开发专栏】Flutter中的动画与过渡效果实现
|
编解码 前端开发 iOS开发
前端开发入门笔记(八)CSS3属性详解:动画详解+Flex布局图文详解+Web字体
前端开发入门笔记(八)CSS3属性详解:动画详解+Flex布局图文详解+Web字体
408 1
|
前端开发 JavaScript API
只会用插件可不行,这些前端动画技术同样值得收藏-JavaScript篇(下)
只会用插件可不行,这些前端动画技术同样值得收藏-JavaScript篇(下)
375 0

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
    1132
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    499
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    387
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    374
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    493
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    667
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    1127
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    262
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    956
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    448