标签: spatial-index

PostGis插入Rectangle

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

提前致谢

sql postgis geospatial spatial-query spatial-index

3
推荐指数
1
解决办法
2168
查看次数

MYSQL使用空间索引

我试图利用空间索引.我有一个ips表和一个ip块范围的ip2geo表.我正在尝试从ip2geo表为每个ip分配Geo ID

尝试使用列值进行选择时,不会使用空间索引.

EXPLAIN
SELECT *,
   ( SELECT locid FROM  `ipblocks` i  
     WHERE MBRCONTAINS(i.ippolygon, 
                       POINTFROMWKB(POINT(h.`ip`,   0))) ) AS locaid 
FROM `ips` h  LIMIT 1;  
Run Code Online (Sandbox Code Playgroud)
    id          select_type table   type    possible_keys       key     key_len ref     rows    Extra
    1           PRIMARY     h       ALL     NULL                NULL    NULL    NULL    33279   2   DEPENDENT
    SUBQUERY    i                   ALL     ipblock_spatialidx  NULL    NULL    NULL    4977388 Using where

在过滤器中使用常量时,将使用索引.

EXPLAIN SELECT *,(SELECT locid FROM  `ipblocks` i  WHERE
MBRCONTAINS(i.ippolygon, POINTFROMWKB(POINT(3223394542, 0))) ) AS
locaid FROM `ips` h  LIMIT 1;  


id  select_type table   type    possible_keys …
Run Code Online (Sandbox Code Playgroud)

mysql sql geospatial spatial-index

3
推荐指数
1
解决办法
1498
查看次数

我可以在postgis中的同一空间索引列中存储圆和多边形吗?

根据他们的文档,空间对象可以是以下内容

POINT(0 0)

LINESTRING(0 0,1 1,1 2)

POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1))

MULTIPOINT(0 0,1 2)

MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4))

MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))

GEOMETRYCOLLECTION(POINT(2 3),LINESTRING(2 3,3 4))
Run Code Online (Sandbox Code Playgroud)

但是,没有圆形类型,我可以只存储一个点及其半径.并且具有相同的功能,当我查询该点是否存在于该圈时,我可以获得该圈的边界框.

postgis geospatial spatial-query spatial-index postgresql-9.3

3
推荐指数
1
解决办法
1821
查看次数

SQL Server中的空间索引

我正在尝试从postgres迁移到sql-server(windows)。但是我不知道ms-sql语法,文档也对我不利。我有一个表“地理编码”,以十进制格式存储纬度和经度数据。我有一个迁移,可以使用postgis索引经纬度较长的数据

create index index_on_geocodes_location ON geocodes using gist (st_geographyfromtext(((('POINT('::text || longitude) || ' '::text) || latitude) || ')'::text))
Run Code Online (Sandbox Code Playgroud)

我很难为sql-server生成等效查询。根据文档,如果列数据类型是地理,则非常容易,但是由于我已经有一个具有十进制数据类型的现有数据库,因此无济于事。

PS:我正在使用Rails迁移来执行查询

sql sql-server spatial-index

3
推荐指数
1
解决办法
2111
查看次数

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

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

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

我正在使用这些工具:

  • Python 2.5
  • MySQL的
  • MongoDB的

构建Quadtree并不难:http://donar.umiacs.umd.edu/quadtree/points/pointquad.html但是一旦我创建了树并将其保存到db(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

python spatial geospatial spatial-query spatial-index

2
推荐指数
1
解决办法
3101
查看次数

st_intersect()在postgresql中不起作用

我正在使用postgresql版本:"在x86_64-unknown-linux-gnu上的PostgreSQL 9.3.1,由gcc(GCC)4.6.3 20120306(Red Hat 4.6.3-2)编译,64位"

我创建了2个表A和B,其中点和多边形作为数据类型.现在我想知道点是否在多边形内部.为此,我试图使用ST_Intersect(A.point_LatLong,B.polygon_abc); 我的查询是:

SELECT A.id 
FROM A, B 
WHERE A.name = 'callifornia' 
AND ST_Intersect(A.point_LatLong , B.polygon_abc); 
Run Code Online (Sandbox Code Playgroud)

在这里point_latLong,并polygon_abc在具有表A和B的数据类型点和多边形列名

但是这个查询给出了一个错误:

错误:函数st_intersect(point,polygon)不存在第
3行:WHERE city.city_name ='callifornia'和ST_intersect(city.c ...
提示:没有函数匹配给定的名称和参数类型.您可能需要添加
显式类型演员.


我怎么解决这个问题?我甚至无法在postgresql中使用任何其他空间方法,如st_contains()等,如果您有任何解决方案,请告诉我.

postgresql postgis geospatial spatial-query spatial-index

2
推荐指数
1
解决办法
2202
查看次数

在oracle上创建空间索引

我有一个表'floating_options',我想在列'area_geo'上创建一个空间索引(这是一个sdo_geometry列,当我从floating_options中选择*时,有两行数据按预期显示).

我使用了以下代码,但我收到以下错误.我会非常感谢任何帮助!谢谢!

CREATE INDEX area_idx ON floating_options(area_geo)
   INDEXTYPE IS MDSYS.SPATIAL_INDEX;


Error report -
SQL Error: ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine
ORA-13203: failed to read USER_SDO_GEOM_METADATA view
ORA-13203: failed to read USER_SDO_GEOM_METADATA view
ORA-06512: at "MDSYS.SDO_INDEX_METHOD_10I", line 10
29855. 00000 -  "error occurred in the execution of ODCIINDEXCREATE routine"
*Cause:    Failed to successfully execute the ODCIIndexCreate routine.
*Action:   Check to see if the routine has been coded correctly.
Run Code Online (Sandbox Code Playgroud)

sql oracle geospatial spatial-index

2
推荐指数
1
解决办法
6355
查看次数

Postgres/PostGIS 上的 Gist 索引仍然很慢

我不是 Postgres/GIS 主题的专家,并且我对大型几何数据库(超过 2000 万条记录)有疑问。首先,我的设置如下所示:

mmt=# select version();
-[ RECORD 1 ]-------------------------------------------------------------------------------------------------------------
version | PostgreSQL 13.2 (Debian 13.2-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit

mmt=# select PostGIS_Version();
-[ RECORD 1 ]---+--------------------------------------
postgis_version | 3.1 USE_GEOS=1 USE_PROJ=1 USE_STATS=1
Run Code Online (Sandbox Code Playgroud)

我正在查询的表包含以下列:

mmt=# \d titles
                                              Table "public.titles"
        Column        |           Type           | Collation | Nullable |                 Default                 
----------------------+--------------------------+-----------+----------+-----------------------------------------
 ogc_fid              | integer                  |           | not null | nextval('titles_ogc_fid_seq'::regclass)
 wkb_geometry         | bytea                    |           |          | 
 timestamp            | timestamp with time zone |           |          | …
Run Code Online (Sandbox Code Playgroud)

postgresql indexing postgis geospatial spatial-index

2
推荐指数
1
解决办法
1740
查看次数

尝试查找地理编码范围内的所有点时,空间索引很慢.如何让它更快?

我在一张表上设置了一个空间索引,其中有130万条记录都是地理编码的.这些值存储在地理数据类型列中.我遇到的问题是,当我查询具有空间索引的列时,实际上仍然很慢.例如,在一英里内找到所有帐户大约需要20秒.

以下是运行缓慢的查询示例:

DECLARE @g Geography;
SET @g = (select ci.Geocode from CustomerInformation ci where ci.CIOI = 372658) 

DECLARE @region geography = @g.STBuffer(1609.344)

Select top 100 ci.Geocode.STDistance(@g), ci.CIOI 
from CustomerInformation ci
where ci.Geocode.Filter(@region) = 1
order by ci.Geocode.STDistance(@g) asc
Run Code Online (Sandbox Code Playgroud)

这是我的创建索引语句:

CREATE SPATIAL INDEX [IX_CI_Geocode] ON [dbo].[CustomerInformation] 
(
    [Geocode]
)USING  GEOGRAPHY_GRID 
WITH (
 GRIDS =(LEVEL_1 = MEDIUM,LEVEL_2 = LOW,LEVEL_3 = LOW,LEVEL_4 = LOW), 
CELLS_PER_OBJECT = 128, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON)
GO
Run Code Online (Sandbox Code Playgroud)

数据是单个州的一部分中的每个房屋.因此,在一英里范围内,我预计会有1000分或更多.我正确索引这个吗?任何帮助都会很棒.

另一个慢查询示例:

DECLARE …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server-2008 spatial-index

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

如何在 Postgresql 中的几何列上创建 Gin 索引?

根据pgAdmin 4 4.21 文档 \xc2\xbb 创建或修改表 \xc2\xbb

\n
\n

选择gin创建GIN索引。GIN 索引可以提高管理二维几何数据类型和最近邻搜索时的性能

\n
\n

如果我们打算使用最近邻搜索,我们应该为几何列创建一个 Gin 索引,我就是这样做的!

\n

然而,在定义 Gin 索引时,它要求操作符类,并且有两个选项(jsonb_path_obsgin_int_ops),但它们都不适用于几何类型。

\n

有人可以告诉我如何在几何类型列上创建 Gin 索引吗?

\n

PS 几何我的意思是 PostGIS\ 的几何列类型

\n

postgresql spatial-index pgadmin-4

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

带有 ST_GeomFromText 的 postgresql 查询不起作用

我正在尝试执行 Postgres 查询:

SELECT a.a_geom
FROM a
WHERE 
ST_within(a.a_geom::geometry,ST_GeomFromText('Polygon((1,1),(4,1),(4,4),(4,1))'));
Run Code Online (Sandbox Code Playgroud)

但是这个查询给出了错误:

错误:解析错误 - 无效的几何
SQL 状态:XX000
提示:“多边形((1,1”<--解析几何中位置 12 处的错误)

postgresql postgis geospatial spatial-query spatial-index

0
推荐指数
1
解决办法
2412
查看次数