Changeset 1101
- Timestamp:
- Mar 17, 2005, 2:38:40 PM (20 years ago)
- Location:
- inundation/ga/storm_surge/pyvolution
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
inundation/ga/storm_surge/pyvolution/combine_pts.py
r1064 r1101 8 8 Geoscience Australia, 2005. 9 9 """ 10 from util import outside_polygon 10 from util import outside_polygon, inside_polygon 11 11 from Numeric import take, concatenate 12 import time 12 13 13 14 import exceptions … … 16 17 def combine_rectangular_points_files(fine_points_file, 17 18 coarse_points_file, 18 output_points_file): 19 output_points_file, 20 verbose = False): 19 21 20 22 from load_mesh.loadASCII import load_points_file, extent, point_atts2array, write_pts, add_point_dictionaries,take_points … … 22 24 23 25 # load fine points file 26 if verbose:print "loading Point files" 24 27 try: 25 28 fine = load_points_file(fine_points_file,delimiter = ',') … … 35 38 coarse = load_points_file(coarse_points_file, 36 39 delimiter = ' ') 40 41 if verbose:print "doing other stuff" 37 42 # convert to Numeric 38 43 fine = point_atts2array(fine) … … 43 48 if not fine['attributelist'].keys() == coarse['attributelist'].keys(): 44 49 raise AttributeError 50 45 51 # set points to the same geo ref - say the fine points geo ref 46 52 if fine.has_key('geo_reference')and not fine['geo_reference'] is None: … … 54 60 # find out_points - coarse points outside of fine points extent 55 61 56 #FIXME the closed doesn't seem to work here, 57 #though it works in the test case 62 if verbose: 63 print "starting outside_polygon" 64 t0 = time.time() 58 65 outside_coarse_indices = outside_polygon(coarse['pointlist'], 59 66 extent,closed=True) 67 if verbose: 68 print "Points outside determined" 69 print 'That took %.2f seconds' %(time.time()-t0) 60 70 61 71 # Remove points from the coarse data … … 63 73 64 74 # add fine points and out_points 75 if verbose:print "Adding points" 65 76 combined = add_point_dictionaries(fine, coarse) 66 77 67 78 # save 79 if verbose:print "writing points" 68 80 write_pts(output_points_file, combined) 69 81 82 def add_points_files(fine_points_file, 83 coarse_points_file, 84 output_points_file, 85 verbose = False): 86 87 from load_mesh.loadASCII import load_points_file, extent, point_atts2array, write_pts, add_point_dictionaries,take_points 88 89 90 # load fine points file 91 if verbose:print "loading Point files" 92 try: 93 fine = load_points_file(fine_points_file,delimiter = ',') 94 except SyntaxError,e: 95 fine = load_points_file(fine_points_file,delimiter = ' ') 96 97 98 # load course points file 99 try: 100 coarse = load_points_file(coarse_points_file, 101 delimiter = ',') 102 except SyntaxError,e: 103 coarse = load_points_file(coarse_points_file, 104 delimiter = ' ') 105 106 if verbose:print "doing other stuff" 107 # convert to Numeric 108 fine = point_atts2array(fine) 109 coarse = point_atts2array(coarse) 110 111 #check that the attribute info is the same 112 #FIXME is not sorting this a problem? 113 if not fine['attributelist'].keys() == coarse['attributelist'].keys(): 114 raise AttributeError 115 116 # set points to the same geo ref - say the fine points geo ref 117 if fine.has_key('geo_reference')and not fine['geo_reference'] is None: 118 if coarse.has_key('geo_reference'): 119 coarse['pointlist'] = \ 120 fine['geo_reference'].change_points_geo_ref(coarse['pointlist'], 121 points_geo_ref=coarse['geo_reference']) 122 123 # add fine points and out_points 124 if verbose:print "Adding points" 125 combined = add_point_dictionaries(fine, coarse) 126 127 # save 128 if verbose:print "writing points" 129 write_pts(output_points_file, combined) 130 131 def reduce_points_to_mesh_extent(points_file, 132 mesh_file, 133 output_points_file, 134 verbose = False): 135 136 from load_mesh.loadASCII import load_points_file, extent, point_atts2array, write_pts, add_point_dictionaries,take_points, mesh_file_to_mesh_dictionary 137 138 139 # load points file 140 try: 141 points = load_points_file(points_file,delimiter = ',') 142 except SyntaxError,e: 143 points = load_points_file(points_file,delimiter = ' ') 144 145 # load mesh file 146 mesh = mesh_file_to_mesh_dictionary(mesh_file) 147 148 # get extent of mesh 149 extent = extent(mesh['vertices']) 150 #print "extent",extent 151 # set points to the same geo ref - the points geo ref 152 if points.has_key('geo_reference')and not points['geo_reference'] is None: 153 if mesh.has_key('geo_reference'): 154 extent = \ 155 points['geo_reference'].change_points_geo_ref(extent, 156 points_geo_ref=mesh['geo_reference']) 157 #print "extent",extent 158 159 #get a list of in point indexes 160 #FIXME closed doesn't seems to work here. 161 inside_indices = inside_polygon(points['pointlist'], 162 extent,closed=True) 163 #create a list of in points 164 points = take_points(points, inside_indices) 165 166 # save the list, along with geo-ref 167 write_pts(output_points_file,points) 168 70 169 #------------------------------------------------------------- 71 170 if __name__ == "__main__": -
inundation/ga/storm_surge/pyvolution/test_combine_pts.py
r1064 r1101 27 27 import tempfile 28 28 import os 29 29 30 30 31 # create a fine .pts file … … 63 64 results = load_points_file(out_file, 64 65 delimiter = ',') 66 answer = [[2.0, 0.0], 67 [0.0, 1.0], 68 [0.0, 4.0], 69 [4.0, 4.0], 70 [4.0, 1.0]] 65 71 #print "results",results 66 assert allclose(results['pointlist'], [[4.0, 3.0], 67 [2.0, 0.0],68 [0.0, 1.0],69 [0.0, 4.0],70 [4.0, 4.0],71 [4.0, 1.0]])72 assert allclose(results['attributelist']['sonic'], [ 3.,-2.,72 #print "answer",answer 73 74 self.failUnless(len(results['pointlist']) == len(answer), 75 'final number of points wrong. failed.') 76 77 assert allclose(results['pointlist'], answer) 78 assert allclose(results['attributelist']['sonic'], [ -2., 73 79 1., 4., 74 80 8., 5.]) 75 assert allclose(results['attributelist']['elevation'],[ 30.,-20.,81 assert allclose(results['attributelist']['elevation'],[ -20., 76 82 10., 40., 77 83 80., 50.]) 84 85 self.failUnless(results['geo_reference'] == fine_dict['geo_reference'], 86 ' failed.') 87 #clean up 88 os.remove(out_file) 89 90 def test_combine_rectangular_points_filesII(self): 91 from load_mesh.loadASCII import write_pts 92 import tempfile 93 import os 94 95 # create a fine .pts file 96 fine_dict = {} 97 fine_dict['pointlist']=[[0,1],[0,4],[4,4],[4,1],[3,1],[2,2],[1,3],[3,4]] 98 att_dict = {} 99 fine_dict['attributelist'] = att_dict 100 fine_dict['geo_reference'] = Geo_reference(56,2.0,1.0) 101 102 fine_file = tempfile.mktemp(".pts") 103 write_pts(fine_file, fine_dict) 104 105 106 # create a coarse .pts file 107 coarse_dict = {} 108 coarse_dict['pointlist']=[[0,1],[0,0],[0.5,0.5],[1,1], 109 [1.5,1.5],[2,1],[0,-2],[100,10], 110 [-20,4],[-50,5],[60,70]] 111 att_dict = {} 112 coarse_dict['attributelist'] = att_dict 113 coarse_dict['geo_reference'] = Geo_reference(56,4.0,3.0) 114 115 coarse_file = tempfile.mktemp(".pts") 116 write_pts(coarse_file, coarse_dict) 117 118 out_file = tempfile.mktemp(".pts") 119 120 combine_rectangular_points_files(fine_file,coarse_file,out_file) 121 122 #clean up 123 #os.remove(fine_file) 124 #os.remove(coarse_file) 125 126 results = load_points_file(out_file, 127 delimiter = ',') 128 answer = [[2.0, 0.0], 129 [102.,12.], 130 [-18.,6.], 131 [-48.,7.], 132 [62.,72.], 133 [0.0, 1.0], 134 [0.0, 4.0], 135 [4.0, 4.0], 136 [4.0, 1.0], 137 [3.,1.], 138 [2.,2.], 139 [1.,3.], 140 [3.,4.]] 141 #print "results",results['pointlist'] 142 #print "answer",answer 143 #print "len(results['pointlist']",len(results['pointlist']) 144 #print "len(answer)",len(answer) 145 146 self.failUnless(len(results['pointlist']) == len(answer), 147 'final number of points wrong. failed.') 148 assert allclose(results['pointlist'], answer) 78 149 79 150 self.failUnless(results['geo_reference'] == fine_dict['geo_reference'], … … 123 194 os.remove(fine_file) 124 195 os.remove(coarse_file) 196 197 def test_reduce_points_to_mesh_extent(self): 198 from load_mesh.loadASCII import write_pts, export_mesh_file 199 import tempfile 200 import os 201 x_origin = -45435345. 202 y_origin = 433432432. 203 # create a fine .pts file 204 fine_dict = {} 205 fine_dict['pointlist']=[[1.,1.], 206 [1.,7.], 207 [7.,1.], 208 [11.,11.], 209 [7.,8.], 210 [8.,8.], 211 [9.,8.]] 212 att_dict = {} 213 att_dict['elevation'] = [10,40,80,50,78,78,45] 214 att_dict['sonic'] = [1,4,8,5,56,34,213] 215 fine_dict['attributelist'] = att_dict 216 fine_dict['geo_reference'] = Geo_reference(56,x_origin,y_origin) 217 218 points_file = tempfile.mktemp(".pts") 219 write_pts(points_file, fine_dict) 220 221 222 # create a coarse .pts file 223 mesh = {} 224 mesh['vertices']=[[0,0], 225 [0,3], 226 [3,3], 227 [3,0], 228 [1,2] 229 ] 230 mesh['vertex_attributes']=[[], 231 [], 232 [], 233 [], 234 [] 235 ] 236 mesh['geo_reference'] = Geo_reference(56,x_origin+7.,y_origin+7.) 237 238 mesh_file = tempfile.mktemp(".tsh") 239 export_mesh_file(mesh_file, mesh) 240 241 out_file = tempfile.mktemp(".pts") 242 243 reduce_points_to_mesh_extent(points_file,mesh_file,out_file) 244 245 #clean up 246 #os.remove(fine_file) 247 #os.remove(coarse_file) 248 249 results = load_points_file(out_file, 250 delimiter = ',') 251 answer = [ 252 [7.,8.], 253 [8.,8.], 254 [9.,8.]] 255 #print "results",results['pointlist'] 256 #print "answer",answer 257 258 self.failUnless(len(results['pointlist']) == len(answer), 259 'final number of points wrong. failed.') 260 assert allclose(results['pointlist'],answer) 261 262 answer = [78., 78.,45.] 263 264 self.failUnless(len(results['attributelist']['elevation']) == len(answer), 265 'final number of points wrong. failed.') 266 assert allclose(results['attributelist']['elevation'], answer) 267 268 #clean up 269 os.remove(out_file) 270 271 #FIXME do test for add points files 125 272 126 273 #------------------------------------------------------------- 127 274 if __name__ == "__main__": 128 275 suite = unittest.makeSuite(Test_combine_pts,'test') 129 130 #suite = unittest.makeSuite(Test_Least_Squares,'test_fit_to_msh_netcdf_fileII') 131 #suite = unittest.makeSuite(Test_Least_Squares,'test_fit_to_mesh_fileII') 276 #suite = unittest.makeSuite(Test_combine_pts,'test_reduce_points_to_mesh_extent') 132 277 runner = unittest.TextTestRunner(verbosity=1) 133 278 runner.run(suite)
Note: See TracChangeset
for help on using the changeset viewer.