73 lines
1.6 KiB
JavaScript
73 lines
1.6 KiB
JavaScript
'use strict';
|
|
|
|
var S2 = require('../src/s2geometry.js').S2;
|
|
|
|
function getNeighbors(lat, lng, step) {
|
|
//var step = 10;
|
|
var level = 15;
|
|
var origin = S2.latLngToQuadkey(lat, lng, level);
|
|
var walk = [];
|
|
// 10 before and 10 after
|
|
var next = S2.nextKey(origin);
|
|
var prev = S2.prevKey(origin);
|
|
var i;
|
|
|
|
for (i = 0; i < step; i++) {
|
|
walk.unshift(S2.toId(prev));
|
|
prev = S2.prevKey(prev);
|
|
}
|
|
|
|
walk.push(S2.toId(origin));
|
|
|
|
for (i = 0; i < step; i++) {
|
|
// in range(10):
|
|
walk.push(S2.toId(next));
|
|
next = S2.nextKey(next);
|
|
}
|
|
|
|
return walk;
|
|
}
|
|
|
|
|
|
/*
|
|
// Startup Building in Provo
|
|
var lat = 40.2262363;
|
|
var lng = -111.6630927;
|
|
|
|
var walk = getNeighbors(lat, lng, 5);
|
|
|
|
walk.forEach(function (cellId, i) {
|
|
var key = S2.fromId(cellId);
|
|
var face = parseInt(key.substr(0, 1), 10);
|
|
var pos = key.substr(2);
|
|
var level = pos.length;
|
|
|
|
// TODO
|
|
// S2.keyToLatLng(key);
|
|
// S2.idToLatLng(id);
|
|
|
|
// ! because converting CellId / HilbertQuadkey to LatLng is not implemented... yet
|
|
console.log(-((walk.length - 1) / 2) + i, face, cellId, S2.fromId(cellId), '!', level);
|
|
});
|
|
*/
|
|
|
|
|
|
// Kyderman's test location
|
|
var lat = 51.352085106718384;
|
|
var lng = -2.9877930879592896;
|
|
var walk = getNeighbors(lat, lng, 5);
|
|
|
|
walk.forEach(function (cellId, i) {
|
|
var key = S2.fromId(cellId);
|
|
var face = parseInt(key.substr(0, 1), 10);
|
|
var pos = key.substr(2);
|
|
var level = pos.length;
|
|
|
|
// TODO
|
|
// S2.keyToLatLng(key);
|
|
// S2.idToLatLng(id);
|
|
|
|
// ! because converting CellId / HilbertQuadkey to LatLng is not implemented... yet
|
|
console.log(-((walk.length - 1) / 2) + i, face, cellId, S2.fromId(cellId), '!', level);
|
|
});
|