如何判断一个坐标点是否在一个多边形中,具体的应用场景就是,外卖派送,用户提供的坐标是否是在外卖的派送范围之内。用户的坐标可以通过手机设备获取到,派送范围就是通过在地图上,进行多边形的绘制,获取多个坐标点连接起来的配送范围。下面来看看代码上是如何简单判断的。
mjaschen/phpgeo是一个php的geo的库,提供了一些关于地理经纬度相关的功能,例如地理围栏、距离计算等。
坐标点参考腾讯地图的demo:
https://lbs.qq.com/javascript_v2/case-run.html#sample-overlay-polygon-contains
首先composer安装此包: PHP要求至少大于7
代码语言:javascript复制composer require mjaschen/phpgeo
然后编写测试代码:
代码语言:javascript复制<?php
require './vendor/autoload.php';
//引入两个类
use LocationCoordinate;
use LocationPolygon;
//绘制一个多边形
$geo = new Polygon();
$geo->addPoint(new Coordinate(39.930131, 116.417301));
$geo->addPoint(new Coordinate(39.930131, 116.377476));
$geo->addPoint(new Coordinate(39.911305, 116.377476));
$geo->addPoint(new Coordinate(39.911305, 116.417301));
//两个坐标做测试
$a = new Coordinate(39.916527, 116.397128);
$b = new Coordinate(39.901305, 116.397128);
//判断是否在执行的多边形中
if ($geo->contains($a)) {
echo "a点在多边形的范围内";
} else {
echo "a点不在多边形的范围内";
}
echo "<br/>";
if ($geo->contains($b)) {
echo "b点在多边形的范围内";
} else {
echo "b点不在多边形的范围内";
}
结果: