skyline TE 二次開發(fā)-基于arcgis server進行最短路徑規(guī)劃

想用開源免費的路徑規(guī)劃方法瓣窄,請移步:用Postgis進行最短路徑規(guī)劃

Skyline TerraExplorer對三維數(shù)據(jù)的分析還是不錯的虫溜,視域分析等功能應(yīng)有盡有任内,但是二維分析功能上skyline就基本上只有幾何分析键袱、緩沖區(qū)分析等基礎(chǔ)功能鹉动,要想在skyline TE二次開發(fā)中進行復雜的二維分析就要借助強大的arcgis(或開源GIS三劍客)了再菊。

最近需要在skyline中實現(xiàn)路徑規(guī)劃功能爪喘,本來說想重溫一下大學學習的迪杰斯特拉最短路徑算法的,先從shape圖層中能夠獲取到道路的幾何信息纠拔,包括路徑的長度秉剑,折點,端點稠诲,然后根據(jù)折點和端點計算出路網(wǎng)的連通性拓撲結(jié)構(gòu)......但是成本太高侦鹏,人又懶,還是算了臀叙。最快最靠譜的方法是調(diào)用arcgis server的路網(wǎng)分析功能略水,只用了一天就走通技術(shù)路線了,接下來的事就是調(diào)優(yōu)效果劝萤。

0.準備工作

skyline本文用的是6.6.1

部署好arcgis for server:......渊涝;(這里用的10.2)

準備好路徑分析的shape圖層數(shù)據(jù):所有需要參與路徑規(guī)劃的道路應(yīng)當放入一個shape圖層之中,圖層的屬性字段中最好包含道路的限速信息床嫌,以便計算通行時間跨释。圖層中互相連通的兩條道路在交匯處應(yīng)當有折點,否則就會出現(xiàn)看起來連通實則計算無法到達的情況厌处,而雖然交叉但是不能連通的兩條道路則不能在其交叉處有折點鳖谈,例如高架橋交匯處。

1.arcgis網(wǎng)絡(luò)分析服務(wù)發(fā)布

開啟arcMap網(wǎng)絡(luò)分析功能:工具欄上Customize(自定義)→Extensions(擴展)阔涉,在對話框中勾選上Network Analyst缆娃,這樣arcMap就有了網(wǎng)絡(luò)分析功能。


網(wǎng)絡(luò)分析勾選開啟

導入路徑圖層:可以從文件夾連接或數(shù)據(jù)庫連接中獲取瑰排,考慮到路徑圖層不需要實時地同步數(shù)據(jù)或其他特殊要求贯要,數(shù)據(jù)來源(使用拷貝的表、拷貝的文件或arcMap和server共享表等)可根據(jù)具體情況參考arcgis官方說明進行選擇椭住。我們這里采用文件夾連接的方式郭毕。在Catalog(目錄)中打開文件夾連接,找到需要進行網(wǎng)絡(luò)分析的道路圖層函荣,對圖層點擊右鍵显押,

待分析圖層

選擇新建數(shù)據(jù)集,然后點一通下一步傻挂,

新建網(wǎng)絡(luò)數(shù)據(jù)集

注意乘碑,在選擇連通性的地方,由默認的在端點處連通修改為在任何折點處連通金拒。

修改連通性

到這里會進行屬性的設(shè)置兽肤,由于我的道路不具有限速等屬性,這里就只設(shè)置道路長度了(默認就有道路長度)绪抛。設(shè)置道路限速可以計算駕駛耗費時間资铡。

屬性設(shè)置

道路方向我暫時不設(shè)置。(還沒有研究清楚)

道路方向設(shè)置

→網(wǎng)絡(luò)分析完成幢码。

導入網(wǎng)絡(luò)分析結(jié)果文件到圖層:Layers右鍵→Add Data笤休,選擇剛剛生成的.nd文件加入。

加入網(wǎng)絡(luò)分析結(jié)果

調(diào)出網(wǎng)絡(luò)分析面板:Customize(自定義)→Toolbars(工具欄)→勾選上Network Analyst症副。

調(diào)出網(wǎng)絡(luò)分析面板

點擊剛剛調(diào)出的Network Analyst下拉框→New Route店雅,創(chuàng)建路徑分析圖層,這樣我們就可以進行路徑分析了贞铣。

創(chuàng)建路徑分析圖層

2.發(fā)布服務(wù)前先測試一下

先打開網(wǎng)絡(luò)分析窗口↓闹啦,選擇剛剛建立的路徑分析(Route)項,

打開網(wǎng)絡(luò)分析窗口

選擇stops→點擊添加點(添加驮樱靠點)→在地圖上選擇颓戏埽靠點(最少一個起點一個終點,中間可以加中間站)→點擊分析路徑按鈕酱畅,即可查看分析出的路徑琳袄,可以在這里調(diào)試道路的連通性是否正常。

選擇褪ッ常靠點

正常分析出路徑:

路徑

3.發(fā)布路徑分析功能為HTTP REST服務(wù)

發(fā)布為服務(wù)后挚歧,skyline端用ajax請求一下就可以實現(xiàn)路徑規(guī)劃功能。

開始發(fā)布:File→Share As→Service,

發(fā)布服務(wù)

publish a service吁峻,發(fā)布一個新服務(wù)

publish a service

選擇arcgis server連接滑负,填好服務(wù)名字,如果沒有arcgis server的話要自己部署一個用含。

服務(wù)器選擇

下一步矮慕,下一步......→選擇服務(wù)功能,選擇上Network Analysis啄骇,然后點擊進入Network Analysis項填寫具體參數(shù)痴鳄。

勾選網(wǎng)絡(luò)分析功能

參數(shù)設(shè)置完畢,點擊Analyze缸夹,分析一下服務(wù)狀況痪寻,報錯和警告按照提示處理即可螺句,沒錯后點擊Publish進行發(fā)布。

發(fā)布前一秒

→發(fā)布成功橡类!

4.REST接口測試

進入網(wǎng)絡(luò)分析接口(solveroute是資源存放的目錄名稱)蛇尚,

接口入口

填入一個起點一個終點試試,格式如圖顾画,然后勾選好參數(shù)取劫,

參數(shù)填寫

點擊按鈕測試效果。

開始按鈕

成功了就返回如下結(jié)果研侣,返回的路徑點在paths里面谱邪,錯誤了就再換幾個點試試。

返回JSON結(jié)果

下面這個GET請求在前端ajax一下就可以得到JSON結(jié)果了庶诡,主要參數(shù)stops惦银,f=pjson(返回json結(jié)果)填對就行了,其他參數(shù)以后針對具體需求來灌砖。

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二次開發(fā)要做的部分

本文只討論最簡單的路徑規(guī)劃Demo基显,只將路徑畫了出來蘸吓。

開發(fā)思路:通過鼠標點擊或者其他方式在地圖中獲取起點終點兩個坐標點,然后將坐標點填寫到get請求當中撩幽,ajax一下库继,從獲取的json中取得路徑點,然后用

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

繪制出路徑即可窜醉,或者干點其他事情宪萄。

下面的代碼示范了從發(fā)送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)+"米");

}

});

}

鼠標獲取坐標點拜英、改變鼠標狀態(tài)、注冊時間監(jiān)聽器琅催、繪制線段等方法可以從Programmer's Guide入手居凶,個人認為Skyline二次開發(fā)能實現(xiàn)的東西實現(xiàn)起來調(diào)用的接口還是比較友好的。如果你還不知道哪里找接口文檔的話藤抡,就是Resources中的TerraExplorer Programmer's Guide侠碧。

接口文檔

路徑規(guī)劃效果:

規(guī)劃出的路徑

總結(jié):

Skyline配合Arcgis Server可以實現(xiàn)不少二維分析功能,上面說的弄好以后缠黍,改一改還可以實現(xiàn)最近設(shè)施分析弄兜、設(shè)施服務(wù)區(qū)分析等基于網(wǎng)絡(luò)分析的功能。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市替饿,隨后出現(xiàn)的幾起案子语泽,更是在濱河造成了極大的恐慌,老刑警劉巖盛垦,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件湿弦,死亡現(xiàn)場離奇詭異,居然都是意外死亡腾夯,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門蔬充,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蝶俱,“玉大人,你說我怎么就攤上這事饥漫≌ゴ簦” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵庸队,是天一觀的道長积蜻。 經(jīng)常有香客問我,道長彻消,這世上最難降的妖魔是什么竿拆? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮宾尚,結(jié)果婚禮上丙笋,老公的妹妹穿的比我還像新娘。我一直安慰自己煌贴,他們只是感情好御板,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著牛郑,像睡著了一般怠肋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上淹朋,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天笙各,我揣著相機與錄音,去河邊找鬼瑞你。 笑死酪惭,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的者甲。 我是一名探鬼主播春感,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鲫懒?” 一聲冷哼從身側(cè)響起嫩实,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎窥岩,沒想到半個月后甲献,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡颂翼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年晃洒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片朦乏。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡球及,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出呻疹,到底是詐尸還是另有隱情吃引,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布刽锤,位于F島的核電站镊尺,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏并思。R本人自食惡果不足惜庐氮,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望纺荧。 院中可真熱鬧旭愧,春花似錦、人聲如沸宙暇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽占贫。三九已至桃熄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間型奥,已是汗流浹背瞳收。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留厢汹,地道東北人螟深。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像烫葬,于是被迫代替她去往敵國和親界弧。 傳聞我的和親對象是個殘疾皇子凡蜻,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容