• 大小: 12KB
    文件类型: .cs
    金币: 1
    下载: 0 次
    发布日期: 2021-05-09
  • 语言: C#
  • 标签: gdal  c#  中文乱码  

资源简介

最新版本的gdal版本为(release-1700-x64-gdal-1-11-4-mapserver-6-4-3)下载后读取shp文件总是乱码,查看了无数大神的文章后发现解决方案,但是对于我们这样的小白来讲,涉及到了反射,指针一类的东西,该方案并不是很懂,看了还是不知道咋写c#版本的代码。。。所以把解决好后的源码发上来,供我这种小白去学习!

资源截图

代码片段和文件信息

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
//
using System.IO;
using OSGeo.GDAL;
using OSGeo.OGR;
using OSGeo.OSR;
using System.Collections;
using System.Data;
using System.Runtime.InteropServices;

namespace App_Code
{
    /// 
    /// 定义SHP解析类
    /// 

    public class ShpHandle
    {
        /// 保存SHP属性字段
        public OSGeo.OGR.Driver oDerive;
       
        public ShpHandle()
        {
            InitinalGdal();//注册所有gdal
        }

        /// 
        /// 初始化Gdal
        /// 

        protected void InitinalGdal()
        {
            Gdal.AllRegister();
            Ogr.RegisterAll();
            // 为了支持中文路径
            Gdal.SetConfigOption(“GDAL_FILENAME_IS_UTF8“ “YES“);
            // 为了使属性表字段支持中文
            Gdal.SetConfigOption(“SHAPE_ENCODING“ ““); 
            
            
            oDerive = Ogr.GetDriverByName(“ESRI Shapefile“);
            if (oDerive == null)
            {
                MessageBox.Show(“文件不能打开,请检查“);
            }

        }     
    }

    public class ShpHandle_R : ShpHandle
    {
        public layer player;
        public Dictionary fieldmap;
        //注意“gdal202.dll“要随着你的gdal版本改变而改变,注意查看bin目录下的gdal文件名即可
        [DllImport(“gdal202.dll“ EntryPoint = “OGR_F_GetFieldAsString“ CallingConvention = CallingConvention.Cdecl)]
        public extern static IntPtr OGR_F_GetFieldAsString(HandleRef handle int i);


        public ShpHandle_R(string sfilename)
        {
            InitinalGdal();//注册所有gdal
            player = GetShplayer(sfilename);//获取shp的图层
            fieldmap = GetFeilds();//获取字段结构
        }

        public ShpHandle_R()
        {
            InitinalGdal();//注册所有gdal
        }

        /// 
        /// 获取SHP文件的layer
        /// 

        /// 
        /// yer“>
        /// 
        private layer GetShplayer(string sfilename)
        {
            layer olayer = null;
            if (null == sfilename || sfilename.Length <= 3)
            {
                return null;
            }
            if (oDerive == null)
            {
                MessageBox.Show(“文件不能打开,请检查“);
            }
            DataSource ds = oDerive.Open(sfilename 1);
            if (null == ds)
            {
                return null;
            }
            //int iPosition = sfilename.LastIndexOf(“\\“);
            //string sTempName = sfilename.Substring(iPosition + 1 sfilename.Length - iPosition - 4 - 1);
            olayer = ds.GetlayerByIndex(0);
            if (olayer == null)
            {
                ds.Dispose();
                return null;
            }
            return olayer;
        }
        /// 
        /// 获取所有的属性字段名称列表
        /// 

        /// 

评论

共有 条评论