鈍足ランナーのIT日記

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

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

CentOS6 にPostgreSQL9.6+PostGIS2.3を導入する

さて、手順を備忘録としてまとめていく。

CentOS 6 に PostgreSQL 9.x を yum インストールする手順 | WEB ARCH LABO

インストールとサービスの起動まで

$ sudo yum -y localinstall http://yum.postgresql.org/9.6/redhat/rhel-6-x86_64/pgdg-centos96-9.6-3.noarch.rpm
$ sudo yum list postgresql*

sslエラーとなったので、一旦リポジトリを無効化

$ sudo vi /etc/yum.repos.d/pgdg-96-centos.repo 
#[pgdg96]の編集して、enabled=0へ編集
#enabled=0

久々にログインしたサーバでyumしたらepel接続でsslエラーが出たので対応 - Qiita

こちらを参照してnssを更新後、再度、pgdg96を有効化

$ sudo yum -y install postgresql96-server postgresql96-devel
$ sudo  service postgresql-9.6 initdb
$ sudo chkconfig postgresql-9.6 on
$ sudo service postgresql-9.6 start

サーバの起動まで出来ました

データベースの作成とユーザの設定

UbuntuでPostgreSQLを使ってみよう (2) — Let's Postgres

$ sudo passwd postgres
$ su - postgres
$ createdb test
$ create user hoge
$ psql -d test
test=#  create role hoge with login;
test=#  ¥q
$ exit
$ su - hoge
$ psql -d test   # hogeユーザでログイン可能になる

PostGISのインストール

$ sudo yum list postgis*
$ sudo yum --enablerepo=epel -y install postgis2_96 postgis2_96-client

postgis環境設定など

ユーザの作成

su - postgres
create user hoge -P   #db ユーザを作成する OSユーザと合わせる
psql -d test
test=# create extension postgis;
ERROR:  ライブラリ"/usr/pgsql-9.6/lib/rtpostgis-2.3.so"をロードできませんでした: libhdf5.so.6: 共有オブジェクトファイルを開けません: そのようなファイルやディレクトリはありません

so.7は存在するようなので

postgresql - Postgres create POSTGIS extension error with CentOS 6 - Stack Overflow

$ cd /usr/lib64
$ sudo ln -s libhdf5_hl.so.7 libhdf5_hl.so.6
$ sudo ln -s libhdf5.so.7 libhdf5.so.6

再度実行見事できた。

su - postgres
psql -d test    
test=# create extension posts;
CREATE EXTENSION
test=# SELECT PostGIS_full_version();
                                                                       postgis_f
ull_version                                                                     
  
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--
 POSTGIS="2.3.0 r15146" GEOS="3.5.0-CAPI-1.9.0 r4084" PROJ="Rel. 4.8.0, 6 March 
2012" GDAL="GDAL 1.9.2, released 2012/10/08" LIBXML="2.7.6" LIBJSON="0.11" RASTE
R
(1)

自宅のデスクトップPCが逝去。

妻が使っているWIndowsマシン。マウスが使えないということで
ヤマダ電機でマウスを買ってきましたが、やはり使えない。
おかしいと思い調べてみると、キーボードも使えない。USBポートが全滅していました。
箱を開けて調べてみると、放熱板がやけに高温になっている。火傷するほどの。
マザーが飛んだんだろう。
さて、現在のマザーボードはG41M-VSというもの。
www.asrock.com
通販でももはや売っていない。同じタイプのマザーで使えそうなのないかなと
ドスパラを検索。
Foxconn PRODUCT : Motherboard : Details

起動できなくなったが・・

リセットボタンやら、起動ボタンを長押しして、再トライ。
起動できるようになり。普通にwindowsもそのまま使えた。
4000円少しの投資で復活。嬉しい限りです。

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

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

前に述べた通り。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

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