版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ArcGISEngine二次开发实验 实验报告四ArcGISEngine二次开发班级:15级交通工程姓名:黄文峰学号:153080142018年6月27日星期三目录TOC o 1-5 h z HYPERLINK l bookmark4 一、实验目的3 HYPERLINK l bookmark6 二、实验原理3 HYPERLINK l bookmark8 三、实验软件3四、实验材料3 HYPERLINK l bookmark12 五、实验内容及步骤3 HYPERLINK l bookmark14 51地图显示3 HYPERLINK l bookmark40 52属性査询953空间査询12 HYP
2、ERLINK l bookmark80 BaseCommand开发实例18 HYPERLINK l bookmark106 BaseTool开发实例22 HYPERLINK l bookmark152 56通过代码添加图册27 HYPERLINK l bookmark192 六、实验心得33 HYPERLINK l bookmark196 七、附录(完整代码)34一、实验目的1、结合第二次实验(高德地图开发实验)的VS开发经验,对ArcGIS地图进行二次开发。2、认识并掌握ArcGISEngine-次开发方法,为以后进行更复杂的开发操作打下基础。3、通过ArcGISEngine二次开发,实现属
3、性查询、空间查询、导入文件等功能,完成一个小型GIS应用程序的制作。二、实验原理ArcGISEngine是开发者用来构建应用程序的一整套嵌入式GIS组件,使用ArcGISEngine,可以将一些GIS功能嵌入到已有的应用程序中,建造有针对性的客户应用程序用来将高级GIS系统与他人分享。ArcGISEngine有一个软件开发包(softwaredevelopmentkit,SDK)和一个给所有ArcGIS应用提供平台的运行许可(runtime)构成。:、实验软件VisualStudio2010;ArcMap10.0;ArcGISEngine10.0;Microsoftoffice实验材料中国地图
4、文件。五、实验内容及步骤5.1地图显示5.1.1创建一个新的工程打开VS2010ArcGISEngine二次开发实验ArcGISEngine二次开发实验“文件”-“新建”-“项目”N氏-MKfauHt”wd几9(0ZDt.*V|SAXJKDM6)TCWMMVA-丄blbmuStWl.从*:妣怜门.S-*NCb1S4iSIVisualStudiaiOlOAh口JMTi&prSVisualC#”图浏览”-选择保存的位置AS.NtTWbeAi.NETMVC2Mb朋用巧5W0ta曲亦IM:畑H5ARILA7JETR4fne*0fk4-*W:W炯32MttWVoud8or|ms|VraudFS2IHiW
5、indows窗体应用程序”-更改文件名称为“地J.0.vICVsuilCVsuilCVU4lCascascU3CVsuiicUctuICascascXB:Vk*IC*用于TtWMc*K俺ag:tssaa遍二(y力袒刃5呂如厉tc珈代肴ELDFhi“d打开Form窗体的属性栏,更改name为MainForm,更改text为地图浏览。ArcGISEngine二次开发实验ArcGISEngine二次开发实验 MainFormSystem.Windows.Forms.FormAccessibleNameAccessibleRoleDefault(Name)LanguageLocalizableLock
6、ed|MminRonn(Default)FalseFalsel(ApplicationSettings)t(DataBindings)TagJ外戏BackColorControlBackgroundimage(x)BackgroundlmageLaTileCursorDefaultAFont就9ptForeCclorControlTextFcrmBorderSt)leSizableRightToLeftNoRightToLcftLayoutFalse三抱图浏览UseWaitCursorFalseAcceptButtonCancelButtonKeyreviewFalseJ5丄2添加控件及引用在
7、工貝箱中找到uMapControl和LicenseControl,拖拉之Form窗体中。丄ArcGISWindowsForms2FormlPageLayoutControITOCControlToolbarControlSceneControlArcGIS10.0EngineMapControlName:axMapControllGlobeControLLicenseControl卷SymbologyControlArcReaderControl尋ArcReaderGlobeControI5.1.3添加地图点击“MapControl”,右键选择“属性”。在“属性”页中选择Map页,点击图层添加
8、按钮,添加“bou2_4p”o此时,点击调试,会弹出一下警告。MicrosoftVisualStudioSystem.IrYdlidOpcraticnExccption*类型的耒经处連壮异帛出现在丄ESRIrcGISxControls-dll艮惭三曰ArcGISversiornotspecified.YoumustcallRuntimeMarager.BindbeforecreatinganyArcGIScomponents.中断(B)需要在Program,cs中添加runtime的说明|usingESRI.ArcGI:.stticclassProgram-./Th业maiTieritrypo
9、intotth$applica-tioii./血辽STAThredst&tievoidM&in()ri(!Runt1mdilan.ger.Bind(ProAuctCode.EngineOrDesltop)MeesageBox.Show(UnabletobindtoArcGISruntime.Applicatlonwilll)eskutdown.:return:人ppii亡殳七ion.EnableVizualStyles();kpplication.SetCCbmptibleTextRmnwf:i:rLgDault(lse);kpplication.Run(newMainForm():再次点击运
10、行,成功。5.1.4地图缩放功能双击MapControl”属性栏中的uOnMouseDownvLocatiorChangedMarginChaMouseCaptureChanMoveOnAfterDrav/OrAfterScreenDrsv,OrBcforcScrcenDraOnDoubleClickOrExtentUpdatedOnFullExtentUpdateOnKeyDojvnOrKcyUpOnMdpRepbcedOnMouseDov/nOnMouscMoYcOrMouseUpOrOleDropOrScIcctionChargctOrViewRefreshedPaddingCh3nge
11、dParentChangedPreviewKeyDov/nRegionChanged在该处代码中添加代码如下privatevoidaxMapContro1l_0nMouseDown(objectsender,ESRI.ArcGISControlsIHapControlEvents2_0nHouseDownEvente)/左键框选区域可以进行放,右键可以漫游地图if(e.button=1)thisaxMapContro11.Extent=thisaxMapContro11.TrackRectangleO;elseif(e.button=2)thisaxMapContro11.PanO;/*/左键
12、框选区域可以进行放,右键单击可以还原地图if(e.button=1)thisaxMapContro11.Extent=thisaxMapContro11.TrackRectangleO;elseif(e.button=2)this.axMapContro11.Extent=thisdxIapContro11.FullExtent;*/5.1.3运行结果点击运行,成功。结果如下。5.2属性査询5.2.1添加控件在工具栏中找到label和textbox,拖拉到Form窗体中。城市名称并将Label控件的“Text”属性修改为城市名称”,TextBox控件的Name属性修改为txtStateName
13、o外现BackColorBorderStyleCursorFlatStyleFontForeColorImage1IControlNoneDefaultShndard超,9ptControlText氏ImageAlignMiddleCenterImage!ndexImageKeyImageList(无)RightToLeftNoText|城市名称TextAlignTopLeftUseMnemonicTrueUseWaitCursorFalse设计(Name)ItxtStateNameGenerateMemberTrueLockedFalseModifiersPrivateL/daUIL5.2.
14、2添加代码首先,查看项目中己添加的引用,并在“引用”处右键,点击“添加引用”。解决方玮谅苣理器谒層国|员R徐去方妻M/nFoEO个项目)t旬PropertiesaiaiA阴徐去方妻M/nFoEO个项目)事MainFormt旬PropertiesMainFormorm1.csForml.resx:crm2.cs这个项目中我们需要使用ESRI.ArcGIS.Cartov和4ESRI.ArcGIS.Geodatabase两个引用项,这里UESRI.ArcGIS.Carto在添加MapControl控件时己自动添加,我们只添加UESRI.ArcGIS.Geodatabase,点击确定。8添加引用NET
15、|cOM|项目|测览|垠近|筒选为:.NETFramev/crk3.5细牛名称皈本运行对路径AESRl.ArcGlS.EditorExtV2.0.50727D:ProgramFiles(x86).ESRI.ArcGIS.EngineCorev2.0.50727D:ProgramFiles(x86).ESRI.ArcGIS.Framcworkv2.0.50727D:ProgramFiles(x86).ESRI.ArcGIS.GeoAnalystV2.0.50727D:ProgramFiles(x86).ESRl.ArcGIS.Geodatabaseib.6.6.6V2.0.50727D:Prog
16、ramFiles(x86).ESRI.ArcGIS.GeoDataba.v2.0.50727D:ProgramFiles(x86).1ESRI.ArcGIS.GcoDataba.v2.0.50727D:ProgramFiles(x86).ESRI.ArcGIS.GeoDataba.V2.0.50727D:ProgramFiles(x86).ESRl.ArcGIS.GeoDataba.V2.0.50727D:ProgramFiles(x86).ESRI.ArcGIS.Geometryv2.0.50727D:ProgramFiles(x86).ESRI.ArcGIS.Geoprocess.v2.0
17、.50727D:ProgramFiles(x86).ESRI.ArcGIS.Geoproccss.v2.0.50727D:ProgramFiles(x86).V取消之后双击TextBox控件,进入forml.cs代码编辑界面。输入上述说明。*|usingESRIArcGIS.Carto;usingESRI.ArcGIS.Geodatabase:返回Fcrnn设计窗1丨,点击TextBox查看属性栏,找到“KeyUp”爭件,双击进入编辑。nxi3D丄eax-nageaEnt色:rFoiltChang:Ed.ForeColorCkangeGiveFedbackHelpReq.ue5tedHiAeS
18、electionCk:ImeModeChagedKeyDownKeyPressKeyUpLayoutLeaveLocationChang:电d.MrginChangedFfloiiiedChangAfflonseCaptureChajMouzeClickprivatevoidtxtStateNameKeyUp(objectsenderKeyEve)/判断鼠标键值,如果Enter键按下抬起后,进入查询if(eKeyCode=Keys.Errtgr)”定义囹层,要素游标,查询过廳器,要轰IFeatureLayerpFeatureLayer;IFeatureCursorpFeatureCursor:
19、IQueryFilterpQueryFilter;IFeaturepFeature;|获取囹层pFeatureLayer=this1MapgetLymi:(0)asIFeatureLayer:/如果图层名称不是states,程序退出if(pFeatureLayer.Name!=bou2_4p)“turn;猜除上次查询结果thisaxMapControl1爪勺口ClearSelectionO:/pQueryFilter的实例化pQueryFilter=newQuerjFilter():设養查询迥谑条件pQueryFilter.V/hereCLause=NAME二+txtStateName.Tex
20、t:+查询pFeatureCursor=pFeatureLayerSearch(pQueryFil/ter,true);淞取查询到的要寿pFeature=pFeatureCursorNextFeature():/判断是否菇取到要麦if(pFeature!=null)/选择要臺this.axMapControl1Map.SelectFeature(pFeatureLayer,pFeature):敢大到要素this.axJiUpControll.Exterrt=pFeat-ure.Shape.Envelope;else5.2.3运行结果成功。分别向编辑框中输入“吉林省”和“长春省”,键入回车,如下
21、图所示:(5在碉旦取囱A5.3空间査询5.3.1添加控件向Form窗II添加四个bottom和一个textbox。按照下表要求更改各个button和textbox的属性类型NameText用途TextBoxtxtTips请在地图上选取地物!系统操作提示ButtonbtiiPointQuery点查询点査询ButtonbtiiLineQuery线查询线査询ButtonbtiiRectQuery矩形查询矩形査询ButtonbtnCircleQuery圆査询圆査询得到结果如下5.3.2添加代码先在类中添加一个公共函数,用来根据屏幕像素计算实际的地理距离。并在类中添加一个全局变量mMouseFlag的整
22、数定义。publiepartialclassJi(airiForjn:ForinintmlilouseFlag:Iff/根拐屏幕像素计算实际的地理距离/IffMIffparamnauiypixelUnif像素个数psirain/privatedoubleConvertPixe1ToMapUnitsCIActiveVievactiv&View,doublepix&LUnits)doublerealtorIdDiaplayExterrt;intpixelExtent:doublesizeOfOnePixel;doublentapUnits;获取设笛中视园显示贾度,即像素个数pixelExterrt
23、=activeView.ScreenLisplayDisplayTransfornation.get_I)evicFrame()r:荻取地冒坐标系中地囹显示范国一realWorIdDiap1ayExtent=activeVievScreenDisplayDisplsyTrarisfonnalionVisibleBi:每个橡素大小代表的实际距离sizeOfOnePixel=realWorldDiap1ayExtent/pixelExt&nt:地理距离napUnits=pixeLUnits*sizeOfOnePixelwtummapUnits:然后添加空间查询的方法,空间查询函数代码如下:(下方代
24、码为截图,由于代码过长,完整代码请查看附录)/主间直询/MapControlIII空间查询方式/paramIII名称/查询得到的要素名称privatestringQuerySpatial(AxMapControlmapCorrtrol,IGeometrygeometry,stringfieldlfame)/本例添加一个囹层迸行査饲,多个图层时返回if(mapContro1LayerCount1)returnnull:/唐除已有选择mapContro1MapClearSelection():/查询得到的要奉名称stringstrNames=null;IFeatureLayerpFeatureLa
25、yer;IFea-tureClasspFeatureClass:/获取囹层和要素类,为空时返回pFeai:ureLayer=mapControlgel:_L3y国Properties立引朝FixedZQQmIn,bmp|FixedZoomIn.cs|也Forml.Designer.es国Forml.resx皙Program.cs将base.m_captionbase.m_toolTip更改为居中放人,将base.m_name更改为uFixedZoomInM。/TODO:DefinevaluesforthepublicpropertiesbaseiR_categ:ory尸亠牛7绘nr审jizab
26、letextbase,mcaption=居中放大:|/localizablebase.m_messagibase.jn_toolT|ii:=居中放大:/localizablevFixedZoomIn:y/uniqueid.baseinname、cd点击“+”打开这段代码FixedZoomIn.es*XizabletextbletextProgram.csFormLcs*Formlxs(i+j*43S5Sx.FixedZoomInprivateI?tookHclpern.hookHclper:publicFixedZooalriOLtiICO%texttextnon-localizable(巳.
27、gMyCategory_MyComniand)7FxedZoomlnO/70DO:Definevaluesfar-thepublicpcopertiexbasex_category=/localizabletextbgeT_c8Dtion=居申尅衣Z/localizablobase.x_nes5age=/IocaLaxabletextbase,xjtoollfp二IS中加大二/localixableb矽0_Ti3ne=Fiedlooaln/uniqueid.tex-tnori-localizable(gategory_yyonaaridr)try“f!TODO:chanssbitmapnane
28、ifnecessary/bitnapResourceXane=GetType().N&Jie4-.brp:bareJi_bitnap=nvvBxtnap(GrtType05btJiapResouxceEf&Jie).catch.(Ezcoptiones)Sys-tea.Dianozticx.frjiuuUr(ex.f(巴*InvalidBitmap).Hf在OnClick()函数中添加如下代码publicoverridevoidOnClick()/TODO:AddFixedZoomln.OnClickiinplejnentation获取当前视图范凰IActiveViev/pActiveViev
29、=m._h.ookHelper.ActiveViev;IErivelopepEnvelope=pActiveViewEtErrt;扩大视囹范国并刷新视图pEnvelope.Expand(IL50.53true):pActiveView.ExtErrt=pEnvelope:pActiveView.Refresh();#endreg:ion转到主窗体(MapViewForm),双击“居中放人”按钮,进入该按钮Click事件相应函数,添加如下代码:privatevoidbtnZoomln_Click(objectsender,EventArgse)声明与初始化FixedZoomlnfixedZoom
30、in=newFixedZoomln();与MapContro咲联fixedZoomin.OnCreate(this.axMapControl1.Object);fixedZoomin.OnClick();5.4.4运行结果点击“局部放大”,结果如卞5.5BaseTool开发实例5.5.1添加控件在主窗体(MapViewFonn)中添加一个Button将其Name属性改为btnZoomln,Text属性更改为“拉框放大”O5.5.2添加BaseTool在菜单栏上选择“项目”一一“添加类”,在类别中选中ArcGIS,在模板中选择BaseTool,并将名称更改为Zoomln”,点击添加Desktop
31、Add-InsExtendingArcObjecteReportingWorWlowArcGISDSWPFWindowFormsWeb-VisualOCreateatodtobeusedinArcGISapplications话i(痔项-ttESS!rZoomln.csifejGCAlArc61SClassVisualC*現BaseCommandVisualCrBaseMenuVisual项8aceToolVisual项BaseToolbarVisualCBaseToolbar|ApplicMienEjctension(Desktop)Visualc#43ContextMenuiDesktop
32、JVisualC#USDockableWindow(Desktop)VisualC#J5Just-In-TimeExtension(Desktop)Visual项PropertyPage(Desktop)VUwlC讥ContextMenulEngineJVisualC*J5J*SS:VisualCffJ出现如卜对话框选择“MapControlorPageLayoutControlCommandv点击OK。5.5.3添加代码双击解决方案资源管理器中的Zoomln.cs,进入该类的代码编写界面。首先添加ESRI.ArcGIS.Carto、ESRI.ArcGIS.GeodatabasesESRI.A
33、rcGIS.GeometryESRI.ArcGIS.Display四个引用usingESRI.ArcGIS.Carlo:usingESRI.AhcGISGeodal:Ebaisg;usingESRI.ArcGIS.Geometry:usingESRI.ArcGIS.DigplNy:/TODO:Definevaluesforthepublicproperties/base.category=:/localizabletextbase.m._cap-tion=扌立框的夭:/localizabletextbase/localizabletextbase.jrL_-toolIip=拉框笊大;/loca
34、lizabletextbase.m._nanie=EoomlrT:/uniqueidnon-localiztry/在Zoomln.es中定义一下变量1匚厂二1Program.esForml.csForml.cs设计宅地囹浏览.Zoomln电OiE:namespace地图浏览/SnjniTLarydescriptionforZoomln./GuidCaadb0ee5-4649-4948-966f-96ee0d752068)ClassItiterface(ClassIrrterfaceTj.TeNone)Progld(ff地囹浏览.Zoomln*)publicsealedclassZoomln:B
35、aseToolS|20MRegistrationFunction(s)|记录鼠标位羞privateIPointm.poirrt:标记MouseDown是否岌生privateBooleanm_isMouseDown;追踪鼠标移动产牢新的EnvelopeprivateINewEnve1c-pFeedbacknifee-dBack;在Zoomln.cs类中的OnMouseDown函数中添加如卜代码:publicoverridevoidOrJilouseDown(intButton,intShifintX,intY)/TODO:AddZoomln0nJitouseDov/niiriplementati
36、on当前地图视图为空时返回if(jn_hookHeLperActiveView=nul1)return:获取鼠标点击位盖mpoirrt=jn_hookHelper.ActiveView.ScreenLisplay.DisplayTransforjnation.ToMapPoint(XjY);jn_isMouseDown=true:在Zoomln.cs类中的0nMouseMove函数中添加如卜代码:publicoverridevoidOnlouseMove(intButton,intShift,intX,intY)|/TODO;AddZoojnln.OnlilouseMoveinplejnent
37、ation/MouseDom为发生时返回if(!in_isMouseDown)return:IActiveViewpActiveView=m_hookHelperActiveView;/m_feedBack追焦鼠标移动if(m_feedBaci=null)m_eedBacl=newNewEnvelopeFeedback();m_eedBacl0)thisaxMaLpCon:ro.l.C.e:8i7L:ayEi:s():5.6.3通过代码添加MXD文件双击“打开MXD”按钮,进入代码编辑界面,添加代码如下:privatevoidbtrJfed_Click(objectsen.deEventArg
38、se)一文件路径名称包含文件名称和路径名称string:strName=null;定义OpenFileMalog,获取并打开地囹文档OpenFileDialogopenFileDialog=nevOpeiiFileDialog();openFil&Dialog.Title=打开MXD;openFileDialog.Filter=MXD文件(札mxd.)|冰nLxcT:if(openFileDialog.ShowDialogO=DialogResult0K)strNam.e=openFileDialogFileName:if(strlfame!=)thisaxNapControllLoadftt
39、xFile(strName):1地图文档全图显示this.aiKMapControll.Extent=this11.FullExtent:5.6.4通过代码添加shp图层文件双击“添加Shp”按钮,进入代码编辑界面,添加代码如下:privatevoidbtnShpClick(objectsender,EventArgse)文件路径名称,包含文件名称和路径名称stringstrNane=null:文件路径stringstrFilePath=null;文件名称stringstrFileName=null;走义OpenFileDialo?J荻取笄打开地图文档|OpenFileDialogopenFi
40、leDialog=nevOpenFileDialog():openFileDialog.Title=添加Shp:openFileDialog.Filter=shp文件(札shp)|札shp:if(openFileDialog.ShowDialog()=DialogResuIt.OK)stxllame=openFileDialog.FileName;if(strUaiTie!=“)strFilePath=SystemI0Path.GetDirectoryNaine(strName):strFilelIaine=SystemI0Path.GetFiLeNajiieVithoutExtension(
41、strNane):thisaxMapCont工oil.AddShapeFile(strFilePath,strFileName):地图文档全图显示this.axMapControll.Extent=this.xMapConiroll.FullExtent;5.6.5通过代码加载GeoDatabase中的数据需要添加“ESRI.ArcGIS.GeodatabasJ、UESRI.cGIS.DataSourcesGDB和“ESRI.ArcGIS.Carto”三个命名空间。usingusingusingusingusingESRIArcGISCarto;ESRI.ArcGIS.Geodatabase;
42、ESRIArcGIS.Geometry:ESRIArcGISControls;ESRI.ArcGIS.DataSourcesGDB:该方法根据指定的路径名称读取mdb,并返回其中包含的要素类,代码如卞:privateList0penJdb(strin2mdbpath)ListpDatasets=newList();ListpFeatureClasses=nevList():定义空间工厂,打开脳b数振库IWorkspaceFactorypAccessFactory=newAccessWorkspaceFactoryO:IWorkspacepVorkspace=pAccessFactory0pen
43、FromFile(jndbpath,0)敦取数据隼的集台IEn-jmlatasetpEnumDataset=pWorkspacegetDatasets(esriDataset:ypeesriDTAny):pEnjjnDataset.Reset():IDatasetpDataset=pEnumDataset.HeirtO:vhile(pDataset!=null)/数揺集为featuedatasBtif(pDatasetisIFeatureDataset)stringstrDatasetName=pDataset.Name;/走义要素工厂,获取要素奕的集台IFeatureWorkspacepFe
44、atureWorkspace=pWorkspaceasIFeatureWorkspace;IFeatureDatasetpFeatureDataset=pFeatureWorkspaceOpenFeotureDataset(stzDotasetName):IEnunDatase-tpEnumDataset2=pFeatureDataset.Subsets:pEnxiJiDatasetReset():IDatasetpDataset2=pEnunDatasetHext();/7应为妥素类的隼合吗,并特旻素类加入妥素类隼合pFe/ueCL/seswhile(pDataset2!=null)if(p
45、Dataset2isIFearureClass)pFeaturClassesAddlpDztasert2asIFeatnreClass).pDataset2=pEnunLatasct2.Ncxt();1pDatasctbAdd(pDataset);1pDataset=pEnunDatasctKext();1returnpFGaturcClasses;双击“添加GDB数据”按钮,进入代码编辑界面,添加代码如下:privatevoidbtnGdbVector_Click(objectsender,EventArgse)Z/)kOpenFileDialog,获取路彳仝OpenFileDialogop
46、enFileDialog=newOpenFileDialog:():openFileDialog.Title=潘加GDB矢重数扌居:openFileDialog.Filter=WMDB文件(Xmdb);定义数据隼的集台,用于存储mdb中的数揺隼ListCIDataseipDatasets=nevrList():走义要素真隼合,用于获取数据隼中的要表类ListpFeatureClasses=nevList():if(openFileDialog.ShowDialogO=DialogResultOK)获取数据集的集台pFeatureClasses=this0penKdb(openFileDialo
47、gFileNajne):变里要袁类隼合的每个要秦类foreach(IFeatureClasspFeatureClassinpFeatureClasses)IFeatureLayerpFeatureLayer=nevrFeatureLayer():pFeatuxeLayer.FeatuxeClass=pFeatureClass;/要耒囹层加入.到MapControlthisaxMapContro11.AddLayer(ILayer)pFeatureLayer):thisaxHspCorrt工oil.Eicterrt=thisaxMaLpCon:ro.l.FullEx1:En:5.6.6运行结果打
48、开MXD文件矩吧EiUora农;*wr,KINGSTON夬2O1W2O1B09xnsROEZOlWld1024xnsnwi占t0tl2013/QM时6久缺匕NS&t)二vs2oio(64ai2bai2O1W17M7axtsafieo辭WMia/31LM公叶疋;)zoiwz;lawXU*ONGSTON心20恥01151司仪网Q灿2013/U21)10ArcMopC*O.201W1Qi&lQrriRlArcMopDa切mQU721&STOXtt(2)exwtoLK!LImb戛&却上及xi毛“添加shp”OTieMoEDaM呂0TBKRSB,ttWCJCNOSTCN(GJ,croff畑JCfVBW-
49、JtUKftZttMOjsncftg5iftTBO2?血Z4iWM/101S5m心qrwt诗dfiu1今MV4ZL0讣術心QDWwewjSz.q19MM4015WAWCADftflrCft22诂/10-reftquMjyfre1rjazoasaus:Q0AutoCAD19外WIO15tio心QDExa僚W/10I12AjtcCApftrciil屮SOISiU心QDfHVrcfi;dfi?.5IWiM/IO1?:17AutoCADftJItXR4X_4nQlWftM/1015:134AAJUMABOfi占J刀沐5.4冋TON&O砂Eft(H)*4W?2M.aj*z(um“添加GDB矢量数据”as
50、aczMxfflES&畑够UMO|回哙iaJ能堆囹上進取加I副宣询I居中於大拉衽战大I有空臣层I打开渤PShp城市毎称点童冯II线舸II圍卿I这是本学期第二次使用VS进行地图的二次开发实验。六、实验心得本次的engine二次开发使用的是C#语言。虽然说之前的高德地图API开发也曾使用过该语言,有了一定的入门基础。但是相比起之前的API开发可以参考模板代码,这一次的engine二次开发更加困难,我们需要根据教程的步骤去理解代码之间的逻辑关系,理解不同功能代码的编写规则。老师发给我们的教程中,有很多代码是有错误或者缺漏的,这需要我们在调试的时候一个个地找出来,对于像我这样的入门者而言,是一件很有挑
51、战性的工作。这个挑战,包含着调试失败的失落,也有着运行成功时的欢喜。通过这一次的开发实验,让我有了更多机会去接触、学习C#语言。一开始做这个实验的时候,心里对代码这种东西是挺害怕的,害怕这一串长长的代码满是bug、运行失败,但当看见自己通过代码写出来的开发页面可以运行各种功能时,心里也很是开心和兴奋。一串串代码就像魔法星尘一样,撒在编辑框内,然后就可以生成不同功能的地图功能,也是挺好玩的事情。七、附录(完整代码)usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usin
52、gSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingESRI.ArcGIS.Carto;usingESRI.ArcGIS.Geodatabase;usingESRI.ArcGIS.Geometry;usingESRI.ArcGIS.Controls;usingESRI.ArcGIS.DataSourcesGDB;usingESRI.ArcGIS.Display;namespace地图浏览publicpartialclassMainForm:FormintmMouseFlag;IIIII
53、I根据屏幕像素计算实际的地理距离IIIIII屏幕视图III像素个数IIIprivatedoubleConvertPixelToMapUnits(IActiveViewactiveView,doublepixelUnits)doublerealWorldDiaplayExtent;intpixelExtent;doublesizeOfOnePixel;doublemapUnits;获取设备中视图显示宽度,即像素个数pixelExtent=activeView.ScreenDisplay.DisplayTransformation.get_DeviceFrame().rightactiveView
54、.ScreenDisplay.DisplayTransformation.get_DeviceFrame().left;获取地图坐标系中地图显示范WrealWorldDiaplayExtent=activeView.ScreenDisplay.DisplayTransformation.VisibleBounds.Width;每个像素大小代表的实际距离sizeOfOnePixel=realWorldDiaplayExtent/pixelExtent;地理距离mapUnits=pixelUnits*sizeOfOnePixel;returnmapUnits;III/空间查询IIIIIIMapCo
55、ntrolIII空间查询方式III字段名称III查询得到的要素名称privatestringQuerySpatial(AxMapControlmapControl,IGeometrygeometry,stringfieldName)本例添加一个图层进行查询,多个图层时返回if(mapControl.LayerCount1)returnnull;清除已有选择mapControl.Map.ClearSelection();查询得到的要素名称stringstrNames=null;IFeatureLayerpFeatureLayer;IFeatureClasspFeatureClass;获取图层和要
56、素类,为空时返回pFeatureLayer=mapControl.Map.get_Layer(0)asIFeatureLayer;pFeatureClass=pFeatureLayer.FeatureClass;if(pFeatureClass=null)returnnull;初始化空间过滤器ISpatialFilterpSpatialFilter;pSpatialFilter=newSpatialFilter();pSpatialFilter.Geometry=geometry;根据图层类型选择缓冲方式switch(pFeatureClass.ShapeType)caseesriGeomet
57、ryType.esriGeometryPoint:pSpatialFilter.SpatialRel=esriSpatialRelEnum.esriSpatialRelContains;break;caseesriGeometryType.esriGeometryPolyline:pSpatialFilter.SpatialRel=esriSpatialRelEnum.esriSpatialRelCrosses;break;caseesriGeometryType.esriGeometryPolygon:pSpatialFilter.SpatialRel=esriSpatialRelEnum.
58、esriSpatialRellntersects;break;定义空间过滤器的空间字段pSpatialFilter.GeometryField=pFeatureClass.ShapeFieldName;IQueryFilterpQueryFilter;IFeatureCursorpFeatureCursor;IFeaturepFeature;利用要素过滤器查询要素pQueryFilter=pSpatialFilterasIQueryFilter;pFeatureCursor=pFeatureLayer.Search(pQueryFilterztrue);pFeature=pFeatureCur
59、sor.NextFeature();intfieldlndex;while(pFeature!=null)选择指定要素fieldlndex=pFeature.Fields.FindField(fieldName);获取要素名称strNames=strNames+pFeature.get_Value(fieldlndex)+;高亮选中要素mapControl.Map.SelectFeature(ILayer)pFeatureLayerzpFeature);mapControl.ActiveView.Refresh();pFeature=pFeatureCursor.NextFeature();r
60、eturnstrNames;publicMainForm()InitializeComponent();sender,privatevoidaxMapControll_OnMouseDown(objectESRI.ArcGIS.Controls.lMapControlEvents2_OnMouseDownEvente)if(e.button=1)this.axMapControll.Extent=this.axMapControll.TrackRectangle();elseif(e.button二二2)this.axMapControll.Pan();记录查询到的要素名称stringstrN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《有效的医患沟通》课件
- 商标收购协议书模板
- 商标代理委托协议书范例
- 搬运工作人员劳动合同样本
- 商铺租赁合同补充协议模板
- 《中国文化遗产》课件
- 雇佣家政工合同格式模板
- 正规公司车辆租赁合同
- 正式离职协议书格式模板
- 四年级上册英语一课一练- Unit 1 Nice to meet you第一课时 湘少版(三起)(含答案)
- 上海交通大学模板红色版本
- 《疾病与人类健康》
- 山东建筑大学材料力学试题A
- 插花艺术形考大作业1119
- 医院外出进修审批表
- GB 31644-2018食品安全国家标准复合调味料
- 2023全国数学联赛初中数学试题及答案-打印版
- 小米公司案例分析报告(课堂PPT)
- GRG造型制作安装施工工艺
- 2023年沧州交通发展(集团)有限责任公司招聘笔试题库及答案解析
- 财富沙盘流程课件
评论
0/150
提交评论