shp加载并合并

  private void simpleButton4_Click(object sender, EventArgs e)
        {
            //创建一个文件打开对话框来打开源文件
            OpenFileDialog pDlg = new OpenFileDialog();
            pDlg.Filter = “Shape(*.shp)|*.shp|All Files(*.*)|*.*”;
            pDlg.Title = “Open Shapefile data”;
            if (pDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                textBox2.Text = pDlg.FileName;
            }
        }
        private void simpleButton3_Click(object sender, EventArgs e)
        {
            //创建一个文件打开对话框来打开源文件
            OpenFileDialog pDlg = new OpenFileDialog();
            pDlg.Filter = “Shape(*.shp)|*.shp|All Files(*.*)|*.*”;
            pDlg.Title = “Open Shapefile data”;
            if (pDlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                textBox1.Text = pDlg.FileName;
            }
        }
        private void simpleButton1_Click(object sender, EventArgs e)
        {
            if ((textBox1.Text == “”) || (textBox2.Text == “”))
                return;

            //获得去除后缀名的的文件名及路径
            string strShpfile_Source = System.IO.Path.GetFileNameWithoutExtension(textBox1.Text);
            string strFileDir_Source = System.IO.Path.GetDirectoryName(textBox1.Text);

            string strShpfile_Target = System.IO.Path.GetFileNameWithoutExtension(textBox1.Text);
            string strFileDir_Target = System.IO.Path.GetDirectoryName(textBox1.Text);

            //创建工厂类以打开工作空间
            IWorkspaceFactory pWksFac = new ShapefileWorkspaceFactory();
            IWorkspace pWks_Source = pWksFac.OpenFromFile(strFileDir_Source, 0);
            IWorkspace pWks_Target = pWksFac.OpenFromFile(strFileDir_Target, 0);

            if ((pWks_Source == null) || (pWks_Target == null))
                return;

            //获得源文件的表及空间参考
            IFeatureClass pSourceFeaCls = (pWks_Source as IFeatureWorkspace).OpenFeatureClass(strShpfile_Source);
            ISpatialReference pSourceSpr = ((pSourceFeaCls as IDataset) as IGeoDataset).SpatialReference;

            IFeatureClass pTargetFeaCls = (pWks_Target as IFeatureWorkspace).OpenFeatureClass(strShpfile_Target);
            ISpatialReference pTargetSpr = ((pTargetFeaCls as IDataset) as IGeoDataset).SpatialReference;//空间参考

            if (pSourceSpr.Name != pTargetSpr.Name)
            {
                MessageBox.Show(“不一致的空间参考,数据无法导入!”);
                return;
            }

            string sError = “”;

            int iFeaCnt = pSourceFeaCls.FeatureCount(null);

            //获得源文件的游标
            IFeatureCursor pFeaCur = pSourceFeaCls.Search(null, false);
            IFeature pSourceFea = pFeaCur.NextFeature();
            if (pSourceFea == null)
                return;

            bool blOK = false;

            //启动目标工作空间的编辑
            IWorkspaceEdit pWksEdit = pWks_Target as IWorkspaceEdit;
            pWksEdit.StartEditing(false);
            pWksEdit.StartEditOperation();

            progressBar1.Maximum = iFeaCnt;
            progressBar1.Minimum = 0;

            try
            {
                //遍历每一条记录
                while (pSourceFea != null)
                {
                    //创建对应的目标记录
                    IFeature pTargetFea = pTargetFeaCls.CreateFeature();

                    if (pTargetFea != null)
                    {
                        //复制几何
                        pTargetFea.Shape = pSourceFea.Shape;
                        //复制属性
                        CopyAttribute(pSourceFea, pTargetFea);
                        //保存编辑
                        pTargetFea.Store();

                        progressBar1.Increment(1);

                        Application.DoEvents();

                        //this.Invalidate();
                    }
                    pSourceFea = pFeaCur.NextFeature();
                }

                blOK = true;
            }
            catch (Exception ex)
            {
                sError = ex.Message;
            }
            finally
            {
                progressBar1.Increment(-iFeaCnt);//进度条

                if (blOK)
                    pWksEdit.StopEditOperation();
                else
                    pWksEdit.AbortEditOperation();

                pWksEdit.StopEditing(blOK);

                if (blOK)
                {
                    if (checkBox1.Checked)
                    {
                        IFeatureLayer pFeaLyr = new FeatureLayerClass();
                        pFeaLyr.FeatureClass = pTargetFeaCls;
                        (this.Owner as Form1).AddFeatureLayer(pFeaLyr);
                    }
                    MessageBox.Show(“导入成功,共计导入:” + iFeaCnt + “条记录。”);
                }
                else
                    MessageBox.Show(“导入失败:” + sError);
            }
        }

        private void CopyAttribute(IFeature pSourceFea, IFeature pTargetFea)
        {
            //获取源文件的字段信息
            IFields pSourceFlds = pSourceFea.Fields;
            for (int i = 0; i < pSourceFlds.FieldCount; i++)
            {
                //筛掉OID 几何 大字段类型的字段名
                IField pSourceFld = pSourceFlds.get_Field(i);
                if ((pSourceFld.Type == esriFieldType.esriFieldTypeOID) ||
                    (pSourceFld.Type == esriFieldType.esriFieldTypeGeometry) ||
                    (pSourceFld.Type == esriFieldType.esriFieldTypeBlob))
                    continue;

                //筛掉值为空的
                string sSourceVal = pSourceFea.get_Value(i).ToString();
                if (string.IsNullOrEmpty(sSourceVal))
                    continue;

                //添加索引
                string sSourceFldName = pSourceFld.Name;
                int iTargetFldIndex = pTargetFea.Fields.FindField(sSourceFldName);
                if (iTargetFldIndex >= 0)
                    pTargetFea.set_Value(iTargetFldIndex, sSourceVal);
            }
        }  
    }
}

转载自:https://blog.csdn.net/qq_40216244/article/details/78880937

You may also like...