I. 要素編輯
從ArcGIS 10開始,地圖服務有了一個新的Capability——“Feature Access”,所有的要素編輯都是通過這個介面實現的。同時,在各種用戶端中出現了一種新的圖層名為“Feature Layer”,它可以對應到一個地圖服務的某個要素圖層,因此,要進行要素編輯,讓我們先熟悉一下ArcGIS Android API中的Feature Layer。
Feature Layer
ArcGIS Android API提供了一個選擇要素的例子(SelectFeatures),這個例子主要示範了Feature Layer的用法,運行這個例子的效果大概是這個樣子:
圖 32 使用Feature Layer選擇要素
當使用者畫定了一個範圍,程式就會選中Feature Layer在這個範圍中合格要素,並把這些要素用粉紅色高亮(其它地方顯示其它顏色的要素是因為下面還疊加的一個動態地圖服務,它們並不是在Feature Layer上顯示的)。
從這個例子的原始碼中,我們可以很容易找到最關鍵的幾行代碼,在這幾行代碼中,程式定義了一個Query對象用以設定過濾條件,然後簡單地通過調用ArcGISFeatureLayer對象的selectFeature方法就實現了對要素的選擇。
fLayer.clearSelection();
Query q = new Query();
q.setWhere("PROD_GAS='Yes'");
q.setReturnGeometry(true);
q.setInSpatialReference(map.getSpatialReference());
q.setGeometry(g.getGeometry());
q.setSpatialRelationship(SpatialRelationship.INTERSECTS);
fLayer.selectFeatures(q, SELECTION_METHOD.NEW, callback);
而在本質上,這裡調用的selectFeature方法背後訪問的是ArcGISFeatureLayer所對應的要素圖層,通過Query對象限制的條件進行查詢操作,再把查詢的結果(FeatureSet)返回到用戶端,並添加到ArcGISFeatureLayer上去。
至於ArcGISFeatureLayer的本質,其實它就是一個GraphicsLayer,不過它和一個伺服器端的要素圖層遙相呼應了而已:
Options o = new Options();
o.mode = MODE.ONDEMAND;
o.outFields = new String[] {"FIELD_KID", "APPROXACRE", "FIELD_NAME"};
fLayer = new ArcGISFeatureLayer(this,
"http://sampleserver3.arcgisonline.com/ArcGIS/rest
/services/Petroleum/KSPetro/MapServer/1",o);
注意一下,這裡ArcGISFeatureLayer對應的URL地址是MapServer中的一個圖層,因此在這裡這個Feature Layer雖然可以選擇,但是做不了編輯。要想可以進行編輯,ArcGISFeatureLayer的URL地址就必須是一個FeatureServer中的圖層。