def get_spatial_collection_two_geometries(self, pt=None): pt = pt or Point(1, 2) record1 = {'geom': pt, 'properties': {'ID': 4, 'NAME': 'hello'}} record2 = {'geom': pt, 'properties': {'ID': 5, 'NAME': 'another'}} sd1 = SpatialDimension.from_records([record1], uid='ID') sd2 = SpatialDimension.from_records([record2], uid='ID') sc = SpatialCollection() field = self.get_field() sc.add_field(field, ugeom=sd1) sc.add_field(field, ugeom=sd2) return sc
def get_vector(): rowv = [39.4, 39.8] colv = [-105.4, -105.2] proj_src = "+proj=longlat +a=6370997 +b=6370997 +towgs84=0,0,0,0,0,0,0 +no_defs " proj_dst = "+proj=lcc +lat_1=30 +lat_2=60 +lat_0=47.5 +lon_0=-97 +x_0=3325000 +y_0=2700000 +ellps=WGS84 +units=m +no_defs " row = VectorDimension(value=rowv) col = VectorDimension(value=colv) grid = SpatialGridDimension(row=row, col=col) crs = CoordinateReferenceSystem(proj4=proj_src) sdim = SpatialDimension(grid=grid, crs=crs) sdim.write_fiona('/tmp/original.shp', target='point') print '-- original --' print 'row: {0}'.format(sdim.grid.value[0].flatten().tolist()) print 'col: {0}'.format(sdim.grid.value[1].flatten().tolist()) print '' crs_dst = CoordinateReferenceSystem(proj4=proj_dst) sdim.write_fiona('/tmp/transformed.shp', target='point') sdim.update_crs(crs_dst) print '-- transformed --' print 'row: {0}'.format(sdim.grid.value[0].flatten().tolist()) print 'col: {0}'.format(sdim.grid.value[1].flatten().tolist())
def _get_field_(self, format_time=None): # todo: option to pass select_ugid # todo: option for time dimension and time subsetting # todo: remove format_time option - there for compatibility with the netCDF driver from ocgis import SpatialDimension ds = self.open() try: records = list(ds) sdim = SpatialDimension.from_records(records, crs=self.get_crs()) # do not load the properties - they are transformed to variables in the case of the values put into fields sdim.properties = None vc = VariableCollection() for xx in self.rd: value = np.array([yy['properties'][xx['variable']] for yy in records]).reshape(1, 1, 1, 1, -1) var = Variable(name=xx['variable'], alias=xx['alias'], units=xx['units'], conform_units_to=xx['units'], value=value) vc.add_variable(var, assign_new_uid=True) field = Field(spatial=sdim, variables=vc, name=self.rd.name) return field finally: self.close(ds)
def test_add_field(self): sc = SpatialCollection() field = self.get_field() sc.add_field(field) self.assertIsInstance(sc[1][field.name], Field) with self.assertRaises(ValueError): sc.add_field(field) field2 = deepcopy(field) field2.name = 'another' sc.add_field(field2) self.assertIsInstance(sc[1]['another'], Field) sc.add_field(field, name='hiding') self.assertIsInstance(sc[1]['hiding'], Field) self.assertIsNone(sc.ugeom[1]) record = {'geom': Point(1, 2), 'properties': {'ID': 4, 'NAME': 'hello'}} schema = {'geometry': 'Point', 'properties': {'ID': 'int', 'NAME': 'str'}} sd = SpatialDimension.from_records([record], schema, uid='ID') sc.add_field(field, ugeom=sd) self.assertEqual(sc.keys(), [1, 4]) self.assertEqual(sc.ugeom[4].geom.point.value[0, 0], record['geom']) sc = SpatialCollection() sc.add_field(field) self.assertEqual(field.uid, 1) field.uid = 10 sc = SpatialCollection() sc.add_field(field) self.assertEqual(field.uid, 10) field2 = deepcopy(field) field2.spatial.crs = Spherical() with self.assertRaises(ValueError): # coordinate systems must be same sc.add_field(field2, name='hover') sc = SpatialCollection() sc.add_field(None, name='food') self.assertIsNone(sc[1]['food'])
def get_sdim(geom, props, crs): record = {'geom': geom, 'properties': OrderedDict(props)} return SpatialDimension.from_records([record], crs=crs)