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

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

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

typescript 复制代码
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图片

typescript 复制代码
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 图标到 Canvas
    const 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 URL
       resolve(url);
    };
  });
}

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

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

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

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

效果图:

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

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

相关推荐
zero15971 天前
TypeScript 快速实战系列:函数进阶|TypeScript 函数 + 异步:大模型 API 调用核心
前端·typescript·大模型编程语言
三木檾1 天前
Next.js 混合路由踩坑:加了 `pages/api` 之后的两个隐藏问题
typescript·next.js
阿珊和她的猫1 天前
使用 TypeScript 实现数组类型判断方法
javascript·typescript·状态模式
落魄江湖行1 天前
基础篇八 Nuxt4 中间件进阶:请求拦截与权限校验
前端·typescript·nuxt4
zero15971 天前
TypeScript 快速实战系列:核心进阶|接口(Interface) + 类型(Type):大模型开发神器
前端·typescript·大模型编程语言
城数派1 天前
2025年省市县三级的平均高程数据(Excel\Shp格式)
数据库·arcgis·信息可视化·excel
落魄江湖行1 天前
基础篇九 Nuxt4 插件系统:扩展 Nuxt 能力
前端·vue.js·typescript·nuxt4
非科班Java出身GISer1 天前
ArcGIS JS 基础教程(2):地图切换底图(天地图)
arcgis·arcgis js天地图·arcgis js切换底图·arcgis js底图·arcgis js自定义底图·arcgis js自定义地图
城数派2 天前
2025年全国地级市间驾车出行距离和出行时间矩阵数据
数据库·arcgis·信息可视化·数据分析
Ava的硅谷新视界2 天前
TypeScript 中用判别联合类型替代 instanceof 检查
前端·javascript·typescript