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

下载本文档

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

文档简介

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完成,咱们最终实现的效果:相应的代码比较容易看懂,结合上面实现的UI效果图和代码注释就能明白每部分代码所完成的功能,实现代码: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用于于构建VVRPTTaskk UII,除了了界面要要素之外外,还需需要从源源数据中中读取商商店信息息,如读读取商店店名称显显示在界界面上,当VRRPTaask中中的商店店被勾选选上时,车辆将将为该商商店送货货。商店店供货信信息存储储在数据据源中单单独的一一个图层层中sttorees.sshp,包含商商店所需需的货物物数量和和预计提提供服务务的时间间。 VRPPTassk UUI完成成之后,接下来来要设计计VRPP的业务务逻辑,ArccGISS 9.3 NNe

16、twworkk Exxtennsioon提供供了一个个基本的的VRPP解决方方案,因因此我们们在发布布NATTaskks服务务的时候候需要勾勾选Neetwoork Anaalysst功能能,通过过SerrverrConntexxt去远远程调用用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); 第二步步,获取取配送中中心信息息、商店店信息、车辆信信息和司司机午餐餐时间。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(); 配送中中心、商商店信息息均存储储在物理理图层中中,分别别对应DDisttribbutiionCCentterss.shhp、Stooress.shhp,

24、车车辆信息息和司机机午餐时时间存储储于Taablee表中。车辆TTablle包含含物流配配送过程程中和车车辆相关关的一切切信息,如起止止配送中中心、承承载量、最多订订单数、发车时时间、最最长驾驶驶时间、最长行行驶距离离等,司司机午餐餐Tabble包包含允许许的午餐餐持续时时间、允允许的午午餐时间间范围等等,这些些都将用用于ArrcGIIS VVRP模模型的计计算中。 第三三步,路路径计算算,做过过ArccEngginee Neetwoork Anaalysst开发发的工程程师对IINASSolvver、INAAVRPPSollverr一定非非常熟悉悉了,调调用过程程比较简简单,路路径计算算的同

25、时时处理系系统反馈馈的消息息信息。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; 第四步步,处理理结果,VRPP计算后后最重要要的结果果就是生生成的车车辆分配配情况、配送顺顺序和车车辆配送送路径,将车辆辆行驶的的详细信信息以图图文并茂茂的方式式展示出出来。/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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论