创建Vertica空间表并与点相交

时间:2016-07-01 20:59:11

标签: vertica vertica-place

我有一个多边形表,看起来像:

tableu polygon table

我的数据库是Vertica,我是新手。我想创建一个表格,对所有点进行分组并创建多边形,多边形将用于检查纬度和经度点是否在多边形中。

如何创建此选择?我理解通过连接函数有组。

1 个答案:

答案 0 :(得分:2)

您需要使用Vertica Place。您可以找到安装指南here

您还可能需要将,更改为.,因为我不确定如何为多边形指定自定义分隔符,它们可能会干扰(或者您正在使用的数据类型等) 。此外,还有其他支持的空间函数可能更好,因此您可能希望稍微查看一下API。

首先,您需要定义多边形表:

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;

然后创建一个要检查的点表:

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;