How do I convert my linestring shapefile into points?
It’s a common enough question on the OSGeo mailing lists and stackexchange.com. Even with the power of GDAL/OGR command line utilities, there isn’t a single command you can run to do a conversion from lines/polygons into points. Enter ogr_explode.py
.
I’ve co-opted the term “explode” to refer to this need and put together a simple Python script to show how it can be done. You can access it on GitHub here or see just the main guts of it listed below.
It’s just a start, without any real error checking, and can be greatly improved with more options – e.g. to take elevation from the parent lines/polys attributes, to output to another shapefile, etc. Because it outputs in a CSV (x,y,z) format, you can give it a .csv
extension and start to access it with OGR utilities right away (VRT may be required). For example, you could then push it through gdal_grid
, but that’s another topic…
Since it is a common enough need, it seems, I encourage you to fork a copy and share back.
[Note, QGIS has a nice option under its Vector -> Geometry Tools -> Extract Nodes
tool to do the same thing with a GUI. Props to NathanW for having the most easily accessible example to refer to 🙂 ]
...
for feat in lay:
geom = feat.GetGeometryRef()
for ring in geom:
points = ring.GetPointCount()
for p in xrange(points):
lon, lat, z = ring.GetPoint(p)
outstr = "%s,%s,%s\n" % (lon,lat,z)
outfile.write(outstr)
...