#5891 closed defect (fixed)
Export projections sometimes return Unicode, e.g. EPSG:42104
Reported by: | Mike Taves | Owned by: | hobu |
---|---|---|---|
Priority: | normal | Milestone: | 2.0.0 |
Component: | PythonBindings | Version: | 1.11.1 |
Severity: | normal | Keywords: | |
Cc: |
Description
With GDAL for Python 2, several "ExportTo
..." methods sometimes return a Unicode result rather than a string. This may cause issues with SetProjection
, which expects a string. Specifically, EPSG:42104: NAD83 / MTM zone 8 Québec.
Consider the following Python code:
from osgeo import osr from osgeo import gdal osr.UseExceptions() gdal.UseExceptions() srs = osr.SpatialReference() srs.ImportFromEPSG(42104) for m in dir(srs): if m.startswith('ExportTo'): print(m + ': ' + str(type(getattr(srs, m)()))) srs_wkt = srs.ExportToWkt() print(srs_wkt) drv = gdal.GetDriverByName('MEM') ds = drv.Create('', 2, 3) ds.SetProjection(srs_wkt) # raises TypeError: in method 'Dataset_SetProjection', argument 2 of type 'char const *'
With output and error:
ExportToMICoordSys: <type 'str'> ExportToPCI: <type 'list'> ExportToPrettyWkt: <type 'unicode'> ExportToProj4: <type 'str'> ExportToUSGS: <type 'list'> ExportToWkt: <type 'unicode'> ExportToXML: <type 'unicode'> PROJCS["NAD83 / MTM zone 8 Qubec",GEOGCS["GRS80",DATUM["GRS_1980",SPHEROID["GRS_1980",6378137,298.257222101]],PRIMEM["Greenwich",0],UNIT["Decimal_Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-73.5],PARAMETER["scale_factor",0.9999],PARAMETER["false_easting",304800],PARAMETER["false_northing",0],UNIT["Meter",1],AUTHORITY["EPSG","42104"]] Traceback (most recent call last): ... File "/usr/local/lib64/python/site-packages/GDAL-1.11.1-py2.6-linux-x86_64.egg/osgeo/gdal.py", line 722, in SetProjection return _gdal.Dataset_SetProjection(self, *args) TypeError: in method 'Dataset_SetProjection', argument 2 of type 'char const *'
Note affected methods are ExportToPrettyWkt()
, ExportToWkt()
and ExportToXML()
. Inspecting their output, no Unicode characters were actually found! However, cubewerx_extra.wkt (line 26) appears to be Unicode, as I see "Québec" in the name.
Furthermore, should SetProjection
accept Unicode inputs? A simple workaround is just to encode the string in ASCII, e.g. ds.SetProjection(srs_wkt.encode('ascii'))
.
Python 3 is not affected.
Change History (2)
comment:1 by , 9 years ago
Milestone: | → 2.0 |
---|---|
Resolution: | → fixed |
Status: | new → closed |
Easiest fix was r28779 "cubewerx_extra.wkt: replace Latin1 eacute character (first e in Quebec) by ASCII e (#5891)"
It appears this was the only occurrence on a non-ASCII character in WKT