ジオコーディングと住所データ

ゆきたい場所の住所を検索すると、その場所を示した地図が表示される。
商用サービスでは既に一般的すぎる内容です。

ですが、そのサービスの中でどのようなデータが必要なのか、そしてそれらをどのように集めるかは、あまり広く知られていません。

ここでは、ジオコーディングに必要となるデータや、ジオコーディングのアプローチについてメモします。

# ジオコーディングとは
住所や地名、施設などの名前を元に、地球上の一地点を検索する行為です。
とりあえず、全般的な説明についてはWikipediaを参照してください。

* [Wikipedia ジオコーディング](https://ja.wikipedia.org/wiki/%E3%82%B8%E3%82%AA%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0)

# ジオコーディングに必要となるもの
ジオコーディングを行うには、大きく2つの要素が必要です。

* 元となるデータ
最も基本となるのは、「場所の名称や住所」と「緯度経度」が対となるデータ、です。
これは基本的に、詳細であればあるほど、そして量が多ければ多いほど正確なデータが出せる可能性が高まります。

* ジオコーダ
収集されたデータのなかから、いかに早く、いかに正確に対象のデータを検索するか、がジオコーダの役割です。
場合によっては、推測することが必要になるかもしれません。

# 具体的なデータや実装
以下では、元となるデータとジオコーダのそれぞれについて、重要な点と、日本でジオコーディングを行う場合に使えるデータや実装をみてみることにします。

## 元となるデータの事情

### 名寄せの重要性
利用する情報源やデータ量など、元データは多ければ多いに越したことはないのですあ、多くなってくると、当然のことながら、その情報の統合に労力が必要となります。

例えば検索結果として表示されるべき「東京タワー」は世界に1つしかありませんし、その場所も1箇所です。
検索した結果として「東京タワー」の場所が2つも3つも出てきてしまっては困るわけです。

よってジオコーディングの処理においては、名寄せが非常に重要になってきます。

名寄せによって複数あるデータのなかでどれが正しいのか、また、名称や住所の表記のどれが「正しい（あるいはよく使われる）」記述なのか、選び出す必要があります。

ここでは、検索エンジンの手法が大きく役に立ちます。
検索エンジンの元データを作る際に必要となる手法と同じように、その情報が、いつの時点で、どの場所にあり、どのような名称で、その識別子には何を利用するか、を決め、検索が可能な状態にします。
検索サービスの事業者が地図プラットフォームサービスも運営するのは、必然といえるでしょう。

> 逆に、「鈴木ビル」のように、よくある名前の地点が複数存在することもあります。そうした場合の処理も考慮しなくてはなりません。

### 日本における住所の特殊事情
日本における住所は、2つの意味で特殊性をもっています。

1. 街区システム
2. 分かち書き

それぞれについて検討してみましょう。

#### 街区システム
日本の住所は、[住居表示住所ベースと地番ベースの違いはあれ](http://登記簿図書館.com/cpu/column/theme01/column03.html)、どちらも、街区（番）を構造として利用しています。
この理由により、日本では、街路（ストリート）を基本単位とする諸外国とは全く異なる処理が必要になります。

> 余談ですが、街区を構造に取り入れているのは、僕の知る限り、日本とフィリピンの一部（新規開発地域）のみとなっています。
> 韓国もかつては街区ベースでしたが、2014年1月よりシステムが変更され、街路（ストリート）を基本とする形になりました。
> 情報提供をいただき、北朝鮮でも街区ベースの住所が利用されているという話を聞きました。ただ、裏付けはできていません。

つまり、日本のデータを処理しようとすれば、日本地域独自、あるいは日本地域用の拡張機能の実装が必要になります。

#### 分かち書き

分かち書きの問題は、日本語というよりも、2byte文字圏における文章の書き方の問題です。

欧米圏を中心とした諸外国の場合、文章の単語と単語の間にスペースが入るため、コンピュータとしてはそのスペースを頼りにして、機械的な分かち書き処理ができることが多いです。

ただし2byte圏では、単語と単語の間にスペースが入らないことがしばしばあります。
そのため、2byte圏では検索処理を行う際に、検索語句に対して分かち書き処理をするステップを追加することが必要です。

これは例えば、`鹿児島県志布志市志布志町志布志二丁目1番1号`のような表記を正しく構造として分割する必要がある、ということです。
この際には、大字や小字の表記方法や地割などをはじめとする、地域独自の表記や例外の存在を正しく扱えるかどうかが重要になってきます。

[京都における表記方法](http://geodosu.com/%E9%96%8B%E7%99%BA%E8%A3%8F%E8%A9%B1)や、北海道におけるストリート（と街区のキメラのような）表記、青ヶ島のような個別の住居に住所番号が無い、という特殊ケースも存在しています。

## 日本における元データの収集と利用
Google Mapsをはじめ、日本地域でなぜ細やかなジオコーディングができているかといえば、それは、ゼンリン社をはじめとする企業が、元データをきちんと収集し、整備し、利用可能な状態にしているからです。
もちろん、それらのデータは商品であり、利用は有償です。

日本の住所に関するデータとしては、番（街区）までは位置参照情報など政府系のデータ公開が行われています。

ただし、号（住居1つ1つに割り当てられる数字。House number）について、「どの住所が」「どのような表記で」「どこにあるのか」を調査するのは、この上なく困難な作業となっています。

調査にはいくつか手法があるのですが、測量系企業などが現地調査を行う場合、住居表示住所を適用している地域（市街地が中心）では、現地調査という手法をとることができます。
これは、住居表示住所の制定区域では、法令によって住所を表示するプレートの設置が義務付けられているためです。
最近では車載可能なカメラの性能が向上していることから、カメラを積んだ車両を走らせ、住所の表示プレートを画像認識する、という手法も可能でしょう。(CAPCHAの元画像でよく使われますね)

また、データの収集という目的だけを考えれば、市町村に対して大量の情報公開請求を行うことでも、目的達成をすることができるかもしれません。
この手法では紙からデジタイズが必要というダサさはありますが、歩き回るよりは人件費的にみてよほどマシです。（行政職員の稼働を使うことの是非はひとまず置きます）

![住居表示住所のプレート](https://qiita-image-store.s3.amazonaws.com/0/9928/b0900b83-6df6-673c-8579-308063c5e68b.png "320px-Plate_of_residence_address_indication_plate_(Japan).png")
[Wikimedia Commons CC-BY-SA 3.0](https://commons.wikimedia.org/wiki/File:Plate_of_residence_address_indication_plate_(Japan).png)


以上、住居表示住所の場合には、それなりになんとか手があるのですが、他方、地番をベースとする住所を採用している地域では、この調査がさらに困難になります。
地番住所の地域では、住所を示すプレートが存在していないため、現地調査による手がかりが全く無いからです。こうした地域では、現地住民へのヒアリング実施や市町村への情報公開請求をもとにした調査でのみ、調査が可能です。

また、上記で判別できるのは、その住所の「点/ポイント」としてのデータです。
「面/ポリゴン」としてのデータは、法務局の保有する地籍などがありますが、利用には多くの問題と課題があり、利用することは現状、不可能です。
ポリゴンで構成された住所の類のデータとしては、日本では唯一、室蘭市が地番情報（正確には現況地番図の情報だと思います）をオープンデータとして公開しています。
（このへんは書くと非常に長くなるので、要望があれば別途記載します :)）

### 日本地域で自由に使えるデータ
個人あるいは小規模の団体が開発を行うなどの理由により、企業のデータを買うことができない場合や、あるいは自分でジオコーダを作りたい、という場合もあると思います。

その場合に使えるデータとして利用可能なデータを以下に示します。

### 丁目〜番までのデータ
#### [e-statの丁目データ](http://www.okomeda.net/?%E7%94%BA%E4%B8%81%E7%9B%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E5%85%A5%E6%89%8B)
総務省のe-statが公開している町丁目データは、日本で唯一無料で使える、丁目まで整備されたポリゴンデータです。
ライセンスは政府標準利用規約 2.0で、二次利用も可能です。

#### [位置参照情報](http://nlftp.mlit.go.jp/isj/)
国土交通省が公開しているデータです。
番（街区）の代表点などが公開されています。CSV形式で扱えるということもあってか、開発の際に利用されることが多いように思います。
ライセンスは[位置参照情報利用約款](http://nlftp.mlit.go.jp/isj/agreement.html)です。

#### [geonames.jp](http://geonames.jp/)
丁目までの住所表記を階層に分割し、それぞれに対してURLを付与することによってLinked Open Data的な用途に使うことができるようにしたサービスです。

名寄せの際や、分かち書き・構造化の際に非常に参考になると思われます。

### 号までのデータ
#### 都市計画情報の住所情報オープンデータ

現在、いくつかの都市では都市計画図がオープンデータとして公開されています。

こうした都市計画図では、その中のレイヤーのひとつとして、住所情報が含まれることがあります。
現在僕が把握している市町村では、[浦安市](https://www.city.urayasu.lg.jp/shisei/keikaku/joho/1007718.html)、[大阪市](http://www.city.osaka.lg.jp/toshikeikaku/page/0000250227.html)が住所情報を配布しています。
（大阪市は配布方法が僕の記憶と違うので、もしかしたら方法が少し変わったかもしれません）

オープンデータのライセンスはそれぞれの自治体によりますが、CC-BYの2.1あるいは4.0で公開されていることが多いようです。

#### [住居表示住所フロンテージ情報](http://www.gsi.go.jp/kihonjohochousa/jukyo_jusho.html)

国土地理院が公開しているデータです。
このデータは、正確には住所そのものではなく、例えば新しく家を建てる場合などに、住居表示住所に基づいて号（その住居の番号）を割り振る際の基準点となるデータです。

もちろん、実際の付番の際には現地での状況が加味されるため、必ずしも正確なデータではないことに注意は必要ですが、「だいたいあってる」ものとして使うぶんには非常に面白いデータです。

このデータは測量法によって基本測量に指定されており、複製や利用には国土地理院への申請が必要であることに注意してください。（測量会社以外が使うことはあまり想定されていないようです）

#### [国土数値情報](http://nlftp.mlit.go.jp/ksj/)

公共施設など、特徴的な地物の情報です。
国土交通省が公開しているデータであり、その界隈では有名なデータのひとつです。

2016年現在では二次利用が禁止されているデータが多く含まれているため、ここで取得したデータをWebで公開する際などには注意が必要ですが、施設や地点に関する多くのデータがダウンロード可能になっています。

オープンデータ化にむけて、元々のデータ権利保持者とライセンスについての協議を行っているとのことなので、期待して待ちましょう。

### 特殊例、地名など

#### [日本地名集 (Gazetteer of Japan)](http://www.gsi.go.jp/kihonjohochousa/gazetteer.html)
国土地理院が国際連合地名標準化会議の決議に基づき、日本国政府（国土地理院と海上保安庁海洋情報部）が、我が国の行政、居住、自然、海底地形等の標準化された地名情報を総合的にまとめた、日本全土の地名に関するデータです。

二次利用も可能であることが確認されており、[僕のGithubリポジトリ](https://github.com/schee/Gazetteer_JP_2007)でCSV形式に変換して公開しています。
地名の読み方もついているので、変則的な読み方がされることの多い地名データの情報を充実させるためには非常に有用です。

ただ、作成された次期が2007年と少し古いこと、それから、2016年現在の感覚からすると、あまり精度がよいとはいえないことに注意してください。
1/100,000か、それより粗い程度の精度ではないかと思っています。

#### 橋の名称、などのオープンデータ
静岡市などが公開している、[橋梁の名前と位置のデータ](http://dataset.city.shizuoka.jp/dataset/kyouryou)です。

実はこのデータ、住所とは全く違った観点で面白い観点を持っています。

というのも、基本的に日本では、道路の上には住所という概念がなく、もし表記する場合には「○○地先」などの表記が行われるのですが、橋とトンネルに関してはこのデータでも示されるように名前があり、このデータを使うことで個々の地点を識別が可能となるのです。

これはつまり、橋やトンネルも、ジオコーディングの対象にできるということです。
例えば渋滞情報の可視化や、堤防決壊の際の地点把握など、使い途は限られますが、面白い実装ができると考えられます。

関連して、電柱や高圧電線の鉄塔などもデータがあるとよいのですが、残念ながら生の地理情報データとしては現在公開がありません（OpenStreetMapで一部整備されています）

#### [OpenAddressess](https://openaddresses.io/)
Github上で展開されている、オープンなライセンス（あるいはそれに近いライセンス）で配布されている住所データに関するデータベースです。

カラムの整備も行われいるため、日本以外のデータが欲しい場合にはひとまずここを見てみると良いでしょう。

#### ポリゴンとしての住所データ
[室蘭市の地番図情報](http://www.city.muroran.lg.jp/main/org2260/odlib.php)

非常にわかりづらいのですが、地番と地籍は違うものです。
地籍は法務局が保有する情報であって、市町村が保有しているわけではありません。
室蘭市が地番図として公開しているのは、市が保有しているデータのため、前述の通り、正確には現況地番図の情報だと思われます。（国土交通省による[公図と現況のずれQ&A](http://gaikuchosa.mlit.go.jp/gaiku/html/info4.html)も参照ください）

その他、類似のデータとしては北海道などが公開している林班図などのデータもあります。（農地はまだ無いかなぁ。。。）

#### 測地系の処理
地理空間情報の世界には`測地系`という概念がありまして、これのおかげで、処理の敷居がだいぶん上がっています。

測地系について詳しく記述するとそれだけでたいへんな分量になるのですが、要するに「球体である地球を、緯度経度という二次元で表現する際の歪みをどのように処理するか」ということです。

詳しくは[ちずのつくりかた/map school](http://mapschool.io/index.ja.html)など、既存のドキュメントも読んでみてください。

当然ながら住所のデータに付与された位置情報についても、なんらかの測地系のもとに作成が行われています。
たいていの場合、採用されている測地系はそのデータの解説やメタデータとして記載が行われています。複数の異なる測地系のデータを掛け合わせる場合などには注意を払う必要があります。

もし市町村が公開しているデータで、測地系に関するメタデータがない場合、最近は`世界測地系`で作成されていることが多いため、[EPSGとしては3097〜3101のどれか](http://d.hatena.ne.jp/tmizu23/20091215/1260868350)を使うとヒットする確率が高いです。
（たまに古いデータだと、日本測地系 平面直角座標系で作成されていることがあります）

複数のデータを組み合わせたり、集めたりする場合には、GDALなどを使ってそれぞれのデータの測地系を変換し、例えばEPSG:4326(WGS84)などに統一しておくしておく必要があります。

測地系の処理に関する詳しい情報については、他の書籍や記事などを参照してください。

### 建物名称の調査方法
住所の扱いとは少し違いますし、本題から少し離れるのですが、ビルの名称などの調査方法は、僕にとって非常に謎です。
このデータ、実は完璧にやろうとすると、現地調査だけではコンプリートしづらいのです。

この調査を行う場合、たいていの場合、大きなビルや雑居ビルでは、入り口の近くに名称の掲示を行っていることが多いため、現地調査でも調べることができます。（入り口掲示が無い場合、たまに、郵便受けの近くにこっそり掲示されている場合もあります）

ただ、名称の掲示は法規で義務化されたものではないため、場合によっては掲示が行われていない場合もあります。
こうした場合は、市町村の保有する建築系の情報を閲覧するなどするしかないのかな？と思っています。
市町村の保有している正式名称と、一般的に呼ばれる愛称が異なる場合はどうするのか、など、面白いのかもしれない、とは思っています。

## ジオコーディング

### 日本におけるジオコーダ実装
商用で販売されているものはさておいて、オープンソースで公開されているジオコーダはいくつか存在します。
日本地域における構造の特殊性という観点（前述）はありますが、そこを除けば、海外で利用されるジオコーダもそれなりに使うことができます。

僕の知っているものをいくつかピックアップします。

#### [CSVアドレスマッチングサービス](http://newspat.csis.u-tokyo.ac.jp/geocode-cgi/geocode.cgi?action=start)
東京大学空間情報科学研究センター（CSiS）が公開しているジオコーダです。
かなり古くから公開されているソフトウェアで、学術目的での利用を主眼としたライセンスで利用が可能です。
（どんどん使ってほしいが、あまり負荷をかけすぎないで欲しい、という、たいへん実務的なお願いを聞いたことがあります :)）

基本的に位置参照情報を使っており、基本的には番（街区）までの検索が可能です。
ただ、未確認なのですが、住居表示住所のフロンテージ情報も利用しているかもしれず、住居表示住所対応地域の場合、号（個々の建物）までの検索が可能かもしれません。

なお、[ソースコードもFreeBSDライセンスで公開されています](http://newspat.csis.u-tokyo.ac.jp/geocode/modules/dams/index.php?content_id=1)。
(.zipされて固められているのはご愛嬌です)

#### [geoNLP](https://geonlp.ex.nii.ac.jp/)
国立情報学研究所（NII）が公開しているサービスです。
NLP（自然言語処理, Natural Language Processing）の考え方をベースに開発されており、自然に記述される文中から地名と思われる単語を拾い上げてジオコーディングする、ということができる、非常に面白い設計思想をもっています。

普通名詞と地名の判別をはじめとする文脈判断などが研究されている、という話を、以前に聞いたことがあります。

#### [ExcelGeo](http://excelgeo.itdart.org/)
ITDARTが公開している、住所を特定のカラム構成で記述したExcelを放り込むと、勝手にジオコーディングしてくれる、というサービスです。
Excelで一覧を作ればなんとかしてくれるため、IT知識を持たないかたでも気軽に使えることが最重要視されています。

バックエンドのサービスは位置参照情報であり、基本的に番までの検索になっています。
ただ、ITDARTは災害対応を主眼として活動を行っている団体であり、そういった団体で必要となるのは、号まで必要な完全なジオコーディングではなく、まずは街区レベルでもだいたいの位置がわかる、ということが重要です。
（そして、病院などの施設は比較的建物が大きく、現地に人間がゆけばある程度なんとか状況把握が可能です）

このあたりの割り切り方は非常に有益で、面白いと感じます。
統合GISを持っていないけれども位置情報をつけたオープンデータを公開したい、あるいは省内のGISシステムが災害で使えなくなった自治体が対応を行いたい、という、少しニッチな用途からも注目されています。

#### [tokoro](https://github.com/cognitom/tokoro)
[@cognitomさん](https://github.com/cognitom)が開発していました。
元データとして、位置参照情報を利用しています。

フロントエンドだけでジオコーディングを完結させよう、という、面白い着想のもとに構築されています。
ウェブ系（って言っていいのかしら）のかたがたには馴染みの深い技術で構築されています。

### OpenStreetMap系ジオコーダ
OpenStreetMapでも、[住所の入力がここ数年で進んでおり](http://wiki.openstreetmap.org/wiki/JA:Addresses)、既にいくつかの実装が行われています。
代表的なサービスは以下の2つです。

#### [Nominatim](https://nominatim.openstreetmap.org/)
OpenStreetMapのデータをもとにした、古くから存在するジオコーダです。
ストリートをもとにした検索が行われており、OpenStreetMap上での住所情報整備が進んでいる欧米では、検索に対してわりと精度高くヒットします。

#### [Pelias](https://github.com/pelias/pelias)
[Mapzenが開発するジオコーダ](https://mapzen.com/products/search/)です。
Elasticsearchをバックエンドにしており、大量のデータを投入しておくことによって、似たような地名や住所を「類推」し、だいたいの位置を計算しよう、という設計思想です。

これは、他のジオコーダの基本的な設計思想である、データを構造化し、名寄せをし、軽量化する、という概念からは大きくかけ離れた実装となっています。

結果だけみると「ハァ？」というものですが、実はこのジオコーダが本領を発揮するのは、特に開発途上国など、住所が存在しない国や地域、です。
そういった国ではストリートに名称や番号の規定が行われておらず、しばしば「参照点（reference point）」という考え方のもとに住所が設計されています。

参照点を使った位置の特定方法ですが、具体的には「教会から南に400メートル」や「一本杉から西に300メートル」という具合の記述が行われます。
この場合の`教会`や`一本杉`、が`参照点`です。

こうした場合、通常のジオコーダの処理の範疇外である、参照点をいかに大量に保有し、そこからの距離を出すか、という処理が必要になります。
そうしたアバウトな処理をそれっぽくこなす可能性を持っているのが、このPeliasの強みのひとつでしょう。

## ジオコーダ・住所情報の使い途
自動運転やドローンによる配達などでは、場所の最終判断に人間が介在しないこともあり、対象となる場所の特定は非常に重要です。

> 自動運転の場合、住所はサービス構成要素の小さな1つでしかありませんが、それでも重要なパーツのひとつです

また、地震や津波などの大規模災害では、特に救助の段階において、住所データを保有している自治体だけではなく、複数の関係機関が「その一点」の場所を正確に共有する必要があります。
こうした住所情報については、安全の観点からも、オープンデータとする、あるいは複数の機関で共有できる仕組みを整えておく必要があると考えます。

## 蛇足
インドの住所処理は本当に面白いらしいので、今度ちゃんと調べてみたいです。
ちらっと聞いただけでも、あまりの複雑さにワクワクします。

## おまけ
地図はいまやデジタルが標準的な利用インターフェースとなり、これまでのように「白地図」を作ってその絶対精度を追求するような段階から、次の段階に移行しています。

いろいろ言いたいことはありますが、それはまた別の機会に。