Skip to content

rubiojr/gpx-risor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gpx

Note

This is an experimental Risor module written almost entirely by Claude 3.7, using a custom prompt.

The gpx Risor module provides functionality for parsing and working with GPX (GPS Exchange Format) files.

This module is a Risor wrapper around the tkrajina/gpxgo library, allowing you to parse GPX data from strings, byte arrays, or files, and access the structured GPS data they contain.

Functions

parse

parse(xmlString string) gpx

Parses a GPX document from a string.

gpxData := gpx.parse(`<?xml version="1.0" encoding="UTF-8"?>
<gpx version="1.1" creator="My GPS Device">
  <trk>
    <name>Morning Run</name>
    <trkseg>
      <trkpt lat="37.7749" lon="-122.4194">
        <ele>10</ele>
        <time>2023-01-01T08:00:00Z</time>
      </trkpt>
    </trkseg>
  </trk>
</gpx>`)

print(gpxData.tracks[0].name)  // "Morning Run"

parse_bytes

parse_bytes(data bytes) gpx

Parses a GPX document from a byte array.

gpxBytes := os.read_file("route.gpx")
gpxData := gpx.parse_bytes(gpxBytes)

parse_file

parse_file(path string) gpx

Parses a GPX document directly from a file at the given path.

gpxData := gpx.parse_file("route.gpx")

Types

gpx

The main GPX object representing a complete GPX document.

Attributes

Name Type Description
track_points_no func() int Returns the total number of track points
info func() string Returns a string with information about the GPX document
tracks list A list of gpx.track objects in the document

gpx.track

Represents a track in a GPX document, which typically corresponds to one recorded activity.

Attributes

Name Type Description
name string The name of the track
segments list A list of gpx.segment objects

gpx.segment

Represents a track segment, which is a continuous recorded portion of a track.

Attributes

Name Type Description
points list A list of gpx.point objects

gpx.point

Represents a single GPS waypoint with coordinates and optional metadata.

Attributes

Name Type Description
lat float The latitude coordinate
latitude float Alias for lat
lon float The longitude coordinate
longitude float Alias for lon
elevation float The elevation in meters (nil if not available)
timestamp time The timestamp of the point (nil if not available)

Example

// Parse a GPX file
gpxData := gpx.parse_file("test.gpx")

// Get some basic information
print("GPX Info:", gpxData.info())
print("Total points:", gpxData.track_points_no())

// Iterate through tracks, segments and points
for i, track := range gpxData.tracks {
    print('Track {i}: {track.name}')

    for j, segment := range track.segments {
        print('  Segment {j} has {len(segment.points)} points')

        // Print the first point if available
        if len(segment.points) > 0 {
            point := segment.points[0]
            print('    First point: lat={point.lat}, lon={point.lon}')

            if point.elevation != nil {
                print('    Elevation: {point.elevation}')
            }

            if point.timestamp != nil {
                print('    Time: {point.timestamp}')
            }
        }
    }
}

About

Risor module to manage GPX files

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages