def test_calculate_land_to_grid_distance(self): """WindEnergy: testing 'point_to_polygon_distance' function.""" from natcap.invest import wind_energy # Setup parameters for creating polygon and point shapefiles fields = {'vec_id': 'int'} attr_pt = [{'vec_id': 1}, {'vec_id': 2}, {'vec_id': 3}, {'vec_id': 4}] attr_poly = [{'vec_id': 1}, {'vec_id': 2}] srs = sampledata.SRS_WILLAMETTE pos_x = srs.origin[0] pos_y = srs.origin[1] poly_geoms = { 'poly_1': [(pos_x + 200, pos_y), (pos_x + 250, pos_y), (pos_x + 250, pos_y - 100), (pos_x + 200, pos_y - 100), (pos_x + 200, pos_y)], 'poly_2': [(pos_x, pos_y - 150), (pos_x + 100, pos_y - 150), (pos_x + 100, pos_y - 200), (pos_x, pos_y - 200), (pos_x, pos_y - 150)]} poly_geometries = [ Polygon(poly_geoms['poly_1']), Polygon(poly_geoms['poly_2'])] poly_file = os.path.join(self.workspace_dir, 'poly_shape.shp') # Create polygon shapefile to use as testing input poly_vector_path = pygeoprocessing.testing.create_vector_on_disk( poly_geometries, srs.projection, fields, attr_poly, vector_format='ESRI Shapefile', filename=poly_file) point_geometries = [ Point(pos_x, pos_y), Point(pos_x + 100, pos_y), Point(pos_x, pos_y - 100), Point(pos_x + 100, pos_y - 100)] point_file = os.path.join(self.workspace_dir, 'point_shape.shp') # Create point shapefile to use as testing input point_vector_path = pygeoprocessing.testing.create_vector_on_disk( point_geometries, srs.projection, fields, attr_pt, vector_format='ESRI Shapefile', filename=point_file) target_point_vector_path = os.path.join( self.workspace_dir, 'target_point.shp') # Call function to test field_name = 'L2G' wind_energy._calculate_land_to_grid_distance( point_vector_path, poly_vector_path, field_name, target_point_vector_path) exp_results = [.15, .1, .05, .05] point_vector = gdal.OpenEx(target_point_vector_path) point_layer = point_vector.GetLayer() field_index = point_layer.GetFeature(0).GetFieldIndex(field_name) for i, point_feat in enumerate(point_layer): result_val = point_feat.GetField(field_index) pygeoprocessing.testing.assert_close(result_val, exp_results[i])
def test_calculate_land_to_grid_distance(self): """WindEnergy: testing 'point_to_polygon_distance' function.""" from natcap.invest import wind_energy # Setup parameters for creating polygon and point shapefiles fields = {'vec_id': ogr.OFTInteger} attr_pt = [{'vec_id': 1}, {'vec_id': 2}, {'vec_id': 3}, {'vec_id': 4}] attr_poly = [{'vec_id': 1}, {'vec_id': 2}] srs = osr.SpatialReference() srs.ImportFromEPSG(3157) projection_wkt = srs.ExportToWkt() origin = (443723.127327877911739, 4956546.905980412848294) pos_x = origin[0] pos_y = origin[1] poly_geoms = { 'poly_1': [(pos_x + 200, pos_y), (pos_x + 250, pos_y), (pos_x + 250, pos_y - 100), (pos_x + 200, pos_y - 100), (pos_x + 200, pos_y)], 'poly_2': [(pos_x, pos_y - 150), (pos_x + 100, pos_y - 150), (pos_x + 100, pos_y - 200), (pos_x, pos_y - 200), (pos_x, pos_y - 150)] } poly_geometries = [ Polygon(poly_geoms['poly_1']), Polygon(poly_geoms['poly_2']) ] poly_vector_path = os.path.join(self.workspace_dir, 'poly_shape.shp') # Create polygon shapefile to use as testing input pygeoprocessing.shapely_geometry_to_vector( poly_geometries, poly_vector_path, projection_wkt, 'ESRI Shapefile', fields=fields, attribute_list=attr_poly, ogr_geom_type=ogr.wkbPolygon) point_geometries = [ Point(pos_x, pos_y), Point(pos_x + 100, pos_y), Point(pos_x, pos_y - 100), Point(pos_x + 100, pos_y - 100) ] point_vector_path = os.path.join(self.workspace_dir, 'point_shape.shp') # Create point shapefile to use as testing input pygeoprocessing.shapely_geometry_to_vector(point_geometries, point_vector_path, projection_wkt, 'ESRI Shapefile', fields=fields, attribute_list=attr_pt, ogr_geom_type=ogr.wkbPoint) target_point_vector_path = os.path.join(self.workspace_dir, 'target_point.shp') # Call function to test field_name = 'L2G' wind_energy._calculate_land_to_grid_distance(point_vector_path, poly_vector_path, field_name, target_point_vector_path) exp_results = [.15, .1, .05, .05] point_vector = gdal.OpenEx(target_point_vector_path) point_layer = point_vector.GetLayer() field_index = point_layer.GetFeature(0).GetFieldIndex(field_name) for i, point_feat in enumerate(point_layer): result_val = point_feat.GetField(field_index) numpy.testing.assert_allclose(result_val, exp_results[i])