ixnode/php-coordinate

PHP Coordinate - This library offers a collection of various PHP coordinate classes like Coordinate, etc.

1.0.1 2024-12-07 11:56 UTC

README

Release PHP PHPStan PHPUnit PHPCS PHPMD Rector - Instant Upgrades and Automated Refactoring LICENSE

This library offers a collection of various PHP coordinate classes like Coordinate, etc. It converts various coordinate strings and values into a unique format.

1. Usage

use Ixnode\PhpCoordinate\Coordinate;

1.1 Converter example

$coordinate = new Coordinate(51.0504, 13.7373);

print $coordinate->getLatitudeDMS();
// (string) 51°3′1.44″N

print $coordinate->getLongitudeDMS();
// (string) 13°44′14.28″E

1.2 Parser example

$coordinate = new Coordinate('51°3′1.44″N 13°44′14.28″E');

print $coordinate->getLatitude();
// (float) 51.0504

print $coordinate->getLongitude();
// (float) 13.7373

1.3 Distance example

$coordinateDresden = new Coordinate('51°3′1.44″N 13°44′14.28″E');
$coordinateCordoba = new Coordinate(-31.425299, -64.201743);

/* Distance between Dresden, Germany and Córdoba, Argentina */
print $coordinate->getDistance($coordinateCordoba, Coordinate::RETURN_KILOMETERS);
// (float) 11904.668

1.4 Direction example (degree)

$coordinateDresden = new Coordinate('51°3′1.44″N 13°44′14.28″E');
$coordinateCordoba = new Coordinate(-31.425299, -64.201743);

/* Direction in degrees from Dresden, Germany to Córdoba, Argentina */
print $coordinateDresden->getDegree($coordinateCordoba);
// (float) -136.62°

1.5 Direction example (cardinal direction)

$coordinateDresden = new Coordinate('51°3′1.44″N 13°44′14.28″E');
$coordinateCordoba = new Coordinate(-31.425299, -64.201743);

/* Direction in degrees from Dresden, Germany to Córdoba, Argentina */
print $coordinateDresden->getDirection($coordinateCordoba);
// (string) SW

2. Parser

2.1 Basic decimal degree parser

2.1.1 Parser formats

2.1.2 Code example

$coordinate = new Coordinate('51.0504 13.7373');

print $coordinate->getLatitude();
// (float) 51.0504

print $coordinate->getLongitude();
// (float) 13.7373

2.2 Basic DMS Parser

2.2.1 Parser formats

2.2.2 Code example

$coordinate = new Coordinate('51°3′1.44″N 13°44′14.28″E');

print $coordinate->getLatitude();
// (float) 51.0504

print $coordinate->getLongitude();
// (float) 13.7373

2.3 Google Url Parser Parser

2.3.1 Parser formats

2.3.2 Code example

$coordinate = new Coordinate('https://maps.app.goo.gl/PHq5axBaDdgRWj4T6');

print $coordinate->getLatitude();
// (float) 54.07304830

print $coordinate->getLongitude();
// (float) 18.992402

3. Converter

3.1 Methods of class Coordinate

3.2 Code example

$coordinate = new Coordinate('-31.425299, -64.201743');

print $coordinate->getLatitudeDMS();
// (string) "31°25′31.0764″S"

print $coordinate->getLongitudeDMS();
// (string) "64°12′6.2748″W"

4. Installation

composer require ixnode/php-coordinate
vendor/bin/php-coordinate -V
php-coordinate 0.1.0 (03-07-2023 01:17:26) - Björn Hempel <bjoern@hempel.li>

5. Command line tool

Used to quickly check two given coordinates.

Check Dresden, Germany and New York, United States:

bin/console pc "51°3′1.44″N, 13°44′14.28″E" "40.712784, -74.005941"

or within your composer project:

vendor/bin/php-coordinate pc "51°3′1.44″N, 13°44′14.28″E" "40.712784, -74.005941"
Source coordinate (51°3′1.44″N, 13°44′14.28″E):

+---------+------------------+--------------------+
| Value   | Latitude         | Longitude          |
+---------+------------------+--------------------+
| Decimal | 51.0504          | 13.7373            |
| DMS     | 51°3′1.44″N      | 13°44′14.28″E      |
+---------+------------------+--------------------+

Target coordinate (40.712784, -74.005941):

+---------+----------------------+---------------------+
| Value   | Latitude             | Longitude           |
+---------+----------------------+---------------------+
| Decimal | 40.712784            | -74.005941          |
| DMS     | 40°42′46.0224″N      | 74°0′21.3876″W      |
+---------+----------------------+---------------------+

Distance:

+-----------+-------------+
| Key       | Value       |
+-----------+-------------+
| Distance  | 6478.472 km |
| Degree    | -96.720°    |
| Direction | W           |
+-----------+-------------+

+--------------------------------------------------------------------------------+
|                                   World map                                    |
+--------------------------------------------------------------------------------+
|                                                                                |
|                     ▄▄▄▄▀▄▄▄▄▄▄▄▄▄▄                                            |
|       ▄▄    ▄▄▄▄▄▄▄▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀                ▄▄▄▄▀▀▀▀▀▄▄▄▄▄▄▄▄▄▄          |
|  ▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀      ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀  |
| ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀  ▀▀▀▀   ▀▀          ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀   |
|       ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀           ▄▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄ ▀▀    |
|     ▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀            ▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀       |
|     ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀               ▀▀▀▀▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▄        |
|     ▀▀▀▀▀▀▀▀▀▀▀▀                 ▀▀▀▀▀▀▀▀▀▀▄▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀        |
|      ▀▀▀▀▀▀▄▄ ▀                ▄▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀         |
|        ▀▀▀▀▀▀                  ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀  ▀▀▀▀▀▀▀▀▀▀▀▀▀           |
|           ▀▀▀▄▄▀▀▄▄▄           ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀      ▀▀    ▀▀▀▀            |
|              ▀▀▀▀▀▀▀▀▀▄         ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀            ▀▄  ▄▀▀         |
|              ▀▀▀▀▀▀▀▀▀▀▀▄▄▄           ▀▀▀▀▀▀▀▀▀▀▀              ▀▀▀▀▀▀▀   ▀▄▄▄▄ |
|              ▀▀▀▀▀▀▀▀▀▀▀▀▀▀            ▀▀▀▀▀▀▀▀▀                 ▀        ▀▀▀▀▄|
|               ▀▀▀▀▀▀▀▀▀▀▀▀             ▀▀▀▀▀▀▀▀▀▄▀▀                   ▄▀▀▀▀▀▀  |
|                  ▀▀▀▀▀▀▀▀▀             ▀▀▀▀▀▀▀▀ ▀▀                 ▀▀▀▀▀▀▀▀▀▀▀ |
|                  ▀▀▀▀▀▀▀                ▀▀▀▀▀▀  ▀                  ▀▀▀▀▀▀▀▀▀▀▀ |
|                  ▀▀▀▀▀▀                  ▀▀▀                       ▀▀▀▀▀▀▀▀▀▀▀ |
|                  ▀▀▀▀                                                     ▀    |
|                   ▀▀▀                                                          |
+--------------------------------------------------------------------------------+

+------------------------------------+   +---------------------------------------+
|         Cardinal direction         |   |         Longitude / Langitude         |
+------------------------------------|   +---------------------------------------|
|                                    |   |          lat                          |
||   |                                       |
|                                    |   |       90° ⯅                           |
|                 ___                |   |           |                           |
|    -45°         ───        45°     |   |           |                           |
|          //      N      \\         |   |           |   • Oslo (59.91°, 10.75°) |
|             NW       NE            |   |           | • London (51.51°, -0.13°) |
|                  |                 |   |    • New York (40.71°, -74.01°)       |
|  -90°  || W    --+--    E ||  90°  |   |           |                           |
|                  |                 |   |           |                           |
|             SW       SE            |   |           |                           |
|          \\      S      //         |   |           | • Null Island (0°, 0°)    |
|    -135°        ───        135°    |   |   ⯇-------+-------------------⯈  lon  |
|                 ‾‾‾                |   |  -180°    |                 180°      |
|                                    |   |           |                           |
|                 180°               |   |           |       • Cape Agulhas      |
|                                    |   |      -90° ⯆         (-34.82°, 20.02°) |
+------------------------------------+   +---------------------------------------+

Services

6. Library development

git clone git@github.com:ixnode/php-coordinate.git && cd php-coordinate
composer install
composer test

7. License

This library is licensed under the MIT License - see the LICENSE file for details.