Grids#
Load a grid#
Grids are made using a Java utility called GeoTessBuilder
. Loading them into
memory from file is the standard constructor in PyGeoTess. Viewing grid metadata is as simple as using print
or str
.
from geotess import Grid
grid = Grid('geotess/data/geotess_grid_16000.geotess')
print(grid)
GeoTessGrid
gridID = 4FD3D72E55EFA8E13CA096B4C8795F03
memory : 0.11776 MB
input Grid File : geotess/data/geotess_grid_16000.geotess
generated by software version : GridBuilder 0.0.0 Fri May 25 11:34:59 MDT 2012
nTessellations = 1
nLevels = 3
nVertices = 162
nTriangles = 420
Tess Level LevelID NTri First Last+1
0 0 0 20 0 20
0 1 1 80 20 100
0 2 2 320 100 420
Built-in grids#
The grids and models that GeoTess distributes are also part of PyGeoTess. The files are found in geotess/data
, but they are also pre-loaded into class instances. Here, we simply import the previous grid.
from geotess.data import grid_16000
print(grid_16000)
GeoTessGrid
gridID = 4FD3D72E55EFA8E13CA096B4C8795F03
memory : 0.11776 MB
input Grid File : geotess/data/geotess_grid_16000.geotess
generated by software version : GridBuilder 0.0.0 Fri May 25 11:34:59 MDT 2012
nTessellations = 1
nLevels = 3
nVertices = 162
nTriangles = 420
Tess Level LevelID NTri First Last+1
0 0 0 20 0 20
0 1 1 80 20 100
0 2 2 320 100 420
Vertices and triangles#
In PyGeoTess, Grid vertices are geocentric coordinates of points of intersection on a tessellation, and triangles are the three integer vertex indices that form a triangle in the tessellation. For a given grid, all vertices are accessible via the Grid.vertices
method, and the triangles (vertex associations) for a particular tessellation and level are gotten with the Grid.triangles
method.
vertices = grid.vertices()
triangles = grid.triangles(tess=0, level=2)
print("The first 10 vertices are:\n{}".format(vertices[:10]))
print("The first 10 triangles are:\n{}".format(triangles[:10]))
The first 10 vertices are:
[[ 0. 90. ]
[ 72. 26.71930078]
[ 0. 26.71930078]
[ 144. 26.71930078]
[-144. 26.71930078]
[ -72. 26.71930078]
[ 36. -26.71930078]
[ 108. -26.71930078]
[-180. -26.71930078]
[-108. -26.71930078]]
The first 10 triangles are:
[[42 43 44]
[12 44 43]
[13 42 44]
[14 43 42]
[42 45 46]
[ 0 46 45]
[14 42 46]
[13 45 42]
[43 47 48]
[ 1 48 47]]
Plotting grids#
The .vertices
and .triangles
methods above return arrays that are amenable
to plotting using Matplotlib’s
triplot
function. We’ll project first using Matplotlib
Basemap.
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
m = Basemap(projection='ortho',lat_0=45,lon_0=-100)
m.etopo()
x, y = m(vertices[:,0], vertices[:,1])
plt.triplot(vertices[:,0], vertices[:,1], triangles);
The cirularity of vertex longitudes makes plotting a bit wonky. Luckily,
Matplotlib has the tools
Triangulation
and
TriAnalyzer
to mask out these long, flat triangles from the plot.
from matplotlib.tri import Triangulation, TriAnalyzer
tri = Triangulation(x, y, triangles)
tri_an = TriAnalyzer(tri)
mask = tri_an.get_flat_tri_mask()
plt.triplot(x, y, triangles, mask=mask)
Not perfect, but not as messy.