jig.jpの福野泰介さんが作成されたトイレコンシェル 5つ星オープンデータバージョンというWebアプリがあります。
これは、あらかじめ指定した場所(たとえば最寄り駅)や現在地から距離の近いトイレを見つけ出し、ルート検索をしてくれるアプリです。
トイレコンシェル 5つ星オープンデータバージョンは、福井県鯖江市のデータを使っていますが、トイレ情報を提供するSPARQLエンドポイントがあれば、鯖江市以外の地域のアプリを作ることが可能です。
自分の町のトイレコンシェルを作る手順を以下で説明します。
トイレコンシェル ソースコード 取得
トイレコンシェルのソースコードは、GitHub に公開されています。
こちらをFork、もしくはダウンロードしてください。
このリポジトリの中にある index.html
を一部書き換えることで、鯖江市以外のデータを表示させることができます。
初期位置指定
GitHub のコードでは、初期位置が「鯖江駅」となっています。
まず、初期位置を変更します。位置は、緯度経度で指定します。
緯度経度は、たとえば以下のようなツールで調べることができます。
テキストエディタでindex.html
を開いてください。78行目あたりに
DEFAULT_ORG = new google.maps.LatLng(35.943187,136.188701); // 鯖江駅
という行があります。
ここの35.943187,136.188701
を、最初に表示したい位置の緯度経度に変更してください。
たとえば大阪駅を指定したい場合はこのようになります。
DEFAULT_ORG = new google.maps.LatLng(34.702485, 135.495951); // 大阪駅
また、330行目あたりと、368行目あたりに、鯖江駅
と記述されているところがあります。
これらは指定した場所の地名に変えておくとよいでしょう。
alert("鯖江駅から20km以上離れているため、起点を鯖江駅にします");
s.push(demomode ? "鯖江駅から" : "ここから");
SPARQLエンドポイント 変更
トイレ情報を取得するWeb APIである SPARQLエンドポイントのURLは、187行目あたりに記述されています。
var baseurl = "http://sparql.odp.jig.jp/data/sparql";
ここを自分の町のトイレ情報が格納されているSPARQLエンドポイントのURLに変更しましょう。
SPARQLクエリ 書き換え
SPARQLクエリは161行目から181行目あたりに記述されています。
var q = f2s(function() {/*
PREFIX jrrk: <http://purl.org/jrrk#>
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
select ?s ?name ?lat ?lng ?img ?common ?man ?woman ?babybed ?handicapped {
?s rdf:type <http://purl.org/jrrk#PublicToilet>;
rdfs:label ?name;
geo:lat ?lat;
geo:long ?lng.
optional { ?s <http://schema.org/image> ?img. }
optional { ?s <http://purl.org/jrrk#manToiletCapacity> ?man. }
optional { ?s <http://purl.org/jrrk#womanToiletCapacity> ?woman. }
optional { ?s <http://purl.org/jrrk#commonuseCapacity> ?common. }
optional { ?s <http://purl.org/jrrk#barrier-freeToiletCapacity> ?handicapped. }
optional { ?s <http://purl.org/jrrk#hasBabybed> ?babybed. }
filter(?lat < LAT_MAX && ?lat > LAT_MIN && ?lng < LNG_MAX && ?lng > LNG_MIN)
filter(lang(?name)='ja')
}
*/});
SPARQLクエリは、トイレの名前が ?name
、トイレの位置情報が ?lat
:緯度、?lng
:経度 に格納されるように作成しましょう。
また、以下のfilter文は必ずSPARQLクエリ内に入れてください。
filter(?lat < LAT_MAX && ?lat > LAT_MIN && ?lng < LNG_MAX && ?lng > LNG_MIN)
※ SPARQLエンドポイントによっては、以下のfilter文を入れるとトイレ情報が取得できなくなる場合があります。何も表示されない場合は、filter文を削除してみてください。
?img
?common
?man
?woman
?babybed
?handicapped
は、なくてもアプリの動作には支障ありませんが、あると該当トイレの個数などが表示できますので、もしSPARQLエンドポイントにこれらの情報があるのであれば、あわせて出すようにしてみるといいかもしれません。
動作確認
編集した index.html
をブラウザで開いてみましょう。
正しくSPARQLエンドポイント、クエリが指定されていれば、自分の町のトイレコンシェルが動いているはずです。