phpvms/app/Models/GeoJson.php

66 lines
1.4 KiB
PHP
Raw Normal View History

2018-01-02 06:01:01 +08:00
<?php
namespace App\Models;
2018-02-21 12:33:09 +08:00
use GeoJson\Feature\Feature;
use GeoJson\Feature\FeatureCollection;
use GeoJson\Geometry\LineString;
use GeoJson\Geometry\Point;
2018-01-02 06:01:01 +08:00
/**
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
2018-01-02 06:01:01 +08:00
*/
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) {
2018-01-02 06:01:01 +08:00
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);
}
}