アドレスマッチング(GeoCoding)を利用する
- 東京大学空間情報科学研究センターのCSV形式アドレスマッチングサービス
- このサービスでは住所が記載されている含むCSVカラムをどの列に置いてもかまわない。 GISソフトウエアと併せて使うことでCSVデータを自由に活用することが可能だ。
- Webサービスではないが、国土交通省のWindows用のソフトウエア街区レベル位置参照情報アドレスマッチングツール(JNS住所認識システム)(マニュアル)を利用して同様の情報を取得することもできる。
- Googleマップ KML/CSV相互変換
- CSVからKMLに変換においては、CSVカラムはCSVは「整理番号,場所名称,説明,経度,緯度,標高」の順に並んでいなければならない(整理番号は必須だが、その値は任意でよい)。 返されるKMLファイル内容をコピーしてテキストエディタに貼りつけてUTF-8(UTF-8でなければならない)で保存する。 これをGoogle Earthにdropすると、住所で指定した場所にフラグがたって表示される。
例:住所リストを用意する
アドレスマッチングサービスをうけるためには、住所データを含んだ可能な限りのデータを用意しておく。 後から詳細データが必要になって調べ直す二度/三度手間は膨大になるからだ。
上記の東大のアドレスマッチングサービスのためのチュートリアルにおけるサンプルCSVファイル sample.csv(Shift JIS)は次のようになっている(分かりやすさのために、カンマ(,)に続いて半角空白を挿入して列を揃えてある)。
名称, 電話番号, 郵便番号, 住所 東京都立航空工業高等専門学校, 03-3801-0145, 116-0003, 東京都荒川区南千住8-52-1 東京都立工業高等専門学校, 03-3471-6331, 140-0011, 東京都品川区東大井1-10-40 育英工業高等専門学校, 03-5310-6300, 167-0021, 東京都杉並区井草2-35-11 東京都立医療技術短期大学, 03-3819-1211, 116-8551, 東京都荒川区東尾久7-2-10
これらのフィールドは最低限の項目だ(順番はお好みで)。 人名なら姓と名を別の列に分けたり、メールアドレス、twitterアカウントやURL、誕生日などがあってもよい、食事処なら料理種別や開店時間、最寄りの駅などなど、我々が何を必要な情報としているかを考えてみてほしい。
地理情報システムを利用する場合、必要な情報があらかじめ確定しているわけではないことに注意しよう。 言い換えると、情報提供の在り方が新たなビジネスを産んだり、利用者からの新たなニーズを生むことがある。 用意すべきデータはデータベースとして拡張・連結可能となり得るような形で収集、保管しておくことが大切である。
東大アドレスマッチングサービスで得るデータセット
東大のアドレスマッチングサービスを受けるためには、上の例のように、CSV形式のフィールド内のどれかの列に完全な住所が記載されていればよく(アップロード時にその住所が記載の列番号を指定する)、データの順番や列数について格別の制限はない。 念のために、チュートリアルのページで提供されているサンプルCSVファイルを使って東大のアドレスマッチングサービスから返ってきた結果をresult_of_sample.csv(Shift JIS)として置いておく。 以下は、CSVファイルの先頭の5行だけを示した様子である(分かりやすさのために、カンマ(,)に続いて半角空白を挿入して列を揃えてある)。 分かりやすさのため、1行目にあるフィールド項目を列挙して置こう。
名称, 電話番号, 郵便番号, 住所, LocName, fX, fY, iConf, iLvl
返ってきた、具体的なデータの冒頭5行は次のようである。
名称, 電話番号, 郵便番号, 住所, LocName, fX, fY, iConf, iLvl 東京都立航空工業高等専門学校, 03-3801-0145, 116-0003, 東京都荒川区南千住8-52-1, 東京都/荒川区/南千住/八丁目, 139.80902, 35.73761, 5, 6 東京都立工業高等専門学校, 03-3471-6331, 140-0011, 東京都品川区東大井1-10-40, 東京都/品川区/東大井/一丁目/10番, 139.74849, 35.60605, 5, 7 育英工業高等専門学校, 03-5310-6300, 167-0021, 東京都杉並区井草2-35-11, 東京都/杉並区/井草/二丁目/35番, 139.61853, 35.73059, 5, 7 東京都立医療技術短期大学, 03-3819-1211, 116-8551, 東京都荒川区東尾久7-2-10, 東京都/荒川区/東尾久/七丁目/2番, 139.7728, 35.75117, 5, 7
この結果から分かるように、アドレスマッチングのサービスを受けた結果、[名称], [電話番号], [郵便番号], [住所]の列に加えて、[LocName],[fX], [fY], [iConf], [iLvl] 列が加わった。 明らかに、fx は「経度」、fy は「緯度」である。 iConf は変換の信頼度を表す数値で、1,2の場合にはエラー、3,4,5は変換精度を意味していて、5の場合には確実、4以下の場合には変換結果の確認が必要(住所入力が不正確など)。 iLvl は数値地図25000の場合には地名の分類コードを、それ以外の場合には変換された住所階層のレベルを表す(詳しくは、iConf, iLvl の意味を参照)。
KML/CSV相互変換のための東大サービスで得た表データの加工
一方、そのアドレスマッチングの結果をGoogle Earthで表示させるために必要なKMLファイルを簡便に生成してくれるGoogleマップ KML/CSV相互変換サービスを受けるためには、東大から返ってきたCSVデータを次の形に加工編集して、コピーペースしてサービスWebページに渡す必要がある。 渡すことができるフィールド項目値は、以下のように高々6項だけである(下に示した順でなければならない。ただし、6項目目の標高データは省略可能)。
(1列目)整理番号, (2列目)場所名称, (3列目)説明, (4列目)経度, (5列目)緯度, (6列目)標高[省略可]
たとえば、先の東大のサンプル(学校リスト)の場合には、次の列構造を持ったCSVファイルを「Googleマップ KML/CSV相互変換」サービスに渡してみよう そのサンプルを for_KML-result_of_sample.csv(Shift JIS) とした。 ただし、1行目の「番号, 場所名称,.fX, fY, 標高]行は不要なので、この1行目を除いて渡してやる。
番号, 場所名称, 説明, fX, fY, 標高 1, 東京都立航空工業高等専門学校, 03-3801-0145 / 116-0003 / 東京都荒川区南千住8-52-1, 139.80902, 35.73761 2, 東京都立工業高等専門学校, 03-3471-6331 / 140-0011 / 東京都品川区東大井1-10-40, 139.74849, 35.60605 3, 育英工業高等専門学校, 03-5310-6300 / 167-0021 / 東京都杉並区井草2-35-11, 139.61853, 35.73059 4, 東京都立医療技術短期大学, 03-3819-1211 / 116-8551 / 東京都荒川区東尾久7-2-10, 139.7728, 35.75117
これらの情報は、Google MapでインポートするKMLファイルに変換するために必要である。 XMLファイルとしてのKMLについて詳しく理解するにはKML 入門用ドキュメントを参照。 さらに、GoogleのアドレスマッチングサービスのためのJavascriptプログラミングGoogle GeoCoding APIを操れるユーザは自在にGoogle Earth/Mapの表示を制御することができる(ここでの演習ではそれらAPIについては触れない)。
Googleマップ KML/CSV相互変換で得られるKMLファイル結果(重要)
上の手順を経てGoogleマップ KML/CSV相互変換で得られるKML結果をテキストエディタに貼りつけて、拡張子 .kml をつけて保存(しかも、以下のファイル内容が指示しているように、UTF-8で保存しなければならない!)する。 エディタで、そのKMLファイルを開いて確認してわかるように、その内容は整形されていないので分かりにくい。
ここでは、そのKMLファイルを以下のように整形して書き出した一部を紹介する(適宜改行してtabでインデントさせた)。 これが KML_result_of_sample.kml(UTF-8) である。 こうして眺めるとXMLファイルとしてのKMLファイルの内容がよく分かるではないか!(その値の意味が明確になっていて、machine readableであることに注意されたい)。 実際、KML 入門用ドキュメントのチュートリアルの項目「目印」(Placemark)を合わせて吟味してもらいたい。
<?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://earth.google.com/kml/2.2"> <Document> <Placemark> <name>東京都立航空工業高等専門学校</name> <description>03-3801-0145 / 116-0003 / 東京都荒川区南千住8-52-1</description> <Point><coordinates>139.80902,35.73761,undefined</coordinates></Point> </Placemark> <Placemark> <name>東京都立工業高等専門学校</name> <description>03-3471-6331 / 140-0011 / 東京都品川区東大井1-10-40</description> <Point><coordinates>139.74849,35.60605,undefined</coordinates></Point> </Placemark> <Placemark> <name>育英工業高等専門学校</name> <description>03-5310-6300 / 167-0021 / 東京都杉並区井草2-35-11</description> <Point><coordinates>139.61853,35.73059,undefined</coordinates></Point> </Placemark> <Placemark> <name>東京都立医療技術短期大学</name> <description>03-3819-1211 / 116-8551 / 東京都荒川区東尾久7-2-10</description> <Point><coordinates>139.7728,35.75117,undefined</coordinates></Point> </Placemark> ... ... ... <Placemark> <name>早稲田大学文学部</name> <description>03-3203-4141 / 162-8050 / 東京都新宿区戸山1-24-1</description> <Point><coordinates>139.71764,35.70578,undefined</coordinates></Point> </Placemark> </Document> </kml>
ようするに、Google Map(Google Earthに)表示されるKMLファイルであるには、次のXML書式に従って、目的の場所の経度、緯度(と高さ)が分かるならば、名称と電話・住所など説明を加えて、テキストエディタで直接に記述して(UTF-8で保存して)もよいというわけだ。 もうすこし詳しい説明はMore About KMLファイルで行う。
<?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://earth.google.com/kml/2.2"> <Document> <Placemark> <name>名称</name> <description>電話・住所など説明</description> <Point> <coordinates>十進経度,十進緯度,undefined</coordinates> </Point> </Placemark> <Placemark> <name>名称</name> <description>電話・住所など説明</description> <Point> <coordinates>十進経度,十進緯度,undefined</coordinates> </Point> </Placemark> .... .... </Document> </kml>
必要な住所データの収集方法
『○×ナビ』などと称するような目的に応じた住所収集方法がある。 たとえば、日本国内向けには次がある。
インターネット時代の情報収集における最大の問題は情報へのアクセスではなく、収集したデータのその分別整理である。 そのための専門業者が多数存在しているが、多くの場合、その作業は高度に「専門的」な作業ではない。 「不要な」情報をふくめて必要な情報を含み得る不定形データを収集し、不要なデータをプログラミング技巧で一括処理して削除し、必要な情報を同一形式で書き出すようにする。「理」「工」系ユーザだけがプログラミング(一括処理)を学べばよいという時代は去りつつある。 「知の発見」のための方法として必要最低限のプログラミング技巧を身につけることが必要であると強く示唆している。
加工手順:東大アドレスマッチングの結果を使って、Googleマップ KML/CSV相互変換で処理するまで
したがって、上記のようにCSVファイルを作成して「Googleマップ KML/CSV相互変換」のウィンドウにCSVファイルの内容をペーストするのであるが、そのためには東大アドレスマッチングサービスで得られるCSVデータ結果を上記のようなCSVファイルに加工しなければならない。 そのために、次の手順を踏むことが必要である。
- 1列目に順序番号(どんな記号でもよく、A,B,C,...でも、1,2,3,...などでよい)を追加する。
- 2列目は場所名称となる。
- 3列目の文字列はGoogle Earthでマークされた地点の説明文として表示される。 したがって、説明文として必要な事項を3列目のフィールドデータとなるように、CSVファイルを加工する。
- 4列目が、経度
- 5列目が、緯度
- 6列目は、高度を記入してもよいが、東大のサービスでは高度情報は返さないので空白にしておく。
- これ以外の列データは、「Googleマップ KML/CSV相互変換」には不要なのでCSVデータから削除する。
これらのデータ加工のためには、表計算ソフトウエアとテキストエディタの「正規表現」を使った検索・置換を利用するとよい。 また、表データの加工については、表見ソフトウエアで以下の操作などを知っておくとよい。
- 表計算ソフトウエアで任意の列の左隣に空白列を挿入する
- 表計算ソフトウエアで任意の列を一括削除する
- セルを結合する数式
- C1セルにA1とB1の内容をつなげて表示したい場合、C1に「=A1&B2」という式を入力する。 「アンパサンド」(アンドマーク)記号『&』(半角)を使うのがポイント。
- 結果を表示するセルで文字列を組み合わせる場合には、文字列を2重引用符『"』(半角)で挟んでから、セル番地を「&」でつなぐ。
- 表計算ソフトウエアの複数セルのコピー&ペースト。
エクセルなどの表計算ソフトの内容をテキストエディタにコピーした場合には、各セルの内容は行が改行、列がタブ文字 \t(スペースと同様な不可視文字の一種)で区切られる。
- したがって、Googleマップ KML/CSV相互変換サービスの右側にCVSウィンドウにペーストする際、表計算ソフトで表示した結果をコピー・ペーストすることはできない(ペーストデータはカンマ(,)区切りで貼りつけることにならないため)。
- テキストエディタでCSVファイルを開いて、必要な表範囲を選択・コピーしてから、右側CVSウィンドウに貼りつけねばならない。
- ただし、先頭行の「整理番号,場所名称,説明,経度,緯度,」はKML変換には不要である。
- 複数列を一度に結合する方法
- 表計算ソフトウエアを使う場合には、セル結合の式をコピー
- テキストエディタを使う場合
- 複数のセルを選択してコピーをしエディタに貼り付け、「正規表現」で \t(タブ文字) を別の記号(たとえば『/』など)に「置換」する。 置換結果に混乱が生じなければ、タブを空白文字に置き換える、つまり削除してもよい。
- エディタ上で結合された内容を、コピーして再びエクセルに戻す。
- 不要な列を削除する。