Tag Archives: gpx

Minimalist GPX viewer

Image

I’m sure it’s been done before, but I made this minimalist GPX viewer today (relying heavily on the gpxviewer library). As long as you have a File API compliant browser (apparently not any version of IE), you should be able to load a GPX file from the top button, and it will load onto the map. Next step will be to save the GPX file to a shapefile.

Polygon → Polyline using pyshp

Well, I’ve been on a bit of a hiatus from this blog, thanks in large part to switching jobs and cities. But, I’ll try to fit posts in here and there as time allows.

Since ArcGIS licenses come at a premium (i.e. not everyone gets one), I am often tasked with performing file conversions that are difficult to perform outside the ArcGIS environment (and without the help of arcpy). So, in my quest for efficency (or laziness, whichever you choose), I am attempting to write a script that will take polygon shapefiles, convert to one line shapefile, and output the lines to a GPX file for upload to a GPS unit. The ultimate goal is to use py2exe to make a standalone application in which users can upload their own polygon shapefile and output a GPX file, and leave me out of it (not that I mind, but I’d rather focus on analysis).

Here’s what I’ve got so far. It deconstructs a polygon shapefile to individual vertices and outputs a line shapefile, using the pyshp library. Next steps involve installing GDAL, figuring out how to convert the shapefile to GPX, and packaging it all up with py2exe for distribution.

# import the shapefile library
import shapefile
# path to input polygon shapefile
infc = shapefile.Reader(r"C:\users\dwiens\GIS_Data\testpoly")
# create a shapefile writer
outfc = shapefile.Writer(shapefile.POLYLINE)
# turn geometry/attribute autoBalanace on
outfc.autoBalance = 1
# add a field, any field
outfc.field('FIELD','C','1')
# get the input geometries
shapes = infc.shapes()
# create empty arrays to hold line parts and vertices
linePoints = []
lineParts = []
# loop through shapes
for shape in shapes:
  # loop through each vertex
  for point in shape.points:
    # add each vertex to array
    linePoints.append(point)
  # add vertex array to shape array
  lineParts.append(linePoints)
  #empty the vertex array, move to next shape
  linePoints = []
# encode coordinates as a line
outfc.line(parts=lineParts)
# add blank value as a record
outfc.record('')
# save the shapefile
outfc.save(r"C:\users\dwiens\GIS_Data\testline")