我有这个:
public class LatLon
{
public double lat {get;set;}
public double lon {get;set;}
}
{p}在List<LatLon>
中。它包含
p1 { lat = 49.9429989, lon = 3.9542134 }
p2 { lat = 49.9429989, lon = 3.9542133 }
p3 { lat = 49.9429989, lon = 3.9542136 }
等。
我的目标是从此列表中删除与其他坐标的差异低于lat_bound和lon_bound的边界的坐标,因此即使录制人员长时间站在一个地方,也意味着只剩下一个坐标。什么是LINQ命令?
示例:
p1 { lat = 4.555, lon = 6.555 }
p2 { lat = 4.556, lon = 6.556 }
。
然后Math.Abs(p1.lat - p2.lat) = 0.001
和Math.Abs(p1.lon - p2.lon) = 0.001
。 p1.lon - p2.lon
是一个其他坐标的lon-value的差异。假设lon_bound
等于0.0005,那么如果lat_bound
也是0.0005,那么这个非常坐标将被删除,因为0.001&gt; 0.0005
编辑:我决定转而使用http://www.gpsbabel.org。
答案 0 :(得分:3)
LINQ不会创造奇迹。您指的问题不仅仅是“Distict”类型问题。
1你必须为 measure distance between 2 points创建一个函数。
第二,你需要detect clusters of points ..(将关闭点组织成小组)
最后要做的最简单的事情就是按照归属群集进行分组,并且每组只保留1个点......
但是又一次.....还有其他几个问题可能无法产生准确的结果。
例如,最能代表其群体的一点是什么?
答案 1 :(得分:1)
您可以使用Math.Round
将值四舍五入到您想要的精度。
然后使用Linq Distinct
删除重复项。
void Main()
{
var list = new List<Coordinate>()
{
new Coordinate(25.25251, 100.21254),
new Coordinate(25.25252, 100.21255),
new Coordinate(25.25253, 100.21256),
new Coordinate(25.80000, 100.90000)
};
int precision = 4;
var res = list.Select(x => new Coordinate(
Math.Round(x.Lon, precision),
Math.Round(x.Lat, precision))).Distinct().ToList();
}
public struct Coordinate
{
private double lon;
private double lat;
public Coordinate(double lon, double lat)
{
this.lon = lon;
this.lat = lat;
}
public double Lat { get { return lat; } }
public double Lon { get { return lon; } }
}
(请注意,我有一个结构而不是一个用于坐标的课程)
答案 2 :(得分:0)
如果你有一个函数Func<LatLon, LatLon, bool> bounded
,如果两个点在你的范围内,则返回true
,如果没有,则返回false
,那么这个查询有效:
var keeps =
latlons
.Aggregate(new List<LatLon>(), (xs, y) =>
{
if (!xs.Any(x => bounded(x, y)))
{
xs.Add(y);
}
return xs;
});
答案 3 :(得分:0)
您可以按照以下方式过滤:
Distinct
您无法使用Distinct
,因为它会删除之前看到的值的点,即使它们之间存在不同的值。
此外,这种方法具有O(N)复杂度,因此至少在理论上它的性能优于<%
List<Location> result = new ArrayList<>();
if (basicSearchBean.validate()) {
result = basicSearchBean.getResult();
}
pageContext.setAttribute("result", result);
%>
<div style="width: 800px; margin-left: 50px; margin-top: 30px;">
<%
if ( result.size() > 0 ) {
%>
//VISUALIZATION PART
<%
}
%>
</div>
。它也适用于结构和类。