在 Esri JavaScript API 3.5 及更早版本中打印要素图层标注

Print FeatureLayer labels in Esri JavaScript API 3.5 and earlier

本文关键字:打印 图层 版本 API JavaScript Esri      更新时间:2023-09-26

如果使用 Esri 的 Javascript API,我需要在 3.5 版的 FeatureLayer 中的要素上实现标签。标注来自 REST 要素服务返回的字段。由于各种原因,我目前无法迁移到 3.7。我尝试使用文本符号,但我的地图要素只是变成文本符号的颜色,没有显示任何文本。不过,我可能以错误的方式接近了这一点。下面是我尝试用于标注的代码,其中 featureLayer 对象是我添加到地图的要素图层实例。是否有其他或正确的方法来完成此任务?

featureLayer.on("graphic-add", function (evt) { 
var labelColor = new Color([255, 0, 0, 0.25]);
var myLabel = new TextSymbol(evt.graphic.attributes["My Field Name"]);
myLabel.setColor(labelColor);
myLabel.font.setSize("14pt");
evt.graphic.setSymbol(myLabel);
//console.log(evt);

});

感谢您可以提供的任何帮助!

我能够用下面的代码解决这个问题。这似乎效果很好。

var labelList = new Array(); 

featureLayer.on("update-end", function (evt) { 
for (var i = 0; i < evt.target.graphics.length; i++) {
var gfx = evt.target.graphics[i];
//if label hasn't been added go ahead and generate it and add to array
if (labelList.indexOf(gfx.attributes[idField]) == -1) {
labelList.push(gfx.attributes[idField]);
addLabelToGeometry(gfx.attributes[labelField], gfx.geometry);
}

}
});

function addLabelToGeometry(text, geometry) {
var point = geometry.getExtent().getCenter();
//top level label of text
var TextSymbolJson = { 
"type": "esriTS",
"color": [0, 0, 0, 255],
"verticalAlignment": "middle",
"horizontalAlignment": "center",
"font": {
"family": "Helvetica",
"size": 12,
"style": "normal",
"weight": "bold",
"decoration": "none"
}
};
var labelTextSymbol = new esri.symbol.TextSymbol(TextSymbolJson);
labelTextSymbol.setText(text);
var labelGraphic = new esri.Graphic(point, labelTextSymbol);
map.graphics.add(labelGraphic); 
}