查找最小/最大纬度和经度

时间:2013-09-09 10:42:49

标签: iphone ios objective-c cocoa-touch cocoa

我的问题是如何从当前位置找到特定区域 (500米) 的最小和最大纬度和经度。

在我的情况下,就像我需要从{{获得 X Y CLLocation (纬度和经度) 1}}面积的仪表
查看我的图片(对不起,这可能是糟糕的图纸)

enter image description here

我还必须尝试谷歌搜索,我得到像

这样的链接

How can i get minimum and maximum latitude and longitude using current location and radius?

但我不知道它是如何实现的。

请在这个问题上帮助我。

  

注意:我不想使用 500 ,因为它对我的情况没有帮助。

5 个答案:

答案 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
  1. 创建无限循环。
  2. 在循环中检查距离是否大于500.如果是,则中断。如果没有,请将0.1值添加到纬度或经度。
  3. 以上方式获得最大经度,最大纬度,最小经度和最小纬度。
  4. 比较您的数据库,如果CLLocation在值内,则返回。
  5. 我不能说这是解决问题的最佳方法。因为我们猜测价值......如果你知道如何从给定距离转换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)));