问题标签 [spatial-query]
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.
java - 什么是Java中存储和搜索二维空间坐标的好数据结构
我目前正在为游戏编写一个插件,其中一个功能包括能够设置由 2 个二维坐标定义的区域(矩形的左上角和右下角区域)。然后将存储这些区域,并将具有与每个区域相关联的各种其他数据。当玩家在世界各地移动时,我需要仅从玩家的坐标确定他何时进入这些区域之一,并且这样做的方法必须高效,因为这最终会被每秒调用数百次.
是否有任何数据结构可以有效地支持这种搜索,如果有,我在哪里可以找到关于它的文档,或者找到要使用的 java 实现,或者如果有必要,我自己实现它?
我还想指出,我发现了一些似乎只支持批量加载的树结构,但我必须能够实时从这个结构中添加和删除值。
solr - 未知查询类型“空间”如何查看 Solr 已加载哪些插件?
我正在尝试通过安装为 Apache Solr 设置空间搜索插件。从启动时的日志记录中可以看出它找到了 JAR 文件,但是当我尝试仅使用“{!spatial}”运行查询时,它抱怨它不知道该查询类型。
我假设它实际上没有拾取插件或其他错误。我如何确认 Solr 知道那个 JAR?
顺便说一句,我只将 JAR 卡在 solr/lib 目录中,所以我不确定是否还有其他事情需要做。
mysql - MySQL 空间数据类型索引性能比较
针对包含点和多边形(GeomCollection 类型)的几何类型的索引列的 MBR 函数查询是否会比针对多边形类型的索引列的 MBR 函数慢?
我的程序员直觉告诉我,它会更慢,我应该尽可能使用最具描述性的空间类型。
编辑:阅读丹尼斯的回答后,真正的问题是:
在 MySQL 中,“包含点和多边形的几何类型的索引列实际上是否包含后者,或者它们是否被简化为 MBR?”
sql-server-2008 - 使用sql server spatial获取点半径内的点的最有效方法
我正在尝试制定最有效的查询来获取给定点半径内的点。结果不必非常准确,因此我更喜欢速度而不是准确性。
我们尝试使用 where 子句比较使用 STDistance 的点的距离,如下所示(其中 @point 和 v.GeoPoint 是地理类型):
还有一个使用类似于此的 STIntersects:
这些查询中的任何一个是首选还是我错过了其他功能?
sql-server-2008 - SQL Server 2008 Geometry.STBuffer(...) 真的很慢
我有一个基本的 SQL 查询,如下所示:
which essential 从数据库中获取地图边界并将其缓冲 500m。我遇到的问题是它非常慢,然后服务器内存不足!我确信一定有什么问题,因为在 GIS 程序中这样的简单操作需要几秒钟才能运行,而在放弃之前运行大约一分钟。
边界相当复杂,但它不应该复杂到导致服务器内存不足,我确信这一点。
如果我将缓冲距离减少到 100m,它会在大约 14 秒内运行并完成,这仍然太慢而无法实时使用。
关于为什么它可能会这么慢的任何想法,以及关于如何加快速度的任何提示?
谢谢,
django - 使用 GeoDjango 的嵌套查询出错
我在使用GeoDjango中的in
字段查找构建嵌套查询时遇到问题。下面的代码演示了这个问题:
使用上面的代码,会发生以下异常:
(这是完整的堆栈跟踪)
只要内部查询包含空间过滤器,就会出现错误。以下嵌套查询可以正常工作:
知道是什么导致了问题吗?
django - 我需要使用 GeoDjango 对 Spatialite 进行特定配置吗?
根据https://docs.djangoproject.com/en/1.3/ref/contrib/gis/db-api/,Spatialite支持GeoQuerySet.distance()
. 但是,在导入区域列表(MultiPolygon
作为mpoly
属性)后,我正在尝试执行以下操作:
而不是可用的东西,我只收到一条错误消息:“ ValueError:SQLite 不支持大地坐标系上的线性距离计算。 ”
这里有什么问题,我需要对 Spatialite 进行一些特殊配置还是文档完全错误?
algorithm - 用于查询位于三角形内的点的数据结构
我有一些 2D 数据,其中包含被光栅化为像素的边缘。我想实现一个有效的数据结构,它返回位于非轴对齐二维三角形中的所有边缘像素。
该图像显示了问题的可视化,其中白色表示光栅化边缘,红色表示查询三角形。结果将是位于边界上或红色三角形内的所有白色像素。
进一步查看图像时,我们注意到我们有稀疏的布尔数据,这意味着如果我们用 0 表示黑色像素,用 1 表示白色像素,则数据中 1 的数量远低于 0 的数量。因此,栅格化红色三角形并检查其内部的每个点是白色还是黑色并不是最有效的方法。
除了数据的稀疏性;由于白色像素来自边缘,因此它们本质上是连接在一起的。但是,在与其他线路的交汇处,它们有两个以上的邻居。位于交界处的像素只能返回一次。
数据必须实时处理,但没有 GPU 帮助。对于不同的三角形内容会有多次查询,每次查询后,可能会从数据结构中删除点。但是,在数据结构初始填充后,将不再插入新点。
当光栅化边缘到达时,查询三角形是已知的。
查询三角形比数据边多。
有许多可用的空间数据结构。但是我想知道,哪一个最适合我的问题。我愿意实现一个高度优化的数据结构来解决这个问题,因为它将是项目的核心元素。因此,也欢迎数据结构的混合或缩写!
R-trees似乎是迄今为止我为这个问题找到的最好的数据结构,因为它们支持基于矩形的查询。我将检查查询三角形的 AABB 内的所有白色像素,然后检查每个返回的像素是否位于查询矩形内。
但是,我不确定 R-tree 的表现如何,因为基于边缘的数据不容易分组为矩形,因为这些点在窄线上聚集在一起而不是导出。
我也不确定使用有关查询三角形的信息预先构建 R-tree 的结构是否有意义,这些信息将在结构填充后立即生成(如前所述,查询三角形是已知的当数据到达时)。
扭转问题似乎也是一个有效的解决方案,我使用二维间隔树为每个白色像素获取包含它的所有三角形的列表。然后,它可以存储在所有这些结果集中,并在查询到达时立即返回。但是,我不确定这是如何执行的,三角形的数量高于边缘的数量,但仍低于白色像素的数量(因为边缘主要分为 ~20-50 像素)。
一种利用白色像素最常见的白色像素作为邻居的数据结构似乎是最有效的。但是,直到现在我还没有找到任何关于这种事情的信息。
sql-server-2008 - 在 SQL Server 2008 中计算几个 Geometry 对象的外边界
我在 SQL Server 2008 中有很多Polygons
数据类型Geometry
。下图显示了所有这些几何图形的选择看起来是如何可视化的。
我需要做的是创建一个代表所有这些多边形的外边界的多边形。因此,我使用了对我要求创建以下代码的先前空间问题的响应:
这产生了以下结果,由于多边形之间的孔,其中有裂缝:
所以我用以下更改更新了我的查询:
这改善了结果,但它并没有完全解决问题,而且还损害了外边界精度。
实现这一目标的正确方法是什么?通过查看 STxxxx 函数列表,我看不到一个似乎提供了我需要的结果的函数?
autocomplete - 如何使用 Solr 在一次查询中获得自动完成和空间搜索?
当前特点:
- 使用 solr 术语组件、参数 terms.prefix 自动完成。
- 地理位置搜索的边界框。
尝试的事情:
- 我试图将两个查询合并为一个。但是我从来没有得到按地理位置过滤的结果。相反,我从 terms.prefix 搜索中获取所有内容。
- 我也尝试过使用 dismax、edismax + bbox 地理位置搜索。我知道 dismax 不起作用,因为它没有前缀参数。
- 我日夜在谷歌上查看,试图弄清楚这一点。
- 我不想在我的字段名称“名称”上加上词干,以便每个字母都被视为关键字。
非常感谢任何帮助。