ArcGIS Server 开发系列(七)-物流配送_第1页
ArcGIS Server 开发系列(七)-物流配送_第2页
ArcGIS Server 开发系列(七)-物流配送_第3页
ArcGIS Server 开发系列(七)-物流配送_第4页
ArcGIS Server 开发系列(七)-物流配送_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 HYPERLINK /flyingis/archive/2008/12/31/1366170.html ArcGIS Server 开发系列(七)-物流配送2008-12-31 15:58 by Flyingis, 5230 visits, 作者: HYPERLINK /flyingis Flyingis ArcGIS Server开发系列的文章至今已经一年多了,虽然文章只有短短六篇,也比较基础,但值得高兴的是帮助了不少第一次接触ArcGIS Server的开发者,现在不少都已经完成一两个项目了,相信收获不小,有时间可以和大家一起分享经验。今天开始,我们将继续这个系列教程,争取覆盖ADF开发

2、常用功能,以帮助更多的人轻松入门ADF开发。 目标: 实现简易的物流配送(VRP) 准备工作: 1.重新复习ArcGIS Server 开发系列(六)-自定义 Tasks 2.准备数据%ArcGISInstallDir%DeveloperKitSamplesNETServerdataSanFranciscoNetwork 3.发布NATasks.mxd地图服务,添加Network Analyst功能服务 4.MapResourceManager中添加一个ArcGIS Server Local类型服务 在这个应用中,多车配送的功能封装为一个自定义的Task,然后生成一个dll添加到ASP.Net

3、工具箱中,由Web Mapping Application的Task Manager调用,更改自定义Task的Task Results Container为模板应用中的TaskResults1控件。 Web Mapping Application大家已经非常熟悉,现在的重点就在如何利用ArcGIS Server实现VRP功能。VRP全称vehicle routing problem,属于NP难问题,基本没有统一的方法来解决所有的VRP问题,只能根据具体的情况采用最合适的算法,咱们下面就利用ArcGIS Server模拟一个简单的应用场景,实现多车物流的配送计算。 自定义Task,需要构建Tas

4、k的UI和业务逻辑,UI构建通过重写方法CreateChildControls完成,咱们最终实现的效果:相应的代码码比较容容易看懂懂,结合合上面实实现的UUI效果果图和代代码注释释就能明明白每部部分代码码所完成成的功能能,实现现代码:proteecteedoveerriidevoiidCCreaateCChilldCoontrrolss()Coontrrolss.Cllearr();basse.CCreaateCChilldCoontrrolss();#rregiionCreeateetooplleveelttablleSSysttem.Webb.UII.WeebCoontrrolss.Taa

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

6、r.Ceellss.Addd(ttd);taablee.Roows.Addd(trr);#enndreegioon#rregiionCreeateeanndppopuulatteoordeersLisstboox_oidds=neewLListt();_orrderrsChheckkBoxxLisst=neewCChecckBooxLiist();_orrderrsChheckkBoxxLisst.IID=OOrdeersCChecckBooxLiist;_oordeersCChecckBooxLiist.Widdth=SSysttem.Webb.UII.WeebCoontrrolss.Unn

7、it.Poiint(2000);IISerrverrConntexxtsservverCConttextt=MappRessourrceLLocaal.SServverCConttexttInffo.SServverCConttextt;IIMappvrrpMaap=Uttiliity.GettCarrtoIIMapp(MaapInnstaancee,NA_MappRessourrceIItemm);IFFeattureeLayyerordderssInpputFFLayyer=UUtillityy.GeetFeeatuureLLayeer(Stooress,vrppMapp);IFeeatu

8、ureCClasssoordeersIInpuutFCClasss=orrderrsInnputtFLaayerr.FeeatuureCClasss;inttnaameIIndeex=orrderrsInnputtFCllasss.FiindFFielld(Namme);IIFeaaturreCuursooroordeersIInpuutFCCurssor=oordeersIInpuutFCClasss.SSearrch(nulll,fallse);IIFeaaturreoordeerFeeatuure=oordeersIInpuutFCCurssor.NexxtFeeatuure();whi

9、ile(orrderrFeaaturre!=nnulll)LiistIItemmlii=newwLiistIItemm(orrderrFeaaturre.gget_Vallue(nammeInndexx).TToSttrinng();li.Sellectted=ttruee;_oordeersCChecckBooxLiist.Iteems.Addd(lii);_oiids.Addd(orrderrFeaaturre.OOID);oordeerFeeatuure=oordeersIInpuutFCCurssor.NexxtFeeatuure();#enndreegioon#reggionnOrr

10、derrsPaanelltrr=newwTaableeRoww();tdd=newwTaableeCelll();PPaneeloordeersPPaneel=neewPPaneel();oordeersPPaneel.HHeigght=2200;orrderrsPaanell.Wiidthh=2400;orrderrsPaanell.BoordeerCoolorr=Sysstemm.Drrawiing.Collor.Blaack;orrderrsPaanell.BoordeerSttylee=BorrderrStyyle.Insset;orrderrsPaanell.BoordeerWiid

11、thh=1;orrderrsPaanell.SccrolllBaars=SScroollBBarss.Veertiicall;oordeersPPaneel.CConttrolls.AAdd(_orrderrsChheckkBoxxLisst);tdd.Coontrrolss.Addd(oordeersPPaneel);trr.Ceellss.Addd(ttd);taablee.Roows.Addd(trr);#enndreegioon#reegioonGGetDirrecttionnsBButttontr=nnewTabbleRRow();tr.Atttribbutees.AAdd(alli

12、gnn,riightt);tdd=newwTaableeCelll();ttd.CColuumnSSpann=2;HttmlIInpuutBuuttoonbbuttton=nnewHtmmlInnputtButttonn();buuttoon.VValuue=GGetDirrecttionns;buuttoon.IID=eexeccutee;tdd.Coontrrolss.Addd(bbuttton);ttr.CCellls.AAdd(td);ttablle.RRowss.Addd(ttr);#enndreegioon#reggionnOnnCliickEveentforrexxecuutin

13、ngttaskkstrringgarrgummentt=strringg.Foormaat(seeleccteddInddexees=+gettCheeckeedIttemIIndeexess(0,1),_ordderssCheeckBBoxLListt.CllienntIDD,_ordderssCheeckBBoxLListt.Ittemss.Coountt);strringgonnCliick=sstriing.Forrmatt(eexeccuteeTassk(0,1);,arrgummentt,CCalllbacckFuuncttionnStrringg);butttonn.Atttri

14、ibuttes.Addd(ooncllickk,onCClicck);#enndreegioon/AcccesssthheggrapphiccsllayeerssoiitiisccreaateddanndsshowwniinttheTOCCEllemeentGGrapphiccsLaayerrpoointtsGrraphhicssLayyer=PPoinntsGGrapphiccsLaayerr; CCreaateCChilldCoontrrolss用于构构建VRRPTaask UI,除除了界面面要素之之外,还还需要从从源数据据中读取取商店信信息,如如读取商商店名称称显示在在界面上上,当VVR

15、PTTaskk中的商商店被勾勾选上时时,车辆辆将为该该商店送送货。商商店供货货信息存存储在数数据源中中单独的的一个图图层中sstorres.shpp,包含含商店所所需的货货物数量量和预计计提供服服务的时时间。 VVRPTTaskk UII完成之之后,接接下来要要设计VVRP的的业务逻逻辑,AArcGGIS 9.33 Neetwoork Exttenssionn提供了了一个基基本的VVRP解解决方案案,因此此我们在在发布NNATaaskss服务的的时候需需要勾选选Nettworrk AAnallystt功能,通通过SeerveerCoonteext去去远程调调用AOO方法。 第一步步,获取取VR

16、PP分析图图层。IServverCConttexttseerveerCoonteext=MMapRResoourcceLoocall.SeerveerCoonteextIInfoo.SeerveerCoonteext;IMaapvvrpMMap=UUtillityy.GeetCaartooIMaap(MMapIInsttancce,NAA_MaapReesouurceeIteem);IGGPMeessaagessgppMesssagges=sservverCConttextt.CrreatteObbjecct(esrriGeeodaatabbasee.GPPMesssagges)aasIIGP

17、MMesssagees;IINALLayeer2vrppNALLayeer=Uttiliity.GettNALLayeer(VehhiclleRRouttinggPrrobllem,vvrpMMap);INNACoonteextvrppNACConttextt=vrppNALLayeer.CCopyyConntexxt();INNACoonteextEEdittvrrpNAAConntexxtEddit=vvrpNNACoonteextasINAAConntexxtEddit;vrppNACConttexttEdiit.BBindd(vrrpNAALayyer.Conntexxt.NNetww

18、orkkDattaseet,gpMMesssagees); 第第二步,获获取配送送中心信信息、商商店信息息、车辆辆信息和和司机午午餐时间间。IFeattureeLayyerdeppotssInpputFFLayyer=UUtillityy.GeetFeeatuureLLayeer(DisstriibuttionnCennterrs,vrrpMaap);IFeeatuureCClasssddepootsIInpuutFCClasss=deepottsInnputtFLaayerr.FeeatuureCClasss;IIFeaaturreCuursoorddepootsIInpuutFCCurss

19、or=ddepootsIInpuutFCClasss.SSearrch(nulll,fallse);LooadAAnallysiisCllasss(seerveerCoonteext,vrrpNAAConntexxt,Deepotts,deepottsInnputtFCuursooraasIICurrsorr);/LLoaddOrrderrsIFFeattureeLayyerordderssInpputFFLayyer=UUtillityy.GeetFeeatuureLLayeer(Stooress,vrppMapp);IIFeaaturreCllasssorrderrsInnputtFCll

20、asss=ordderssInpputFFLayyer.FeaaturreCllasss;IFFeattureeCurrsorrorrderrsInnputtFCuursoor=orrderrsInnputtFCllasss.GeetFeeatuuress(oiids,trrue);LooadAAnallysiisCllasss(seerveerCoonteext,vrrpNAAConntexxt,Orrderrs,orrderrsInnputtFCuursooraasIICurrsorr);/LLoaddthheRRouttesIITabblerouutessInpputTTablle=Ut

21、tiliity.GettStaandaalonneTaablee(VVehiiclees,vrrpMaap).Tabble;ICuursoorrrouttesIInpuutCuursoor=roouteesInnputtTabble.Seaarchh(nuull,trrue);LooadAAnallysiisCllasss(seerveerCoonteext,vrrpNAAConntexxt,Rooutees,roouteesInnputtCurrsorrassICCurssor);/LooadtheeBrreakksITTabllebbreaaksIInpuutTaablee=Utiilit

22、ty.GGetSStanndalloneeTabble(LuunchhBreeakss,vrppMapp).TTablle;IICurrsorrbrreakksInnputtCurrsorr=breeakssInpputTTablle.SSearrch(nulll,truue);LoaadAnnalyysissClaass(serrverrConntexxt,vrppNACConttextt,Breeakss,breeakssInpputCCurssorasICuursoor);/Messsaggeaalloftheeneetwoorkanaalyssisageentssthhattheean

23、nalyysisscoonteexthasschhanggedvvrpNNACoonteextEEditt.CoonteextCChanngedd(); 配配送中心心、商店店信息均均存储在在物理图图层中,分分别对应应DisstriibuttionnCennterrs.sshp、Stooress.shhp,车车辆信息息和司机机午餐时时间存储储于Taablee表中。车车辆Taablee包含物物流配送送过程中中和车辆辆相关的的一切信信息,如如起止配配送中心心、承载载量、最最多订单单数、发发车时间间、最长长驾驶时时间、最最长行驶驶距离等等,司机机午餐TTablle包含含允许的的午餐持持续时间间、允许许

24、的午餐餐时间范范围等,这这些都将将用于AArcGGIS VRPP模型的的计算中中。 第第三步,路路径计算算,做过过ArccEngginee Neetwoork Anaalysst开发发的工程程师对IINASSolvver、INAAVRPPSollverr一定非非常熟悉悉了,调调用过程程比较简简单,路路径计算算的同时时处理系系统反馈馈的消息息信息。gpMesssagges.Cleear();IINASSolvvernaSSolvver=vvrpNNACoonteext.Sollverr;INNAVRRPSoolveervvrpSSolvver=nnaSoolveeraasIINAVVRPSSol

25、vver;vrppSollverr.GeenerrateeIntternnalRRoutteCoonteext=ttruee;/RRequuireedffortruue-sshappeaanddirrecttionnsvrrpSoolveer.DDefaaulttDatte=DaateTTimee.Toodayy;/SettthheddefaaulttdaatetobetoddaybboollpaartiialRResuultss=naSSolvver.Sollve(vrppNACConttextt,ggpMeessaagess,nnulll);/rrepoorterrrorssif(paar

26、tiialRResuultss|gppMesssagges.Couunt00)SttrinngBuuilddersErrrorrs=neewSStriingBBuillderr();foor(intti=00;iigpMMesssagees.CCounnt;i+)ssErrrorss.ApppenndLiine(gpMMesssagees.GGetMMesssagee(i).Deescrripttionn);Ressultts=sEErroors.ToSStriing();retturnn; 第第四步,处处理结果果,VRRP计算算后最重重要的结结果就是是生成的的车辆分分配情况况、配送送顺序和和

27、车辆配配送路径径,将车车辆行驶驶的详细细信息以以图文并并茂的方方式展示示出来。/GeetMMapsSSpattiallReeferrencce(toproojecctooutpputgeoomettrieesESSRI.ArccGISS.ADDF.WWeb.DattaSoourcces.ArccGISSSerrverr.MaapFuuncttionnaliitymf=(ESRRI.AArcGGIS.ADFF.Weeb.DDataaSouurcees.AArcGGISSServver.MappFunnctiionaalitty)MMapIInsttancce.GGetFFuncctioonall

28、ityy(NNA_MMapRResoourcceIttem);SSpattiallReffereenceemaapSppatiialRRefeerennce=mmf.MMapDDesccripptioon.SSpattiallReffereencee;/OuutpuutrresuultRouutessanndSStoppsUttiliity.OuttputtRouutessAsGGrapphiccs(sservverCConttextt,vvrpNNACoonteext,RoouteesGrraphhicssLayyer,maapSppatiialRRefeerennce);Uttiliity

29、.OuttputtOrdderssAsGGrapphiccs(sservverCConttextt,vvrpNNACoonteext,PoointtsGrraphhicssLayyer,maapSppatiialRRefeerennce);/CrreatterresuultssnoodeTTaskkRessulttNoddeppareentTTaskkRessulttNodde=Uttiliity.CreeateeTasskReesulltNoode(VRRPRResuultss);parrenttTasskReesulltNoode.Exppandded=ttruee;/GeetttheRo

30、uuteConntexxtffrommthherresuultsstoousseffordirrecttionnsINNAVRRPReesulltvvrpRResuult=vvrpNNACoonteext.RessulttassINNAVRRPReesullt;IINACConttexttroouteeNACConttextt=vrppRessultt.InnterrnallRouuteCConttextt;/Looopthrrougghttheressulttinggroouteesaandadddittemssfooreeachhrooutee(vvehiiclee)ISSetrouute

31、SSet=sservverCConttextt.CrreatteObbjecct(esrriSyysteem.SSet)aasIISett;IFFeattureeClaassrouuteRRouttesFFClaass=rroutteNAAConntexxt.NNACllassses.gett_IttemBByNaame(Rooutees)assIFFeattureeClaass;inttroouteeNammeInndexx=rouuteRRouttesFFClaass.FinndFiieldd(NNamee);IFeeatuureCCurssorrouutessRouuteFFCurrso

32、rr=rouuteRRouttesFFClaass.Seaarchh(nuull,faalsee);iintrouuteNNumbber=00;IFFeattureeroouteeFeaaturre=roouteesRoouteeFCuursoor.NNexttFeaaturre();whhilee(rroutteFeeatuure!=nulll)sttrinngrroutteNaame=rroutteFeeatuure.gett_Vaaluee(roouteeNammeInndexx).TToSttrinng();CChooosecollorforreaachrouuterouuteTTas

33、kkRessulttNodde.EExpaandeed=trrue;paarenntTaaskRResuultNNodee.Noodess.Addd(rroutteTaaskRResuultNNodee);/AdddSttatiistiicsTasskReesulltNoodevrppRouuteSStattistticssNodde=Uttiliity.GettVRPPRouuteSStattistticssNodde(sservverCConttextt,vvrpNNACoonteext,roouteeNamme);vrrpRoouteeStaatissticcsNoode.TexxtCeellSStylleAtttriibuttes.Addd(ffontt-weeighht,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论