




已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 临床护理防跌倒宣教
- 安徽省黄山市祁门县2023-2024学年高三下学期高考第一模拟考试(一模)语文考试题目及答案
- 安徽省蚌埠市禹会区2024-2025学年高一下学期第二次月考地理试题含参考答案
- 2025 年小升初阳江市初一新生分班考试语文试卷(带答案解析)-(部编版)
- 2025 年小升初临汾市初一新生分班考试数学试卷(带答案解析)-(北师大版)
- 统编版五年级语文上册第四单元拔尖测评卷(含答案)
- 北师大版五年级上册数学第七单元 可能性 检测卷(无答案)
- 景观雕塑服务合同范本
- 维修合同范本简单版
- 租门市押金合同范本
- GB/T 43241-2023法庭科学一氧化二氮检验气相色谱-质谱法
- 小儿腹泻护理查房
- GB/T 42653-2023玻璃高温黏度试验方法
- 代持股权挂名法人协议书
- 2017年人教版英语五年级上册说教材
- 普通化学(第五版)浙江大学普通化学教研组P课件
- 医疗保障法律法规行政处罚司法审视及建议PPT学习培训课件
- GB/T 9999.2-2018中国标准连续出版物号第2部分:ISSN
- GB/T 6543-2008运输包装用单瓦楞纸箱和双瓦楞纸箱
- GB 19522-2004车辆驾驶人员血液、呼气酒精含量阈值与检验
- GB 10238-1998油井水泥
评论
0/150
提交评论