Use track's comment to store geojson generation options

This commit is contained in:
2019-11-29 22:34:33 +01:00
parent d86fcfecda
commit be50af7680

View File

@@ -41,6 +41,7 @@ class Converter extends PhpObject {
class Geo extends PhpObject { class Geo extends PhpObject {
const GEO_FOLDER = 'geo/'; const GEO_FOLDER = 'geo/';
const OPT_SIMPLE = 'simplification';
protected $asTracks; protected $asTracks;
protected $sFilePath; protected $sFilePath;
@@ -83,6 +84,7 @@ class Gpx extends Geo {
$asTrack = array( $asTrack = array(
'name' => (string) $aoTrack->name, 'name' => (string) $aoTrack->name,
'desc' => str_replace("\n", '', ToolBox::fixEOL((strip_tags($aoTrack->desc)))), 'desc' => str_replace("\n", '', ToolBox::fixEOL((strip_tags($aoTrack->desc)))),
'cmt' => ToolBox::fixEOL((strip_tags($aoTrack->cmt))),
'color' => (string) $aoTrack->extensions->children('gpxx', true)->TrackExtension->DisplayColor, 'color' => (string) $aoTrack->extensions->children('gpxx', true)->TrackExtension->DisplayColor,
'points'=> array() 'points'=> array()
); );
@@ -142,6 +144,7 @@ class GeoJson extends Geo {
$this->asTracks = array(); $this->asTracks = array();
foreach($asTracks as $asTrackProps) { foreach($asTracks as $asTrackProps) {
$asOptions = $this->parseOptions($asTrackProps['cmt']);
//Color mapping //Color mapping
switch($asTrackProps['color']) { switch($asTrackProps['color']) {
@@ -149,7 +152,7 @@ class GeoJson extends Geo {
$sType = 'main'; $sType = 'main';
break; break;
case 'Magenta': case 'Magenta':
if($bSimplify) { if($bSimplify && $asOptions[self::OPT_SIMPLE]!='keep') {
$this->addNotice('Ignoring Track "'.$asTrackProps['name'].' (off-track)'); $this->addNotice('Ignoring Track "'.$asTrackProps['name'].' (off-track)');
continue 2; //discard tracks continue 2; //discard tracks
} }
@@ -204,6 +207,14 @@ class GeoJson extends Geo {
if($bSimplify) $this->addNotice('Total: '.$iGlobalInvalidPointCount.'/'.$iGlobalPointCount.' points removed ('.round($iGlobalInvalidPointCount / $iGlobalPointCount * 100, 1).'%)'); if($bSimplify) $this->addNotice('Total: '.$iGlobalInvalidPointCount.'/'.$iGlobalPointCount.' points removed ('.round($iGlobalInvalidPointCount / $iGlobalPointCount * 100, 1).'%)');
} }
private function parseOptions($sComment){
$asOptions = array(self::OPT_SIMPLE=>'');
foreach(explode("\n", $sComment) as $sLine) {
$asOptions[mb_strtolower(trim(mb_strstr($sLine, ':', true)))] = mb_strtolower(trim(mb_substr(mb_strstr($sLine, ':'), 1)));
}
return $asOptions;
}
private function isPointValid($asPointA, $asPointO, $asPointB) { private function isPointValid($asPointA, $asPointO, $asPointB) {
/* A----O Calculate angle AO^OB /* A----O Calculate angle AO^OB
* \ If angle is within [Pi - 10%; Pi + 10%], O can be discarded * \ If angle is within [Pi - 10%; Pi + 10%], O can be discarded