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)
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_
def upload_pano_link(self): return gdf_to_postgis(self.gdf_pano_link, 'pano_link')
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')
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
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']
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