php判断坐标是否在指定的多边形中

如何判断一个坐标点是否在一个多边形中,具体的应用场景就是,外卖派送,用户提供的坐标是否是在外卖的派送范围之内。用户的坐标可以通过手机设备获取到,派送范围就是通过在地图上,进行多边形的绘制,获取多个坐标点连接起来的配送范围。下面来看看代码上是如何简单判断的。

mjaschen/phpgeo是一个php的geo的库,提供了一些关于地理经纬度相关的功能,例如地理围栏、距离计算等。

坐标点参考腾讯地图的demo:

https://lbs.qq.com/javascript_v2/case-run.html#sample-overlay-polygon-contains

首先composer安装此包: PHP要求至少大于7

  1. composer require mjaschen/phpgeo

然后编写测试代码:

  1. <?php
  2. require './vendor/autoload.php';
  3. //引入两个类
  4. use Location\Coordinate;
  5. use Location\Polygon;
  6. //绘制一个多边形
  7. $geo = new Polygon();
  8. $geo->addPoint(new Coordinate(39.930131, 116.417301));
  9. $geo->addPoint(new Coordinate(39.930131, 116.377476));
  10. $geo->addPoint(new Coordinate(39.911305, 116.377476));
  11. $geo->addPoint(new Coordinate(39.911305, 116.417301));
  12. //两个坐标做测试
  13. $a = new Coordinate(39.916527, 116.397128);
  14. $b = new Coordinate(39.901305, 116.397128);
  15. //判断是否在执行的多边形中
  16. if ($geo->contains($a)) {
  17. echo "a点在多边形的范围内";
  18. } else {
  19. echo "a点不在多边形的范围内";
  20. }
  21. echo "<br/>";
  22. if ($geo->contains($b)) {
  23. echo "b点在多边形的范围内";
  24. } else {
  25. echo "b点不在多边形的范围内";
  26. }

结果:

PHP 判断坐标是否在指定的多边形中 - 图1

php开发中常用的Composer包

PHP 判断坐标是否在指定的多边形中 - 图2 PHP 判断坐标是否在指定的多边形中 - 图3