Exemple #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
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())
Exemple #3
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)
Exemple #4
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'])
Exemple #5
0
 def get_sdim(geom, props, crs):
     record = {'geom': geom, 'properties': OrderedDict(props)}
     return SpatialDimension.from_records([record], crs=crs)