我正在使用MKMapView
并且我将我的php程序发送到可见区域(中心lat,中心lon,span lat,span lon)。我需要使用php确定坐标是否在该区域内。我希望某处有一个标准配方,但我还没找到。我会不断尝试提出一个公式,但它的结果非常复杂(希望没有像我所说的那样,我不相信我自己能想出来的。)
答案 0 :(得分:3)
试试这个逻辑
$topRightLongitude = $centerLongitude + $spanLongitude/2;
if($topRightLongitude > 180 and ($pointLongitude < 0))
$topRightLongitude = $topRightLongitude - 360; // (180*2) - positive becomes negative
$bottomLeftLongitude = $centerLongitude - $spanLongitude/2;
if($bottomLeftLongitude< -180 and ($pointLongitude > 0))
$bottomLeftLongitude= 360 + $bottomLeftLongitude; // now is negative and will become positive
$topRightLatitude = $centerLatitude + $spanLatitude/2;
if($topRightLatitude > 90 and ($pointLatitude < 0))
$topRightLatitude = $topRightLatitude - 180; // (90*2) - positive becomes negative
$bottomLeftLatitude = $centerLatitude - $spanLatitude/2;
if($bottomLeftLatitude< -90 and ($pointLatitude > 0))
$bottomLeftLatitude= 180 + $bottomLeftLongitude; // now is negative and will become positive
如果你有
$centerLongitude = 179;
$spanLongitude = 20;
$pointLongitude = -179;
结果
$topRightLongitude = -171;
$bottomLeftLongitude = 169;
所以,如果你按照这样的方式进行测试,你的意思是:
if($pointLongitude < $topRightLongitude &&
$pointLongitude > $bottomLeftLongitude &&
$pointLatitude < $topRightLatitude &&
$pointLatitude > $bottomLeftLatitude){
echo 'in';
}else{
echo 'out';
}
答案 1 :(得分:1)
我的解决方案
MKMapView
这似乎适用于{{1}},因为区域纬度始终在-90到90之间。
答案 2 :(得分:0)
这个逻辑应该有效:
if ( ($X > $center_lat - $span_lat/2) &&
($X < $center_lat + $span_lat/2) &&
($Y > $center_lon - $span_lon/2) &&
($Y < $center_lon + $span_lon/2) ) {
echo "It's inside!";
} else {
echo "It's outside ...";
}
答案 3 :(得分:0)
之前我曾经为我自己的问题找到了解决方案,但是对于坐标的十进制值而言它是有效的。如果你可以将deg转换为十进制可能会有效。
我已根据您的问题重命名变量。
这是逻辑。
if
(
(
($lat - $spanLat) < $centerLat &&
$centerLat < ($lat+ $spanLat)
) &&
(
($long - $spanLong) < $centerLong &&
$centerLong < ($long + $spanLong)
)
)