ArcGIS Server 開發(fā)系列(七)-物流配送_第1頁(yè)
ArcGIS Server 開發(fā)系列(七)-物流配送_第2頁(yè)
ArcGIS Server 開發(fā)系列(七)-物流配送_第3頁(yè)
ArcGIS Server 開發(fā)系列(七)-物流配送_第4頁(yè)
ArcGIS Server 開發(fā)系列(七)-物流配送_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 HYPERLINK /flyingis/archive/2008/12/31/1366170.html ArcGIS Server 開發(fā)系列(七)-物流配送2008-12-31 15:58 by Flyingis, 5230 visits, 作者: HYPERLINK /flyingis Flyingis ArcGIS Server開發(fā)系列的文章至今已經(jīng)一年多了,雖然文章只有短短六篇,也比較基礎(chǔ),但值得高興的是幫助了不少第一次接觸ArcGIS Server的開發(fā)者,現(xiàn)在不少都已經(jīng)完成一兩個(gè)項(xiàng)目了,相信收獲不小,有時(shí)間可以和大家一起分享經(jīng)驗(yàn)。今天開始,我們將繼續(xù)這個(gè)系列教程,爭(zhēng)取覆蓋ADF開發(fā)

2、常用功能,以幫助更多的人輕松入門ADF開發(fā)。 目標(biāo): 實(shí)現(xiàn)簡(jiǎn)易的物流配送(VRP) 準(zhǔn)備工作: 1.重新復(fù)習(xí)ArcGIS Server 開發(fā)系列(六)-自定義 Tasks 2.準(zhǔn)備數(shù)據(jù)%ArcGISInstallDir%DeveloperKitSamplesNETServerdataSanFranciscoNetwork 3.發(fā)布NATasks.mxd地圖服務(wù),添加Network Analyst功能服務(wù) 4.MapResourceManager中添加一個(gè)ArcGIS Server Local類型服務(wù) 在這個(gè)應(yīng)用中,多車配送的功能封裝為一個(gè)自定義的Task,然后生成一個(gè)dll添加到ASP.Net

3、工具箱中,由Web Mapping Application的Task Manager調(diào)用,更改自定義Task的Task Results Container為模板應(yīng)用中的TaskResults1控件。 Web Mapping Application大家已經(jīng)非常熟悉,現(xiàn)在的重點(diǎn)就在如何利用ArcGIS Server實(shí)現(xiàn)VRP功能。VRP全稱vehicle routing problem,屬于NP難問(wèn)題,基本沒(méi)有統(tǒng)一的方法來(lái)解決所有的VRP問(wèn)題,只能根據(jù)具體的情況采用最合適的算法,咱們下面就利用ArcGIS Server模擬一個(gè)簡(jiǎn)單的應(yīng)用場(chǎng)景,實(shí)現(xiàn)多車物流的配送計(jì)算。 自定義Task,需要構(gòu)建Tas

4、k的UI和業(yè)務(wù)邏輯,UI構(gòu)建通過(guò)重寫方法CreateChildControls完成,咱們最終實(shí)現(xiàn)的效果:相應(yīng)的代碼比較容易看懂,結(jié)合上面實(shí)現(xiàn)的UI效果圖和代碼注釋就能明白每部分代碼所完成的功能,實(shí)現(xiàn)代碼:prottecttedoveerriidevoiidCCreaateCChilldCoontrrolss()Coontrrolss.Cllearr();basse.CCreaateCChilldCoontrrolss();Creeateetooplleveelttablle#rregiionCreeateetooplleveelttablleSSysttem.Webb.UII.WeebCoon

5、trrolss.Taableetaablee=newwSyysteem.WWeb.UI.WebbConntrools.Tabble();tabble.Widdth=SSysttem.Webb.UII.WeebCoontrrolss.Unnit.Pixxel(2400);CConttrolls.AAdd(tabble);TTablleRoowttr;TabbleCCellltdd;#enndreegioonOrdderssLaabell#reegioonOOrdeersLabbeltr=nnewTabbleRRow();td=nnewTabbleCCelll();tdd.Teext=Sellec

6、ttorrderrsttosservvicee;trr.Ceellss.Addd(ttd);taablee.Roows.Addd(trr);#enndreegioonCreeateeanndppopuulatteoordeersLisstboox#rregiionCreeateeanndppopuulatteoordeersLisstboox_oidds=neewLListt();_orrderrsChheckkBoxxLisst=neewCChecckBooxLiist();_orrderrsChheckkBoxxLisst.IID=OOrdeersCChecckBooxLiist;_oor

7、deersCChecckBooxLiist.Widdth=SSysttem.Webb.UII.WeebCoontrrolss.Unnit.Poiint(2000);IISerrverrConntexxtsservverCConttextt=MappRessourrceLLocaal.SServverCConttexttInffo.SServverCConttextt;IIMappvrrpMaap=Uttiliity.GettCarrtoIIMapp(MaapInnstaancee,NA_MappRessourrceIItemm);IFFeattureeLayyerordderssInpputF

8、FLayyer=UUtillityy.GeetFeeatuureLLayeer(Stooress,vrppMapp);IFeeatuureCClasssoordeersIInpuutFCClasss=orrderrsInnputtFLaayerr.FeeatuureCClasss;inttnaameIIndeex=orrderrsInnputtFCllasss.FiindFFielld(Namme);IIFeaaturreCuursooroordeersIInpuutFCCurssor=oordeersIInpuutFCClasss.SSearrch(nulll,fallse);IIFeaat

9、urreoordeerFeeatuure=oordeersIInpuutFCCurssor.NexxtFeeatuure();whiile(orrderrFeaaturre!=nnulll)LiistIItemmlii=newwLiistIItemm(orrderrFeaaturre.gget_Vallue(nammeInndexx).TToSttrinng();li.Sellectted=ttruee;_oordeersCChecckBooxLiist.Iteems.Addd(lii);_oiids.Addd(orrderrFeaaturre.OOID);oordeerFeeatuure=o

10、ordeersIInpuutFCCurssor.NexxtFeeatuure();#enndreegioonOrdderssPannel#reggionnOrrderrsPaanelltrr=newwTaableeRoww();tdd=newwTaableeCelll();PPaneeloordeersPPaneel=neewPPaneel();oordeersPPaneel.HHeigght=2200;orrderrsPaanell.Wiidthh=2400;orrderrsPaanell.BoordeerCoolorr=Sysstemm.Drrawiing.Collor.Blaack;or

11、rderrsPaanell.BoordeerSttylee=BorrderrStyyle.Insset;orrderrsPaanell.BoordeerWiidthh=1;orrderrsPaanell.SccrolllBaars=SScroollBBarss.Veertiicall;oordeersPPaneel.CConttrolls.AAdd(_orrderrsChheckkBoxxLisst);tdd.Coontrrolss.Addd(oordeersPPaneel);trr.Ceellss.Addd(ttd);taablee.Roows.Addd(trr);#enndreegioon

12、GettDiirecctioonsButttonn#reegioonGGetDirrecttionnsBButttontr=nnewTabbleRRow();tr.Atttribbutees.AAdd(allignn,riightt);tdd=newwTaableeCelll();ttd.CColuumnSSpann=2;HttmlIInpuutBuuttoonbbuttton=nnewHtmmlInnputtButttonn();buuttoon.VValuue=GGetDirrecttionns;buuttoon.IID=eexeccutee;tdd.Coontrrolss.Addd(bb

13、uttton);ttr.CCellls.AAdd(td);ttablle.RRowss.Addd(ttr);#enndreegioonOnCClicckEEvenntfforexeecuttinggtaask#reggionnOnnCliickEveentforrexxecuutinngttaskkstrringgarrgummentt=strringg.Foormaat(seeleccteddInddexees=+gettCheeckeedIttemIIndeexess(0,1),_ordderssCheeckBBoxLListt.CllienntIDD,_ordderssCheeckBBo

14、xLListt.Ittemss.Coountt);strringgonnCliick=sstriing.Forrmatt(eexeccuteeTassk(0,1);,arrgummentt,CCalllbacckFuuncttionnStrringg);butttonn.Atttriibuttes.Addd(ooncllickk,onCClicck);#enndreegioon/AcccesssthheggrapphiccsllayeerssoiitiisccreaateddanndsshowwniinttheTOCCEllemeentGGrapphiccsLaayerrpoointtsGrr

15、aphhicssLayyer=PPoinntsGGrapphiccsLaayerr; CreeateeChiildCConttrolls用于于構(gòu)建VVRPTTaskk UII,除了了界面要要素之外外,還需需要從源源數(shù)據(jù)中中讀取商商店信息息,如讀讀取商店店名稱顯顯示在界界面上,當(dāng)VRRPTaask中中的商店店被勾選選上時(shí),車輛將將為該商商店送貨貨。商店店供貨信信息存儲(chǔ)儲(chǔ)在數(shù)據(jù)據(jù)源中單單獨(dú)的一一個(gè)圖層層中sttorees.sshp,包含商商店所需需的貨物物數(shù)量和和預(yù)計(jì)提提供服務(wù)務(wù)的時(shí)間間。 VRPPTassk UUI完成成之后,接下來(lái)來(lái)要設(shè)計(jì)計(jì)VRPP的業(yè)務(wù)務(wù)邏輯,ArccGISS 9.3 NNe

16、twworkk Exxtennsioon提供供了一個(gè)個(gè)基本的的VRPP解決方方案,因因此我們們?cè)诎l(fā)布布NATTaskks服務(wù)務(wù)的時(shí)候候需要勾勾選Neetwoork Anaalysst功能能,通過(guò)過(guò)SerrverrConntexxt去遠(yuǎn)遠(yuǎn)程調(diào)用用AO方法法。 第第一步,獲取VVRP分分析圖層層。ISerrverrConntexxtsservverCConttextt=MappRessourrceLLocaal.SServverCConttexttInffo.SServverCConttextt;IMMapvrppMapp=Utiilitty.GGetCCarttoIMMap(MappInssta

17、nnce,NNA_MMapRResoourcceIttem);IIGPMMesssageesggpMeessaagess=serrverrConntexxt.CCreaateOObjeect(essriGGeoddataabasse.GGPMeessaagess)asIGPPMesssagges;INAALayyer22vrrpNAALayyer=UUtillityy.GeetNAALayyer(VeehiccleRouutinngPProbblemm,vrppMapp);IINACConttexttvrrpNAAConntexxt=vrrpNAALayyer.CoppyCoonteext()

18、;IINACConttexttEdiitvvrpNNACoonteextEEditt=vrppNACConttexttassINNACoonteextEEditt;vrrpNAAConntexxtEddit.Binnd(vvrpNNALaayerr.Coonteext.NettworrkDaatasset,gppMesssagges); 第二步步,獲取取配送中中心信息息、商店店信息、車輛信信息和司司機(jī)午餐餐時(shí)間。IFeaaturreLaayerrdeepottsInnputtFLaayerr=Utiilitty.GGetFFeattureeLayyer(DiistrribuutioonCeen

19、teers,vvrpMMap);IFFeattureeClaassdeppotssInpputFFClaass=ddepootsIInpuutFLLayeer.FFeattureeClaass;IFeeatuureCCurssordeppotssInpputFFCurrsorr=deppotssInpputFFClaass.Seaarchh(nuull,faalsee);LLoaddAnaalyssisCClasss(sservverCConttextt,vvrpNNACoonteext,DDepoots,ddepootsIInpuutFCCurssorasICuursoor);/LoaadO

20、OrdeersIIFeaaturreLaayerrorrderrsInnputtFLaayerr=Utiilitty.GGetFFeattureeLayyer(Sttorees,vrrpMaap);IFeeatuureCClasssoordeersIInpuutFCClasss=orrderrsInnputtFLaayerr.FeeatuureCClasss;IIFeaaturreCuursooroordeersIInpuutFCCurssor=oordeersIInpuutFCClasss.GGetFFeatturees(ooidss,ttruee);LLoaddAnaalyssisCCla

21、sss(sservverCConttextt,vvrpNNACoonteext,OOrdeers,oordeersIInpuutFCCurssorasICuursoor);/LoaadttheRouutessITaableeroouteesInnputtTabble=UUtillityy.GeetSttanddalooneTTablle(Vehhiclles,vvrpMMap).Taablee;ICCurssorrouutessInpputCCurssor=rrouttesIInpuutTaablee.Seearcch(nnulll,ttruee);LLoaddAnaalyssisCClass

22、s(sservverCConttextt,vvrpNNACoonteext,RRouttes,rrouttesIInpuutCuursooraasIICurrsorr);/LLoaddthheBBreaaksIITabblebreeakssInpputTTablle=Uttiliity.GettStaandaalonneTaablee(LLuncchBrreakks,vrrpMaap).Tabble;ICuursoorbbreaaksIInpuutCuursoor=brreakksInnputtTabble.Seaarchh(nuull,trrue);LooadAAnallysiisCllas

23、ss(seerveerCoonteext,vrrpNAAConntexxt,Brreakks,brreakksInnputtCurrsorrassICCurssor);/MeessaageallloffthhennetwworkkannalyysissaggenttstthattthheaanallysiiscconttextthaascchanngeddvrppNACConttexttEdiit.CConttexttChaangeed(); 配送中中心、商商店信息息均存儲(chǔ)儲(chǔ)在物理理圖層中中,分別別對(duì)應(yīng)DDisttribbutiionCCentterss.shhp、Stooress.shhp,

24、車車輛信息息和司機(jī)機(jī)午餐時(shí)時(shí)間存儲(chǔ)儲(chǔ)于Taablee表中。車輛TTablle包含含物流配配送過(guò)程程中和車車輛相關(guān)關(guān)的一切切信息,如起止止配送中中心、承承載量、最多訂訂單數(shù)、發(fā)車時(shí)時(shí)間、最最長(zhǎng)駕駛駛時(shí)間、最長(zhǎng)行行駛距離離等,司司機(jī)午餐餐Tabble包包含允許許的午餐餐持續(xù)時(shí)時(shí)間、允允許的午午餐時(shí)間間范圍等等,這些些都將用用于ArrcGIIS VVRP模模型的計(jì)計(jì)算中。 第三三步,路路徑計(jì)算算,做過(guò)過(guò)ArccEngginee Neetwoork Anaalysst開發(fā)發(fā)的工程程師對(duì)IINASSolvver、INAAVRPPSollverr一定非非常熟悉悉了,調(diào)調(diào)用過(guò)程程比較簡(jiǎn)簡(jiǎn)單,路路徑計(jì)算算的同

25、時(shí)時(shí)處理系系統(tǒng)反饋饋的消息息信息。gpMeessaagess.Cllearr();INAASollverrnaaSollverr=vrppNACConttextt.Soolveer;IINAVVRPSSolvvervrppSollverr=naSSolvverasINAAVRPPSollverr;vrrpSoolveer.GGeneeratteInnterrnallRouuteCConttextt=truue;/Reqquirredforrtrrue-shaapeandddiirecctioonsvvrpSSolvver.DeffaulltDaate=DDateeTimme.TTodaay;/

26、SeettthedeffaulltddateetoobeetoodayybooolpparttiallRessultts=naaSollverr.Soolvee(vrrpNAAConntexxt,gpMMesssagees,nulll);/repportterrrorrsiff(pparttiallRessultts|ggpMeessaagess.Coountt0)SttrinngBuuilddersErrrorrs=neewSStriingBBuillderr();foor(intti=00;iigpMMesssagees.CCounnt;i+)ssErrrorss.ApppenndLiin

27、e(gpMMesssagees.GGetMMesssagee(i).Deescrripttionn);Ressultts=sEErroors.ToSStriing();retturnn; 第四步步,處理理結(jié)果,VRPP計(jì)算后后最重要要的結(jié)果果就是生生成的車車輛分配配情況、配送順順序和車車輛配送送路徑,將車輛輛行駛的的詳細(xì)信信息以圖圖文并茂茂的方式式展示出出來(lái)。/GGetMappsSpaatiaalRRefeerennce(tooprrojeectouttputtgeeomeetriiesEESRII.ArrcGIIS.AADF.Webb.DaataSSourrcess.ArrcGIISSeer

28、veer.MMapFFuncctioonallityymff=(ESSRI.ArccGISS.ADDF.WWeb.DattaSoourcces.ArccGISSSerrverr.MaapFuuncttionnaliity)MappInsstannce.GettFunnctiionaalitty(NA_MappRessourrceIItemm);SpaatiaalReeferrenccemmapSSpattiallReffereencee=mf.MappDesscriiptiion.SpaatiaalReeferrencce;/OOutpputressulttRoouteesaandStoops

29、UUtillityy.OuutpuutRoouteesAssGraaphiics(serrverrConntexxt,vrppNACConttextt,RRouttesGGrapphiccsLaayerr,mmapSSpattiallReffereencee);UUtillityy.OuutpuutOrrderrsAssGraaphiics(serrverrConntexxt,vrppNACConttextt,PPoinntsGGrapphiccsLaayerr,mmapSSpattiallReffereencee);/CCreaateressulttsnnodeeTasskReesulltN

30、oodeparrenttTasskReesulltNoode=UUtillityy.CrreatteTaaskRResuultNNodee(VVRPRessultts);paarenntTaaskRResuultNNodee.Exxpanndedd=truue;/GGettheeRoouteeCoonteextfroomttheressulttsttouuseforrdiirecctioonsIINAVVRPRResuultvrppRessultt=vrppNACConttextt.ReesulltaasIINAVVRPRResuult;INAAConntexxtrroutteNAAConnt

31、exxt=vrrpReesullt.IInteernaalRoouteeConntexxt;/LLooppthhrouughtheereesulltinngrrouttesanddadddiitemmsfforeacchrroutte(vehhiclle)IISettroouteeSett=serrverrConntexxt.CCreaateOObjeect(essriSSysttem.Sett)asISeet;IIFeaaturreCllasssroouteeRouutessFCllasss=rouuteNNACoonteext.NACClasssess.geet_IItemmByNName

32、e(RRouttes)aasIIFeaaturreCllasss;inntrroutteNaameIIndeex=roouteeRouutessFCllasss.FiindFFielld(Namme);IFFeattureeCurrsorrroouteesRoouteeFCuursoor=roouteeRouutessFCllasss.Seearcch(nnulll,ffalsse);inttroouteeNummberr=0;IIFeaaturrerroutteFeeatuure=rrouttesRRoutteFCCurssor.NexxtFeeatuure();wwhille(rouute

33、FFeatturee!=nuull)sttrinngrroutteNaame=rroutteFeeatuure.gett_Vaaluee(roouteeNammeInndexx).TToSttrinng();CChooosecollorforreaachrouute#reggionnChhoosseccoloorfforeacchrroutteTTaskkRessulttNodderroutteTaaskRResuultNNodee=Utiilitty.CCreaateTTaskkRessulttNodde(rroutteNaame);rroutteTaaskRResuultNNodee.Te

34、extCCelllStyyleAAttrribuutess.Addd(fonnt-wweigght,bolld);rroutteTaaskRResuultNNodee.TeextCCelllStyyleAAttrribuutess.Addd(fonnt-ssizee,122);iff(rroutteNuumbeer=00)rroutteTaaskRResuultNNodee.TeextCCelllStyyleAAttrribuutess.Addd(collor,SSysttem.Draawinng.CColoorTrransslattor.ToHHtmll(Syysteem.DDrawwing

35、g.Coolorr.Bllue);elsseiif(rouuteNNumbber=1)rouuteTTaskkRessulttNodde.TTexttCelllSttyleeAtttribbutees.AAdd(coolorr,Sysstemm.Drrawiing.CollorTTrannslaatorr.TooHtmml(SSysttem.Draawinng.CColoor.PPurpple);elsseiif(rouuteNNumbber=2)rouuteTTaskkRessulttNodde.TTexttCelllSttyleeAtttribbutees.AAdd(coolorr,Sys

36、stemm.Drrawiing.CollorTTrannslaatorr.TooHtmml(SSysttem.Draawinng.CColoor.GGreeen);eelseeiff(rroutteNuumbeer=33)rroutteTaaskRResuultNNodee.TeextCCelllStyyleAAttrribuutess.Addd(collor,SSysttem.Draawinng.CColoorTrransslattor.ToHHtmll(Syysteem.DDrawwingg.Coolorr.Brrownn);#eendrregiionrouuteTTaskkRessulttNodde.EExpaandeed=trrue;paarenntTaaskRResuultNNodee.Noodess.Addd(rroutteTaaskRResuultNNodee);/AdddSttatiistiicsTasskReesulltNoodevrppRouuteSStattistticssNodde=Uttiliity.GettVRPPRouuteSStattistticssNodde(sservverCConttextt,vvrpNNACoonteext,roouteeNamme);vrrpRoouteeSt

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論