【问题标题】:Laravel google maps check if rectangle contains locationLaravel 谷歌地图检查矩形是否包含位置
【发布时间】:2021-07-29 19:44:00
【问题描述】:

我想在 Laravel 中像这个谷歌地图文档示例 containsLocation() 那样做,我有一个带有选定点的区域,比如矩形(多边形),我想检查一个新点是在这个区域的内部还是外部。

我尝试了this package并使用了下面的功能,但无济于事。

        $response = \GoogleMaps::load('directions')
        ->setParam([
            'origin'          => 'place_id:ChIJ685WIFYViEgRHlHvBbiD5nE',
            'destination'     => 'place_id:ChIJA01I-8YVhkgRGJb0fW4UX7Y',
        ])
        ->setParam([
            'origin'          => 'place_id:ChIJA01I-8YVhkgRGJb0fW4UX7Y',
            'destination'     => 'place_id:ChIJIyaYpQC4h0gRJxfnfHsU8mQ',
        ])
        ->setParam([
            'origin'          => 'place_id:ChIJIyaYpQC4h0gRJxfnfHsU8mQ',
            'destination'     => 'place_id:ChIJ685WIFYViEgRHlHvBbiD5nE',
        ])

        ->containsLocation(56.152257678858895, -3.6390740222681406);

【问题讨论】:

  • “无济于事”是什么意思?响应是否错误,是否引发异常?你能澄清一下吗?
  • @VitorHugoSchwaab 我没有得到任何真正的回应,感觉包的 containsLocation() 函数只指方向上的点,而不是多边形内部!即使我不确定,因为所有回答都是错误的;

标签: php laravel google-maps google-maps-api-3


【解决方案1】:

原来这个不用google maps也可以,只需要纯php做一些计算,感谢tutorialspots.com/php-detect-point-in-polygon

检测多边形中的点的PHP函数:

function contains($point, $polygon)
{
    if($polygon[0] != $polygon[count($polygon)-1])
        $polygon[count($polygon)] = $polygon[0];
    $j = 0;
    $oddNodes = false;
    $x = $point[1];
    $y = $point[0];
    $n = count($polygon);
    for ($i = 0; $i < $n; $i++)
    {
        $j++;
        if ($j == $n)
        {
            $j = 0;
        }
        if ((($polygon[$i][0] < $y) && ($polygon[$j][0] >= $y)) || (($polygon[$j][0] < $y) && ($polygon[$i][0] >=
            $y)))
        {
            if ($polygon[$i][1] + ($y - $polygon[$i][0]) / ($polygon[$j][0] - $polygon[$i][0]) * ($polygon[$j][1] -
                $polygon[$i][1]) < $x)
            {
                $oddNodes = !$oddNodes;
            }
        }
    }
    return $oddNodes;
}

测试:

$polygon = array(
    array(0,0),
    array(0,5),
    array(4,3),
    array(3,0),
    array(0,0),
);
 
$point1 = array(3,3);
 
echo contains($point1,$polygon)?'IN':'OUT';
echo "<br />";
 
$point2 = array(4,4);
 
echo contains($point2,$polygon)?'IN':'OUT';

结果: 进进出出

【讨论】:

    猜你喜欢
    • 2018-01-13
    • 2015-02-17
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多