2014-07-07
SPARQLハンズオンを終えた次のステップ、緯度経度を持つ5つ星オープンデータを使った地図アプリ「近くを調べる」をつくってみます。消火栓やAEDなど、データの種類は問わず、近くの何かをまとめて取得し、最寄りのスポットまでの徒歩案内を表示します。


「近くを調べる」現在位置付近の位置付きデータを取得し、表示するアプリ

ポイントは、緯度経度を中心に、一定範囲の緯度経度情報付きデータを取得するSPARQLです。

prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> prefix geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> prefix xsd: <http://www.w3.org/2001/XMLSchema#> select ?name ?lat ?lng ?type ?s { ?s rdf:type ?type; rdfs:label ?name; geo:lat ?lat; geo:long ?lng. filter ( xsd:float(?lat) < 35.953187 && xsd:float(?lat) > 35.933187 && xsd:float(?lng) < 136.198701 && xsd:float(?lng) > 136.178701 ) }

これが緯度35.943187度、経度136.188701にある鯖江駅です。ここから緯度、経度共に0.01度広げた範囲を取得するSPARQLです。上から順に解説します。

まず、先頭のprefixで始まる行は、長いURLを短く記述するためにあります。

select文で、取得したい項目(?s ?name ?type ?lat ?lng)を記述して��ます。この記述した順番通りに返ってきます。

selectの内側では、項目の関係を記述します。この場合、種別(rdf:type)を?type、名前(rdfs:label)を?name、緯度(geo:lat)を?lat、経度(geo:long)を?lngに持つ、?sという要素を抽出します。

続いて、filterで範囲を鯖江駅を中心に、緯度が35.9331度から35.9531度まで、経度を136.1787度から136.1397度までに制限して、できあがりです。

実際に、odpのSPARQLコンソールで検索してみます。

?name ?lat ?lng ?type ?s "王山保育所"@ja "35.942532" "136.18599" <http://purl.org/jrrk#CivicFacility> <http://odp.jig.jp/jp/fukui/sabae/civicfacility/%E7%8E%8B%E5%B1%B1%E4%BF%9D%E8%82%B2%E6%89%80> "鯖江市観光案内所"@ja "35.942603" "136.188871" <http://purl.org/jrrk#CivicFacility> <http://odp.jig.jp/jp/fukui/sabae/civicfacility/%E9%AF%96%E6%B1%9F%E5%B8%82%E8%A6%B3%E5%85%89%E6%A1%88%E5%86%85%E6%89%80> "ふれあいみんなの館・さばえ"@ja "35.93766" "136.179764" <http://purl.org/jrrk#CivicFacility> <http://odp.jig.jp/jp/fukui/sabae/civicfacility/%E3%81%B5%E3%82%8C%E3%81%82%E3%81%84%E3%81%BF%E3%82%93%E3%81%AA%E3%81%AE%E9%A4%A8%E3%83%BB%E3%81%95%E3%81%B0%E3%81%88> "嚮陽会館"@ja "35.947885" "136.179382" <http://purl.org/jrrk#CivicFacility> <http://odp.jig.jp/jp/fukui/sabae/civicfacility/%E5%9A%AE%E9%99%BD%E4%BC%9A%E9%A4%A8>

このように名前、緯度、経度、種別、URIが取得できました。これをアプリに組み込み、Google Maps APIなどで表示したり、ナビしたりするコードを組み合わせれば「近くを探す」アプリのできあがりです。ソースコードもオープンデータ(CC BY)です。どんどん改造に使ってください。

世界で使える、5つ星オープンデータを使ったアプリ。どんどん増やしていきましょう。

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS