感謝開源,使用OpenLayers+Geoserver的地理資訊系統開發很簡單,完全可以套用開發MIS系統的經驗,我這裡總結為三個步驟:
1、資料準備
2、資料釋出
3、資料展現
我将按照這個思路來介紹,首先是資料釋出:
一、資料釋出
GIS資料源是多種多樣的,有矢量資料、有栅格資料、有文本資料庫、有關系型資料庫,由于我平時主要使用Oracle 空間資料庫和PostGIS,Oracle用得多一些,是以我以Oracle為例來說明,其他的觸類旁通,至少我遇到的大部分是這樣的。
使用Oracle管理空間資料完全可以當作是關系性資料庫,這就是我是的可以套用MIS系統經驗的原因,Oracle空間資料庫增加了一個空間對象MDSYS.SDO_GEOMETRY來存儲空間資料,就像varchar,int這些類型一樣,但是這個類型是個對象。
需要注意的是,這個空間對象要正确釋出需要建立空間索引,而要建立空間索引則要現在中繼資料表中進行定義,下面我就空間圖形中基礎的點線面來示例如何建立空間資料庫表:
Sql代碼

- --建立表
- create table t_point
- (
- id number,
- name nvarchar2(256),
- position MDSYS.SDO_GEOMETRY
- );
- create table t_line
- create table t_area
- --建立空間索引
- insert into user_sdo_geom_metadata(table_name,COLUMN_NAME, DIMINFO)
- values(
- 'T_POINT',
- 'POSITION',
- MDSYS.SDO_DIM_ARRAY(
- MDSYS.SDO_DIM_ELEMENT('X',-180,180,0.005),
- MDSYS.SDO_DIM_ELEMENT('Y',-90,90,0.005),
- MDSYS.SDO_DIM_ELEMENT('Z',-9000,9000,0.005)
- )
- );
- CREATE INDEX IDX_T_POINT_POS ON T_POINT(POSITION) INDEXTYPE IS MDSYS.SPATIAL_INDEX;
- 'T_LINE',
- CREATE INDEX IDX_T_LINE_POS ON T_LINE(POSITION) INDEXTYPE IS MDSYS.SPATIAL_INDEX;
- insert into user_sdo_geom_metadata(table_name, COLUMN_NAME, DIMINFO)
- 'T_AREA',
- CREATE INDEX IDX_T_AREA_POS ON T_AREA(POSITION) INDEXTYPE IS MDSYS.SPATIAL_INDEX;
現在可以看到,空間表建立好了,我們可以像操作普通關系資料庫一樣進行操作,下面用一個插入例子來說明:

- --插入點
- insert into t_point(id, name, position)
- values
- (1, 'test point',
- MDSYS.SDO_GEOMETRY (3001,
- NULL,
- MDSYS.sdo_elem_info_array (1, 1, 1, 4, 1, 0),
- MDSYS.sdo_ordinate_array (24.886436,
- 102.784423,
- 0,
- 1,
- )
- )
- --插入線
- insert into t_line(id, name, position)
- (1, 'test line',MDSYS.SDO_GEOMETRY (3002,
- MDSYS.sdo_elem_info_array (1, 2, 1),
- MDSYS.sdo_ordinate_array (0, 0, 0, 0, 90, 0, 200, 90 , 0, 200, 0, 0)
- ));
- --插入面
- insert into t_area(id, name, position)
- (1, 'test area',MDSYS.SDO_GEOMETRY (3003,
- MDSYS.sdo_elem_info_array (1, 1003, 1),
- MDSYS.sdo_ordinate_array (0, 0, 0, 0, 90, 0, 200, 90 , 0, 200, 0, 0, 0, 0, 0)
上面的代碼構造了一個空間對象,該對象的說明可以參考相關文檔,這裡就不詳細說明了。準備好資料以後就可以進行資料釋出了,資料釋出是其中比較沒有技術含量的體力活,可以參考這裡的一系列文章:http://www.cnblogs.com/beniao/archive/2011/01/08/1930822.html
資料釋出好後,可以進行資料展示了,資料展示可以套用MIS的控件概念,按照如下步驟開展:
1、建立地圖控件
2、建立圖層
3、在地圖中加入圖層
4、在地圖中加入其他控件
詳細如下代碼所示:
Js代碼

- //初始化地圖
- //var map = new OpenLayers.Map('map');
- var map = new OpenLayers.Map({
- div:"map",
- maxExtent:[97.027587,21.166484,106.739502,29.31642],
- center:new OpenLayers.LonLat(101.857909,24.726875)
- });
- //建立圖層
- var ol_wms = new OpenLayers.Layer.WMS(
- "OpenLayers WMS",
- "http://10.180.80.206:9000/geoserver/wms",
- {layers: "sdgis:DQJ"}
- //添加地圖控件
- map.addControl(new OpenLayers.Control.LayerSwitcher());
- map.addControl(new OpenLayers.Control.MousePosition());
- map.addControl(new OpenLayers.Control.Scale());
- //圖層加入地圖
- map.addLayers([ol_wms]);
- map.zoomToExtent([97.027587, 21.166484, 106.739502, 27.467659], true);