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

问题描述 投票:4回答:5

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

在我的情况下,像我需要从CLLocationmeter的区域获得X和Y 500(经度和纬度) 看我的形象(对不起,这可能是糟糕的图纸)

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

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

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

请帮我解决这个问题。

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

iphone ios objective-c cocoa-touch cocoa
5个回答
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也将为您处理。


0
投票

您必须从当前位置以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的回答


0
投票

要获得准确的价值,您应该尝试

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

因此在你的情况下RadiusInKm = 0.5

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


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,那就更好了!


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)));
© www.soinside.com 2019 - 2024. All rights reserved.