🕌

行政区画ポリゴン付き住所オープンデータ提供サイトの紹介

2021/03/05に公開

2016年より公開している住所オープンデータ提供サイト Linked Open Addresses Japan をフルリニューアルしました。リニューアルに伴い、さまざまな部分を改善しました。
例えば、

  • 住所データを最新版(2019/2020年版)に更新
  • サイトをReactによりSPA化
  • 新機能(キーワードによる住所検索、周辺情報の表示)を追加
  • 住所データのデータモデルやデータの精度を改善
  • Web API(SPARQLエンドポイント)設置
  • バックエンドを一般的なLAMP構成からAWSサーバレス構成に変更

などを行いました。

ここでは Linked Open Addresses Japan とリニューアルでの改善点を紹介します。

Linked Open Addresses Japan
https://uedayou.net/loa/

Linked Open Addresses Japan

リニューアル前の紹介記事は以下になります。
http://qiita.com/uedayou/items/b6be807d36526593b4da

Linked Open Addresses Japan は 住所データをLinked Dataと呼ばれる技術(RDFをURIにより提供など、詳しく知りたい方はこちらなど参照してください)を使用して提供するサイトです。以下では、Linked Open Addesses Japan を住所LODと呼びます。

Linked Open Addresses Japan について

Linked Open Addresses Japan はオープンデータとして公開される住所に関するデータを収集して、利用しやすい形に変換・統合し、RDFとして住所データを提供する住所オープンデータ提供サイトです。

収集対象のデータは、国土交通省の国土数値情報ダウンロードサービス位置参照情報ダウンロードサービスと、総務省の政府統計の総合窓口(e-Stat)です。
これらは、基本的に別々のデータなので直接それぞれのデータをつなげることは出来ませんが、正規化等行って、一貫性のある住所データに変換しています。

国土数値情報ダウンロードサービスと、e-Statには市区町村・丁・丁目レベルの行政区画のポリゴンデータが含まれますので、それら行政区画ポリゴンデータも洩れなく提供しています。住所を検索するときに、その範囲がどこなのか知りたい時があると思います。そういったときには便利なサイトだと思います。住所LODのデータは、CC BY-SA 4.0のオープンライセンスで、かつ機械可読可能な形式でも提供していますので、ダウンロードして自身の作成するアプリの中などで使うことも可能です。

主な機能

住所データの閲覧・ダウンロード

住所LODでは、トップページ から地図上、または、都道府県リストを選択することで、住所としての都道府県ページを表示できます。都道府県ページには、その都道府県に含まれる市区町村のリストを見ることができます。

市区町村リストから市区町村をクリックすると町・丁目、町・丁目からは、番地とより細かい住所データを閲覧することができます。

都道府県の例: 東京都

https://uedayou.net/loa/東京都

市区町村の例: 東京都新宿区

https://uedayou.net/loa/東京都新宿区

町・丁目の例: 東京都新宿区新宿

https://uedayou.net/loa/東京都新宿区新宿

東京都新宿区新宿

都道府県、市区町村、町・丁目までは行政区画の範囲を地図上で見ることができます。
番地では、代表点をポイントとして見れます。

各住所のURIに拡張子(.json.xml)をつけると、JSONやXML形式で表示中の情報を任意のファイル形式でダウンロードすることができます。ダウンロードできるデータはRDF(Resource Description Framework)になっています。データモデルは後述します。

JSONの例: 東京都新宿区新宿のJSONファイル
XMLの例: 東京都新宿区新宿のXMLファイル

ダウンロードしたファイルに含まれる行政区画データについては、Webで一般的に使用されるGeoJSONという形式ではなく、WKT(Well-Known Text)という形式になります。
GeoJSONとして取得したい場合は、拡張子を.geojsonにすれば行政区画データのみをGeoJSON形式でダウンロードできます。

GeoJSONの例: 東京都新宿区新宿の行政区画GeoJSON

住所LODはCORS(Cross-Origin Resource Sharing)に対応しているので、JSONやXMLファイルを直接Webアプリから取得・利用できます。

たとえば、以下のようにWebアプリから住所LODのGeoJSONファイルを読み込むと、

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.0.3/leaflet.css" />
    <title>GeoJSONの表示</title>
    <style>html, body {height:100%;}</style>
  </head>
  <body style="margin:0px;">
    <div id="map" style="width:100%; height:100%"></div>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.0.3/leaflet.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet-ajax/2.1.0/leaflet.ajax.min.js"></script>
    <script type="text/javascript">
    var url = "https://uedayou.net/loa/東京都千代田区.geojson";
    var map = L.map('map').setView([35.674487, 139.74708],10);
    var tiles = L.tileLayer('https://{s}.tile.openstreetmap.jp/{z}/{x}/{y}.png', {
      maxZoom: 18,
      attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
    });
    map.addLayer(tiles);
    var feature = new L.GeoJSON.AJAX([url]).addTo(map);
    feature.on('data:loaded', function() {
      this.map.fitBounds(feature.getBounds());
    }.bind(this));
    </script>
  </body>
</html>

以下のように表示されると思います。

サンプルアプリ

以下で動作確認ができます。
https://uedayou.net/loa-sample-geojson-map.html

住所の検索

ページ上部のナビゲーションバーの検索フォームより、住所を検索することができます。
住所検索は、キーワード(例えば、「永田町」)を入力して、エンターキーを押すことで実行されます。
検索できる住所は、町・丁目レベルまでで、番地の検索はできません。
町・丁目まで絞り込んだ後、ページから該当番地を探してください。

住所検索

周辺情報

本サイトは、該当する住所の周辺情報として以下を表示します。

周辺情報があれば、地図上の、(駅)、(図)、(W)、(WD) マーカーと、
ページ下部の周辺情報セクションに表示されます。

東京都千代田区の周辺情報

https://uedayou.net/loa/東京都千代田区

なお、一般的には距離的に近い主要施設を周辺情報としていると思いますが、本サイトにおける周辺情報は、該当住所に含まれる周辺情報 になります。

周辺情報表示の例: 東京都千代田区有楽町

https://uedayou.net/loa/東京都千代田区有楽町

鉄道駅

鉄道駅は、鉄道駅LOD のデータを使用しています。
鉄道駅LODでは、日本全国の鉄道駅、路線、鉄道会社のデータを提供しています。

http://uedayou.net/jrslod/

詳しくは、以下を参照してください。

https://qiita.com/uedayou/items/b5131b5ca930fe0bef69

図書館

図書館は、図書館施設データポータル のデータを使用しています。
図書館施設データポータルは、国立国会図書館が提供する図書館施設に関するデータを変換して提供しているサイトです。

https://uedayou.net/ld/library/

詳しくは、以下を参照してください。

https://qiita.com/uedayou/items/20ad432cdb7602f64bd3

Wikipedia

フリーのインタネット百科事典のWikipediaの記事を周辺情報として表示しています。

Wikipediaの記事については、DBpedia Japanese を使って収集しました。収集対象は、住所と緯度経度を含む記事です。

住所は、imi-enrichment-addressにより正規化しています。

Wikidata

Wikidata は、フリーでオープンな知識データベースサイトです。Wikipediaでは記事内で言及されている数値情報を細かく抽出することは困難ですが、Wikidata ではあらかじめそのようなデータを検索・取得することができます。

上述のWikipedia と同じく、収集対象は、住所と緯度経度を含むデータで、imi-enrichment-addressにより住所を正規化しています。

住所LODのデータについて

旧版からの改善

旧版(2016年版)からデータモデルの変更と、行政区画の割り当て精度を向上させています。
データモデルについては後述しますが、共通語彙基盤コア語彙 住所型により準拠するように変更しています。

行政区画の割り当て精度については、2016年版では町・丁目レベルの行政区画のポリゴンデータが網羅的に提供できていなかったという問題がありました。
都市部では問題ありませんが、山間部等一部の地域では以下のような状態になることがありました。

京都府相楽郡精華町での比較

今回のリニューアルに伴い、行政区画の抜けがなくなるようにしました。

ちなみに画像のような表示ができるGeoJSONファイルの取得方法は、以下の記事で紹介しています。

https://qiita.com/uedayou/items/806ed80a45ec9855c554

データモデル

住所LODはRDFとしてデータを提供しています。
RDFは以下のようになっています。

項目名 プロパティ 値例
住所表記 rdfs:label
ic:表記
"東京都千代田区丸の内2丁目7"@ja
都道府県名 ic:都道府県 "東京都"@ja
都道府県コード ic:都道府県コード/ic:識別値 "13"
市区町村名 ic:市区町村 "千代田区"@ja
市区町村コード ic:市区町村コード/ic:識別値 "101"
町名 ic:町名 "丸の内"@ja
丁目 ic:丁目 2
番地補足 ic:番地補足 "甲"@ja
番地 ic:番地 "7"@ja
ジオハッシュ schema:geo http://geohash.org/xn76urjt9
緯度 geo:lat 35.679084
経度 geo:long 139.76468
行政区画ポリゴンデータ
※WKT形式
gis:asWKT "POLYGON((...))" ;
上位概念 gn:parentFeature https://uedayou.net/loa/東京都千代田区
下位概念 dcterms:hasPart https://uedayou.net/loa/東京都千代田区丸の内1丁目
GeoNames.jpへのリンク
※住所LODと同じく住所データを提供するサイト
dcterms:references http://geonames.jp/resource/東京都千代田区丸の内
地図画像
※ 地理院地図より生成
schema:image https://uedayou.net/loa/東京都千代田区丸の内2丁目7.jpg
住所コード ic:住所コード/ic:識別値 "131010011000"

例えば、東京都千代田区丸の内のTurtleファイルは以下のようになります。

@prefix ic: <http://imi.go.jp/ns/core/rdf#> .
@prefix dc: <http://purl.org/dc/terms/> .
@prefix ns0: <http://www.geonames.org/ontology#> .
@prefix gis: <http://www.opengis.net/ont/geosparql#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

<https://uedayou.net/loa/東京都千代田区丸の内>
  a ic:住所型 ;
  ic:住所コード [
    a ic:コード型 ;
    ic:識別値 "131010011000"
  ] ;
  ic:市区町村 "千代田区"@ja ;
  ic:市区町村コード [
    a ic:コード型 ;
    ic:識別値 "101"
  ] ;
  ic:町名 "丸の内"@ja ;
  ic:表記 "東京都千代田区丸の内"@ja ;
  ic:都道府県 "東京都"@ja ;
  ic:都道府県コード [
    a ic:コード型 ;
    ic:識別値 "13"
  ] ;
  dc:created "2019-01-01" ;
  dc:hasPart <https://uedayou.net/loa/東京都千代田区丸の内1丁目>, <https://uedayou.net/loa/東京都千代田区丸の内2丁目>, <https://uedayou.net/loa/東京都千代田区丸の内3丁目> ;
  dc:references <http://geonames.jp/resource/東京都千代田区丸の内> ;
  ns0:parentFeature <https://uedayou.net/loa/東京都千代田区> ;
  gis:asWKT "MULTIPOLYGON(((139.7634054332579 35.677946653177145,139.76492356171508 35.677605990429086, ...)))" ;
  rdfs:label "東京都千代田区丸の内"@ja .

Web API

Web API としてSPARQエンドポイント を提供しています。

Web API検索用ページ

https://uedayou.net/ldapinavi/loaj

Web API(SPARQLエンドポイント)

https://uedayou.net/loa/sparql

Web API の使い方については、以下の記事にまとめました。

https://zenn.dev/uedayou/articles/272704196e41b2

バックエンド

住所LODのバックエンドは旧版では、一般的なサーバにLAMP構成を構築して運用していました。リニューアル版では、Aamazon Web Service(AWS)上でのサーバレスアーキテクチャに変更して運用しています。
主に API Gateway や Lambda を利用しています。今回の変更で障害に強く、メンテナンスしやすい構成にできたと思います。

バックエンド構成

また、従来バックエンドで使っていたプログラムも新たにLambda 等で動作するように変更して、GitHub に公開しています。興味がある方がいましたら使ってみてください。

https://github.com/uedayou/simplelodi

※ 住所LODのベースプログラムです。

https://github.com/uedayou/simple-lodi-frontend

※ Simple LODIのフロントエンド側コード(React)です。Simple LODIにビルドしたコードが含まれますが、デザインを変更したい場合は上記を使えば可能です。

https://github.com/uedayou/jena-sparql-server-aws-serverless

※ Web APIとして使用しているSPARQLエンドポイントのコードです。

Discussion