我的问题是如何从当前位置找到特定区域 (500米) 的最小和最大纬度和经度。
在我的情况下,就像我需要从{{获得 X 和 Y CLLocation
(纬度和经度) 1}}面积的仪表
查看我的图片(对不起,这可能是糟糕的图纸)
我还必须尝试谷歌搜索,我得到像
这样的链接How can i get minimum and maximum latitude and longitude using current location and radius?
但我不知道它是如何实现的。
请在这个问题上帮助我。
注意:我不想使用
500
,因为它对我的情况没有帮助。
答案 0 :(得分:1)
如果您不需要非常精确的值,请使用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也将为您处理。
答案 1 :(得分:0)
您必须从当前位置以km为单位进行 radius 计算。
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回答
答案 2 :(得分:0)
要获得准确的价值,您应该尝试使用
minLattitude = currentLattitude - (RadiusInKm/111.12);
maxLattitude = currentLattitude + (RadiusInKm/111.12);
因此在你的情况下RadiusInKm = 0.5
寻找&最大经度数据你需要遵循同样的事情,但你必须将结果与纬度的余弦函数相乘
答案 3 :(得分:0)
我会这样做。
double accuracy = 0.1;//How accurate do you want. Smaller value, slower perform
double distance = 500;//Distance you want
我不能说这是解决问题的最佳方法。因为我们猜测价值......如果你知道如何从给定距离转换CLLocation,那就更好了!
答案 4 :(得分:0)
这应该是正确的(在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)));