Skip to content

Instantly share code, notes, and snippets.

@frogcat
Last active September 19, 2015 19:34
Show Gist options
  • Save frogcat/03de190f5c3e243ed8a3 to your computer and use it in GitHub Desktop.
Save frogcat/03de190f5c3e243ed8a3 to your computer and use it in GitHub Desktop.
地理院標高タイルを使った valhalla Elevation Service API Reference の実装 (ただし単一点のみ)
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>dem</title>
</head>
<body>
<pre id="pre">Please wait</pre>
<script>
function elevation(json, callback) {
var llz2zxy = function(lat, lon, z) {
var r = lat * Math.PI / 180
var n = Math.pow(2, z);
var x = Math.floor(n * ((lon + 180) / 360));
var y = Math.floor(n * (1 - (Math.log(Math.tan(r) + 1 / Math.cos(r)) / Math.PI)) / 2);
return [ z, x, y ];
};
if (json.encoded_polyline) {
alert("ToDo : support encoded polyline");
return;
}
if (json.shape && json.shape.length != 1) {
alert("ToDo : support multi point shape.");
return;
}
var lat = json.shape[0].lat;
var lon = json.shape[0].lon;
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]);
// ToDo : support range
callback({
shape : json.shape,
height : [ h ]
});
};
xhr.open("get", url, true);
xhr.send();
}
elevation({
"shape" : [ {
"lat" : 35.6184,
"lon" : 139.2143
} ]
}, 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