Suite

Utiliser ArcGIS JavaScript API Directions avec des coordonnées intégrées ?

Utiliser ArcGIS JavaScript API Directions avec des coordonnées intégrées ?


Je souhaite utiliser l'API Javascript ArcGis pour les directions avec l'emplacement actuel de l'utilisateur comme emplacement de départ et un emplacement prédéterminé comme destination d'arrêt. Tous les exemples que je peux trouver utilisent un widget pour les emplacements de départ et d'arrêt.

Comment puis-je définir un emplacement prédéterminé pour la destination et un emplacement actuel pour le début plutôt que d'utiliser les widgets ?


J'ai bricolé quelques morceaux de code qui devraient aider à utiliser la RouteTask suggérée par @kes. J'ai pris des morceaux de code de cet exemple ESRI Geolocation et de cet exemple ESRI RouteTask.

Mon exemple utilise un clic de souris pour définir l'emplacement de destination et les résultats de la géolocalisation pour définir le point de départ. Vous pouvez utiliser ces principes pour personnaliser les morceaux de code selon vos besoins.

Ce n'est pas testé, ni le code complet… Il est ici pour illustrer le processus dans lequel quelque chose comme cela serait accompli. Quoi que vous finissiez par mettre en place, ce serait formidable si vous postiez le code pour aider les autres.

Si cela prête à confusion, je vous suggère de jeter un coup d'œil à la documentation de l'API JS d'ESRI et à ces informations sur les fonctions de rappel.

//dans l'espace de noms global var currentMapPoint; var lastStop; var routeSymbole; //dans la fonction require //assurez-vous d'importer les modules //require(["esri/tasks/RouteTask", "esri/tasks/RouteParameters"], RouteTask, RouteParameters) etc… // cela ne fait qu'ajouter un clic even handler //votre implémentation devra être bien meilleure que celle-ci //Je suppose que vous voudrez que vos utilisateurs aient une certaine flexibilité map.on("onClick", clickFunc); function clickFunc(evt) { if( navigator.geolocation ) { // ajustez votre global avec un nouveau point pour l'endroit où votre souris a cliqué currentMapPoint = new Point(evt.mapPoint.x, evt.mapPoint.y); //configurez la géolocalisation et rappelez navigator.geolocation.getCurrentPosition(routeLocation, locationError); } else { alert("Le navigateur ne prend pas en charge la géolocalisation. Visitez http://caniuse.com pour voir la prise en charge du navigateur pour l'API de géolocalisation."); } } function locationError(error) { // une erreur s'est produite donc stop watchPosition if( navigator.geolocation ) { navigator.geolocation.clearWatch(watchId); } switch (error.code) { case error.PERMISSION_DENIED: alert("Emplacement non fourni"); Pause; case error.POSITION_UNAVAILABLE: alert("Emplacement actuel non disponible"); Pause; erreur de cas.TIMEOUT: alert("Timeout"); Pause; par défaut : alert("erreur inconnue"); Pause; } } function routeLocation(location) { //créer votre objet géométrique de point var destinationPoint = new Point(location.coords.longitude, location.coords.latitude); //créez votre nouvelle route //vous devrez vous assurer que votre serveur ou service est capable de router les tâches routeTask = new RouteTask("YOUR ROUTING SERVICE URL"); //configurer les paramètres de route routeParams = new RouteParameters(); routeParams.stops = new FeatureSet(); routeParams.outSpatialReference = { "wkid" : 102100 //ou quelle que soit la référence spatiale dans laquelle se trouve votre carte } ; //définissez vos gestionnaires de rappel routeTask.on("solve-complete", showRoute); routeTask.on("error", errorHandler); //définir la symbologie utilisée pour afficher l'itinéraire //start symbol startSymbol = new SimpleMarkerSymbol().setStyle(SimpleMarkerSymbol.STYLE_CROSS).setSize(15); startSymbol.outline.setWidth(4) ; var start = map.graphics.add(new Graphic(currentMapPoint, startSymbol)); routeParams.stops.features.push(start); // symbole d'arrêt stopSymbol = new SimpleMarkerSymbol().setStyle(SimpleMarkerSymbol.STYLE_CROSS).setSize(15); stopSymbol.outline.setWidth(4) ; var stop = map.graphics.add(new Graphic(destinationPoint, stopSymbol)); routeParams.stops.features.push(stop); //symbole de route routeSymbol = new SimpleLineSymbol().setColor(new dojo.Color([0, 0, 255, 0.5])).setWidth(5); //vérifier que nous avons 2 points ajoutés if (routeParams.stops.features.length >= 2) { routeTask.solve(routeParams); lastStop = routeParams.stops.features.splice(0, 1)[0] ; } } //Ajoute l'itinéraire résolu à la carte en tant que fonction graphique showRoute(evt) { map.graphics.add(evt.result.routeResults[0].route.setSymbol(routeSymbol)); } // Affiche toute erreur renvoyée par la fonction Route Task errorHandler(err) { alert("Une erreur s'est produite
" + err.message + "
" + err.details.join("
")); routeParams.stops.features.splice(0, 0, lastStop); map.graphics.remove(routeParams.stops.features.splice(1, 1)[0]); } var symbol = new SimpleMarkerSymbol( SimpleMarkerSymbol.STYLE_CIRCLE, 12, new SimpleLineSymbol( SimpleLineSymbol.STYLE_SOLID, new Color([210, 105, 30, 0.5]), 8 ), new Color([210, 105, 30, 0.9]) ); graphique = nouveau Graphique(pt, symbole); map.graphics.add(graphique); }

Voir la vidéo: ArcGIS API for JavaScript: Working with Your Data Using the Feature Layer