2018-01-02 06:01:01 +08:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Models;
|
|
|
|
|
|
|
|
use \GeoJson\Geometry\Point;
|
|
|
|
use \GeoJson\Geometry\LineString;
|
|
|
|
use \GeoJson\Feature\Feature;
|
|
|
|
use \GeoJson\Feature\FeatureCollection;
|
|
|
|
|
|
|
|
/**
|
2018-01-02 09:02:22 +08:00
|
|
|
* Return different points/features in GeoJSON format
|
|
|
|
* https://tools.ietf.org/html/rfc7946
|
|
|
|
*
|
2018-01-02 06:01:01 +08:00
|
|
|
* @package App\Models
|
|
|
|
*/
|
|
|
|
class GeoJson
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* @var int
|
|
|
|
*/
|
|
|
|
protected $counter;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @var array [lon, lat] pairs
|
|
|
|
*/
|
|
|
|
protected $line_coords = [];
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @var Feature[]
|
|
|
|
*/
|
|
|
|
protected $point_coords = [];
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param $lat
|
|
|
|
* @param $lon
|
|
|
|
* @param array $attrs Attributes of the Feature
|
|
|
|
*/
|
|
|
|
public function addPoint($lat, $lon, array $attrs)
|
|
|
|
{
|
|
|
|
$this->line_coords[] = [$lon, $lat];
|
|
|
|
$this->point_coords[] = new Feature(new Point([$lon, $lat]), $attrs);
|
|
|
|
++$this->counter;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the FeatureCollection for the line
|
|
|
|
* @return FeatureCollection
|
|
|
|
*/
|
|
|
|
public function getLine(): FeatureCollection
|
|
|
|
{
|
|
|
|
if(empty($this->line_coords) || \count($this->line_coords) < 2) {
|
|
|
|
return new FeatureCollection([]);
|
|
|
|
}
|
|
|
|
|
|
|
|
return new FeatureCollection([
|
|
|
|
new Feature(new LineString($this->line_coords))
|
|
|
|
]);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the feature collection of all the points
|
|
|
|
* @return FeatureCollection
|
|
|
|
*/
|
|
|
|
public function getPoints(): FeatureCollection
|
|
|
|
{
|
|
|
|
return new FeatureCollection($this->point_coords);
|
|
|
|
}
|
|
|
|
}
|