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

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

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



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

在.NET平台使用Google Earth COM API示例(01)_第1张图片


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

在.NET平台使用Google Earth COM API示例(01)_第2张图片


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

在.NET平台使用Google Earth COM API示例(01)_第3张图片


然后在主窗体添加一个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();
        }
    
    }
}

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

在.NET平台使用Google Earth COM API示例(01)_第4张图片


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

点此领取楼主

转载于:https://www.cnblogs.com/fengyhack/p/10603719.html

你可能感兴趣的:(在.NET平台使用Google Earth COM API示例(01))