ArcGIS JavaScript API使用Promise进行公交换乘查询及结果绘制
来源:互联网 发布:网络神曲2016 编辑:程序博客网 时间:2024/04/30 10:57
两个方法,一个用于根据站点名称获得站点的点对象(包含坐标信息),另一个是根据站点信息进行线路的处理及展示。代码如下:
/** * 获取公交站点 * @param {[type]} stationName [站点名称] * @param {[type]} lineName [站点所在线路名称] * @return {[type]} [Point,包含坐标] */ getStationPoint:function(stationName,lineName){ var p = new Promise(function(resolve,reject){ var queryTask = new QueryTask(this.busStationLayerURLProperty); var query = new Query(); query.returnGeometry=true; var where=this.belongLineNameProperty+"='"+lineName+"' and "+this.stationNameProperty+"= '"+stationName+"'"; query.where = where; query.outFields=["*"]; queryTask.execute(query).then(function(result){ if(1!=result.features.length){ reject("bad result"); }else { resolve(result.features[0].geometry); } }.bind(this)); }.bind(this)); return p; }, /** * 获取及显示换乘线路 * @param {[type]} lineNames [线路名,如有多条,以逗号隔开] * @return {[type]} [description] */ getChangeLine: function(lineNames) { _this = this; var queryTask = new QueryTask(_this.busLineLayerURLProperty); var query = new Query(); query.returnGeometry = true; var where = ""; for (var i = 0; i < lineNames.length; i++) { if (i == 0) { where = _this.lineNameProperty + "= '" + lineNames[i] + "'"; } else where = where + " or " + _this.lineNameProperty + "= '" + lineNames[i] + "'"; } //获取出发站、到达站、换乘站 var startStation = dom.byId(_this.startStationId).getElementsByTagName("input")[0].value; var endStation = dom.byId(_this.endStationId).getElementsByTagName("input")[0].value; var changeStation = _this.currentChangeStation; query.where = where; query.outFields = ["*"]; queryTask.execute(query, function(lines) { var numLine = lines.features.length; if (numLine > 1) { var startLine; //第一条线路Polyline的乘车区间段 var endLine; //第二条线路Polyline的乘车区间段 var firstLine; //第一条线路Polyline对象 var secondLine; //第二条线路Polyline对象 var lineName1 = lineNames[0]; //第一条线路名 var lineName2 = lineNames[1]; //第二条线路名 for (var i = 0; i < 2; i++) { if (lines.features[i].attributes[_this.lineNameProperty] === lineName1) { firstLine=lines.features[i].geometry; Promise //根据站点名获取站点(Point),两个站点都获取完成后,进行乘车区间切割 .all([_this.getStationPoint(changeStation,lineName1),_this.getStationPoint(startStation,lineName1)]) .then( function(stations){ console.log("resolved start"); if(2==stations.length){ startLine = _this.getCutLine(stations[0], stations[1], firstLine); //切割乘车区间 if (startLine) { //绘制乘车区间 var graphicS = new Graphic(startLine); graphicS.setSymbol(_this.simpleLineSymbol); _this.graphicLayer.add(graphicS); } } } ); } else { secondLine= lines.features[i].geometry; Promise .all([_this.getStationPoint(changeStation,lineName2),_this.getStationPoint(endStation,lineName2)]) .then( function(stations){ console.log("resolved end"); endLine = _this.getCutLine(stations[0], stations[1], secondLine); if (endLine) { var graphicE = new Graphic(endLine); graphicE.setSymbol(_this.simpleLineSymbol); _this.graphicLayer.add(graphicE); } } ); } } //合并线路,获得外接矩形范围并显示 var unionGeometry = geometryEngine.union(lines.features[0].geometry,lines.features[1].geometry); var newExtent = unionGeometry.getExtent(); _this.map.setExtent(newExtent.expand(2)); console.log("OK"); } else { error("查找的换乘线路少于两条,无法获取线路!"); return false; } }); },
阅读全文
0 0
- ArcGIS JavaScript API使用Promise进行公交换乘查询及结果绘制
- ArcGIS API for Javascript 使用缓冲区结果做query查询出现“esri.config.defaults.io.proxyUrl 尚未进行设置”错误
- ArcGIS API for javascript 空间查询 没有结果 解决
- ArcGIS API For Javascript中queryTask查询返回结果限制为1000的解决办法
- ArcGIS API for javascript 空间查询 没有结果 解决(二)
- ArcGIS API for JavaScript 解决identify Task 和QueryTask查询结果限制(1000)问题
- 使用百度API实现实时公交站点查询及地图显示
- 使用百度API实现实时公交站点查询及列表显示
- [012] 百度地图API之公交换乘方案搜索(Android)
- 基于百度地图API的Android公交换乘导航
- [012] 百度地图API之公交换乘方案搜索(Android) .
- 百度地图API之公交换乘方案搜索(Android) .(12)
- [012] 百度地图API之公交换乘方案搜索(Android)
- 百度地图API之公交换乘方案搜索(Android)
- 求一个公交换乘查询(悬赏20分)
- ArcGIS API for JavaScript的服务查询
- (六)Android百度公交开发—百度地图API之公交换乘方案搜索
- Android百度公交开发(六)——百度地图API之公交换乘方案搜索
- 【通用引导架构】基于GBA的AKA认证机制
- Hello world
- recover database noredo时报错ORA-19573
- 字符串练习06_合法C标识符
- 关于进程
- ArcGIS JavaScript API使用Promise进行公交换乘查询及结果绘制
- git远程删除分支后,本地git branch -a 依然能看到的解决办法。
- 剑指Offer-62
- 面试OR笔试20——数组中的逆序对
- Java中的三目运算符 详解
- 判断点是否在多边形内部
- 字符串练习04_石头剪子布
- Spring data jpa 中save问题
- java学习笔记之断言(Assertion)