创建一个 Vertica spatial table 并与一个点相交
Create a Vertica spatial table and intersect with a point
我有一个多边形 table 看起来像:
我的数据库是 Vertica,我是新手。我想创建一个 table 将所有点分组并创建多边形,多边形将用于检查纬度和经度点是否在多边形中。
如何创建这个select?我知道有 group by concatenate 函数。
为此,您需要使用 Vertica Place。您可以找到安装指南 here。
您可能还需要将 ,
更改为 .
,因为我不确定如何为多边形指定自定义分隔符,它们可能会干扰(或您使用的数据类型, ETC)。此外,还有其他支持的空间函数可能会更好,因此您可能需要稍微查看一下 API。
基本上首先你需要定义你的多边形table:
CREATE TABLE regions (gid INT, geog GEOGRAPHY);
然后将所有多边形插入其中。请注意,我使用的是 GROUP_CONCAT,您可能需要从 strings package 安装它。
INSERT /*+ DIRECT */ regions
SELECT "POLYGON NUMBER", ST_GeographyFromText('POLYGON( (' || polygon_text || ') )')
FROM (
SELECT "POLYGON NUMBER", GROUP_CONCAT( longitude || ' ' || latitude )
over ( partition by "POLYGON NUMBER" order by "POINT ORDER" ) polygon_text
FROM mytable
) x;
COMMIT;
您需要将它们编入索引:
SELECT STV_Create_Index(gid, geog USING PARAMETERS index='my_regions',
overwrite=true, max_mem_mb=256) OVER() FROM regions;
然后创建一个 table 个要检查的点:
CREATE TABLE points (gid INT, geog GEOGRAPHY);
加分:
INSERT INTO points VALUES (100, ST_GeographyFromText('POINT(-91.217706 43.50055)') );
INSERT INTO points VALUES (101, ST_GeographyFromText('POINT(-93.217706 43.70055)') );
COMMIT;
寻找路口:
SELECT gid AS pt_gid,
STV_Intersect(geog USING PARAMETERS index='my_regions') AS pol_gid
FROM points ORDER BY pt_gid;
我有一个多边形 table 看起来像:
我的数据库是 Vertica,我是新手。我想创建一个 table 将所有点分组并创建多边形,多边形将用于检查纬度和经度点是否在多边形中。
如何创建这个select?我知道有 group by concatenate 函数。
为此,您需要使用 Vertica Place。您可以找到安装指南 here。
您可能还需要将 ,
更改为 .
,因为我不确定如何为多边形指定自定义分隔符,它们可能会干扰(或您使用的数据类型, ETC)。此外,还有其他支持的空间函数可能会更好,因此您可能需要稍微查看一下 API。
基本上首先你需要定义你的多边形table:
CREATE TABLE regions (gid INT, geog GEOGRAPHY);
然后将所有多边形插入其中。请注意,我使用的是 GROUP_CONCAT,您可能需要从 strings package 安装它。
INSERT /*+ DIRECT */ regions
SELECT "POLYGON NUMBER", ST_GeographyFromText('POLYGON( (' || polygon_text || ') )')
FROM (
SELECT "POLYGON NUMBER", GROUP_CONCAT( longitude || ' ' || latitude )
over ( partition by "POLYGON NUMBER" order by "POINT ORDER" ) polygon_text
FROM mytable
) x;
COMMIT;
您需要将它们编入索引:
SELECT STV_Create_Index(gid, geog USING PARAMETERS index='my_regions',
overwrite=true, max_mem_mb=256) OVER() FROM regions;
然后创建一个 table 个要检查的点:
CREATE TABLE points (gid INT, geog GEOGRAPHY);
加分:
INSERT INTO points VALUES (100, ST_GeographyFromText('POINT(-91.217706 43.50055)') );
INSERT INTO points VALUES (101, ST_GeographyFromText('POINT(-93.217706 43.70055)') );
COMMIT;
寻找路口:
SELECT gid AS pt_gid,
STV_Intersect(geog USING PARAMETERS index='my_regions') AS pol_gid
FROM points ORDER BY pt_gid;