// 例: 位置情報を共有 function dbLOC() { var nTrial=10, interval=5000; var locationmap = L.map("locationmap").setView([38.891, 139.824], 16); L.tileLayer('//cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', { attribution: '国土地理院' }).addTo(locationmap); var mymarker = L.marker(locationmap.getCenter()).addTo(locationmap); var othermarker = {}; var locTimer; var info = document.getElementById('info'), name = document.getElementById('name'); function respondLOC() { if (this.readyState == 4) { var resp = JSON.parse(this.responseText); // 受信文字列取得(JSON) if (resp['uid']) localStorage.setItem('uid', resp['uid']); if (resp['answer']) { alert('ゴール!:\n正解は「' + resp['answer'] + '」です'); mymarker.bindPopup(resp['answer']).openPopup(); stop(); } else if (resp['distance']) { info.textContent = 'あと'+resp['distance']+'mです' } } } function submitLOC(pos) { // CGIにデータ送出 // uid vs. name を送らないとだめ ->6/13 var latlng = L.latLng([pos.coords.latitude, pos.coords.longitude]); var uid = localStorage.getItem('uid'); info.textContent = 'Found'+latlng+'('+nTrial+'回残)'; locationmap.panTo(latlng); mymarker.setLatLng(latlng); if (latlng) { var conn = new XMLHttpRequest(); // POSTデータを作成する: 変数1=値1&変数2=値2... という形式で // 値の部分に&などが入ってもよいよう encodeURIComponent() する var lat = encodeURIComponent(latlng.lat), lng = encodeURIComponent(latlng.lng), eui = encodeURIComponent(uid), enm = encodeURIComponent(name.value); var post = 'lat='+lat + '&' + 'lng='+lng+'&'+ 'name='+enm; if (uid) post += '&'+ 'uid='+eui; conn.open('POST', './db-loc.cgi'); // POSTメソッドでCGIへ送る conn.setRequestHeader( // 送信ヘッダを定義 'Content-Type', 'application/x-www-form-urlencoded'); conn.send(post); conn.onreadystatechange = respondLOC; // イベントリスナ登録 } restart(); } function restart() { if (--nTrial > 0) { locTimer = setTimeout(start, interval); } } function onError() { info.textContent = 'Cannot capture'; restart; } function start() { if (name.value == '') { alert('name欄を埋めてください') return; } localStorage.setItem('name', name.value); navigator.geolocation.getCurrentPosition( submitLOC, onError, {maximumAge: 0, enableHighAccuracy: true, timeout: 10000}); } function stop() { if (locTimer) { clearTimeout(locTimer); } info.textContent = 'Stopped'; } function view() { alert(localStorage.getItem('uid')+', '+localStorage.getItem('name')); // localStorage.clear(); } document.getElementById("start").addEventListener('click', start); document.getElementById("stop").addEventListener('click', stop); document.getElementById("view").addEventListener('click', view); if (localStorage.getItem('name')) name.value = localStorage.getItem('name'); } document.addEventListener('DOMContentLoaded', dbLOC)