PostGIS:使用 Lats/Lngs 进行空间连接求和
PostGIS: Spatial Joins Summing using Lats/Lngs
我有一个 table,名为 pets
,带有 lats 和 lng 坐标和变量,以及一个通过上传形状文件创建的 table,名为 city
, 列 left, right, top, bottom, lat, lng,
和 geom.
lat lng cats dogs
-99.4 42.1 2 0
-98.1 44.3 1 1
-99.7 43.6 0 3
-99.8 42.0 2 1
我想知道如何构建一个查询来汇总每个边界内的猫和狗的数量。通常我会在 QGIS 中进行空间连接,但我的数据集太大并且在成功连接两者之前崩溃了。
我对 QGIS 和 Postgres 非常熟悉,但对 PostGIS 还是很陌生。我构建了一个查询但未能获得我需要的答案:
select sum(pets.dogs)
from pets, city
WHERE ST_Within(pets.dogs, city.geom);
非常感谢为新手编写的有关 PostGIS 的任何指示或资源。谢谢!
pets
table 需要一个 GeometryColumn 代表 lat/lng。像这样添加:
psql> SELECT AddGeometryColumn ('my_schema','pets','geom',4326,'POINT',2);
psql> UPDATE pets SET geom=ST_SetSRID(ST_MakePoint(lng, lat), 4326);
对于大型数据集,建议在列中添加一个spatial index:
psql> CREATE INDEX geom_idx ON pets USING GIST (geom);
这应该允许像这样的快速查询:
psql> SELECT sum(pets.dogs)
FROM pets, city
WHERE ST_Within(pets.geom, city.geom);
这将给出任何城市几何图形中所有狗的单一计数。按城市名称(或 ID)分组以按城市获取计数:
psql> SELECT city.id, city.name, sum(pets.dogs)
FROM pets, city
WHERE ST_Within(pets.geom, city.geom)
GROUP BY city.id;
我有一个 table,名为 pets
,带有 lats 和 lng 坐标和变量,以及一个通过上传形状文件创建的 table,名为 city
, 列 left, right, top, bottom, lat, lng,
和 geom.
lat lng cats dogs
-99.4 42.1 2 0
-98.1 44.3 1 1
-99.7 43.6 0 3
-99.8 42.0 2 1
我想知道如何构建一个查询来汇总每个边界内的猫和狗的数量。通常我会在 QGIS 中进行空间连接,但我的数据集太大并且在成功连接两者之前崩溃了。
我对 QGIS 和 Postgres 非常熟悉,但对 PostGIS 还是很陌生。我构建了一个查询但未能获得我需要的答案:
select sum(pets.dogs)
from pets, city
WHERE ST_Within(pets.dogs, city.geom);
非常感谢为新手编写的有关 PostGIS 的任何指示或资源。谢谢!
pets
table 需要一个 GeometryColumn 代表 lat/lng。像这样添加:
psql> SELECT AddGeometryColumn ('my_schema','pets','geom',4326,'POINT',2);
psql> UPDATE pets SET geom=ST_SetSRID(ST_MakePoint(lng, lat), 4326);
对于大型数据集,建议在列中添加一个spatial index:
psql> CREATE INDEX geom_idx ON pets USING GIST (geom);
这应该允许像这样的快速查询:
psql> SELECT sum(pets.dogs)
FROM pets, city
WHERE ST_Within(pets.geom, city.geom);
这将给出任何城市几何图形中所有狗的单一计数。按城市名称(或 ID)分组以按城市获取计数:
psql> SELECT city.id, city.name, sum(pets.dogs)
FROM pets, city
WHERE ST_Within(pets.geom, city.geom)
GROUP BY city.id;