-
Notifications
You must be signed in to change notification settings - Fork 127
Expand file tree
/
Copy pathDestination.php
More file actions
64 lines (54 loc) · 2.35 KB
/
Destination.php
File metadata and controls
64 lines (54 loc) · 2.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php
/*
* This file is part of the Geotools library.
*
* (c) Antoine Corcy <[email protected]>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace League\Geotools\CLI\Command\Edge;
use League\Geotools\Coordinate\Coordinate;
use League\Geotools\Coordinate\Ellipsoid;
use League\Geotools\Geotools;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
/**
* Command-line point:destination class
*
* @author Antoine Corcy <[email protected]>
*/
class Destination extends \Symfony\Component\Console\Command\Command
{
protected function configure()
{
$availableEllipsoids = Ellipsoid::getAvailableEllipsoidNames();
$this
->setName('edge:destination')
->setDescription('Compute the destination coordinate with given bearing in degrees and a distance in meters')
->addArgument('origin', InputArgument::REQUIRED, 'The origin "Lat,Long" coordinate')
->addArgument('bearing', InputArgument::REQUIRED, 'The initial bearing in degrees')
->addArgument('distance', InputArgument::REQUIRED, 'The distance from the origin coordinate in meters')
->addOption('ellipsoid', null, InputOption::VALUE_REQUIRED,
'If set, the name of the ellipsoid to use', Ellipsoid::WGS84)
->setHelp(<<<EOT
<info>Available ellipsoids</info>: $availableEllipsoids
<info>Example with SOUTH_AMERICAN_1969 ellipsoid, 25 degrees and 10000 meters</info>:
%command.full_name% "40° 26.7717, -79° 56.93172" 25 10000 <comment>--ellipsoid=SOUTH_AMERICAN_1969</comment>
EOT
);
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$from = new Coordinate($input->getArgument('origin'), Ellipsoid::createFromName($input->getOption('ellipsoid')));
$geotools = new Geotools;
$destination = $geotools->edge()->setFrom($from);
$destination = $destination->destination($input->getArgument('bearing'), $input->getArgument('distance'));
$output->writeln(sprintf(
'<value>%s, %s</value>',
$destination->getLatitude(), $destination->getLongitude()
));
}
}