我的问题是如何从当前位置找到特定区域(500米)的最小和最大纬度和经度。
在我的情况下,像我需要从CLLocation
meter的区域获得X和Y 500
(经度和纬度)
看我的形象(对不起,这可能是糟糕的图纸)
我也必须尝试谷歌搜索,我得到这样的链接
How can i get minimum and maximum latitude and longitude using current location and radius?
但我不知道它是如何实现的。
请帮我解决这个问题。
注意:我不想使用
CLLocationDistance distance = [currentLocation distanceFromLocation:newLocation];
因为它对我的情况没有帮助所以..
如果你不需要一个非常精确的值,那么使用1 degree is 111 km的近似值。基于此,您需要在当前坐标上添加和删除0.0025度,以获得您要查找的区域的角。
rectanglesidelengthmeters = 500
degreedeltalat = 0.001 * (rectanglesidelengthmeters / 2.0) * cos(current.lon)
degreedeltalon = 0.001 * (rectanglesidelengthmeters / 2.0) * cos(current.lat)
minlat = current.lat - degreedeltalat
maxlat = current.lat + degreedeltalat
minlon = current.lon - degreedeltalon
maxlon = current.lon + degreedeltalon
您可能需要稍微校正结果以保持纬度的-90 ... 90范围和经度值的-180 ... 180范围,但我认为CLClocation也将为您处理。
您必须从当前位置以km为单位进行半径计算。
double kilometers = 0.5;
double curve = ABS( (cos(2 * M_PI * location.coordinate.latitude / 360.0) ));
MKCoordinateSpan span;
span.latitudeDelta = kilometers/111; //like allprog said.
span.longitudeDelta = kilometers/(curve * 111);
MKCoordinateRegion region;
region.span = span;
region.center = location.coordinate;
[self.mapView setRegion:region animated:YES];
这样我设置mapView
显示距离区域到0.5公里。
编辑:哇,我在我的旧“喜欢”问题中挖掘出一些原始答案,但在下面接受了一个更好的答案:
how to make mapview zoom to 5 mile radius of current location
看看@Anurag的回答
要获得准确的价值,您应该尝试
minLattitude = currentLattitude - (RadiusInKm/111.12);
maxLattitude = currentLattitude + (RadiusInKm/111.12);
因此在你的情况下RadiusInKm = 0.5
要查找和最大经度数据,您需要遵循相同的事情,但你必须将结果与纬度的余弦函数相乘
我会这样做的。
double accuracy = 0.1;//How accurate do you want. Smaller value, slower perform
double distance = 500;//Distance you want
我不能说这是解决问题的最佳方法。因为我们猜测价值......如果你知道如何从给定距离转换CLLocation,那就更好了!
这应该是正确的(在PHP中) https://www.movable-type.co.uk/scripts/latlong-db.html
$R = 6371; // earth's mean radius, km
$rad = 0.5
// first-cut bounding box (in degrees)
$maxLat = $lat + rad2deg($rad/$R);
$minLat = $lat - rad2deg($rad/$R);
$maxLon = $lon + rad2deg(asin($rad/$R) / cos(deg2rad($lat)));
$minLon = $lon - rad2deg(asin($rad/$R) / cos(deg2rad($lat)));