检查地理位置是不是在边界内
Posted
技术标签:
【中文标题】检查地理位置是不是在边界内【英文标题】:Check if geolocation is within boundaries检查地理位置是否在边界内 【发布时间】:2014-06-11 15:11:07 【问题描述】:我正在尝试在某个区域的边界内生成一些地理位置,现在我正在尝试在这些边界内生成地理位置
$bounds = array(
array(55.4024447, 13.1656691),
array(56.1575776, 15.8350261),
array(68.0410163, 17.4600359),
array(58.9380148, 11.3501468),
array(67.6820048, 16.1964251)
);
现在我的检查如下
if (
($bounds[0][0] < $lat && $bounds[0][1] < $lng) &&
($bounds[1][0] < $lat && $bounds[1][1] > $lng) &&
($bounds[2][0] > $lat && $bounds[2][1] > $lng) &&
($bounds[3][0] > $lat && $bounds[3][1] < $lng) &&
($bounds[4][0] > $lat && $bounds[4][1] > $lng)
)
但是,这只会获取中间正方形内的位置,而不是整个区域 您知道如何在整个区域内进行检查吗?
【问题讨论】:
查看我对类似问题的回答Here。它使用 javascript。 感谢朋友,好帖子 【参考方案1】:以下php代码使用point in polygon算法。
在图 1 中,点位于多边形中,并且由此绘制的线穿过多边形的周长奇数次 (3)。在图 2 中,线穿过周界的次数为偶数次 (4),并且该点位于外部。
<?php
function pointInPolygon($polySides,$polyX,$polyY,$x,$y)
$j = $polySides-1 ;
$oddNodes = 0;
for ($i=0; $i<$polySides; $i++)
if ($polyY[$i]<$y && $polyY[$j]>=$y || $polyY[$j]<$y && $polyY[$i]>=$y)
if ($polyX[$i]+($y-$polyY[$i])/($polyY[$j]-$polyY[$i])*($polyX[$j]-$polyX[$i])<$x)
$oddNodes=!$oddNodes;
$j=$i;
return $oddNodes;
$polySides = 3;
$x =60;
$y =15;
$polyX = array(55.4024447,56.1575776,68.0410163,67.6820048,58.9380148,55.4024447);// First point repeated to close polygon coordinates
$polyY = array(13.1656691,15.8350261,17.4600359,16.1964251,11.3501468,13.1656691);
if (pointInPolygon($polySides,$polyX,$polyY,$x,$y))
echo "Point In Polygon";
else
echo "Point Not In Polygon";
?>
【讨论】:
感谢伟大的帖子,正是我想要的! @MaciekSemik 如果该点非常接近该边界,则由于舍入误差,结果可能不正确。如果这是有问题的,您可以引入数值公差并测试该点是否在公差范围内。以上是关于检查地理位置是不是在边界内的主要内容,如果未能解决你的问题,请参考以下文章