Hi,
I am creating a FeatureLayer containing Point graphics client-side from data retrieved from my database. This is how that looks like:
const pointLayer = new FeatureLayer({
id: unitType.unitTypeName.replace(' ', '-'),
source: pointGraphics,
fields: layerSchema,
renderer: {
type: 'unique-value', // autocasts as new UniqueValueRenderer()
field: 'unitId',
uniqueValueInfos: [...infos.values()]
}
});
pointGraphics is an array of graphics with each graphic defined as follows:
const g = new Graphic({
geometry: {
type: 'point', // autocasts as new Point()
longitude: unit.point.geometry.coordinates[0],
latitude: unit.point.geometry.coordinates[1]
},
attributes: {
OBJECTID: objectCounter,
unitId: unit.unitId,
areaId: unit.assignment.areaId,
areaColor: unit.assignment.config.color
}
});
layersSchema which represents the fields is defined like so:
const layerSchema = [{
name: 'OBJECTID',
type: 'oid'
}, {
name: 'unitId',
type: 'string'
}, {
name: 'areaId',
type: 'string'
}, {
name: 'areaColor',
type: 'string'
}
];
and lastly, infos is defined as a Map from which the values() is extracted for the uniqueValuesInfos:
infos.set(unit.unitId, {
value: unit.unitId,
symbol: {
type: 'simple-marker',
color: unit.assignment.config.color,
outline: { // autocasts as new SimpleLineSymbol()
color: 'grey',
width: 0.5
},
style: overlay.pointStyle.toLowerCase(),
size: overlay.pointSize
}
});
The layer renders correctly with each graphic representing a unit, colored correctly based on the unit's assignment.
I query the layer using a graphic . The query is defined like so:
// create a query and set its geometry parameter to the
// polygon that was drawn on the view
const query = {
geometry: graphic.geometry,
spatialRelationship: 'contains',
outFields: ['*']
};
I then highlight the selected feature(s) like this:
viewLayer.queryFeatures(query)
.then((results) => {
graphics = graphics.concat(results.features);
if (graphics.length > 0) {
// highlight query results
this.highlight.push(viewLayer.highlight(graphics));
}
});
The selected features highlights correctly as expected
When I look at the attribute property of any of the graphics return from the query, it only show the 'OBJECTID' and the 'unitId' attributes, and not all the attributes as defined above.
Right now, I have to use the 'OBJECTID' and the perform another find operation on the associated layer's source to retrieve all the other attributes
Thanks in advance!
Solved! Go to Solution.
Not sure without a codepen/jsbin/other, but you might try setting the 'outFields' parameter of the layer (or maybe the Query) to an explicit list of field names (don't use "*"). If using a FeatureLayerView, check the 'availableFields' parameter before calling queryFeatures(...).
You may need to "load" the features.
Similar question asked on other platforms:
Not sure without a codepen/jsbin/other, but you might try setting the 'outFields' parameter of the layer (or maybe the Query) to an explicit list of field names (don't use "*"). If using a FeatureLayerView, check the 'availableFields' parameter before calling queryFeatures(...).
Setting the outFields to a discrete list did the trick!