コード例 #1
0
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()
コード例 #2
0
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()