GDAL添加ECW格式支持
GDAL添加ECW格式支持
本文翻译自 http://trac.osgeo.org/gdal/wiki/ECW,有少量的修改及补充。
ECW
这个驱动程序的最终用户文档:http://www.gdal.org/frmt_ecw.html
下载ECW JPEG SDK
为了让GDAL可以使用ECW格式,你需要从Hexagon Geospatial网站下载ERDAS ECW/JP2 SDK
。
4.3
或更高版本的只读SDK
(不支持写ECW文件)需要在同意许可条款后免费下载。如果要通过ECW SDK
写ECW
或JPEG2000
文件,必须从Hexagon Geospatial/ERDAS购买可写版本的SDK.
如果可以找到过期的libecwj 3.3 SDK
,也可以使用它。它的许可信息有显著不同。下面的叙述和讨论基于3.3 SDK
。
在Unix平台构建支持ECW的GDAL
假设您已经在默认位置(LIBRARY_PATH
)安装了libecwj
库,那么将ECW
支持添加到GDAL
的过程很简单。
只需要在生成编译GDAL
的Makefile
的configure
命令中添加ecw
库的安装路径:
$ cd /path/to/gdal
$ ./configure --with-ecw=/usr/local
$ make
# make install
如果在构建中存在问题,可以查看gdal/frmts/ecw/GNUmakefile
中的CPPFLAGS
是否定义了-DPOSIX
和-DLINUX
。参考#3344
在完成上面步骤后,可以查看GDAL已安装支持格式列表,可以看到有ECW
:
$ gdalinfo --formats|grep ECW
ECW (rw): ERMapper Compressed Wavelets
JP2ECW (rw+): ERMapper JPEG2000
注意:所有依赖GDAL
的服务都应该重启。例如:Apache
需要重新加载PHP MapScript
。
二进制ECW SDK和GCC >= 5.1
由于GCC 5.1
以后,GCC默认使用新的C++ ABI
和libstdc++
,它与ECW SDK
二进制文件不兼容(至少当前如此)。解决的办法是使用CXXFLAGS="-D_GLIBCXX_USE_CXX11_ABI=0"
选项去构建GDAL
。
./configure CXXFLAGS="-D_GLIBCXX_USE_CXX11_ABI=0"
注意:如果你还使用别的使用新的C++ ABI
的库(例如:likbml,podofo,poppler,cryptopp等,这通常来自发行版自带的),则这个方法无法正常使用。如果你必须使用这些库,你必须找到它们的源码,并使用CXXFLAGS="-D_GLIBCXX_USE_CXX11_ABI=0"
选项重新编译。
在Linux上构建的教程
http://trac.osgeo.org/ubuntugis/wiki/UserTutorials
在Windows上构建支持ECW的GDAL
在nmake.opt
中有以下使用4.1或更新的只读SDK构建读取支持的选项,去掉前面的注释,并修改ECWDIR
只想的路径。
# Uncomment the following and update to enable ECW read support with the
# 4.1+ readonly SDK
#ECWDIR = "c:/Program Files/ERDAS/ERDAS ECW JPEG2000 Read SDK"
#ECWFLAGS = -DECWSDK_VERSION=41 \
# -I$(ECWDIR)\include \
# -I$(ECWDIR)\include/ecw/api -I$(ECWDIR)\include/ecw/jp2 \
# -I$(ECWDIR)\include/ecw/ecw
#ECWLIB = $(ECWDIR)\lib\vc90\win32\NCSEcw4_RO.lib \
# $(ECWDIR)\lib\vc90\win32\NCSUtil4.lib \
# $(ECWDIR)\lib\vc90\win32\NCScnet4.lib
GDAL自带的nmake.opt
还是默认的VS2008,比较老了。
实际上现在nmake.opt里面有两处关于ECWSDK的位置,最新版本的ECWSDK5需使用链接NCSEcw.lib
或者静态库NCSEcwS.lib
的即可。如果编译64位版本,还需要去掉
WIN64=YES前的
#,大致在
189行。 例如在使用
VS2015`编译的时候,修改的位置及结果如下:
# 45行位置,修改编译器版本
MSVC_VER=1900
# 189行位置,编译64位版本
WIN64=YES
# 303行位置,修改libecwj路径
ECWDIR = "c:/Program Files/ERDAS ECW JPEG 2000 SDK 5.3.0"
ECWFLAGS = -DECWSDK_VERSION=53 \
-I$(ECWDIR)\include \
-I$(ECWDIR)\include/NCSECW/API -I$(ECWDIR)\include/NCSECW/JP2 \
-I$(ECWDIR)\include/NCSECW/ECW
ECWLIB = $(ECWDIR)\lib\VC140\x64\NCSEcw.lib
一旦构建,则需要将一些ECW的dll拷贝到系统路径(程序工作目录也可)中(VC9环境下如下)
copy "C:\Program Files\ERDAS\ERDAS ECW JPEG2000 Read SDK\redistributable\vc90\win32\*.dll" C:\windows\system32
当前最新版本的为ECW JPEG 2000 SDK 5.3.0
,使用VC11/12/14编译。
以上将ECW的支持构建到GDAL核心DLL
中。
为了构建ECW和JP2ECW驱动程序作为插件,需要取消nmake.opt
中注释的插件行:
# To build ECW support as a plugin uncomment the following, and make sure
# to do "nmake /f makefile.vc plugin" in gdal/frmts/ecw and copy the two
# resulting DLLs to an appropriate place.
ECW_PLUGIN = YES
然后到gdal/frmts/ecw
(在GDAL构建后)中去创建插件plugins:
nmake /f makefile.vc plugin
然后将该目录中生成的dll
复制到合适的GDAL
插件目录,例如.exe
文件所在目录下的gdalplugins
目录中,或着是GDAL_DRIVER_PATH
配置选项(或环境变量)指向的目录。
在Unix上构建libecwj 3.3库
为了在Linux``Solaris
或Mac OS
系统下使用具有ECW支持
的GDAL
,您需要自己构建libecwj
库,因此需要下载Image Compression SDK
源代码,而不是专门为Windows系统分发的二进制文件。当前版本是ECW SDK 3.3
,源码包名为libecwj2-3.3-2006-09-06.zip
。
源码包中有configure
和Makefile.in
脚本,还有一个bootstrap
脚本,可以重新生成configure
和Makefile.in
文件。请先确保已经安装了:autoconf
, automake
, m4
, libtool
程序。
程序的构建示例如下:
$ cd /path/to/libecwj2-3.3
$ ./configure
$ make
# make install
上面配置没有指定安装路径,最后一步需要superuser
权限。
在SuSE 11(低版本gcc),你需要传递一个flag
给configure
脚本去使用c99
兼容性。
$ cd /path/to/libecwj2-3.3
$ ./configure CFLAGS="-std=c99"
$ make
# make install
默认情况下,安装时使用prefix
指向目录/usr/local
来安装libecwj
。你可以使用configure
的--prefix
选项指定。运行configure --help
查看更多选项。如果编译libecwj
使用了--prefix
(例如/usr/local/libecwj2-3.3
),则make install
会失败,因为不会自动创建<prefix>/include
。执行mkdir <prefix>/include
(例如mkdir /usr/local/libecwj2-3.3/include
),然后再次运行make install
。
在较新的平台(Fedora 16/17/18和RHEL/CentOS 6)上,libecwj2
可以在读取JPEG2000
文件时会导致程序崩溃。错误在与libecwj2
绑定的XML
处理代码中,显而易见,这是新的编译器带来的问题。上述平台的一个解决办法是在编译libecwj2
时禁用优化,可以通过传递-O0
来配置:
$ ./configure CFLAGS="-O0" CXXFLAGS="-O0"
或者在make时候指定:
$ make CFLAGS="-O0" CXXFLAGS="-O0"
Mac OS X notes
在Mac OS X上构建libecwj2-3.3
可能会有一点问题。相关详细信息,参阅#2032。
libecwj2-3.3 补丁
使用最新的编译器从源码构建libecwj2-3.3
可能需要一些改进,可以在#3162中找到libecwj2
的修复程序和补丁程序中找到。
综合累积可用补丁:
https://trac.osgeo.org/gdal/attachment/wiki/ECW/libecwj2-3.3.patch
使用libecwj2-3.3
打开和关闭ECW
文件占用大量内存的问题,可以使用http://trac.osgeo.org/mapserver/ticket/3245补丁来解决。
#3366中提供了一个补丁,来避免在libecwj2-3.3
中的NCSPhysicalMemorySize()
的linux
实现中溢出。这个工作可以解决内存大于2G
的计算机中大内存使用情况。
A patch to fix crash when creating 16 bit JP2 (that occurs on 64bit platforms) is available in ticket #2593中提供了修复16 bit JP2
(在64为平台发生)时出现故障的补丁。
在最新的平台(如Fedora 17,使用GCC 4.7)上修复ECWInitialize()
崩溃的补丁程序可在#4868中找到。
Open Tickets
#2162 ecw_cs.dat文件出自多云天(provenance cloudy)
#2340 意大利基准(italian datum)问题。
#4127 [PATCH] ECW文件ecw_cs.wkt
附加CRS
定义。
GDAL添加ECW格式支持的更多相关文章
- GDAL打开HDF格式时遇到的中文路径问题(未解决)
众所周知,中文环境下(VS2010 C++工程编码为多字节编码),在使用1.8.0版本以后的GDAL打开中文路径下的影像文件(如GeoTiff文件)时, 需对中文文件路径做特殊处理,有2种方法:(我使 ...
- deerlet-redis-client添加集群支持,邀请各路大神和菜鸟加入。
引言 经过几周的修改,deerlet已经添加了对于redis集群的支持,策略与memcached客户端一样,采用一致性Hash.不过目前Hash的算法取自Java自带的String类型的HashCod ...
- MySQL 5.7原生JSON格式支持
在MySQL与PostgreSQL的对比中,PG的JSON格式支持优势总是不断被拿来比较.其实早先MariaDB也有对非结构化的数据进行存储的方案,称为dynamic column,但是方案是通过BL ...
- Windowns的GVIM添加markdown语法支持
gvim 7.4中其实也是有对markdown的语法文件,但格式支持并不全面,如行业代码``就没有实现. 修改方案: 从github下载plasticboy的markdown语法版本,windowns ...
- Intellij IDEA14 下添加ExtJS提示支持
前言: 虽然Interlij IDEA比起Eclipse对待EXT更为支持,但自己上手后总不能达到Intellij 开发ExtJS 应用指南(http://blog.csdn.net/s4640368 ...
- yum安装的Nginx添加第三方模块支持tcp
需求:生产有个接口是通过socket通信.nginx1.9开始支持tcp层的转发,通过stream实现的,而socket也是基于tcp通信. 实现方法:Centos7.2下yum直接安装的nginx, ...
- java PDF添加图层,支持多页图层添加
java PDF添加图层,支持多页图层添加 代码: import java.io.File; import java.io.FileOutputStream; import java.io.IOEx ...
- IdentityServer4 中文文档 -12- (快速入门)添加外部认证支持
IdentityServer4 中文文档 -12- (快速入门)添加外部认证支持 原文:http://docs.identityserver.io/en/release/quickstarts/4_e ...
- [WPF]为旧版本的应用添加触控支持
之前做WPF开发时曾经遇到这样一个需求:为一个基于 .NET Framework 3.5开发的老旧WPF程序添加触控支持,以便于大屏触控展示. 接手之后发现这是一个大坑. 项目最初的时候完全没考虑过软 ...
随机推荐
- 【转】 Qt如何设置自动补全快捷键
原文:https://blog.csdn.net/u014597198/article/details/52797435 在用Qt编程的时,它默认是以“CTRL+空格”来作为自动补全的快捷键的,但是这 ...
- Maven自定义Archetype(zz)
原文地址:http://www.cnblogs.com/javalouvre/p/5858162.html Maven提供了archetype帮助我们快速构建项目骨架,很便捷.但是,中央仓库中的arc ...
- Java系列: 关于虚引用及其测试代码
“虚引用”顾名思义,就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期.如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收.虚引用主要用来跟踪对象被 ...
- Android 资源混淆 AndResGuard MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 揭秘uc浏览器一
首先,看一下项目完成后的,最终效果是这样的: 一.主界面 二,书签界面 三.主界面 四.操作对话框界面 这几个界面你是否看到了uc浏览器的影子了,其实我说你也可以了,在接下来篇幅中,我将手把手叫大家完 ...
- 开源ckplayer 网页播放器去logo去广告去水印修改
功能设置介绍 本教程涉及到以下各点,点击对应标题页面将直接滑动到相应内容: 1:修改或去掉播放器前置logo 2:修改或去掉右上角的logo 3:修改.关闭.设置滚动文字广告 4:去掉右边的开关灯分享 ...
- Node js : Best way to define entity class
If you start to use a DB like mongo, you might be better off creating objects with mongoose but th ...
- (转)No row with the given identifier exists问题的解决
产生此问题的原因: 有两张表,table1和table2.产生此问题的原因就是table1里做了关联<one-to-one>或者<many-to-one unique ...
- php 传变量到 js 文件
php 传变量到 js 文件 // 传变量到js $oncj="taocanonc(".$i.",".$alli.",".$row1[mon ...
- pycharm+python+Django之web开发环境的搭建(windows)
转载:https://blog.csdn.net/yjx2323999451/article/details/53200243/ pycharm+python+Django之web开发环境的搭建(wi ...