在.NET平台使用Google Earth COM API示例(01)

本文档展示了如何在.NET Framework 2.0的WinForm项目中利用Google Earth COM API进行操作,包括启动、截图和退出功能。通过添加COM引用EARTHLib.dll并实现相关事件处理,为用户提供了基本的Google Earth交互体验。

本系列参考了Neil's Blog,相关代码有做小幅修改。

首先请确保目标机器上已经安装GoogleEarth(以下简称GE),本机安装GE7.1



接下来新建C#项目(WinForm,.NET2.0,x86),具体设置如下图



然后添加COM引用(项目引用-->右键-->添加引用-->浏览-->COM-->类型库):



事实上也可以将EARTHLib.dll拷贝过来,然后添加引用,效果一样,如下图:



然后在主窗体添加一个PictureBox控件和3个Button,分别为:

button1:启动

button2:截图

button3:退出

然后完善代码响应3个按钮的Click事件

完整代码如下

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using EARTHLib;
using System.IO;
using System.Diagnostics;

namespace GEDemo1
{
    public partial class GEDemo1 : Form
    {
        private bool isGEStarted = false;
        private ApplicationGE GEApp;
        private string ssFile;
        public GEDemo1()
        {
            InitializeComponent();
        }

        private void StartGE()
        {
            if (isGEStarted)
            {
                return;
            }

            try
            {
                //启动GE
                GEApp = (ApplicationGEClass)Marshal.GetActiveObject("GoogleEarth.Application");

                isGEStarted = true;
            }
            catch
            {
                GEApp = new ApplicationGEClass();

                isGEStarted = true;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            StartGE();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            ssFile = Path.Combine(Application.StartupPath, System.DateTime.Now.ToString("GES_yyyyMMddHHmmss")+".jpg");

            try
            {
                //quality的取值范围在(0,100)之间,质量越高,quality越大
                GEApp.SaveScreenShot(ssFile, 100);

                //载入刚才的图像
                pictureBox1.Image = Bitmap.FromFile(ssFile);
            }
            catch (Exception ex)
            {
                MessageBox.Show("保存截屏图像时发生错误:" + ex.ToString());
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            //首先杀掉GoogleEarth进程
            Process[] geProcess = Process.GetProcessesByName("GoogleEarth");
            foreach (var p in geProcess)
            {
                p.Kill();
            }

            //然后关闭窗口,退出程序
            this.Close();
            Application.Exit();
        }
    
    }
}

注意这样只能截取黑白的图像,运行结果如下



本系列后续文章将会关注一些高级内容,敬请期待!

点此领取楼主

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值