我有十进制纬度/经度值格式的一系列双打。我想存储这些值,当涉及向列表中添加新值时,请查看列表中是否已存在纬度为0.0001且经度为±0.0001的值。如果该值的纬度或经度为±0.0001,我不想存储它。
我想重新创建的是MongoDB Geospatial $ near命令的一个版本。
任何人都可以就如何解决这个问题提出任何建议吗?是否有任何免费的c#地理空间库可以帮助我实现这一目标?
非常感谢您的建议。
答案 0 :(得分:0)
我不知道任何库,但您可以使用LINQ。这是一个List<Tuple<double, double>>
:
var y = new Tuple<double, double>(15.25, 18.700001);
if(!coordinates.Any(x => Math.Abs(x.Item1 - y.Item1) <= 0.0001 || Math.Abs(x.Item2 - y.Item2) <= 0.0001)) {
// No coordinate in the list is within ±0.0001 of either the latitude or the longitude
coordinates.Add(y);
}
答案 1 :(得分:0)
如果我理解正确的话,这样的事情应该适合你,假设坐标被包裹在某种容器中。
public class Coordinates
{
public double Latitude { get; set; }
public double Longitude { get; set; }
}
public bool IsNear(List<Coordinates> coords, double lat, double lon, double tolerance)
{
return coords.Any(p => Math.Abs(p.Latitude - lat) < tolerance || Math.Abs(p.Longitude - lon) < tolerance);
}
答案 2 :(得分:0)
您需要计算两点之间的距离:
if (Math.Abs(Math.Sqrt((longitude - longitude_before) * (longitude - longitude_before) + (latitude - latitude_before) * (latitude - latitude_before))) > 0.0001)
{
// Record new point
}
其中latitude_before和longitude_before是记录路径中的最后一个条目 - 在我看来,不需要检查以前的点。如果结果是,并且性能成为问题,则必须查看range search。