镶嵌数据集结合了之前arcgis管理影像的栅格目录和栅格数据集,为解决海量影像管理提供了很好的方案!
为什么要使用镶嵌数据集?
- 可伸缩性海量影像管理
- 重叠影像管理
- 管理离散数据集大量的空值区域
- 多种传感器数据支持
- 流畅的影像更新
- 所有比例尺下无缝显示
- 保留有价值的元数据信息
- 动态处理减少处理时间
- 减少冗余存储
- 减少重采样,提升影像质量
开发代码使用java调用ArcEngine环境。
首先初始化AE运行环境
/**
* 初始化ArcgisEngine
*/
public static void initializeAE() {
EngineInitializer.initializeVisualBeans();
EngineInitializer.initializeEngine();
try {
com.esri.arcgis.system.AoInitialize ao = new com.esri.arcgis.system.AoInitialize();
ao.initialize(com.esri.arcgis.system.esriLicenseProductCode.esriLicenseProductCodeArcInfo);
if (ao.isProductCodeAvailable(com.esri.arcgis.system.esriLicenseProductCode.esriLicenseProductCodeArcInfo) == com.esri.arcgis.system.esriLicenseStatus.esriLicenseAvailable)
ao.initialize(com.esri.arcgis.system.esriLicenseProductCode.esriLicenseProductCodeArcInfo);
else
System.out.println("license failed");
ao.checkOutExtension(com.esri.arcgis.system.esriLicenseExtensionCode.esriLicenseExtensionCode3DAnalyst);
ao.checkOutExtension(com.esri.arcgis.system.esriLicenseExtensionCode.esriLicenseExtensionCodeSpatialAnalyst);
ao.checkOutExtension(com.esri.arcgis.system.esriLicenseExtensionCode.esriLicenseExtensionCodeSpatialAnalyst);
ao.initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);
ao.initialize(esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB);
ao.initialize(esriLicenseProductCode.esriLicenseProductCodeArcEditor);
ao.checkOutExtension(esriLicenseExtensionCode.esriLicenseExtensionCodeSpatialAnalyst);
System.out.println("arcgis初始化成功>>>...");
} catch (Exception e) {
e.printStackTrace();
}
}
添加栅格影像到镶嵌数据集,本次测试的整个文件目录,存入镶嵌数据集
/**
* 添加镶嵌数据集栅格数据
* @param mosaicDataset 镶嵌数据集
* @param path 文件存储路径
*/
public void addMosaicDataSet(String mosaicDataset, String path){
GeoProcessor geoprocessor;
try {
geoprocessor = new GeoProcessor();
geoprocessor.setOverwriteOutput(true);
AddRastersToMosaicDataset addMosaicDataSet = new AddRastersToMosaicDataset();
addMosaicDataSet.setInMosaicDataset(mosaicDataset);//1
addMosaicDataSet.setRasterType("Raster Dataset");//2
addMosaicDataSet.setInputPath(path);//待入库的文件目录
addMosaicDataSet.setFilter("*.tif");//匹配入镶嵌数据集中的文件类型
addMosaicDataSet.setUpdateOverviews("true");
/** ALLOW_DUPLICATES 全部添加
* EXCLUDE_DUPLICATES 只添加更新的
* OVERWRITE_DUPLICATES 重写以前添加的
* */
addMosaicDataSet.setDuplicateItemsAction("EXCLUDE_DUPLICATES");
GPTool pGPProcess = addMosaicDataSet;
geoprocessor.setOverwriteOutput(true);
//执行
geoprocessor.execute(pGPProcess, null);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
移除镶嵌数据中个别数据
/**
* 移除镶嵌数据集中的数据
* @param mosaicDataset 镶嵌数据集
* @param sql 删除命令 例如:name='004'
*
*/
public void remoMosaicDataSet (String mosaicDataset, String sql) {
GeoProcessor geoprocessor = null;
try {
geoprocessor = new GeoProcessor();
geoprocessor.setOverwriteOutput(true);
RemoveRastersFromMosaicDataset deleteFeatures = new RemoveRastersFromMosaicDataset();
deleteFeatures.setInMosaicDataset(mosaicDataset);
deleteFeatures.setWhereClause(sql);
GPTool pGPProcess = deleteFeatures;
geoprocessor.setOverwriteOutput(true);
//执行
geoprocessor.execute(pGPProcess, null);
} catch (AutomationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
构建金字塔
/**
* 创建金字塔
* @param mosaicDataset 镶嵌数据集路径
* @param whereSql 查询条件,wheresql可以为空
*/
public void buildOverviewsMosaicDataSet (String mosaicDataset, String whereSql) {
GeoProcessor geoprocessor = null;
try {
geoprocessor = new GeoProcessor();//初始化gp工具
geoprocessor.setOverwriteOutput(true);
BuildOverviews buildPryramids = new BuildOverviews();
buildPryramids.setInMosaicDataset(mosaicDataset);
if (whereSql != null && whereSql.equals("") == false) {
buildPryramids.setWhereClause(whereSql);
}
GPTool pGPProcess = buildPryramids;
geoprocessor.setOverwriteOutput(true);
//执行
geoprocessor.execute(pGPProcess, null);
Constant.printLnData("切割金字塔成功 :"+pGPProcess.getParameterValues()[0]);
} catch (AutomationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Constant.printLnData("切割金字塔失败 " + e.getMessage());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Constant.printLnData("切割金字塔失败 "+ e.getMessage());
}
}
创建轮廓
/**
* 创建轮廓
* @param mosaicDataset 镶嵌数据集
*/
public void buildFootprints (String mosaicDataset) {
GeoProcessor geoprocessor = null;
try {
geoprocessor = new GeoProcessor();
geoprocessor.setOverwriteOutput(true);
BuildFootprints buildPryramids = new BuildFootprints();
buildPryramids.setInMosaicDataset(mosaicDataset);
GPTool pGPProcess = buildPryramids;
geoprocessor.setOverwriteOutput(true);
//执行
geoprocessor.execute(pGPProcess, null);
Constant.printLnData("构建轮廓成功 :"+pGPProcess.getParameterValues()[0]);
} catch (AutomationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Constant.printLnData("构建轮廓失败" + e.getMessage());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Constant.printLnData("构建轮廓失败"+ e.getMessage());
}
}
上述就是基本操作代码。