基於MapGIS的GIS二次開發作業文檔

一、系統概述

1、系統簡介

系統是在VS2008中利用MapGIS K9提供的組件進行的二次開發。因其主要涉及城市遙感等內容,故將系統命名爲:城市遙感信息可視化系統。

2、功能簡介

系統主要功能包括:

文檔操作:打開地圖、關閉地圖、保存地圖、另存爲、打印、打印預覽、打印設置、退出系統;

影像操作:打開影像、另存影像、關閉影像、顏色合成、影像信息、原始顯示、線性顯示、反轉顯示、平方顯示、自適應顯示,以及數據預處理、影像分類與處理功能區;

通用工具:距離量算、面積量算、角度量算、修改參數、修改屬性、多邊形裁剪、區文件裁剪、緩衝區分析、疊加分析;

數據管理:數據庫管理、更換工作空間、影像下載、數據導入、影像管理、返回;

城市信息查詢:框選、圓選、多邊形、按屬性、圖查屬性、開啓查詢、查看屬性、城市基本信息列表;

幫助:幫助文檔、關於、在線支持、聯繫我們;

3、系統界面介紹

系統使用DotNetBar第三方控件進行搭建,借鑑了Office2010的Ribbon風格界面設計。文檔管理、專題圖管理、屬性選擇、數據預處理、影像分類與處理模塊可以自由拖動,任意停靠。以下是系統部分截圖:


圖1:系統歡迎界面


圖2:系統主界面


圖3:工具條


圖4:遙感影像處理功能區


二、  系統環境及功能亮點

1、系統環境

開發平臺

MapGIS K9 SP3

開發工具

VS2008、DotNetBar

開發語言

C#

運行環境

Windows 7

數據庫

SQL Server 2008

其他(可擴充)

2、功能亮點

1)、系統框架搭建比較健全,功能較爲完善。基礎地圖文檔操作、影像操作、數據庫管理等都有涉及。

2)、實現Excel數據的導入、導出功能,右鍵添加影像顯示功能,以及實現托盤功能。

3)、系統空間查詢功能,包括框選、圓選、圖查屬性,以及城市信息查詢等功能。

4)、影像處理功能區流程化,通過調用工具提供了豐富的遙感影像處理功能。以東昌府區1990年、2000年兩期遙感影像爲例,進行土地利用類型分類,並以“建築用地”爲例通過疊加分析得到10年間增加和減少的建築用地面積等信息。


圖5:空間數據庫管理


圖6:數據導入


圖7:數據導入代碼實現

//城市信息入庫
        private void btOk_Click(object sender, EventArgs e)
        {
            if (File.Exists(textBox.Text))
            {
                progressBar.Value = 2;
                DataSet ds = Import.GetExcelData(textBox.Text);
                DataTable tb = ds.Tables[0];
                progressBar.Value = 5;
                string connectionString = ConfigurationManager.ConnectionStrings["sql"].ConnectionString;
                SqlConnection conn = new SqlConnection(connectionString);
                try
                {
                    conn.Open();
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = conn;
                    int rows = tb.Rows.Count;
                    for (int i = 0; i < rows; i++)
                    {
                        cmd.CommandText = "insert into CityInfo (年份,城市名稱,行政單位,人口,GDP,備註) values(" + "'" + Convert.ToString(tb.Rows[i][0]) + "'" + "," + "'" + Convert.ToString(tb.Rows[i][1]) + "'" + "," + "'" + Convert.ToString(tb.Rows[i][2]) + "'" + "," + "'" + Convert.ToString(tb.Rows[i][3]) + "'" + "," + "'" + Convert.ToString(tb.Rows[i][4]) + "'" + "," + "'" + Convert.ToString(tb.Rows[i][5]) +  "'" + ")";
                        cmd.ExecuteNonQuery();
                        progressBar.Value += 1;
                    }
                    conn.Close();
                    MessageBox.Show("導入成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    this.Close();
                }
                catch
                {
                    MessageBox.Show("導入失敗!請檢查格式是否正確!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    this.Close();
                }
            }
            else
            {
                MessageBoxEx.Show("請選擇要到入的Excel表", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }


圖8:城市信息列表及導出


圖9:影像管理及添加顯示

圖10:影像添加顯示


圖11:影像右鍵添加顯示代碼實現

        //添加顯示
        private void btAddOpen_Click(object sender, EventArgs e)
        {
            //判斷是否有數據
            if (rowCount == 0)
            {
                MessageBox.Show("沒有數據,請檢查數據庫!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else 
            {
                try 
                {
                    frMain.MyMapXView.WorkSpace = frMain.MyWorkSpace.ToInterface;
                    string ImagePath = MydataGridView.SelectedRows[0].Cells[5].Value.ToString().Trim();
                    mcRasterDataSet RastDataSet = new mcRasterDataSet();
                    int rtn = RastDataSet.Open(ImagePath, meRasterAccess.meRead);
                    if (rtn != 0) 
                    {
                        return;
                    }
                    mapXBase.IXMapLayer pMapLayer = null;
                    mapXBase.XMap pMap = null;
                    if (frMain.MyWorkSpace.MapCollection == null)
                    {
                        frMain.MyWorkSpace.AppendMap("NewMap", out pMap);
                        pMap.Visible = true;
                    }
                    else 
                    {
                        pMap = frMain.MyWorkSpace.MapCollection.get_Item(0);
                    }
                    frMain.MyWorkSpace.AppendClass(RastDataSet, out pMapLayer, pMap);
                    pMap.ActiveLayer = pMapLayer;
                    
                    //地圖復位
                    frMain.MyMapXView.Restore();
                    RastDataSet.Close();
                    //判斷是否繼續添加,如否,則關閉當前窗口
                    DialogResult re = MessageBox.Show("添加顯示成功!是否繼續添加?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                    if (re == DialogResult.No)
                    {
                        this.Close();
                    }
                    else 
                    {
                        return;
                    }                    
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message.ToString(), "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }
        }

利用東昌府區1990年、2000年兩期遙感影像,對土地利用類型進行變化監測。以“建築用地”爲例進行演示。


圖12:監測處理流程

通過以上監測流程處理後分別得到1990年、2000年東昌府區土地利用類型數據(具體處理步驟詳見演示視頻-MapGIS,文章結尾處)。


圖13:1990年分類結果


圖14:1990年建築用地區域分佈


圖15:2000年分類結果


圖16:2000年建築用地區域分佈


圖17:90-00年間建築用地增加區域


圖18:增加區域信息彙總


圖19:90-00年建築用地減少區域


圖20:減少區域信息彙總

說明:通過較爲複雜的疊加分析運算還可以得出不同土地利用類型之間的詳細轉換細節。因演示較爲耗時,所以在此不做演示。

圖21:托盤顯示及右鍵功能


圖22:系統關於

三、團隊分工

本系統所有內容均爲本人獨立創作(如有雷同,存屬意外)。

四、心得體會

此處略去一萬字。。。。大笑







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章