天天看點

ArcSDE關聯查詢時ArcMap與REST查詢結果不一緻的問題解決

先描述一下問題:

環境:ArcGIS10.x、Oracle 11g R2,該問題與環境沒有關系

如果使用者使用關聯查詢(比如一個空間資料與一個屬性資料進行關聯),在ArcGIS for Desktop中查詢的結果(檢視屬性表),與進行REST的Query(where條件輸入1=1即查詢所有資料)查詢的結果不一緻,一般情況下REST的Query查詢比桌面查詢的結果要多。

----------------------------------------------------------------------------------

版權所有,文章允許轉載,但必須以連結方式注明源位址,否則追究法律責任!

Blog:               http://blog.csdn.net/linghe301

----------------------------------------------------------------------------------

測試資料說明:

空間資料place

ArcSDE關聯查詢時ArcMap與REST查詢結果不一緻的問題解決

屬性資料 owner

ArcSDE關聯查詢時ArcMap與REST查詢結果不一緻的問題解決

我們可以看出空間資料的place.pid與屬性資料的owner.pid是關聯字段,那麼我們可以看到place有三個要素與owner的5條記錄可以關聯上。

----------------------------------------------------------------------------------

版權所有,文章允許轉載,但必須以連結方式注明源位址,否則追究法律責任!

Blog:               http://blog.csdn.net/linghe301

----------------------------------------------------------------------------------

那麼如果使用者使用ArcGIS for Desktop的Join之後,在ArcMap中就可以看到空間資料的三條記錄

ArcSDE關聯查詢時ArcMap與REST查詢結果不一緻的問題解決

但是我在REST接口Query中WHERE輸入“1=1”查出來的結果是5條記錄

ArcSDE關聯查詢時ArcMap與REST查詢結果不一緻的問題解決

從上圖分析可以看出,REST的Query查詢結果為5條記錄,但是細心的讀者可以看出,其中各有兩條記錄是重複記錄,這個聯系到我們看到的Owner表記錄的資訊,其實這就是一個Oracle的連接配接關系,如果以屬性資料為基準,那麼關聯起來的資料應該就是5條記錄。

----------------------------------------------------------------------------------

版權所有,文章允許轉載,但必須以連結方式注明源位址,否則追究法律責任!

Blog:               http://blog.csdn.net/linghe301

----------------------------------------------------------------------------------

我也使用了QueryLayer或者ArcSDE視圖分别進行了測試,結果都是一樣的,而且,通過Oracle資料庫檢視建立的視圖也可以看出來,資料庫中的确存儲了5條記錄。

那麼問題又出來了,為什麼ArcGIS for Desktop記錄的是3條資料呢?通過跟蹤ArcGIS操作的Oracle背景trace檔案可以看出:

1:通過空間關系查詢語句,以我建立的SDE視圖MyVIEW為例

ArcSDE關聯查詢時ArcMap與REST查詢結果不一緻的問題解決

ArcMap首先做了一個空間查詢,使用SDE.ST_EnvIntersects過濾,如果輸入相關值,可以得到5條記錄。

----------------------------------------------------------------------------------

版權所有,文章允許轉載,但必須以連結方式注明源位址,否則追究法律責任!

Blog:               http://blog.csdn.net/linghe301

----------------------------------------------------------------------------------

2:通過空間索引進行過濾

ArcSDE關聯查詢時ArcMap與REST查詢結果不一緻的問題解決

那麼ArcMap又做了一層過濾,通過空間索引,而且有一個非常關鍵的SQL關鍵字(“distinct”),是以通過這個,ArcMap結果已經從5條變成了3條。

----------------------------------------------------------------------------------

版權所有,文章允許轉載,但必須以連結方式注明源位址,否則追究法律責任!

Blog:               http://blog.csdn.net/linghe301

----------------------------------------------------------------------------------

那麼問題的原因基本上明白了,ArcMap内部做了一個過濾重複的操作,但是REST的Query頁面中,由于基本沒有對SELECT選項的操作(Distinct一般都輸入在Select關鍵字後),是以無法獲得正确的結果。

那麼使用者可以使用QueryLayer的方式在進行操作。

ArcSDE關聯查詢時ArcMap與REST查詢結果不一緻的問題解決

----------------------------------------------------------------------------------

版權所有,文章允許轉載,但必須以連結方式注明源位址,否則追究法律責任!

Blog:               http://blog.csdn.net/linghe301

----------------------------------------------------------------------------------

通過QueryLayer,我們可以添加Distinct關鍵字,過濾重複記錄,那麼我們就可以在REST的Query裡面獲得正确的結果了。

ArcSDE關聯查詢時ArcMap與REST查詢結果不一緻的問題解決

----------------------------------------------------------------------------------

版權所有,文章允許轉載,但必須以連結方式注明源位址,否則追究法律責任!

Blog:               http://blog.csdn.net/linghe301

----------------------------------------------------------------------------------

其他參考:

ArcGIS表關聯方式介紹(一)-Join、Relate

http://blog.csdn.net/linghe301/article/details/6649689

ArcGIS表關聯方式介紹(二)-ArcSDE視圖、QueryLayer、RelationshipClass

http://blog.csdn.net/linghe301/article/details/6649717

ArcSDE性能分析——跟蹤Oracle的Trace檔案

http://blog.csdn.net/linghe301/article/details/8640864

----------------------------------------------------------------------------------

版權所有,文章允許轉載,但必須以連結方式注明源位址,否則追究法律責任!

Blog:               http://blog.csdn.net/linghe301

----------------------------------------------------------------------------------