我有一个多边形表,看起来像:
我的数据库是Vertica,我是新手。我想创建一个表格,对所有点进行分组并创建多边形,多边形将用于检查纬度和经度点是否在多边形中。
如何创建此选择?我理解通过连接函数有组。
答案 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;