Files
SHI-Cesium/Assets/Scripts/GeoUtils.cs
2025-09-15 22:09:10 +09:00

29 lines
1.1 KiB
C#

using UnityEngine;
using Unity.Mathematics;
using CesiumForUnity;
public static class GeoUtils
{
public static double3 GetLonLatHeight(CesiumGeoreference geoRef, Vector3 unityPos)
{
double3 ecef = geoRef.TransformUnityPositionToEarthCenteredEarthFixed(math.double3(unityPos));
double3 llh = CesiumWgs84Ellipsoid.EarthCenteredEarthFixedToLongitudeLatitudeHeight(ecef);
return llh;
}
public static double Haversine(double lat1, double lon1, double lat2, double lon2)
{
double R = 6371000.0;
double latRad1 = Mathf.Deg2Rad * (float)lat1;
double latRad2 = Mathf.Deg2Rad * (float)lat2;
double dLat = Mathf.Deg2Rad * (float)(lat2 - lat1);
double dLon = Mathf.Deg2Rad * (float)(lon2 - lon1);
double a = Mathf.Sin((float)dLat / 2) * Mathf.Sin((float)dLat / 2) +
Mathf.Cos((float)latRad1) * Mathf.Cos((float)latRad2) *
Mathf.Sin((float)dLon / 2) * Mathf.Sin((float)dLon / 2);
double c = 2 * Mathf.Atan2(Mathf.Sqrt((float)a), Mathf.Sqrt((float)(1 - a)));
return R * c;
}
}