読者です 読者をやめる 読者になる 読者になる

鈍足ランナーのIT日記

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

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

三島市のコインランドリーのボロネイ図作り、人口をカウントする

コインランドリー用のテーブルを用意しておく

前に述べた通り。QGISへ取り込む。

ボロネイ図を描写する

入力にコインランドリーのベクターを指定する。
そうするとシェープファイルが吐き出される。(volonay.shp)
そのシェープファイルを入力に新たなテーブルを作る

shp2pgsql  -s 4326 volonoy.shp volonoy > volonoy.sql
psql -d test -f volonoy.sql

人口カウント用のSQLを発行する

select  v.id, (select name from volonoy b where b.id = v.id), sum(tblt000609)  from volonoy v
 inner join  population   p  
on st_intersects( p.geom, 
v.geom ) group by v.id order by sum desc

f:id:kechiya:20160928001929p:plain
f:id:kechiya:20160928001944p:plain

三島市のコインランドリー周辺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

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

eclipse+mavanのproxy設定

単なる備忘録。

Eclipse m2e のプロキシ設定 | hirooka.pro

人口のシェープデータをpostgisへロードするまでの過程

人口のデータについては前の記事

QGIS入門しています - 鈍足ランナーのIT日記

shp2pgsqlコマンドを使う

シェープファイルからSQLを吐き出してくれるコマンド。
populationテーブルにインポートする場合

shp2pgsql MESH05238.shp population

吐き出したSQL

こんな感じで人口のデータは一緒に作ってくれない。人口のデータは別立てでロードしないといけないということか。

INSERT INTO "poplation" ("mesh1_id","mesh2_id","mesh3_id","mesh4_id","obj_id","key_code",geom) VALUES ('5238','77','99','4','790694','523877994','01060000000100000001030000000100000009000000D0636666E65F61401002222222AA41402CACCCCCCC5F61401002222222AA41402CACCCCCCC5F61407896666666AA41402CACCCCCCC5F6140D82AABAAAAAA4140D0636666E65F6140D82AABAAAAAA4140741B000000606140D82AABAAAAAA4140741B0000006061407896666666AA4140741B0000006061401002222222AA4140D0636666E65F61401002222222AA4140');

人口データと結合したデータを作る

以下、とても詳しいです。QGIS上でメッシュデータと人口のデータを結合してから取り込むとのことです。
PostGISを使ってSQLだけで面積按分:準備編(QGISを使ってCSVデータとShapeデータ結合してPostgreSQLに投入) - Qiita

QGIS入門しています

レイヤーはどうも回線が遅すぎて、如何にもこうにも、まぁ、いいや。次行こう。

人口が知りたい

新しい属性値を計算する--人口密度の色別表示

e-Statのダウンロードページ

地図で見る統計(統計GIS)

静岡県は一体どのメッシュコードをダウンロードしていいのかわからない??こちらから
検索。

地域メッシュコードの体系

静岡県は5238あたりと判明。あとは。国勢調査、平成22年、世界測地系500mメッシュをダウンロードする。

レイヤに追加

上記ファイル群をダウンロードしたら。そのうちの一つ、拡張子shpをQGISのレイヤへドロップする。
レイヤの順番には意味があるので、上下で隠れてしまう場合があるので注意かも。
一応表示できたのですが、ランドマーク、星で表したところ(Postgre+postgisへinsertしたデータ)は、三島市のポイントのはずなのに、なぜか山梨に表示されてしまう。これは、チョツト問題。

f:id:kechiya:20160916234939p:plain

WGS84と緯度経度は違うようだ

Geocoding - 住所から緯度経度を検索
おそらく、緯度経度を入力してしまったから問題になったのだろう。
WGS84のSRIDは4326のようで
postgis - Choosing SRID and what is its meaning? - Geographic Information Systems Stack Exchange

postgisへinsertするときには4326でinsertすればいいようです。

QGISをインストール

QGISをダウンロードするとdmgファイルがダウンロードできる。
ダブルクリックして、1番から4番のdmgファイルを実行してインストール。
普通にダブルクリックすると「開発元が未確認のため開けません」となるので
Ctrlキーを押しながらクリックすると起動できる。

f:id:kechiya:20160915073512p:plain


Macでアプリを起動するときに「開発元が未確認のため開けません」と表示されたときの対処法 | iTea4.0

Postgisの使い方

ランドマークのデータをinsert文でinsert

INSERT INTO laundry (id,name,address,geom) VALUES(1,’NARAHASHI’,’NAKATAMACHI 13-14’,ST_GeomFromText('POINT(138.5512 35.84)’, 4612));

いろいろとイメージしやすい資料

Boundless : Introduction to PostGIS (Japanese)