[gdal-dev] Converting multilayer KML to single layer output

Rutger kassies at gmail.com
Thu Dec 1 00:45:36 PST 2016


Hey,

Thank you for your reponse. 


Even Rouault-2 wrote
> I can't reproduce your issue with the file not being terminated with ]}
> 
> Hum maybe this is due to trying to append several layers with layers[1:]
> syntax. You should 
> probably 
> 
> Note that currently layers must be provided with an array, and not without
> a string 
> (otherwise it iterates over each character of the string...) This is a
> defect I'm going to fix.
> 
> Note also that the 'overwrite' mode is without effect here (and will
> actually not do what you 
> want). overwrite is for multi-layer datasets where you want to overwrite
> an existing layer. In 
> the GeoJSON driver, this is not implemented. You should just remove it and
> in that case the 
> whole file will be overwritten.

You're right of course about 'layers' not accepting a string if you try to
specify a single layer, i noticed that mistake in my code later on as well.
Its not affecting the behavior i'm experiencing. I work in the Jupyter
Notebook and that moves you away from the console where the GDAL warnings
are printed, which is why i didn't noticed it right away. GDAL prints a nice
'ERROR 1: Couldn't fetch requested layer 'a'!' warning which makes the
sliced string obvious. 


Even Rouault-2 wrote
> Actually I've just tested the following successfully (with trunk)
> 
> from osgeo import gdal
> 
> gdal.VectorTranslate('out.json', 'src', layerName = 'outlayer', format =
> 'GeoJSON', 
> accessMode='append', layers = ['poly', 'poly2', 'poly3'])

Good to know that it should work like that, i started off with something
similar. 

After some more trial and error i think I've found whats wrong. I was first
really focused on the keyword options, hence trying all access modes etc. 

It turns out that its more a flushing/releasing issue, perhaps in
combination with the Jupyter Notebook (holding a reference to the object?).
If i display the returned dataset, Jupyter displays the string 'repr'. I do
this all the time with GDAL datasets just to confirm i actually have a
dataset, whereas a failed command would result in "None". 

But somehow, in this case, closing the dataset with "ds = None" fails to
release the file handle (and doesnt flush?), but only when let Jupyter
display the dataset (repr).  If i close the dataset right away, it works as
expected. 

Here is a notebook showing what i did:
http://nbviewer.jupyter.org/gist/RutgerK/7da186e23b3ec20526c9a1c16c5cf98a

Is the method which doesn't work something that should work, or is it simply
bad practice? I'm pretty sure i do this with the raster utilities all the
time, without any problems.


Regards,
Rutger









--
View this message in context: http://osgeo-org.1560.x6.nabble.com/Converting-multilayer-KML-to-single-layer-output-tp5298014p5298176.html
Sent from the GDAL - Dev mailing list archive at Nabble.com.


More information about the gdal-dev mailing list