从中可以找到坐标集的最佳方法 在给定指定宽度的情况下,大约5,00位于点的路径内。 例如,飞机在多个航点之后。
是否有一种很好的方法可以按照与路线相同的顺序对它们进行排序。
计算速度比准确性更重要,因为我正在研究 提出建议清单。
从我看过的情况来看,我认为这不是直截了当的,问题是 有点宽泛,但欢迎任何建议/指针,例如:
这是一种比在几个等距离上进行圆形/方形检查更好的方法 沿着小路点。
答案 0 :(得分:2)
您可以做很多优化:
将您的点拆分为固定大小的图块,这样您就不必检查每个点(首先确定您所在的图块,以便跳过其他图块中的所有点)。
计算到每个点的距离时,通常使用毕达哥拉斯来获得距离。但是如果你只想知道哪个点最接近,你可以省略平方根,这是一个昂贵的操作(参见下面的示例代码)。
使用一些平面投影而不是使用lat / lon,或者通过假设地球是平坦的来近似计算的距离。对于小距离(直到几公里),这通常足够准确,并且比使用WGS84坐标更快更容易。 您可能必须转换所有坐标,但预先计算将在运行时节省大量的cpu周期。
-
// delphi code that would iterate through a set of points to find the index
// of the point that is the closest to the provided x/y
function TMatcher.GetIndexOfClosest(X,Y:Double):Integer;
var
i : Integer;
Closest:Double;
Distance:Double;
begin
Closest:= MaxInt;
Result := -1;
for i:=0 to high(Points) do
begin
// taking the square root is not needed here!
Distance :=Sqr(X-Points[I].X)+Sqr(Y-Points[I].Y);
if Distance < Closest then
begin
Closest := Distance;
Result := i;
end;
end;
end;
答案 1 :(得分:1)
我假设你知道如何计算点和路径之间的距离。纬度/经度是简单的(x,y)数据,但是使用小数数据而不仅仅是整数。
对于计算每个点到路径的距离,5,000个数据点确实不是那么糟糕,但是如果你想扩展,某种关系数据结构(如四叉树)将是存储点的最佳选择。这样,您可以立即丢弃远离您路径的点。
答案 2 :(得分:1)
当遇到这类问题时,我会使用PostGIS。将数据导入数据库,然后使用空间SQL函数在轨道上创建缓冲区并选择位于缓冲区内的点。比自己编码要快得多。
PostGIS(和PostgreSQL)易于在Windows / OSX / Linux上安装。他们有很好的文档,Google上的快速会话可以找到大多数问题的答案。
答案 3 :(得分:0)
Best way to store lat / long, or use spherical coordinates
你想储存什么?您要搜索的路径或点?如果它的路径,那么它基本上是某种类型的列表,因为点是有序的。根据您将如何/如何操纵路径,这将决定您的数据结构。
在坐标集中添加其他聚类信息
您想要存储哪些信息?例如,如果您选择链接列表作为数据结构,则可以拥有包含所需信息的类对象的链接列表。
可以使用某种变换来简化范围检查
您可以将Lat / Long转换为UTM或任何其他坐标系。两点之间的范围仍然相同。
订购积分的最佳方法是什么
如果您要存储路径,则订单很重要 - 如第N-1点 - > N - >; N + 1,依此类推......