QGIS 和 PostGIS(地图点(美国地图上带有半径的纬度和经度)
QGIS & PostGIS (map points(lat and long with raduis on USA map)
我安装了 QGIS 和 PostGIS。我有 200 个点要在美国图表上以 100 英里的半径显示。
我已将我的经纬度导入到 PostGIS 数据库中。所以我有三个字段:[address]、[lat]、[lng]。
1) 我是否需要将 lat 和 lng 字段转换为点或几何字段?如果是这样怎么办? (st_buffer?)
2)用什么command/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
首先创建一个 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)
:因为您 table 没有 geometry
或 geography
列,所以我使用函数 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 中可视化缓冲区
如果你想同时显示点和缓冲区,你必须创建一个额外的层(table):
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;
进一步阅读:
我安装了 QGIS 和 PostGIS。我有 200 个点要在美国图表上以 100 英里的半径显示。
我已将我的经纬度导入到 PostGIS 数据库中。所以我有三个字段:[address]、[lat]、[lng]。
1) 我是否需要将 lat 和 lng 字段转换为点或几何字段?如果是这样怎么办? (st_buffer?) 2)用什么command/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
首先创建一个 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)
:因为您 table 没有geometry
或geography
列,所以我使用函数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 中可视化缓冲区
如果你想同时显示点和缓冲区,你必须创建一个额外的层(table):
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;
进一步阅读: