Laravel谷歌地图检查矩形是否包含位置



我想像这个谷歌地图文档示例一样,在Laravel中包含Location((,我有一个包含矩形(多边形(等选定点的区域,我想检查新点是在该区域内部还是外部。

我尝试了这个软件包,并使用了下面的功能,但没有成功。

$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);

事实证明,这可以在没有谷歌地图的情况下完成,只需使用纯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';

结果:进出

相关内容

  • 没有找到相关文章

最新更新