三島市のコインランドリー周辺500mの人口を求めてみた
人口のシェープファイルを作成する
PostGISを使ってSQLだけで面積按分:準備編(QGISを使ってCSVデータとShapeデータ結合してPostgreSQLに投入) - Qiitaqiita.com
シェープファイルからSQLに変換後、postgisのテーブル(population)へ入れる
$ shp2pgsql -s 4326 population.shp population > population.sql $ psql -d dbname -f population.sql
人口を求めるクエリを発行する
select l.id, (select name from laundry b where b.id = l.id), sum(tblt000609) from laundry l inner join population p on st_intersects( p.geom, st_buffer(l.geom::geography,500)::geometry )group by l.id
重なったところの面積を按分する
select l.id, (select name from laundry b where b.id = l.id), sum(tblt000609 *( ST_AREA( ST_Intersection(p.geom , st_buffer(l.geom::geography,500)::geometry ) ) / ST_AREA( p.geom ) ) ) from laundry l inner join population p on st_intersects( p.geom, st_buffer(l.geom::geography,500)::geometry )group by l.id