sibyx / phpgpx
一个简单的PHP库,用于GPX导入/导出
1.3.0
2023-07-27 22:33 UTC
Requires
- php: >=7.1
- ext-dom: *
- ext-simplexml: *
- lib-libxml: *
Requires (Dev)
- evert/phpdoc-md: ~0.2.0
- friendsofphp/php-cs-fixer: ^2.18
- phpunit/phpunit: ^9
README
这是一个用PHP编写的简单库,用于读取和创建GPX文件。文档可通过GitHub页面生成并使用Jekyll查看。
欢迎贡献和反馈!请查看待办事项中的问题。我会很高兴看到每个功能或拉取请求。
仓库分支
master
:最新稳定版本develop
:正在开发2.x
特性
- 完全支持官方规范。
- 统计计算。
- 扩展。
- JSON & XML & PHP数组输出。
支持的扩展
统计计算
- (平滑)距离(m)
- 平均速度(m/s)
- 平均配速(s/km)
- 最小/最大海拔(m)
- 最小/最大坐标([lat,lng])
- (平滑)海拔上升/下降(m)
- 开始/结束(DateTime对象)
- 开始/结束坐标([lat,lng])
- 持续时间(秒)
安装
您可以使用composer轻松安装phpGPX库。目前尚无稳定版本,请使用候选版本。
composer require sibyx/phpgpx:1.3.0
示例
打开GPX文件并加载基本统计信息
<?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(); } }
写入文件
<?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);
从头创建文件
<?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();
当前支持的输出格式
- XML
- JSON
配置
使用phpGPX中的静态常量来修改行为。
/** * 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;
我编写这个库是我所在公司Backbone s.r.o.工作的一部分。
许可
本项目的许可条款为MIT许可。