QGIS & PostGIS (точки карты (лат и лонг с радуисом на карте США) - PullRequest
1 голос
/ 21 января 2020

Я установил QGIS и PostGIS. У меня есть 200 точек, которые я хочу отобразить с радиусом 100 миль на графике США.

Я импортировал широту и долготу в базу данных PostGIS. Итак, у меня есть три поля: [address], [lat], [lng].

1) Нужно ли преобразовывать поля lat и lng в поле точек или геом? Если так, то как? (st_buffer?) 2) Какую команду / SQL я использую для отображения точек с радиусом?

Я могу запросить свои точки следующим образом ..

SELECT * FROM postgis_test

Я просто не понимаю, как отобразить все точки на карте с радиусом.

Пример точек:

city        lat          lng
New York    40.7127753  -74.0059728
Los Angeles 34.0522342  -118.2436849
Chicago     41.8781136  -87.6297982

1 Ответ

2 голосов
/ 21 января 2020

Сначала создайте столбец 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

enter image description here

Если вы хотите отобразить как точки, так и буферы на в то же время вам нужно создать дополнительный слой (таблицу):

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;

enter image description here

Если вы предпочитаете работать с метрами, просто приведите столбец геометрии в 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;

enter image description here

Дополнительная информация:

...