85 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| var Long = require('long');
 | |
| var s2node = require('s2geometry-node');
 | |
| var S2 = require('../src/s2geometry.js').S2;
 | |
| 
 | |
| var tests = [
 | |
|   { 'name': 'Provo, UT'
 | |
|   , 'lat': 40.2574448
 | |
|   , 'lng': -111.7089464
 | |
|   , 'key': ''
 | |
|   , 'id': ''
 | |
|   }
 | |
| , { 'name': 'Startup Building'
 | |
|   , 'lat': 40.2262363
 | |
|   , 'lng': -111.6630927
 | |
|   , 'key': ''
 | |
|   , 'id': ''
 | |
|   }
 | |
| , { 'name': "Kyderman's"
 | |
|   , 'lat': 51.352085106718384 // 51.352085106718384
 | |
|   , 'lng': -2.9877930879592896 // -2.9877930879592896
 | |
|   , 'key': ''
 | |
|   , 'id': ''
 | |
|   }
 | |
| , { 'name': "Toeler's"
 | |
|   , 'lat': -43.525166 // -43.5261282
 | |
|   , 'lng': 172.655096 // 172.6561085
 | |
|   , 'key': ''
 | |
|   , 'id': ''
 | |
|   }
 | |
| /*
 | |
| , { 'name': ""
 | |
|   , 'lat': 0
 | |
|   , 'lng': 0
 | |
|   , 'key': ''
 | |
|   , 'id': ''
 | |
|   }
 | |
| */
 | |
| ];
 | |
| 
 | |
| // get known-expected values
 | |
| tests.forEach(function (loc) {
 | |
|   var level = 15;
 | |
|   var s2nLatLng = new s2node.S2LatLng(loc.lat, loc.lng);
 | |
|   var s2nId = new s2node.S2CellId(s2nLatLng).parent(level);
 | |
|   var s2nCell = new s2node.S2Cell(s2nId);
 | |
| 
 | |
|   loc.face = s2nCell.face();
 | |
|   loc.id = s2nId.id();
 | |
|   loc.key = s2nId.toString();
 | |
|   loc.lat = s2nId.toLatLng().toString().split(',')[0];
 | |
|   loc.lng = s2nId.toLatLng().toString().split(',')[1];
 | |
|   loc.level = s2nId.level(); // always 15
 | |
|   loc.point = s2nId.toPoint()// .toArray();
 | |
| 
 | |
|   //console.log(JSON.stringify(loc, null, '  '));
 | |
| 
 | |
|   var key = S2.latLngToQuadkey(loc.lat, loc.lng, level);
 | |
|   var id = S2.toId(key);
 | |
|   var key2 = S2.toKey(id);
 | |
|   var id2 = S2.toId(key2);
 | |
| 
 | |
|   if (loc.key !== key || loc.id !== id) {
 | |
|     console.error("Error testing " + loc.name + " @ " + loc.lat + ',' + loc.lng);
 | |
|     console.error("Calculated/Expected:");
 | |
|     console.error(id, ':', loc.id);
 | |
|     console.error(key, " : ", loc.key);
 | |
|     console.error(loc.point.x(), loc.point.y(), loc.point.z());
 | |
|     console.error(Long.fromString(id, true, 10).toString(2));
 | |
|     console.error(Long.fromString(loc.id, true, 10).toString(2));
 | |
| 
 | |
|     throw new Error('Test Failed');
 | |
|   }
 | |
| 
 | |
|   if (loc.key !== key2 || loc.id !== id2) {
 | |
|     console.error("Error testing " + loc.name + " @ " + loc.lat + ',' + loc.lng);
 | |
|     console.error("Secondary Key / ID conversion failed: Calculated/Expected:");
 | |
|     console.error(id2, ':', loc.id);
 | |
|     console.error(key2, " : ", loc.key);
 | |
| 
 | |
|     throw new Error('Test Failed');
 | |
|   }
 | |
| });
 |