• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      WebGis應用系統(tǒng)中松散數(shù)據(jù)耦合的實現(xiàn)策略研究

      2017-03-24 13:00:19曹忠
      電腦知識與技術(shù) 2017年1期
      關(guān)鍵詞:信息內(nèi)容數(shù)據(jù)表數(shù)據(jù)源

      曹忠

      摘要:數(shù)據(jù)耦合是應用系統(tǒng)開放與互連的重要保障機制,也是系統(tǒng)數(shù)據(jù)共享關(guān)鍵技術(shù)。本文作者結(jié)合基于WebGis的應用程序開發(fā)實踐,探討Arcgis Server9.2平臺上的GIS數(shù)據(jù)與常見外部數(shù)據(jù)源之間進行松散數(shù)據(jù)耦合的方法與過程,給出具體的代碼實現(xiàn)流程,以期對同類應用開發(fā)提供一定的指導與借鑒作用。

      關(guān)鍵詞:數(shù)據(jù)耦合;Arcgis Server9.2平臺;GIS應用;實現(xiàn)策略

      中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2017)01-0224-03

      Abstract:Data Coupling is a very important mechanism in Applications open and interconnected. It is else a key technology about system data sharing. The article based on Development practices in WebGis Applications, Discussed the Methods and Process in loosely data coupling about Gis data and common External data sources, and provide specific code and implementation process, wish to provide some guidance and reference in The development of similar applications.

      Key words:Data Coupling; Arcgis Server9.2; Gis Application; Implementation strategy

      1 引言

      GIS[1-2]是一個時空一體的綜合業(yè)務應用系統(tǒng)[5],地理信息系統(tǒng)中的所使用的數(shù)據(jù)一般包括GIS本身數(shù)據(jù)與外部數(shù)據(jù),本身數(shù)據(jù)是指GIS地圖中所帶的空間位置數(shù)據(jù)、拓撲關(guān)系數(shù)據(jù)、基本屬性數(shù)據(jù),當然還包括部分存儲在外部數(shù)據(jù)庫(如Oracle數(shù)據(jù)庫)中的擴展屬性數(shù)據(jù),也叫基礎(chǔ)數(shù)據(jù)或系統(tǒng)數(shù)據(jù)[1-2]。外部數(shù)據(jù)則是指所有可能與GIS地圖空間數(shù)據(jù)發(fā)生關(guān)系的各種應用系統(tǒng)的數(shù)據(jù),也叫擴展數(shù)據(jù)或外延數(shù)據(jù),是GIS系統(tǒng)集成其他已有應用系統(tǒng)數(shù)據(jù)信息,充分發(fā)揮GIS功能的平臺特性的數(shù)據(jù)來源。ArcGIS Server是基于服務器的計算和空間服務的GIS基礎(chǔ)平臺,系統(tǒng)在支持高性能Web制圖功能的同時,還提供了充分利用ArcGIS空間分析工具和功能實現(xiàn)的、面向服務的解決方案,為構(gòu)建功能強大的企業(yè)應用軟件提供了基礎(chǔ)支持[3-4]。

      在GIS平臺中,就涉及一個如何調(diào)用外部數(shù)據(jù)、如何進行有效的數(shù)據(jù)關(guān)聯(lián)的問題,這就是數(shù)據(jù)共享問題,而數(shù)據(jù)共享機制是開放系統(tǒng)的前提與基礎(chǔ),是網(wǎng)絡綜合應用平臺的發(fā)展方向[4]。本文結(jié)合開發(fā)省際警務GIS平臺的項目實踐,較系統(tǒng)地介紹GIS平臺數(shù)據(jù)與外部數(shù)據(jù)進行耦合關(guān)聯(lián)的三種方式,并具體介紹每一種方式的技術(shù)實現(xiàn)方法。

      2 圖數(shù)耦合機制

      數(shù)據(jù)耦合的主要目的是將地理信息系統(tǒng)中的內(nèi)部數(shù)據(jù)和外部應用程序的數(shù)據(jù)建立出映射關(guān)系,主要包括:(1)一對一關(guān)系:GIS基礎(chǔ)數(shù)據(jù)記錄與外部應用數(shù)據(jù)記錄間通過關(guān)鍵字段建立起一對一關(guān)系;(2)一對多關(guān)系:GIS是空間分層數(shù)據(jù),有時一個點可表示一個位置(或一個對象),對象GIS基礎(chǔ)數(shù)據(jù)的對象名與外部數(shù)據(jù)的記錄間建立起一對多的關(guān)系。如GIS地圖中的一個小區(qū)點對象,可通過小區(qū)點對象的名稱屬性與人口數(shù)據(jù)表中的居住地地址關(guān)聯(lián),就建立了一對多的關(guān);(3) 個體關(guān)聯(lián):對于GIS中的特殊實體對象,可能只能與外部數(shù)據(jù)庫中的實體對象聯(lián)系起來,就必須要建立實體關(guān)聯(lián)。如要將贛江實體與贛江水文數(shù)據(jù)庫聯(lián)系起來,而與其他的河流無關(guān);(4)行為關(guān)聯(lián):實際上這是建立兩個應用程序的接口,由GIS系統(tǒng)中某個對象的特定行為激發(fā)外部應用系統(tǒng)的相應操作。

      對于上面的描述的關(guān)聯(lián),實質(zhì)上就是構(gòu)建GIS數(shù)據(jù)與外部數(shù)據(jù)之間的三種關(guān)聯(lián)模式:結(jié)構(gòu)(屬性)關(guān)聯(lián)、數(shù)據(jù)關(guān)聯(lián)和行為關(guān)聯(lián)。結(jié)構(gòu)關(guān)聯(lián)是指在數(shù)據(jù)表的結(jié)構(gòu)層建立起關(guān)聯(lián)關(guān)系,以達到表間的所有數(shù)據(jù)都建立起對應關(guān)系;而數(shù)據(jù)關(guān)聯(lián)則是建立起空間表中某個對象與外部的聯(lián)系,行為關(guān)聯(lián)則是建立GIS特定對象上的某個操作所產(chǎn)生的外部應用程序行為。

      3 數(shù)據(jù)耦合流程

      數(shù)據(jù)關(guān)聯(lián)的實現(xiàn)流程,主要包括以下幾個步驟:

      1)先設計好關(guān)聯(lián)模型(是結(jié)構(gòu)關(guān)聯(lián)、數(shù)據(jù)關(guān)聯(lián)還是行為關(guān)聯(lián))

      2)選擇需要關(guān)聯(lián)的Map控件數(shù)據(jù)/Geodatabase數(shù)據(jù)對象;

      3)選擇需要關(guān)聯(lián)的外部數(shù)據(jù)源或外部程序;

      4)確定關(guān)聯(lián)關(guān)系并存入關(guān)聯(lián)數(shù)據(jù)表中;

      5)寫入用戶工作日志。

      在省警Gis信息平臺中有關(guān)結(jié)構(gòu)耦合與數(shù)據(jù)耦合設置的界面如圖二、三所示。

      對于內(nèi)部關(guān)聯(lián)的數(shù)據(jù)來源于當前GIS應用程序內(nèi)部,可從map控件中獲??;外部關(guān)聯(lián)條件應先獲取已設置好的數(shù)據(jù)源,可通過ODBC面版來設置關(guān)系數(shù)據(jù)源;對于結(jié)構(gòu)關(guān)聯(lián)屬性之間必定是相等的關(guān)系;對于內(nèi)部和外部關(guān)聯(lián)條件設置時,各控件間應建立有連動機制,即選擇數(shù)據(jù)源后,數(shù)據(jù)表的下拉列表中只有選中數(shù)據(jù)源的表格,而選擇數(shù)據(jù)表后,屬性字段也必須建立連動機制。

      4 數(shù)據(jù)耦合實現(xiàn)的關(guān)鍵技術(shù)

      4.1對Arcgis Server中的圖層、字段及數(shù)據(jù)的獲取方式

      要創(chuàng)建內(nèi)部數(shù)據(jù)和外部數(shù)據(jù)間的耦合,首先獲取需要進行查詢的內(nèi)部圖源,檢查當前程序是否支持ArcGIS中的查詢函數(shù)。如果支持則調(diào)用GetQueryableLayers圖層查詢函數(shù)對圖層進行遍歷,最后讀取圖層名并對圖層選擇下拉列表框ddlLayer進行填充。

      ESRI.ArcGIS.ADF.Web.DataSources.ImapFunctionality mf = (ESRI.ArcGIS.ADF.Web.DataSources.IMapFunctionality)Map1.GetFunctionality(0);

      ESRI.ArcGIS.ADF.Web.DataSources.IGISResource gisresource = mf.Resource; //獲取內(nèi)部數(shù)據(jù)源

      bool supported = gisresource.SupportsFunctionality(typeof(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality));

      if (supported)

      {

      ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality qfunc = (ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality)gisresource.CreateFunctionality(typeof(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality), null);

      string[] lids;

      string[] lnames;

      qfunc.GetQueryableLayers(null, out lids, out lnames);//調(diào)用GetQueryableLayers函數(shù)

      for (int i = 0; i < lnames.Length; i++)//對圖層進行遍歷

      { ddlLayer.Items.Add(lnames[i]); }//對圖層選擇下拉列表框進行填充

      }

      String[] pFields = qfunc.GetFields(null, lids[layer_index]);

      for (int i = 0; i < pFields.Length; i++)//對圖層的屬性字段進行編歷

      {this.ddlField.Items.Add(pFields[i].ToString());}//對屬性字段選擇下拉列表框進行填充

      sc.Add(this.ddlField.SelectedItem.Text.Trim());//獲取所要查詢數(shù)據(jù)的字段

      pQF.SubFields = sc;

      DataTable DT = pQueryFun.Query(null,lids[Convert.ToInt32(Session["CurrentLayer"])], pQF);//把數(shù)據(jù)存儲到臨時表DT中

      Session.Remove("CurrentLayer");

      int n = DT.Rows.Count;

      for (int i = 0; i < n; i++)//對數(shù)據(jù)進行遍歷

      {this.ddlObject.Items.Add(DT.Rows[i][this.ddlField.SelectedItem.Text.Trim()].ToString());

      }

      4.2 外部數(shù)據(jù)源連接技術(shù)

      在準備好了需要進行耦合的內(nèi)部數(shù)據(jù)外,還要對外部數(shù)據(jù)源進行連接準備,包括設置連接對象、讀取表名及讀取字段結(jié)構(gòu)等步驟,以連接Oracle10g為例進行說明:

      (1) 連接Oracle數(shù)據(jù)庫:

      OracleConnection conn = new OracleConnection("Data Source=" + txtInstance.Text + ";User ID=" + txtUser.Text + ";Password=" + txtPwd.Text + ";Unicode=True;");

      (2) 讀取Oracle表名:

      OracleCommand cmd = new OracleCommand("select table_name from all_tables where table_name not like '%$%'", conn);

      OracleDataReader odr = cmd.ExecuteReader();

      this.ddlTable.DataSource = odr;

      this.ddlTable.DataTextField = "table_name";

      (3) 讀取Oracle表的字段名:

      OracleCommand cmd = new OracleCommand("select A.column_name from user_tab_columns A where A.Table_Name='" + this.ddlTable.SelectedItem.Value + "'", conn);

      OracleDataReader odr1 = cmd.ExecuteReader();

      this.ddlProperty.DataSource = odr1;

      this.ddlProperty.DataTextField = "COLUMN_NAME";

      4.3 耦合條件生成

      首先獲取關(guān)聯(lián)圖層和關(guān)聯(lián)信息內(nèi)容,其中關(guān)聯(lián)信息內(nèi)容在結(jié)構(gòu)關(guān)聯(lián)中指圖層結(jié)構(gòu)字段,在數(shù)據(jù)關(guān)聯(lián)和行為關(guān)聯(lián)中指地圖中的對象名稱。通過關(guān)聯(lián)圖層和關(guān)聯(lián)信息內(nèi)容判斷之前數(shù)據(jù)庫中是否存有該條記錄,若有,則直接獲取該條記錄的內(nèi)部關(guān)聯(lián)編號;若沒有,則在原最大內(nèi)部關(guān)聯(lián)編號上加一,得到新記錄的內(nèi)部關(guān)聯(lián)編號,并把格式統(tǒng)一為000X,如果內(nèi)部關(guān)聯(lián)信息表沒記錄,那么就把第一條記錄的內(nèi)部關(guān)聯(lián)編號設為0001。最后把內(nèi)部關(guān)聯(lián)編號、關(guān)聯(lián)圖層、關(guān)聯(lián)信息內(nèi)容等插入到內(nèi)部關(guān)聯(lián)信息表中。

      gltcbh = this.ddlLayer.SelectedItem.Value;//關(guān)聯(lián)圖層

      glxxnr = this.ddlObject.SelectedItem.Value;//關(guān)聯(lián)信息內(nèi)容

      OracleConnection conn = OracleDB.createConnection();

      try

      {

      conn.Open();

      string strSelect_nbgl = "select nbglbh from nbglxxb where gltcbh='" + gltcbh + "' and glxxnr='" + glxxnr + "'";

      //沒有讀到則建立新的內(nèi)部關(guān)聯(lián)編號插入

      string strSelect = "select nbglbh from nbglxxb";

      OracleDataAdapter sda = new OracleDataAdapter(strSelect, conn);

      DataSet ds = new DataSet();

      sda.Fill(ds);

      OracleCommand cmd = new OracleCommand();

      cmd.Connection = conn;

      cmd.CommandText = "insert into nbglxxb values('" + nbglbh1 + "','" + gltcbh + "','" + glxxnr + "','"+txt_dx.Text+"')";

      cmd.ExecuteNonQuery();

      5 結(jié)束語

      通過數(shù)據(jù)耦合的方式的設置,使本系統(tǒng)地理空間數(shù)據(jù)與外部相關(guān)的信息數(shù)據(jù)之間建立了增強型的聯(lián)系,一方面,極大地擴展了系統(tǒng)原本擁有的信息量,為用戶查詢提供了更豐富的信息資源。同時,也為外界系統(tǒng)共享本系統(tǒng)的內(nèi)容數(shù)據(jù)提供了一個良好的接口,為本系統(tǒng)成為一個真正開放共享的資源平臺的一部分奠定了相應的技術(shù)基礎(chǔ)。

      從另一方面,GIS本身是一個時空系統(tǒng)[5][6],通過數(shù)據(jù)耦合等數(shù)據(jù)共享機制的探討,對拓寬GIS系統(tǒng)數(shù)據(jù)的來源提供了另一思路,希望對后期同類軟件的開發(fā)提供一定的借鑒與參考作用。

      參考文獻:

      [1]陳顯軍,等.基于.NET的組件式WebGIS系統(tǒng)設計與實現(xiàn)[J].現(xiàn)代計算機,2012(17).

      [2]謝安濤,唐建智,許文波.基于Hibernate Spatial構(gòu)建松散耦合地圖服務的技術(shù)方法[J].地理信息世界,2010(3).

      [3]趙自力, 王東華, 周曉光.基于ArcGIS Server的網(wǎng)絡GIS應用系統(tǒng)開發(fā)[J].遙感信息2007(1).

      [4]吳功和, 叢明日.基于ArcGIS Server的分布式GIS應用[J].測繪科學技術(shù)學報,2006,23(1).

      [5]王洪偉, 張立朝, 張海東.分布式ArcGIS Server體系結(jié)構(gòu)的研究與開發(fā)[J].測繪科學技術(shù)學報,2007,24(2).

      [6]CSDN-浩淼的天空ArcGIS Engine簡介

      http://blog.csdn.net/chiangbt/archive/2008/08/06/2775151.aspx

      [7]林廣發(fā). 基于事件的時空數(shù)據(jù)模型研究[J].測繪學報,2004(3).

      [8]龔健雅.GIS中面向?qū)ο蟮臅r空數(shù)據(jù)模型[J].測繪學報,1997(4).

      猜你喜歡
      信息內(nèi)容數(shù)據(jù)表數(shù)據(jù)源
      淺析知識倉庫及其在企業(yè)管理中的應用
      信源、信息內(nèi)容、情緒特征對微博轉(zhuǎn)發(fā)的影響探究
      論《網(wǎng)絡信息內(nèi)容生態(tài)治理規(guī)定》的創(chuàng)新與完善
      法制博覽(2020年6期)2020-07-16 03:49:06
      湖北省新冠肺炎疫情數(shù)據(jù)表
      黨員生活(2020年2期)2020-04-17 09:56:30
      基于列控工程數(shù)據(jù)表建立線路拓撲關(guān)系的研究
      Web 大數(shù)據(jù)系統(tǒng)數(shù)據(jù)源選擇*
      基于不同網(wǎng)絡數(shù)據(jù)源的期刊評價研究
      微信公眾平臺推送信息內(nèi)容對顧客品牌忠誠的影響
      基于真值發(fā)現(xiàn)的沖突數(shù)據(jù)源質(zhì)量評價算法
      圖表
      改则县| 伊吾县| 汝城县| 普洱| 三台县| 建昌县| 长葛市| 汉源县| 章丘市| 山东省| 富裕县| 宜君县| 平度市| 泸州市| 将乐县| 富顺县| 浮山县| 炎陵县| 奉化市| 始兴县| 仁化县| 吉安县| 新龙县| 富蕴县| 绍兴县| 霍山县| 玉环县| 清新县| 宁城县| 江北区| 靖安县| 繁峙县| 堆龙德庆县| 株洲县| 普兰店市| 奇台县| 峨边| 弥勒县| 广平县| 岳普湖县| 武强县|