david-r-edgar / rdp
折线简化Ramer–Douglas–Peucker算法
0.0.1
2016-05-02 19:23 UTC
Requires
- php: >=5.3.0
This package is not auto-updated.
Last update: 2024-09-28 19:09:40 UTC
README
PHP实现的Ramer–Douglas–Peucker算法,用于折线简化。
许可证:公有领域
示例简化折线
安装
composer require david-r-edgar/rdp
示例用法
use davidredgar\polyline\RDP;
$line = array(
array(150, 10),
array(200, 100),
array(360, 170),
array(500, 280));
$rdpResult = RDP::RamerDouglasPeucker2d($line, 30);
$rdpResult
将包含一个包含减少的点数的数组。对于此示例
$rdpResult == array(
array(150, 10),
array(200, 100),
array(500, 280));
RamerDouglasPeucker2d()
的第二个参数是 epsilon,表示任意点与相邻两点之间线段的最大垂直距离。尝试将其替换为10或50,并观察结果。
用于地理目的
我最初实现这个是为了简化地图上的复杂路线。因为我是在英国使用OSGB36坐标做的,所以这个方法有效。
但是,如果您想尝试使用其他坐标系统,请务必小心。该算法假设在二维平面上的笛卡尔坐标系。尝试在球面上使用经纬度将导致结果不正确。对于近似折线简化,结果可能仍然可以接受。当接近两极时,错误将越来越明显:简单来说,经度的度数将比纬度的度数更接近,因此会选择错误点从折线中移除。