标签: spatial-index

在SQL Server中使用空间索引时出错

我使用Spatial Index,当我尝试执行WHERE语句时:

WHERE T.GEOMETRY.STIntersects(O.GEOMETRY) = 1 AND T.GEOMETRY.STTouches(O.GEOMETRY) = 0
Run Code Online (Sandbox Code Playgroud)

它工作正常,但当我尝试用OR执行时:

WHERE T.GEOMETRY.STOverlaps(O.GEOMETRY) = 1 OR T.GEOMETRY.STWithin(O.GEOMETRY) = 1
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

查询处理器无法为具有空间索引提示的查询生成查询计划.原因:无法在条件中找到所需的二进制空间方法.尝试删除索引提示或删除SET FORCEPLAN.

任何帮助,这个陈述中有什么问题?

t-sql sql-server geospatial spatial-index

5
推荐指数
1
解决办法
1327
查看次数

使用SpatialIndex库选择R*Tree的参数

我正在使用来自http://libspatialindex.github.com/的spatialindex库

我在主内存中创建一个R*树:

size_t capacity = 10;
bool bWriteThrough = false;
fileInMem = StorageManager
    ::createNewRandomEvictionsBuffer(*memStorage, capacity, bWriteThrough);

double fillFactor = 0.7;
size_t indexCapacity = 10;
size_t leafCapacity = 10;
size_t dimension = 2;
RTree::RTreeVariant rv = RTree::RV_RSTAR;
tree = RTree::createNewRTree(*fileInMem, fillFactor, indexCapacity,
   leafCapacity, dimension, rv, indexIdentifier);
Run Code Online (Sandbox Code Playgroud)

然后我插入了大量的边界框,目前大约2.5M(德国巴伐利亚州的公路网).后来我的目标是插入欧洲的所有道路.

存储管理器和rtree的参数选择有哪些?大多数情况下,我使用rtree来查找到给定查询(bbox交叉点)最近的道路.

c++ indexing spatial spatial-index r-tree

5
推荐指数
1
解决办法
637
查看次数

为什么不使用B + -Tree MongoDB

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

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

谢谢。

b-tree geospatial mongodb spatial-index

5
推荐指数
1
解决办法
758
查看次数

SOLR 4.2 - solr.LatLonType类型vs solr.SpatialRecursivePrefixTreeFieldType

我目前正在使用SOLR 4.2来索引地理空间数据(纬度和经度数据).我已将我的地理空间字段配置如下.

 <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>   

  <field name="latlong"     type="location"   indexed="true" stored="false" multiValued="true"/>
Run Code Online (Sandbox Code Playgroud)

我只是想确保我使用正确的SOLR类来执行地理空间搜索,因为我不确定未来版本的SOLR将支持哪个2类(LatLonType与SpatialRecursivePrefixTreeFieldType).

我假设SpatialRecursivePrefixTreeFieldType是latlong的升级版本,有人可以确认我是否正确吗?

lucene solr geospatial spatial-index solr4

5
推荐指数
1
解决办法
2934
查看次数

有效地搜索所有元素都大于给定元组的元组

考虑以下元组列表:[(5,4,5), (6,9,6), (3,8,3), (7,9,8)]

我正在尝试设计一种算法来检查列表中是否至少存在一个元组,其中该元组的所有元素都大于或等于给定的元组(针)。

例如,对于给定的元组 (6,5,7),算法应返回 True,因为给定元组中的每个元素都小于列表中的最后一个元组,即 (7,9,8)。但是,对于给定的元组 (9,1,9),算法应返回 False,因为列表中不存在每个元素都大于给定元组的元组。特别是,这是由于给定元组的第二个元素 1 小于列表中所有元组的第二个元素。

一个简单的算法会逐一循环列表中的元组,并在内循环中循环元组的元素。假设有 n 个元组,其中每个元组有 m 个元素,则复杂度为 O(nm)。

我在想是否有可能有一种算法来产生复杂度较低的任务。允许预处理或任何奇特的数据结构来存储数据!

我最初的想法是利用二分搜索的某种变体,但我似乎找不到一种数据结构,一旦我们根据第一个元素消除了一些元组,就不会再回到朴素的解决方案,这意味着该算法最终也可能是 O(nm)。

谢谢!

algorithm search spatial-index data-structures

5
推荐指数
1
解决办法
1193
查看次数

是否可以有效地计算数轴上与单个点 P 重叠的线段的数量?

是否可以有效地计算数轴上与单个点重叠的线段的数量P

所有线段都位于一条数轴上(它是一个1-D世界,而不是一个3-D世界)。

每条线段都有一个起始坐标X1和一个结束坐标X2

例子:

Line segment A spans from X1==1 to X2==3
Line segment B spans from X1==2 to X2==4
Line segment C spans from X1==3 to X2==5
Line segment D spans from X1==1 to X2==4
----------------------------------------
Ex1: Line segments that overlap point P==2: A,B and D   >>> overlap count==3.
Ex2: Line segments that overlap point P==7: None        >>> overlap count==0.
Ex3: Line segments that overlap point P==3: A,B,C and …
Run Code Online (Sandbox Code Playgroud)

c# c++ spatial spatial-index game-physics

5
推荐指数
1
解决办法
1758
查看次数

在空间数据库中查找 K 个最接近的对(没有特定查询对象)

输入:

\n\n

\xe2\x80\xa2 N 个点{P1,\xe2\x80\xa6。, Pn} - 每个点都来自同一维度 t:

\n\n
    \n
  • Pi = {x_1, \xe2\x80\xa6., x_t} 其中 k 介于 18-30 之间。
  • \n
\n\n

\xe2\x80\xa2 距离函数 \xe2\x80\x93 dist(Pi, Pj) - 返回一个数字,即点之间的距离。(该函数是自定义函数 \xe2\x80\x93 不是标准 Minkowski 距离)。

\n\n

问题:

\n\n

\xe2\x80\xa2 主要问题:

\n\n
    \n
  • 尽可能快地从所有 N 个点 \xe2\x80\x93 中找到 K 个最接近的对。
  • \n
\n\n

\xe2\x80\xa2 第二个问题:

\n\n
    \n
  • 给定一个点 Q = {x_1, \xe2\x80\xa6, x_t} 返回 K 个最接近的对。
  • \n
\n\n

\xe2\x80\xa2 很高兴拥有:

\n\n
    \n
  • 我们可以在其中添加/删除点 Pi 的数据库,并且上述查询将尽可能快地运行。
  • \n
\n\n

相关数据结构:

\n\n

\xe2\x80\xa2 KD-树

\n\n
    \n …

spatial spatial-query multidimensional-array knn spatial-index

5
推荐指数
0
解决办法
275
查看次数

Lucene内存空间索引性能不佳

在我的应用程序中,有一个用例来查找与某个其他地理点最接近的点。我决定使用内存空间索引,并找到了几种候选对象:jeospatialLucene空间

我做了一些基准测试,很惊讶地发现Lucene指数非常慢。这是使用JMH完成的基准测试代码。完整的源代码可以在我的GitHub存储库中找到。

@State(Scope.Thread)
public class MyBenchmark {

    // Lucene
    private static final String COORDINATES_FIELD = "coordinates";
    private static final int GEO_PRECISION_LEVEL = 5;
    private static final double NEARBY_RADIUS_DEGREE = DistanceUtils.dist2Degrees(
            50, DistanceUtils.EARTH_MEAN_RADIUS_KM);

    private final Directory directory = new RAMDirectory();
    private final IndexWriterConfig iwConfig = new IndexWriterConfig();
    private IndexWriter indexWriter = null;
    private IndexSearcher indexSearcher = null;
    private final SpatialContext spatialCxt = SpatialContext.GEO;
    private final ShapeFactory shapeFactory = spatialCxt.getShapeFactory();
    private final SpatialStrategy coordinatesStrategy …
Run Code Online (Sandbox Code Playgroud)

lucene performance geospatial spatial-index

5
推荐指数
1
解决办法
322
查看次数

需要帮助来优化可能错误的空间SQL查询

我是SQL的新手,我需要帮助来优化空间查询,以便它在2秒内运行.我们已经在各个网站上尝试了一些建议(更多内容见下文).

背景

我们有一个表[Id,Geometry],大约300,000个不同大小和复杂度的几何形状,存储为几何数据类型.我们使用下面的代码片段为Geometry创建了一个空间索引.

CREATE SPATIAL INDEX [IX_Geometry_Spatial]
ON [dbo].[Geometries] ([Geometry]) USING  GEOMETRY_AUTO_GRID 
WITH  (
        BOUNDING_BOX = (XMAX = 24.43359375, XMIN = 10.810546875, YMAX = 69.2249968541159, YMIN = 55.2791152920156)
      );
Run Code Online (Sandbox Code Playgroud)

我们想要的是找到与输入几何形状相交的所有几何形状.这是通过使用以下查询完成的.

DECLARE @g geometry;  
SET @g = geometry::STGeomFromText('POLYGON ((x0 y0, ...))', 4326); -- A Worst Case Polygon containing 1442 data points

SELECT Count(Id)
FROM Geometries
WHERE Geometries.Geometry.Filter(@g.Reduce(.25)) = 1
Run Code Online (Sandbox Code Playgroud)

对于某些最坏情况的输入几何形状(大的,复杂的多边形),这种执行大约需要7-10秒.

这是查询的执行计划: 在此输入图像描述

我们可以看到我们达到空间指数,但最昂贵的操作是 clustered index seek (Clustered)

聚集索引寻求详细信息:

在此输入图像描述

空间索引寻求细节:

在此输入图像描述

问题

不应该通过空间索引而不是聚集索引来完成繁重的工作吗?

可以通过更改空间索引的设置来改进查询吗?我们应该使用什么设置(对于GRIDS,CELLS_PER_OBJECT等)?

如何将整个执行时间缩短,或者这种查询可以达到7-10秒?

我们尝试了什么,这有帮助

每个都节省了大约几秒钟.

  • 检查索引碎片和重建索引.
  • 交换方法从STIntersect()Filter()
  • 使用减少输入几何Reduce(.25) …

sql sql-server spatial-query spatial-index elasticsearch

5
推荐指数
1
解决办法
165
查看次数

MySQL:为函数st_geometryfromtext提供的GIS数据无效

这是我的代码:

SET @poly =
    'Polygon((-98.07697478272888 30.123832577126326,
              -98.07697478272888 30.535734310413392,
              -97.48302581787107 30.535734310413392,
              -97.48302581787107 30.123832577126326))';

SELECT name
FROM county_shapes
WHERE MBRContains(ST_GeomFromText(@poly), SHAPE);
Run Code Online (Sandbox Code Playgroud)

每当我运行时,我得到一个"MySQL:提供给函数st_geometryfromtext的无效GIS数据"错误.

这会返回相同的错误:

SELECT name
FROM county_shapes
WHERE MBRContains(ST_GeomFromText('Polygon((-98.07697478272888 30.123832577126326,
              -98.07697478272888 30.535734310413392,
              -97.48302581787107 30.535734310413392,
              -97.48302581787107 30.123832577126326))'), SHAPE);
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

mysql gis spatial-index mysql-5.7

4
推荐指数
1
解决办法
1万
查看次数