ArcIMS中如何在同一圖層中做緩沖選擇:
在javaConnector中如何在同個圖層中緩沖并選擇要素。在同一圖層中選擇出緩沖分析結果需要額外的步驟才能完成,但是當選擇圖層和做緩沖的不是同一層時,則不需要額外的步驟。一個典型的查詢例子是這樣的:在San Jose市周圍8公里內有多少城市?
過程描述
步驟:
額外的步驟如下,需要創建一個新的層來用作buffer層。在filter選擇中,如果buffer層和選擇目標層是同一層時,將導致錯誤結果產生。
1.創建一個連接并初始化一個Map對象。在Map.initMap()中LaodRecordset屬性必須設置為true。
map.initMap(connection,0,false,false,true,false);
2.創建buffer層的引用。
FeatureLayer fLayer = (FeatureLayer)map.getLayers().item(5); //buffer layer
3.創建一個buffer層的復制層來作為選擇的目標層。該新的復制層和原來的圖層具有相同的LayerID,MaxScale,MinScale, 和Recordset
FeatureLayer tLayer = new FeatureLayer(fLayer.getID(),fLayer.getMaxScale(),fLayer.getMinScale());
tLayer.setRecordset(fLayer.getRecordset()); //tLayer is the target layer
4.創建Filter類和Buffer對象,并設置他們的屬性應用到buffer層上。 字串9
Filter filter = new Filter();
filter.setWhereExpression("NAME='San Jose'");
Buffer buffer=new Buffer();
buffer.setBufferUnits(Buffer.MILES);
buffer.setBufferDistance(8);
buffer.setPerformBuffer(true);
buffer.setBufferRegionSymbol(ps);
buffer.setBufferSelectionSymbol(ms);
buffer.setBufferTargetLayer(tLayer);
filter.setBufferObject(buffer);
fLayer.setFilterObject(filter);
5.查詢結果被保存在一個名稱為'bufferLayer'的層中。
FeatureLayer resultLayer=null;
Recordset recordset = null;
for (int i=0;i<map.getLayers().getCount();i++){
if (map.getLayers().item(i).getName().equalsIgnoreCase("bufferLayer")){
resultLayer = (FeatureLayer)map.getLayers().item(i);
break;
}
}