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);
 | |
| });
 |