问题标签 [spatial-index]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
4173 浏览

javascript - 什么是 R*-Tree 算法?

我在哪里可以找到足够的文档来实现R*-Tree?具体来说,我需要能够:

  • 插入节点
  • 删除节点
  • 搜索 K 个最近邻
  • 找到距离 x 内的所有最近邻。

是否有一个地方清楚地记录了该算法?或者有没有我可以研究的干净、开源的实现?更好的是,如果您能指出我的 javascript 实现,那么我的工作已经完成。

0 投票
1 回答
501 浏览

tsql - 空间数据库,奇怪的索引行为

所以,我的数据库有一个 Id 类型为 BigInt 和 Geometry 类型为 Geometry 的 Table。Geometry 字段有一个名为 idx_Geometry 的空间索引

以下查询使用索引按预期工作:

但是,当我尝试查询时

我收到错误消息:

查询处理器无法为带有空间索引提示的查询生成查询计划。原因:空间索引不支持谓词中提供的比较数。尝试删除索引提示或删除 SET FORCEPLAN。

就我而言,这两个查询基本上是等价的。谁能解释为什么会发生这种情况以及我如何(或是否)可以使索引与第二个查询一起使用?

谢谢

编辑:刚刚注意到第二个是= 0,而不是where子句中的= 1,有人知道为什么索引不能与= 0一起使用吗?(第二个查询适用于 = 1)

编辑2:只是更新什么有效,什么无效

编辑3:我找到了解决左连接和空检查问题的方法,但我仍然很好奇,如果有人能启发我,为什么你不能在假相交上使用索引

0 投票
1 回答
167 浏览

php - 从旧表到新表的复杂 MySQL 连接

我有一个名为位置的旧数据库,在命名位置内有一个表。

该表有 7 个变量:id (int, index)、approved(int)、city(text)、country(text)、heading(double)、lat(double)、lng(double)。

我有一个名为复杂性的新数据库。该数据库有一个名为 gsvraw 的新表

我需要将旧表复制到新表,但这是棘手的地方:

新数据库将使用 MySQL 的空间索引,以便我以后可以在多边形内进行搜索。在新数据库中,我想添加一个名为 location 的新列,而不是 lat、lng。

创建新列的示例语句:

这是将新值插入位置列的示例语句:

40 和 -100 将是 lat 和 lng。

有任何想法吗?

我在麻省理工学院的三个不同的“大师”中的每一个都浪费了一个小时,实际上一无所获。

我正在运行的服务器导致了重大问题,因此使用 python 和 MySQLdb 已经过时了。

希望有人比我们更聪明,可以帮助处理原始 sql 语句。

我正在使用 MAMP pro 在带有 Apache MySQL 和 PHP 的 Mac 上运行它。这会引起一些麻烦,所以目前唯一可行的解​​决方案是直接使用 php 和 sql。有任何想法吗?

解决方案:

0 投票
1 回答
1101 浏览

mongodb - 3 空间中的 k 个最近邻查询

我有一个存储在数据库表中的数据集,其中包括 3 空间中的位置。我需要以有效的方式检索 k 最近的邻居。我的数据存储不包含 3 维的原生空间索引。如何在客户端模拟空间索引。

这个问题可能会被改写,如何为存储在数据库中的日期实现 KD-Trees?

(如果有区别,实际使用的数据库是 MongoDB 和 Redis)

0 投票
1 回答
702 浏览

mysql - 基于空间数据的TRIGGER

我有一个名为 pano_raw 的表,它有 3 列 lat、lng 和 latlng。

lat 和 lng 只是小数 (10,3),而 latlng 是 POINT 类型的空间索引。

这是一个示例语句,它将根据 lat 和 lng 更新数据库。

我正在尝试根据上面的语句创建一个触发器,当我分别更新 lat 和 lng 时,它将自动更新列。由于查询是专门的,因此每次使用 SQL 更新空间数据列都很痛苦。编写一个触发器(理论上)要容易得多,当我向表中写入一个简单的十进制值时它会更新。

我遇到的问题是语法。这是我最好的(2小时拍摄)。

我真的很感激帮助让这个工作。

0 投票
1 回答
392 浏览

mysql - 空间几何索引的性能是否取决于几何形状的大小和密度?

空间索引

给定一个空间索引,是索引效用,也就是说索引的整体性能,只和整体几何一样好。

例如,如果我要获取一百万个几何数据类型并将它们插入到表中,以便它们的相对点彼此密集定位,这是否会使该索引对相对位置可能明显更稀疏的相同几何形状表现更好.

问题 1

例如,采用这两种几何形状。

情况一

在几何上它们是相同的,但它们的坐标相差一个点。想象一下,这被重复了一百万次。

现在以这种情况,

情况2

在上面的例子中:

  • 线条尺寸与情况 1 相同,
  • 线的点数相同
  • 这些线具有相同的尺寸。

然而,

  • 不同之处在于线条之间的距离更远。

为什么这对我很重要?

我问这个问题的原因是因为我想知道是否应该尽可能多地从输入几何图形中删除精度,并在不损失精度的情况下尽可能多地降低它们的密度和彼此之间的接近度。

问题2

这个问题类似于第一个问题,但不是在空间上接近另一个几何形状,而是应该将形状本身简化为尽可能小的形状来描述应用程序需要什么。

例如,如果我要在几何数据类型上使用空间索引来提供日期数据。如果我想存储两个日期的日期范围,我可以在 mysql 中使用 datetime 数据类型。但是,如果我想使用几何类型怎么办,以便通过获取每个单独的日期并将其转换为 unix_timestamp() 来转换日期范围。

例如:

现在,我可以根据这两个整数创建一个 LINESTRING。

如果我的应用程序实际上只关心天数,而秒数对于日期范围根本不重要,我是否应该重构我的几何图形,以便将它们缩小到尽可能小的尺寸以满足他们的需求。

因此,我将使用“1293861600”/(3600 * 24)而不是“1293861600”,这恰好是“14975.25”。

有人可以帮助填补这些空白吗?

0 投票
2 回答
3331 浏览

tsql - 如何在 SQL Server Management Studio 2008 中创建空间索引?

我有一个有 3 列的表PrimaryKey(int)latitude(decimal 9,6)longitude(decimal 9,6)

我已使用其 DBMS 连接将实时视图导入 mapinfo 10.5,但似乎无法使表格可映射或“创建点”来映射坐标。

我右键单击以在 MS 管理工作室中添加一个新索引,但它带来的唯一索引类型是集群、非集群和 xml,没有空间选项。

0 投票
2 回答
47149 浏览

mysql - MySQL 中的空间索引 - 错误 - 无法从您发送到 GEOMETRY 字段的数据中获取几何对象

我对整个“空间索引”是新手,但它似乎是基于纬度/经度过滤的最佳解决方案。所以我在我的表中添加了一列:

所以我创建了一个geometry字段:

然后我尝试添加一个索引:

但我收到一个错误:

我在这里做错了什么?

0 投票
3 回答
3313 浏览

python - 空间索引/查询(查找 k 个最近点)

我有 +10k 点(纬度,经度),我正在构建一个应用程序,向您显示离用户位置最近的 k 个点。

我认为这是一个非常普遍的问题,我不想重新发明轮子。我正在学习四叉树。这似乎是解决这个空间问题的好方法。

我正在使用这些工具:

  • 蟒蛇2.5
  • MySQL
  • 蒙古数据库

构建四叉树并不难:http : //donar.umiacs.umd.edu/quadtree/points/pointquad.html 但是一旦我创建了树并将其保存到数据库(MySQL 或 MongoDb),我如何运行查询?

我需要运行这样的查询:

  1. 查找用户位置 10 公里范围内的所有点。
  2. 找到距用户位置最近的 6 个(或至少 6 个)点。

这样做的标准和常用方法是什么?

编辑1:

我已经将 +10k 点加载到 MongoDB(地理空间索引)中,乍一看它工作正常。无论如何,我找到了PostGis

PostGIS 是 PostgreSQL 对象关系数据库系统的扩展,它允许将 GIS(地理信息系统)对象存储在数据库中。

所以我想我会试试 PostGis。

我还找到了SimpleGeo。您可以在云中存储点/地点,然后通过 API 查询它们:https ://simplegeo.com/docs/tutorials/python#how-do-radial-nearby-query

0 投票
1 回答
935 浏览

mysql - MySQL 空间数据类型索引性能比较

针对包含点和多边形(GeomCollection 类型)的几何类型的索引列的 MBR 函数查询是否会比针对多边形类型的索引列的 MBR 函数慢?

我的程序员直觉告诉我,它会更慢,我应该尽可能使用最具描述性的空间类型。

编辑:阅读丹尼斯的回答后,真正的问题是:

在 MySQL 中,“包含点和多边形的几何类型的索引列实际上是否包含后者,或者它们是否被简化为 MBR?”