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