0

如果 Esri 的 Javascript API,我需要在 3.5 版的 FeatureLayer 中实现功能标签。标签来自 REST 要素服务返回的字段。由于各种原因,我目前无法升级到 3.7。我曾尝试使用 TextSymbol,但我的地图功能只是变成了 TextSymbol 的颜色,并且没有出现任何文字。不过,我可能会以错误的方式处理这个问题。下面是我尝试用于标记的代码,其中 featureLayer 对象是我添加到地图的 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);


});

感谢您提供的任何帮助!

4

1 回答 1

1

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

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); 
}
于 2013-10-20T15:29:43.587 回答