如何在ArcGIS Map JS SDK中设置米级标记符号及地图语言
问题1:将标记大小设置为50米(随缩放自适应)
SimpleMarkerSymbol默认仅支持pt或px单位,无法直接设置为米。要实现标记始终显示为50米并随缩放自适应,有两种可行方案:
方案一:使用3D圆形符号(兼容2D视图)
CircleSymbol3D搭配ObjectSymbol3DLayer支持地理单位(米),会自动根据视图缩放调整显示大小,无需额外计算:
修改点击事件中的符号配置:
pointGraphic = new Graphic({ geometry: { type: "point", longitude: event.mapPoint.longitude, latitude: event.mapPoint.latitude }, symbol: { type: "circle-3d", symbolLayers: [{ type: "object", width: 50, // 单位:米 height: 50, depth: 0, // 2D视图下设置为0即可 material: { color: [226, 119, 40, 0.5] } }] } });
方案二:基于视图分辨率动态计算像素大小
通过视图的resolution属性(1像素对应的地面距离,单位米),计算50米对应的像素值,并监听视图缩放/尺寸变化实时更新:
- 创建标记时存储目标大小并计算初始像素值:
pointGraphic = new Graphic({ geometry: { type: "point", longitude: event.mapPoint.longitude, latitude: event.mapPoint.latitude }, symbol: { type: "simple-marker", size: 50 / view.resolution, // 初始转换为像素 color: [226, 119, 40, 0.5] }, attributes: { targetSize: 50 } // 存储目标米数 }); graphicsLayer.add(pointGraphic);
- 添加监听事件,实时更新所有标记大小:
view.watch("resolution", (newResolution) => { graphicsLayer.graphics.forEach(graphic => { if (graphic.attributes.targetSize) { graphic.symbol.size = graphic.attributes.targetSize / newResolution; } }); });
问题2:地图语言设置为西班牙语不生效
仅在Map中设置language属性不足以生效,需要同时配置SDK语言包和MapView的语言参数:
- 加载对应语言的SDK包
如果通过CDN加载SDK,需在链接中指定语言路径(以西班牙语为例):
<script src="https://js.arcgis.com/4.28/es/"></script>
- 在
MapView中设置语言
除了Map的language属性,还需在MapView中添加该配置:
const view = new MapView({ container: "map_details", map: map, zoom: 16, center: [INIT_COORDINATES.LNG, INIT_COORDINATES.LAT], language: "es" // 新增视图语言配置 });
完成以上两步后,底图标签、控件等内容会切换为西班牙语。
内容的提问来源于stack exchange,提问作者Raptor
相关产品推荐
相关产品推荐

