Ank*_*yas 16 iphone math map latitude-longitude coordinates
我有特定地方的纬度和经度,我想计算距离,所以我该如何计算呢?
Mad*_*bæk 32
CLLocation *location1 = [[CLLocation alloc] initWithLatitude:lat1 longitude:long1];
CLLocation *location2 = [[CLLocation alloc] initWithLatitude:lat2 longitude:long2];
NSLog(@"Distance i meters: %f", [location1 distanceFromLocation:location2]);
[location1 release];
[location2 release];
Run Code Online (Sandbox Code Playgroud)
您还需要添加CoreLocation.framework到项目中,并添加import语句:
#import <CoreLocation/CoreLocation.h>
Run Code Online (Sandbox Code Playgroud)
这可能不是最有效的方法,但它会起作用.
您可以将纬度和经度指定的两个位置视为向量.假设坐标已转换为caresion坐标,则计算两个向量的点积.
给定v1 =(x1,y1,z1)和v2 =(x2,y2,z2),那么......
v1 dot v2 = magnitude(v1) * magnitude(v2) * cos (theta)
Run Code Online (Sandbox Code Playgroud)
方便地,v1和v2的大小将相同......地球的半径(R).
x1*x2 + y1*y2 + z1*z2 = R*R*cos(theta)
Run Code Online (Sandbox Code Playgroud)
解决theta.
theta = acos ((x1*x2 + y1*y2 + z1*z2) / (R * R));
Run Code Online (Sandbox Code Playgroud)
现在你在弧度上的两个向量之间有一个角度.因此,当穿越地球表面时两点之间的距离是......
distance = theta * R.
Run Code Online (Sandbox Code Playgroud)
在球面坐标的上下文中可能有一种更简单的方法可以做到这一点,但我在该区域的数学太模糊 - 因此转换为笛卡尔坐标.
要转换为笛卡尔坐标...
设alpha为纬度,beta为经度.
x = R * cos (alpha) * cos (beta)
y = R * sin (alpha)
z = R * cos (alpha) * sin (beta)
Run Code Online (Sandbox Code Playgroud)
不要忘记,数学函数通常以弧度为单位,纬度/经度以度为单位.
| 归档时间: |
|
| 查看次数: |
19272 次 |
| 最近记录: |