AE开发使用内存图层
生活随笔
收集整理的這篇文章主要介紹了
AE开发使用内存图层
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
AE開發(fā)中,有時需要從磁盤中讀取一些文件信息如坐標點轉(zhuǎn)為圖層并進行分析,此過程并不需要坐標點入庫之類的操作,就可以創(chuàng)建一個內(nèi)存圖層解決問題。創(chuàng)建內(nèi)存圖層需要用到InMemoryWorkspaceFactoryClass。這樣無需對磁盤進行操作,效率很高,且隨程序的關(guān)閉而釋放,無需考慮臨時文件。
?
//建立內(nèi)存圖層------------------/** 創(chuàng)建一個工具,名為CreatMemLayer* 這個工具的作用為,創(chuàng)建一個名為layername參數(shù)傳進來的內(nèi)存圖層* 這個內(nèi)存圖層的格式定義在本類的CreateVehicleFeature函數(shù),可以自定義修改* 作者:陳芋宇 * 20100716*//// <summary>/// 創(chuàng)建空的內(nèi)存工作空間,并且返回工作空間 -- pfeatureworkspace/// </summary>private IFeatureWorkspace CreateEmptyLayerInmemeory(string slayername, ESRI.ArcGIS.Geometry.ISpatialReference pspatialreference, int itype){//打開工作空間const string strShapeFieldName = "SHAPE";IWorkspaceFactory pWSF = new InMemoryWorkspaceFactoryClass();ESRI.ArcGIS.Geodatabase.IWorkspaceName pworkspacename = pWSF.Create("", "MyWorkspace", null, 0);ESRI.ArcGIS.esriSystem.IName pname = (IName)pworkspacename;IFeatureWorkspace pfeatureworkspace = (IFeatureWorkspace)(pname.Open()); //打開剛建立的內(nèi)存空間try{//為esriFieldTypeGeometry類型的字段創(chuàng)建幾何定義,包括類型和空間參照 IGeometryDef pGeoDef = new GeometryDefClass(); //The geometry definition for the field if IsGeometry is TRUE. IGeometryDefEdit pGeoDefEdit = (IGeometryDefEdit)pGeoDef;if (itype == 0){pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint;}else{if (itype == 1){pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolyline;}else{pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon;}}if (pspatialreference != null){pspatialreference.SetDomain(-180, 180, -90, 90);pGeoDefEdit.SpatialReference_2 = pspatialreference;}else{ISpatialReferenceFactory3 pspatialRefFac = new SpatialReferenceEnvironmentClass();ISpatialReference pspatialRef = pspatialRefFac.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984);//定義的為WGS84的空間地理坐標系 pspatialRef.SetDomain(-180, 180, -90, 90);//這里一定要加域值的設(shè)置! pGeoDefEdit.SpatialReference_2 = pspatialRef;}//設(shè)置字段集 IFields pFields = new FieldsClass();IFieldsEdit pFieldsEdit = (IFieldsEdit)pFields;//設(shè)置字段 IField pField = new FieldClass();IFieldEdit pFieldEdit = (IFieldEdit)pField;//創(chuàng)建類型為幾何類型的字段0 pFieldEdit.Name_2 = strShapeFieldName;pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;//esriFieldTypeGeometry; pFieldEdit.GeometryDef_2 = pGeoDef;pFieldsEdit.AddField(pField);//添加其他的字段1:nodeid,2:x,3:y pField = new FieldClass();pFieldEdit = (IFieldEdit)pField;pFieldEdit.Name_2 = "ID";pFieldEdit.Type_2 = esriFieldType.esriFieldTypeInteger;pFieldsEdit.AddField(pField);if (itype == 0){pField = new FieldClass();pFieldEdit = (IFieldEdit)pField;pFieldEdit.Name_2 = "X";pFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;pFieldEdit.Precision_2 = 10;//數(shù)值長度 pFieldEdit.Scale_2 = 6;//小數(shù)點后保留位數(shù) pFieldsEdit.AddField(pField);pField = new FieldClass();pFieldEdit = (IFieldEdit)pField;pFieldEdit.Name_2 = "Y";pFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;pFieldEdit.Precision_2 = 10;//數(shù)值長度 pFieldEdit.Scale_2 = 6;//小數(shù)點后保留位數(shù) pFieldsEdit.AddField(pField);pField = new FieldClass();pFieldEdit = (IFieldEdit)pField;pFieldEdit.Name_2 = "Z";pFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;pFieldsEdit.AddField(pField);}//創(chuàng)建shapefile IFeatureClass pfclass = pfeatureworkspace.CreateFeatureClass(slayername, pFields, null, null, esriFeatureType.esriFTSimple, strShapeFieldName, "");//這一句老是出問題!最后的解決方案是:原來之前設(shè)定的坐標系統(tǒng)沒有添加域! IDataset pdataset = (IDataset)pfclass; // 創(chuàng)建geodatabase屬性表 pdataset.BrowseName = slayername;}catch (System.Exception ex){throw (ex);}return pfeatureworkspace;}?
上面函數(shù)的使用:
IFeatureWorkspace feawks = CreateEmptyLayerInmemeory("TMP", pspatialRef, 0);if (feawks == null) return;IFeatureClass feacls = feawks.OpenFeatureClass("TMP");?
內(nèi)存圖層保存為磁盤圖層:
這個操作意義不大,如果需要保存,一開始就可以創(chuàng)建一個硬盤中的圖層。
1.可以采用最笨的方法。
| 從FEATURECLASS中取出FEATURE?一個個寫入新的FEATURECLASS |
2.調(diào)用IGeoprocessor.Execute("select_management",?,?,),利用Geoprocessing中的Select命令導出。?
3.使用IFeatureDataConverter?
總結(jié)
以上是生活随笔為你收集整理的AE开发使用内存图层的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 053(二十)
- 下一篇: 基于虎书实现LALR(1)分析并生成GL