日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

AE开发使用内存图层

發布時間:2025/3/20 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AE开发使用内存图层 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

AE開發中,有時需要從磁盤中讀取一些文件信息如坐標點轉為圖層并進行分析,此過程并不需要坐標點入庫之類的操作,就可以創建一個內存圖層解決問題。創建內存圖層需要用到InMemoryWorkspaceFactoryClass。這樣無需對磁盤進行操作,效率很高,且隨程序的關閉而釋放,無需考慮臨時文件。

?

//建立內存圖層------------------/** 創建一個工具,名為CreatMemLayer* 這個工具的作用為,創建一個名為layername參數傳進來的內存圖層* 這個內存圖層的格式定義在本類的CreateVehicleFeature函數,可以自定義修改* 作者:陳芋宇 * 20100716*//// <summary>/// 創建空的內存工作空間,并且返回工作空間 -- 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()); //打開剛建立的內存空間try{//為esriFieldTypeGeometry類型的字段創建幾何定義,包括類型和空間參照 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);//這里一定要加域值的設置! pGeoDefEdit.SpatialReference_2 = pspatialRef;}//設置字段集 IFields pFields = new FieldsClass();IFieldsEdit pFieldsEdit = (IFieldsEdit)pFields;//設置字段 IField pField = new FieldClass();IFieldEdit pFieldEdit = (IFieldEdit)pField;//創建類型為幾何類型的字段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;//數值長度 pFieldEdit.Scale_2 = 6;//小數點后保留位數 pFieldsEdit.AddField(pField);pField = new FieldClass();pFieldEdit = (IFieldEdit)pField;pFieldEdit.Name_2 = "Y";pFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;pFieldEdit.Precision_2 = 10;//數值長度 pFieldEdit.Scale_2 = 6;//小數點后保留位數 pFieldsEdit.AddField(pField);pField = new FieldClass();pFieldEdit = (IFieldEdit)pField;pFieldEdit.Name_2 = "Z";pFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;pFieldsEdit.AddField(pField);}//創建shapefile IFeatureClass pfclass = pfeatureworkspace.CreateFeatureClass(slayername, pFields, null, null, esriFeatureType.esriFTSimple, strShapeFieldName, "");//這一句老是出問題!最后的解決方案是:原來之前設定的坐標系統沒有添加域! IDataset pdataset = (IDataset)pfclass; // 創建geodatabase屬性表 pdataset.BrowseName = slayername;}catch (System.Exception ex){throw (ex);}return pfeatureworkspace;}

?

上面函數的使用:

IFeatureWorkspace feawks = CreateEmptyLayerInmemeory("TMP", pspatialRef, 0);if (feawks == null) return;IFeatureClass feacls = feawks.OpenFeatureClass("TMP");

?

內存圖層保存為磁盤圖層:

這個操作意義不大,如果需要保存,一開始就可以創建一個硬盤中的圖層。

1.可以采用最笨的方法。

FEATURECLASS中取出FEATURE?一個個寫入新的FEATURECLASS

2.調用IGeoprocessor.Execute("select_management",?,?,),利用Geoprocessing中的Select命令導出。?

3.使用IFeatureDataConverter?

總結

以上是生活随笔為你收集整理的AE开发使用内存图层的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。