Hi, adding a KMLLayer to the map doesn't seem to display any labels. (There was a similar question about this, but it is a few years old and never really answered.) Anyway, since KML layers are converted to feature layers, I thought I could set the labeling info on the constituent feature layers by doing something like this:
kmlLayer.on("load", function() { var labelingInfo = [{ "labelExpressionInfo": { "expression": "$feature.name" }, "labelPlacement": "below-right" }]; var layers = kmlLayer.getLayers(); for (var i = 0; i < layers.length; i++) { if (layer instanceof FeatureLayer) { layer.setLabelingInfo(labelingInfo); } } });
I don't get any errors if I do this, but I also don't get any labels. Should this work for the feature layers created from a KML layer? If not, is there a correct way to add labels to KML layers?
Thanks,
Mike
Solved! Go to Solution.
Ugh! Stupid error on my part. I didn't have "showLabels: true" when creating the map. What I had works now.
Mike,
This is what worked for me in the past:
layer.on("load", lang.hitch(this, function() {
var json = {
"labelExpressionInfo": {
"value": "{name}"
},
"useCodedValues": false,
"fieldInfos": [{
fieldName: "name",
}]
};
var layers = layer.getLayers();
//create instance of LabelClass
var lc = new LabelClass(json);
lc.symbol = new TextSymbol();
layers[0].setLabelingInfo([lc]);
}));
Ugh! Stupid error on my part. I didn't have "showLabels: true" when creating the map. What I had works now.
Hello. This post is pretty old, but I'm interested in it.
I'm loading a KML file given by URL at startup (only from given domain).
I tried this code in order to auto-display label, but it doesn't work.
I lost pretty much time with this, but could not find a solution.
I guess I should use GeoJSON in order to create better "drawings", but if you have an idea what could be missing... ?
Best regards
hasLabels is true
showLayers is true
labelingInfo seems to be ok
labelingInfo: Array(1)
0:
fieldInfos: [{…}]
labelExpressionInfo: {value: "aaa {name}"}
labelPlacement: null
symbol: {type: "textsymbol", x: 0, y: 0, text: "", rotated: false, …}
useCodedValues: false
__proto__: Object
length: 1