当前位置: 代码迷 >> CGI >> Arcgis object for java 访问栅格数据,施用GP工具,进行栅格矢量化-栅格矢量化面
  详细解决方案

Arcgis object for java 访问栅格数据,施用GP工具,进行栅格矢量化-栅格矢量化面

热度:477   发布时间:2012-08-24 10:00:20.0
Arcgis object for java 访问栅格数据,使用GP工具,进行栅格矢量化---栅格矢量化面。

??? 直接贴代码了,不多解释了。

??

1、栅格数据的存储类型

????? 栅格数据一般可以存储为ESRI GRID(由一系列文件组成),TIFF格式(包括一个TIF文件和一个AUX文件),还有JPG,BMP文件,IMAGINE Image格式 在AE中一般调用ISaveAs接口来保存栅格数据。

?

2、栅格数据集和栅格编目的区别

????? 一个栅格数据集由一个或者多个波段(RasterBand)的数据组成,一个波段就是一个数据矩阵。对于格网数据(DEM数据)和单波段的影像数据,表现为仅仅只有一个波段数据的栅格数据集,而对于多光谱影像数据则表现为具有多个波段的栅格数据集

?????? 栅格编目(RasterCatalog)用于显示某个研究区域内各种相邻的栅格数据,这些相邻的栅格数据没有经过拼接处理? 合成一副大的影像图

?

3、IRasterWorkspaceEx与IRasterWorkspace ,IRsterWorkspace2的区别

?

1).IRasteWorkspaceEx接口主要是用来读取GeoDatabase中的栅格数据集和栅格编目

2) . IRasterWorkspace ,IRsterWorkspace2主要是用来读取以文件格式存储在本地的栅格数据

?

4、加载栅格数据(以存储在本地的栅格数据文件为例)

?

import com.esri.arcgis.carto.IRasterLayer;
import com.esri.arcgis.carto.RasterLayer;
import com.esri.arcgis.datasourcesraster.IRasterBand;
import com.esri.arcgis.datasourcesraster.IRasterBandCollection;
import com.esri.arcgis.datasourcesraster.IRasterBandCollectionProxy;
import com.esri.arcgis.datasourcesraster.RasterWorkspaceFactory;
import com.esri.arcgis.geodatabase.IDataset;
import com.esri.arcgis.geodatabase.IDatasetProxy;
import com.esri.arcgis.geodatabase.IRasterDataset;
import com.esri.arcgis.geodatabase.IRasterWorkspace2;
import com.esri.arcgis.geodatabase.IRasterWorkspace2Proxy;
import com.esri.arcgis.geodatabase.IWorkspaceFactory;
import com.esri.arcgis.geoprocessing.GeoProcessor;
import com.esri.arcgis.geoprocessing.tools.conversiontools.RasterToPolygon;
import com.esri.arcgis.system.AoInitialize;
import com.esri.arcgis.system.EngineInitializer;
import com.esri.arcgis.system.IPropertySet;
import com.esri.arcgis.system.esriLicenseProductCode;
import com.esri.arcgis.system.esriLicenseStatus;

public class RasterMain {

	public RasterMain() {

	}

	public static void main(String[] args) {
		System.out
				.println("Starting RasterMain - An ArcObjects SDK Developer Sample");

		try {
			// Initialize engine console application
			EngineInitializer.initializeEngine();

			// Initialize ArcGIS license
			AoInitialize aoInit = new AoInitialize();
			initializeArcGISLicenses(aoInit);

			// Get DEVKITHOME Home

			System.out.println("Setup--------");
			testRasterMethods();
			System.out.println("Done.-----------");

			// Ensure any ESRI libraries are unloaded in the correct order
			aoInit.shutdown();
		} catch (Exception e) {
			System.out.println("Error: " + e.getMessage());
			System.out.println("Sample failed.  Exiting...");
			e.printStackTrace();
			System.exit(-1);
		}
	}

	private static void testRasterMethods() throws Exception {
		String rastFileDocPath = "D:\\temp\\test\\bmp";
		String rastFilePath = "DST_DBLV_FY3A_MERSI_1000M_DXX_P001_20110407054000.bmp";
		String outPolygonFeaturesPath = "D:\\temp\\test\\shp\\qincytewt999900t.shp";
		
		IRasterWorkspace2 rasterWs = openRasterWorkspace(rastFileDocPath);
		IRasterDataset rastDataset = rasterWs.openRasterDataset(rastFilePath);
		IRasterDataset rastDatasetItem1 = getRasterDatasetItem(rastDataset, 1);
		rasterToPolygon(rastDatasetItem1, outPolygonFeaturesPath);
	
	}

	private static IRasterWorkspace2 openRasterWorkspace(String rastFileDocPath)
			throws Exception {
		IWorkspaceFactory workspaceFact = new RasterWorkspaceFactory();
		
		IRasterWorkspace2 rw2 = new IRasterWorkspace2Proxy(
				workspaceFact.openFromFile(rastFileDocPath, 0));
		return rw2;
	}

	private static void rasterToPolygon(IRasterDataset rasterDataset,
			String outPolygonFeaturesPath) {
		try {
			GeoProcessor geoprocessor = new GeoProcessor();
			RasterToPolygon rasterToPolygon = new RasterToPolygon();

			String paramObject = "Value";
			String simplify = "false";

			rasterToPolygon.setOutPolygonFeatures(outPolygonFeaturesPath);
			rasterToPolygon.setRasterField(paramObject);
			IRasterLayer rasterLayer = new RasterLayer();
			rasterLayer.createFromDataset(rasterDataset);
			rasterToPolygon.setInRaster(rasterLayer);
			rasterToPolygon.setSimplify(simplify);

			//System.out.println(rasterToPolygon.getSimplify());
			geoprocessor.execute(rasterToPolygon, null);
		} catch (Exception e) {
			//System.out.println("rasterToPolygon=" + e);
		}

	}

	@SuppressWarnings("unused")
	private static void BMP_EXIFtag(IRasterDataset exifDataset) {
		try {
			IDataset dataset = new IDatasetProxy(exifDataset);

			IPropertySet propertySet = dataset.getPropertySet();
			Object[] tag_names = new Object[1];
			Object[] tag_values = new Object[1];
			propertySet.getAllProperties(tag_names, tag_values);
			String[] stringNames = (String[]) tag_names[0];
			Object[] stringValues = (Object[]) tag_values[0];
			for (int i = 0; i <= stringNames.length - 1; i++) {
				System.out.print(stringNames[i] + ":");
				System.out.println(stringValues[i]);
			}
		} catch (Exception e) {
			System.out.println("BMP_EXIFtag" + e);
		}

	}

	@SuppressWarnings("deprecation")
	private static IRasterDataset getRasterDatasetItem(
			IRasterDataset exifDataset, int num) throws Exception {
		IRasterBandCollection rasterBands = new IRasterBandCollectionProxy(
				exifDataset);
		
		IRasterBand rasterBand = rasterBands.item(num);
		System.out.println("rasterBand:" + rasterBand.getBandname());
		IRasterDataset di = rasterBand.getRasterDataset();
		return di;

	}

	/**
	 * Checks to see if an ArcGIS Engine Runtime license or an ArcView License
	 * is available. If so, then the appropriate ArcGIS License is initialized.
	 * 
	 * @param aoInit
	 *            The AoInitialize object instantiated in the main method.
	 */
	private static void initializeArcGISLicenses(AoInitialize aoInit) {
		try {
			if (aoInit
					.isProductCodeAvailable(esriLicenseProductCode.esriLicenseProductCodeEngine) == esriLicenseStatus.esriLicenseAvailable)
				aoInit.initialize(esriLicenseProductCode.esriLicenseProductCodeEngine);
			else if (aoInit
					.isProductCodeAvailable(esriLicenseProductCode.esriLicenseProductCodeArcView) == esriLicenseStatus.esriLicenseAvailable)
				aoInit.initialize(esriLicenseProductCode.esriLicenseProductCodeArcView);
			else {
				System.err
						.println("Could not initialize an Engine or ArcView license. Exiting application.");
				System.exit(-1);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

??? 5 详细情况可以使用esri 提供的java 帮助搜索 ,可以查询到在catalog? 或者geobase 的例子。

????6 本代码有报异常的错误,但是不影响使用,依然能栅格矢量化,不知道为什么,请高手帮忙解决这个问题。

  相关解决方案