当前位置: 首页 > news >正文

arcgis for js 添加自定义叠加图片到地图坐标点上

在使用arcgis for js开发地图绘制图层时,可以通过相关api实现添加图标到某个坐标点,那么如果现在有一个需要添加一个小图叠大图的需求,又或者是自定义绘制图标,如何实现?

1、简单地绘制一个图标到底图图层上面

const graphicsLayer = new GraphicsLayer();
const graphic = new Graphic();
const point = new Point({x,y,spatialReference: 4546, // 假设坐标系为4546
});
const pointSymbol = new PictureMarkerSymbol({url: "./test_icon.svg", // 图标相对路径height: 22,width: 22,yoffset: 10, // 偏移量
});
graphic.geometry = point;
graphic.symbol = pointSymbol;
graphicsLayer.add(graphic);
map.add(graphicsLayer);

我们发现,这样子只能添加一个特定的图片到该坐标点,假设我需要在这个点上面大图叠加一个小图标,如何实现呢?
翻阅了资料,关于叠加自定义图层api版本不一致也很难实现,偶然发现url可以渲染base64图片。那我直接绘制生成base64图片再添加到图层上面,不就可以实现需求了?

实践一下:

2、使用canvas绘制生成base64图片

function createCustomIcon() {return new Promise((resolve, reject) => {let url:string = "";const canvas = document.createElement("canvas");// 获取 Canvas 的 2D 上下文const ctx = canvas.getContext("2d");if (!ctx) return;canvas.width = 40;canvas.height = 40;// 绘制 SVG 图标到 Canvasconst img = new Image();const innerImg = new Image();img.src = './img.svg'; // 外层图innerImg.src = './inner_img.svg'; // 叠加内层图innerImg.onload = function () {ctx.drawImage(img, 0, 0, 40, 40); // 外层图ctx.drawImage(innerImg, 10, 6, 20, 20); // 叠加图url = canvas.toDataURL(); // 生成 Canvas 的 Data URLresolve(url);};});
}

现在已经绘制生成了一个图片,直接访问url是否正确显示,根据这个方法可以绘制任意你想绘制的图片。

现在将混合的图片添加到图层上面:

3、将自定义叠加图添加到图层上面

const url = await createCustomBase64();
// 和步骤1 一样,就是将图片路径修改一下
const pointSymbol = new PictureMarkerSymbol({url, // canvas绘制生成的图片URLheight: 22,width: 22,yoffset: 10, // 偏移量
});
// ...

效果图:自定义叠加图标
这是由两个小图标组合的图,可以根据需求改变innerImg或者img实现多个不同组合图标,并且添加到图层上面。

当然,也可以使用canvas随意绘制自定义图形添加到图层。

http://www.lryc.cn/news/258269.html

相关文章:

  • 记录 | linux下互换键盘的Ctrl和CapsLock键
  • 【公网远程手机Android服务器】安卓Termux搭建Web服务器
  • 【银行测试】金融项目+测试方法范围分析,功能/接口/性能/安全...
  • Java网络编程——安全网络通信
  • 云原生数据库是什么?它的作用是啥?
  • 使用ansible批量初始化服务器
  • 国标GB28181安防视频云平台EasyCVR出现持续重启现象,是什么问题?该如何解决?
  • 【APP安卓测试工具】adb(Android Debug Bridge)
  • 图像融合领域的挑战
  • Tomcat配置成服务、开机自启动
  • IntelliJ IDEA创建一个spark的项目
  • 【数据库】数据库多种锁模式,共享锁、排它锁,更新锁,增量锁,死锁消除与性能优化
  • 串口通信(1)-硬件知识
  • 越南语翻译,人工翻译哪个值得信赖?
  • 攻防世界题目练习——Web引导模式(五)(持续更新)
  • attack vector
  • 好看的早上问候语早安图片,今天最新唯美温馨祝福语
  • 人体关键点检测2:Pytorch实现人体关键点检测(人体姿势估计)含训练代码
  • 聚类分析 | Matlab实现基于谱聚类(Spectral Cluster)的数据聚类可视化
  • 【回眸】Tessy 单元测试软件使用指南(三)怎么打桩和指针测试
  • 关系型数据库-SQLite介绍
  • 使用shell脚本将一台虚拟机上面数据分发到其他虚拟机上面xsync
  • OpenGL学习(二)绘制三维图形 固定管线
  • 微信小程序游戏:移动游戏市场的新兴力量
  • Netflix Mac(奈飞客户端)激活版软件介绍
  • 【Docker】进阶之路:(十)Docker日志管理
  • Lcss算法介绍与应用演示
  • 【SpringBoot】从入门到精通的快速开发指南
  • 每日一练【长度最小的子数组】
  • HTML 块级元素与行内元素有哪些以及注意、总结