| New file |
| | |
| | | /** |
| | | * 路线搜索 |
| | | * @author Liuyl |
| | | * @date 2015/11/1p |
| | | */ |
| | | define([ |
| | | "dojo/_base/declare", "dojo/_base/array", "dojo/_base/lang", |
| | | "esri/tasks/RouteTask", "esri/tasks/RouteParameters", "esri/tasks/FeatureSet", |
| | | "base/AppEvent", "base/ConfigData", "esri/graphic","base/bustransfer/TransferParameter", |
| | | "base/bustransfer/TransferTask" |
| | | ], function( |
| | | declare, arrayUtil, lang, |
| | | RouteTask, RouteParameters, FeatureSet, |
| | | AppEvent, ConfigData, Graphic,TransferParameter, |
| | | TransferTask |
| | | ) { |
| | | return declare("RouteManager", null, { |
| | | QueryArguments: declare(null, { |
| | | constructor: function(props) { |
| | | this.id = uuid(); |
| | | this.queryType = null; |
| | | this.reqId = null; |
| | | this.extent = null; |
| | | this.poiType = null; |
| | | this.keyword = null; |
| | | this.queryForCount = false; |
| | | this.returnGeometry = true; |
| | | this.start = 0; |
| | | this.num = 10; |
| | | this.outSpatialReference = null; |
| | | this.district = null; |
| | | $.extend(true, this, props); |
| | | } |
| | | }), |
| | | defaultOptions: { |
| | | route_service: "http://www.servicelnditu.com/OneMapServer/rest/services/route2014/NAServer/Route", |
| | | bus_service:"http://www.servicelnditu.com/OneMapServer/rest/services/ShenYangBus/Transfer/exts/PublicTransportationSOE", |
| | | result_widget_name: "RouteResultWidget" |
| | | }, |
| | | constructor: function(options) { |
| | | this.options = {}; |
| | | $.extend(true, this.options, this.defaultOptions, options); |
| | | this.resultWidgetIsOpen = false; |
| | | |
| | | AppEvent.addAppEventListener(AppEvent.CONFIG_LOADED, lang.hitch(this, this.onConfigLoaded)); |
| | | AppEvent.addAppEventListener(AppEvent.BASE_MAP_LAYER_LOADED, lang.hitch(this, this.onMapLoaded)); |
| | | AppEvent.addAppEventListener(AppEvent.RUN_ROUTE_QUERY, lang.hitch(this, function(evt) { |
| | | this.query(evt); |
| | | })); |
| | | |
| | | this.newestQueryId = null; |
| | | }, |
| | | onConfigLoaded: function() {}, |
| | | onMapLoaded: function(map) { |
| | | this.map = map; |
| | | }, |
| | | |
| | | |
| | | query: function(evt) { |
| | | try { |
| | | var queryArgs = new this.QueryArguments(); |
| | | $.extend(true, queryArgs, evt); |
| | | this.newestQueryId = queryArgs.id; |
| | | this._do_query(queryArgs); |
| | | } catch (err) { |
| | | this._errorCallback(err, { |
| | | hockId: evt.hockId |
| | | }); |
| | | } |
| | | }, |
| | | _do_query: function(queryArgs) { |
| | | if (queryArgs.type == "bus") { |
| | | this.queryBusRoute(queryArgs, |
| | | lang.hitch(this, this._resultCallback), |
| | | lang.hitch(this, this._errorCallback) |
| | | ); |
| | | } else if (queryArgs.type == "car") { |
| | | this.queryCarRoute(queryArgs, |
| | | lang.hitch(this, this._resultCallback), |
| | | lang.hitch(this, this._errorCallback) |
| | | ); |
| | | } |
| | | }, |
| | | |
| | | _resultCallback: function(result, qArgs) { |
| | | if (this.newestQueryId == qArgs.id) { |
| | | AppEvent.dispatchAppEvent(AppEvent.QUERY_SUCCESS, { |
| | | hockId: qArgs.hockId, |
| | | result: result |
| | | }); |
| | | } |
| | | |
| | | }, |
| | | _errorCallback: function(err, qArgs) { |
| | | if (this.newestQueryId == qArgs.id) { |
| | | AppEvent.dispatchAppEvent(AppEvent.QUERY_ERROR, { |
| | | hockId: qArgs.hockId, |
| | | error: err |
| | | }); |
| | | } |
| | | }, |
| | | queryBusRoute: function(qArgs, resultCallback, errorCallback) { |
| | | var pac = ""; |
| | | if(ConfigData["districts"] == "" || ConfigData["districts"] == undefined){ |
| | | errorCallback({message:"公交换乘服务未加载完成,请重试"}, qArgs); |
| | | return; |
| | | } |
| | | for(var i = 1; i < ConfigData["districts"].length; i++){ |
| | | if(ConfigData["districts"][i]["Polygon"].contains(qArgs.start.geometry)){ |
| | | pac = ConfigData["districts"][i]["PAC"]; |
| | | break; |
| | | } |
| | | } |
| | | if(pac == "2100" || pac == ""){ |
| | | errorCallback({message:"请求范围已超出辽宁省"}, qArgs); |
| | | return; |
| | | } |
| | | var thisObj = this; |
| | | var prior = "time"; |
| | | if(!(qArgs.searchtype == "" || qArgs.searchtype == undefined)){ |
| | | prior = qArgs.searchtype; |
| | | } |
| | | var transferParameter = new TransferParameter(); |
| | | transferParameter.departure = "{\"x\":" + qArgs.start.geometry.x + ",\"y\":" + qArgs.start.geometry.y + "}"; |
| | | transferParameter.destination = "{\"x\":" + qArgs.end.geometry.x + ",\"y\":" + qArgs.end.geometry.y + "}"; |
| | | transferParameter.prior = prior; |
| | | transferParameter.exclusive = "mixed"; |
| | | transferParameter.inSR = this.map.spatialReference; |
| | | var transferTask = new TransferTask(ConfigData["busServices"][pac] + "/exts/PublicTransportationSOE/transfer"); |
| | | transferTask.execute(transferParameter,function(results){ |
| | | $.extend(true, results, {"start":qArgs.start.geometry,"end":qArgs.end.geometry}); |
| | | results.searchtype=prior; |
| | | results.routeType="bus"; |
| | | results.pac = pac; |
| | | resultCallback(results, qArgs); |
| | | },function(err){ |
| | | errorCallback(err.error, qArgs); |
| | | }); |
| | | }, |
| | | queryCarRoute: function(qArgs, resultCallback, errorCallback) { |
| | | var impedanceAttribute="Time"; |
| | | if(qArgs.searchtype){ |
| | | switch(qArgs.searchtype){ |
| | | case "time": |
| | | impedanceAttribute="Minutes"; |
| | | break; |
| | | case "distance": |
| | | impedanceAttribute="Meters"; |
| | | break; |
| | | default: |
| | | break; |
| | | } |
| | | } |
| | | var routeTask = new RouteTask(this.options.route_service); |
| | | var routeParas = new RouteParameters(); |
| | | routeParas.barriers = new FeatureSet(); |
| | | routeParas.stops = new FeatureSet(); |
| | | routeParas.returnDirections = true; |
| | | routeParas.returnRoutes = true; |
| | | routeParas.outSpatialReference = this.map.spatialReference; |
| | | routeParas.impedanceAttribute=impedanceAttribute; |
| | | var g1 = this.filter(qArgs.start); |
| | | var g2 = this.filter(qArgs.end); |
| | | |
| | | routeParas.stops.features.push(g1); |
| | | routeParas.stops.features.push(g2); |
| | | |
| | | routeTask.solve(routeParas, lang.hitch(this, function(result) { |
| | | result.searchtype=qArgs.searchtype; |
| | | result.routeType="car"; |
| | | resultCallback(result, qArgs); |
| | | }), lang.hitch(this, function(err) { |
| | | errorCallback({message:"未能查询到路线结果!"}, qArgs); |
| | | })); |
| | | }, |
| | | filter: function(graphic) { |
| | | var g = new Graphic(graphic.geometry); |
| | | g.setAttributes({ |
| | | NAME: graphic.attributes.NAME |
| | | }) |
| | | return g; |
| | | } |
| | | }); |
| | | }); |