5

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

就我而言,比如我需要从米的区域获取XY CLLocation (纬度和经度) 查看我的图片(抱歉,这可能是糟糕的绘图)500

在此处输入图像描述

我也必须尝试谷歌搜索,我得到了这样的链接

如何使用当前位置和半径获得最小和最大纬度和经度?

但我不知道它在我的情况下是如何实现的。

请在这个问题上帮助我。

注意:我不想使用CLLocationDistance distance = [currentLocation distanceFromLocation:newLocation];,因为它对我的情况没有帮助,所以..

4

5 回答 5

1

如果您不需要真正精确的值,则使用1 度为 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 也会为您处理。

于 2013-09-09T10:53:01.200 回答
0

您必须从当前位置以公里为单位进行一些半径计算。

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 公里。

编辑: 哇,我挖掘了我以前的“喜欢”问题,向您展示了一些原始答案,但在接受的答案下方找到了一个更好的答案:

如何使地图视图缩放到当前位置半径 5 英里

看看@Anurag 的回答

于 2013-09-09T10:57:02.950 回答
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 在值内,则返回。

我不能说这是解决您的问题的最佳方法。因为我们在猜测价值……如果您知道如何从给定距离转换 CLLocation,那就更好了!

于 2013-09-09T11:33:34.637 回答
0

要获得精确的价值,您应该尝试使用

minLattitude = currentLattitude - (RadiusInKm/111.12);
maxLattitude = currentLattitude + (RadiusInKm/111.12);

因此,在您的情况下 RadiusInKm = 0.5

为了查找和最大经度数据,您需要遵循相同的操作,但您必须将结果与纬度的余弦函数相乘

于 2013-09-09T11:03:19.510 回答
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)));
于 2019-02-20T14:56:04.703 回答