创建一个 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;