c# - C#创建距离为100km的经纬度地图字典
问题描述
我正在尝试计算数学以获得彼此之间特定距离内的所有经度和纬度。我有计算地理坐标之间距离的数学,但我想从特定距离的标准平面地球地图中获取所有地理坐标的数组。你能帮我吗?
这是地球图图片的示例链接。我有分辨率为 43200x21600 的地球高度图,我想在 100 公里的精确距离内获得从左下角到右上角的高度/像素索引。如果我能得到距离 100 公里的经度和纬度,那么我可以读取这些高度。
这是地理点之间距离的数学:
public static float GetGeographicDistance(float latitudeA, float longitudeA, float latitudeB, float longitudeB, float earthRadius = 6371.007f)
{
float phi1 = latitudeA * Mathf.Deg2Rad;
float phi2 = latitudeB * Mathf.Deg2Rad;
float deltaPhi = (latitudeB - latitudeA) * Mathf.Deg2Rad;
float deltaLambda = (longitudeB - longitudeA) * Mathf.Deg2Rad;
float a = Mathf.Sin(deltaPhi / 2) * Mathf.Sin(deltaPhi / 2) +
Mathf.Cos(phi1) * Mathf.Cos(phi2) *
Mathf.Sin(deltaLambda / 2) * Mathf.Sin(deltaLambda / 2);
float c = 2.0f * Mathf.Atan2(Mathf.Sqrt(a), Mathf.Sqrt(1.0f - a));
return earthRadius * c;
}
解决方案
知道了。如果有人需要,这里是 C# 中的函数。
public static TGeographicCoordinate DestinationPointFromStartPoint(TGeographicCoordinate start, double distance = 100f, double bearing = 90f, double earthRadius = 6371.009d)
{
TGeographicCoordinate result = new TGeographicCoordinate();
double angularDistanceRdn = distance / earthRadius;
double bearingRad = Mathf.Deg2Rad * bearing;
double startLatRad = start.Latitude * Mathf.Deg2Rad;
double startLonRad = start.Longitude * Mathf.Deg2Rad;
result.Latitude = Math.Asin((Math.Sin(startLatRad) * Math.Cos(angularDistanceRdn)) +
(Math.Cos(startLatRad) * Math.Sin(angularDistanceRdn) * Math.Cos(bearingRad)));
result.Longitude = startLonRad + Math.Atan2(Math.Sin(bearingRad) * Math.Sin(angularDistanceRdn) * Math.Cos(startLatRad),
Math.Cos(angularDistanceRdn) - (Math.Sin(startLatRad)) * Math.Sin(result.Latitude));
result.Latitude *= Mathf.Rad2Deg;
result.Longitude *= Mathf.Rad2Deg;
return result;
}
推荐阅读
- java - 引用是如何在 Java 中存储的
- sql - 无法通过完全外连接获取空值
- git - 使用git进行持续集成的工作流程是什么
- php - php + 身份服务器,check_session
- delegates - watchOS 中的扩展运行时会话在首次运行后停止工作
- firebase - 如何访问另一个集合中的集合?[颤振] [火力基地]
- flutter - 在 Flutter 中是否有可以在按下键盘上的 Return 按钮时捕获的命令?
- material-ui - `get` 和相对定位的赛普拉斯滚动行为
- kubernetes-helm - Helm:升级失败:无法通过更新字段图像修补 ...
- laravel - 如何通过 gitlab-ci.yml 将 laravel 项目从 gitlab 拉到远程服务器