SPARQL初心者の学習日誌#2

前回ではクエリ文を作り、データをjson形式で入手することに成功した。
そこで、今回はそのデータとHTML,CSS,JavaScriptを使ってwebアプリを作ってみる。

レンタルサイクルステーションの一覧があるので、まず地図上でその位置がわかるようにする。福野泰介の一日一創を参考にしながら進めていく。

 

 


最初にGoogle Maps JavaScript APIを使って、地図を表示する。

事前にAPIを読み込んで置いて、以下のコードでGoogle Mapを表示することができた。この時にmap-canvasのサイズを指定しておく。

window.onload = function () {
 var mapDiv = document.getElementById("map-canvas");

 var map = new google.maps.Map(mapDiv, {
  center: new google.maps.LatLng(緯度, 経度),
  zoom: 11,
 });
}

 


 

次にクエリ文を使ってレンタルサイクルステーションをこの地図上に表示していく。
最初にjsonファイルを取得して解析する。

window.onload = function () {
      var mapDiv = document.getElementById("map-canvas");

      var map = new google.maps.Map(mapDiv, {
        center: new google.maps.LatLng(35, 139),
        zoom: 11,
      });

      var query = `prefix  geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
  prefix jrrk: <http://purl.org/jrrk#>
  prefix schema: <http://schema.org/>
  prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
  prefix odp:             <http://odp.jig.jp/odp/1.0#>
  prefix ic:              <http://imi.go.jp/ns/core/rdf#>
  prefix rdf:             <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
select ?label ?lat ?lng {
?s ?p odp:RentalCycleStation;
rdfs:label ?label;
geo:lat ?lat;
geo:long ?lng;
}limit 1000
    `;


      var endpointSparql = "https://sparql.odp.jig.jp/api/v1/sparql";

      querySparql(endpointSparql, query, function (data) {
        console.log(data);
      });
    }

    var querySparql = function (baseurl, q, callback) {
      var url = baseurl + "?query=" + encodeURIComponent(q) + "&output=json" + "&callback=" + getCallbackMethod(callback);
      jsonp(url);
    };
    var getCallbackMethod = function (callback) {
      var scallback = "_cb_" + (Math.random() * 1000000 >> 0);
      window[scallback] = function (data) {
        window[scallback] = null;
        callback(data);
      };
      return scallback;
    };

    var jsonp = function (url) {
      var head = document.getElementsByTagName("head")[0];
      var script = document.createElement("script");
      script.setAttribute("src", url);
      script.setAttribute("type", "text/javascript");
      head.appendChild(script);
    };


最後にそれぞれの座標にマーカーを設置する。

querySparql(endpointSparql, query, function (data) {
    console.log(data);

    var items = data.results.bindings;
    var spotCounter = 0;
    for (var i = 0; i < items.length; i++) {
      var item = items[i];

      var lat = item.lat.value;
      var lng = item.lng.value;
      var label = item.label.value;
      var marker = new google.maps.Marker({
        position: new google.maps.LatLng(lat, lng),
        icon: {
          url: "icon.png",
          size: new google.maps.Size(100, 100),
          origin: new google.maps.Point(0, 0),
          anchor: new google.maps.Point(15, 15),
        },
        map: map
      });
   }
});
      



このサンプルプログラムを改良して、レンタルサイクルステーションの近くにある観光地がわかるwebアプリを作ってみた。

レンタルサイクルステーションリスト

ソースコード

 

カテゴリー