Oracle spatial、openlayers、geoserver開發地理資訊系統總結

來源:互聯網
上載者:User

標籤:空間資料庫   資料來源   SM   icon   start   array   data-   statistic   儲存   

感謝開源,使用OpenLayers+Geoserver的地理資訊系統開發很簡單,完全可以套用開發MIS系統的經驗,我這裡總結為三個步驟:

1、資料準備

2、資料發布

3、資料展現

我將按照這個思路來介紹,首先是資料發布:

一、資料發布

GIS資料來源是多種多樣的,有向量資料、有柵格資料、有文本資料庫、有關係型資料庫,由於我平時主要使用Oracle 空間資料庫和PostGIS,Oracle用得多一些,所以我以Oracle為例來說明,其他的觸類旁通,至少我遇到的大部分是這樣的。

使用Oracle管理空間資料完全可以當作是關係性資料庫,這就是我是的可以套用MIS系統經驗的原因,Oracle空間資料庫增加了一個空間對象MDSYS.SDO_GEOMETRY來儲存空間資料,就像varchar,int這些類型一樣,但是這個類型是個對象。

需要注意的是,這個空間對象要正確發布需要建立空間索引,而要建立空間索引則要現在中繼資料表中進行定義,下面我就空間圖形中基礎的點線面來樣本如何建立空間資料庫表:

Sql代碼  
  1. --建立表  
  2. create table t_point  
  3. (  
  4.   id       number,  
  5.   name nvarchar2(256),  
  6.   position  MDSYS.SDO_GEOMETRY  
  7. );  
  8.   
  9. create table t_line  
  10. (  
  11.   id       number,  
  12.   name nvarchar2(256),  
  13.   position  MDSYS.SDO_GEOMETRY  
  14. );  
  15.   
  16. create table t_area  
  17. (  
  18.   id       number,  
  19.   name nvarchar2(256),  
  20.   position  MDSYS.SDO_GEOMETRY  
  21. );  
  22.   
  23. --建立空間索引  
  24. insert into user_sdo_geom_metadata(table_name,COLUMN_NAME, DIMINFO)   
  25.        values(  
  26.               ‘T_POINT‘,  
  27.               ‘POSITION‘,  
  28.                MDSYS.SDO_DIM_ARRAY(  
  29.                     MDSYS.SDO_DIM_ELEMENT(‘X‘,-180,180,0.005),  
  30.                     MDSYS.SDO_DIM_ELEMENT(‘Y‘,-90,90,0.005),  
  31.     MDSYS.SDO_DIM_ELEMENT(‘Z‘,-9000,9000,0.005)  
  32.                )  
  33.        );  
  34. CREATE INDEX IDX_T_POINT_POS ON T_POINT(POSITION) INDEXTYPE IS MDSYS.SPATIAL_INDEX;  
  35.   
  36. insert into user_sdo_geom_metadata(table_name,COLUMN_NAME, DIMINFO)   
  37.        values(  
  38.               ‘T_LINE‘,  
  39.               ‘POSITION‘,  
  40.                MDSYS.SDO_DIM_ARRAY(  
  41.                     MDSYS.SDO_DIM_ELEMENT(‘X‘,-180,180,0.005),  
  42.                     MDSYS.SDO_DIM_ELEMENT(‘Y‘,-90,90,0.005),  
  43.     MDSYS.SDO_DIM_ELEMENT(‘Z‘,-9000,9000,0.005)  
  44.                )  
  45.        );  
  46. CREATE INDEX IDX_T_LINE_POS ON T_LINE(POSITION) INDEXTYPE IS MDSYS.SPATIAL_INDEX;  
  47.   
  48. insert into user_sdo_geom_metadata(table_name, COLUMN_NAME, DIMINFO)   
  49.        values(  
  50.               ‘T_AREA‘,  
  51.               ‘POSITION‘,  
  52.                MDSYS.SDO_DIM_ARRAY(  
  53.                     MDSYS.SDO_DIM_ELEMENT(‘X‘,-180,180,0.005),  
  54.                     MDSYS.SDO_DIM_ELEMENT(‘Y‘,-90,90,0.005),  
  55.     MDSYS.SDO_DIM_ELEMENT(‘Z‘,-9000,9000,0.005)  
  56.                )  
  57.        );  
  58. CREATE INDEX IDX_T_AREA_POS ON T_AREA(POSITION) INDEXTYPE IS MDSYS.SPATIAL_INDEX;  

 現在可以看到,空間表建立好了,我們可以像操作普通關聯式資料庫一樣進行操作,下面用一個插入例子來說明:

Sql代碼  
  1. --插入點  
  2. insert into t_point(id, name, position)  
  3. values  
  4. (1, ‘test point‘,  
  5. MDSYS.SDO_GEOMETRY (3001,  
  6.                                     NULL,  
  7.                                     NULL,  
  8.                                     MDSYS.sdo_elem_info_array (1, 1, 1, 4, 1, 0),  
  9.                                     MDSYS.sdo_ordinate_array (24.886436,  
  10.                                                              102.784423,  
  11.                                                              0,  
  12.                                                              1,  
  13.                                                              0,  
  14.                                                              0  
  15.                                                             )  
  16.                                   )  
  17. );  
  18. --插入線  
  19. insert into t_line(id, name, position)  
  20. values  
  21. (1, ‘test line‘,MDSYS.SDO_GEOMETRY (3002,  
  22.                                     NULL,  
  23.                                     NULL,  
  24.                                     MDSYS.sdo_elem_info_array (1, 2, 1),  
  25.                                     MDSYS.sdo_ordinate_array (0, 0, 0, 0, 90, 0, 200, 90 , 0, 200, 0, 0)  
  26.                                   ));  
  27. --插入面  
  28. insert into t_area(id, name, position)  
  29. values  
  30. (1, ‘test area‘,MDSYS.SDO_GEOMETRY (3003,  
  31.                                     NULL,  
  32.                                     NULL,  
  33.                                     MDSYS.sdo_elem_info_array (1, 1003, 1),  
  34.                                     MDSYS.sdo_ordinate_array (0, 0, 0, 0, 90, 0, 200, 90 , 0, 200, 0, 0, 0, 0, 0)  
  35.                                   ));  

 上面的代碼構造了一個空間對象,該對象的說明可以參考相關文檔,這裡就不詳細說明了。準備好資料以後就可以進行資料發布了,資料發布是其中比較沒有技術含量的體力活,可以參考這裡的一系列文章:http://www.cnblogs.com/beniao/archive/2011/01/08/1930822.html

資料發布好後,可以進行資料展示了,資料展示可以套用MIS的控制項概念,按照如下步驟開展:

1、建立地圖控制項

2、建立圖層

3、在地圖中加入圖層

4、在地圖中加入其他控制項

詳細如下代碼所示:

Js代碼  
  1. //初始化地圖  
  2. //var map = new OpenLayers.Map(‘map‘);  
  3. var map = new OpenLayers.Map({  
  4. div:"map",  
  5. maxExtent:[97.027587,21.166484,106.739502,29.31642],  
  6. center:new OpenLayers.LonLat(101.857909,24.726875)  
  7.     });  
  8. //建立圖層  
  9. var ol_wms = new OpenLayers.Layer.WMS(  
  10.    "OpenLayers WMS",  
  11.    "http://10.180.80.206:9000/geoserver/wms",  
  12.    {layers: "sdgis:DQJ"}  
  13. );  
  14.   
  15. //添加地圖控制項  
  16. map.addControl(new OpenLayers.Control.LayerSwitcher());  
  17. map.addControl(new OpenLayers.Control.MousePosition());  
  18. map.addControl(new OpenLayers.Control.Scale());  
  19. //圖層加入地圖  
  20. map.addLayers([ol_wms]);  
  21. map.zoomToExtent([97.027587, 21.166484, 106.739502, 27.467659], true);  

Oracle spatial、openlayers、geoserver開發地理資訊系統總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.