Сначала создайте столбец 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)
: поскольку в вашей таблице не было столбца I geometry
или geography
использовал функцию ST_MakePoint
для ее создания. Значение 4326 соответствует SRS WGS84 - проверьте, какая из них соответствует вашим координатам. 5
: радиус буфера в градусах . Если первый параметр имеет тип geography
, это значение интерпретируется как метры . 'quad_segs='
: количество сегментов, используемых для аппроксимации четверть круга (текст из documentation
)
После этого вы сможете импортировать его в QGIS с помощью опции Add PostGIS Layer
.
Примеры
Создание буферов с помощью радиус 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;
Дополнительная информация: