Merging gpx files

Objective: collect all GPS waypoints and tracks for the Tombstone hikes on into a single map.

screenshot of Tombstone Hikes page

(Prep: download the GPX files. Thank them for the raw material by buying the book.)

Merge tracks

ogrmerge -o merged.gpkg *.gpx -single -update -overwrite_layer ^
  -src_layer_field_name Source -src_layer_field_content {AUTO_NAME} ^
  -src_geom_type multilinestring -nln Tracks

Merge all points

ogrmerge -o merged.gpkg *.gpx -single -update -overwrite_layer ^
  -src_layer_field_name Source -src_layer_field_content {AUTO_NAME} ^
  -src_geom_type point -nln Points

Extract waypoints from all points into own layer

ogr2ogr merged.gpkg merged.gpkg -nln Waypoints ^
  -sql "SELECT * FROM Points WHERE Source LIKE '%Way%'" -update

<<manually delete empty columns>>

Convert only tracks and waypoints back to GPX for adding Google Maps

ogr2ogr merged.gpx merged.gpkg -dsco GPX_USE_EXTENSIONS=YES waypoints tracks


Tombstone Hikes – Hikes within Tombstone Territorial Park from (circa July 2021).preview of the Tombstone Hikes google map

Thanks for the help

Ogrmerge does the heavy lifting. I came back to this page twenty times while building out the recipe.

Concatenate the content of france.shp and germany.shp in merged.shp, and adds a ‘country’ field to each feature whose value is ‘france’ or ‘germany’ depending where it comes from. -single -o merged.shp france.shp germany.shp ^
  -src_layer_field_name country

From <>

Perform a join between 2 GeoPackage databases:

ogrinfo my_spatial.gpkg \
  -sql "SELECT, FROM poly JOIN other_schema.other USING (id)" \
  -oo PRELUDE_STATEMENTS="ATTACH DATABASE 'other.gpkg' AS other_schema"

From <>

I needed help refining my sql syntax. This example got me to the end:

query='SELECT * FROM lut_data WHERE LUT ="CHF"'

From <>

This is a little less wordy than the ogrinfo sql approach, but I didn’t find this method until after. Noting it here to remind myself to try it later.

ogr2ogr can also filter and edit geodata. A common application is the limitation of a data set to a certain area. This can be created with the option -spat:

ogr2ogr \
  -spat -13.931 34.886 46.23 74.12 \
  -f GPKG output.gpkg \

If you only want certain features of a layer, you can define them with -where. This example only returns countries with less than 1 million inhabitants:

ogr2ogr \
  -where "\"POP_EST\" < 1000000" \
  -f GPKG output.gpkg \
  natural_earth_vector.gpkg \

From <>

I needed this plus “-dsco GPX_USE_EXTENSIONS=YES” to avoid ERROR6

The ogr2ogr utility can be used to do GPX to GPX translation:

ogr2ogr -f GPX output.gpx input.gpx waypoints routes tracks

Note : in the case of GPX to GPX translation, you need to specify the layer names, in order to discard the route_points and track_points layers.

From <>

Further exploration

I have a Shapefile with a lot of empty columns but many of them are empty. Using QGIS or ogr2ogr, how do I remove all attribute columns where everything is NULL?

From <>

This question has been asked before but I couldn’t get the solution to work. I have a shapefile with lots of empty columns and I would like to remove them all with a script or some tools.

From <>


Leave a Reply

Your email address will not be published. Required fields are marked *