全駅のプロット
都内から秦野くらいまでのプロット
駅データがダウンロードできると聴いて飛んで行きました。このデータでなにしようかなー?とあぐねいていましたが、この駅データは緯度経度もデータとして持っているので、pythonで2次元マッピングしてみました。
1枚目の写真が日本全国のプロット。確かに日本に見えますね。駅データは1万件程あって、左下の方に沖縄と思われるデータもプロットされています。2枚目のデータは小田急線を中心として都内をプロットしたものです。都内の方はごちゃごちゃして何が何だかわからない状態ですが、SQLiteにデータを突っ込んだので、
select * from stationdata where line_name = 'JR山手線'
のように取得すれば、〜線単位でプロットで来ますね。
山手線のプロット
山手線はこんな感じで見れます。ただ、これをどうしようかは全然考えてないです。桃鉄的なゲームのマスタにはなりそうですね。
とりあえず、以下のコードがSQLiteに突っ込むコード。csvをダウンロードして先頭行をデリってあげないと駄目です。
SQLiteのデータベースはこちら。
# -*- coding: utf-8 -*-
import csv
import sqlite3
DBNAME = "stationData.sqlite"
def initDB():
conn = sqlite3.connect( DBNAME )
try:
conn.executescript("""CREATE TABLE STATIONDATA(
RR_CD INTEGER NOT NULL,
LINE_CD INTEGER NOT NULL,
STATION_CD INTEGER NOT NULL,
LINE_SORT INTEGER,
STATION_SORT INTEGER,
STATION_G_CD INTEGER NOT NULL,
R_TYPE INTEGER NOT NULL,
RR_NAME TEXT NOT NULL,
LINE_NAME TEXT NOT NULL,
STATION_NAME TEXT NOT NULL,
PREF_CD INTEGER NOT NULL,
LON NUMBER(3,6),
LAT NUMBER(3,6),
F_FLAG INTEGER NOT NULL,
PRIMARY KEY ( STATION_CD )
);""")
conn.executescript("""CREATE INDEX IDX_STATIONDATA ON STATIONDATA(
RR_CD, LINE_CD, STATION_CD
);""")
except Exception, ex:
conn.commit()
finally:
conn.close()
initDB()
conn = sqlite3.connect( DBNAME )
conn.text_factory = str
filename = "m_station.csv"
csvfile = open( filename )
for row in csv.reader( csvfile ):
conn.execute("INSERT INTO STATIONDATA( RR_CD, LINE_CD, STATION_CD, LINE_SORT, STATION_SORT, STATION_G_CD, R_TYPE, RR_NAME, LINE_NAME, STATION_NAME, PREF_CD, LON, LAT, F_FLAG ) VALUES( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )", ( row[ 0 ], row[ 1 ], row[ 2 ], row[ 3 ], row[ 4 ], row[ 5 ], row[ 6 ], row[ 7 ], row[ 8 ], row[ 9 ], row[ 10 ], row[ 11 ], row[ 12 ], row[ 13 ] ) )
conn.commit()
csvfile.close()
で、プロットするのが以下のコード。TrueTypeFontはほにゃじを使っています。みたまんまのコードなので、オフセットとかもう少し拡大したいとか〜線だけプロットしたいとかはコードを書き換えればおk。
from PIL import Image, ImageDraw, ImageFont import sqlite3 stationList = [] img = Image.new( 'RGB',( 2200, 2200 ), ( 255, 255, 255 ) ) DBNAME = "stationData.sqlite" conn = sqlite3.connect( DBNAME ) conn.text_factory = str conn.row_factory = sqlite3.Row cur = conn.cursor() cur.execute( "SELECT STATION_NAME, LON, LAT FROM STATIONDATA" ) stationList = [ ( idx[ 0 ], idx[ 1 ], idx[ 2 ] ) for idx in cur ] font = ImageFont.truetype( "HONYA-JI.ttf", 10, encoding='utf-8' ) draw = ImageDraw.Draw( img ) for i in range( len( stationList ) ): n = stationList[ i ][ 0 ] x = round( ( stationList[ i ][ 1 ] - 127.652214 ) * 100, 0 ) + 100 y = 2000 - round( ( stationList[ i ][ 2 ] - 26.193289 ) * 100, 0 ) draw.text( ( x, y ), unicode( n, "utf-8" ), font = font, fill = ( 0, 0, 0 ) ) img.save( 'station.png', 'PNG' )
でも何に使おうかね。










