关于sql server:行字符串之间的相似性

关于sql server:行字符串之间的相似性

Similarity between line strings

我有许多GPS记录的轨迹,在形式上可以用许多线串来描述。

现在,某些记录的轨迹可能是同一路线的记录,但是由于GPS系统的不准确性,这些记录是在不同的场合进行的,并且它们可能以不同的速度行进,所以不会完美匹配,但当人类在地图上查看时仍然看起来足够接近,以确定其实际上与所记录的路线相同。

我想找到一种计算两个线串之间相似度的算法。我想出了一些自行开发的方法来执行此操作,但是想知道这是否已经有好的算法可以解决。

假设相似的均值表示地图上的相同路径,您将如何计算相似度?

编辑:对于那些不确定我在说什么的人,请查看此链接以获取什么是行字符串的定义:http://msdn.microsoft.com/zh-cn/library/bb895372.aspx-我我不问字符串。


计算每对轨道上的Fréchet距离。距离可用于评估轨迹的相似性。

数学警报:Fréchet是与您的问题相关的度量空间领域的先驱。


我会根据估计的可能误差在第一行周围添加一个缓冲区,然后确定第二行是否完全适合缓冲区。


要确定"相同路线",请创建最小化的标准化路径矢量集,计算总功率差,然后将总功率差与质量度量进行比较。

  • 将GPS航路点归一化为总路径长度,
  • 沿着路径的矢量走在一起,根据每个航路点上的最短矢量为每个路径创建一组新的路径矢量,
  • 计算归一化路径中矢量长度加权的每个矢量端点之间的总功率差,以及
  • 与质量度量进行比较。
  • 视觉上调整差异的功效(以平方差异开头)和质量度量(例如占总功效差异的百分比)。该算法可对路径匹配以及二进制结果进行连续的质量度量(路径是否相同?)

    Paul Tomblin said: I would add a buffer
    around the first line based on the
    estimated probable error, and then
    determine if the second line fits
    entirely within the buffer.

    您可以在比较归一化向量端点时修改算法。您可以确定是否有任何端点差异超出一定大小(实施Paul的缓冲区思想),或者,如果端点在"缓冲区"之外,则可以使用该事实忽略该端点差异,从而进行比较,而忽略边路。


    如果您将单个线串视为[x,y]点(或[x,y,z]点)的序列,则可以使用Needleman-Wunsch算法计算每对线串之间的相似度。如参考的Wikipedia文章中所述,Needleman-Wunsch算法需要一个"相似度矩阵",该矩阵定义一对点之间的距离。但是,使用函数而不是矩阵会很容易。在您的情况下,您可以简单地使用2D欧式距离函数(如果您的点具有高程,则使用3D欧式函数)来提供每对点之间的距离。


    您可以沿着LineString A的每个点(Pa)行走,并测量从Pa到LineString B的最近的线段的距离,取每个这些距离的平均值。

    这不是一个快速或完美的方法,但是应该能够使用一个有用的数字并且实现起来非常迅速。

    线串是在相似的点处开始还是结束,还是程度不同?


    我实际上与那个人(亚伦·F)在一起,他说您可能对Levenshtein距离问题感兴趣(并引用了这个观点)。在我看来,他的回答是迄今为止最好的。

    更具体地说,Levenshtein距离(也称为编辑距离)并不严格测量每个字符的距离,但允许您执行插入和删除操作。可以在二次时间内计算出这种距离测量的最佳算法(如果您的弦长,则算起来会很慢),但是计算生物学家对此颇有启发,您可能会对自己感兴趣。查看BLAST和FASTA。

    在您的问题中,似乎您正在处理数字字符串之间的差异,并且您在乎数字。如果您提供更多信息,我可能会根据您的需要将您定向到BLAST / FASTA / etc的正确变体。无论如何,您都可以考虑根据需要调整BLAST和FASTA。他们很简单。

    1:http://en.wikipedia.org/wiki/Levenshtein_distance,http://www.nist.gov/dads/HTML/Levenshtein.html


    推荐阅读

      linux查u盘系统命令?

      linux查u盘系统命令?,系统,设备,电脑,信息,管理,定期,软件,密码,生产,百分比

      linux系统关键命令?

      linux系统关键命令?,地址,工作,系统,信息,命令,目录,检测,环境,工具,设备,Lin

      linux系统命令终端?

      linux系统命令终端?,系统,首页,终端,设备,电脑,情况,信息,命令,界面,用户,lin

      linux系统vi命令?

      linux系统vi命令?,档案,状态,系统,命令,正规,数字,模式,编辑,文件,光标,linux

      linux命令替换字符串?

      linux命令替换字符串?,字符串,文件,批量,首次,数据,命令,内容,方法,用字,结

      linux系统命令调用?

      linux系统命令调用?,系统,单位,工具,工作,管理,地址,权威,密码,电脑,信息,怎

      linux麒麟系统命令行?

      linux麒麟系统命令行?,系统,银河,电脑,设备,公司,信息,手机,密码,平台,麒麟,

      linux系统man命令?

      linux系统man命令?,信息,地址,系统,工作,命令,数据,管理,单位,目录,文件,linu

      虚拟机linux系统命令?

      虚拟机linux系统命令?,系统,工具,软件,名字,时间,命令,工作,首次,环境,名称,L

      linux系统查端口命令?

      linux系统查端口命令?,系统,状态,地址,检测,工具,网络,信息,灵活,服务,端口,l

      linux系统分屏命令?

      linux系统分屏命令?,系统,工具,地址,工作,命令,基础知识,信息,时间,情况,技

      linux系统高级命令?

      linux系统高级命令?,系统,工作,地址,信息,管理,命令,地方,目录,功能,用户,请

      纯命令行linux系统?

      纯命令行linux系统?,系统,工作,信息,密码,地址,设备,终端,设计,网上,状态,怎

      linux系统输出命令?

      linux系统输出命令?,系统,工作,地址,信息,命令,工具,目录,设备,基础,发行,lin

      linux系统中剪切命令?

      linux系统中剪切命令?,工作,系统,地址,信息,命令,目录,管理,标准,工具,文件,L

      linux系统关机机命令?

      linux系统关机机命令?,系统,工作,命令,标准,时间,设备,用户,方式,目的,指令,l

      linux系统ll命令?

      linux系统ll命令?,信息,系统,数据,时间,文件,命令,权限,观察,第一,数字,用ll

      linux命令行系统录屏?

      linux命令行系统录屏?,工具,地方,系统,工作,地址,命令,服务,环境,状态,目录,

      终止linux系统的命令?

      终止linux系统的命令?,系统,传播,命令,电脑,软件,工作,管理,情况,进程,指令,l

      linux系统光盘命令?

      linux系统光盘命令?,系统,工作,信息,数据,地址,命令,一致,名称,盘中,传播,如