⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 createfeatureclass.java.svn-base

📁 aresde 空间数据开发 例子
💻 SVN-BASE
字号:
import java.io.IOException;

import com.esri.arcgis.carto.AnnotationFeature;
import com.esri.arcgis.datasourcesGDB.SdeWorkspaceFactory;
import com.esri.arcgis.geodatabase.FeatureClassDescription;
import com.esri.arcgis.geodatabase.Field;
import com.esri.arcgis.geodatabase.Fields;
import com.esri.arcgis.geodatabase.GeometryDef;
import com.esri.arcgis.geodatabase.IFeatureClass;
import com.esri.arcgis.geodatabase.IFeatureDataset;
import com.esri.arcgis.geodatabase.IFeatureWorkspace;
import com.esri.arcgis.geodatabase.IFieldEdit;
import com.esri.arcgis.geodatabase.IFieldsEdit;
import com.esri.arcgis.geodatabase.IGeometryDefEdit;
import com.esri.arcgis.geometry.ISpatialReference;
import com.esri.arcgis.geometry.ISpatialReference3;
import com.esri.arcgis.geometry.ISpatialReferenceFactory3;
import com.esri.arcgis.geometry.SpatialReferenceEnvironment;
import com.esri.arcgis.geometry.UnknownCoordinateSystem;
import com.esri.arcgis.system.AoInitialize;
import com.esri.arcgis.system.EngineInitializer;
import com.esri.arcgis.system.PropertySet;
import com.esri.arcgis.system.UID;
import com.esri.arcgis.system.esriLicenseProductCode;


public class CreateFeatureClass{
	
	private static void create() throws Exception{

		com.esri.arcgis.system.PropertySet propSet = new PropertySet();
		
		//连接参数
		propSet.setProperty("SERVER", "192.168.1.220");
		propSet.setProperty("INSTANCE", "5151");
		//propSet.setProperty("DATABASE", "sde");
		propSet.setProperty("USER", "sde");
		propSet.setProperty("PASSWORD", "sde");
		propSet.setProperty("VERSION", "SDE.DEFAULT");
		
		SdeWorkspaceFactory swf=new SdeWorkspaceFactory();
		
		//连接SDE
		IFeatureWorkspace ifw=(IFeatureWorkspace)swf.open(propSet, 0);
		
		//得到指定的FeatureDataset
		IFeatureDataset ifd= ifw.openFeatureDataset("DatasetTest1214");
		
		//geometry列属性定义
		
		
		//assign the spatial reference
		/*ISpatialReference isr= new UnknownCoordinateSystem();
		isr.setDomain(0, 21474.83645, 0, 21474.83645);
		isr.setFalseOriginAndUnits(0, 0, 100000);*/
		ISpatialReferenceFactory3 irf3 = new SpatialReferenceEnvironment();
		ISpatialReference3 isr = (ISpatialReference3) irf3
		.createGeographicCoordinateSystem(com.esri.arcgis.geometry.esriSRGeoCSType.esriSRGeoCS_Beijing1954);
		
		//设为Line Feature
		IGeometryDefEdit igde=new GeometryDef(); 
		igde.setGeometryType(com.esri.arcgis.geometry.esriGeometryType.esriGeometryPolyline);
		igde.setSpatialReferenceByRef(isr);
		/*
		//栅格设置
		igde.setGridCount(1);
		igde.setGridSize(0, 10);
		igde.setAvgNumPoints(2);
		igde.setHasM(false);//M值存放管道,线路数据
		igde.setHasZ(false);//Z值存放3D数据
		*/		
		
		//设置列集合
		IFieldsEdit pFieldsEdit = new Fields();
		
		//设置列
	    IFieldEdit pFieldEdit = new Field();
	    IFieldEdit shp = new Field();
	    
	    //列名
	    pFieldEdit.setName("ObjectID");
	    //类型
	    pFieldEdit.setType(com.esri.arcgis.geodatabase.esriFieldType.esriFieldTypeOID);
	    
	    shp.setName("SHP");
	    shp.setType(com.esri.arcgis.geodatabase.esriFieldType.esriFieldTypeGeometry);
	    //Geometry类型的列需要定义Geometry的类型.点/线/面 等等
	    shp.setGeometryDefByRef(igde);
	    
	    //将列加入到列集合
	    pFieldsEdit.addField(pFieldEdit);
	    pFieldsEdit.addField(shp);
	    
	    FeatureClassDescription fcd=new FeatureClassDescription();
	    /**
	     * 设置FeatureClass的cLSID
	     * 
	     * value与
	     * createFeatureClass(String name,IFields fields,IUID cLSID,IUID eXTCLSID,
	     * int featureType,String shapeFieldName,String configKeyword)
	     * 的 featureType 参数对应关系
	     * 
	     * esriFTSimple  -- esriGeoDatabase.Feature
	     * esriFTSimpleJunction -- esriGeoDatabase.SimpleJunctionFeature
	     * esriFTComplexJunction  -- esriGeoDatabase.ComplexJunctionFeature
	     * esriFTSimpleEdge  -- esriGeoDatabase.SimpleEdgeFeature
	     * esriFTComplexEdge -- esriGeoDatabase.ComplexEdgeFeature
	     * esriFTAnnotation  -- 无,注记层不用setValue
	     * 
	     * */
	    UID id=new UID();
	    id.setValue("esriGeoDatabase.Feature");
	    //id.setValue("");
	    
	    //下面循环取出Geometry列的列名,如果已知列名可以不做这个循环
	    String fieldName="";
	    for(int i=0;i<pFieldsEdit.getFieldCount();i++){
	    	if(pFieldsEdit.getField(i).getType()==com.esri.arcgis.geodatabase.esriFieldType.esriFieldTypeGeometry){
	    		fieldName=pFieldsEdit.getField(i).getName();
	    	}
	    }

	    /**
	     * createFeatureClass(..)方法中的shapeFieldName参数
	     * 必须与IFieldsEdit中设置的Geometry类型列的列名相同
	     * */
		IFeatureClass ifc=ifd.createFeatureClass("testDatasetTest1214", pFieldsEdit, fcd.getInstanceCLSID(), fcd.getClassExtensionCLSID(),
				com.esri.arcgis.geodatabase.esriFeatureType.esriFTSimple, fieldName, "");
/*		IFeatureClass ifc=ifd.createFeatureClass("testAnnotation", pFieldsEdit, id, null,
				com.esri.arcgis.geodatabase.esriFeatureType.esriFTSimple, fieldName, "");
*/
		
	}
	
	
	public static void main(String args[]) throws IOException{
		EngineInitializer.initializeEngine();
		final AoInitialize aoInit =new AoInitialize();
		try{
			aoInit.initialize(esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB);
			
			create();
			
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			aoInit.shutdown();
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -