IOS 通過 A 點坐標根據(jù)真北度數(shù)和增加公里數(shù)得到 B 點坐標

一搜全是計算兩個坐標之間距離的算法, 數(shù)學(xué)不行, 自己對算法不是很精通, 折騰了好幾天才寫出來的, 如果有錯誤請留言謝謝

代碼如下

/**

通過 A 點經(jīng)緯度增加公里數(shù)得到 B 點經(jīng)緯度

@param centerCoordinate? A 點坐標

@param distance 公里數(shù)(km)

@param radians? 正北方向(0 ~ 360)

@return 返回值

*/

- (CLLocationCoordinate2D)calculateLatLng:(CLLocationCoordinate2D)centerCoordinate Distance:(CLLocationDistance)distance Radians:(CLLocationDistance)radians

{

static double Rc = 6378137;// 地球的赤道半徑

static double Rj = 6356725;// 極半徑

double m_LoDeg,m_LoMin,m_LoSec;

double m_LaDeg,m_LaMin,m_LaSec;

double m_Longitude,m_Latitude;

double m_RadLo,m_RadLa;

double Ec;

double Ed;

m_LaDeg = centerCoordinate.latitude;

m_LaMin = (centerCoordinate.latitude - m_LaDeg) * 60;

m_LaSec = (centerCoordinate.latitude - m_LaDeg-m_LaMin / 60) * 3600;

m_LoDeg = centerCoordinate.longitude;

m_LoMin = (centerCoordinate.longitude - m_LoDeg) * 60;

m_LoSec = (centerCoordinate.longitude - m_LoDeg - m_LoMin / 60) * 3600;

m_Longitude = centerCoordinate.longitude;

m_Latitude = centerCoordinate.latitude;

m_RadLo = centerCoordinate.longitude * M_PI / 180.;

m_RadLa = centerCoordinate.latitude * M_PI / 180.;

Ec = Rj + (Rc - Rj) * (90 - m_Latitude) / 90.;

Ed = Ec * cos(cos(M_PI / (180 / m_RadLa)));

double dx = distance * 1000 * sin(M_PI / (180 / radians));

double dy = distance * 1000 * cos(M_PI / (180 / radians));

CLLocationDegrees latitude = (dx / Ed + m_RadLo) * 180 / M_PI;

CLLocationDegrees longitude = (dy / Ec + m_RadLa) * 180 / M_PI;

CLLocationCoordinate2D newCoordinate;

newCoordinate.latitude = longitude;

newCoordinate.longitude = latitude;

return newCoordinate;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容