




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 退租清洁墙面合同范本
- 大厦整租合同范本
- 订做挂车合同范本照片
- 西装干洗服务合同范本
- 代扣货款合同范本
- 上市公司合同样本
- 通信设施行业直播电商战略研究报告
- 跌落试验台行业跨境出海战略研究报告
- 酒的制造企业制定与实施新质生产力战略研究报告
- 砌筑装饰服务行业直播电商战略研究报告
- 小红书种草营销师(初级)认证考试题库(附答案)
- 河南省汝州市实验中学2025届高考英语一模试卷含解析
- 医院供应室净化及装饰装修工程施工组织设计方案
- 2023年贵州贵安新区招聘中小学国企雇员教师考试真题
- 地质勘查项目中的地质勘探野外工作安全规程考核试卷
- 绿色种养循环示范基地建设田间沼液池项目可行性研究报告-沼液池助力绿色循环产业效益稳步提升
- 进料加工业务操作流程
- 手术室巡回护士的工作
- 精益医疗管理
- 心力衰竭的饮食护理
- 冷库及制冷设备采购项目方案投标文件(技术方案)
评论
0/150
提交评论