Suite

Recherche de l'installation la plus proche dans une couche d'entités à partir d'une carte Web


J'ai créé une carte Web sur laquelle une couche d'entités est affichée et j'essaie de trouver l'installation la plus proche lorsque l'utilisateur clique sur la carte.

Sur la base de Trouver les installations les plus proches dans la référence de l'API Javascript, j'ai utilisé les données fournies parmap.getLayer().graphicspour initialiser mon ensemble d'installations (http://jsfiddle.net/nikoshr/ob5rxsd7/ pour une démo, http://bit.ly/14VEwL3 pour la carte):

arcgisUtils.createMap("9a33727d54904de7b80687fb0810119a", 'map').then(function (response) { var map = response.map; var lay = map.getLayer(map.graphicsLayerIds[3]); var facility = new FeatureSet(); facility.features = lay.graphics ; var params = new ClosestFacilityParameters (); params.travelMode = 5 ; params.facilities = facility ; params.returnIncidents = true ; params.returnRoutes = true ; params.returnDirections = true ; params.outSpatialReference map.spatialReference; map.on('click', function(evt) { var inPoint = new Point(evt.mapPoint.x, evt.mapPoint.y, map.spatialReference); var location = new Graphic(inPoint); var incidents = new FeatureSet(); incidents.features = [location]; params.incidents = incidents; plus procheFacilityTask = new ClosestFacilityTask("https://route.arcgis.com/arcgis/rest/services/World/ClosestFacility/NAServer/ClosestFacility_World "); plus procheFacilityTask.solve(params, function(solveResult){ console.log(solveResult); }); }); });

et je reçois une réponse ressemblant à ceci

{ declareClass : "esri.tasks.ClosestFacilitySolveResult", directions : [{routeId:1, routeName:"Location 1 - Point 1", summary :{… },… }], installations : null, incidents : [{geometry:{ … }, attributs :{… }, declareClass : "esri.Graphic",… }], messages :[ {type : 50, description : " Le champ d'entrée [VISIBLE] n'a pas été mappé à un champ de la classe d'analyse de réseau Facilities. ", declareClass:"esri.tasks.NAMEssage"}, {type:50, description:"Input field [TYPEID]… ",… }, {type:50, description:"Location Point 3 in Facilities is on a soft- élément de réseau restreint.", declareClass:"esri.tasks.NAMEssage"} ], pointBarriers: null, polygonBarriers: null, polylineBarriers: null, routes: [{geometry:{… }, attributs:{… }, declareClass:"esri .Graphique",… }] }

Sur les questions :

  1. leitinérairesetdirectionsles attributs semblent corrects, mais comment puis-je utiliser la facilité pour les construire ? J'utilise actuellement ceci mais cela dépend de ce qui a été envoyé au serveur

    var route = solveResult.routes[0], fid = route.attributes.FacilityID, facility = facility.features[fid-1] ;
  2. Existe-t-il un moyen de transmettre une URL représentant la couche d'entités pour les installations, comme indiqué dans la documentation du service d'installation la plus proche, au lieu de les copier et de les renvoyer comme je le fais maintenant ? Quelque chose comme

    var installations = new FeatureSet(); facility.url= 'une url décrivant les fonctionnalités';

Les installations sur la carte sont une featureLayer qui contient des graphiques contenant des informations dont vous n'avez pas besoin, comme les attributs et la symbologie. Vous voudrez créer de nouveaux graphiques basés sur les graphiques du featureLayer.

Remplacer cette ligne

installations.features = lay.graphics;

avec ça

// nécessite le module dojo/_base/array, nommé arrayUtils ici arrayUtils.forEach(lay.graphics, function(g){ facility.features.push(new Graphic(g.geometry)); });