Core Locationを用いた地球上の2点間の距離計算のAppleScriptです。
地球は楕円体であるため、その楕円率を考慮して距離計算する必要があります。Core Locationには楕円率を考慮した計算が行われていることを期待しています。
完全球体として2点間の距離を計算すると近似値になってしまうものの、(東京近郊の2点の計算時)実際の計算結果を比較すると、4.2kmの距離計算時に1メートル程度の誤差としてしか表れてこないため、計算精度をさほど求められない用途においては、地球を完全球体として扱った近似計算でも十分に有用なケースがあります。
東京-鹿児島間で距離計算したときに、
A. 楕円率を考慮して計算:960392.341424メートル
B. 完全球体として近似計算:960581.2302612メートル
誤差(A.- B.):189メートル
ぐらいの誤差です。日本国内の1点からの最寄りの施設を計算するぐらいなら完全球体として計算しても大丈夫でしょう。処理時間とか計算対象の座標数を考慮し、用途に応じて選択するとよいでしょう。
追記:
気になったので、CoreLocationで距離を求めるタイプ(First)と、完全球体で近似計算を行うタイプ(Second)のルーチンで1万回ループで実行して、実行時間を求めてみました。
MacBookPro10,1, macOS Version 10.14.6 (Build 18G6006), 10000 iterations First Run Total Time Average First 0.005 11.614 0.001 Second 0.001 2.958 0.000 Ratio (excluding first run): 3.93:1
結果は、予想どおりCoreLocationで行うルーチン(本Script)の方が約4倍低速でした。ただし、実際の処理に組み込んでこの通りにならないケースもあるので、実際の処理で計測してどちらを用いるべきかを判断することになるでしょう。
AppleScript名:2点間の距離を求める v3 |
— Created 2015-03-03 by Shane Stanley use AppleScript version "2.4" use scripting additions use framework "Foundation" use framework "CoreLocation" set aPlace to current application’s CLLocation’s alloc()’s initWithLatitude:35.737072 longitude:139.637826 set bPlace to current application’s CLLocation’s alloc()’s initWithLatitude:35.753108 longitude:139.595123 set distanceInMetres to aPlace’s distanceFromLocation:bPlace –> 4252.71123319014 |
More from my site
(Visited 94 times, 1 visits today)
M1 Mac mini – AppleScriptの穴 says:
[…] 2点間の距離を求める v3 → 全国のゲームセンターの最寄りの鉄道の駅を求める […]