def test_from_wkb(): expected = pygeos.points(1, 1) actual = pygeos.from_wkb(POINT11_WKB) assert pygeos.equals(actual, expected)
def test_from_wkb_none(): # None propagates assert pygeos.from_wkb(None) is None
def test_from_wkb_exceptions(): with pytest.raises(TypeError, match="Expected bytes, got int"): pygeos.from_wkb(1) with pytest.raises(pygeos.GEOSException): pygeos.from_wkb(b"\x01\x01\x00\x00\x00\x00")
def _convex_hull_all_single(self): return pg.from_wkb(convex_hull_all(self._active_geometry))
def test_to_wkb_point_empty_srid(): expected = pygeos.set_srid(empty_point, 4236) wkb = pygeos.to_wkb(expected, include_srid=True) actual = pygeos.from_wkb(wkb) assert pygeos.get_srid(actual) == 4236
def get_coordinates(arr): return pg.get_coordinates(pg.from_wkb(arr))
def time_read_from_wkb(self): pygeos.from_wkb(self.to_read_wkb)
def test_from_wkb_empty(wkt): wkb = pygeos.to_wkb(pygeos.Geometry(wkt)) geom = pygeos.from_wkb(wkb) assert pygeos.is_geometry(geom).all() assert pygeos.is_empty(geom).all() assert pygeos.to_wkb(geom) == wkb
def constructive(arr, operation, *args, **kwargs): if operation == 'boundary': geometries = pg.boundary(pg.from_wkb(arr), **kwargs) elif operation == 'buffer': geometries = pg.buffer(pg.from_wkb(arr), *args, **kwargs) elif operation == 'build_area': geometries = pg.build_area(pg.from_wkb(arr), **kwargs) elif operation == 'centroid': geometries = pg.centroid(pg.from_wkb(arr), **kwargs) elif operation == 'clip_by_rect': geometries = pg.clip_by_rect(pg.from_wkb(arr), *args, **kwargs) elif operation == 'convex_hull': geometries = pg.convex_hull(pg.from_wkb(arr), **kwargs) elif operation == 'delaunay_triangles': geometries = pg.delaunay_triangles(pg.from_wkb(arr), **kwargs) elif operation == 'envelope': geometries = pg.envelope(pg.from_wkb(arr), **kwargs) elif operation == 'extract_unique_points': geometries = pg.extract_unique_points(pg.from_wkb(arr), **kwargs) elif operation == 'make_valid': geometries = pg.make_valid(pg.from_wkb(arr), **kwargs) elif operation == 'normalize': geometries = pg.normalize(pg.from_wkb(arr), **kwargs) elif operation == 'offset_curve': geometries = pg.offset_curve(pg.from_wkb(arr), *args, **kwargs) elif operation == 'point_on_surface': geometries = pg.point_on_surface(pg.from_wkb(arr), **kwargs) elif operation == 'reverse': geometries = pg.reverse(pg.from_wkb(arr), **kwargs) elif operation == 'simplify': geometries = pg.simplify(pg.from_wkb(arr), *args, **kwargs) elif operation == 'snap': geometries = pg.snap(pg.from_wkb(arr), *args, **kwargs) elif operation == 'voronoi_polygons': geometries = pg.voronoi_polygons(pg.from_wkb(arr), **kwargs) else: warnings.warn('Operation %s not supported.' % (operation)) return None return pg.to_wkb(geometries)
def from_wkb(arr): return pg.from_wkb(arr)
def within(arr, geometry): geometry = pg.from_wkb(geometry) return pg.within(from_wkb(arr), geometry)
def convex_hull_all(arr): if isinstance(arr, LazyObj): arr = arr.values() points = pg.union_all(pg.extract_unique_points(pg.from_wkb(arr))) return pg.to_wkb(pg.convex_hull(points))
def total_bounds(arr): if isinstance(arr, LazyObj): arr = arr.values() return pg.to_wkb(pg.box(*pg.total_bounds(pg.from_wkb(arr))))
def test_from_wkb_on_invalid_unsupported_option(): with pytest.raises(ValueError, match="not a valid option"): pygeos.from_wkb(b"\x01\x01\x00\x00\x00\x00", on_invalid="unsupported_option")
def plot_percolation_full(): # set data paths to results data_path_perc = r'C:\Data\percolation_results_random_attack_regular' data_path_met= r'C:\Data\percolation_metrics' data_path_net = r'C:\Data\percolation_networks' # file to get full country names glob_info = pd.read_excel(r'C:\Projects\trails\data\global_information.xlsx') # get all files from data paths perc_files = os.listdir(data_path_perc) met_files = os.listdir(data_path_met) net_files = os.listdir(data_path_net) # save the failed ones, so we can check them later save_failed = [] # set x-axis x = np.arange(1,100,1) # create figure fig, axs = plt.subplots(3,2,figsize=(15,20)) for iter1,file in enumerate(perc_files): # get name of percolation analysis net_name = file[:5] try: if os.path.isfile(os.path.join('..','..','figures','{}_results.png'.format(net_name))): print(net_name+" already finished!") continue # load metrics df_metrics = pd.read_csv(os.path.join(data_path_met,[x for x in met_files if file[:5] in x][0])) # load percolation results df = pd.read_csv(os.path.join(data_path_perc,file),index_col=[0]) df.frac_counter = df.frac_counter*100 # remove all results where it is pretty much done, so we can zoom onto the interesting part df = df.loc[df.pct_isolated < 99.5] max_frac_counter = df.frac_counter.max() df_isolated = pd.DataFrame([df.frac_counter.values,df.pct_isolated.values,df.pct_unaffected.values,df.pct_delayed.values]).T df_isolated.columns = ['frac_counter','pct_isolated','pct_unaffected','pct_delayed'] df_sloss = pd.DataFrame([df.frac_counter.values,df.total_pct_surplus_loss_e1.values,df.total_pct_surplus_loss_e2.values]).T df_sloss.columns = ['frac_counter','total_pct_surplus_loss_e1','total_pct_surplus_loss_e2'] # load network network = pd.read_feather(os.path.join(data_path_net,[x for x in net_files if file[:5] in x][0])) network.geometry = pygeos.from_wkb(network.geometry) network = gpd.GeoDataFrame(network) network.crs = 4326 # get mean,max,min values y_unaff = df_isolated.groupby('frac_counter').max()['pct_unaffected'].values y_del = df_isolated.groupby('frac_counter').mean()['pct_delayed'].values y_iso = df_isolated.groupby('frac_counter').min()['pct_isolated'].values mainnet = 'yes' if net_name[4] != '0': mainnet = 'no, #{}'.format(net_name) if iter1 > 0: for iter2,ax in enumerate(axs.flatten()): ax.clear() #and plot for iter2,ax in enumerate(axs.flatten()): if iter2 == 0: sns.boxplot(x="frac_counter", y="pct_isolated", data=df_isolated,ax=ax,fliersize=0,order=np.arange(max_frac_counter+2),palette="rocket_r",linewidth=0.5) ax.set_ylabel('Percentage of isolated trips', fontsize=13) ax.set_xlabel('Percentage of network removed', fontsize=13) ax.set_title('Boxplots of isolated trips', fontsize=15, fontweight='bold') ax.set_xlim([0, max_frac_counter+2]) ax.set_xticks(np.arange(0, max_frac_counter+2, 5)) ax.set_ylim([0, 102]) ax.xaxis.set_major_locator(MaxNLocator(integer=True)) elif iter2 == 1: network.plot(column='highway',legend=True,ax=ax) try: cx.add_basemap(ax, crs=network.crs.to_string(),alpha=0.5) except: cx.add_basemap(ax, crs=network.crs.to_string(),alpha=0.5,zoom=10) ax.set_title('Road network', fontsize=15, fontweight='bold') elif iter2 == 2: sns.boxplot(x="frac_counter", y="pct_unaffected", data=df_isolated,ax=ax,fliersize=0,order=np.arange(max_frac_counter+2),palette="rocket_r",linewidth=0.5) ax.set_ylabel('Percentage of unaffected trips', fontsize=13) ax.set_xlabel('Percentage of network removed', fontsize=13) ax.set_title('Boxplots of unaffected trips', fontsize=15, fontweight='bold') ax.set_xlim([0, max_frac_counter+2]) ax.set_xticks(np.arange(0, max_frac_counter+2, 5)) ax.set_ylim([0, 102]) ax.xaxis.set_major_locator(MaxNLocator(integer=True)) elif iter2 == 3: sns.boxplot(x="frac_counter", y="pct_delayed", data=df_isolated,ax=ax,fliersize=0,order=np.arange(max_frac_counter+2),palette="rocket_r",linewidth=0.5) ax.set_ylabel('Percentage of delayed trips', fontsize=13) ax.set_xlabel('Percentage of network removed', fontsize=13) ax.set_title('Boxplots of delayed trips', fontsize=15, fontweight='bold') ax.set_xlim([0, max_frac_counter+2]) ax.set_xticks(np.arange(0, max_frac_counter+2, 5)) ax.set_ylim([0, 102]) ax.xaxis.set_major_locator(MaxNLocator(integer=True)) elif iter2 == 4: sns.boxplot(x="frac_counter", y="total_pct_surplus_loss_e1", data=df_sloss,ax=ax,fliersize=0,order=np.arange(max_frac_counter+2),palette="rocket_r",linewidth=0.5) ax.set_ylabel('Percentage of surpluss loss (e1)', fontsize=13) ax.set_xlabel('Percentage of network removed', fontsize=13) ax.set_xlim([0, max_frac_counter+2]) ax.set_xticks(np.arange(0, max_frac_counter+2, 5)) ax.set_ylim([0, 102]) ax.set_title('Boxplots of surpluss loss e1', fontsize=15, fontweight='bold') ax.xaxis.set_major_locator(MaxNLocator(integer=True)) elif iter2 == 5: sns.boxplot(x="frac_counter", y="total_pct_surplus_loss_e2", data=df_sloss,ax=ax,fliersize=0,order=np.arange(max_frac_counter+2),palette="rocket_r",linewidth=0.5) ax.set_ylabel('Percentage of surpluss loss (e2)', fontsize=13) ax.set_xlabel('Percentage of network removed', fontsize=13) ax.set_xlim([0, max_frac_counter+2]) ax.set_xticks(np.arange(0, max_frac_counter+2, 5)) ax.set_ylim([0, 102]) ax.set_title('Boxplots of surpluss loss e2', fontsize=15, fontweight='bold') ax.xaxis.set_major_locator(MaxNLocator(integer=True)) ax.text(max_frac_counter*0.5, 10.5,'Main Network: {} \nEdges: {} \nDensity: {} \nClique_No: {} \nAssortativity: {} \nDiameter: {} \nMax_Degree: {}'.format( mainnet, df_metrics.Edge_No.values[0], np.round(df_metrics.Density.values[0],7), df_metrics.Clique_No.values[0], np.round(df_metrics.Assortativity.values[0],7), df_metrics.Diameter.values[0], df_metrics.Max_Degree.values[0], ), fontsize=15) if net_name[4] == '0': if net_name[:3] in ['HKG','TWN','MNP','MAC','MHL','GUM']: name_dict_errors = {'HKG': "Hong Kong", 'TWN': "Taiwan", 'MNP': "Northern Mariana Islands", 'MAC': "Macau", 'MHL': "Marshall Islands", 'GUM' : "Guam" } plt.suptitle('Main network of {}'.format(name_dict_errors[net_name[:3]]), fontsize=20, fontweight='bold',y=0.92) else: plt.suptitle('Main network of {}'.format(dict(zip(glob_info.ISO_3digit,glob_info.Country))[net_name[:3]]), fontsize=20, fontweight='bold',y=0.92) else: plt.suptitle('Subnetwork of {}'.format(dict(zip(glob_info.ISO_3digit,glob_info.Country))[net_name[:3]]), fontsize=20, fontweight='bold',y=0.92) plt.savefig(os.path.join('..','..','figures','{}_results.png'.format(net_name))) except Exception as e: print(net_name+" failed because of {}".format(e)) print(traceback.format_exc()) save_failed.append(net_name) print(save_failed)
def test_from_wkb_all_types(geom, use_hex, byte_order): wkb = pygeos.to_wkb(geom, hex=use_hex, byte_order=byte_order) actual = pygeos.from_wkb(wkb) assert pygeos.equals(actual, geom)
def main(): # set data paths to results data_path_perc = r'C:\Data\percolation_results' data_path_met= r'C:\Data\percolation_metrics' data_path_net = r'C:\Data\percolation_networks' # file to get full country names glob_info = pd.read_excel(r'C:\Projects\trails\data\global_information.xlsx') # get all files from data paths perc_files = os.listdir(data_path_perc) met_files = os.listdir(data_path_met) net_files = os.listdir(data_path_net) # save the failed ones, so we can check them later save_failed = [] # set x-axis x = np.arange(1,100,1) # create figure fig, axs = plt.subplots(2,2,figsize=(15,15)) for iter1,file in enumerate(perc_files): # get name of percolation analysis net_name = file[:5] if os.path.isfile(os.path.join('..','..','figures','{}_results.png'.format(net_name))): print(net_name+" already finished!") continue try: # load metrics df_metrics = pd.read_csv(os.path.join(data_path_met,[x for x in met_files if file[:5] in x][0])) # load percolation results df = pd.read_csv(os.path.join(data_path_perc,file),index_col=[0]) df_isolated = pd.DataFrame([df.frac_counter.values,df.pct_isolated.values]).T df_isolated.columns = ['frac_counter','pct_isolated'] df_isolated = df_isolated*100 df_sloss = pd.DataFrame([df.frac_counter.values,df.total_pct_surplus_loss_e1.values]).T df_sloss.columns = ['frac_counter','total_pct_surplus_loss_e1'] df_sloss.total_pct_surplus_loss_e1 = df_sloss.total_pct_surplus_loss_e1 df_sloss = df_sloss*100 # load network network = pd.read_feather(os.path.join(data_path_net,[x for x in net_files if file[:5] in x][0])) network.geometry = pygeos.from_wkb(network.geometry) network = gpd.GeoDataFrame(network) network.crs = 4326 # get mean,max,min values max_iso = df_isolated.groupby('frac_counter').max()['pct_isolated'].values y_iso = df_isolated.groupby('frac_counter').mean()['pct_isolated'].values min_iso = df_isolated.groupby('frac_counter').min()['pct_isolated'].values mainnet = 'yes' if net_name[4] != '0': mainnet = 'no, #{}'.format(net_name) if iter1 > 0: for iter2,ax in enumerate(axs.flatten()): ax.clear() #and plot for iter2,ax in enumerate(axs.flatten()): if iter2 == 0: ax.plot(df_isolated.frac_counter.unique(), y_iso, 'r-') ax.fill_between(df_isolated.frac_counter.unique(), min_iso, max_iso) ax.text(50, 0.2,'Main Network: {} \nEdges: {} \nDensity: {} \nClique_No: {} \nAssortativity: {} \nDiameter: {} \nMax_Degree: {}'.format( mainnet, df_metrics.Edge_No.values[0], np.round(df_metrics.Density.values[0],7), df_metrics.Clique_No.values[0], np.round(df_metrics.Assortativity.values[0],7), df_metrics.Diameter.values[0], df_metrics.Max_Degree.values[0], ), fontsize=15) ax.set_ylabel('Percentage of isolated trips', fontsize=13, fontweight='bold') ax.set_xlabel('Percentage of network removed', fontsize=13, fontweight='bold') ax.set_xticks(np.arange(0, 100+2, 10)) ax.set_title('Max,mean and min isolated trips', fontsize=15, fontweight='bold') elif iter2 == 1: network.plot(column='highway',legend=True,ax=ax) cx.add_basemap(ax, crs=network.crs.to_string(),alpha=0.5) ax.set_title('Road network', fontsize=15, fontweight='bold') elif iter2 == 2: sns.boxplot(x="frac_counter", y="pct_isolated", data=df_isolated,ax=ax,fliersize=0) ax.set_ylabel('Percentage of isolated trips', fontsize=13, fontweight='bold') ax.set_xlabel('Percentage of network removed', fontsize=13, fontweight='bold') ax.set_xticks(np.arange(-1, 100+2, 10)) ax.set_title('Boxplots of isolated trips', fontsize=15, fontweight='bold') elif iter2 == 3: #ax.plot(x, y_sloss, 'r-') #ax.fill_between(x, min_sloss, max_sloss) sns.boxplot(x="frac_counter", y="total_pct_surplus_loss_e1", data=df_sloss,ax=ax,fliersize=0) ax.set_ylabel('Percentage of surpluss loss', fontsize=13, fontweight='bold') ax.set_xlabel('Percentage of network removed', fontsize=13, fontweight='bold') ax.set_xticks(np.arange(-1, 100+2, 10)) ax.set_title('Boxplots of surpluss loss e1', fontsize=15, fontweight='bold') plt.suptitle(dict(zip(glob_info.ISO_3digit,glob_info.Country))[net_name[:3]], fontsize=20, fontweight='bold') plt.savefig(os.path.join('..','..','figures','{}_results.png'.format(net_name))) #plt.pause(5) except Exception as e: print(net_name+" failed because of {}".format(e)) save_failed.append(net_name) print(save_failed)
def test_from_wkb_point_empty(wkb, expected_type): geom = pygeos.from_wkb(wkb) # POINT (nan nan) transforms to an empty point # Note that the dimensionality (2D/3D) is GEOS-version dependent assert pygeos.is_empty(geom) assert pygeos.get_type_id(geom) == expected_type
def __setstate__(self, state): geoms = pygeos.from_wkb(state[0]) self._crs = state[1] self.data = geoms self.base = None
def shapely_wkb_loads_mock(wkb): geom = pygeos.from_wkb(wkb) return ShapelyGeometryMock(geom)
def convex_hull(arr): return pg.to_wkb(pg.convex_hull(pg.from_wkb(arr)))