Tuesday, May 13, 2008

檢查資料

這是一句老生常談的話, 但是非常重要. 個人的感覺是, 往往在花了很多的時間在處理資料的工作, 建立模型...等, 最後確發現, 原來資料有問題. 結果, 就要先把資料重新整理, 然後再重來一次.

整理資料這樣的工作, 雖然聽起來簡單, 但確是非常重要, 所以真的要非常重視, 寧可事先多花一些時間整理資料(圖資資料, 因為都是人工"點"出來的, 所以正確性不見得符合電腦對數據上準確的要求).

Oracle Spatial Developer's Guide文件上, 有一段說明如何檢查資料. 其中要先建立VAL_RESULTS table. 範例如下:

CREATE TABLE val_results (sdo_rowid ROWID, result VARCHAR2(2000));
CALL SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT('COLA_MARKETS', 'SHAPE', 'VAL_RESULTS', 2);
SELECT * from val_results;

接下來, 就可以利用 "FIXING_GEOM"的函式修整資料.

create or replace PROCEDURE FIXING_GEOM AS
b_rowid val_results.sdo_rowid%TYPE;
t_geo_loc A012009.geoloc%type;
cursor c1 is
select SDO_ROWID from VAL_RESULTS;
BEGIN
OPEN c1;
LOOP
FETCH c1 INTO b_rowid;
EXIT WHEN c1%NOTFOUND;
UPDATE A012009
SET GEOLOC = SDO_UTIL.RECTIFY_GEOMETRY(GEOLOC, 0.000005)
WHERE ROWID = b_rowid;
COMMIT;
commit;
END LOOP;
CLOSE c1;
END FIXING_GEOM;