我对使用坐标很感兴趣,我想知道,如何以米为单位获得两点(坐标)之间的距离。经过长时间的搜索,我在这里找到了 Haversine 公式,以及它的 Objective-C 实现。
如下(我为自己修改了一点):
- (CGFloat)directMetersFromCoordinate:(CLLocation *)from toCoordinate:(CLLocation *)to {
static const double DEG_TO_RAD = 0.017453292519943295769236907684886;
static const double EARTH_RADIUS_IN_METERS = 6372797.560856;
double latitudeArc = (from.coordinate.latitude - to.coordinate.latitude) * DEG_TO_RAD;
double longitudeArc = (from.coordinate.longitude - to.coordinate.longitude) * DEG_TO_RAD;
double latitudeH = sin(latitudeArc * 0.5);
latitudeH *= latitudeH;
double lontitudeH = sin(longitudeArc * 0.5);
lontitudeH *= lontitudeH;
double tmp = cos(from.coordinate.latitude*DEG_TO_RAD) * cos(to.coordinate.latitude*DEG_TO_RAD);
return EARTH_RADIUS_IN_METERS * 2.0 * asin(sqrt(latitudeH + tmp*lontitudeH)); }
我的问题是:如何获得当前位置 100 米的距离(纬度和经度)?这个公式对我来说太复杂了,我看不懂,所以我不能“把它编码回来”来得到我想要的结果。
我只需要实际位置(巴黎、东京、伦敦、纽约等),以及纬度的(浮点数)和经度的(浮点数),其中(浮点数)表示距实际位置 100 米的距离。
如果您打开此页面,您可以在此处“计算”两点之间的 100 米距离(“实际”和一个 100 米距离)。
例如:
Point1: 47.0, 19.0 Point2: 47.0, 19.0013190 --- 那是 0.1000 km (100 m) 的距离。
Point1: 47.0, 19.0 Point2: 47.0008995, 19.0 --- 也是 0.1000 km (100 m) 距离。
在这里你可以看到,在那个坐标(纬度 47.0 和经度 19.0)100 米的距离是 0.0008995(纬度)和 0.0013190(经度)。
我想在Haversine Formula的帮助下获得这些数据,只是不知道如何。
你能帮我弄清楚吗?
谢谢!
更新: 感谢您的回答,现在我没有时间尝试它们,但据我所知,我没有准确解释我想要什么。也许这是一个更好的例子,我想如何使用这些“100米”:
所以,现在我在坐标“lat x”和“lon y”。在另一个给定坐标“lat a”和“lon b”处还有另一个点(假设是一家酒店)。我的问题是:如果这家酒店距离我(小于)100 米,我该如何计算?所以没关系,如果只是5米还是99米,它们离我的距离都小于(或等于)100米。
使用我提供的代码,我可以计算出来,这就是那个公式的用途。
但是,假设我有一百万个其他坐标(酒店位置)要使用。我只需要一份清单,离我(不到)100 米的地方。所以是的,这是一个半径为 100 米的圆圈,我需要其中的结果。
把这些“百万”酒店的所有坐标一一计算出来需要花费更多的时间和资源,这就是为什么我认为计算出来会容易得多,经纬度有多少100米(改变我们在不同位置的值,这就是为什么我不能简单地使用我在上面的例子中计算出的那些)。因此,如果我想知道纬度和经度有多少 100 米,例如在伦敦的坐标(如果我在那里),我可以简单地获取距离我(小于)100 米的酒店列表,通过简单划分:
if
((hotelLocation.coordinate.latitude <= (myLocation.coordinate.latitude + "100metersInLatitude")) || (hotelLocation.coordinate.latitude >= (myLocation.coordinate.latitude - "100metersInLatitude")))
&&
((hotelLocation.coordinate.longitude <= (myLocation.coordinate.longitude + "100metersInLongitude")) || (hotelLocation.coordinate.longitude >= (myLocation.coordinate.longitude - "100metersInLongitude")))
{
NSLog(@"Be Happy :-) !");
}
我只需要这些“100metersInLatitude”和“100metersInLongitude”,总是从“myLocation”计算。
哇,我希望,有人会理解我刚刚写下的内容,因为这对我来说并不容易,也不是...... :-)))