SimpleDB#
In most cases we set the default type of spatial database to SimpleDB
.
It is very flexible and can represent spatial variations from uniform properties with a single point to arbitrarily complex with irregularly spaced points.
This spatial database does not associate any topology with the points.
Although multiple values can be specified at each point with more than one value included in a search query, the interpolation of each value will be done independently.
A SimpleDB
can specify spatial variations over zero, one, two, and three dimensions.
Zero dimensional (data dimension is 0) variations correspond to uniform values.
One-dimensional spatial variations (data dimension is 1) correspond to piece-wise linear variations, which need not coincide with coordinate axes.
Likewise, two-dimensional spatial variations (data dimension is 2) correspond to variations on a planar surface (which need not coincide with the coordinate axes).
Three-dimensional spatial variations (data dimension is 3) correspond to variations over a volume.
In one, two, or three dimensions, queries can use a ``nearest value’’ search or linear interpolation.
SimpleDB
uses a simple ASCII file to specify the variation of values in space.
The file format is described in SimpleDB ASCII Format.
Pyre User Interface
Examples#
We create a piece-wise linear variation in density along the y coordinate axis using 4 irregularly spaced points from 0.0 to -100.0.
You can create a SimpleDB
data file manually in a text editor or generate the file using a Python script.
In most cases, using a Python script is easier because you do not have to worry about the format of the file.
#SPATIAL.ascii 1
SimpleDB {
// Number of fields specified in the spatial database.
num-values = 1
value-names = density
value-units = kg/m**3
// Number of locations where values are specified.
num-locs = 4
// Topology of the locations
// 0: 1 point
// 1: points on a line
// 2: points on a surface
// 3: points in a volume
data-dim = 1
// Spatial dimension
space-dim = 2
// Coordinate system for the points
cs-data = cartesian {
to-meters = 1
space-dim = 2
}
}
0.000000e+00 0.000000e+00 2.500000e+03
0.000000e+00 -1.000000e+01 2.550000e+03
0.000000e+00 -4.000000e+01 2.800000e+03
0.000000e+00 -1.000000e+02 3.000000e+03
import numpy
from spatialdata.spatialdb.SimpleIOAscii import createWriter
from spatialdata.geocoords.CSCart import CSCart
# Create a 2D Cartesian coordinate system.
cs = CSCart()
cs.spaceDim = 2
cs._configure()
# Create the coordinates of the points defining the spatial variation.
# Because the variation is along the y-direction, we use x=0.0 for simplicity.
points = numpy.array([
[0.0, 0.0],
[0.0, -10.0]
[0.0, -40.0],
[0.0, -100.0],
])
density = numpy.array([2500.0, 2550.0, 2800.0, 3000.0])
# Create a dictionary containing the data to write to the `SimpleDB` data file.
data = {
"points": points,
"coordsys": cs,
"data_dim": 1,
"values": [{
"name": "density",
"units": "kg/m**3",
"data": density,
}]
}
# Create the writer object and write the data file.
writer = createWriter("density.spatialdb")
writer.write(data)