ArcIMS中如何在同一圖層中做緩沖選擇:
在javaConnector中如何在同個(gè)圖層中緩沖并選擇要素。在同一圖層中選擇出緩沖分析結(jié)果需要額外的步驟才能完成,但是當(dāng)選擇圖層和做緩沖的不是同一層時(shí),則不需要額外的步驟。一個(gè)典型的查詢例子是這樣的:在San Jose市周圍8公里內(nèi)有多少城市?
過程描述
步驟:
額外的步驟如下,需要?jiǎng)?chuàng)建一個(gè)新的層來用作buffer層。在filter選擇中,如果buffer層和選擇目標(biāo)層是同一層時(shí),將導(dǎo)致錯(cuò)誤結(jié)果產(chǎn)生。
1.創(chuàng)建一個(gè)連接并初始化一個(gè)Map對(duì)象。在Map.initMap()中LaodRecordset屬性必須設(shè)置為true。
map.initMap(connection,0,false,false,true,false);
2.創(chuàng)建buffer層的引用。
FeatureLayer fLayer = (FeatureLayer)map.getLayers().item(5); //buffer layer
3.創(chuàng)建一個(gè)buffer層的復(fù)制層來作為選擇的目標(biāo)層。該新的復(fù)制層和原來的圖層具有相同的LayerID,MaxScale,MinScale, 和Recordset
FeatureLayer tLayer = new FeatureLayer(fLayer.getID(),fLayer.getMaxScale(),fLayer.getMinScale());
tLayer.setRecordset(fLayer.getRecordset()); //tLayer is the target layer
4.創(chuàng)建Filter類和Buffer對(duì)象,并設(shè)置他們的屬性應(yīng)用到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.查詢結(jié)果被保存在一個(gè)名稱為'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;
}
}