parent
e04b0b0ecd
commit
68274eb677
|
@ -186,7 +186,7 @@ S2.IJToST = function(ij,order,offsets) {
|
|||
// note: rather then calculating the final integer hilbert position, we just return the list of quads
|
||||
// this ensures no precision issues whth large orders (S3 cell IDs use up to 30), and is more
|
||||
// convenient for pulling out the individual bits as needed later
|
||||
var pointToHilbertQuadList = function(x,y,order) {
|
||||
var pointToHilbertQuadList = function(x,y,order,sq) {
|
||||
var hilbertMap = {
|
||||
'a': [ [0,'d'], [1,'a'], [3,'b'], [2,'a'] ],
|
||||
'b': [ [2,'b'], [1,'b'], [3,'a'], [0,'c'] ],
|
||||
|
@ -194,7 +194,7 @@ var pointToHilbertQuadList = function(x,y,order) {
|
|||
'd': [ [0,'a'], [3,'c'], [1,'d'], [2,'d'] ]
|
||||
};
|
||||
|
||||
var currentSquare='a';
|
||||
var currentSquare=sq||'a';
|
||||
var positions = [];
|
||||
|
||||
for (var i=order-1; i>=0; i--) {
|
||||
|
@ -286,7 +286,27 @@ S2.S2Cell.prototype.getCornerLatLngs = function() {
|
|||
|
||||
|
||||
S2.S2Cell.prototype.getFaceAndQuads = function () {
|
||||
var quads = pointToHilbertQuadList(this.ij[0], this.ij[1], this.level);
|
||||
var sq;
|
||||
|
||||
switch(this.face) {
|
||||
case 0:
|
||||
/* fallthru */
|
||||
case 2:
|
||||
/* fallthru */
|
||||
case 4:
|
||||
sq = 'a';
|
||||
break;
|
||||
|
||||
case 1:
|
||||
/* fallthru */
|
||||
case 3:
|
||||
/* fallthru */
|
||||
case 5:
|
||||
sq = 'd';
|
||||
break;
|
||||
}
|
||||
|
||||
var quads = pointToHilbertQuadList(this.ij[0], this.ij[1], this.level, sq);
|
||||
|
||||
return [this.face,quads];
|
||||
};
|
||||
|
|
|
@ -8,6 +8,23 @@ var lat = -43.525166;
|
|||
var lng = 172.655096;
|
||||
//var id = '8678661352471920640';
|
||||
|
||||
var tests = [
|
||||
[ -13.846153846153854, -41.53846153846155 ] // face 0
|
||||
, [ -13.846153846153854, 96.92307692307692 ] // face 1
|
||||
, [ 41.53846153846153, -124.61538461538463 ] // face 2
|
||||
, [ -152.30769230769232, 41.53846153846153 ] // face 3
|
||||
, [ -152.30769230769232, 69.23076923076923 ] // face 4
|
||||
, [ -124.61538461538463, -69.23076923076924 ] // face 5
|
||||
];
|
||||
|
||||
tests.forEach(function (pair, i) {
|
||||
var lat = pair[0];
|
||||
var lng = pair[1];
|
||||
|
||||
console.log('');
|
||||
console.log('');
|
||||
console.log('FACE', i);
|
||||
|
||||
console.log('');
|
||||
console.log('Lat/Lng');
|
||||
console.log('=', lat + ',' + lng);
|
||||
|
@ -16,35 +33,29 @@ console.log('=', lat + ',' + lng);
|
|||
// Lat / Lng to XYZ
|
||||
//
|
||||
var nS2LatLng = new nS2.S2LatLng(lat, lng).toPoint();
|
||||
var nXyz = [ nS2LatLng.x(), nS2LatLng.y(), nS2LatLng.z() ];
|
||||
//var oXyz = oS2.LatLngToXYZ({ lat: lat, lng: lng });
|
||||
var jXyz = jS2.LatLngToXYZ({ lat: lat, lng: lng });
|
||||
//var nXyz = [ nS2LatLng.x(), nS2LatLng.y(), nS2LatLng.z() ];
|
||||
//var jXyz = jS2.LatLngToXYZ({ lat: lat, lng: lng });
|
||||
/*
|
||||
console.log('');
|
||||
console.log('XYZ');
|
||||
console.log('=', nXyz);
|
||||
//console.log('o', oXyz);
|
||||
console.log('j', jXyz);
|
||||
*/
|
||||
|
||||
|
||||
var nCell = new nS2.S2CellId(nS2LatLng).parent(15);
|
||||
//var oCell = oS2.S2Cell.FromLatLng({ lat: lat, lng: lng }, 15);
|
||||
var jCell = jS2.S2Cell.FromLatLng({ lat: lat, lng: lng }, 15);
|
||||
/*
|
||||
console.log('');
|
||||
console.log('F,IJ,L');
|
||||
//console.log('=', cellN);
|
||||
//console.log('o', oCell.toString());
|
||||
console.log('j', jCell.toString());
|
||||
*/
|
||||
|
||||
var nKey = nCell.toString();
|
||||
//var oQuad = oCell.getFaceAndQuads();
|
||||
//var oKey = oQuad[0] + '/' + oQuad[1].join('');
|
||||
var jQuad = jCell.getFaceAndQuads();
|
||||
var jKey = jQuad[0] + '/' + jQuad[1].join('');
|
||||
console.log('');
|
||||
console.log('Quadkey');
|
||||
console.log('=', nKey);
|
||||
//console.log('o', oKey);
|
||||
console.log('j', jKey);
|
||||
|
||||
//var nCellId = new nS2.S2CellId(id);
|
||||
//console.log(nCellId.toLatLng().toString());
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue