功能實現:
RouteTask路徑規划,在圖層(GraphicsLayer)上添加停靠點,計算停靠點之間得路線,以LineSymbol實現路線展示
代碼詳解:
引用部分:
"esri/Map", "esri/views/MapView", "esri/Graphic", "esri/layers/GraphicsLayer", "esri/tasks/RouteTask", "esri/tasks/support/RouteParameters", "esri/tasks/support/FeatureSet", "esri/symbols/SimpleMarkerSymbol", "esri/symbols/SimpleLineSymbol", "esri/Color", "esri/core/urlUtils", "dojo/on", "dojo/domReady!"
route要素服務器:
urlUtils.addProxyRule({ urlPrefix: "route.arcgis.com", proxyUrl: "/sproxy/" }); var routeTask = new RouteTask({ url: "https://route.arcgis.com/arcgis/rest/services/World/Route/NAServer/Route_World" });
urlUtils.addProxyRule避免引用服務器是出現登陸情況,圖層來自
關鍵代碼:
var routeParams = new RouteParameters({ stops: new FeatureSet(), outSpatialReference: { // autocasts as new SpatialReference() wkid: 3857 } });
new FeatureSet()獲取feature,在通過feature獲取Graphic數組,graphic里有symbol
當地圖被點擊時,事件監聽器調用函數addStop(),該函數在點擊位置添加一個SimpleMarkerSymbol作為停止。該功能還在Route Parameter中添加點作為停止,並檢查是否存在2個以上,路由通過調RouteTask.solve函數解決,然后將RouteParameter傳遞給求解函數。
function addStop(event) { var stop = new Graphic({ geometry: event.mapPoint, symbol: stopSymbol }); routeLyr.add(stop); routeParams.stops.features.push(stop); if (routeParams.stops.features.length >= 2) { routeTask.solve(routeParams).then(showRoute); } }
showRoute回調函數獲取結果對象中存儲的routeResult,並對路由結果符號系統應用SimpleLineSymbol,然后將RouteResult添加到圖形層中
function showRoute(data) { var routeResult = data.routeResults[0].route; routeResult.symbol = routeSymbol; routeLyr.add(routeResult); }