def step3_format_line(): # 1. 读取数据库 draft = DraftDB(Config.target_db) ais = AISService(Config.target_db) trajectory_file = open(Config.trajectory_output_file, 'wb') trajectory_writer = csv.writer(trajectory_file) trajectory_writer.writerow(Config.trajectory_output_header) port_service = PortService(Config.port_name) # port_service = '' # 2. 开始读取 draft_state_dict = draft.start_fetch_transaction(Config.draft_state_table) ais.start_fetch_data_transaction(Config.ais_table) line_index = 0 while draft.has_next_draft_state() and ais.has_next_ais_ship(): compare_result = Utils.compare_mmsi(ais.ais_point, draft_state_dict) if compare_result < 0: ais.skip_useless_trajectory() elif compare_result > 0: draft_state_dict = draft.fetch_draft_state() else: line_index = ais.form_trajectory( draft_state_dict, trajectory_writer, line_index, port_service, Config.search_distance, Config.trajectory_distance_threshold, Config.trajectory_speed_threshold) # 3. 关闭 trajectory_file.close() draft.close() ais.close()
def split_ship_trajectory(target_db, draft_db, draft_state_table, ais_table, port_name, trajectory_output_file, trajectory_output_header, search_distance, trajectory_distance_threshold, trajectory_speed_threshold, outliers_output_file): Utils.check_file_path(trajectory_output_file) Utils.check_file_path(outliers_output_file) # 1. 读取数据库 draft = DraftDB(draft_db) ais = AISService(target_db) port_service = PortService(port_name) trajectory_file = open(trajectory_output_file, 'wb') trajectory_writer = csv.writer(trajectory_file) trajectory_writer.writerow(trajectory_output_header) outliers_file = open(outliers_output_file, 'wb') outliers_writer = csv.writer(outliers_file) outliers_writer.writerow(['mmsi', 'mark', 'count']) # 2. 开始读取 draft_state_dict = draft.start_fetch_transaction(draft_state_table) ais.start_fetch_data_transaction(ais_table) line_index = 0 while draft.has_next_draft_state() and ais.has_next_ais_ship(): compare_result = Utils.compare_mmsi(ais.ais_point, draft_state_dict) mmsi = ais.ais_point.mmsi mark = ais.ais_point.mark if compare_result < 0: ais.skip_useless_trajectory() elif compare_result > 0: draft_state_dict = draft.fetch_draft_state() else: line_index, outliers_count = ais.form_trajectory( draft_state_dict, trajectory_writer, line_index, port_service, search_distance, trajectory_distance_threshold, trajectory_speed_threshold) outliers_writer.writerow([mmsi, mark, outliers_count]) # 3. 关闭 trajectory_file.close() draft.close() ais.close()