【maptalks】加载SVG和GIF

server/2025/1/15 14:58:59/

加载SVG和GIF

  • 一、加载SVG
    • 方法一:直接载入SVG文件,类似载入图片
    • 方法二:载入SVG路径
  • 二、加载GIF


一、加载SVG

方法一:直接载入SVG文件,类似载入图片

缺点:无法进行进一步加工编辑

javascript">var marker1 = new maptalks.Marker(center.sub(0.009, 0),{'symbol' : {'markerFile'   : '1.svg','markerWidth'  : 28,'markerHeight' : 40,'markerDx'     : 0,'markerDy'     : 0,'markerOpacity': 1}}).addTo(layer);

方法二:载入SVG路径

缺点:无法实现复杂效果,如阴影和渐变色(矢量样式效果会失效)
只能手动替换path,不能解析基础形状代码。

javascript">var map = new maptalks.Map('map', {center: [-0.113049, 51.49856],zoom: 14,baseLayer: new maptalks.TileLayer('base', {urlTemplate: 'https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png',subdomains: ['a', 'b', 'c', 'd'],attribution: '© <a href="http://osm.org">OpenStreetMap</a>  contributors, © <a href="https://carto.com/">CARTO</a> '})
});var layer = new maptalks.VectorLayer('vector').addTo(map);var tiger = new maptalks.Marker([-0.113049, 51.49856], {'symbol': {'markerType': 'path','markerPath': getTigerPath(),'markerPathWidth': 540,'markerPathHeight': 580,'markerFillPatternFile': 'fill-pattern.png',// 'markerLineColor' : 12,'markerWidth': 400,'markerHeight': 400,'markerDy': 200,'markerDx': 0}}
).addTo(layer);function getTigerPath() {return [ {path :"M57 124C56.2 124 55.4 123.851 54.6 123.553C53.8 123.255 53.1 122.857 52.5 122.361C37.9 109.543 27 97.6449 19.8 86.6673C12.6 75.6857 9 65.4255 9 55.8866C9 40.9822 13.826 29.1083 23.478 20.265C33.126 11.4217 44.3 7 57 7C69.7 7 80.874 11.4217 90.522 20.265C100.174 29.1083 105 40.9822 105 55.8866C105 65.4255 101.4 75.6857 94.2 86.6673C87 97.6449 76.1 109.543 61.5 122.361C60.9 122.857 60.2 123.255 59.4 123.553C58.6 123.851 57.8 124 57 124Z"},{transform: "translate(35,35)",path: "M39.1579 14.6842H22.8421V6.85263C23.4471 6.51098 23.9271 5.98496 24.2126 5.35158L40.7895 3.26316C41.6904 3.26316 42.4211 2.53254 42.4211 1.63158C42.4211 0.730621 41.6904 0 40.7895 0L23.7558 2.12105C23.1534 1.31734 22.2146 0.836021 21.2105 0.815789C19.8932 0.822316 18.709 1.62048 18.2084 2.83895L1.63158 4.89474C0.730621 4.89474 0 5.62536 0 6.52632C0 7.42727 0.730621 8.15789 1.63158 8.15789L18.6653 6.03684C18.9155 6.36414 19.2255 6.64085 19.5789 6.85263V14.6842H3.26316C1.46092 14.6842 0 16.1451 0 17.9474V40.7895C0 42.5917 1.46092 44.0526 3.26316 44.0526H39.1579C40.9601 44.0526 42.4211 42.5917 42.4211 40.7895V17.9474C42.4211 16.1451 40.9601 14.6842 39.1579 14.6842ZM19.5789 34.2632H6.52632V21.2105H19.5789V34.2632ZM35.8947 34.2632H22.8421V21.2105H35.8947V34.2632Z" , fill:"#fff"}];
}

二、加载GIF

由于Maptalks基于canvas,因此需要把gif对象作为maptalks.ui.UIMarker 单独添加到地图中操作

案例为VUE结合npm包,
记得用 npm install maptalks 引入依赖

maptalksGIF_75">VUE+maptalks实现GIF可拖拽点

在这里插入图片描述

javascript">var map = new maptalks.Map('map', {center: [-0.113049, 51.498568],zoom: 14,baseLayer: new maptalks.TileLayer('base', {urlTemplate: 'https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png',subdomains: ['a', 'b', 'c', 'd'],attribution: '&copy; <a href="http://osm.org">OpenStreetMap</a> contributors, &copy; <a href="https://carto.com/">CARTO</a>',}),});var point = {x: -0.113049,y: 51.498568};// 创建 UIMarkervar markerDiv = document.createElement('div');markerDiv.className = 'marker';var uiMarker = new maptalks.ui.UIMarker(point, {content: markerDiv,draggable: true}).addTo(map);

maptalksGIF_102">VUE+maptalks实现GIF跟随线条动画

在这里插入图片描述

javascript"><template><div class="container"><div id="map" class="map-container"></div><div class="pane"><a href="javascript:void(0);" @click="initAnimation">Start Animation</a><a href="javascript:void(0);" @click="removeLineAndMarker">Remove Line & Marker</a></div></div>
</template><script>import maptalks from 'maptalks';export default {name: 'MapAnimation',data() {return {map: null,vectorLayer: null,uiMarker: null,lineString: null,aniTimer: null,path: [{ x: -0.131049, y: 51.498568 },{ x: -0.107049, y: 51.498568 },{ x: -0.107049, y: 51.491568 }]};},mounted() {// 初始化地图this.initializeMap();},methods: {// 初始化地图initializeMap() {this.map = new maptalks.Map('map', {center: [-0.113049, 51.498568],zoom: 14,baseLayer: new maptalks.TileLayer('base', {urlTemplate: 'https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png',subdomains: ['a', 'b', 'c', 'd'],attribution: '&copy; <a href="http://osm.org">OpenStreetMap</a> contributors, &copy; <a href="https://carto.com/">CARTO</a>'})});},// 启动动画initAnimation() {// 清除之前的点和线if (this.vectorLayer) {this.vectorLayer.remove();}if (this.uiMarker) {this.uiMarker.remove();}// 创建 LineString 对象this.lineString = new maptalks.LineString(this.path, {visible: false,arrowStyle: 'classic',arrowPlacement: 'vertex-last',symbol: {'lineColor': '#1bbc9b','lineWidth': 6}});// 创建线条图层并将线条添加到地图中this.vectorLayer = new maptalks.VectorLayer('vector', this.lineString).addTo(this.map);// 创建 UIMarkerconst markerDiv = document.createElement('div');markerDiv.className = 'marker';this.uiMarker = new maptalks.ui.UIMarker(this.path[0], {content: markerDiv}).addTo(this.map);// 播放动画this.replay();// 动画结束后回到起点并重新播放this.aniTimer = setInterval(() => {console.log("Animation restarted");this.replay(); // 自动重新播放}, 1600); // 延迟稍微大于动画时间,以确保动画播放完再重启},// 启动动画replay() {this.lineString.hide(); // 隐藏线条this.lineString.animateShow({duration: 1500, // 动画持续时间easing: 'out', // 动画缓动函数}, (frame, currentCoord) => {//核心要点:获得线当前位置currentCoord赋给uimarkerthis.uiMarker.setCoordinates(currentCoord); // 更新 UIMarker 的位置});},// 移除线条和 UIMarkerremoveLineAndMarker() {// 停止循环播放clearInterval(this.aniTimer);// 删除线条图层this.vectorLayer.remove();// 删除 UIMarkerthis.uiMarker.remove();}}};
</script>

以上代码的优化思路:不需要删除线图层,而是在外部初始化线图层后,使用.clear()方法移除对象,并使用.addGeometry()添加对象来实现循环/重置。
H5版本案例请参考地址:https://download.csdn.net/download/qq_35079107/90247851


http://www.ppmy.cn/server/158584.html

相关文章

Redisson和可重入锁初认

文章目录 Redisson 简介Redisson 的主要特点Redisson 的核心模块Redisson的优势使用示例Maven 引入依赖配置 Redisson 客户端分布式锁使用示例 Redisson 使用场景总结 可重入锁关键特性为什么需要可重入锁可重入锁的实现方式可重入锁的实现原理可重入锁的优缺点优点缺点 可重入…

【Python】使用python 对excel文件进行加密

最近在跟同事对接工作的时候&#xff0c;我需要把Excel文件发给对方。 但是由于文件内容的私密性&#xff0c;需要对Excel文件进行加密&#xff0c;保护文件以免给第三方看到&#xff0c;保障数据的安全。 在Python中&#xff0c;有多种方法可以对Excel文件进行加密。以下是几…

好用的php商城源码有哪些?

选择一个优秀的商城工具&#xff0c;能更好地帮助大家建立一个好用的商城系统。目前比较流行的都是开源PHP商城系统&#xff0c;那么现实中都有哪些好用的PHP商城源码值得推荐呢&#xff1f;下面就带大家一起来了解一下。 1.TigShop 【推荐指数】&#xff1a;★★★★★☆ 【推…

day08_Kafka

文章目录 day08_Kafka课程笔记一、今日课程内容一、消息队列&#xff08;了解&#xff09;**为什么消息队列就像是“数据的快递员”&#xff1f;****实际意义**1、产生背景2、消息队列介绍2.1 常见的消息队列产品2.2 应用场景2.3 消息队列中两种消息模型 二、Kafka的基本介绍1、…

springboot基于安卓的反诈APP

Spring Boot基于安卓的反诈APP是一个结合了Spring Boot后端技术和安卓前端技术的反诈骗应用程序&#xff0c;旨在为用户提供全面、高效的反诈防护服务。 一、技术架构 后端&#xff1a;采用Spring Boot框架&#xff0c;利用其自动配置、简化依赖管理等功能&#xff0c;构建…

Open FPV VTX开源之第一次出图

Open FPV VTX开源之第一次出图 1. 源由2. 连线2.1 飞控2.2 调试 3. serial3.1 启动log - uboot3.2 登录版本 - linux3.3 获取有线IP 4. ssh - linux5. PixelPilot出图6. 总结7. 参考资料8. 补充8.1 8812AU网卡8.2 DEBUG串口部分乱码8.3 偶尔启动卡住8.4 花屏、丢包严重 1. 源由…

CSS3 弹性盒子

CSS3 弹性盒子 介绍 CSS3 弹性盒子&#xff08;Flexbox&#xff09;是一种用于布局设计的强大工具。它提供了一种更加高效的方式来对容器内的子元素进行排列、对齐和分配空间。Flexbox 的设计目标是提供一种统一的布局模型&#xff0c;能够适应不同屏幕尺寸和设备类型&#x…

【自然语言处理】P1 自然语言处理概述

目录 什么是自然语言处理定义常用术语自然语言处理的任务自然语言处理的发展历程自然语言处理的挑战自然语言处理的常用技术TF-IDF词嵌入分词循环神经网络注意力机制预训练 什么是自然语言处理 定义 自然语言指的是人类的语言&#xff0c;如中文、英语等&#xff0c;处理特指…