PostGIS:使用Lats / Lng进行空间连接求和

时间:2015-07-24 22:34:43

标签: postgis

我有一个名为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上的任何指针或资源。谢谢!

1 个答案:

答案 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;