GDAL/OGR 2.1.0 Release Notes

released 2016-05-02

In a nutshell…

  • New GDAL/raster drivers:
    • CALS: read/write driver for CALS Type I rasters
    • DB2: read/write support for DB2 database (Windows only)
    • ISCE: read/write driver (#5991)
    • MRF: read/write driver for Meta Raster Format (#6342)
    • SAFE: read driver for ESA SENTINEL-1 SAR products (#6054)
    • SENTINEL2: read driver for ESA SENTINEL-2 L1B/LC1/L2A products
    • WMTS: read driver for OGC WMTS services
  • New OGR/vector drivers:
    • AmigoCloud: read/write support for AmigoCloud mapping platform
    • DB2: read/write support for DB2 database (Windows only)
    • MongoDB: read/write driver
    • netCDF: read/write driver
    • VDV: read/write VDV-451/VDV-452 driver, with specialization for the Austrian official open government street graph format
  • Significantly improved drivers:
    • CSV: new options, editing capabilities of existing file
    • ElasticSearch: read support and support writing any geometry type
    • GeoJSON: editing capabilities of existing file, "native data" (RFC 60) support
    • MBTiles: add raster write support. fixes in open support
    • PDF: add PDFium library as a possible back-end.
    • PLScenes: add support for V1 API
    • VRT: on-the-fly pan-sharpening
    • GTiff: multi-threaded compression for some compression methods
  • Port library: add /vsis3/, /vsis3_streaming/, /vsicrypt/ virtual file systems
  • RFC 26: Add hash-set band block cache implementation for very larger rasters (WMS, WMTS, ...)

  • RFC 48: Geographical networks support (GNM)

  • RFC 59.1: Make GDAL/OGR utilities available as library functions:

For gdalinfo, gdal_translate, gdalwarp, ogr2ogr, gdaldem, nearblack, gdalgrid, gdal_rasterize, gdalbuildvrt Available in C, Python, Perl and Java bindings.

  • RFC 60: Improved round-tripping in OGR

Implemented in GeoJSON driver

  • RFC 61: Support for measured geometries.

Implemented in Shapefile, PostgreSQL/PostGIS, PGDump, MEM, SQLite, GeoPackage, FileGDB, OpenFileGDB, CSV, VRT

  • Upgrade to EPSG database v8.8
  • General sanitization pass to clean-up code, fix a lot of compiler warnings, as well as issues pointed by static code analyzers, such as Coverity Scan (credits to Kurt Schwehr for tackling a large part of them) or CLang Static Analyzer.
  • Fixes in a number of drivers to be more robust against corrupted files (most found with American Fuzzy Lop): RIK, INGR, Northwood, HF2, CEOS, GTiff, GXF, BMP, NITF, HFA, VRT, FIT, CEOS2, NWT_GRD/NWT_GRC, MITAB, RPFTOC, DBF/Shape, XYZ, VFK, DXF, NAS, GSAG, GS7BG, OpenFileGDB, RMF, AIGRID, OpenAIR, EHDR, ISO8211, FAST, USGSDEM, DGN, SGI, OpenJPEG, PCRaster, BSB, ADRG, SRP, JPEG, Leveller, VICAR, PCIDSK, XPM as well as in portability library (CPL), algorithms and raster core.
  • Driver removed:
    • Google Maps Engine (GME) (#6261)

New installed files

  • data/vdv452.xml
  • data/vdv452.xsd
  • data/netcdf_config.xsd
  • /path/where/bash-completion/scripts/are/installed/

Backward compatibility issues


GDAL/OGR 2.1.0 - General Changes


  • Allow plugin for HDF4, HDF5, GeoRaster, FileGDB, OCI and PG
  • Add a --with-gnm option to enable GNM
  • Add --enable-lto switch to turn on link time optimization (GCC >= 5)
  • Add --with-spatialite=dlopen[.X] syntax to allow linking against spatialite through dlopen() mechanism (#6386)
  • Add a lot of warning options when available in the compiler.
  • Change detection test of podofo to work with podofo 0.9.3
  • Fix gdalserver compilation with recent GNU libc (such as in Arch Linux) (#6073)
  • Add pkg-config support for libkml fork (#6077)
  • Update config.sub and config.guess to their latest upstream versions so as to be able to detect new architectures (android, ppcle64, etc..) (#6101)
  • Fix python package installation in custom prefixes (#4563)
  • configure: check that CXX is really a working compiler (#4436)
  • Build support for Kakadu 7.7
  • thinplatespline.cpp: avoid using optimized version of VizGeorefSpline2DBase_func4() with ICC versions that fail on it (#6350)
  • Add bash completion for GDAL/OGR utilities and scripts (#6381)
  • Add support for ODBC autodetection with mingw64 (#6000)
  • Remove macos 9 and older support (#6133).
  • Remove dist_docs, burnpath and pszUpdableINST_DATA in gcore/gdaldrivermanager.cpp as they are have not been used for a while (#6140).
  • Removed --without-ogr configure flag (#6117). Always build with OGR.


  • Add support for Visual Studio 2015 (a.k.a MSVC_VER=1900 or VC 14)
  • Add KAKFLAGS to nmake.opt with KDU_{MAJOR,MINOR,PATCH}_VERSION define-s.
  • nmake.opt: make it less error prone to define SETARGV when paths include spaces (#6032)
  • nmake.opt: add CL.EXE compiler option /FC to display full path of source code file in diagnostics
  • Remove WinCE support (#6133)
  • nmake.opt: add /I flag to the INSTALL command so that xcopy will be smart enough to create a directory when copying files and avoid prompting for user input (
  • Enable mssql spatial blugin build, use BCP as the default option for the sqlncli enabled builds
  • Add support to find MrSID 9.5 dll
  • Fix Windows build with recent MySQL versions and Visual Studio 2015 (#6457)


  • Compatibility with C++11 and C++14
  • Optional crypto++ dependency for /vsicrypt/ support
  • Optional mongocxx dependency for MongoDB support


  • Disable copy constructor and assignment operators in classes OGRFieldDefn, OGRGeomFieldDefn, OGRFeature, GDALMultiDomainMetadata, GDALDefaultOverviews, GDALOpenInfoGDALDataset, GDALRasterBlock, GDALRasterBand and GDALDriver (#6100)

GDAL 2.1.0 - Overview of Changes


  • Add /vsicrypt/ virtual file system for reading/creating/update encrypted files on the fly, with random access capabilities
  • Add /vsis3/ and /vsis3_streaming/ virtual file systems to read/write objects from AWS S3 buckets
  • /vsizip/: avoid returning the previous file list of an already opened .zip if it has changed afterwards (#6005)
  • /vsizip/: use CP437 on Windows when ICONV support is available (#6410)
  • /vsimem/: implement append mode (#6049)
  • /vsistdin/: fix caching of first 1MB / VRT driver: read XML content from /vsistdin/ in a streaming compatible way (#6061)
  • /vsistdout/: flush when closing the handle (#6149)
  • Add VSIReadDirEx() with a limit on the number of files before giving up and corresponding VSIFilesystemHandler::ReadDirEx() virtual function
  • cpl_vsil_cache: rework to be able to work on very large files on 32bit systems
  • Add CPLThreadLocaleC class to use thread-specific locale settings (when available)
  • VSIWin32Handle::Flush(): add VSI_FLUSH config option that can be set to TRUE to force FlushFileBuffers(). (hack related to #5556)
  • Fix VSIL append mode in Windows (#6065)
  • Make CPLCreateMutexEx() support CPL_MUTEX_REGULAR; and fix CPL_MUTEX_ADAPTIVE to avoid continuing in code path for creation of recursive mutex
  • Add CPLWorkerThreadPool API
  • Add CPLGetThreadLocalConfigOption()
  • Fix CPL_LSBINT16PTR() and CPL_LSBINT32PTR() to work with non-byte pointer (#6090)
  • CPLRecodeStub(): add special case for CP437 -> UTF-8 when input is only printable ASCII
  • CPLHTTPFetch(): add LOW_SPEED_TIME and LOW_SPEED_LIMIT options
  • CPLGetValueType(): improve heuristics to avoid detecting some WKB strings as real numbers (#6128)
  • Add CPL_SHA256* and CPL_HMAC_SHA256 functions
  • Make CPLVirtualMemFileMapNew() work on all systems having mmap(), and thus GeoTIFF GTIFF_VIRTUAL_MEM_IO optimization too
  • Add VSI_MALLOC_VERBOSE() and similar macros to output an error message in case of failed alloc
  • CPLParseXMLString(): limit depth of elements to 10000
  • Win32 file management: handle files whose total file path length is greater than 255 characters in Open() and Stat()
  • Make CPLFormFilename(absolute_path, "..", NULL) truncate when possible
  • Add VSIGetDiskFreeSpace()
  • Implement CPLIsInf() for Solaris 11
  • Add a CPL_FINAL macro that expands to C++11 final keyword when C++11 is enabled, and use it in a few places
  • Avoid CPLEscapeString (CPLES_URL) encoding some characters unnecessarily (#5526)
  • Add CPLTestBool(), CPLTestBoolean(), CPLFetchBool()
  • Fix CPLGetValueType() to recognize D1 as a string and not a real number (#6305)
  • CPLFormFilename(): use '/' directory separator on Windows on /vsicurl_streaming/ files (#6310)
  • Add hack enabled by -DDEBUG_BOOL to detect implicit int->bool conversions that dislike MSVC (#6325)
  • Add hack to '#define NULL nullptr' when NULL_AS_NULLPTR is defined. Must be used together with -std=c++11 -Wzero-as-null-pointer-constant with GCC to detect misuses of NULL/nullptr (#6327)
  • Add VSIError mechanism to store errors related to filesystem calls, and use it for /vsis3/. Add new CPLE_ error numbers. (
  • Fix CPLsscanf() to be conformant regarding how space/tab/... separators are handled, so as to fix OGR GMT to be able to read coordinates separated by tabulations (#6453)


  • Change default value of GDAL_CACHEMAX to 5% of usable physical RAM
  • Allow open options name to be prefixed by @ to be silently ignored when not existing in driver options (RFC 60)
  • Honour NBITS metadata item when doing RasterIO() with non-nearest resampling (#6024)
  • GDALClientServer: pass open options to INSTR_Open call
  • Improve performance of GDALCopyWords() float->byte/int16/uint16 by using SSE2
  • Decorate prototypes of RasterIO() related operations with CPL_WARN_UNUSED_RESULT
  • Avoid deadlock when writing 2 datasets in 2 threads (#6163)
  • Remove obsolete symbols pure_virtual(), GDALCreateProjDef(), GDALReprojectToLongLat(), GDALReprojectFromLongLat() and GDALDestroyProjDef()
  • Remove obsolete non-template-based implementation of GDALCopyWords(). We don't support anymore such compilers
  • GDALJP2Box::ReadBoxData(): do not abort if memory allocation fails
  • Add GDALAdjustValueToDataType() in C API, and use it in GDALTranslate() and GDALWarp()
  • GDALDefaultOverviews::CreateMaskBand(): fix logic error related to writing per-band mask
  • Block cache: fix excessive memory consumption when dealing with datasets with different block sizes (#6226)
  • EXIFExtractMetadata(): fix potential 1-byte write buffer stack overflow
  • MDReader: do no attempt reading side-car files on /vsisubfile/ (#6241)
  • GDALCheckBandCount(): allow by default a maximum number of bands to 65536
  • GDALOpenInfo: add StealSiblingFiles() and AreSiblingFilesLoaded() methods
  • GDALOpenInfo::GetSiblingFiles(): give up after GDAL_READDIR_LIMIT_ON_OPEN (default=1000) files in the directory
  • GDALDefaultOverviews: add TransferSiblingFiles() method
  • GDALDriver::DefaultCreateCopy(): fix logic related to propagation of NBITS / PIXELTYPE metadata items as creation options
  • Reorder driver registration a bit so that formats with efficient identification are probed first
  • Add GDALIdentifyEnum (GDAL_IDENTIFY_UNKNOWN, GDAL_IDENTIFY_FALSE or GDAL_IDENTIFY_TRUE) for return values of Identify()
  • GDALLoadRPCFile(): load .rpc files from Ikonos products that have extra end-of-line character (#6341)
  • Export GDALRegenerateOverviewsMultiBand() symbol, but mostly for plugins (#6342)
  • Add GDAL_NO_AUTOLOAD to compile out the body of AutoLoadDriver (#6380)
  • Avoid ComputeStatistics(), GetHistogram() and ComputeRasterMinMax() to use only the first column of blocks in approximation mode for a raster whose shape of blocks is a square (#6378)
  • Add GDALGetDataTypeSizeBits() and GDALGetDataTypeSizeBytes().
  • GDALReadOziMapFile(): fix reading Ozi external files from virtual file systems (
  • Add CPLSetCurrentErrorHandlerCatchDebug() to enable custom error handlers not to intercept debug messages


  • RPC transformer: provide SSE2 accelerated transformer
  • RPC: fix off-by-half pixel computation of (pixel, line), and in bilinear and bicubic RPC DEM interpolation; fix off-by-one pixel registration for Pleiades RPC (#5993)
  • RPC: make RPCInverseTransformPoint() check convergence has been reached (#6162)
  • RPC DEM: optimize when DEM is in NAD83 or any other geodetic CS that transform as a no-op to WGS 84
  • RPC DEM: take into account vertical datum of the DEM when present to convert DEM elevations to ellipsoidal heights (#6084)
  • RPC DEM: do fallback cubic -> bilinear and bilinear -> near on DEM edges
  • RPC DEM: improve inverse transformer to validate error threshold and improve convergence (#6162, #6377)
  • TPS solver: discard duplicated GCP to avoid avoidable error, warning when 2 GCPs have same (pixel,line) but different (X,Y) or the reverse
  • Warper: rework multithreaded computations to use a thread pool rather than forking threads each time
  • Warper: avoid really excessive processing time for some warping with target areas completely off the source raster (especially when involving RPC) (#6182)
  • Warper: CreateKernelMask(): fix potential 32 bit integer overflow when using warp memory value > 2GB (#6448)
  • gdal_grid: add linear interpolation algorithm
  • gdal_grid: add invdistnn algorithm, variation on the existing inverse distance weighting algorithm with quadtree to search for points only in the neighborhood (#6038)
  • gdal_grid: fix crash in optimized mode with GCC 4.4 on 64bit (#5987)
  • gdal_grid: compile gdalgrid AVX optimization for Windows when supported by compiler
  • Add GDALTriangulationXXXX() API through libqhull
  • Sieve filter: fix crash on nodata polygons (#6096)
  • Sieve filter: improvement to walk through the biggest neighbour chain until we find a polygon larger than the threshold (#6296)
  • GDALFPolygonize(): factor implementation with integer case
  • GDALComputeMedianCutPCT(): fix to make it work with rasters with more than 2 billion pixels (#6146)
  • Overview: Make average and gauss methods aware of transparent color table entries (#6371)


  • gdalinfo: workaround bug in proj <= 4.9.1 on datasets with a SRS with a vertical shift grid (#6083)
  • gdal_translate: detect more reliably if specified bands are not in default order
  • gdal_translate: fix -a_nodata with negative values on rasters that have PIXELTYPE=SIGNEDBYTE; fix preserving PIXELTYPE=SIGNEDBYTE with VRT
  • gdal_translate: fix random behaviour when -scale is used without source bounds (#6455)
  • gdal_rasterize: do on-the-fly reprojection of input vector onto output raster
  • gdal_rasterize: rasterize: always create output with 1/2 cell buffer of input geometry envelope (#6058)
  • gdal_rasterize: add the -dialect option
  • gdal_rasterize: accept NaN as a valid value for -init / -burn (#6467)
  • gdalwarp: add -doo option to specify open options of (existing) output dataset
  • gdalwarp: if RPC_DEM warping option is specified, use exact transformer by default (#5993)
  • gdalwarp: make it honour nodata value of existing dataset (if -dstNoData isn't explicitly specified)
  • gdalwarp: do not propagate STATISTICS_ of second or following source datasets
  • gdalwarp: do not emit warning when using -cutline with a SRS and the source raster has RPC or GEOLOCATION
  • gdalwarp: check that the cutline is valid after transformation/reprojection
  • gdalwarp: better deal when dealing with a mix of RGB and RGBA datasets as input
  • gdalwarp: fix -srcnodata to not put garbage values as target dstnodata (#6315)
  • gdalwarp: densify cutline to avoid invalid geometry after reprojection to source raster, especially in the RPC case (#6375)
  • gdalserver: add a -nofork mode (Unix only for now), so that multiple clients can connect to the same dataset. Useful for safe 'concurrent' updates
  • add script
  • fix error on a raster with less than 3 bands that resulted in a 'IndexError: list index out of range'
  • Change EPSG:3785 / EPSG:900913 into EPSG:3857 (#5622)
  • add Leaflet template (
  • add -q switch for quiet mode
  • gdaldem: correctly deal with NaN as nodata value (#6066)
  • gdaldem color-relief: deal with the case of repeated entries with the same value and the input raster has pixels that match that value exactly (#6422)
  • gdaladdo: emit error message if passed an invalid dataset name (#6240)
  • gdaladdo: do not silence warnings when opening in update mode, if the open is successful
  • gdalbuildvrt: fix potential crash when using -b switch (#6095)
  • gdalbuildvrt: accept nan as value for -srcnodata and -vrtnodata
  • gdalbuildvrt: return non zero return code if the flush of the VRT to disk failed
  • takes again into account -n flag (#6067)
  • gdalbuildvrt / gdal_translate / VRT: use floating point values for source and destination offsets and sizes (#6127)
  • fix to run with GDAL 2.0 gdal.InvGeoTransform() signature
  • Add * from gdalnumeric to eval namespace again, to fix 2.0 regression that made for example 'log10(A)' to no longer work (

Python samples:

  • update to protocol 3


  • when writing with floating-point values, ensure at least one value has a decimal point to avoid issues with some readers (#6060)

BMP driver:

  • BMP: avoid too big color table allocation in case of wrong iClrUsed value

BLX driver:

  • converted to support VirtualIO

ECRG driver:

  • change subdataset definition to make sure that they only consist of frames of same scale (#6043)
  • fix base34 decoding and Windows filename handling (#6271)

ECW driver:

GeoRaster driver:

  • fix deflate read error depending on endianness (#6252)

GIF driver:

  • libgif: partial resync with giflib master (but keep ABI of 4.1.6)
  • fix crash when CreateCopy a source with one color in the color table

GMT driver:

  • validate raster dimensions on opening, and acquire mutex in dataset destructor

GPKG driver:

  • write support: fix various issues in update scenarios when interacting with the GDAL block cache that could result in lost/corrupted band data to be written in tiles (#6309)
  • write support: fix potential use of freed sqlite temporary DB handle when generating overviews with partial tiles (#6335)
  • write support: fix potential crash in scenarios when block cache is full (#6365)
  • write support: fix inversion of row/column in one of the SQL request involved in partial tiles management (#6339)
  • fix generation of files with 1-band paletted input dataset. Also improve the logic to retrieve color palette when forcing BAND_COUNT=1 on opening (#6450)

GTiff driver:

  • add NUM_THREADS creation and open options to enable multi-threaded compression
  • fix GTiffDataset::IsBlockAvailable() wrong behaviour when compiling against internal libtiff, when a BigTIFF file has a TileByteCounts with LONG/4-byte counts and not LONG8 (#6001)
  • Correctly take into account overridden linear units for a geotiff with a EPSG PCS code (#6210, #4954)
  • make VirtualMemIO() work with non native endianness
  • improve VirtualMemIO() performance in tiled Contig read to single band copy
  • improve single band tiled VirtualMemIO reading
  • improve DirectIO() to work on tiled uncompressed geotiff, for non-resampling and nearest resampling cases. Also improve performance of resampling cases on un-tiled files
  • fix DirectIO() mode with complex types and inverted endianness (#6198)
  • optimize writing of 12-bit values
  • implement lazy loading of .aux.xml and .tfw/.wld
  • Internal libtiff: update to CVS HEAD post libtiff 4.0.6
  • make SetColorInterpretation(GCI_AlphaBand) work on a 5 band or more GeoTIFF (#6102)
  • automatically set PHOTOMETRIC=RGB if manually assigning color interpretation Red,Green,Blue to band 1,2,3 before directory crystallization (#6272)
  • add GEOTIFF_KEYS_FLAVOR=ESRI_PE creation option to write EPSG:3857 in a ESRI compatible way (#5924)
  • call XTIFFInitialize() in LibgeotiffOneTimeInit() as the former isn't thread-safe, so better call it from the later which is thread-safe (#6163)
  • fix reading and writing angular units different from degree (namely arc-second, arc-minute, grad, gon and radian) (#6171)
  • do not use VirtualMemIO optimization on compressed /vsimem/ files (#6195)
  • correctly set GTRasterTypeGeoKey=RasterPixelIsPoint if AREA_OR_POINT=Point but there is no SRS set (#6225)
  • improve a bit error detection when writing
  • check free space before writing (only for big, non sparse, uncompressed)
  • do not read large 'one row' JBIG compressed files with the scanline API (#6264)
  • Fix SetMetadata() to properly clear existing PAM metadata (complement to #5807)
  • prevent potential out of bounds read/write to TIFFTAG_EXTRASAMPLES (#6282)
  • do not use first directory as potential mask, to avoid assertion in GTiffDataset::SetDirectory() (#6287)
  • reject files with strips/tiles/scanlines bigger than 2 GB to avoid 32 bit integer overflow. Also in case of files with Contig PlanarConfiguration do not make reading one block for band 2 OK when reading for band 1 issued an error (#6288)
  • GTIFFWriteDirectory(): avoid memory leak of codec related memory (#2055)
  • Make ALPHA=NO in CreateCopy() cancel alpha color interpretation even if present in source raster
  • fix problem with implicit overviews of JPEG-compressed files (#6308)
  • fix compilation problem with internal libtiff if DEFER_STRILE_LOAD isn't defined (which is not the default configuration) (
  • use more appropriate error message when 4GB threshold is reached with external overviews, and try to make doc of BIGTIFF=IF_NEEDED/IF_SAFER clearer (#6353)

HDF4 driver:

  • Skip quotation mark when parsing HDF-EOS metadata.

HDF5 driver:

HF2 driver:

  • fix reading side of the driver to work on architectures where char is unsigned, like PPC or ARM (#6082)

HFA driver:

  • when reading projection, preserve EPSG code if AutoIdentifyEPSG() identified the SRS, even if a PE string is present (#6079)
  • keep TOWGS84 even when using ESRI PE string (#6158)
  • fix crashes on corrupted files (#6208, #6286)

INGR driver:

  • check that RLE decoding produced the expected number of bytes and error out otherwise; test that 'random' line seeking actually works

JPEGLS driver:

JP2ECW driver:

  • honour psExtraArg->eResampleAlg when upsampling (#6022)

JP2KAK driver:

  • honour psExtraArg->eResampleAlg when upsampling (#6022)
  • try rounded dimensions to decide if the data is being requested exactly at a sub-resolution
  • support v7.7 on Unix (additional changes potentially needed on Windows)

JP2OpenJPEG driver:

  • Safer multi-threaded use

JPEG driver:

  • add USE_INTERNAL_OVERVIEWS open option (default to TRUE as in recent versions, can be set to FALSE to hide internal overviews

KMLSuperOverlay driver:

  • fix 2.0 regression with some RasterIO() requests involving resampling (#6311)
  • recognize datasets that have a intermediate <Folder> that forms a <Document><Folder><Region/><GroundOverlay/> structure (#6343)

LCP driver:

  • fix wrong use of endianness macros to fix behaviour on big-endian hots

Leveller driver:

  • update to v9 read support (#5632,)

MBTiles driver:

  • add raster write support
  • fix so that datasets whose lowest min zoom level is 16 or above are recognized
  • be robust to invalid 'bounds' at dataset opening (#6458)

MEM driver:

  • avoid 32 bit overflows

NetCDF driver:

  • add support for reading NC4 unsigned short attributes and variables (#6337) * read correctly nodata values in [128,255] range for (unsigned) Byte data type (#6175)
  • implement Get/SetUnitType() using the standard units attribute (
  • optimize IReadBlock() and CheckData() handling of partial blocks in the x axis by re-using the GDAL block buffer instead of allocating a new temporary buffer for each block (#5950)
  • full read/write support for new NetCDF4 types NC_UBYTE, NC_USHORT, NC_UINT and NC_STRING for variables (except for NC_STRING) and attributes (
  • add support for the geostationary projection (#6030)
  • fix one byte heap write overflow in NCDFTokenizeArray() (#6231)
  • fix potential buffer overflows with uses of nc_inq_varname(), nc_inq_attname() and nc_get_att_text() (#6227)
  • validate that gridmapping:GeoTransform has 6 values (#6244)
  • fix wrong use of deallocator when writing a GEOLOCATION array, and other issues
  • limit number of bands reported to 32768 by default
  • validate raster dimensions
  • validate content of NC_GLOBAL#GDAL variable (#6245)

NGSGEOID driver:

  • make it work on > 2GB file

NITF driver:

Northwoord driver:

  • fix computation of intermediate color table values on non-Intel platforms (#6091)

NTv2 driver:

OpenJPEG driver:

  • do not expose block dimensions larger than dataset dimensions to avoid wasting memory (#6233)

PCIDSK driver:

  • Remove the old driver (#6172)

PDF driver:

  • add PDFium library as a possible back-end. Initial support contributed by Klokan Technologies GmbH (
  • workaround a bug of PoDoFo 0.9.0 by avoiding loading of vector content in raster-only mode (doesn't prevent the crash if reading the vector layers) (#6069)
  • make OGC BP registration work with media box where bottom_y is negative and top_y = 0 (in non rotated case)
  • make OGC BP registration work with media box where min_x != 0 (in non-rotated case)
  • correctly take into account non-meter linear units with OGC BP encoding, and add support for US FOOT (#6292)

PDS driver:

  • change default values of PDS_SampleProjOffset_Shift and PDS_LineProjOffset_Shift to 0.5 (#5941)
  • fix nodata value for UInt16 to be 0 (#6064)
  • accept 'ODL_VERSION_ID = ODL3' in header (#6279)

PGChip driver:

  • driver removed from sources

PLScenes driver:

  • PLScenes V0: avoid opening raster to generate dummy .aux.xml

PNG driver:

  • Support writing 1, 2 or 4 bit single band
  • Add NBITS creation option
  • fix XML of creation option list
  • Update internal libpng to 1.2.56

PostgisRaster driver:

  • avoid Identify() to recognize OGR PostgreSQL connection strings with schemas option and cause loud 'QuietDelete' (#6034)

Raw drivers:

  • better support for direct read of more than 2GB in single gulp (untested though)

RIK driver:

  • fix Identify() method to recognize again non-RIK3 RIK datasets (#6078)

RMF driver:

ROIPAC driver:

  • Support offset and scale band (#6189)

VICAR driver:

  • change PDS_SampleProjOffset_Shift and PDS_LineProjOffset_Shift default values to 0.5 (#5941)
  • fix loss of precision in scale and offset

VRT driver:

  • expose implicit 'virtual' overviews for VRT whose bands are made of a single SimpleSource/ComplexSource
  • gdalvrt.xsd: Add capitalized versions of true and false (#6014)
  • GetSingleSimpleSource(): check there's a single source (#6025)
  • honour VRTRasterBand NBITS metadata with SimpleSource and ComplexSource
  • properly take into account nodata value declared at VRT band level when doing resampling with non-nearest
  • honour relativeToVRT when using AddBand() to add a VRTRawRasterBand (
  • VRT warp: fix crash with implicit overviews and destination alpha band (#6081)
  • make GetDefaultHistogram() on a sourced raster band save the result in the VRT (#6088)
  • serialize NODATA and NoDataValue items with %.16g, e.g. so as to be able to hold large int32 nodata values (#6151)
  • VRTSourcedRasterBand: make ComputeRasterMinMax() and ComputeStatistics() forward bApproxOK to overview band (useful for implicit overviews)
  • make CreateCopy() preserve NBITS metadata item
  • avoid loading sibling file list if not available
  • VRT raw: don't truncate last figure of ImageOffset if there are left space padding (#6290)
  • VRTWarpedDataset::SetMetadataItem(): fix crash when calling with name=SrcOvrLevel and value=NULL (#6397)
  • Warped VRT: fix deadlock in situation where warped VRT datasets are read in multiple threads and the block cache reaches saturation. Also add a GDAL_ENABLE_READ_WRITE_MUTEX config option that can be set to NO to disable the read/write mutex mechanism in cases where it would deadlock (#6400)

WMS driver:

  • add a IIP (Internet Imaging Protocol) minidriver
  • limit number of zoom levels for ArcGIS MapServer JSon (#6186)
  • determine a resolution that will not result in a number that is larger than the maximum size of an integer. Any value that exceeds the maximum size of an integer will raise an invalid dataset dimensions error. (

XYZ driver:

  • be more robust to not exactly equal X and Y spacing (#6461)

OGR 2.1.0 - Overview of Changes


  • Add OGREditableLayer class to add editing capabilities to drivers with none or limited editing capabilities
  • OGRGeometry: add DelaunayTriangulation() method (GEOS >= 3.4)
  • OGRGeometry and derived classes: implement copy constructor and assignment operator (#5990)
  • OGRGeometry: Fix result of Equals on POINT EMPTY with POINT(0 0)
  • OGRFeature SetField(): more type conversions allowed, particularly with array types
  • OGRFeature::SetGeometry()/SetGeometryDirectly(): make it work when passed geometry is the currently installed geometry (#6312)
  • OGR SQL: do not silently skip NULL values in the first records when evaluating a SELECT DISTINCT (#6020)
  • OGR SQL: correctly sort NULL values in first positions (#6155)
  • Add OGRUpdateFieldType()
  • Decorate a few functions/methods of the OGR layer API with CPL_WARN_UNUSED_RESULT
  • WKT export: use 15 significant figures, instead of 15 figures after decimal point (#6145)
  • WKT export: do not append .0 after non-finite values (#6319)
  • Fix typo in definition of name of OGR_FD_ReorderFieldDefns (final s was missing)
  • OGRLayer::SetIgnoredFields(): properly reset state of non first geometry fields (#6283)
  • Make OGRLayer::SetSpatialFilter(GetSpatialFilter()) work with non empty spatial filter (#6284)
  • OGRLayerDecorator: add missing CreateGeomField()
  • OGRLayer::Erase(): do not discard input geometries that have no intersection with method layer (#6322)
  • OGRLayer::Erase(): Speedup = ~70%
  • Add OGRPreparedGeometryContains()
  • Use prepared geometry intersects as pretest in layer Intersection, Union, and Identity methods if requested. Use prepared geometry containment as pretest in layer Intersection method if requested.
  • Bail out from layer algebra methods if GEOS calls fail and not SKIP_FAILURES.
  • OGR_G_SetPoints(): error out if padfX or padfY == NULL, do not change coordinate dimension to 3D when pabyZ == NULL, fix optimization on linestring to call setPoints() only if the strides are the ones of a double, not 0 as incorrectly done before (#6344)
  • OGRParseDate(): more strict validation to reject invalide dates (#6452)


  • Upgrade to EPSG database v8.8
  • Add support for SCH (Spherical Cross-track Height) projection
  • Optimize reprojection typically between WGS84 based SRS and WebMercator
  • Correctly transform Mercator_2SP and _1SP to ESRI Mercator, and back from ESRI Mercator to Mercator_2SP (#4861)
  • No longer enforce C locale if running against latest proj that is locale safe (4.9.2 or later)
  • EPSGGetPCSInfo(): use pcs.override.csv in priority over pcs.csv to read projection name, UOM, UOMAngle, GeogCS, etc... (#6026)
  • morphToESRI(): use GCS_WGS_1972 as GCS name for EPSG:4322 (#6027)
  • morphToESRI(): use Mercator_Auxiliary_Sphere projection for EPSG:3857. morphFromESRI(): map Mercator_Auxiliary_Sphere to EPSG:3857 (#5924)
  • Align hard-coded WKT of well known GCS definitions of WGS84, WGS72, NAD27 and NAD83 with the WKT of their EPSG def (#6080)
  • morphFromESRI(): special case with PROJCS name 'WGS_84_Pseudo_Mercator' (#6134)
  • OSR C API: fix declarations of OSRSetAxes() and OSRSetWagner(), and add missing OSRSetHOMAC(), OSRSetMercator2SP() and OSRSetTPED() (#6183)
  • Recognize EPSG 9835 method (Lambert Cylindrical Equal Area (Ellipsoidal)), needed for EPSG:6933 PCS for example
  • importFromProj4/exportToProj4(): rework linear unit conversion between WKT name/values and proj4 unit name, and extend its scope in WKT to proj4 conversions
  • OSR ESRI .prj: add support for reading custom ellipsoid in Parameters line
  • on import of +proj=geos, if +sweep=x is used then store it as a proj4 extension node (#6030)


  • ogrinfo / ogr2ogr: implement @filename syntax for -sql and -where
  • ogr2ogr: prevent the -gt setting from overriding transaction group size of 1 set by skipfailures earlier (#2409)
  • ogr2ogr: warn if -zfield field does not exist in source layer
  • ogr2ogr -skip: rollback dataset transaction in case of failure (#6328)
  • ogr2ogr: fix -append with a source dataset with a mix of existing and non existing layers in the target datasource (#6345)
  • ogr2ogr: imply quiet mode if /vsistdout/ is used as destination filename
  • ogr2ogr: make -dim and -nlt support measure geometry types


  • fix GetNextFeature() on a newly create table (#6109)
  • defer 'CartoDBfycation' at layer closing
  • optimize feature insertion with multiple rows INSERT

CSV driver:

  • add editing capabilities of existing files
  • add HEADERS open option to force OGR to handle numeric column names. (PR #63)
  • add EMPTY_STRING_AS_NULL=YES/NO open option
  • implement compatibility enhancements for GeoCSV specification (#5989)
  • fix detection of TAB delimiter in allCountries.csv when the first line has a comma (#6086)
  • fix issues with leading single quote, and missing first line after ResetReading(), when parsing allCountries.txt (#6087)
  • speed-up GetFeatureCount() on allCountries.txt
  • on CreateDataSource() with a .csv name, do not try to open other existing .csv files in the directory
  • make CreateGeomField() returns OGRERR_NONE in case of success instead of OGRERR_FAILURE (#6280)
  • avoid adding trailing comma in header line when writing 'WKT,a_single_field'

DGN driver:

  • add partial 3D transformation support for cell headers

DXF driver:

  • detect files without .dxf extension (#5994)
  • fix handling of ELLIPSE with Z extrusion axis = -1 (#5705)
  • take into account full definition of spline entity (degree, control points, weights and knots) when stroking splines (#6436)
  • better handling of various object coordinate systems found in dxf files for point, line, polyline, spline and ellipse entities. Add anchor position to text styles. Remove polygon/polyface mesh parsing from polyline entity (#6459)

ElasticSearch driver:

FileGDB driver:

  • make CreateFeature() honour user set FID, and implement more fine grained transaction for Linux/Unix
  • give a hint of using FileGDB SDK 1.4 is FileGDB compression is used

GeoJSON driver:

  • Add editing capabilities of existing files
  • Add ARRAY_AS_STRING=YES open option
  • Use '%.17g' formatting by default for floating-point numbers and add SIGNIFICANT_FIGURES layer creation option (#6291)
  • add a json_ex_get_object_by_path() function
  • fix crash on null / non-json object features (#6166)
  • serialize string values that are valid JSon dictionary or array as it (ie do not quote them)
  • make sure there's enough space to write the FeatureCollection bbox (#6262). Also avoid duplicating FeatureCollection bbox if source has one (trunk only)
  • Export POINT EMPTY as having a null geometry, instead as of being POINT(0 0) (#6349)
  • Do not 'promote' a null field to OFTString type if it had another type before (#6351)

GME driver:

  • Driver removed. Maps Engine being shut down at the end of January 2016.

GML driver:

GPKG driver:

  • make it accept files with non standard extension if they still have the correct application_id (#6396); also accept the .gpkx extension that may be used for extended geopackages
  • emit warning when generating a database without .gpkg/.gpkx extension (#6396)
  • as GPKG 1.1 uses a different application_id, emit a more specific warning if the application id starts with GPxx (but is not GP10). Add GPKG_WARN_UNRECOGNIZED_APPLICATION_ID config option to avoid the warning
  • correct scope of gpkg_geom_XXXXX extensions to be read-write, and allow reading geometry types CURVE or SURFACE
  • avoid trying to insert a gpkg_geom_XXXX extension if already done (#6402)
  • writer: implement strategy to flush partial_tiles temporary database when it becomes too big (#6462)
  • writer: when writing to GoogleMapsCompatible tiling scheme, better deal with source rasters in EPSG:4326 with latitude = +/-90 (#6463)
  • fix generation of files with 1-band paletted input dataset. Also improve the logic to retrieve color palette when forcing BAND_COUNT=1 on opening (#6450)

GPX driver:

  • fix crash when parsing a 'time' extension element at route/track level (2.0 regression, #6237)

ILI driver:

  • ILI1: Support for Surface polygon rings spread over multiple geometry records
  • ILI1: add string TID support (
  • Fix crash with models using types derived from INTERLIS
  • Fix memory leaks (#6178)

JML driver:

  • remove arbitrary limitation preventing from reading geometries with <gml:coordinates> larger than 10 MB (#6338)

KML driver:

LIBKML driver:

  • for documents without folder, use document name when available as name of layer (#6409)

Memory driver:

  • add support for sparse feature IDs
  • add ADVERTIZE_UTF8 layer creation option

MITAB driver:

  • Add support for block sizes other than 512 bytes in .map files, for MapInfo 15.2 compatibility (#6298)
  • write correct datum id for EPSG:3857
  • read MID files with TAB delimiter and empty first field (#5405)
  • use projection code 29 when exporting non-Polar Lambert Azimuthal Equal Area (#5220)
  • fix crashes when parsing invalid MIF geometries (#6273)

MSSQLSpatial driver:

  • Implement MSSQL bulk insert (#4792)
  • do not treat a primary key that is not of integer type as the FID (#6235)

NTF driver:

  • fix potential buffer overflows when reading too short lines (#6277)

ODBC driver:

  • remove limitations to 500 columns

ODS driver:

  • fix loss of precision in formula computation

OpenFileGDB driver:

  • do not emit warning if SDC/CDF table detected and that FileGDB driver is present
  • fix min/max on columns without indices (#6150)
  • build correct geometry for a multi-part wkbMultiLineStringZ (#6332)

OSM driver:

  • correct fields ids for the (non frequently used) Node message
  • do not override 'our' osm_id (the node, way or relation id) with a tag named 'osm_id' (#6347)

PG driver:

  • Add PRELUDE_STATEMENTS and CLOSING_STATEMENTS open option to be for example able to specify options, like statement_timeout, with pg_bouncer
  • Fix 2.0 regression when overwriting several existing PostGIS layers with ogr2ogr (#6018)
  • Update PG, PGDump and CartoDB drivers to correctly export POINT EMPTY for PostGIS 2.2
  • avoid reseting error potentially emitted by ExecuteSQL() (#6194)
  • sanitize management of quoting for FID column at layer creation
  • fix to get SRID on result layer with PostGIS 2.2
  • in copy mode (the default on layer creation), do not truncate the concatenated string list to the field width (#6356)
  • make such that GEOMETRY_NAME layer creation option is honoured in ogr2ogr when the source geometry field has a not-null constraint (#6366)
  • read and set DESCRIPTION metadata item from/into pg_description system table; add DESCRIPTION layer creation option
  • support int2[] and numeric[] types, better map float4[] type
  • remove code that was intended to handled binary cursors as it cannot be triggered
  • fix append of several layers in PG_USE_COPY mode and within transaction (ogr2ogr -append use case) (#6411)

PGDump driver:

  • fix issue with case of ogc_fid field in case the FID layer creation option is not set by user or by ogr2ogr (related to #6232)
  • in copy mode (the default on layer creation), do not truncate the concatenated string list to the field width (#6356)
  • make such that GEOMETRY_NAME layer creation option is honoured in ogr2ogr when the source geometry field has a not-null constraint (#6366)
  • set DESCRIPTION metadata item from/into pg_description system table; add DESCRIPTION layer creation option

Shapefile driver:

  • accept opening standalone .dbf files whose header length is not a multiple of 32 bytes (#6035)
  • fix REPACK crash on shapefile without .dbf (#6274)
  • add capability to restore/build a missing .shx file when defining SHAPE_RESTORE_SHX to TRUE (#5035)

SQLite/Spatialite driver:

  • support file:xxx URI syntax (derived from patch by joker99, #6150)
  • fix heuristics in OGRSQLiteSelectLayer::GetExtent() to not be used when there's a sub SELECT (#6062)
  • fix crash on GetLayerByName('non_existing_table(geom_column)') (#6103)
  • fix OGRSQLiteSelectLayerCommonBehaviour::GetBaseLayer() to no longer 'eat' consecutive characters in layer name (#6107)
  • Spatialite: turn debug messages warning about update not being supported because of missing or too old spatialite version as errors, and return NULL to the caller (#6199)
  • fix memleak in OGRSQLiteTableLayer destructor when updating geometry_columns_time
  • VFS: increase mxPathname to 2048 by default, and provide OGR_SQLITE_VFS_MAXPATHNAME config option to be able to configure that higher if that would be needed. Useful when dealing with very long names like /vsicurl/.... with AWS S3 security tokens
  • VFS: do not probe -wal files on /vsicurl/

SXF driver:

  • fix wrong use of endianness macros to fix behaviour on big-endian hots
  • add recoding from CP1251 for TEXT attribute that is now decoded
  • fix various issues (#6357)

VRT driver:

  • implement CloseDependentDatasets()
  • fix editing with 'direct' geometry mode which could cause attribute column to be empty (#6289)
  • fix crash with a OGRVRTWarpedLayer using a source layer that would have non geometry column (unlikely to happen currently as this would require explicit disabling it, but more likey with following commit that createe VRT non-spatial layer implictly when the source is non-spatial, linked to #6336)
  • avoid creating an implicit wkbUnknown geometry field when the source has no geometry column and there's no XML elements related to geometry fields (#6336)

XLSX driver:

  • fix reading sheets with more than > 26 columns and 'holes' (#6363)

XPlane driver:

  • extend ICAO identifiers to 5 digits (#6003)

SWIG Language Bindings

All bindings:

Java bindings:

  • Fix typemap for input parameter of type GIntBig (fixes GetFeature(long), DeleteFeature(long), etc...) (#6464)
  • Bump minimal java version to 1.5 in case SWIG generates anotations (#6433, patch by Bas Couwenberg)
  • GNUmakefile: add -f in rm commands
  • GNUmakefile: add support for all hardening buildflags

Perl bindings:

  • Fix #6050: string formatting in croak.
  • Perl Makefile.PL: add support for all hardening buildflags (#5998)
  • use strict and warnings in overridden constructors.
  • add $VERSION to ogr_perl.i (, which is required by
  • Add some basic module info for CPAN.
  • Bugfix for Geo::OGR::Feature->new().
  • Add many utility level algorithms as methods to various classes.
  • New class for XML stuff
  • New Makefile.PL, which can download and build GDAL. This allows automatic testing of the CPAN module.
  • Wrap VSIStdoutSetRedirection and allow creating datasets via an object, which can write and close.
  • Geo::OGR::Driver and Geo::OGR::DataSource are now Perl wrappers for respective GDAL classes.
  • Add to the error stack also errors from the bindings
  • Fix sending utf8 from Perl to GDAL. Should also remove some "uninitialized value" warnings.
  • ReadTile and WriteTile methods for Dataset, ReadTile accepts now tile size and scaling algorithm.
  • Improved Parent - Child management.
  • Improved support for 64bit ints.
  • Measures support in Geometry class.
  • Many new tests

Python bindings:

  • make Feature.ExportToJson() output boolean value for a boolean field
  • support floating point coordinates for the source windows of Band.ReadRaster() and Band.ReadAsArray()
  • fix build with SWIG 3.0.6 (#6045)
  • make gdal.OpenEx() throw a Python exception in case of failed open when exceptions are enables with gdal.UseExceptions() (#6075)
  • Disable opening a NumPy dataset with a filename returned by gdal_array.GetArrayFilename(() unless GDAL_ARRAY_OPEN_BY_FILENAME is set to TRUE
  • disable the warning about using deprecated wkb25DBit constant as it uses a trick that prevents the bindings from being used by py2exe / pyinstaller (#6364)
Last modified 8 years ago Last modified on May 6, 2016, 8:24:20 AM
Note: See TracWiki for help on using the wiki.