前回ではクエリ文を作り、データを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アプリを作ってみた。