【问题标题】:How to get all the points that the distance between them is less than (some distance) in spatialite如何获得它们之间的距离小于(某个距离)的空间点的所有点
【发布时间】:2015-09-03 17:49:48
【问题描述】:

我正在使用“SpatiaLite”,并且我有一个带有几何列的表格。 此列是一个带有点的 BLOB。 例如插入一个我做的点:

"INSERT INTO exampletable(geom) VALUES(GeomFromText('POINT(-101.1 46.6)', 4326))"

我想获取此表中所有点之间的距离小于某个距离(例如 3000m)。

我在这张表中有 1800 行不同的点。

谢谢

【问题讨论】:

  • 你知道如何在 SpatiaLite 中计算距离吗?你知道什么是自我加入吗?

标签: sqlite spatialite


【解决方案1】:

您可以在查询中使用同一个表两次。并且空间索引在这里非常有用。

试试这个(这很不言自明):

SELECT a.* FROM point_table AS a, point_table AS b WHERE
    distance(a.geometry, b.geometry) < 3000 AND a.ROWID != b.ROWID AND
    b.ROWID IN (SELECT ROWID FROM SpatialIndex WHERE
    (f_table_name = "point_table" AND search_frame = Buffer(a.geometry, 3000)))

【讨论】:

  • 您好我无法测试它,因为我使用 WGS84 坐标并且距离以度为单位,如何在空间中进行转换?
  • 如果您的 UTM 保险丝已固定,您可以使用 Transform(a.geometry, SRID) 转换几何形状(SRID 类似于 32632)。在全球范围内,您必须改变距离,请参阅 here 了解一些见解
  • 我尝试运行此查询,但这会引发异常no such table: SpatialiteIndex 但我运行此SELECT CreateSpatialIndex('points', 'geometry');
  • 是的,您可以创建空间索引或丢弃查询的第二部分
猜你喜欢
  • 2020-01-12
  • 2020-02-29
  • 1970-01-01
  • 1970-01-01
  • 2020-06-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
相关资源
最近更新 更多