phpGPX

2025-12-07 0 770

phpGPX

用PHP编写的简单库,用于阅读和创建GPX文件。可以使用Jekyll生成的GitHub页面获得文档。

欢迎贡献和反馈!请检查托多的问题。我会很高兴的每个功能或拉请求。

存储库分支:

  • 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文件并加载基本统计数据

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 \' );
	
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 ();
    }
}

写入文件

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 \\ 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 );

从头开始创建文件

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.*g*it*hub.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();\”>

 <?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.*g*it*hub.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 SRO中写了这个图书馆。

执照

该项目是根据MIT许可证的条款获得许可的。

下载源码

通过命令行克隆项目:

git clone https://github.com/Sibyx/phpGPX.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 开发教程 phpGPX https://www.zuozi.net/31831.html

fast cgi proxy
上一篇: fast cgi proxy
MultiTenancyServer
下一篇: MultiTenancyServer
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务