[gdal-dev] Burn 3d-lines from python

Even Rouault even.rouault at spatialys.com
Wed Aug 12 02:25:49 PDT 2015


Le mardi 11 août 2015 11:36:32, Simon Lyngby Kokkendorff a écrit :
> Hello list,
> 
>   I'm trying to rasterize some 3d-lines programtically from python. Using
> gdal 1.11.2 from the osgeo4w64 environment. Seems to work fine, except that
> I get a z-offset of 255 (one byte) in my output raster. Works fine if I use
> gdal_rasterize with the -3d option.
> 
>  The following python code should reproduce the problem:
> 
> from osgeo import ogr,gdal
> print gdal.__version__
> georef=[0,1.0,0,10.5,0,-1.0]
> m_drv_ogr=ogr.GetDriverByName("Memory")
> line_ds = m_drv_ogr.CreateDataSource( "dummy")
> layer = line_ds.CreateLayer( "lines", None, ogr.wkbLineString25D)
> layerdefn=layer.GetLayerDefn()
> line=ogr.Geometry(ogr.wkbLineString25D)
> line.AddPoint(0,5.5,0)
> line.AddPoint(10,5.5,10)
> feature=ogr.Feature(layerdefn)
> feature.SetGeometry(line)
> res=layer.CreateFeature(feature)
> layer.ResetReading()
> m_drv_gdal=gdal.GetDriverByName("MEM")
> raster_ds=m_drv_gdal.Create("dummy",10,10,1,gdal.GDT_Float64)
> raster_ds.SetGeoTransform(georef)
> ok=gdal.RasterizeLayer(raster_ds,[1], layer, options=["BURN_VALUE_FROM=Z"])
> A=raster_ds.ReadAsArray()
> print A
> 
> Will output:
> 
> [[   0.    0.    0.    0.    0.    0.    0.    0.    0.    0.]
>  [   0.    0.    0.    0.    0.    0.    0.    0.    0.    0.]
>  [   0.    0.    0.    0.    0.    0.    0.    0.    0.    0.]
>  [   0.    0.    0.    0.    0.    0.    0.    0.    0.    0.]
>  [   0.    0.    0.    0.    0.    0.    0.    0.    0.    0.]
>  [ 255.  256.  257.  258.  259.  260.  261.  262.  263.  264.]
>  [   0.    0.    0.    0.    0.    0.    0.    0.    0.    0.]
>  [   0.    0.    0.    0.    0.    0.    0.    0.    0.    0.]
>  [   0.    0.    0.    0.    0.    0.    0.    0.    0.    0.]
>  [   0.    0.    0.    0.    0.    0.    0.    0.    0.    0.]]

Simon,

looking closer, the issue is that the Python bindings of gdal.RasterizeLayer() 
have a default constant burn value of 255 if not explicitly specified. This 
constant burn value comes in addition to the other source of burning, such as 
Z.
So the fix is to add burn_values = [0] as a keyword of gdal.RasterizeLayer()

I guess the rationale of that was that without any option, the rasterizing 
would burn 255, which is a reasonable default. But it is true that it is 
rather unexpected if you specify BURN_VALUE_FROM=Z

Even


> 
> Cheers,
> Simon Kokkendorff, Dansish Geodata Agency

-- 
Spatialys - Geospatial professional services
http://www.spatialys.com


More information about the gdal-dev mailing list