Puede crear la capa de características a partir de JSON de la siguiente manera:
{
"layerDefinition": {
"geometryType": "esriGeometryPoint",
"objectIdField": "ObjectID",
"drawingInfo": {
"renderer": {
"type": "simple",
"label": "",
"description": "",
"symbol": {
"color": [
205,
212,
144
],
"size": 8,
"angle": 0,
"xoffset": 0,
"yoffset": 0,
"type": "esriSMS",
"style": "esriSLSSolid",
"outline": {
"color": [
205,
212,
144
],
"width": 0,
"type": "esriSLS",
"style": "esriSLSolid"
}
}
}
},
"fields": [
{
"name": "ObjectID",
"alias": "ObjectID",
"type": "esriFieldTypeOID"
}, ...some more fields...
]
},
"featureSet": {
"features": []
}
Para crear la capa de características, tendrás que pasar primero el JSON a una colección de características. Aquí hay un código de ejemplo:
var spatialReference = new esri.SpatialReference({ wkid: 102100 });
var featureCollection = JSON.parse(msg.d);
var featureLayer = new esri.layers.FeatureLayer(featureCollection, {
id: 'HourlyDataLayer',
mode: esri.layers.FeatureLayer.MODE_SNAPSHOT
});
map.addLayers([featureLayer]);
A continuación, tendrá que bucle a través de las características para agregarlos a una matriz y añadir que a la capa de características. He descubierto que pasar las características con el resto del JSON para la colección de características no funciona. Ten en cuenta que applyEdits() no añadirá tus características a la capa a menos que hayas hecho primero map.addLayers([featureLayer]).
var pointFeatures = [];
for (var i = 0; i < features.length; i++) {
var feature = features[i];
var symbol = new esri.symbol.SimpleMarkerSymbol(esri.symbol.SimpleMarkerSymbol.STYLE_CIRCLE, 8,
new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID,
new dojo.Color([255, 0, 0]), 1), new dojo.Color([0, 255, 0, 0.25]));
var geometry = new esri.geometry.Point(feature.longitude, feature.latitude, spatialReference);
var graphic = new esri.Graphic(geometry, symbol);
graphic.setInfoTemplate(infoTemplate);
graphic.setAttributes(attr);
pointFeatures.push(graphic);
}
featureLayer.applyEdits(pointFeatures, null, null);
El infoTemplate en ese código le dará una ventana emergente para cada punto, usted crea una plantilla de información personalizada como esta:
var infoTemplate = new esri.InfoTemplate();
infoTemplate.setTitle("Time Point");
infoTemplate.setContent("<b>Attribute display: ${attribute field name}</b><br/>"
+ "<b>Another attribute: </b>${another field name}<br/>"
+ "<b>One more attribute: ${field name}</b>");
Donde "attribute field name" está en los atributos definidos para tus puntos y "Attribute display" es lo que quieres que se titule en el popup.
El único problema es que no sé cómo hacer funcionar la capa con el deslizador de tiempo, no he podido.
EDIT: Cuanto más intento hacer esto para mi propio proyecto, más me convenzo de que no se puede hacer. No parece haber ninguna manera de hacer que una capa de características de rodar-tu-propio tiempo consciente. Podrías lograr algo similar manejando el evento time-extent-change del timeSlider para personalizar la visualización de tus características, y he visto a un colega hacer eso en la API de Flex, pero no creo que sea muy receptivo si estás tratando con muchas características y muchas paradas de tiempo, como yo. Si alguien resuelve esto, ¡me encantaría saber que estoy equivocado!