私は1つの場所から他の場所への方向を示す必要がある1つのiPhoneアプリで作業しています。つまり、現在の場所からどの方向(NまたはEまたはWまたはSまたはNEまたはNWまたはSEまたはSW)の目的地です。ある場所から別の場所への道順を取得する方法は知っていますが、方向を示す方法を探しています。私の問題は明らかですか?誰かがそれを行う方法を知っていれば、私を助けてください、ありがとう!
2 に答える
2つの場所の座標を知っていますか?
CLLocationCoordinate2Dを見てください:
latitude 度単位の緯度。正の値は、赤道より北の緯度を示します。負の値は、赤道より南の緯度を示します。
経度 度単位の経度。測定値は基準子午線に相対的であり、正の値は子午線の東に、負の値は子午線の西に伸びます。
したがって、緯度は非常に単純です。目的地の緯度が現在の場所の緯度よりも小さい場合は北にあり、現在の場所の緯度よりも大きい場合は南にあります。
latitudinal_distance = destination.latitude - origin.latitude
経度はもう少し複雑で、地球を 4 分の 3 周回した目的地はおそらく西にあると表現する方が適切であると考える必要があります。再び経度の値を比較し、東西両方の距離を考慮し、子午線との交差を処理し、短い方の距離を選択します。
distance_east = (origin.longitude > 0 && destination.longitude < 0) ? 180 - origin.longitude + destination.longitude - -180 : destination.longitude - origin.longitude; if (distance_east < 0) distance_east += 360
distance_west = (origin.longitude < 0 && destination.longitude > 0) ? -180 - origin.longitude - 180 - destination.longitude : origin.longitude - destination.longitude; if (distance_west < 0) distance_west += 360
longitudinal_distance = min(distance_east, distance_west)
緯度と経度で 2 つのポイントが何度離れているかがわかれば、目的地への方位を計算し、どの方位をどのコンパス ポイントとして表示するかを決定できます。4 つのポイント (N、E、S、W) しかないコンパスでは、各ポイントが 90 度をカバーします。8 つのポイントを持つコンパスでは、各ポイントが 45 度をカバーします。うまくいけば、あなたはアイデアを得る。
heading = arctan(longitudinal_distance / latitudinal_distance)
if (heading >= -45 || heading < 45) return 'N'; else if (heading >= 45 && heading < 135) return 'E'; else if ...
ここでは遅くなりましたが、これらの式をテストしていません。有用であると思われる場合は、やみくもに適用しようとするのではなく、理解してテストしてください。残念ながら、記号または座標ペアを転置した可能性は高いです。
Apple による磁力計 / コア位置のサンプルを見てみましょう:テスラメーター