Php Laravel谷歌地图检查矩形是否包含位置
我想像这个谷歌地图文档在Laravel中的例子一样,我有一个区域,其中有一个选定的点,比如一个矩形(多边形),我想检查一个新点是在这个区域的内部还是外部 我尝试并使用了下面的功能,但没有效果Php Laravel谷歌地图检查矩形是否包含位置,php,laravel,google-maps,google-maps-api-3,Php,Laravel,Google Maps,Google Maps Api 3,我想像这个谷歌地图文档在Laravel中的例子一样,我有一个区域,其中有一个选定的点,比如一个矩形(多边形),我想检查一个新点是在这个区域的内部还是外部 我尝试并使用了下面的功能,但没有效果 $response = \GoogleMaps::load('directions') ->setParam([ 'origin' => 'place_id:ChIJ685WIFYViEgRHlHvBbiD5nE',
$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进行一些计算,这要感谢 用于检测多边形中的点的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;
}
函数包含($point,$polygon)
{
如果($polygon[0]!=$polygon[count($polygon)-1])
$polygon[count($polygon)]=$polygon[0];
$j=0;
$oddNodes=false;
$x=$point[1];
$y=$point[0];
$n=计数($多边形);
对于($i=0;$i<$n;$i++)
{
$j++;
如果($j==$n)
{
$j=0;
}
如果(($polygon[$i][0]<$y)和($polygon[$j][0]>=$y))| |($polygon[$j][0]<$y)和($polygon[$i][0]>=
$y)))
{
如果($polygon[$i][1]+($y-$polygon[$i][0])/($polygon[$j][0]-$polygon[$i][0])*($polygon[$j][1]-
$polygon[$i][1])<$x)
{
$oddNodes=!$oddNodes;
}
}
}
返回$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';
$polygon=数组(
数组(0,0),
数组(0,5),
阵列(4,3),
数组(3,0),
数组(0,0),
);
$point1=数组(3,3);
echo包含($point1,$polygon)-'IN':'OUT';
回声“
”;
$point2=数组(4,4);
echo包含($point2,$polygon)-'IN':'OUT';
结果:
进进出出
“无用”是什么意思?响应是否错误,是否引发异常?你能澄清一下吗?@VitorHugoSchwaab我没有得到任何真实的响应,感觉包的containsLocation()函数只指向方向上的点,而不是多边形内部的点!尽管我不确定,因为所有的回答都是错误的;