駅に関する情報を収めたCSVデータを駅データ.jpで入手することができる。駅の所在地・鉄道会社・緯度経度などさまざまな情報が紐付いており実用性が高い。座標データが含まれるため、Geocoding APIなどと組み合わせると住所から最寄りの駅を割り出したりすることもできる。
この記事を読む人
技術的な話はだいたい分かるけど専門ではない、というレベルの人。勉強中のデザイナーさんとか。シェルスクリプトでバッチを作るくらい簡単って人にはこちらの記事のほうが参考になると思う。
データをダウンロードする
上記URLからダウンロードできる。メールアドレスの登録が必要。
http://www.ekidata.jp/doc/station.php
ダウンロードできるデータは7種類あって、今回説明するのは上記のデータ。路線名コンボのドリルダウンを実装する場合などは路線データも必要だけど、当ページの内容を参考にすれば同じように取り込めると思う。
テーブルを作成する
phpMyAdminやAdminerのSQL実行画面を開いて、下記のスクリプトを実行する。
CREATE TABLE `ekidata` (
`eki_id` INT(11) NOT NULL COMMENT '整数7桁 ※新幹線は6桁',
`eki_g_id` INT(11) NOT NULL,
`eki_name` VARCHAR(80) NOT NULL COMMENT '全角半角は同一視' COLLATE 'utf8_unicode_ci',
`eki_name_k` VARCHAR(100) NOT NULL COMMENT '※有料版のみ' COLLATE 'utf8_bin',
`eki_name_r` VARCHAR(100) NOT NULL COMMENT '※有料版のみ' COLLATE 'utf8_bin',
`line_id` INT(11) NOT NULL,
`pref_id` INT(2) NOT NULL,
`zip` VARCHAR(10) NOT NULL COLLATE 'utf8_bin',
`address` VARCHAR(300) NOT NULL COMMENT 'イバラキもイバラギも同じ' COLLATE 'utf8_unicode_ci',
`lng` DOUBLE NULL DEFAULT NULL COMMENT '経度',
`lat` DOUBLE NULL DEFAULT NULL COMMENT '緯度',
`open_ymd` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8_bin',
`close_ymd` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8_bin',
`status` SMALLINT(6) NOT NULL COMMENT '0:運用中 1:開業前 2:廃止',
`sort` INT(11) NULL DEFAULT NULL,
PRIMARY KEY (`eki_id`),
INDEX `index_stations_on_station_name` (`eki_name`),
INDEX `index_stations_on_lng_and_lat` (`lng`, `lat`)
)
COMMENT='駅名マスタ'
COLLATE='utf8_bin'
ENGINE=InnoDB
;
上記のようなテーブルを作成し、ここにデータを取り込む。フィールド名はekidata.jpを連想できるように、stationナントカではなくekiナントカで。open_ymdとclose_ymdはdatetime型のほうがいいんだけど、個人的には使い道が思い浮かばないデータなので文字列としてシンプルに扱う。
テーブルの構成はもっと簡単でも動作する。この後で実行する取り込みスクリプトではフィールド名の照合などを行わないので、フィールドの数さえ合っていればフィールド名とか型とかは適当に決めることができる。取り込んでから変更することもできるので、案件に合わせてきっちり考えるのは後回しにしてもいいと思う。
http://www.ekidata.jp/doc/station.php
公式サイトではこう書かれてるけど・・
そして取り込みを実行。
TRUNCATE ekidata;
LOAD DATA LOW_PRIORITY LOCAL INFILE 'C:\\download\\ekidatajp.csv'
INTO TABLE ekidata
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
これでデータを取り込める。
駅データはこまめにメンテしたい
さっそくこれに対応しなきゃと思いました。