任意の緯度・経度情報から、別の箇所の緯度・経度情報の「方位」を計算するAppleScriptです。
北を0として、西に向かうとマイナス、東に向かうとプラスの値で角度(方位)を返します。この手の計算に必須のatan2関数がAppleScriptに標準装備されていないため、atan2の機能を提供するSatimage OSAXを実行環境にインストールしておく必要があります。
各種三角関数に関しては、直接計算する関数がなくても、あらかじめ計算しておいてテーブルから取得する程度でも精度的には問題のないケースが多いので、テーブルでデータを持っておくことも多々あります。
最近、Numbersで内蔵関数を増やすために利用している「cephes math library」あたりがCレベルではなくObjective-Cレベルから直接利用できるとよさそうなのですが、、、
AppleScript名:1箇所から別の箇所の方位を求める |
— Created 2017-04-27 by Takaaki Naganoya — 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions –requires "Satimage osax" http://www.satimage.fr/software/en/downloads/downloads_companion_osaxen.html use framework "Foundation" use bPlus : script "BridgePlus" –https://www.macosxautomation.com/applescript/apps/BridgePlus.html –http://zurb.com/forrst/posts/Direction_between_2_CLLocations-uAo set coord1 to {latitude:35.73677496, longitude:139.63754457} –中村橋駅 set coord2 to {latitude:35.78839012, longitude:139.61241447} –和光市駅 set dirRes to calcDirectionBetweenTwoPlaces(coord1, coord2) of me –> -25.925429877542 (*) set coord2 to {latitude:35.78839012, longitude:139.61241447} –和光市駅 set dirRes to calcDirectionBetweenTwoPlaces(coord1, coord2) of me –> -25.925429877542 set coord2 to {latitude:35.7227821, longitude:139.63860897} –鷺宮駅 set coord2 to {latitude:35.73590542, longitude:139.62986745} –富士見台駅 set coord2 to {latitude:35.73785024, longitude:139.65339321} –練馬駅 set coord2 to {latitude:35.71026838, longitude:139.81215754} –東京スカイツリー on calcDirectionBetweenTwoPlaces(coord1, coord2) load framework set deltaLong to (longitude of coord2) – (longitude of coord1) set yComponent to bPlus’s sinValueOf:deltaLong set xComponent to (bPlus’s cosValueOf:(latitude of coord1)) * (bPlus’s sinValueOf:(latitude of coord2)) – (bPlus’s sinValueOf:(latitude of coord1)) * (bPlus’s cosValueOf:(latitude of coord2)) * (bPlus’s cosValueOf:deltaLong) set vList to {yComponent, xComponent} set radians to atan2 vList —Requires SatImage OSAX set degreeRes to (radToDeg(radians) of me) return degreeRes end calcDirectionBetweenTwoPlaces on radToDeg(aRadian) return aRadian * (180 / pi) end radToDeg |
atan2をFramework呼び出しで計算する - AppleScript Hole says:
[…] 2点の緯度経度情報同士の位置関係を計算するatan2は、割と重要な関数ですが、AppleScriptの標準状態では利用できません。 […]
1箇所から別の箇所の方位を求める v2 - AppleScript Hole says:
[…] v1では、Satimage OSAXのインストールが必要でしたが、自前でObjective-Cで書いた「atan2だけを計算するフレームワーク」に置き換えたものです。 […]