longitude-one / geo-parser
Parser for geography coordinate strings
Requires
- php: ^8.1
- doctrine/lexer: ^2.1|^3.0
Requires (Dev)
- phpunit/phpunit: ~10.0
README
Lexer and parser library for geographic point string values.
Note
This package is the continuation of the now abandoned creof/geo-parser package.
Installation
composer require longitude-one/geo-parser
Current version:
composer require longitude-one/geo-parser:3.0.2
Usage
There are two use patterns for the parser. The value to be parsed can be passed into the constructor, then parse()
called on the returned Parser object:
$input = '79°56′55″W, 40°26′46″N'; $parser = new Parser($input); $value = $parser->parse(); // [-79.948611111111, 40.446111111111]
If many values need to be parsed, a single Parser instance can be used:
$input1 = '56.242 E'; $input2 = '40:26:46 S'; $parser = new Parser(); $value1 = $parser->parse($input1); //56.242 $value2 = $parser->parse($input2); //-40.446111111111
Supported Formats
Both single values and pairs are supported. Some samples of supported formats are below, though not every possible iteration may be explicitly specified:
-
Simple single-signed values
- 40
- -40
- -8.543
- +132
- +77.2
-
Simple single signed values with degree symbol
- 40°
- -40°
- -5.234°
- +43°
- +38.43°
-
Single unsigned values with or without degree symbol, and cardinal direction
- 40° N
- 40 S
- 56.242 E
-
Single values of signed integer degrees with degree symbol, and decimal minutes with apostrophe
- 40° 26.222'
- -65° 32.22'
- +165° 52.22'
-
Single values of unsigned integer degrees with degree symbol, decimal minutes with apostrophe, and cardinal direction
- 40° 26.222' E
- 65° 32.22' S
-
Single values of signed integer degrees with degree symbol, integer minutes with apostrophe, and optional integer or decimal seconds with quote
- 40° 26' 46"
- -79° 58' 56"
- 93° 19' 25.8"
- +120° 19' 25.8"
-
Single values of signed integer degrees with colon symbol, integer minutes, and optional colon and integer or decimal seconds
- +40:26:46
- -79:58:56
- 93:19:25.8
-
Single values of unsigned integer degrees with degree symbol, integer minutes with apostrophe, optional integer or decimal seconds with quote, and cardinal direction
- 40° 26' 46" S
- 99° 58' 56" W
- 44° 58' 53.9" N
-
Single values of unsigned integer degrees with colon symbol, integer minutes with, optional colon and integer or decimal seconds, and cardinal direction
- 40:26:46 S
- 99:58:56 W
- 44:58:53.9 N
-
Two of any one format separated by whitespace
-
Two of any one format separated by a comma
Return
The parser will return an integer/float or an array containing a pair of these values.
Exceptions
The Lexer and Parser will throw exceptions implementing interface LongitudeOne\Geo\String\Exception\ExceptionInterface.
Roadmap
[!NOTE] A major release may increase the minimum supported PHP version without introducing any other breaking changes.
| Version | PHP compatibility | Tested on | Doctrine Lexer | Tested with Lexer | Released | Active Support | Security fix |
|---|---|---|---|---|---|---|---|
| 3 | 8.1 - 8.2 - 8.3 - 8.4 - 8.5 | From 8.1 to 8.5 | ^2.1 - ^3.0 | 2.1 3.0 3.1-xdev 4.0-xdev | 04 May 2024 | 31 August 2026 | 31 December 2026 |
| 4 | 8.3 - 8.4 - 8.5 | 8.3 - 8.4 - 8.5 | ^3.0.1 | 3.0 3.1-xdev 4.0-xdev | August 2026 | 31 December 2026 | 31 December 2027 |
| 5 | 8.4 - 8.5 | 8.4 - 8.5 | 3.0 3.1-xdev 4.0-xdev | January 2027 | 31 December 2028 | 31 December 2030 | |
| 6 | 8.5 | 8.5 | 3.0 3.1-xdev 4.0-xdev. | January 2028 | 31 December 2028 | 31 December 2030 |
Version 4 is intended as a transitional release. The only backward compatibility break is the supported PHP versions and the doctrine/lexer versions.
PHP versions marked as "tested" and each doctrine lexer version are part of the continuous integration matrix.
Support Policy
Only the latest major version receives feature and bug fixes. Non-security issues will not be addressed during the security-fixes period.
Previous major versions may receive security fixes only, according to the roadmap above.