`

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

分享到:
评论

相关推荐

    栅格数据矢量化

    2. **ArcScan矢量化** 是ArcGIS自带的一个自动化工具,适合大规模的栅格数据转换。ArcScan使用一系列算法自动识别和转换栅格边界到矢量线条。 - **矢量化内容**:ArcScan能够识别栅格中的边界,例如通过设置阈值来...

    ArcGIS教程:栅格河网矢量化

    ArcGIS中的栅格河网矢量化是将栅格河流网络转换为矢量形式的过程,该过程可以使用StreamToFeature工具来实现。通过选择阈值和使用条件函数或设为空函数工具,可以定义河流网络的范围和方向。生成的河流网络可以用在...

    ArcGIS中配准栅格图像并矢量化

    - 在重新生成采样数据和矢量化栅格图像时,必须使用合适的坐标系和投影方式,这样能够保证数据在转换成矢量格式后的准确性和可利用性。 通过上述步骤,ArcGIS能够帮助用户高效地完成栅格图像的配准和矢量化工作。...

    在ArcGIS中配准(TIF、JPEG)栅格图像并矢量化

    在这篇文章中,我们将探讨如何在 ArcGIS 中对栅格图像进行配准和矢量化,并将其转换为矢量数据。 栅格图像配准 在 ArcGIS 中,栅格图像配准是将图像与地理坐标系相关联的过程。为了实现栅格图像的配准,我们需要先...

    ArcMap栅格数据矢量化及使用ArcScan矢量化

    本文将详细探讨“ArcMap栅格数据矢量化及使用ArcScan矢量化”的过程,帮助你掌握这一关键技术。 首先,我们要了解什么是矢量数据和栅格数据。矢量数据是基于几何对象(点、线、面)表示地理信息,具有精确的几何...

    arcgis 矢量栅格转换

    - 在ArcGIS中,使用"Rasterize (vector to raster)"工具进行矢量转栅格操作。这个过程涉及选择矢量图层、定义输出栅格大小、栅格化方法(如使用属性字段或ID字段)、以及设置NoData值等参数。 - 应用场景:例如,...

    ArcMap栅格数据矢量化

    ArcMap提供了多种工具和方法来支持栅格数据到矢量数据的转换,包括手动矢量化和自动矢量化。自动矢量化可以利用ArcMap强大的工具集来识别栅格图像中的边缘或特征,并将这些特征自动转换为矢量数据。手动矢量化则需要...

    ArcMap栅格数据矢量化1

    【ArcMap 栅格数据矢量化】是GIS领域的一个重要环节,主要涉及将栅格数据转换为矢量数据的过程,以便进行更精确的地理分析和编辑。ArcMap是Esri公司的ArcGIS软件套件中的核心组件,用于创建、编辑和展示地理信息。...

    基于ENVI和ArcGIS对空间栅格数据矢量化与拓扑分析

    本文介绍了一种基于ENVI和ArcGIS的空间栅格数据矢量化与拓扑分析方法,该方法可以自动批量将图像中空间栅格数据进行矢量化提取,并依此展开拓扑分析。该方法可以应用于水文泥沙规划方向研究等领域,提高科研与设计的...

    ArcGIS教程:栅格河网矢量化的工作原理

    栅格河网矢量化是ArcGIS软件中的一个重要工具,它利用特定的算法将代表河流走向的栅格数据转换为矢量线要素。这个过程涉及到对栅格数据的分析,识别连续的方向变化,并根据这些变化构建出连续的线性特征。栅格河网...

    使用 ArcGIS 模型构建器做的分割栅格工具

    总的来说,这个“使用ArcGIS模型构建器做的分割栅格工具”是一个高效的数据管理解决方案,尤其适用于处理大规模的栅格数据集,例如进行影像分幅、区域分析或按照特定边界裁剪数据。通过此工具,用户可以自动化原本...

    栅格数据矢量化工具R2V

    栅格数据矢量化工具R2V是一款专门针对地理信息系统(GIS)中的栅格数据转换为矢量数据的软件。在GIS领域,数据通常分为两种基本类型:栅格数据和矢量数据。栅格数据以网格形式存储地理信息,每个单元格代表一个地理...

    arcgis 配准栅格图形

    ArcGIS 配准栅格图形是因为栅格图像在 ArcGIS 中无法直接使用,需要进行配准和矢量化以便在 ArcGIS 中使用。 3. ArcGIS 配准栅格图形的步骤: (1)新建一个新工程,添加 TIF 图像,单击 Yes 确定,加载图像后提示...

    arcgis进行栅格图象数字化.doc

    ArcGIS栅格图象数字化 ...arcgis栅格图象数字化是一项复杂的工作,需要进行栅格图象的校准和矢量化,并且需要与其他软件进行数据转换。只有通过详细的步骤和正确的操作,才能确保栅格图象数字化的成功。

    ArcGIS教程:关于自动矢量化

    3. **技巧**:掌握这些工具的正确使用方法,可以大大提高栅格数据的质量,为后续的矢量化工作奠定良好的基础。 #### 三、定义范围 1. **意义**:在进行大规模的数据转换时,明确矢量化范围可以有效减少处理时间,...

    ArcGIS栅格地形图矢量化

    接着,使用ArcScan工具条进行实际的矢量化工作。操作者需清除不需要的像元,并利用“生成要素”功能将选定的像元转化为矢量线条。 矢量化完成后,需要对矢量数据进行完善。这一阶段可能包括删除多余的线条、合并...

    arcgis矢量化操作教程及数据资料

    《ArcGIS矢量化操作教程及数据资料》是针对地理信息系统(GIS)初学者及专业人员的一份宝贵资源,尤其在使用ArcGIS软件进行矢量化处理时。这份教程旨在帮助用户理解并掌握如何将栅格数据转换为矢量数据,以及进行...

    在ArcGIS中栅格数据矢量化.doc

    在 ArcGIS 中栅格数据矢量化 在 ArcGIS 中栅格数据矢量化是指将栅格图像转换为矢量数据的过程。在这个过程中,我们可以使用 ArcGIS 软件来实现栅格图像的矢量化。 一、图像加载 在 ArcGIS 中,首先需要加载要矢量...

    arcobjects sdk for java,arcgis二次开发官方示例代码和文档

    为了帮助开发者利用Java进行ArcGIS的二次开发,Esri公司提供了ArcObjects SDK for Java,它包含了丰富的API和示例代码,以便于开发者构建定制化的GIS应用。 一、ArcObjects SDK for Java ArcObjects SDK for Java...

Global site tag (gtag.js) - Google Analytics