编程实现Google Earth和ArcGIS的联动_第1页
编程实现Google Earth和ArcGIS的联动_第2页
编程实现Google Earth和ArcGIS的联动_第3页
编程实现Google Earth和ArcGIS的联动_第4页
编程实现Google Earth和ArcGIS的联动_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

编程实现Google Earth和ArcGIS的联动demo 这个DEMO实现的功能就是在google earth中用鼠标获取地理坐标,然后自动定位到ARCGIS对应的区域影像中。前段时间因项目引导,在师兄的启发下,做了一个这样的Demo,后来因为各种原因一直没有进行下去。现在感觉还是有些用处的,现在抽空整理一下。 Google Earth是一款优秀的Map Explorer,它的优秀在于使用普及和方便,虽然DigitalGlobe影像数据更新速度慢,但分辨率是还是很高的,最高可达到0.5m。如果忽略其误差,可以利用Google Earth的影像资源进行定位参考、解译参考、数字化等。 Google Earth继Google Map API之后推出的Google Earth COM API ,提供的功能相对比较弱,一些功能据说似乎还存在着Bug。网址:/comapi/index.html。google earth的二次开发有两种方法:(1)使用windows API控制两个进程的调用,利用google earth api实现核心功能。(2)使用做好的务功能重点放在GE API开发上。这个demo使用的是GEVContorl(GEVC),它是一个完全COM的控件,对截止目前所有版本的GoogleEarth都支持,具有很高的兼容性和可用性,能够将GE视图(地球视图)集成到开发人员的应用系统中,并且支持滚轮功能。下载地址:/download.jsp一、安装完GE后,系统会自动拷贝一个EARTHLib.dll,添加Google Earth 1.0 Type Library到库应用.二、.NET中新建Arcgis command类。将生成一个dll,可以被ARCGIS自动添加到组件库中。三、部分代码,主窗口中:1ImportsEARTHLib2ImportsESRI.ArcGIS.Controls3ImportsESRI.ArcGIS.Geometry4ImportsESRI.ArcGIS.Carto5ImportsESRI.ArcGIS.SystemUI6ImportsESRI.ArcGIS.ArcMapUI7ImportsESRI.ArcGIS.esriSystem8ImportsESRI.ArcGIS.Framework9ImportsESRI.ArcGIS.Geodatabase10ImportsESRI.ArcGIS.Display11ImportsSystem.Windows.Forms.Cursor12ImportsSystem.Drawing13ImportsSystem.Drawing.Drawing2D141516PublicClassForm217Publicg_GeHelperAsEARTHLib.ApplicationGEGE的主应用API18PublichookhelperAsIHookHelperhookhelper19PubliclongitudeAsDouble经度20PubliclatitudeAsDouble维度21DimpAppAsIApplication22DimpEnableAsBoolean23DimpDocAsIMxDocument24DimpWorkspaceAsIWorkspace25DimpMapAsIMap26DimpLayerAsILayer27DimpWorkEAsIWorkspaceEdit28DimpFeaLayerAsIFeatureLayer29PrivateStructurePOINTAPI30DimxAsDouble31DimyAsDouble32EndStructure3334PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click35初始化应用GE36g_GeHelper=NewEARTHLib.ApplicationGE37AxGEViewer1.HookGE(g_GeHelper.GetMainHwnd,g_GeHelper.GetRenderHwnd)38EndSub394041PrivateSubAxGEViewer1_MouseDownEvent(ByValsenderAsSystem.Object,ByValeAsAxGEVControl._GEViewer_MouseDownEvent)HandlesAxGEViewer1.MouseDownEvent42IfCheckBox1.Checked=TrueThen43DimGePtAsPointOnTerrainGE44DimptAsPOINTAPI45屏幕坐标到GE屏幕坐标的转换46pt.x=e.evtArgs.X*2/Me.Width-147pt.y=-e.evtArgs.Y*2/Me.Height+148GE屏幕坐标到地理坐标的转换49GePt=g_GeHelper.GetPointOnTerrainFromScreenCoords(CDbl(pt.X),CDbl(pt.Y)5051MsgBox(点击屏幕坐标:&pt.x&,&pt.y&获得ge坐标:&GePt.Longitude&,&GePt.Latitude)52longitude=GePt.Longitude53latitude=GePt.Latitude54pMap=hookhelper.ActiveView5556arcmap中绘制点57DimpointAsIPoint58point=NewESRI.ArcGIS.Geometry.Point59point.PutCoords(longitude,latitude)6061DimpMarkerElementAsIMarkerElement62pMarkerElement=NewMarkerElement6364DimpMarkerSymbolAsESRI.ArcGIS.Display.ISimpleMarkerSymbol65pMarkerSymbol=NewESRI.ArcGIS.Display.SimpleMarkerSymbol66pMarkerSymbol.Size=367pMarkerSymbol.Style=ESRI.ArcGIS.Display.esriSimpleMarkerStyle.esriSMSDiamond6869DimpElementAsIElement70pElement=pMarkerElement71pElement.Geometry=point72pMarkerElement.Symbol=pMarkerSymbol7374DimpGraphicsContainerAsIGraphicsContainer75DimpActiveViewAsIActiveView76pActiveView=pMap77pActiveView.Extent.CenterAt(point)7879arcmap中点的定位80DimpEnvelopAsIEnvelope81pEnvelop=pActiveView.Extent82pEnvelop.CenterAt(point)83pActiveView.Extent=pEnvelop84pActiveView.Refresh()85pGraphicsContainer=pMap86pGraphicsContainer.AddElement(pMarkerElement,0)87pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics,Nothing,Nothing)88EndIf8990EndSub91PublicWriteOnlyPropertyhook()AsIHookHelper92Set(ByValvalueAsIHookHelper)93hookhelper=value94EndSet95EndProperty9697PrivateSubForm2_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load9899EndSub100EndClasscommand.cs中实现组件注册:63Privatem_hookHelperAsIHookHelper646566AcreatableCOMclassmusthaveaPublicSubNew()67withnoparameters,otherwise,theclasswillnotbe68registeredintheCOMregistryandcannotbecreated69viaCreateObject.70PublicSubNew()71MyBase.New()7273TODO:Definevaluesforthepublicproperties74MyBase.m_category=testlocalizabletext75MyBase.m_caption=tool1localizabletext76MyBase.m_message=ThisshouldworkinArcMap/MapControl/PageLayoutControllocalizabletext77MyBase.m_toolTip=localizabletext78MyBase.m_name=uniqueid,non-localizable(e.g.MyCategory_MyCommand)79Try80TODO:changebitmapnameifnecessary81DimbitmapResourceNameAsString=Me.GetType().Name+.bmp82MyBase.m_bitmap=NewBitmap(Me.GetType(),bitmapResourceName)83CatchexAsException84System.Diagnostics.Trace.WriteLine(ex.Message,InvalidBitmap)85EndTry868788EndSub899091PublicOverridesSubOnCreate(ByValhookAsObject)92Ifm_hookHelperIsNothingThenm_hookHelper=NewHookHelperClass9394IfNothookIsNothingThen95Try96m_hookHelper.Hook=hook97Ifm_hookHelper.ActiveViewIsNothingThenm_hookHelper=Nothing98Catch99m_hookHelper=Nothing100EndTry101102Disableifhookfails103Ifm_hookHelperIsNothingThen104MyBase.m_enabled=False105Else106MyBase.m_enabled=True107EndIf108109TODO:Addotherinitializationcode110EndIf111EndSub112113PublicOverridesSubOnClick()114TODO:AddCommand1.OnClickimplementation115DimceAsIEnvelope=m_hookHelper.ActiveView.Ext

温馨提示

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

评论

0/150

提交评论