• 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 SDKECWJPEG2000文件,必须从Hexagon Geospatial/ERDAS购买可写版本的SDK.

    如果可以找到过期的libecwj 3.3 SDK,也可以使用它。它的许可信息有显著不同。下面的叙述和讨论基于3.3 SDK

    在Unix平台构建支持ECW的GDAL

    假设您已经在默认位置(LIBRARY_PATH)安装了libecwj库,那么将ECW支持添加到GDAL的过程很简单。
    只需要在生成编译GDALMakefileconfigure命令中添加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++ ABIlibstdc++,它与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)libvc90win32NCSEcw4_RO.lib 
    #		$(ECWDIR)libvc90win32NCSUtil4.lib 
    #		$(ECWDIR)libvc90win32NCScnet4.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)libVC140x64NCSEcw.lib
    

    一旦构建,则需要将一些ECW的dll拷贝到系统路径(程序工作目录也可)中(VC9环境下如下)

    copy "C:Program FilesERDASERDAS ECW JPEG2000 Read SDK
    edistributablevc90win32*.dll" C:windowssystem32
    

    当前最新版本的为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``SolarisMac OS系统下使用具有ECW支持GDAL,您需要自己构建libecwj库,因此需要下载Image Compression SDK源代码,而不是专门为Windows系统分发的二进制文件。当前版本是ECW SDK 3.3,源码包名为libecwj2-3.3-2006-09-06.zip

    源码包中有configureMakefile.in脚本,还有一个bootstrap脚本,可以重新生成configureMakefile.in文件。请先确保已经安装了:autoconf, automake, m4, libtool程序。

    程序的构建示例如下:

    $ cd /path/to/libecwj2-3.3
    $ ./configure
    $ make
    # make install
    

    上面配置没有指定安装路径,最后一步需要superuser权限。

    在SuSE 11(低版本gcc),你需要传递一个flagconfigure脚本去使用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定义。

  • 相关阅读:
    Codeforces 1037D【BFS】
    hdu 4725 The Shortest Path in Nya Graph 【拆点】+【最短路】
    LightOJ 1074
    POJ1062昂贵的聘礼(经典) 枚举区间 +【Dijkstra】
    POJ 3159 Candies 【差分约束+Dijkstra】
    POJ 3126 Prime Path【BFS】
    ZOJ 1940 Dungeon Master【三维BFS】
    POJ 3279 Fliptile (二进制枚举)
    HDU 2612 find a way 【双BFS】
    POJ 3414 Pot (输出路径)【BFS】
  • 原文地址:https://www.cnblogs.com/oloroso/p/6625669.html
Copyright © 2020-2023  润新知