c# 使用GDAL处理大图
注意问题:
1.GDAL 使用官网生成好的dll,必须把Bin目录下的dll一并加到执行目录下去,否则会出错。
2. 用环境变量设置引用路径可以避免一大堆dll放一起。代码如下:
/// <summary>/// Function to determine which platform we're on/// </summary>private static string GetPlatform(){return IntPtr.Size == 4 ? "x86" : "x64";}/// <summary>/// Construction of Gdal/Ogr/// </summary>public static void Gdal_Configuration(){var executingAssemblyFile = new Uri(Assembly.GetExecutingAssembly().GetName().CodeBase).LocalPath;var executingDirectory = Path.GetDirectoryName(executingAssemblyFile);if (string.IsNullOrEmpty(executingDirectory))throw new InvalidOperationException("cannot get executing directory");var gdalPath = Path.Combine(executingDirectory, "gdal");var nativePath = Path.Combine(gdalPath, GetPlatform());// Prepend native path to environment path, to ensure the// right libs are being used.var path = Environment.GetEnvironmentVariable("PATH");path = nativePath + ";" ;Environment.SetEnvironmentVariable("PATH", path);Gdal.AllRegister();}
3.最好使用自己手动编译的dll,会少很多没使用到的dll,只用9个dll。
4.用GDAL的用户控件,第二次拖动控件进窗体后会造成“未能加载工具箱项,将从列表中移除”的问题,建议代码手动添加吧,是非托管dll的问题。
编译步骤如下:
首先,下载GDAL源码,官网下即可。
打开D:\gdal\nmake.opt
修改54行: GDAL_HOME = "D:\GDAL"。(编译生成文件的保存路径)
83行: SWIG = D:\swigwin-2.0.4\swig.exe(必须是swigwin.exe的完整路径)。
153行: "#WIN64=YES",去掉#。注意保存。
675行:"SYM_PREFIX=_",去掉最后面的下划线。
打开D:\gdal\makefile.vc,修改23~26行,将“_”改为$(SYM_PREFIX)。如图:
打开D:\1.10.1\swig\csharp\AssemblyInfo.cs文件,将94行代码注释掉,解决安全透明代码无法调用的问题。
打开 D:\1.10.1\swig\csharp\gdal\GdalPINVOKE.cs
D:\1.10.1\swig\csharp\ogr\OgrPINVOKE.cs
D:\1.10.1\swig\csharp\osr\OsrPINVOKE.cs
修改188~193行:将重复的代码注释掉,解决接口重定义的问题。
打开D:\1.10.1\swig\csharp\gdal\Band.cs|Dataset.cs|Driver.cs,修改第17行,解决接口成员名错误问题。
public Band(IntPtr cPtr, bool cMemoryOwn, object parent) : base(GdalPINVOKE.Band_SWIGUpcast(cPtr), cMemoryOwn, parent)
public Dataset(IntPtr cPtr, bool cMemoryOwn, object parent) : base(GdalPINVOKE.Dataset_SWIGUpcast(cPtr), cMemoryOwn, parent)
public Driver(IntPtr cPtr, bool cMemoryOwn, object parent) : base(GdalPINVOKE.Driver_SWIGUpcast(cPtr), cMemoryOwn, parent) {
3、编译
开始—所有程序—Microsoft Visual Studio 2010—Visual Studio Tools—Visual Studio x64兼容工具命令提示(2010)
打开命令行工具,cd d:\gdal-1.10.1
然后执行 nmake /f makefile.vc
nmake /f makefile.vc install
nmake /f makefile.vc devinstall
注:编译可能要费一些时间,不要着急。
以上是完成了C++的编译,要再进入csharp编译。
执行 cd swig\csharp
nmake /f makefile.vc
(运行这一步有问题的话,加以下两句:namke /f makefile.vc clear 、nmake /f makefile.vc interface)
nmake /f makefile.vc install
正常情况下可以编译成功。
命令参数说明:
使用命令:nmake -f makefile.vc MSVC_VER=1600 DEBUG=1 ANALYZE=1 WITH_PDB=1 可以设置使用的c++版本
MSVC_VER:VC++的版本,下面是对应关系
1900 = 14.0(2015)
1800 = 12.0(2013)
1700 = 11.0(2012)
1600 = 10.0(2010)
1500 = 9.0 (2008)
1400 = 8.0 (2005) - specific compilation flags, different from older VC++
1310 = 7.1 (2003)
1300 = 7.0 (2002)
1200 = 6.0
DEBUG:bebug版本标识,不使用此参数,默认为Release
ANALYZE=1:对GDAL代码进行分析,这个一般不用
WITH_PDB=1:标识生成调试信息
c# 使用GDAL处理大图相关推荐
- Python gdal 拼图
1.这些就可以将小图拼接成大图 import PIL.Image as Image import os import numpy as np# IMAGES_PATH = 'D:\lppyqtdata ...
- arcgis合并tif影像_微图影像地图导出拼接大图的参数说明
1. 概述 微图是一款集地图下载与GIS功能于一体的轻量级GIS产品,相较于X3版本的万能地图下载器,它有更丰富的地图数据和更专业的GIS功能. 尽管微图的软件界面已经足够简洁明了,但为了让新用户能更 ...
- JAVA IDEA集成geotools gt-mif gdal读取.MIF
JAVA IDEA集成geotools gt-mif gdal读取.MIF 1. 结论 2. 问题1:gdal maven下载不下来 3. geotools,gt-mif maven配置 4. 源码 ...
- Java gdal .mif/.mid文件读取
上一篇研究了 Windows10 64位 Python读取.mif/.mid文件并转成txt 今天研究一下Java读取MIF. 俩种解决办法: (1)Python程序读取.mif/.mid转成txt, ...
- C# GDAL 学习一
最近一直琢磨如何用C#+GDAL读取栅格数据(.tif或.img),运气不错的在GDAL 的官网上找到一部分源码.经过本人测试,效果还不错.学习还将继续深入下去. 参考网址:http://trac.o ...
- 使GDAL库支持中文路径或中文文件名的处理方法
之前生成的gdal 2.1.1动态库,在通过命令行执行时,遇到有中文路径或中文图像名时,GDALOpen函数不能正确的被调用,如下图: 解决方法: 1. 在所有使用GDALAllRegist ...
- GDAL库简介以及在Windows下编译过程
GDAL(Geospatial Data Abstraction Library,地理空间数据抽象库)是一个在X/MIT许可协议下的开源栅格空间数据转换库.官网http://www.gdal.org/ ...
- php帝国系统调出图片内空,帝国CMS图集字段的大图,小图,说明的调用方法
本文实例讲述了帝国CMS图集字段的大图,小图,说明的调用方法.分享给大家供大家参考.具体方法如下: 复制代码代码如下: $arr = array(); $arr = $navinfor['morepi ...
- gdal 1.9+python 2.7开发环境配置
最近项目使用Cesium平台基于WegGl做web地球,其中关于地形数据有一种支持格式为terrain的地形数据.这种格式可以通过一个python工具切dem来得到. 下面记录下配置gdal+pyth ...
最新文章
- DevOps,到底是开发还是运维?
- tensorflow2 目标检测_基于光流的视频目标检测系列文章解读
- WPF 中设置Combox下拉框Text 显示值
- 内参、外参、畸变参数三种参数与相机的标定方法与相机坐标系的理解
- UIImage 图片处理:截图,缩放,设定大小,存储
- AJAX ControlToolkit学习日志-AnimationExtender控件(3)
- 数字货币交易系统_区块链交易所开发,数字货币平台功能与安全
- python ffmpeg剪辑视频_FFmpeg精准时间切割视频文件
- 钢琴家以前是学计算机的,奇特的钢琴家——裘元朴
- 初学太极拳须知--吴公仪
- ElementUI之el-pagination样式修改(小三角、“前往”、页码数)
- darknet训练时Couldn‘t open file的问题解决
- mac文件反选_【PS反选键是什么?】Photoshop该如何进行反向选择?
- 视频教程-Ajax+jquery从入门到精通2017视频教程-JavaScript
- python freshman day2
- 蓝桥杯---Cowboys---DP
- 2020牛客暑期多校训练营(第八场)题解
- 很火的微信聊天界面个性签名设置方法,除了好看更重要的是...
- linux上jira安装
- 神奇的cyclegan!