轉載請註明出處:tedeum.iteye.com
感謝開源,使用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 ( id number, name nvarchar2(256), position MDSYS.SDO_GEOMETRY ); create table t_area ( id number, name nvarchar2(256), position MDSYS.SDO_GEOMETRY ); --建立空間索引 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; insert into user_sdo_geom_metadata(table_name,COLUMN_NAME, DIMINFO) values( 'T_LINE', '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_LINE_POS ON T_LINE(POSITION) INDEXTYPE IS MDSYS.SPATIAL_INDEX; insert into user_sdo_geom_metadata(table_name, COLUMN_NAME, DIMINFO) values( 'T_AREA', '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_AREA_POS ON T_AREA(POSITION) INDEXTYPE IS MDSYS.SPATIAL_INDEX;
現在可以看到,空間表建立好了,我們可以像操作普通關聯式資料庫一樣進行操作,下面用一個插入例子來說明: Sql代碼 --插入點 insert into t_point(id, name, position) values (1, 'test point', MDSYS.SDO_GEOMETRY (3001, NULL, NULL, MDSYS.sdo_elem_info_array (1, 1, 1, 4, 1, 0), MDSYS.sdo_ordinate_array (24.886436, 102.784423, 0, &n