创建图层需要首先创建普通表,然后通过SeLayer的一系列方法给普通表添加几何字段,再注册成Layer。但是,这个方法大多数情况不应该被使用,因为注册完的Layer并没有Geodatabase信息,因此不能直接通过ArcGIS其他产品访问。
下面基于上面创建的CREATE_TEST表创建了一个ArcSDE的图层:
SeConnection conn = getConn();
if (conn != null) {
try {
SeLayer layer = new SeLayer(conn);
layer.setTableName("CREATE_TEST");
layer.setSpatialColumnName("SHAPE");
layer.setShapeTypes(SeLayer.TYPE_POINT);
layer.setStorageTypes(SeLayer.SE_STORAGE_SPATIAL_TYPE);
layer.setGridSizes(SeLayer.SE_SPATIALINDEX_DBTUNE,
SeLayer.SE_SPATIALINDEX_DBTUNE,
SeLayer.SE_SPATIALINDEX_DBTUNE);
layer.create(10, 100);
} catch (SeException e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SeException e) {
e.printStackTrace();
}
}
}
一般大多数的应用都是访问已经存在的ArcSDE图层,连接并获取图层对象的操作非常简单:
SeLayer layer = new SeLayer(conn,"SDE_CITIES","SHAPE");
获取图层后就可以获得一些图层相关的信息:
SeConnection conn = getConn();
if (conn != null) {
try {
SeLayer layer = new SeLayer(conn,"SDO_CITIES","SHAPE");
SeCoordinateReference coordRef = layer.getCoordRef();//获得图层空间参考
SeExtent fullExtent = layer.getExtent();//获取图层范围
SeSqlConstruct sqlC = new SeSqlConstruct();
sqlC.setWhere("OBJECTID<30");
SeExtent extent = layer.calculateExtent(false, sqlC);//获取图层(部分)范围
boolean hasSpatialIndex = layer.hasSpatialIndex();//是否存在空间索引
boolean isStorageSdo = layer.isStorageSpatial();//是否SDO_Geometry存储
} catch (SeException e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SeException e) {
e.printStackTrace();
}
}
}
获得图层后还可以进行一些更改操作,比如想改变空间索引的格网大小,可以通过以下的代码实现:
SeConnection conn = getConn();
if (conn != null) {
try {
SeLayer layer = new SeLayer(conn,"SDE_CITIES","SHAPE");
layer.setGridSizes(5,0,0);
layer.alter();
layer.getInfo();//刷新图层信息
SeLayerSpatialIndexStats spatialIndexStats = layer.getSpatialIndexStats();
SeLayerGridStats[] gridStats = spatialIndexStats.getGrids();
for(int i=0,numGrids=gridStats.length; i
SeLayerGridStats gridStat = gridStats[i];
int maxFpg = gridStat.getMaxFPG();
System.out.println(maxFpg);
}
} catch (SeException e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SeException e) {
e.printStackTrace();
}
}
}
如上,更改图层后可以查看下更新后图层的网格统计信息。