Hello.
Something like that:
using UnityEngine;
public class GetPointHeading:MonoBehaviour
{
private OnlineMaps map;
private float trueHeading;
private void Start()
{
map = OnlineMaps.instance;
OnlineMapsControlBase.instance.OnMapClick += OnMapClick;
OnlineMapsLocationService.instance.OnCompassChanged += OnCompassChanged;
}
private void OnCompassChanged(float f)
{
trueHeading = f * 360;
}
private void OnMapClick()
{
double mx, my, px, py;
map.GetPosition(out mx, out my);
OnlineMapsControlBase.instance.GetCoords(out px, out py);
// Online Maps v2.4 way:
map.projection.CoordinatesToTile(mx, my, map.zoom, out mx, out my);
map.projection.CoordinatesToTile(px, py, map.zoom, out px, out py);
// Online Maps v2.3 way:
// OnlineMapsUtils.LatLongToTiled(mx, my, map.zoom, out mx, out my);
// OnlineMapsUtils.LatLongToTiled(px, py, map.zoom, out px, out py);
// 0 - North, 90 - East, 180 - South, 270 (in this case, the following number is -89) - West
float heading = (float)OnlineMapsUtils.Angle2D(mx, my, px, py) + 90;
float relativeHeading = heading - trueHeading;
if (relativeHeading < -180) relativeHeading += 360;
else if (relativeHeading > 180) relativeHeading -= 360;
Debug.Log("Heading: " + heading + ", True Heading: " + trueHeading + ", Relative Heading: " + relativeHeading);
}
}
Kind Regards,
Infinity Code Team.
Boost your productivity a lot and immediately using
Ultimate Editor Enhancer.
Trial and non-commerce versions available.