邻近查询与两端之间的 LineString 点不匹配

Posted

技术标签:

【中文标题】邻近查询与两端之间的 LineString 点不匹配【英文标题】:Proximity query doesn't match LineString points between the ends 【发布时间】:2015-11-26 21:48:26 【问题描述】:

我在集合c 中为字段loc 定义了一个“2dsphere”索引:

db.c.createIndex(  loc : "2dsphere"  )

我在c 集合中有以下文档。它是从 [0, 0] 到 [10, 10] 的 LineString:

db.c.insert("name": "myLine", "loc":  type: "LineString", coordinates: [ [ 0, 0 ], [ 10, 10 ] ] )

请注意,[5, 5] 将是线上的一个点。但是,以 [5, 5] 为中心的邻近查询(使用 $near 运算符)与文档不匹配:

db.c.find(
  loc: 
    $near: 
      $geometry: 
         type: "Point" ,
         coordinates: [ 5, 5 ]
       ,
       $maxDistance: 0.1,
     
   
)

也许 LineString 不能那样工作,从地理空间查询的角度来看,只有端点(在这种情况下为 [0, 0] 和 [10, 10])是相关的?在这种情况下,是 MongoDB geo spacial queries implementation 中的限制还是 GJSON standard 中的限制?

(在我做这个小实验之前,我一直认为 LineString 和 MultiPoint 的区别在于前者考虑了连接点的线,而后者只考虑了线末端的点。经过这个实验,我看不出有什么不同...)。

【问题讨论】:

【参考方案1】:

我必须在 mongodb 和 postgis 之间进行选择。但是 mongodb 有这个缺点。查看案例:Find points near LineString in mongodb sorted by distance

【讨论】:

那很不幸,除了链接的帖子之外,您对这个主题有任何参考吗?它已经 3 岁了,也许他们同时实现了这个功能,但我找不到明确的答案。 不,我没有。我认为它会继续下去。

以上是关于邻近查询与两端之间的 LineString 点不匹配的主要内容,如果未能解决你的问题,请参考以下文章

在 GeoJson MultiLineString 中查询哪个 LineString

确定一个 POINT 是不是位于 LINESTRING 上的两个其他 POINT 之间(SQL Server 2008 Geography)

MongoDB:如何确定 GeoJson LineString 和具有半径的点的交集

KNN邻近分类算法

MySQL数据类型 - 空间数据类型

表示位置和基于邻近度查询的有效方法?