Determine if the coordinate is inside the region (MKMapView, allow in PHP)

I use MKMapView and I send my php program to the visible area (center lat, center lon, span lat, span lon). I need to determine if the coordinate is inside this region using php. I hope there is a standard formula there, but I did not find it. I will continue to come up with a formula, but it is surprisingly complex (I hope not as much as the Haversin, and I do not believe that I could understand myself).

+8
php latitude-longitude mkmapview coordinate-systems
source share
4 answers

My decision

 $top = $c_lat + ($d_lat / 2.0); $bottom = $c_lat - ($d_lat / 2.0); $left = $c_lon - ($d_lon / 2.0); $right = $c_lon + ($d_lon / 2.0); if($left < -180) { $second_left = $left + 360.0; $second_right = 180.0; $left = -180; } elseif($right > 180) { $second_right = $right - 360.0; $second_left = -180.0; $right = 180.0; } $inside = false; if($t_lat > $bottom && $t_lat < $top && $t_lon > $left && $t_lon < $right) $inside = true; else if($second_right && $second_left) { if($t_lat > $bottom && $t_lat < $top && $t_lon > $second_left && $t_lon < $second_right) $inside = true; } if($inside) { } 

This seems to work with MKMapView since the latitude of the area is always between -90 and 90.

+1
source share

lets try this logic

 $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 

if you have

 $centerLongitude = 179; $spanLongitude = 20; $pointLongitude = -179; 

results

 $topRightLongitude = -171; $bottomLeftLongitude = 169; 

so your point is if you test as follows:

 if($pointLongitude < $topRightLongitude && $pointLongitude > $bottomLeftLongitude && $pointLatitude < $topRightLatitude && $pointLatitude > $bottomLeftLatitude){ echo 'in'; }else{ echo 'out'; } 
+3
source share

This logic should work:

 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 inside!"; } else { echo "It outside ..."; } 
0
source share

I used to work on a solution to my problem, but works for decimal values ​​of coordinates. Maybe if you can convert deg to decimal, it might work.

I renamed the variable according to your problem.

Here is the logic.

 if ( ( ($lat - $spanLat) < $centerLat && $centerLat < ($lat+ $spanLat) ) && ( ($long - $spanLong) < $centerLong && $centerLong < ($long + $spanLong) ) ) 
0
source share

All Articles