问题标签 [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 投票
4 回答
2864 浏览

javascript - 优化重叠矩形的绘制

我有大量矩形,有些与其他矩形重叠;每个矩形都有一个绝对的 z 顺序和一个颜色。(每个“矩形”实际上是粒子效果、网格或纹理的轴对齐边界框,并且可能是半透明的。但只要您不尝试在其他矩形后面剔除矩形,就更容易抽象地思考彩色矩形,所以我将在问题描述中使用它:)

改变“颜色”的成本相当高;连续绘制两个蓝色矩形比绘制两个不同颜色的矩形要快得多。

绘制甚至不在屏幕上的矩形的成本也很高,应该避免。

如果两个矩形不重叠,则它们相对于彼此的绘制顺序并不重要。只有当它们重叠时,z 顺序才重要。

例如:

重叠的矩形

1(红色)和4(红色)可以画在一起。2(蓝色)和 5(蓝色)也可以一起绘制,3(绿色)和 7(绿色)也可以。但必须在 6(蓝色)之后绘制 8(红色)。所以要么我们将所有三个红色画在一起,然后将蓝色画成两组,或者我们将所有蓝色画在一起,然后将红色画成两组。

一些矩形可能会偶尔移动。(不是全部;已知一些矩形是静态的;其他已知是移动的。)

我将在 JavaScript/webGL 中绘制这个场景。

如何以合理的顺序绘制矩形以最小化颜色变化,并在 JavaScript 剔除代码与让 GPU 剔除之间取得良好的折衷?

(仅仅计算出哪些矩形重叠,哪些是可见的很昂贵。我有一个基本的四叉树,这极大地加快了我的场景绘制速度(与仅发出整个场景的绘制操作相比);现在的问题是如何最小化 OpenGL状态变化并尽可能连接属性数组)

更新我创建了一个非常简单的测试应用程序来说明问题并作为解决方案演示的基础: http ://williame.github.com/opt_rects/

源代码在 github 上,可以很容易地被分叉:https ://github.com/williame/opt_rects

事实证明,很难制作一个具有足够状态更改的小测试应用程序来实际重现我在完整游戏中看到的问题。在某些时候,您将不得不认为状态更改可能足够昂贵。同样重要的是如何加快空间索引(演示中的四叉树)和整体方法。

0 投票
0 回答
416 浏览

spatial-index - 将矩形转换为希尔伯特数范围

当空间数据使用希尔伯特数表示时,一个矩形范围映射到多个希尔伯特数范围。有没有什么快速的方法可以在不遍历给定矩形 R 重叠的每个单元格的情况下找到这个映射?我可以考虑只考虑 R 的边界单元格然后对它们进行排序......有没有更好的方法?

谢谢。

0 投票
1 回答
405 浏览

sql-server-2008 - SQL Server 2008 空间查询性能

我有一个应用程序,用户将他们的通勤路线存储在我们的数据库中。

路线存储为折线(线串)。数据库还存储事故、交通事故之类的东西。我们需要定期查询一条路线,以查看该路线 1k 半径内是否有任何事件。

查询的连接结构如下:

现在我也尝试了这样的事情:

到目前为止,我们为提高速度所做的尝试是:

  1. 减少沿线串的点数
  2. 添加空间索引(虽然我不知道如何调整它)

1)上述工作但还不够好,这让我相信该事件正在与路线上的每个点进行比较,这似乎真的效率低下。

我们正在考虑将长纬度作为几何与地理的对比,因此我们可以访问 Bounding Box 并获得 STContains。

还考虑在检查事件之前在 PolyLine 上调用 reduce。

0 投票
1 回答
585 浏览

c++ - libspatialindex 是否需要重新序列化以进行简单更新?

我正在寻找具有以下功能的桌面应用程序(没有服务器客户端,只需要编辑存储在磁盘中的数据)的 ac 或 c++ 库

  • 将空间数据存储在虚拟内存中,因此空间查询速度很快
  • 可以选择以智能方式在磁盘中维护等效数据进行更新。更新不必是即时的,但它们可以被缓冲。

. libspatialindex 似乎满足要求。但是从网页上看不清楚的一件事是,假设我从磁盘加载了大量数据,只想更新一个很小的对象。libspatialindex 是否重新序列化整个数据并将其写入磁盘,或者只更新需要更改的部分是否明智?

带有 RTree 的 sqlite 似乎正在实现这一点。但是,我想要一个简单的 c++ 库而不是整个 sql 的东西。

有没有其他的选择。GEOS 是否有任何智能磁盘映像更新功能?

0 投票
1 回答
778 浏览

sql - PostGIS 查询在执行 ST_DUMP(ST_UNION) 时不使用 gist 索引

我的查询:

解释的输出:

Seq Scan 意味着它没有使用索引,对吧?为什么不?

(这个问题首先发布在这里:https : //gis.stackexchange.com/questions/51877/postgis-query-not-using-gist-index-when-doing-a-st-dumpst-union。抱歉重新发布但这里的社区更加活跃,所以也许会更快地提供答案。)

更新:即使添加基于缓冲区过滤的 where 子句也会导致 Seq Scan:

0 投票
2 回答
929 浏览

sql - 将 NULL 与空间索引一起使用

我在 SQL Server 数据库中有大量照片(约 1000 万张),其地理坐标列可以为 NULL 或 NOT NULL(未放置或放置在地图上)。

我还在这个地理信息上创建了一个空间索引。

现在我正在尝试选择某个多边形内的所有照片。

有两种方法可以存储不在地图上的照片:

  • 如果我将 NULL 分配给不在地图上的所有照片的地理位置,则此类查询的性能太慢(正如我所不理解的,空间索引根本不适用于 NULL 列)。

  • 如果我分配POINT(0 0)给不在地图上的所有照片的地理位置,则性能很好,除了这个零点的情况POINT(0 0)。此类请求也返回错误的照片(它们在地图上不存在)。

我怎样才能克服这些问题?

我应该添加包含 NULL 或 NOT NULL 位的列并从两列(此列和地理信息)创建索引吗?

更新我试图从两列创建索引,但这是不可能的,因为空间索引只包含一列带有地理信息(MSDN)。

0 投票
1 回答
2525 浏览

sql - PostGis插入矩形

大家好,我有一个问题:我如何在 postgis 数据库中插入一个带有 Ne_latitude、NE_longitude、SW_latitude、SW_longitude 的框(矩形),并在顶部构建一个 INDEX 以检索不同框之间的交集?

提前致谢

0 投票
1 回答
2572 浏览

android - 带有 Sqlite 的 Android 空间数据库

这个问题被问了很多次,但我没有找到适合我要求的相关解决方案。

我想在 Android 上构建一个简单的增强现实应用程序,它使用空间数据(R-Tree)来存储地理数据。我发现这个Spatialite解决方案看起来很棒,但我的工具几乎没有问题,而且对于我的应用程序来说它看起来相当复杂。另一个技巧是使用启用了 SQLITE_ENABLE_RTREE 的 SQLite,这需要我构建自己的 SQlite 库。

我只需要在手机中存储与 R-Tree 算法兼容的空间数据(我有一小部分覆盖大学校园内建筑物的数据),然后根据当前位置进行查询。

我正在寻找实现这一目标的一些方向,主要是在存储部分。

提前致谢。

0 投票
1 回答
229 浏览

ravendb - LineString 的 RavenDB 空间索引

如何为 LineString 地理数据创建 RavenDB 空间索引?

我正在尝试为地理数据的 LINESTRING 创建空间索引,但搜索查询不返回任何数据。

请使用以下测试用例作为参考,因为我是 RavenDb 的新手,我不确定我的搜索查询是否正确或 RavenDB 上的错误

0 投票
3 回答
2313 浏览

mongodb - 为什么不用 B+-Tree MongoDB

有谁知道为什么 MongoDB 使用 B-Tree 而不是 B+-Tree?

据我所知,大多数 DBMS 使用 B+-Tree。MongoDB使用B-Tree有什么特别的原因吗?

谢谢。