Example #1
0
    def upload_pano_node(self, gdf: gpd.GeoDataFrame = None):
        # 经过测试,上传的 list 数据会自动序列化
        gdf = gdf if gdf is not None else self.gdf_pano_node
        gdf.loc[:, "ID"] = gdf.index

        db_pano_base = load_postgis(self.pano_node_pg)
        ori_size, new_size = db_pano_base.shape[0], gdf.shape[0]
        tmp = gdf.append(db_pano_base).drop_duplicates("ID", keep='first')

        if ori_size == tmp.shape[0]:
            return True

        return gdf_to_postgis(tmp, self.pano_node_pg)
Example #2
0
def get_laneNum(edges, db_name=None):
    df_pid_2_edge = pids_filter(
        sort_pids_in_edge(EDGE_TO_PID, df_pred_memo, plot=False)
    )

    #  df_pid_2_edge.query("eid==53560")
    df_lane_nums = pd.DataFrame(
        df_pid_2_edge[~df_pid_2_edge.outlier]\
            .groupby('eid')['lane_num']\
            .apply(list)\
            .apply(_get_lst_mode)
    )

    # filter the unpredicted edge
    idxs = list(np.setdiff1d( edges.index, df_lane_nums.index))
    edges.loc[idxs]
    df_pid_2_edge.query("eid in @idxs")
    # map_visualize(edges.loc[idxs])

    edges_ = edges.merge(df_lane_nums, on='eid', how='left')
    edges_.index = edges_.eid
    edge_miss = edges_[edges_.lane_num.isna()]

    # case 0: normal links
    idxs = edge_miss[edge_miss.edge_type == 0].index
    # if len(idxs) > 0:
    #     edges_.loc[idxs, 'lane_num'] =  _indentify_lane_num_for_type_0(edge_miss, edges_, df_pid_2_edge )

    # case 3: signal controled edge
    idxs = edge_miss[edge_miss.edge_type == 0].index
    if len(idxs) > 0:
        edges_.loc[idxs, 'lane_num'] = _indentify_lane_num_for_type_3(edges_, idxs, df_pid_2_edge, net=net)

    if db_name is not None:
        gdf_to_postgis(edges_, db_name)

    return df_lane_nums, edges_
Example #3
0
 def upload_pano_link(self):
     return gdf_to_postgis(self.gdf_pano_link, 'pano_link')
Example #4
0
def save_db():
    tmp = eoi.query('lane_num==lane_num')
    tmp.loc[:, 'lane_num'] = tmp.lane_num.astype(np.int)

    gdf_to_postgis(tmp, 'test_matching')
Example #5
0
    def upload(self, db_name='test_matching'):
        tmp = net.df_edges.merge(self.df_lane, on='eid')
        tmp.loc[:, 'lane_num'] = tmp.loc[:, 'lane_num'].astype(np.int)
        gdf_to_postgis(tmp, db_name)

        return True
Example #6
0
        df.query(expr, engine='python').fillna(-1).plot(column='lane_num',
                                                        legend=True,
                                                        categorical=True)

    return df


df = process_link(df)

df.lane_num.isna().sum()
df[df.lane_num.isna()].edge_type.value_counts()
df.query("lane_num!=lane_num and edge_type ==0 ").plot()

df.drop(columns='geom_origin', inplace=True)

gdf_to_postgis(df, 'test_matching_all')

gdf_to_geojson(df, 'road_demo')

#%%

idxs = list(np.setdiff1d(df.index, self.df_lane.index))
map_visualize(df.loc[idxs], scale=.1)

df_miss = df.loc[idxs].sort_values(['road_level', 'name', 'eid', 'edge_type'])

df_miss_link = df_miss.query("road_type.str.contains('link')", engine='python')

# map_visualize(df_miss_link, scale=.1)

# atts = [ 'rid', 'name', 's', 'e', 'order', 'road_type', 'dir', 'lanes', 'dist', 'edge_type', 'road_level']
Example #7
0
def delete_history_error_dir_panos(download_new_pano=True, update=False):
    """
    Deleted photos with incorrect azimuth due to historical reasons
    """

    df_panos = load_postgis('panos')
    df_panos.set_index('PID', inplace=True)

    df_key_panos = load_postgis('pano_base')
    df_key_panos.set_index('ID', inplace=True)

    df_panos.loc[:, 'DIR_bak'] = df_panos.DIR
    df_panos = update_move_dir(df_panos, df_key_panos)

    rm_lst = df_panos.query("DIR != -1 and DIR != DIR_bak ").reset_index()[[
        'PID', 'DIR_bak'
    ]].values.tolist()

    remove_count = 0
    for pid, heading in tqdm(rm_lst):
        try:
            os.remove(os.path.join(PANO_FOLFER, f"{pid}_{heading}.jpg"))
            remove_count += 1
        except:
            continue

    print(f"Delete {remove_count} pano imgs")

    if download_new_pano:
        pano_imgs_exist = load_exist_pano_imgs()

        df_panos = df_panos.drop(
            columns=['DIR_bak', 'url']).reset_index().drop_duplicates(
                ['PID', 'DIR'])
        pano_lst = df_panos[['PID', 'DIR']].rename(columns={
            'PID': 'pid',
            'DIR': 'heading'
        })
        pano_lst = pano_lst.merge(pano_imgs_exist,
                                  left_on=['pid', 'heading'],
                                  right_on=['pid', 'dir'],
                                  how='left')
        pano_lst = pano_lst[pano_lst.fn.isna()][['pid',
                                                 'heading']].to_dict('records')

        fetch_pano_img_parallel(pano_lst)

    if update:
        df_panos = df_panos.set_index('PID')
        df_panos.loc[:, 'PID'] = df_panos.index
        df_panos.loc[:, 'url'] = df_panos.apply(
            lambda x: f"http://192.168.135.15:9000/panos/{x.PID}_{x.DIR}.jpg",
            axis=1)
        attrs_order = [
            'PID', 'DIR', 'RID', 'Order', 'Type', 'X', 'Y', 'geometry', 'url',
            'lane_num'
        ]

        gdf_to_postgis(df_panos[attrs_order], 'panos')

    return