地理值对象、解析器和格式化工具

资助包维护!
JeroenDeDauw

4.4.0 2022-10-21 14:19 UTC

README

一个小型库,用于解析、格式化和表示坐标。此库支持多种坐标格式,经过良好测试,并由维基百科和维基数据的软件使用。

GitHub Workflow Status Code Coverage

Packagist上: 最新稳定版本 下载次数

用法

要解析字符串到LatLongValue对象,请使用坐标解析器之一。

$parser = new LatLongParser();
$latLongValue = $parser->parse('55.7557860 N, 37.6176330 W');
var_dump($latLongValue->getLongitude()); // float: -37.6176330

以下提供了解析器

  • LatLongParser - 针对特定格式的解析器外观。在大多数情况下,您将使用此解析器
  • DdCoordinateParser - 解析十进制度坐标
  • DmCoordinateParser - 解析十分之一度坐标
  • DmsCoordinateParser - 解析度分秒坐标
  • FloatCoordinateParser - 解析浮点坐标
  • GlobeCoordinateParser - 解析坐标到GlobeCoordinateValue对象

要将坐标对象转换为字符串,请使用坐标格式化器之一。

$formatter = new LatLongFormatter();
$coordinateString = $formatter->format(new LatLongValue(42.23, 13.37));

以下提供了解析器

  • LatLongFormatter - 将LatLongValue格式化为支持的所有格式之一
  • GlobeCoordinateFormatter - 格式化GlobeCoordinateValue

要表示一组坐标,请使用值对象之一。

LatLongValue具有浮点纬度和经度。 GlobeCoordinateValue包装LatLongValue并添加精度和地球标识符。

支持的坐标格式有:

  • 度分秒(55° 45' 20.8296", -37° 37' 3.4788"55° 45' 20.8296" N, 37° 37' 3.4788" W
  • 十分之一度(55° 30', -37° 30'55° 30' N, 37° 30' W
  • 十进制度(55.7557860°, -37.6176330°55.7557860° N, 37.6176330° W
  • 浮点(55.7557860, -37.617633055.7557860 N, 37.6176330 W

解析器和格式化器允许您自定义用于度、分和秒的符号,并更改表示方向的字母(N、E、S、W)。

要求

Geo 4.x: PHP 7.1或更高版本(已测试PHP 7.1至PHP 7.4)

Geo 3.x: PHP 5.5或更高版本(已测试PHP 5.5至PHP 7.4和HHVM)

安装

要将此包作为本地、针对项目的依赖项添加到您的项目中,只需将data-values/geo依赖项添加到项目中的composer.json文件。以下是一个仅定义对此包4.x版本依赖项的composer.json文件的示例

    {
        "require": {
            "data-values/geo": "^4.0.0"
        }
    }

运行测试

仅测试

composer test

仅样式检查

composer cs

完整CI运行

composer ci

作者

Geo 数据值基于并包含由 Jeroen De DauwMapsSemantic MediaWiki 项目编写的许多代码。

维基数据团队做出了重大贡献,这些贡献是由 Wikimedia Germany 的员工为 Wikidata 项目 所做的。

发布说明

4.4.0 (2022-10-21)

  • LatLongValueGlobeCoordinateValue 中实现了 __serialize__unserialize,提高了与 PHP 8.1 的兼容性
  • 添加了 LatLongValue::getSerializationForHash;使用 LatLongValue 的 PHP 序列化作为散列的类应调用此方法

4.3.0 (2021-04-21)

  • 将最低 PHP 版本从 7.1 提高到 7.3

4.2.3 (2021-04-23)

  • GlobeCoordinateValue::newFromArray 现在支持数字字符串(感谢 @Silvan-WMDE)

4.2.2 (2021-01-20)

  • 添加了对 data-values/data-values 3.x 的兼容性
  • 添加了对 data-values/interfaces 1.x 的兼容性

4.2.1 (2019-12-18)

  • 修复了 GlobeCoordinateParser 无法解析多个值(4.2.0 回归)的问题

4.2.0 (2019-09-20)

  • 添加了 GlobeCoordinateValue::withPrecision

4.1.0 (2018-10-29)

  • 将所有文件中的 "PHP 严格类型" 添加
  • LatLongValue 不再扩展 DataValueObject
  • GlobeCoordinateValue 不再扩展 DataValueObject
  • 重新排序了 LatLongValueGlobeCoordinateValue 中的方法以提高可读性
  • 取消弃用 LatLongValue::newFromArray
  • 取消弃用 GlobeCoordinateValue::newFromArray

4.0.1 (2018-08-10)

  • 修复了解析 S/W 方向的小写字母坐标的问题
  • 修复了解析省略单个分钟数的 DMS 坐标的问题

3.0.1 (2018-08-01)

  • 修复了解析 S/W 方向的小写字母坐标的问题

2.1.2 (2018-08-01)

  • 修复了解析 S/W 方向的小写字母坐标的问题

4.0.0 (2018-07-13)

  • 将最低要求的 PHP 版本从 5.5.9 更新到 7.1
  • 添加了标量类型提示
  • 添加了返回类型提示
  • 添加了可空类型提示
  • 使常量可见性明确
  • 现在无效的 LatLongValue 构造会导致抛出 InvalidArgumentException 而不是 OutOfRangeException

3.0.0 (2018-03-20)

  • 删除了 DATAVALUES_GEO_VERSION 常量
  • 解析器不再扩展 StringValueParser
    • 它们不再有公共方法 setOptionsgetOptions
    • 它们不再有受保护的字段 options
    • 它们不再有受保护的 requireOptiondefaultOptionstringParse 方法
    • GlobeCoordinateParserLatLongParser 不再有受保护的 getOption 方法
  • 将多个受保护的字段和方法改为私有
    • LatLongValue 的所有字段
    • GlobeCoordinateParser 中的 detect…Precision 方法
    • LatLongParser::getParsers
  • 删除了公共静态方法 LatLongParser::areCoordinates
  • 放弃了对 DataValues Common 库的依赖
  • 删除了长时间弃用的类别名
    • DataValues\GlobeCoordinateValue(现在在 DataValues\Geo\Values 中)
    • DataValues\LatLongValue(现在在 DataValues\Geo\Values 中)
    • DataValues\Geo\Formatters\GeoCoordinateFormatter(现在为 LatLongFormatter
    • DataValues\Geo\Parsers\GeoCoordinateParser(现在为 LatLongParser

2.1.1 (2017-08-09)

  • 允许与 ~0.4.0 的 DataValues/Common 一起使用

2.1.0 (2017-08-09)

  • 删除 MediaWiki 集成
  • 使用 …::class 功能
  • 添加 .gitattributes 以排除 git 导出中不需要的文件
  • 使用 Wikibase CodeSniffer 而不是 Mediawiki 的
  • 移至短数组语法

2.0.1 (2017-06-26)

  • 修复了 GlobeCoordinateValue::newFromArrayLatLongValue::newFromArray 不接受混合值的问题。
  • 弃用 GlobeCoordinateValue::newFromArrayLatLongValue::newFromArray
  • 将最低要求的 PHP 版本从 5.3 更新到 5.5.9。

2.0.0 (2017-05-09)

  • GlobeCoordinateValue 不再接受空字符串作为地球
  • GlobeCoordinateValue 不再接受 [-360..+360] 区间之外的精度
  • 以不兼容的方式更改了 GlobeCoordinateValue 的哈希计算。
  • GeoCoordinateFormatter 重命名为 LatLongFormatter,保留了一个废弃的别名。
  • GeoCoordinateParser 重命名为 LatLongParser,保留了一个废弃的别名。
  • GeoCoordinateParserBase 重命名为 LatLongParserBase
  • 废弃了 LatLongParser::areCoordinates

1.2.2 (2017-03-14)

  • 修复了 GeoCoordinateFormatter 中的多个舍入问题。

1.2.1 (2016-12-16)

  • 修复了 GeoCoordinateFormatter 中的另一个 IEEE 问题。

1.2.0 (2016-11-11)

  • 添加了公共方法和常量的缺失的内置文档。
  • 添加了一个基本的 PHPCS 规则集,可以通过 composer phpcs 运行。

1.1.8 (2016-10-12)

  • 修复了 GeoCoordinateFormatter 中的另一个 IEEE 问题。
  • 修复了测试中的一个 PHP 7.1 兼容性问题。

1.1.7 (2016-05-25)

  • 对文档进行了小的改进。

1.1.6 (2016-04-02)

  • 添加了对 DataValues Common 0.3.x 的兼容性。

1.1.5 (2015-12-28)

  • 该组件现在可以与 DataValues Interfaces 0.2.x 一起安装。

1.1.4 (2014-11-25)

  • 在更多地方回退到默认值以处理无效精度。

1.1.3 (2014-11-19)

  • 在无效精度的情况下回退到默认值,而不是除以零。

1.1.2 (2014-11-18)

  • GlobeCoordinateParser 中的精度检测现在有一个下限为 0.00000001°。

1.1.1 (2014-10-21)

  • 从消息和注释中移除了类别名的剩余使用。
  • 修复了文档中的一些类型。

1.1.0 (2014-10-09)

  • 使组件可以通过 DataValues 1.x 安装。
  • GeoCoordinateFormatter 现在支持以度为单位进行精度设置。
  • GlobeCoordinateFormatter 现在将球面精度传递给其使用的 GeoCoordinateFormatter
  • 在 ValueParsers 中引入了 FORMAT_NAME 类常量,以便按预期使用它们作为 expectedFormat。
  • ValueParsers 现在在构造 ParseException 时传递 rawValue 和 expectedFormat 参数。

1.0.0 (2014-07-31)

  • 所有类和接口都已移动到 DataValues\Geo 命名空间中。
    • DataValues\LatLongValue 保留为废弃的别名。
    • DataValues\GlobeCoordinateValue 保留为废弃的别名。
  • GlobeCoordinateValue 中的 Globe 现在默认为 http://www.wikidata.org/entity/Q2

0.2.0 (2014-07-07)

  • 移除了废弃的 GeoCoordinateValue
  • 添加了 GlobeMath

0.1.2 (2014-01-22)

  • 添加了对 GeoCoordinateFormatter 中不同间距级别的支持。

0.1.1 (2013-11-30)

  • 添加了对 GeoCoordinateFormatter 中的方向记法的支持。
  • 降低了 GeoCoordinateFormatter 的复杂性。
  • 降低了 GeoCoordinateFormatterTest 的复杂性和耦合度。

0.1.0 (2013-11-17)

这是具有这些功能的初始版本。

  • LatLongValue
  • GlobeCoordinateValue
  • GeoCoordinateFormatter
  • GlobeCoordinateFormatter
  • DdCoordinateParser
  • DmCoordinateParser
  • DmsCoordinateParser
  • FloatCoordinateParser
  • GeoCoordinateParser
  • GlobeCoordinateParser

链接