首先创建一个geometry 或geography 列,例如与AddGeometryColumn ..
SELECT AddGeometryColumn ('public','postgis_test','geom',4326,'POINT',2);
.. 然后用ST_Buffer的输出更新它
UPDATE postgis_test
SET geom = ST_Buffer(ST_SetSRID(ST_MakePoint(lng,lat),4326),50, 'quad_segs=8');
ST_Buffer的详细参数:
-
ST_SetSRID(ST_MakePoint(lng,lat),4326) :由于您的表没有 geometry 或 geography 列,我使用函数 ST_MakePoint 创建了一个。值 4326 对应于 SRS WGS84 - 检查哪一个适合您的坐标。
-
5 : degrees 的缓冲区半径。如果第一个参数是geography 类型,则该值被解释为meters。
-
'quad_segs=' :用于近似四分之一圆的段数(来自documentation 的文本)
之后,您将能够使用Add PostGIS Layer 选项将其导入 QGIS。
示例
创建半径为 5 度的缓冲区
CREATE TABLE public.postgis_test (city TEXT, lng NUMERIC, lat NUMERIC);
SELECT AddGeometryColumn ('public','postgis_test','geom',4326,'polygon',2);
INSERT INTO postgis_test
VALUES ('New York',-74.00,40.71),
('Los Angeles',-118.24,34.05),
('Chicago',-87,41.87);
UPDATE postgis_test
SET geom = ST_Buffer(ST_SetSRID(ST_MakePoint(lng,lat),4326),5, 'quad_segs=8');
在 QGIS 中可视化缓冲区
如果你想同时显示点和缓冲区,你必须创建一个额外的层(表格):
CREATE TABLE public.postgis_test (city TEXT, lng NUMERIC, lat NUMERIC);
SELECT AddGeometryColumn ('public','postgis_test','geom',4326,'point',2);
INSERT INTO postgis_test
VALUES ('New York',-74.00,40.71),
('Los Angeles',-118.24,34.05),
('Chicago',-87,41.87);
UPDATE postgis_test SET geom = ST_SetSRID(ST_MakePoint(lng,lat),4326);
CREATE TABLE buffers AS
SELECT city, ST_Buffer(geom,5, 'quad_segs=8')
FROM postgis_test;
如果您更喜欢使用米,只需将几何列转换为 geography 并以米为单位传递参数。
创建 100 英里(~160934 米)的缓冲区
CREATE TABLE public.postgis_test (city TEXT, lng NUMERIC, lat NUMERIC);
SELECT AddGeometryColumn ('public','postgis_test','geom',4326,'point',2);
INSERT INTO postgis_test
VALUES ('New York',-74.00,40.71),
('Los Angeles',-118.24,34.05),
('Chicago',-87,41.87);
UPDATE postgis_test SET geom = ST_SetSRID(ST_MakePoint(lng,lat),4326);
CREATE TABLE buffers AS
SELECT city, ST_Buffer(geom::geography,160934, 'quad_segs=8')::geometry
FROM postgis_test;
进一步阅读: