LoginSignup
11
9

More than 5 years have passed since last update.

自分の町のトイレコンシェルを作る方法

Last updated at Posted at 2016-03-02

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エンドポイント、クエリが指定されていれば、自分の町のトイレコンシェルが動いているはずです。

11
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
9