1. C#中使用GDAL

当前使用的环境为:Win10+VS2019+.Net5.0

  1. 新建一个工程之后,添加引用

在这里插入图片描述

需要引用的dll路径为:C:\gdal\bin\gdal\csharp

  1. 示例代码
static void Main(string[] args)
{
    string strDataPath = @"C:\Users\xiaocai\Desktop\Data\781122PDT.gdb";

    Gdal.AllRegister();

    OSGeo.OGR.Driver driver = Ogr.GetDriverByName("OpenFileGDB");
    DataSource dataSource = driver.Open(strDataPath, 0);

    for (int i = 0; i < dataSource.GetLayerCount(); i++)
    {
        //获取图层
        Layer layer = dataSource.GetLayerByIndex(i);
        Console.WriteLine($"{i} {layer.GetName()}");
        do
        {
            //获取图层下的要素
            Feature feature = layer.GetNextFeature();
            if (null == feature)
            {
                break;
            }
            Console.WriteLine(feature.GetStyleString());
            //获取geometry
            string strWkt = "";
            feature.GetGeometryRef().ExportToWkt(out strWkt);
            Console.WriteLine(strWkt);//也可以ExportToWkb() gml等等
            
            //获取属性
            for (int p = 0; p < feature.GetFieldCount(); p++)
            {
                Console.WriteLine($"{feature.GetFieldDefnRef(p).GetName()}\t{feature.GetFieldAsString(p)}");
            }
            Console.WriteLine("------------------------------------------------------");
        } while (true);
    }
    Console.WriteLine("Hello GDAL!");
}

  1. 示例代码输出结果
0 PDT

MULTIPOLYGON (((42587544.08925 5039173.6094,42592687.63025 5039516.5121,42595545.153 5037287.64435,42590801.6652 5037116.193,42587544.08925 5039173.6094)))
PDJB    1
BSM
SHAPE_Length    17378.4217973541
SHAPE_Area      11380985.1546283
------------------------------------------------------

MULTIPOLYGON (((42589658.6561 5034544.4225,42596516.71075 5035515.98025,42596573.8612 5032601.307,42589772.95705 5031686.89975,42589658.6561 5034544.4225)))
PDJB    1
BSM
SHAPE_Length    19563.6743732507
SHAPE_Area      19791384.6722722
------------------------------------------------------

MULTIPOLYGON (((42587956.3306 5036172.89735,42589645.0705 5036172.89735,42589704.6731 5035258.99105,42587956.3306 5034792.10415,42587956.3306 5036172.89735)))
PDJB    2
BSM
SHAPE_Length    5794.98994046641
SHAPE_Area      1978724.73447388
------------------------------------------------------

MULTIPOLYGON (((42592545.72965 5036222.5662,42594681.489 5036520.5791,42594621.8864 5035864.9507,42592744.40495 5035437.7988,42592545.72965 5036222.5662)))
PDJB    2
BSM
SHAPE_Length    5549.76815585525
SHAPE_Area      1470376.45484607
------------------------------------------------------
Hello GDAL!

C:\Users\xiaocai\Desktop\Code\GDAL\GDALDemo001ReadVector\GDALDemo001ReadVector\bin\Debug\net5.0\GDALDemo001ReadVector.exe (进程 9768)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .

2. 小插曲

2.1. 报错Cannot find proj.db

2.1.1. 问题描述

配置完环境变量后,使用GDAL报错

ERROR 1: PROJ: createGeodeticReferenceFrame: Cannot find proj.db

ERROR 1: PROJ: proj_as_wkt: Cannot find proj.db

ERROR 1: PROJ: proj_create_from_wkt: Cannot find proj.db

ERROR 1: PROJ: proj_create_from_wkt: Cannot find proj.db

ERROR 1: PROJ: proj_as_wkt: Cannot find proj.db

ERROR 1: PROJ: proj_create_from_wkt: Cannot find proj.db

ERROR 1: PROJ: proj_create_from_database: Cannot find proj.db

2.1.2. 解决方案

在环境变量中配置变量PROJ_LIB=C:\gdal\bin\proj6\share

注意:如果仍没有解决问题:

1.看变量值那个路径中有没有 proj.db 这个文件,如果没有说明GDAL不完整,需要重新下载或编绎。

2.环境变量设置好后将电脑关机重新启动。

2.2 Could not load file or assembly ‘ogr_csharp, Version=3.2.0.0, Culture=neutral, PublicKeyToken=null’. 试图加载格式不正确的程序。”

2.2.1. 问题描述

System.BadImageFormatException:“Could not load file or assembly ‘ogr_csharp, Version=3.2.0.0, Culture=neutral, PublicKeyToken=null’. 试图加载格式不正确的程序。”

2.1.2. 解决方案

选择环境变量中匹配的目标平台

在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐