skyline TE 二次开发-基于arcgis server进行最短路径规划

想用开源免费的路径规划方法,请移步:用Postgis进行最短路径规划

Skyline TerraExplorer对三维数据的分析还是不错的,视域分析等功能应有尽有,但是二维分析功能上skyline就基本上只有几何分析、缓冲区分析等基础功能,要想在skyline TE二次开发中进行复杂的二维分析就要借助强大的arcgis(或开源GIS三剑客)了。

最近需要在skyline中实现路径规划功能,本来说想重温一下大学学习的迪杰斯特拉最短路径算法的,先从shape图层中能够获取到道路的几何信息,包括路径的长度,折点,端点,然后根据折点和端点计算出路网的连通性拓扑结构......但是成本太高,人又懒,还是算了。最快最靠谱的方法是调用arcgis server的路网分析功能,只用了一天就走通技术路线了,接下来的事就是调优效果。

0.准备工作

skyline本文用的是6.6.1

部署好arcgis for server:......;(这里用的10.2)

准备好路径分析的shape图层数据:所有需要参与路径规划的道路应当放入一个shape图层之中,图层的属性字段中最好包含道路的限速信息,以便计算通行时间。图层中互相连通的两条道路在交汇处应当有折点,否则就会出现看起来连通实则计算无法到达的情况,而虽然交叉但是不能连通的两条道路则不能在其交叉处有折点,例如高架桥交汇处。

1.arcgis网络分析服务发布

开启arcMap网络分析功能:工具栏上Customize(自定义)→Extensions(扩展),在对话框中勾选上Network Analyst,这样arcMap就有了网络分析功能。


网络分析勾选开启

导入路径图层:可以从文件夹连接或数据库连接中获取,考虑到路径图层不需要实时地同步数据或其他特殊要求,数据来源(使用拷贝的表、拷贝的文件或arcMap和server共享表等)可根据具体情况参考arcgis官方说明进行选择。我们这里采用文件夹连接的方式。在Catalog(目录)中打开文件夹连接,找到需要进行网络分析的道路图层,对图层点击右键,

待分析图层

选择新建数据集,然后点一通下一步,

新建网络数据集

注意,在选择连通性的地方,由默认的在端点处连通修改为在任何折点处连通。

修改连通性

到这里会进行属性的设置,由于我的道路不具有限速等属性,这里就只设置道路长度了(默认就有道路长度)。设置道路限速可以计算驾驶耗费时间。

属性设置

道路方向我暂时不设置。(还没有研究清楚)

道路方向设置

→网络分析完成。

导入网络分析结果文件到图层:Layers右键→Add Data,选择刚刚生成的.nd文件加入。

加入网络分析结果

调出网络分析面板:Customize(自定义)→Toolbars(工具栏)→勾选上Network Analyst。

调出网络分析面板

点击刚刚调出的Network Analyst下拉框→New Route,创建路径分析图层,这样我们就可以进行路径分析了。

创建路径分析图层

2.发布服务前先测试一下

先打开网络分析窗口↓,选择刚刚建立的路径分析(Route)项,

打开网络分析窗口

选择stops→点击添加点(添加停靠点)→在地图上选择停靠点(最少一个起点一个终点,中间可以加中间站)→点击分析路径按钮,即可查看分析出的路径,可以在这里调试道路的连通性是否正常。

选择停靠点

正常分析出路径:

路径

3.发布路径分析功能为HTTP REST服务

发布为服务后,skyline端用ajax请求一下就可以实现路径规划功能。

开始发布:File→Share As→Service,

发布服务

publish a service,发布一个新服务

publish a service

选择arcgis server连接,填好服务名字,如果没有arcgis server的话要自己部署一个。

服务器选择

下一步,下一步......→选择服务功能,选择上Network Analysis,然后点击进入Network Analysis项填写具体参数。

勾选网络分析功能

参数设置完毕,点击Analyze,分析一下服务状况,报错和警告按照提示处理即可,没错后点击Publish进行发布。

发布前一秒

→发布成功!

4.REST接口测试

进入网络分析接口(solveroute是资源存放的目录名称),

接口入口

填入一个起点一个终点试试,格式如图,然后勾选好参数,

参数填写

点击按钮测试效果。

开始按钮

成功了就返回如下结果,返回的路径点在paths里面,错误了就再换几个点试试。

返回JSON结果

下面这个GET请求在前端ajax一下就可以得到JSON结果了,主要参数stops,f=pjson(返回json结果)填对就行了,其他参数以后针对具体需求来。

http://localhost:6080/arcgis/rest/services/solveroute/MyMapService3/NAServer/Route/solve?stops=106.963773%2C26.467088%3B106.956641%2C26.470443&barriers=&polylineBarriers=&polygonBarriers=&outSR=&ignoreInvalidLocations=true&accumulateAttributeNames=&impedanceAttributeName=Length&restrictionAttributeNames=&attributeParameterValues=&restrictUTurns=esriNFSBAllowBacktrack&useHierarchy=false&returnDirections=false&returnRoutes=true&returnStops=false&returnBarriers=false&returnPolylineBarriers=false&returnPolygonBarriers=false&directionsLanguage=en&directionsStyleName=&outputLines=esriNAOutputLineTrueShapeWithMeasure&findBestSequence=false&preserveFirstStop=false&preserveLastStop=false&useTimeWindows=false&startTime=0&outputGeometryPrecision=&outputGeometryPrecisionUnits=esriDecimalDegrees&directionsOutputType=esriDOTComplete&directionsTimeAttributeName=&directionsLengthUnits=esriNAUMiles&returnZ=false&f=pjson

到此为止,剩下的工作就在Skyline那边进行了。

5.Skyline TE二次开发要做的部分

本文只讨论最简单的路径规划Demo,只将路径画了出来。

开发思路:通过鼠标点击或者其他方式在地图中获取起点终点两个坐标点,然后将坐标点填写到get请求当中,ajax一下,从获取的json中取得路径点,然后用

SGWorld.Creator.CreatePolylineFromArray(paths,lineColor,2,group,description);

绘制出路径即可,或者干点其他事情。

下面的代码示范了从发送GET请求到绘制路径的过程。

function onSolveRoute(x1,y1,x2,y2,desc){

var URL="http://localhost:6080/arcgis/rest/services/solveroute/MyMapService3/NAServer/Route/solve?stops="+x1+"%2C"+y1+"%3B"+x2+"%2C"+y2+

"&barriers=&polylineBarriers=&polygonBarriers=&outSR=&ignoreInvalidLocations=true&accumulateAttributeNames=&impedanceAttributeName=Length&restrictionAttributeNames="+

"&attributeParameterValues=&restrictUTurns=esriNFSBAllowBacktrack&useHierarchy=false&returnDirections=false&returnRoutes=true&returnStops=false&returnBarriers=false"+

"&returnPolylineBarriers=false&returnPolygonBarriers=false&directionsLanguage=en&directionsStyleName=&outputLines=esriNAOutputLineTrueShapeWithMeasure"+

"&findBestSequence=true&preserveFirstStop=false&preserveLastStop=false&useTimeWindows=false&startTime=0&outputGeometryPrecision=&outputGeometryPrecisionUnits=esriDecimalDegrees"+

"&directionsOutputType=esriDOTComplete&directionsTimeAttributeName=&directionsLengthUnits=esriNAUMiles&returnZ=false&f=pjson";

$.getJSON(URL,function(data,status){

if(status=="success"){

if("error" in data){

alert("无路径到达!");

SGWorld.ProjectTree.DeleteItem(nAGroup);

return false;

}

console.log(data);

// if(data.geometry.paths==null)

// return false;

var paths=[];//one route by default

for(var i=0;i<data.routes.features[0].geometry.paths[0].length;i++){

paths[i*3]=data.routes.features[0].geometry.paths[0][i][0];

paths[i*3+1]=data.routes.features[0].geometry.paths[0][i][1];

paths[i*3+2]=0;

}

var lineColor = 0xFF00FF00; // Abgr value -> solid green

SGWorld.Creator.CreatePolylineFromArray(paths,lineColor,2,nAGroup,desc);

alert("路程长度:"+Math.floor(data.routes.features[0].attributes.Total_Length)+"米");

}

});

}

鼠标获取坐标点、改变鼠标状态、注册时间监听器、绘制线段等方法可以从Programmer's Guide入手,个人认为Skyline二次开发能实现的东西实现起来调用的接口还是比较友好的。如果你还不知道哪里找接口文档的话,就是Resources中的TerraExplorer Programmer's Guide。

接口文档

路径规划效果:

规划出的路径

总结:

Skyline配合Arcgis Server可以实现不少二维分析功能,上面说的弄好以后,改一改还可以实现最近设施分析、设施服务区分析等基于网络分析的功能。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,219评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,363评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,933评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,020评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,400评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,640评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,896评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,597评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,327评论 1 244
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,581评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,072评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,399评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,054评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,849评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,672评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,585评论 2 270

推荐阅读更多精彩内容