Created
September 23, 2015 15:42
-
-
Save frogcat/3e2df6a57b1754486358 to your computer and use it in GitHub Desktop.
地理院標高タイルを使った valhalla Elevation Service API Reference の実装 (複数点サポートの限定実装)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!doctype html> | |
<html> | |
<head> | |
<meta charset="utf-8"> | |
<title>dem</title> | |
<script> | |
function llz2zxy(lat, lon, z) { | |
var r = lat * Math.PI / 180 | |
var n = Math.pow(2, z); | |
var x = n * ((lon + 180) / 360); | |
var y = n * (1 - (Math.log(Math.tan(r) + 1 / Math.cos(r)) / Math.PI)) / 2; | |
return [ z, Math.floor(x), Math.floor(y) ]; | |
} | |
function dem(p) { | |
var lat = p.lat; | |
var lon = p.lon; | |
return new Promise(function(resolve, reject) { | |
var zxy14 = llz2zxy(lat, lon, 14); | |
var zxy22 = llz2zxy(lat, lon, 22); | |
var url = "http://cyberjapandata.gsi.go.jp/xyz/dem/" + zxy14.join("/") + ".txt"; | |
var xhr = new XMLHttpRequest(); | |
xhr.onload = function() { | |
var x = zxy22[1] % 256; | |
var y = zxy22[2] % 256; | |
var h = parseFloat(xhr.responseText.split("\n")[y].split(",")[x]); | |
resolve(h); | |
}; | |
xhr.open("get", url, true); | |
xhr.send(); | |
}); | |
} | |
function elevation(json) { | |
if (json.encoded_polyline) { | |
alert("ToDo : support encoded polyline"); | |
return; | |
} | |
var promises = []; | |
json.shape.forEach(function(p) { | |
promises.push(dem(p)); | |
}); | |
return new Promise(function(resolve, reject) { | |
Promise.all(promises).then(function(data) { | |
resolve({ | |
shape : json.shape, | |
height : data | |
}); | |
}); | |
}); | |
} | |
</script> | |
</head> | |
<body> | |
<pre id="pre">Please wait</pre> | |
<script> | |
elevation({ | |
"shape" : [ { | |
"lat" : 35.68171, | |
"lon" : 139.76473 | |
}, { | |
"lat" : 35.362878, | |
"lon" : 138.730965 | |
} ] | |
}).then(function(json) { | |
document.getElementById("pre").innerHTML = JSON.stringify(json, null, " "); | |
}); | |
</script> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment