Пример #1
0
 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
Пример #2
0
    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)
Пример #3
0
    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'])
Пример #4
0
 def get_sdim(geom, props, crs):
     record = {'geom': geom, 'properties': OrderedDict(props)}
     return SpatialDimension.from_records([record], crs=crs)