def parse_string(self,value): elements = value.split('|') try: elements = [float(e) for e in elements] ## switch geometry creation based on length. length of 2 is a point ## otherwise a bounding box if len(elements) == 2: geom = Point(elements[0],elements[1]) else: minx,miny,maxx,maxy = elements geom = Polygon(((minx,miny), (minx,maxy), (maxx,maxy), (maxx,miny))) if not geom.is_valid: raise(DefinitionValidationError(self,'Parsed geometry is not valid.')) ret = GeometryDataset(1,geom) self._bounds = elements except ValueError: self._shp_key = value ## get the select_ugid test value. try: test_value = self.select_ugid.value except AttributeError: test_value = self.select_ugid if test_value is None: select_ugid = None else: select_ugid = test_value ret = ShpDataset(value,select_ugid=select_ugid) return(ret)
def test_unwrap(self): sd = ShpDataset('state_boundaries') for axis in self.axes: w = Wrapper(axis=axis) for geom in sd.spatial.geom: new_geom = w.unwrap(geom) bounds = np.array(new_geom.bounds) self.assertFalse(np.any(bounds < axis))
def test_wrap(self): sd = ShpDataset('state_boundaries') for axis in self.axes: w = Wrapper(axis=axis) unwrapped = [w.unwrap(geom) for geom in sd.spatial.geom] for idx,unwrapped_geom in enumerate(unwrapped): new_geom = w.wrap(unwrapped_geom) self.assertFalse(unwrapped_geom.equals(new_geom)) self.assertTrue(sd.spatial.geom[idx].almost_equals(new_geom))
def test_load(self): sds = ShpDataset('state_boundaries') geom = sds.spatial.geom self.assertEqual(geom.shape, (51, )) self.assertEqual(sds.temporal, None) self.assertEqual(sds.level, None) ssds = sds[0] self.assertEqual(ssds.spatial.uid, 1)
def test_aggregate(self): rd = self.test_data.get_rd('cancm4_tas') ods = NcDataset(request_dataset=rd) sd = ShpDataset('state_boundaries') sd.spatial.unwrap_geoms() utah = sd[23].spatial.geom[0] ods = ods.get_subset(spatial_operation='clip', igeom=utah) ods.aggregate() self.assertEqual(ods.value.shape, (3650, 1, 1, 1)) self.assertEqual(ods.raw_value.shape, (3650, 1, 3, 3)) self.assertNotEqual(ods.spatial.vector.raw_weights.shape, ods.spatial.vector.weights.shape) self.assertEqual(ods.spatial.vector.uid[0], 1)
def test_subset(self): rds = [self.polar_stereographic, self.oblique_mercator] geom = ShpDataset('state_boundaries') dir_output = tempfile.mkdtemp() print(dir_output) for rd in rds: ops = ocgis.OcgOperations(dataset=rd, geom=geom, agg_selection=True, snippet=True, output_format='shp', dir_output=dir_output, prefix=os.path.split(rd.uri)[1]) ret = ops.execute() shutil.rmtree(dir_output)
def parse_string(self, value): elements = value.split('|') try: elements = [float(e) for e in elements] ## switch geometry creation based on length. length of 2 is a point ## otherwise a bounding box if len(elements) == 2: geom = Point(elements[0], elements[1]) else: minx, miny, maxx, maxy = elements geom = Polygon( ((minx, miny), (minx, maxy), (maxx, maxy), (maxx, miny))) if not geom.is_valid: raise (DefinitionValidationError( self, 'Parsed geometry is not valid.')) ret = GeometryDataset(1, geom) self._bounds = elements except ValueError: self._shp_key = value ## get the select_ugid test value. try: test_value = self.select_ugid.value except AttributeError: test_value = self.select_ugid if test_value is None: attr_filter = None else: attr_filter = {'ugid': test_value} ret = ShpDataset(value, attr_filter=attr_filter) # sc = ShpCabinet() # if value in sc.keys(): # self._shp_key = value # ## get the select_ugid test value. # try: # test_value = self.select_ugid.value # except AttributeError: # test_value = self.select_ugid # ## return the geometries # if test_value is None: # ret = sc.get_geoms(value) # else: # ret = sc.get_geoms(value,attr_filter={'ugid':test_value}) return (ret)
def test_iter_array(self): arrays = [ 1, [[1,2],[1,2]], np.array([1,2,3]), np.array(1), np.ma.array([1,2,3],mask=False), np.ma.array([[1,2],[3,4]],mask=[[True,False],[False,True]]), np.ma.array([[1,2],[3,4]],mask=True), ] _flag1 = [ True, False ] _flag2 = [ True, False ] for arr,flag1,flag2 in itertools.product(arrays,_flag1,_flag2): # try: for ret in iter_array(arr,use_mask=flag1,return_value=flag2): pass # except Exception as e: # print(arr,flag1,flag2) # import ipdb;ipdb.set_trace() arr = np.ma.array([1,2,3],mask=True) ret = list(iter_array(arr)) self.assertEqual(len(ret),0) arr = np.ma.array([1,2,3],mask=False) ret = list(iter_array(arr)) self.assertEqual(len(ret),3) values = np.random.rand(2,2,4,4) mask = np.random.random_integers(0,1,values.shape) values = np.ma.array(values,mask=mask) for idx in iter_array(values): self.assertFalse(values.mask[idx]) self.assertEqual(len(list(iter_array(values,use_mask=True))),len(values.compressed())) self.assertEqual(len(list(iter_array(values,use_mask=False))),len(values.data.flatten())) sd = ShpDataset('state_boundaries') ret = list(iter_array(sd.spatial.geom)) self.assertTrue(len(ret),51)
def test_geom(self): geom = make_poly((37.762, 38.222), (-102.281, -101.754)) g = definition.Geom(geom) self.assertEqual(type(g.value), GeometryDataset) g = definition.Geom(None) self.assertEqual(g.value, None) self.assertEqual(str(g), 'geom=None') g = definition.Geom('-120|40|-110|50') self.assertEqual(str(g), 'geom=-120.0|40.0|-110.0|50.0') g = definition.Geom('mi_watersheds') self.assertEqual(str(g), 'geom=mi_watersheds') geoms = ShpDataset('mi_watersheds') g = definition.Geom(geoms) self.assertEqual(len(g.value), 60)
def test_write(self): sds = ShpDataset('state_boundaries') path = os.path.join(env.DIR_OUTPUT,'foo.shp') sds.write(path)
def test_write(self): sds = ShpDataset('state_boundaries') path = os.path.join(env.DIR_OUTPUT, 'foo.shp') sds.write(path)
def test_filter(self): sds = ShpDataset('state_boundaries', attr_filter={'ugid': [20]}) self.assertTrue(sds.spatial.geom.shape, (1, ))
def values(self): california = ShpDataset('state_boundaries', attr_filter={'ugid': [25]}) ne_ia_co = ShpDataset('state_boundaries', attr_filter={'ugid': [14, 16, 32]}) return ([california, ne_ia_co, None])
def california(self): ret = ShpDataset('state_boundaries', select_ugid=[25]) return (ret)
def california(self): ret = ShpDataset('state_boundaries',attr_filter={'ugid':[25]}) return(ret)
def nebraska(self): geom = ShpDataset('state_boundaries',select_ugid=[16]) return(geom)