QGIS和PostGIS(地图点(在美国地图上为经纬度的经纬度)

时间:2020-01-21 12:55:29

标签: sql postgresql postgis qgis

我安装了QGIS和PostGIS。我有200个要在美国图表上显示的半径为100英里的点。

我已将纬度和经度导入到PostGIS数据库中。所以我有三个字段:[地址],[lat],[lng]。

1)我需要将经纬度字段转换为点或几何字段吗?如果可以,怎么办? (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 个答案:

答案 0 :(得分:2)

首先创建一个geometrygeography列,例如与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):由于您的表没有geometrygeography列,因此我使用函数ST_MakePoint创建了一个列。值4326对应于SRS WGS84-检查哪一个适合您的坐标。
  • 5:缓冲区的半径,以为单位。如果第一个参数的类型为geography,则该值将解释为
  • '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中可视化缓冲区

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

进一步阅读: