s2-geometry (JavaScript/ES5.1)
| Sponsored by ppl
A pure JavaScript/ES5.1 port of Google/Niantic's S2 Geometry library (as used by Ingress, Pokemon GO)
Currently contains basic support for S2Cell
|
Face 2
Orientation A
The North Pole (and Canada / Europe)
| |
Face 0
Orientation A
Africa
|
Face 1
Orientation D
Asia
|
Face 3
Orientation D
Nothing (and Australia)
|
Face 4
Orientation A
The Americas (and Provo, UT)
|
| | |
Face 5
Orientation D
Antarctica
|
Where is this being used?
Simple Examples
'use strict';
var S2 = require('s2-geometry').S2;
var lat = 40.2574448;
var lng = -111.7089464;
var level = 15;
var key = S2.latLngToKey(lat, lng, level);
var id = S2.keyToId(key);
var key = S2.idToKey(id);
var latlng = S2.keyToLatLng(key);
var latlng = S2.idToLatLng(id);
var neighbors = S2.latLngToNeighborKeys(lat, lng, level);
var nextKey = S2.nextKey(key);
var prevKey = S2.prevKey(key);
var backTenKeys = S2.stepKey(key, -10);
Previous and Next
You can get the previous and next S2CellId from any given Key:
- Convert from Lat/Lng to Key (Face and Hilbert Curve Quadtree)
- Get the Previous or Next Key
- Convert the Key to an Id (uint64 string)
var key = S2.latLngToKey(40.2574448, -111.7089464, 15);
var id = S2.keyToId(key);
var nextKey = S2.nextKey(key);
var nextId = S2.keyToId(nextKey);
var prevKey = S2.prevKey(key);
var prevId = S2.keyToId(prevKey);
var backTenKeys = S2.stepKey(key, -10);
console.log(prevKey);
console.log(key);
console.log(nextKey);
console.log(nextId);
convert Cell Id to Hilbert Curve Quad Tree
Convert from base 10 (decimal) S2 Cell Id
to base 4 quadkey
(aka hilbert curve quadtree id)
Example '4/032212303102210' becomes '9749618446378729472'
'use strict';
var quadkey = '4/032212303102210'
var parts = quadkey.split('/');
var face = parts[0];
var position = parts[1];
var level = '032212303102210'.length;
var cellId = S2.facePosLevelToId(face, position, level);
console.log(cellId);
Convert from hilbert quadtree id to s2 cell id:
Example '9749618446378729472' becomes '4/032212303102210'
'use strict';
var cellId = '9749618446378729472';
var hilbertQuadkey = S2.idToKey(cellId);
console.log(hilbertQuadkey);
Convert Key and Id to LatLng
var latlng = S2.keyToLatLng('4/032212303102210');
var latlng = S2.idToLatLng('9749618446378729472');