C#調(diào)用GoogleEarth COM API
一、C#調(diào)用GoogleEarth COM API準備
Google Earth提供了個人免費版、Plus版、Pro版,個人開發(fā)只安裝個人免費版就可以了,如果需要更多的功能,那么只有每年上交$400購買專業(yè)版了
到目前為止,GoogleEarth的二次開發(fā)接口還比較少,功能太弱,僅僅提供了1.0的類庫。
GoogleEarth COM API參考文檔可以在這里找到:http://earth.google.com/comapi/index.html
C#調(diào)用COM的參考資料多如牛毛,大家可以到網(wǎng)上搜一下
二、C#調(diào)用GoogleEarth COM API例子
這里提供一個利用VS2008 + Google Earth 5.0開發(fā)一個“Hello world”程序
首先,確保已經(jīng)正確安裝GE,打開VS2008 ,新建一個Windows應(yīng)用程序項目,在“項目”菜單中選擇“添加引用…”,切換到“COM”選項卡,選擇“Google Earth 1.0 Type Library”,其實就是Google Earth的主程序
在項目的引用中你可以看到已經(jīng)添加了一個EARTHLib的引用,然后我們就可以調(diào)用其中的接口進行開發(fā)了。
下面就是小例子的代碼(功能很簡單,只有三個,打開GE,然后讓GE保存一張截圖,然后可以打開這個截圖看看。呵呵)
- // 功能:GE實例
- // 描述:GE COM API 網(wǎng)址:http://earth.google.com/comapi/index.html
- // 作者:溫偉鵬
- // 日期:2008-01-20
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Text;
- using System.Windows.Forms;
- using EARTHLib;
- using System.Runtime.InteropServices;
- using System.IO;
- using System.Diagnostics;
- namespace GEDemo
- {
- public partial class Form1 : Form
- {
- ///
- /// 標記GE是否已經(jīng)啟動
- ///
- private bool isGeStarted = false;
- ///
- /// 定義GE應(yīng)用程序類
- ///
- private ApplicationGEClass GeApp;
- public Form1()
- {
- InitializeComponent();
- }
- private void button1_Click(object sender, EventArgs e)
- {
- StartGE();
- }
- ///
- /// 啟動GE
- ///
- private void StartGE()
- {
- if (isGeStarted)
- {
- return;
- }
- try
- {
- GeApp = (ApplicationGEClass)Marshal.GetActiveObject("GoogleEarth.Application");
- isGeStarted = true;
- }
- catch
- {
- GeApp = new ApplicationGEClass();
- isGeStarted = true;
- }
- }
- private void button2_Click(object sender, EventArgs e)
- {
- string ssFile = Path.Combine(Application.StartupPath, "ScreenShot.jpg");
- try
- {
- //quality的取值范圍在(0,100)之間,質(zhì)量越高,quality越大
- GeApp.SaveScreenShot(ssFile, 100);
- MessageBox.Show("成功保存截屏圖像:" + ssFile);
- }
- catch(Exception ex)
- {
- MessageBox.Show("保存截屏圖像時發(fā)生錯誤:" + ex.Message);
- }
- }
- private void button3_Click(object sender, EventArgs e)
- {
- string ssFile = Path.Combine(Application.StartupPath, "ScreenShot.jpg");
- if (!File.Exists(ssFile))
- {
- MessageBox.Show("未能找到保存的截屏圖像!");
- return;
- }
- Process.Start(ssFile);
- }
- private void button4_Click(object sender, EventArgs e)
- {
- this.Close();
- Application.Exit();
- }
- }
- }
【編輯推薦】