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_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)