--------(--)

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2012-02-05(Sun)

PostGisで緯度経度から地域情報を取得する





緯度経度から何県?とか知りたい。
PostGisでできるかやってみる。
基本的にココを参考にさせていただきました。
http://yamakk.com/blog/2010/07/21/import-polygon-data-into-postgis/

(手順)
 ①国土数値情報ダウンロードサービスから元データをダウンロード
 ②shapefileに変換
 ③PostGisへインポート

①国土数値情報ダウンロードサービスから元データをダウンロード
国土数値情報ダウンロードサービス
http://nlftp.mlit.go.jp/ksj/jpgis/jpgis_datalist.html
->(JPGIS準拠)データのダウンロード
->行政区域(面)
に行って
「ダウンロードするデータの選択」で47都道府県をすべて選択する。
次の画面で「世界測地系」かつ最新のzipファイルをすべてダウンロードする。
zipファイルを解凍すると
N03-110331_01.xml
とかN03-....xmlというファイルがたくさんできる。

②shapefileに変換
ココから変換ツールをダウンロードする。(Windows版のみ)
http://nlftp.mlit.go.jp/ksj/jpgis/jpgis_tool.html
インストールして起動してN03-....xmlファイルを一気にshapefileに変換する。
N03-....shp、N03-....shx、N03-....dbfなど3種類のファイルができる。

③PostGisへインポート
スクリプトを作る。
N03-....shpファイルがある同じディレクトリにこのファイルをおく。
# -*- coding: utf-8 -*-
import sys
import logging
import os
import glob

# DB_HOST='***.***.***.***'
DB_HOST='localhost'

def start_trans(fp):
try:
logging.debug('start_trans start')

for shapefile in glob.glob('N03*.shp'):
create_sql = '%s_createtable.sql' % shapefile
create_cmd = 'shp2pgsql -p %s japan > %s' % (shapefile, create_sql)
insert_sql = '%s_insert.sql' % shapefile
insert_cmd = 'shp2pgsql -W CP932 -a %s japan > %s' % (shapefile, insert_sql)
os.system(insert_cmd)

load_create_cmd = 'psql -h %s -U hoge areadb < %s\n' % (DB_HOST, create_sql)
load_insert_cmd = 'psql -h %s -U hoge areadb < %s\n' % (DB_HOST, insert_sql)

print load_create_cmd
fp.writelines(load_create_cmd)
print load_insert_cmd
fp.writelines(load_insert_cmd)

logging.debug('start_trans end')
return
except:
logging.error('start_trans %s', sys.exc_info())
raise os.system(create_cmd)

if __name__ == "__main__":
try:
# logging.getLogger().setLevel(logging.ERROR)
# logging.getLogger().setLevel(logging.DEBUG)
logging.getLogger().setLevel(logging.INFO)
filename = 'polygon.txt'
fp = open(filename, 'w')
start_trans(fp)
fp.close()

except HTTPError, e:
print e.code
print e.read()


これで、polygon.txtファイルができる.
実行する前にデータベースを作っておく。
createdb -E UTF8 template_postgis
$psql
# postgres=create role hoge superuser createdb login password '*****';
# postgres=\q
$createlang -d template_postgis plpgsql
$psql -d postgres -c "UPDATE pg_database SET datistemplate='true' WHERE datname='template_postgis';"
$psql -d template_postgis -f /usr/local/pgsql/share/contrib/postgis-1.5/postgis.sql
$psql -d template_postgis -c "GRANT ALL ON geometry_columns TO PUBLIC;"
$psql -d template_postgis -c "GRANT ALL ON spatial_ref_sys TO PUBLIC;"
$createdb -U username -E utf-8 -W -e areadb

それからさきほどのファイルを実行する。
source polygon.txt


インデックス登録。
areadb=#CREATE INDEX japan_gis_idx ON japan USING GIST (the_geom GIST_GEOMETRY_OPS);

これで終わり。

実際に検索してみる。
areadb=# SELECT prn, cn2 FROM japan WHERE ST_Contains(the_geom, GeomFromText('POINT(135.182734 34.690516)'));
prn | cn2
--------+--------
兵庫県 | 中央区
(1 row)

うむ、できてる。

参考:

スポンサーサイト

2012-02-04(Sat)

Windows7 64bit版にpostgreSQL ODBCをインストール





Windows7 64bit版にpostgreSQL ODBCをインストールしてみる。

(1).PostgreSQL ODBCをダウンロード
ここからダウンロードする。
今の最新版はpsqlodbc_09_01_0100-x64.zipだ。

(2).適当なディレクトリにおいて展開して
psqlodbc_x64.msi
をダブルクリックしていろいろデフォルトで進んでインストール完了。

(3).動作確認
コントロール画面から->管理ツール->データソースと画面遷移。
コントロールパネル
管理パネル
データソース画面

ODBCのインストールが完了しているとデータソース画面で以下のとおり表示されます。
「構成」をクリックすると以下の画面が出るので
ODBC構成画面
利用するのDataBase情報を記載します。
「テスト」ボタンで接続確認できればOK!

2012-01-22(Sun)

postgreSQLのnextvalとsetval

nextvalとsetvalの使い方例をメモっておく。

nextval-->シーケンスを進める。
setval-->シーケンスの現在値を設定する。

自動的にprimary idに番号を割り付けたい場合は以下の通りにするといい。
(例)
-- Create Table
CREATE TABLE node_t (
id integer NOT NULL,
idnode integer,
label text,
url text
);


ALTER TABLE public.node_t OWNER TO postgres;

-- Create Sequence
CREATE SEQUENCE node_t_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;

ALTER TABLE public.node_t_id_seq OWNER TO postgres;
ALTER SEQUENCE node_t_id_seq OWNED BY node_t.id;

-- Using setval(At First, Set Number 1)
SELECT pg_catalog.setval('node_t_id_seq', 1, true);

-- Using nextval(Auto Increment)
ALTER TABLE node_t ALTER COLUMN id SET DEFAULT nextval('node_t_id_seq'::regclass);


参考:
PostgreSQL徹底入門 第3版
PostgreSQL全機能リファレンス (アドバンストリファレンスシリーズ)

2011-11-25(Fri)

postgreSQL Sequenceを変更してみる

postgreSQLでinsertを実行すると以下のようなエラーが出た。

duplicate key value violates unique constraint "spot_t_pkey"
Key (id)=(5) already exists.

id=5でinsertしようとしたら既に存在している番号なのでエラーです。と言っている。
本当か確認すると

SELECT last_value FROM hoge_t_id_seq;
last_value
------------
5
(1 row)

確かに既に存在している。
idは33のレコードまで存在していた。

last_valueを変更します。

SELECT setval('hoge_t_id_seq', 33) ;
setval
--------
33
(1 row)

これでOK、insertが成功した。

参考:
PostgreSQL徹底入門 第3版
新標準PostgreSQL (オープンソースRDBMSシリーズ)

2011-11-23(Wed)

postgreSQL 制約条件の変更

postgreSQLでリレーションを生成するとき、制約条件を追加したり削除したので
ここにメモする。

1. 制約条件の削除

ALTER TABLE <テーブル名> DROP CONSTRAINT <制約名>
ALTER TABLE children_t DROP CONSTRAINT children_idname_fkey;


2. 制約条件の追加

ALTER TABLE ONLY <テーブル名> ADD CONSTRAINT <制約条件Key> FOREIGN KEY (紐づけるカラム名) REFERENCES <参照先テーブル名>(参照先の紐づけるgid);
ALTER TABLE ONLY children_t ADD CONSTRAINT children_idname_fkey FOREIGN KEY (idname) REFERENCES parents_t(idparent);


参考:
PostgreSQL徹底入門 第3版
PostgreSQL全機能リファレンス (アドバンストリファレンスシリーズ)
プロフィール

kumagonjp2

Author:kumagonjp2
Python,Django,R,Mongo,MySQL,Struts,Spring,データマイニングなどサーバー関係のメモを残していきます。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
雪が3Dで降るブログパーツ ver2

マウスで見る方向変えられます

検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。