2021年8月3日补充
前两天在NuGet包时发现,可以直接添加GDAL的NuGet包,然后正常使用GDAL读取shp文件,操作比原来的方法简单一点,不用编译。
需要注意的是,GDAL和GDAL.Native都要安装。
1.下载编译好的GDAL文件https://www.gisinternals.com/release.php(参考https://blog.csdn.net/xlp789/article/details/89922762)
VS版本与GDAL选择
电脑情况VS2017(64位),故选择release-1911-x64-gdal-3-2-0-mapserver-7-6-1
下载后解压
点击 SDKShell.bat配置环境
将bin目录下的dll文件和E:\迅雷下载\release-1911-x64-gdal-3-2-0-mapserver-7-6-1\bin\gdal\csharp下的dll文件复制在同一个文件夹里,方便后面复制到所建工程项目里
如建立文件夹copy存放所有的dll
2.新建C#工程,将所有的dll文件复制到 项目名称\bin\Debug文件夹下
3.添加引用,解决方案资源管理器——引用——添加引用——浏览,选择debug文件夹下的gdal_csharp.dll,gdalconst_csharp.dll,ogr_csharp.dll,osr_csharp.dll
4.平台目标设置为X64
5.测试代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OSGeo.OGR;
using OSGeo.OSR;
using OSGeo.GDAL;
namespace 测试gdalcplus
{
class Program
{
static void Main(string[] args)
{
//GdalConfiguration.ConfigureGdal();
//.ConfigureOgr();
OSGeo.GDAL.Gdal.AllRegister();
OSGeo.GDAL.Dataset ds = OSGeo.GDAL.Gdal.Open(@"E:\TEST\1TestData\AE\DDOM\4101062020032513435DDOM.tif", OSGeo.GDAL.Access.GA_ReadOnly);
int w = ds.RasterXSize; int h = ds.RasterYSize;
Console.WriteLine("image width=" + w + ",height=" + h);
Console.ReadKey();
}
}
}
6.使用过程中出现的问题
PROJ: proj_identify: Cannot find proj.db”
解决方法:在环境变量中添加proj.db的路径
也可以自己编译gdal然后拷贝dll