s2-geometry (JavaScript/ES5.1) ====================== 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 Face 2
The North Pole
(and Canada / Europe)
Face 0
Orientation A Face 0
Africa
Face 1
Orientation D Face 1
Asia
Face 3
Orientation D Face 3
Nothing
(and Australia)
Face 4
Orientation A Face 4
The Americas
(and Provo, UT)
Face 5
Orientation D Face 5
Antarctica
Where is this being used? --------------------- * [pokemap-webapp](https://github.com/Daplie/pokemap-webapp) * [node-pokemap](https://github.com/Daplie/node-pokemap) * [Pokemon-GO-node-api](https://github.com/Daplie/Pokemon-GO-node-api) Simple Examples --------------- ```javascript 'use strict'; var S2 = require('s2-geometry').S2; var lat = 40.2574448; var lng = -111.7089464; var level = 15; // // Convert from Lat / Lng // var key = S2.latLngToKey(lat, lng, level); // '4/032212303102210' // // Convert between Hilbert Curve Quadtree Key and S2 Cell Id // var id = S2.keyToId(key); // '9749618446378729472' var key = S2.idToKey(id); // '9749618446378729472' // // Convert between Quadkey and Id // var latlng = S2.keyToLatLng(key); var latlng = S2.idToLatLng(id); // // Neighbors // var neighbors = S2.latLngToNeighborKeys(lat, lng, level); // [ keyLeft, keyDown, keyRight, keyUp ] // // Previous, Next, and Step // 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: 1. Convert from Lat/Lng to Key (Face and Hilbert Curve Quadtree) 2. Get the Previous or Next Key 3. Convert the Key to an Id (uint64 string) ```javascript var key = S2.latLngToKey(40.2574448, -111.7089464, 15); // '4/032212303102210' var id = S2.keyToId(key); // '9749618446378729472' 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); // See it console.log(prevKey); // '4/032212303102203' console.log(key); // '4/032212303102210' console.log(nextKey); // '4/032212303102211' 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' ```javascript 'use strict'; var quadkey = '4/032212303102210' var parts = quadkey.split('/'); var face = parts[0]; // 4 var position = parts[1]; // '032212303102210'; var level = '032212303102210'.length; // 15 var cellId = S2.facePosLevelToId(face, position, level); console.log(cellId); ``` Convert from hilbert quadtree id to s2 cell id: Example '9749618446378729472' becomes '4/032212303102210' ```javascript 'use strict'; var cellId = '9749618446378729472'; var hilbertQuadkey = S2.idToKey(cellId); console.log(hilbertQuadkey); ``` Convert Key and Id to LatLng --------------------- ```javascript var latlng = S2.keyToLatLng('4/032212303102210'); var latlng = S2.idToLatLng('9749618446378729472'); ```