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;
}
}