C#调用GoogleEarth COM API开发(一)
一、准备
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: }