鈍足ランナーのIT日記

走るのが好きな5流のITエンジニアのブログ。

趣味の範囲は広いけど、どれも中途半端なクソブロガー楽しめるWebアプリを作ってあっと言わせたい。サーバーサイドPerl(Mojolicious)、クライアントサイドVue.js。Arduinoにも触手を伸ばす予定。

三島市のコインランドリー周辺500mの人口を求めてみた

ランドマークの情報をテーブルへ格納する

geocodingはテーブル格納後に、pythonで行った

f:id:kechiya:20160924011409p:plain

シェープファイルから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 


f:id:kechiya:20160924011200p:plain

重なったところの面積を按分する

qiita.com

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


f:id:kechiya:20160924124920p:plain

複数店舗が重なった場合、按分する