Beispiel #1
0
def test_from_wkb():
    expected = pygeos.points(1, 1)
    actual = pygeos.from_wkb(POINT11_WKB)
    assert pygeos.equals(actual, expected)
Beispiel #2
0
def test_from_wkb_none():
    # None propagates
    assert pygeos.from_wkb(None) is None
Beispiel #3
0
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")
Beispiel #4
0
 def _convex_hull_all_single(self):
     return pg.from_wkb(convex_hull_all(self._active_geometry))
Beispiel #5
0
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
Beispiel #6
0
def get_coordinates(arr):
    return pg.get_coordinates(pg.from_wkb(arr))
Beispiel #7
0
 def time_read_from_wkb(self):
     pygeos.from_wkb(self.to_read_wkb)
Beispiel #8
0
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
Beispiel #9
0
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)
Beispiel #10
0
def from_wkb(arr):
    return pg.from_wkb(arr)
Beispiel #11
0
def within(arr, geometry):
    geometry = pg.from_wkb(geometry)
    return pg.within(from_wkb(arr), geometry)
Beispiel #12
0
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))
Beispiel #13
0
def total_bounds(arr):
    if isinstance(arr, LazyObj):
        arr = arr.values()
    return pg.to_wkb(pg.box(*pg.total_bounds(pg.from_wkb(arr))))
Beispiel #14
0
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")
Beispiel #15
0
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)
Beispiel #16
0
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)
Beispiel #17
0
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)
Beispiel #18
0
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
Beispiel #19
0
 def __setstate__(self, state):
     geoms = pygeos.from_wkb(state[0])
     self._crs = state[1]
     self.data = geoms
     self.base = None
Beispiel #20
0
def shapely_wkb_loads_mock(wkb):
    geom = pygeos.from_wkb(wkb)
    return ShapelyGeometryMock(geom)
Beispiel #21
0
def convex_hull(arr):
    return pg.to_wkb(pg.convex_hull(pg.from_wkb(arr)))