如上圖,要特別指出的是,在Application Server上提供WFS Server API,資料是儲存在資料庫上的"Spatial Tables",所以要透過"Feature Mapping"或稱為Publish (發佈)提供原"Spatial Tables"額外的資訊以滿足WFS的要求,但是原"Spatial Tables"並不需要再多一份複製(所以是用"Feature Mapping"這個字眼)。
設定Oracle WFS 的步驟,如下圖
在這些設定步驟,我們會使用SDO_WFS_PROCESS與SDO_WFS_LOCK packages
1. Set capabilities info
設定 Server Capabilities 的方法有(任選一種方法就可以)
I. 將外部"WFScapabilitiesTemplate.xml" 載入資料庫
以SYSTEM登入資料庫,執行下列SQL (WFScapabilitiesTemplate.xml 放在'/u01/oracle/db/product/11.2.0.3/dbhome_1' 目錄下
create or replace directory WFS_XML
as '/u01/oracle/db/product/11.2.0.3/dbhome_1';
begin
SDO_WFS_PROCESS.insertCapabilitiesInfo(
xmltype(
bfilename('WFS_XML', 'WFScapabilitiesTemplate.xml'),
nls_charset_id('AL32UTF8')
)
);
end;
/
commit;
II. 直接使用PL/SQL載入WFScapabilitiesTemplate.xml 的內容
範例
WFS GetCapabilities 測試URL:
http://localhost:7001/SpatialWS-SpatialWS-context-root/xmlwfsservlet?request=GetCapabilities&service=WFS&version=1.0.0
正確的設定應該會出下面的結果
2. Enable the schema
這個步驟相對簡單,只要透過MDSYS, SYSTEM或SYS執行"SDO_WFS_PROCESS.GrantMDAccessToUser"
SQL> execute SDO_WFS_PROCESS.GrantMDAccessToUser('MVDEMO')
3. Publish Table
必須要用SYSTEM或SYS來執行(但不包括MDSYS)Publish Tables的預儲程序(stored procedure)
範例:
declare
featureDescriptorXML CLOB :=
'<?xml version="1.0" ?>
<FeatureType xmlns:mvdemons="http://www.myserver.com/mvdemo"
xmlns="http://www.opengis.net/wfs">
<Name> mvdemons:Cities</Name>
<Title>Cities</Title>
<SRS>SDO:8307</SRS>
</FeatureType>';
begin
SDO_WFS_PROCESS.publishFeatureType(
dataSrc => 'MVDEMO.CITIES',
ftNsUrl => 'http://www.myserver.com/mvdemo',
ftName => 'Cities',
ftNsAlias => 'mvdemons' ,
featureDesc => xmltype(featureDescriptorXML),
schemaLocation => null,
pkeyCol => 'CITY',
columnInfo => MDSYS.StringList('PointMemberType'),
pSpatialCol => 'LOCATION',
featureMemberNs => null,
featureMemberName => null,
srsNs => null,
srsNsAlias => null
);
end;
/
其中 MVDEMO.CITIES
SQL> desc cities
Name Null? Type
----------------------------------------- -------- ----------------------------
LOCATION MDSYS.SDO_GEOMETRY
CITY VARCHAR2(42)
STATE_ABRV VARCHAR2(2)
POP90 NUMBER
RANK90 NUMBER
說明
featureDescriptorXML為當收到 GetCapabilities要求時,所回傳XML的內容
dataSrc => 'MVDEMO.CITIES' 表示所對應旳Schema與Table名稱
ftName => 'Cities' 表示WFS的Feature Name
pkeyCol => 'CITY' 表示該表的的 Primary Key
columnInfo => MDSYS.StringList('PointMemberType') 表示所對應GML 圖徵)feature)的型態
pSpatialCol => 'LOCATION' 表示表格為SDO_GEOMETRY欄位型態的欄位名稱
4. Register table for updates
Oracle Spatial WFS 支援 WFS-T。要能支援WFS-T需要將能提供此項功能的資料表格進行註冊。透過該表格的擁有者(Owner)執行SDO_WFS_LOCK.registerFeatureTable
範例:
SQL> execute SDO_WFS_LOCK.registerFeatureTable('MVDEMO','CITIES')
5. Notify WFS server
新增的異動並不動自動送到WFS server,透過MDSYS, SYSTEM或SYS執行SDO_WFS_PROCESS. insertFtMDUpdated來通知WFS有新的更新異動;WFS 則會每10秒(預設)(定義在<wfs_cache_sync_interval>10000</wfs_cache_sync_interval>)來檢查更新的時間,如果有變動,則會載入新的WFS定義
範例:
SQL> execute SDO_WFS_PROCESS.InsertFtMDUpdated('http://www.myserver.com/mvdemo','Cities', sysdate)
6. Grant access rights
給予"匿名使用者"對資料表格適當的存取權限。以本範來說,MVDEMO.CITIES需要給予SELECT、INSERT、UPDATE、DELETE(為滿足WFS-T的功能)。
SQL> grant SELECT, INSERT, UPDATE, DELETE on cities to SpatialWsXmlUser;
7. Set Configuration params
主要是修改 WEB-INF/conf/wsconfig.xml 的設定內容(基本上使用預設就可以了)
<wfs_cache_sync_interval>10000</wfs_cache_sync_interval>
設定WFS檢查異動同步的時間間隔
<wfs_query_timeout>10</wfs_query_timeout>
預設查詢鎖定時間(單位是分鐘)
<wfs_lock_expiry>4</wfs_lock_expiry>
預設異動鎖定時間(單位是秒)
<cached_feature_types>
<feature_type ns="http://www.myserver.com/mvdemo" name="Cities" />
<feature_type ns="http://www.myserver.com/mvdemo" name="Counties" />
</cached_feature_types>
設定需要放置於WFS memory cache 的Features
7. Set Configuration params
主要是修改 WEB-INF/conf/wsconfig.xml 的設定內容(基本上使用預設就可以了)
<wfs_cache_sync_interval>10000</wfs_cache_sync_interval>
設定WFS檢查異動同步的時間間隔
<wfs_query_timeout>10</wfs_query_timeout>
預設查詢鎖定時間(單位是分鐘)
<wfs_lock_expiry>4</wfs_lock_expiry>
預設異動鎖定時間(單位是秒)
<cached_feature_types>
<feature_type ns="http://www.myserver.com/mvdemo" name="Cities" />
<feature_type ns="http://www.myserver.com/mvdemo" name="Counties" />
</cached_feature_types>
設定需要放置於WFS memory cache 的Features
No comments:
Post a Comment