Mercurial > hg > GlobalNeighbors
view globalneighbors/grid.py @ 5:7e27e874655b
test a larger grid + move distance insertion to its own function
author | Jeff Hammel <k0scist@gmail.com> |
---|---|
date | Sat, 24 Jun 2017 15:16:10 -0700 |
parents | 1b94f3bf97e5 |
children | 254195d0bac2 |
line wrap: on
line source
import math class LatLonGrid(object): lat_range = (-90., 90) lon_range = (-180., 180) # however, this wraps around def __init__(self, nlat, nlon): self.n = (nlat, nlon) self.range = (self.lat_range, self.lon_range) self.d = ((self.lat_range[-1] - self.lat_range[0])/self.n[0], (self.lon_range[-1] - self.lon_range[0])/self.n[1]) self.create_grid() def create_grid(self): self.grid = [] for _ in xrange(self.n[0]): self.grid.append([set() for _ in xrange(self.n[-1])]) def add(self, geoid, lat, lon): latlon = (lat, lon) self[self.index(lat, lon)].add(geoid) def __getitem__(self, index): """ index -- 2-tuple or list of i and j indices """ return self.grid[index[0]][index[1]] def index(self, lat, lon): return [int(math.floor((val-self.range[i][0])/self.d[i])) for i, val in enumerate((lat, lon))] def neighbors(self, i, j): """ return neighbors of points i, j """ imat = [] jmat = [] # latitude if i: imat.append(i-1) raise NotImplementedError('TODO')