gpt4 book ai didi

c# - 基于距给定点的距离的最近 GPS 坐标

转载 作者:太空狗 更新时间:2023-10-30 00:21:26 25 4
gpt4 key购买 nike

我在 MySQL 服务器数据库中有一个 GPS 位置列表。用户将在应用程序中输入 GPS 坐标,他应该得到最近的 GPS 坐标。

我不介意距离计算是基于“乌鸦的飞行”或其他任何东西。它的速度应该足以搜索数千个 GPS 位置。

我更喜欢 C# 中的解决方案,否则我会尝试获取逻辑并自己应用。

最佳答案

Need help optimizing a lat/Lon geo search for mysql中有一个关于MySQL lat/long distance search的问题

对于 C# 距离计算,大多数站点使用 Haversine 公式 - 这是 C# 实现 - http://www.storm-consultancy.com/blog/development/code-snippets/the-haversine-formula-in-c-and-sql/ - 这也有一个 SQL (MS SQL) 实现。

/// <summary>
/// Returns the distance in miles or kilometers of any two
/// latitude / longitude points.
/// </summary>
/// <param name="pos1">Location 1</param>
/// <param name="pos2">Location 2</param>
/// <param name="unit">Miles or Kilometers</param>
/// <returns>Distance in the requested unit</returns>
public double HaversineDistance(LatLng pos1, LatLng pos2, DistanceUnit unit)
{
double R = (unit == DistanceUnit.Miles) ? 3960 : 6371;
var lat = (pos2.Latitude - pos1.Latitude).ToRadians();
var lng = (pos2.Longitude - pos1.Longitude).ToRadians();
var h1 = Math.Sin(lat / 2) * Math.Sin(lat / 2) +
Math.Cos(pos1.Latitude.ToRadians()) * Math.Cos(pos2.Latitude.ToRadians()) *
Math.Sin(lng / 2) * Math.Sin(lng / 2);
var h2 = 2 * Math.Asin(Math.Min(1, Math.Sqrt(h1)));
return R * h2;
}

public enum DistanceUnit { Miles, Kilometers };

对于大多数查询...您可能可以在 C# 和 SQL 之间拆分工作

  • 使用 MySQL 选择“关闭”lat/lng 点,例如说出 lat 和 lng 在你的目标的 1.0 以内
  • 然后使用 C# 计算更准确的距离并选择“最佳”。

如果您使用的是 MS SQL 2008,那么我建议使用 MS SQL 地理类型,因为它们具有内置的优化索引和计算功能 - 我看到 MySQL 也有一些扩展 - http://dev.mysql.com/tech-resources/articles/4.1/gis-with-mysql.html - 但我没有这些经验。

关于c# - 基于距给定点的距离的最近 GPS 坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5368049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com