All Projects → Sibyx → Phpgpx

Sibyx / Phpgpx

Licence: mit
Simple library for reading and creating GPX files written in PHP.

Projects that are alternatives of or similar to Phpgpx

Ffwdme.js
[DEPRECATED!] 🛑 A JavaScript toolkit that aims to bring interactive GPS driving directions to the mobile browser
Stars: ✭ 150 (+63.04%)
Mutual labels:  gps, gis, geolocation
Coregpx
A library for parsing and creation of GPX location files. Purely Swift.
Stars: ✭ 132 (+43.48%)
Mutual labels:  xml, gps, geolocation
Geolocation
Flutter geolocation plugin for Android and iOS.
Stars: ✭ 205 (+122.83%)
Mutual labels:  gps, geolocation
Skylift
Wi-Fi Geolocation Spoofing with the ESP8266
Stars: ✭ 223 (+142.39%)
Mutual labels:  gps, geolocation
trackanimation
Track Animation is a Python 2 and 3 library that provides an easy and user-adjustable way of creating visualizations from GPS data.
Stars: ✭ 74 (-19.57%)
Mutual labels:  gps, geolocation
Jpx
JPX - Java GPX library
Stars: ✭ 125 (+35.87%)
Mutual labels:  gps, geolocation
React Geolocated
React Higher-Order Component for using Geolocation API
Stars: ✭ 185 (+101.09%)
Mutual labels:  gps, geolocation
totalopenstation
Total Open Station downloads and exports survey data from your total station
Stars: ✭ 51 (-44.57%)
Mutual labels:  geolocation, gis
sigsby
Sistem Informasi Geografis (SIG) / GIS Wisata Kota Surabaya Berbasis Web - www.firstplato.com
Stars: ✭ 23 (-75%)
Mutual labels:  geolocation, gis
GPXParser.js
GPX file parser javascript library
Stars: ✭ 58 (-36.96%)
Mutual labels:  xml, gps
Ulogger Server
μlogger • web viewer for tracks uploaded with μlogger mobile client
Stars: ✭ 315 (+242.39%)
Mutual labels:  gps, geolocation
Arctern
Stars: ✭ 94 (+2.17%)
Mutual labels:  gis, geolocation
Dog Ceo Api
The API hosted at dog.ceo
Stars: ✭ 393 (+327.17%)
Mutual labels:  xml, composer
orange3-geo
🍊 🌍 Orange add-on for dealing with geography and geo-location
Stars: ✭ 22 (-76.09%)
Mutual labels:  gps, geolocation
Fmm
Fast map matching, an open source framework in C++
Stars: ✭ 359 (+290.22%)
Mutual labels:  gps, gis
P5.geolocation
a geolocation and geofencing library for p5.js
Stars: ✭ 75 (-18.48%)
Mutual labels:  gps, geolocation
Tooly Composer Script
Simple composer script to manage phar files using project composer.json.
Stars: ✭ 87 (-5.43%)
Mutual labels:  composer
Php
StupidlySimple Framework for PHP - MVC Framework for lazy developers
Stars: ✭ 89 (-3.26%)
Mutual labels:  composer
Dependency spy
Find known vulnerabilities in your dependencies
Stars: ✭ 87 (-5.43%)
Mutual labels:  composer
Location
Smartphone navigation positionning, fusion GPS and IMU sensors.
Stars: ✭ 87 (-5.43%)
Mutual labels:  gps

phpGPX

Code Climate Latest development Packagist downloads Gitter

Simple library written in PHP for reading and creating GPX files.

Library is currently marked as Release Candidate but is already used in production on several projects without any problems. Documentation is available using GitHub pages generated by Jekyll.

Contribution and feedback is welcome! Please check the issues for TODO. I will be happy every feature or pull request.

Repository branches:

  • master: latest stable version
  • develop: works on 2.x

Features

Supported Extensions

Stats calculation

  • (Smoothed) Distance (m)
  • Average speed (m/s)
  • Average pace (s/km)
  • Min / max altitude (m)
  • (Smoothed) Elevation gain / loss (m)
  • Start / end (DateTime object)
  • Duration (seconds)

Installation

You can easily install phpGPX library with composer. There is no stable release yet, so please use release candidates.

composer require sibyx/phpgpx:@1.1.2

Examples

Open GPX file and load basic stats

<?php
use phpGPX\phpGPX;

$gpx = new phpGPX();
	
$file = $gpx->load('example.gpx');
	
foreach ($file->tracks as $track)
{
    // Statistics for whole track
    $track->stats->toArray();
    
    foreach ($track->segments as $segment)
    {
    	// Statistics for segment of track
    	$segment->stats->toArray();
    }
}

Writing to file

<?php
use phpGPX\phpGPX;

$gpx = new phpGPX();
	
$file = $gpx->load('example.gpx');

// XML
$file->save('output.gpx', phpGPX::XML_FORMAT);
	
//JSON
$file->save('output.json', phpGPX::JSON_FORMAT);

Creating file from scratch

<?php

use phpGPX\Models\GpxFile;
use phpGPX\Models\Link;
use phpGPX\Models\Metadata;
use phpGPX\Models\Point;
use phpGPX\Models\Segment;
use phpGPX\Models\Track;

require_once '/vendor/autoload.php';

$sample_data = [
	[
		'longitude' => 9.860624216140083,
		'latitude' => 54.9328621088893,
		'elevation' => 0,
		'time' => new \DateTime("+ 1 MINUTE")
	],
	[
		'latitude' => 54.83293237320851,
		'longitude' => 9.76092208681491,
		'elevation' => 10.0,
		'time' => new \DateTime("+ 2 MINUTE")
	],
	[
		'latitude' => 54.73327743521187,
		'longitude' => 9.66187816543752,
		'elevation' => 42.42,
		'time' => new \DateTime("+ 3 MINUTE")
	],
	[
		'latitude' => 54.63342326167919,
		'longitude' => 9.562439849679859,
		'elevation' => 12,
		'time' => new \DateTime("+ 4 MINUTE")
	]
];

// Creating sample link object for metadata
$link = new Link();
$link->href = "https://sibyx.github.io/phpgpx";
$link->text = 'phpGPX Docs';

// GpxFile contains data and handles serialization of objects
$gpx_file = new GpxFile();

// Creating sample Metadata object
$gpx_file->metadata = new Metadata();

// Time attribute is always \DateTime object!
$gpx_file->metadata->time = new \DateTime();

// Description of GPX file
$gpx_file->metadata->description = "My pretty awesome GPX file, created using phpGPX library!";

// Adding link created before to links array of metadata
// Metadata of GPX file can contain more than one link
$gpx_file->metadata->links[] = $link;

// Creating track
$track = new Track();

// Name of track
$track->name = "Some random points in logical order. Input array should be already ordered!";

// Type of data stored in track
$track->type = 'RUN';

// Source of GPS coordinates
$track->source = "MySpecificGarminDevice";

// Creating Track segment
$segment = new Segment();


foreach ($sample_data as $sample_point)
{
	// Creating trackpoint
	$point = new Point(Point::TRACKPOINT);
	$point->latitude = $sample_point['latitude'];
	$point->longitude = $sample_point['longitude'];
	$point->elevation = $sample_point['elevation'];
	$point->time = $sample_point['time'];

	$segment->points[] = $point;
}

// Add segment to segment array of track
$track->segments[] = $segment;

// Recalculate stats based on received data
$track->recalculateStats();

// Add track to file
$gpx_file->tracks[] = $track;

// GPX output
$gpx_file->save('CreatingFileFromScratchExample.gpx', \phpGPX\phpGPX::XML_FORMAT);

// Serialized data as JSON
$gpx_file->save('CreatingFileFromScratchExample.json', \phpGPX\phpGPX::JSON_FORMAT);

// Direct GPX output to browser

header("Content-Type: application/gpx+xml");
header("Content-Disposition: attachment; filename=CreatingFileFromScratchExample.gpx");

echo $gpx_file->toXML()->saveXML();
exit();

Currently, supported output formats:

  • XML
  • JSON

Configuration

Use the static constants in phpGPX to modify behaviour.

/**
 * Create Stats object for each track, segment and route
 */
public static $CALCULATE_STATS = true;

/**
 * Additional sort based on timestamp in Routes & Tracks on XML read.
 * Disabled by default, data should be already sorted.
 */
public static $SORT_BY_TIMESTAMP = false;

/**
 * Default DateTime output format in JSON serialization.
 */
public static $DATETIME_FORMAT = 'c';

/**
 * Default timezone for display.
 * Data are always stored in UTC timezone.
 */
public static $DATETIME_TIMEZONE_OUTPUT = 'UTC';

/**
 * Pretty print.
 */
public static $PRETTY_PRINT = true;

/**
 * In stats elevation calculation: ignore points with an elevation of 0
 * This can happen with some GPS software adding a point with 0 elevation
 */
public static $IGNORE_ELEVATION_0 = true;

/**
 * Apply elevation gain/loss smoothing? If true, the threshold in
 * ELEVATION_SMOOTHING_THRESHOLD and ELEVATION_SMOOTHING_SPIKES_THRESHOLD (if not null) applies
 */
public static $APPLY_ELEVATION_SMOOTHING = false;

/**
 * if APPLY_ELEVATION_SMOOTHING is true
 * the minimum elevation difference between considered points in meters
 */
public static $ELEVATION_SMOOTHING_THRESHOLD = 2;

/**
 * if APPLY_ELEVATION_SMOOTHING is true
 * the maximum elevation difference between considered points in meters
 */
public static $ELEVATION_SMOOTHING_SPIKES_THRESHOLD = null;

/**
 * Apply distance calculation smoothing? If true, the threshold in
 * DISTANCE_SMOOTHING_THRESHOLD applies
 */
public static $APPLY_DISTANCE_SMOOTHING = false;

/**
 * if APPLY_DISTANCE_SMOOTHING is true
 * the minimum distance between considered points in meters
 */
public static $DISTANCE_SMOOTHING_THRESHOLD = 2;

I wrote this library as part of my job in Backbone s.r.o..

License

This project is licensed under the terms of the MIT license.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].