You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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米对应的像素值,并监听视图缩放/尺寸变化实时更新:

  1. 创建标记时存储目标大小并计算初始像素值:
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);
  1. 添加监听事件,实时更新所有标记大小:
view.watch("resolution", (newResolution) => {
  graphicsLayer.graphics.forEach(graphic => {
    if (graphic.attributes.targetSize) {
      graphic.symbol.size = graphic.attributes.targetSize / newResolution;
    }
  });
});
问题2:地图语言设置为西班牙语不生效

仅在Map中设置language属性不足以生效,需要同时配置SDK语言包和MapView的语言参数:

  1. 加载对应语言的SDK包
    如果通过CDN加载SDK,需在链接中指定语言路径(以西班牙语为例):
<script src="https://js.arcgis.com/4.28/es/"></script>
  1. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 07:32:16