Crystal Lang S2 Cells

CI

Maps Lat Lon coordinates to S2 Cells. Useful for things like storing points in InfluxDB

Installation

  1. Add the dependency to your shard.yml:

    dependencies:
      s2_cells:
        github: spider-gazelle/s2_cells
  2. Run shards install

Usage


require "s2_cells"

# index a location in your database
lat = -33.870456
lon = 151.208889
level = 24

cell = S2Cells.at(lat, lon).parent(level)
token = cell.to_token # => "3ba32f81"
# or
id = cell.id # => Int64

# find all the indexes in an area
p1 = S2Cells::LatLng.from_degrees(33.0, -122.0)
p2 = S2Cells::LatLng.from_degrees(33.1, -122.1)
cells = S2Cells.in(p1, p2) # => Array(CellId)

# then can search your index:
# loc_index = ANY(cells.map(&.id))