refactor and test for getting latlng
This commit is contained in:
		
							parent
							
								
									a60945a4b9
								
							
						
					
					
						commit
						f4768f7a60
					
				| @ -28,14 +28,25 @@ | |||||||
| var S2 = exports.S2 = {}; | var S2 = exports.S2 = {}; | ||||||
| 
 | 
 | ||||||
| var LatLngToXYZ = function(latLng) { | var LatLngToXYZ = function(latLng) { | ||||||
|   var d2r = S2.L.LatLng.DEG_TO_RAD; |   // http://stackoverflow.com/questions/8981943/lat-long-to-x-y-z-position-in-js-not-working
 | ||||||
|  |   var lat = latLng.lat; | ||||||
|  |   var lon = latLng.lng; | ||||||
|  |   var DEG_TO_RAD = Math.PI / 180.0; | ||||||
| 
 | 
 | ||||||
|   var phi = latLng.lat*d2r; |   var phi = lat * DEG_TO_RAD; | ||||||
|   var theta = latLng.lng*d2r; |   var theta = lon * DEG_TO_RAD; | ||||||
| 
 | 
 | ||||||
|   var cosphi = Math.cos(phi); |   var cosLat = Math.cos(phi); | ||||||
|  |   var sinLat = Math.sin(phi); | ||||||
|  |   var cosLon = Math.cos(theta); | ||||||
|  |   var sinLon = Math.sin(theta); | ||||||
|  |   var rad = 500.0; | ||||||
| 
 | 
 | ||||||
|   return [Math.cos(theta)*cosphi, Math.sin(theta)*cosphi, Math.sin(phi)]; |   return [ | ||||||
|  |     rad * cosLat * cosLon | ||||||
|  |   , rad * cosLat * sinLon | ||||||
|  |   , rad * sinLat | ||||||
|  |   ]; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| var XYZToLatLng = function(xyz) { | var XYZToLatLng = function(xyz) { | ||||||
| @ -192,8 +203,6 @@ var pointToHilbertQuadList = function(x,y,order) { | |||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| // S2Cell class
 | // S2Cell class
 | ||||||
| 
 | 
 | ||||||
| S2.S2Cell = function(){}; | S2.S2Cell = function(){}; | ||||||
| @ -258,6 +267,11 @@ S2.S2Cell.prototype.getFaceAndQuads = function() { | |||||||
| 
 | 
 | ||||||
|   return [this.face,quads]; |   return [this.face,quads]; | ||||||
| }; | }; | ||||||
|  | S2.S2Cell.prototype.toHilbertQuadkey = function () { | ||||||
|  |   var quads = pointToHilbertQuadList(this.ij[0], this.ij[1], this.level); | ||||||
|  | 
 | ||||||
|  |   return this.face.toString(10) + '/' + quads.join(''); | ||||||
|  | }; | ||||||
| 
 | 
 | ||||||
| S2.S2Cell.prototype.getNeighbors = function() { | S2.S2Cell.prototype.getNeighbors = function() { | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										21
									
								
								tests/example.provo.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								tests/example.provo.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | |||||||
|  | -10 4 '9749618424903892992' '4/032212303102122' '40.253289,-111.712279' 15 | ||||||
|  | -9 4 '9749618427051376640' '4/032212303102123' '40.253874,-111.709298' 15 | ||||||
|  | -8 4 '9749618429198860288' '4/032212303102130' '40.254460,-111.706317' 15 | ||||||
|  | -7 4 '9749618431346343936' '4/032212303102131' '40.252022,-111.706317' 15 | ||||||
|  | -6 4 '9749618433493827584' '4/032212303102132' '40.252607,-111.703336' 15 | ||||||
|  | -5 4 '9749618435641311232' '4/032212303102133' '40.255045,-111.703336' 15 | ||||||
|  | -4 4 '9749618437788794880' '4/032212303102200' '40.257483,-111.703336' 15 | ||||||
|  | -3 4 '9749618439936278528' '4/032212303102201' '40.259920,-111.703336' 15 | ||||||
|  | -2 4 '9749618442083762176' '4/032212303102202' '40.259335,-111.706317' 15 | ||||||
|  | -1 4 '9749618444231245824' '4/032212303102203' '40.256897,-111.706317' 15 | ||||||
|  | 0 4 '9749618446378729472' '4/032212303102210' '40.256312,-111.709298' 15 | ||||||
|  | 1 4 '9749618448526213120' '4/032212303102211' '40.255727,-111.712279' 15 | ||||||
|  | 2 4 '9749618450673696768' '4/032212303102212' '40.258165,-111.712279' 15 | ||||||
|  | 3 4 '9749618452821180416' '4/032212303102213' '40.258750,-111.709298' 15 | ||||||
|  | 4 4 '9749618454968664064' '4/032212303102220' '40.261188,-111.709298' 15 | ||||||
|  | 5 4 '9749618457116147712' '4/032212303102221' '40.260602,-111.712279' 15 | ||||||
|  | 6 4 '9749618459263631360' '4/032212303102222' '40.263040,-111.712279' 15 | ||||||
|  | 7 4 '9749618461411115008' '4/032212303102223' '40.263625,-111.709298' 15 | ||||||
|  | 8 4 '9749618463558598656' '4/032212303102230' '40.264210,-111.706317' 15 | ||||||
|  | 9 4 '9749618465706082304' '4/032212303102231' '40.261773,-111.706317' 15 | ||||||
|  | 10 4 '9749618467853565952' '4/032212303102232' '40.262358,-111.703336' 15 | ||||||
							
								
								
									
										21
									
								
								tests/example.startup.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								tests/example.startup.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | |||||||
|  | -10 4 '9749615149991329792' '4/032212302322211' '40.235133,-111.655639' 15 | ||||||
|  | -9 4 '9749615152138813440' '4/032212302322212' '40.234549,-111.658620' 15 | ||||||
|  | -8 4 '9749615154286297088' '4/032212302322213' '40.232110,-111.658620' 15 | ||||||
|  | -7 4 '9749615156433780736' '4/032212302322220' '40.231526,-111.661601' 15 | ||||||
|  | -6 4 '9749615158581264384' '4/032212302322221' '40.233965,-111.661601' 15 | ||||||
|  | -5 4 '9749615160728748032' '4/032212302322222' '40.233381,-111.664582' 15 | ||||||
|  | -4 4 '9749615162876231680' '4/032212302322223' '40.230942,-111.664582' 15 | ||||||
|  | -3 4 '9749615165023715328' '4/032212302322230' '40.228503,-111.664582' 15 | ||||||
|  | -2 4 '9749615167171198976' '4/032212302322231' '40.229087,-111.661601' 15 | ||||||
|  | -1 4 '9749615169318682624' '4/032212302322232' '40.226647,-111.661601' 15 | ||||||
|  | 0 4 '9749615171466166272' '4/032212302322233' '40.226063,-111.664582' 15 | ||||||
|  | 1 4 '9749615173613649920' '4/032212302322300' '40.223624,-111.664582' 15 | ||||||
|  | 2 4 '9749615175761133568' '4/032212302322301' '40.221184,-111.664582' 15 | ||||||
|  | 3 4 '9749615177908617216' '4/032212302322302' '40.221768,-111.661601' 15 | ||||||
|  | 4 4 '9749615180056100864' '4/032212302322303' '40.224208,-111.661601' 15 | ||||||
|  | 5 4 '9749615182203584512' '4/032212302322310' '40.224791,-111.658620' 15 | ||||||
|  | 6 4 '9749615184351068160' '4/032212302322311' '40.225375,-111.655639' 15 | ||||||
|  | 7 4 '9749615186498551808' '4/032212302322312' '40.222935,-111.655639' 15 | ||||||
|  | 8 4 '9749615188646035456' '4/032212302322313' '40.222352,-111.658620' 15 | ||||||
|  | 9 4 '9749615190793519104' '4/032212302322320' '40.219912,-111.658620' 15 | ||||||
|  | 10 4 '9749615192941002752' '4/032212302322321' '40.220496,-111.655639' 15 | ||||||
| @ -3,13 +3,37 @@ | |||||||
| var S2 = require('../src/s2geometry.js').S2; | var S2 = require('../src/s2geometry.js').S2; | ||||||
| 
 | 
 | ||||||
| var level = 15; | var level = 15; | ||||||
| var latlng = { lat: 40.2574448, lng: -111.7089464 }; | 
 | ||||||
|  | // Provo, UT (Center St)
 | ||||||
|  | // '9749618446378729472' '4/032212303102210' '40.256312,-111.709298' 15
 | ||||||
|  | //                        4/032212303102210
 | ||||||
|  | //var lat = 40.2574448;
 | ||||||
|  | //var lng = -111.7089464;
 | ||||||
|  | var latlng = { lat: 40.256312, lng: -111.709298 }; | ||||||
| var cell = S2.S2Cell.FromLatLng(latlng, level); | var cell = S2.S2Cell.FromLatLng(latlng, level); | ||||||
| 
 | 
 | ||||||
|  | console.log(cell.toHilbertQuadkey(), '4/032212303102210' === cell.toHilbertQuadkey()); | ||||||
|  | console.log(cell.getLatLng(), '40.256312,-111.709298' === cell.getLatLng(), '40.256312,-111.709298'); | ||||||
|  | 
 | ||||||
|  | // Startup Building in Provo
 | ||||||
|  | // '9749615171466166272' '4/032212302322233' '40.226063,-111.664582' 15
 | ||||||
|  | //                        4/032212302322233
 | ||||||
|  | //var lat = 40.2262363;
 | ||||||
|  | //var lng = -111.6630927;
 | ||||||
|  | var latlng = { lat: 40.226063, lng: -111.664582 }; | ||||||
|  | var cell = S2.S2Cell.FromLatLng(latlng, level); | ||||||
|  | 
 | ||||||
|  | console.log(cell.toHilbertQuadkey(), '4/032212302322233' === cell.toHilbertQuadkey()); | ||||||
|  | console.log(cell.getLatLng(), '40.226063,-111.664582' === cell.getLatLng(), '40.226063,-111.664582'); | ||||||
|  | 
 | ||||||
|  | /* | ||||||
| cell.getNeighbors();  // [ cellLeft, cellDown, cellRight, cellUp ]
 | cell.getNeighbors();  // [ cellLeft, cellDown, cellRight, cellUp ]
 | ||||||
| 
 | 
 | ||||||
| latlng = cell.getLatLng();     // { lat: 40.2574448, lng: -111.7089464 }
 | latlng = cell.getLatLng();     // { lat: 40.2574448, lng: -111.7089464 }
 | ||||||
| 
 | 
 | ||||||
|  | console.log(orig); | ||||||
|  | console.log(latlng); | ||||||
|  | 
 | ||||||
| if (40 === Math.round(latlng.lat) && -112 === Math.round(latlng.lng)) { | if (40 === Math.round(latlng.lat) && -112 === Math.round(latlng.lng)) { | ||||||
|   console.log('OK'); |   console.log('OK'); | ||||||
|   process.exit(0); |   process.exit(0); | ||||||
| @ -19,3 +43,4 @@ else { | |||||||
|   console.log(latlng); |   console.log(latlng); | ||||||
|   process.exit(1); |   process.exit(1); | ||||||
| } | } | ||||||
|  | */ | ||||||
|  | |||||||
| @ -1,9 +1,14 @@ | |||||||
| var S2 = require('s2geometry-node'); | var S2 = require('s2geometry-node'); | ||||||
| var lat = 40.2574448; | 
 | ||||||
| var lng = -111.7089464; | // Provo, UT (Center St)
 | ||||||
|  | //var lat = 40.2574448;
 | ||||||
|  | //var lng = -111.7089464;
 | ||||||
|  | 
 | ||||||
|  | // Startup Building in Provo
 | ||||||
|  | var lat = 40.2262363; | ||||||
|  | var lng = -111.6630927; | ||||||
| 
 | 
 | ||||||
| var s2latlng = new S2.S2LatLng(lat, lng); | var s2latlng = new S2.S2LatLng(lat, lng); | ||||||
| var point; |  | ||||||
| var cellId = new S2.S2CellId(s2latlng).parent(15); | var cellId = new S2.S2CellId(s2latlng).parent(15); | ||||||
| var cell; | var cell; | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user