天道酬勤

博观而约取,厚积而薄发!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C#调用GoogleEarth COM API开发(一) (转载)

Posted on 2010-04-28 23:45  Happy Coding  阅读(1024)  评论(0编辑  收藏  举报

原文地址:http://www.cnblogs.com/wpwen/archive/2009/02/06/1385570.html

一、准备

Google Earth提供了个人免费版、Plus版、Pro版,个人开发只安装个人免费版就可以了,如果需要更多的功能,那么只有每年上交$400购买专业版了

到目前为止,GoogleEarth的二次开发接口还比较少,功能太弱,仅仅提供了1.0的类库。

GoogleEarth COM API参考文档可以在这里找到:http://earth.google.com/comapi/index.html

C#调用COM的参考资料多如牛毛,大家可以到网上搜一下

二、例子

这里提供一个利用VS2008 + Google Earth 5.0开发一个“Hello world”程序

首先,确保已经正确安装GE,打开VS2008 ,新建一个Windows应用程序项目,在“项目”菜单中选择“添加引用…”,切换到“COM”选项卡,选择“Google Earth 1.0 Type Library”,其实就是Google Earth的主程序

在项目的引用中你可以看到已经添加了一个EARTHLib的引用,然后我们就可以调用其中的接口进行开发了。

下面就是小例子的代码(功能很简单,只有三个,打开GE,然后让GE保存一张截图,然后可以打开这个截图看看。呵呵)

   1: // 功能:GE实例
   2: // 描述:GE COM API 网址:http://earth.google.com/comapi/index.html
   3: // 作者:温伟鹏
   4: // 日期:2008-01-20
   5:  
   6: using System;
   7: using System.Collections.Generic;
   8: using System.ComponentModel;
   9: using System.Data;
  10: using System.Drawing;
  11: using System.Text;
  12: using System.Windows.Forms;
  13: using EARTHLib;
  14: using System.Runtime.InteropServices;
  15: using System.IO;
  16: using System.Diagnostics;
  17:  
  18: namespace GEDemo
  19: {
  20:     public partial class Form1 : Form
  21:     {
  22:         /// <summary>
  23:         /// 标记GE是否已经启动
  24:         /// </summary>
  25:         private bool isGeStarted = false;
  26:         /// <summary>
  27:         /// 定义GE应用程序类
  28:         /// </summary>
  29:         private ApplicationGEClass GeApp;
  30:  
  31:         public Form1()
  32:         {
  33:             InitializeComponent();
  34:         }
  35:  
  36:         private void button1_Click(object sender, EventArgs e)
  37:         {
  38:             StartGE();
  39:         }
  40:  
  41:         /// <summary>
  42:         /// 启动GE
  43:         /// </summary>
  44:         private void StartGE()
  45:         {
  46:             if (isGeStarted)
  47:             {
  48:                 return;
  49:             }
  50:  
  51:             try
  52:             {
  53:                 GeApp = (ApplicationGEClass)Marshal.GetActiveObject("GoogleEarth.Application");
  54:  
  55:                 isGeStarted = true;
  56:             }
  57:             catch
  58:             {
  59:                 GeApp = new ApplicationGEClass();
  60:  
  61:                 isGeStarted = true;
  62:             }
  63:         }
  64:  
  65:         private void button2_Click(object sender, EventArgs e)
  66:         {
  67:             string ssFile = Path.Combine(Application.StartupPath, "ScreenShot.jpg");
  68:  
  69:             try
  70:             {
  71:                 //quality的取值范围在(0,100)之间,质量越高,quality越大
  72:                 GeApp.SaveScreenShot(ssFile, 100);
  73:  
  74:                 MessageBox.Show("成功保存截屏图像:" + ssFile);
  75:             }
  76:             catch(Exception ex)
  77:             {
  78:                 MessageBox.Show("保存截屏图像时发生错误:" + ex.Message);
  79:             }
  80:         }
  81:  
  82:         private void button3_Click(object sender, EventArgs e)
  83:         {
  84:             string ssFile = Path.Combine(Application.StartupPath, "ScreenShot.jpg");
  85:  
  86:             if (!File.Exists(ssFile))
  87:             {
  88:                 MessageBox.Show("未能找到保存的截屏图像!");
  89:                 return;
  90:             }
  91:  
  92:             Process.Start(ssFile);
  93:         }
  94:  
  95:         private void button4_Click(object sender, EventArgs e)
  96:         {
  97:             this.Close();
  98:             Application.Exit();
  99:         }
 100:  
 101:     }
 102: }