【发布时间】:2020-01-02 23:26:12
【问题描述】:
我正在使用地理纬度/经度值并给定特定的纬度/经度组合,我需要根据美国邮政编码从经度/经度位置列表中找到最近的纬度/经度。找到后,我需要返回该位置的邮政编码。
查找最近纬度/经度的示例参数
X:-76.696136 Y: 40.095702
DataTable 列包括纬度、经度、邮编
我尝试了以下方法,但返回的两个数字之间的距离大于预期,例如返回的 ZipCode 与原始 Lat/Lon 参数有相当大的距离。我不相信 OrderBy, ThenBy 实际上提供了最接近的数字组合。是否有另一种方法可以提供更紧密的匹配?
var zipMatches = zipCodeList
.OrderBy(item => Math.Abs(Convert.ToDouble(item.Latitude) - Convert.ToDouble(searchedItem.GeoLat)))
.ThenBy(item => Math.Abs(Convert.ToDouble(item.Longitude) - Convert.ToDouble(searchedItem.GeoLon)))
.FirstOrDefault();
预期结果将是最接近所提供参数的纬度/经度对。
X:-76.696136 Y: 40.095702
【问题讨论】:
-
我认为您可以通过计算每个之间的 Haversine distance 并选择最小的来做到这一点 - 参见例如gist.github.com/stuartd/96f78589e0b7ff293ae72bfc883b22e8
标签: c#