vicchi/geojson-rewind

PHP 辅助类,用于强制执行 GeoJSON 中 RFC7946 多边形环绕顺序

1.0.1 2024-05-02 11:02 UTC

This package is not auto-updated.

Last update: 2024-09-24 20:45:12 UTC


README

Build Status

geojson-rewind

一组 PHP 辅助类,用于协助生成符合 GeoJSON 规范 的 GeoJSON 几何形状。

原始 GeoJSON 规范中多边形环的顺序未定义,但自 RFC7946 以来,强制执行了 右手定则

线性环必须遵循与它所包围的区域相关的右手定则,即,外部环为逆时针,洞为顺时针。

(如果您知道英国英语而不是美国英语,只需将 anticlockwise 替换为 counterclockwise 即可。)

致谢

geojson-rewind 是由 Tom McWright 等人将 Mapbox 的 Node.JS geojson-rewind 模块移植到 PHP 的结果。对于 Tom 和 Mapbox 团队的其余成员,我们表示衷心的感谢,并致以崇高的敬意。

安装

安装 geojson-rewind 最简单的方法是使用 composer

$> composer require vicchi/geojson-rewind

用法

<?php

include "vendor/autoload.php";

$source = [
    'type' => 'Polygon',
    'coordinates' => [
    [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ],
    [ [100.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2] ]
    ]
];
$enforce_rfc7946=true;
$output = Vicchi\GeoJson\Rewind::rewind($source, $enforce_rfc7946);

// show output for demonstration purposes
var_dump($output);

?>

输出可能如下所示($> 是命令行提示符)。

$> php test.php
array(2) {
  ["type"]=>
  string(7) "Polygon"
  ["coordinates"]=>
  array(2) {
    [0]=>
    array(5) {
      [0]=>
      array(2) {
        [0]=>
        float(100)
        [1]=>
        float(0)
      }
      [1]=>
      array(2) {
        [0]=>
        float(101)
        [1]=>
        float(0)
      }
      [2]=>
      array(2) {
        [0]=>
        float(101)
        [1]=>
        float(1)
      }
      [3]=>
      array(2) {
        [0]=>
        float(100)
        [1]=>
        float(1)
      }
      [4]=>
      array(2) {
        [0]=>
        float(100)
        [1]=>
        float(0)
      }
    }
    [1]=>
    array(5) {
      [0]=>
      array(2) {
        [0]=>
        float(100.2)
        [1]=>
        float(0.2)
      }
      [1]=>
      array(2) {
        [0]=>
        float(100.2)
        [1]=>
        float(0.8)
      }
      [2]=>
      array(2) {
        [0]=>
        float(100.8)
        [1]=>
        float(0.8)
      }
      [3]=>
      array(2) {
        [0]=>
        float(100.8)
        [1]=>
        float(0.2)
      }
      [4]=>
      array(2) {
        [0]=>
        float(100.2)
        [1]=>
        float(0.2)
      }
    }
  }
}

许可证

geojson-rewind 根据 BSD-3-Clause 许可证发布。有关更多信息,请参阅 许可证文件