Arcgis镶嵌数据集java代码操作

10 篇文章 0 订阅

镶嵌数据集结合了之前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());
		}
	}

上述就是基本操作代码。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值