zoukankan      html  css  js  c++  java
  • SDE与shapefile之间的数据导入与导出

    一、SDE要素导出到shapefile中。

     1、创建一个新的shapefile文件。

     private bool CreateShapefile(string filepath, string name)
            {
                bool isSuccssed = false;
                try
                {
                    IFeatureWorkspace pFWS = null;
                    IWorkspaceFactory pWSF = new ShapefileWorkspaceFactoryClass();
                    pFWS = pWSF.OpenFromFile(filepath, 0) as IFeatureWorkspace;
    
                    IFields pFields;
                    IFieldsEdit pFieldsEdit;
                    pFields = new FieldsClass();
                    pFieldsEdit = pFields as IFieldsEdit;
                    IField pField;
                    IFieldEdit pFieldEdit;
                    pField = new FieldClass();
                    pFieldEdit = pField as IFieldEdit;
                    pFieldEdit.Name_2 = "Shape";
                    pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
                    IGeometryDef pGeomDef;
                    IGeometryDefEdit pGeomDefEdit;
                    pGeomDef = new GeometryDefClass();
                    pGeomDefEdit = pGeomDef as IGeometryDefEdit;
                    pGeomDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon;
                    pGeomDefEdit.SpatialReference_2 = new UnknownCoordinateSystemClass();
                    pFieldEdit.GeometryDef_2 = pGeomDef;
                    pFieldsEdit.AddField(pField);
                    IFeatureClass pFeatureClass;
                    pFeatureClass = pFWS.CreateFeatureClass(name, pFields, null, null, esriFeatureType.esriFTSimple, "Shape", "");
                    isSuccssed = true;
                }
                catch
                {
                    isSuccssed = false;
                }
                return isSuccssed;
            }

    2、从SDE中读取要素,得到Geometry图形。

    private IWorkspace GetSdeWorkspace(string Server, string Instance, string database, string user, string password, string version)
            {
                IWorkspace pWS = null;
                IWorkspaceFactory pWSF = null;
                IPropertySet pPropertySet = new PropertySet();
                //sde数据库连接的各个参数
                pPropertySet.SetProperty("Server", Server);
                pPropertySet.SetProperty("Instance", Instance);
                pPropertySet.SetProperty("Database", database);
                pPropertySet.SetProperty("user", user);
                pPropertySet.SetProperty("password", password);
                pPropertySet.SetProperty("version", version);
                try
                {
                    pWSF = new SdeWorkspaceFactory();
                    pWS = pWSF.Open(pPropertySet, 0);
                }
                catch
                {
                }
                finally
                {
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(pPropertySet);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(pWSF);
                    pPropertySet = null;
                    pWSF = null;
                }
                return pWS;
            }
    private List<IGeometry> GetGeometryFromSde(string pFeaClassName,string objectid)
            {
                List<IGeometry> pGeometryList = new List<IGeometry>();
                IWorkspace pWS = null;
                IFeatureWorkspace pFWS = null;
                IFeatureCursor pFeatCursor = null;
                IFeature pFeature = null;
                IFeatureClass pFeatClss = null;
                IQueryFilter pQueryFilter =new QueryFilterClass();
                pWS = GetSdeWorkspace("192.168.121.110", "5151", "server110_SDE", "sde", "sde2014", "DEFAULT");
                try
                {
                    pFWS = pWS as IFeatureWorkspace;
                    pFeatClss = pFWS.OpenFeatureClass(pFeaClassName);
                    pQueryFilter.WhereClause = "OBJECTID=" + objectid;
                    IFeatureCursor featureCursor = pFeatClss.Search(pQueryFilter, false);
                    while ((pFeature = featureCursor.NextFeature()) != null)
                    {
                        if (pFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolygon)
                        {
                            pGeometryList.Add(pFeature.ShapeCopy);
                        }
                    }
                }
                catch
                {
                }
                finally
                {
                    if (pFeatCursor != null)
                    {
                        System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatCursor);
                        pFeatCursor = null;
                    }
                    if (pWS != null)
                    {
                        System.Runtime.InteropServices.Marshal.ReleaseComObject(pWS);
                    }
                }
                return pGeometryList;
            }

    3、将sde中获得的要素,加到shapefile中。

     private void AddFeature2Shapefile(IGeometry geometry, string filepath, string name)
            {
                IFeatureWorkspace pFWS = null;
                IFeatureClass pFeaCls = null;
                IWorkspaceFactory pWSF = new ShapefileWorkspaceFactoryClass();
                pFWS = pWSF.OpenFromFile(filepath, 0) as IFeatureWorkspace;
                pFeaCls = pFWS.OpenFeatureClass(name);
                IDataset dataset = pFeaCls as IDataset;
                IWorkspace workspace = dataset.Workspace;
                IWorkspaceEdit workspaceEdit = (IWorkspaceEdit)workspace;
                workspaceEdit.StartEditing(true);
                workspaceEdit.StartEditOperation();
                IFeatureBuffer featureBuffer = pFeaCls.CreateFeatureBuffer();
                IFeatureCursor featureCursor = pFeaCls.Insert(true);
                featureBuffer.Shape = geometry;
                featureCursor.InsertFeature(featureBuffer);
                featureCursor.Flush();
                Marshal.ReleaseComObject(featureCursor);
                workspaceEdit.StopEditOperation();
                workspaceEdit.StopEditing(true);
            }

    二、将一个shapefile中的要素加到另一个shapefile中方法与上面类似。只是获得的要素源不同。

     private IGeometry GetGeometryFromShapefile(string filepath, string name)
            {
                IGeometry pGeometry = null;
                IFeatureWorkspace pFWS = null;
                IFeatureClass pFeaCls = null;
                IFeature pFeature = null;
                IWorkspaceFactory pWSF = new ShapefileWorkspaceFactoryClass();
                pFWS = pWSF.OpenFromFile(filepath, 0) as IFeatureWorkspace;
                pFeaCls = pFWS.OpenFeatureClass(name);
                IFeatureCursor featureCursor = pFeaCls.Search(null, false);
                while ((pFeature = featureCursor.NextFeature()) != null)
                {
                    pGeometry = pFeature.ShapeCopy;
                }
                return pGeometry;
            }
    多看一行书,就少写一行代码,记录点滴,用心生活。
  • 相关阅读:
    造轮子杂记2
    Net分布式系统之五:微服务架构
    C#设计模式:责任链模式
    NET Core1.0之CentOS平台开发控制台程序DEMO
    WCF Routing 服务
    设计模式之外观模式
    设计模式之简单工厂模式
    Eclipse快捷键总结
    Spring容器的初始化流程
    IOC容器的创建
  • 原文地址:https://www.cnblogs.com/aegisada/p/3924226.html
Copyright © 2011-2022 走看看