KML to Shapefile Scripting
Christian Spanring has been doing some great work with Google Earth’s KML data format. The latest offering is a fairly robust XSLT stylesheet for transforming KML into GML.
In the article, he mentions ogr2ogr as a method to convert GML to shapefiles so I immediately had to try it out! I came up with a simple bash script, kml2shp.sh, that provides a quick command-line interface:
kml2shp.sh input.kml output.shp
Here’s the step-by-step:
-
Make sure you have xsltproc (the command-line xslt processor) and OGR installed.
-
Copy the xslt stylesheet to /usr/local/share/kml2gml/
-
Create the kml2shp.sh script below (make sure to change the paths to reflect your system, chmod +x it, etc)
#!/bin/bash
if [ $# -ne 2 ]; then echo “usage: kml2shp.sh input.kml output.shp” exit fi
echo “Processing KML file” sed ‘s/ xmlns="http:\/\/earth.google.com\/kml\/2.0"//’ $1 > /tmp/temp.kml xsltproc -o /tmp/temp.gml /usr/local/share/kml2gml/kml2gml.xsl /tmp/temp.kml
echo “Creating new Shapefile” ogr2ogr $2 /tmp/temp.gml myFeature
echo “Cleaning up temp files” rm /tmp/temp.gml rm /tmp/temp.kml
echo “New shapefile has been created:” echo $2
Now as far as I can tell, the XSLT is fairly robust although I’ve only tested it on a few datasets. The wrapper script, however, could use alot of work. Type and error checking would be nice for starters and a better method to remove the xml namespace might be necessary. This is really meant as a starting point.
One potential problem with this technique is that you will most likely get a 3D shapefile (x, y AND z coordinates). Many applications can handle 3D shapefiles but some (QGIS, others?) cannot at the present time. Once the geometry type is known, one could always specify the ogr2ogr “-nlt” parameter to force 2D output. But that’s all for now… let me know if anyone has any suggestions on improving this technique.
blog comments powered by Disqus