我有一个名为pets
的表,其中包含lats和lng坐标和变量,以及通过上传名为city
的形状文件创建的表格,其中列left, right, top, bottom, lat, lng,
和{ {1}}
geom.
我想知道如何构建一个查询来总结每个边界内的猫狗数量。通常我会在QGIS中进行空间连接,但是我的数据集太大而且在成功加入这两个数据集之前崩溃了。
我对QGIS和Postgres非常熟悉,但对PostGIS来说却很陌生。我已经构建了一个查询但是没有成功获得我需要的答案:
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
非常感谢为新手编写的PostGIS上的任何指针或资源。谢谢!
答案 0 :(得分:1)
pets
表需要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;