示例#1
0
    def s57_truncate(self, version=2, decimal_places=1):

        if len(self.s57_list) == 0:
            logger.warning('No selected S57 files to use for truncation')
            return

        if version not in [
                2,
        ] or not isinstance(version, int):
            logger.warning('Invalid version: %s' % version)
            return False

        if (decimal_places < 0) or not isinstance(decimal_places, int):
            logger.warning('Invalid version: %s' % version)
            return False

        opened_folders = list()
        for i, s57_file in enumerate(self.s57_list):

            start_time = time.time()

            self.progress.start(text="Data processing [%d/%d]" %
                                (i + 1, len(self.grid_list)))

            self.clear_survey_label()
            survey_label = self.make_survey_label_from_path(s57_file)
            self.progress.update(value=20)

            # output naming
            output_name = str(os.path.basename(s57_file).split(".")[0]) + \
                          ".truncV" + str(version) + "d" + str(decimal_places) + ".000"
            if self.output_project_folder:
                output_folder = os.path.join(self.output_folder, survey_label)
            else:
                output_folder = self.output_folder
            if self.output_subfolders:
                output_path = os.path.join(output_folder, "s57_truncate",
                                           output_name)
            else:
                output_path = os.path.join(output_folder, output_name)
            output_folder = os.path.dirname(output_path)
            if not os.path.exists(output_folder):
                os.makedirs(output_folder)
            self.progress.update(text="S57 data loading", value=30)

            self.progress.update(text="S57 data truncating", value=40)

            success = self._ft.truncate(input_file=s57_file,
                                        output_file=output_path,
                                        decimal_places=decimal_places)
            self.progress.end()
            if (output_folder not in opened_folders) and success:
                Helper.explore_folder(output_folder)
                opened_folders.append(output_folder)

            logger.info("BAG truncate -> execution time: %.3f s" %
                        (time.time() - start_time))

        return True
示例#2
0
    def open_offline_manual(self) -> None:
        logger.debug("open offline manual")
        pdf_path = os.path.join(self._ai.app_media_path, "manual.pdf")
        if not os.path.exists(pdf_path):
            logger.warning("unable to find offline manual at %s" % pdf_path)
            return

        Helper.explore_folder(pdf_path)
 def on_open_output_folder(self):
     output_folder = self.settings.value(app_info.key_raster_export_folder,
                                         self.lib.export_folder)
     if not os.path.exists(output_folder):
         logger.warning("unable to locate output folder: %s" %
                        output_folder)
         return
     Helper.explore_folder(path=output_folder)
示例#4
0
    def grid_truncate(self, version=2, decimal_places=1):

        if not self.has_bag_grid():
            logger.warning('No BAG files for truncation')
            return False

        if version not in [
                2,
        ] or not isinstance(version, int):
            logger.warning('Invalid version: %s' % version)
            return False

        if (decimal_places < 0) or not isinstance(decimal_places, int):
            logger.warning('Invalid version: %s' % version)
            return False

        opened_folders = list()
        for i, grid_file in enumerate(self.grid_list):

            self.progress.start(text="Data processing [%d/%d]" %
                                (i + 1, len(self.grid_list)))

            self.clear_survey_label()
            survey_label = self.make_survey_label_from_path(grid_file)
            self.progress.update(value=20)

            # output naming
            output_name = str(os.path.basename(grid_file).split(".")[0]) + \
                          ".truncV" + str(version) + "d" + str(decimal_places) + ".bag"
            if self.output_project_folder:
                output_folder = os.path.join(self.output_folder, survey_label)
            else:
                output_folder = self.output_folder
            if self.output_subfolders:
                output_path = os.path.join(output_folder, "grid_truncate",
                                           output_name)
            else:
                output_path = os.path.join(output_folder, output_name)
            output_folder = os.path.dirname(output_path)
            if not os.path.exists(output_folder):
                os.makedirs(output_folder)
            self.progress.update(value=30)

            success = self._gr.truncate(input_file=grid_file,
                                        output_file=output_path,
                                        decimal_places=decimal_places)
            self.progress.end()
            if (output_folder not in opened_folders) and success:
                Helper.explore_folder(output_folder)
                opened_folders.append(output_folder)

        return True
示例#5
0
    def save_bug_report(self):
        logger.debug("save bug report")

        report = "".join(self.format_bug_report())
        hint_name = "%s_%s_bug_%.0f" \
                    % (self._ai.app_name, self._ai.app_version.replace(".", "_"), datetime.utcnow().timestamp())
        # noinspection PyCallByClass
        filename, _ = QtWidgets.QFileDialog.getSaveFileName(
            self, "Bug Report", hint_name, "Text files (*.txt)",
            "Text files (*.txt)")
        if filename:
            fd = open(filename, 'w')
            try:
                fd.write(report)
                fd.close()
                Helper.explore_folder(filename)
            except Exception as e:
                msg = 'Unable to save the bug report:\n%s' % str(e)
                # noinspection PyCallByClass,PyArgumentList
                QtWidgets.QMessageBox.warning(self, "Saving issue", msg)
 def click_open_manual(cls) -> None:
     logger.debug("open manual")
     Helper.explore_folder(
         "https://www.hydroffice.org/manuals/openbst/user_manual_2_tool_product_clone.html"
     )
示例#7
0
 def click_open_manual(cls):
     logger.debug("open manual")
     Helper.explore_folder("https://www.hydroffice.org/manuals/qctools/stable/user_manual_survey_valsou_checks.html")
示例#8
0
 def click_open_manual_v2(cls):
     logger.debug("open manual")
     Helper.explore_folder(
         "https://www.hydroffice.org/manuals/qctools/user_manual_survey_scan_designated.html"
     )
    len(bag_without_uncertainty_list), len(bag_done_list))
for bag_without_uncertainty in bag_without_uncertainty_list:
    report += "  . %s\n" % bag_without_uncertainty
report += "\n- crashes while processing: %d/%d\n" % (len(bag_crash_list),
                                                     nr_bag_todo)
for bag_crash in bag_crash_list:
    report += "  . %s\n" % bag_crash

logger.info("\n%s" % report)

# save on disk a final report

if write_report_on_disk:

    report_path = os.path.join(output_folder, "Uncertainty_Scan_Results.txt")
    try:  # Trapping Exceptions like OSError (File permissions)

        with open(report_path, "w") as fod:
            fod.write(report)

    except Exception as e:
        logger.warning("issue in saving report on disk: %s (%s)" %
                       (report_path, e))

# open the output folder

if open_output_folder:
    Helper.explore_folder(output_folder)

logger.debug("DONE!")
示例#10
0
    def _open_scan_output_folder(self):
        if self.file_scan_s57 or self.file_scan_pdf:
            Helper.explore_folder(self._scan_output_folder)

        else:
            logger.warning('unable to define the output folder to open')
示例#11
0
 def open_projects_folder(self) -> None:
     Helper.explore_folder(str(self.projects_folder()))
示例#12
0
 def load_noaa_ocs_gov(cls):
     url = 'https://www.nauticalcharts.noaa.gov/'
     Helper.explore_folder(url)
示例#13
0
    def grid_xyz(self,
                 version: int = 2,
                 geographic: bool = True,
                 elevation: bool = False,
                 truncate: bool = False,
                 decimal_places: int = 0,
                 epsg_code: Optional[int] = None,
                 order: str = 'yxz'):

        if not self.has_bag_grid():
            logger.warning('No BAG files for truncation')
            return False

        if version not in [
                2,
        ] or not isinstance(version, int):
            logger.warning('Invalid version: %s' % version)
            return False

        if not isinstance(geographic, bool):
            logger.warning('Invalid geographic parameter: %s' % geographic)
            return False

        logger.debug(
            "geographic: %s, elevation: %s, truncate: %s, decimal places: %s" %
            (geographic, elevation, truncate, decimal_places))

        opened_folders = list()
        for i, grid_file in enumerate(self.grid_list):

            start_time = time.time()

            self.progress.start(text="Data processing [%d/%d]" %
                                (i + 1, len(self.grid_list)))

            self.clear_survey_label()
            survey_label = self.make_survey_label_from_path(grid_file)
            self.progress.update(value=20)

            # output naming
            output_name = str(os.path.basename(grid_file).split(".")
                              [0]) + ".V" + str(version)
            if elevation:
                output_name += ".elevation"
            else:
                output_name += ".depth"
            if truncate:
                output_name += ".trunc" + str(decimal_places)
            if geographic:
                output_name += ".wgs84"
            if epsg_code is not None:
                output_name += ".%d" % epsg_code
            output_name += ".%s" % order
            if self.output_project_folder:
                output_folder = os.path.join(self.output_folder, survey_label)
            else:
                output_folder = self.output_folder
            if self.output_subfolders:
                output_path = os.path.join(output_folder, "grid_xyz",
                                           output_name)
            else:
                output_path = os.path.join(output_folder, output_name)
            output_folder = os.path.dirname(output_path)
            if not os.path.exists(output_folder):
                os.makedirs(output_folder)
            self.progress.update(value=30)

            success = self._gr.xyz(input_file=grid_file,
                                   output_file=output_path,
                                   geographic=geographic,
                                   elevation=elevation,
                                   truncate=truncate,
                                   decimal_places=decimal_places,
                                   epsg_code=epsg_code,
                                   order=order)
            self.progress.end()
            if (output_folder not in opened_folders) and success:
                Helper.explore_folder(output_folder)
                opened_folders.append(output_folder)

            logger.info("BAG xyz -> execution time: %.3f s" %
                        (time.time() - start_time))

        return True
示例#14
0
 def open_online_manual(self) -> None:
     logger.debug("open online manual")
     Helper.explore_folder(self._ai.app_manual_url)
示例#15
0
    def on_export_profile_btn(self):
        logger.debug("export profile clicked")

        if len(self.selected_writers) == 0:
            msg = "Select output formats before data export!"
            # noinspection PyCallByClass
            QtWidgets.QMessageBox.warning(self, "Export warning", msg,
                                          QtWidgets.QMessageBox.Ok)
            return

        # special case for Fugro ISS format
        custom_writer_instrument = None

        # special case: synthetic profile and NCEI
        for writer in self.selected_writers:
            if writer != 'ncei':
                continue

            if self.lib.ssp.l[0].meta.sensor_type == Dicts.sensor_types[
                    'Synthetic']:
                msg = "Attempt to export a synthetic profile in NCEI format!"
                # noinspection PyCallByClass
                QtWidgets.QMessageBox.warning(self, "Export warning", msg,
                                              QtWidgets.QMessageBox.Ok)
                return

            if self.lib.current_project == 'default':
                msg = "The 'default' project cannot be used for NCEI export.\n\n" \
                      "Rename the project in the Database tab!"
                if self.lib.setup.noaa_tools:
                    msg += "\n\nRecommend in project_survey format, e.g. OPR-P999-RA-17_H12345"
                # noinspection PyCallByClass
                QtWidgets.QMessageBox.warning(self, "Export warning", msg,
                                              QtWidgets.QMessageBox.Ok)
                return

            if self.lib.setup.noaa_tools and self.lib.not_noaa_project(
                    self.lib.current_project):
                current_project, format_ok = self.lib.cb.ask_formatted_text(
                    default=self.lib.noaa_project)
                if self.lib.not_noaa_project(current_project, format_ok):
                    msg = "The project name cannot be used for NCEI export.\n\n" \
                          "Rename the project in the Database tab!\n\n" \
                          "Recommend \"project_survey\" format, e.g. OPR-P999-RA-17_H12345"
                    # noinspection PyCallByClass
                    QtWidgets.QMessageBox.warning(self, "Export warning", msg,
                                                  QtWidgets.QMessageBox.Ok)
                    return

            if not self.lib.ssp.cur.meta.survey or \
                    not self.lib.ssp.cur.meta.vessel or \
                    not self.lib.ssp.cur.meta.institution:
                msg = "Survey, vessel, and institution metadata are mandatory for NCEI export.\n\n" \
                      "To fix the issue:\n" \
                      "- Load the profile (if not already loaded)\n" \
                      "- Set the missing values using the Metadata button on the Editor tool bar\n"
                # noinspection PyCallByClass
                QtWidgets.QMessageBox.warning(self, "Export warning", msg,
                                              QtWidgets.QMessageBox.Ok)
                return

            # special case for Fugro ISS format with NCEI format
            if self.lib.ssp.cur.meta.probe_type == Dicts.probe_types['ISS']:
                logger.info("special case: NCEI and ISS format")

                if custom_writer_instrument is None:

                    msg = "Enter the instrument type and model \n(if you don't know, leave it blank):"
                    instrument = self.lib.cb.ask_text("ISS for NCEI", msg)
                    # if empty, we just use the sensor type
                    if instrument is None or instrument == "":
                        instrument = self.lib.ssp.cur.meta.sensor
                    custom_writer_instrument = instrument

        settings = QtCore.QSettings()

        select_output_folder = self.selectFolder.isChecked()
        settings.setValue("select_output_folder", select_output_folder)
        output_folders = dict()
        # each writer may potentially have is own folder
        if select_output_folder:

            dlg = OutputFoldersDialog(main_win=self.main_win,
                                      lib=self.lib,
                                      writers=self.selected_writers,
                                      parent=self)
            dlg.exec_()
            output_folders = dlg.output_folders
            if len(output_folders) == 0:
                return

        # case where all the writers will write to the same folder
        if len(output_folders) == 0:
            for writer in self.selected_writers:
                output_folders[writer] = self.lib.outputs_folder
            settings.setValue("export_folder", self.lib.outputs_folder)
            logger.debug('output folder: %s' % self.lib.outputs_folder)

        # ask user for basename
        basenames = dict()
        # NCEI has special filename convention
        if (len(self.selected_writers) == 1) and (self.selected_writers[0]
                                                  == 'ncei'):

            pass

        else:

            basename_msg = "Enter output basename (without extension):"
            while True:
                # noinspection PyCallByClass
                basename, ok = QtWidgets.QInputDialog.getText(
                    self,
                    "Output basename",
                    basename_msg,
                    text=self.lib.cur_basename)
                if not ok:
                    return
                for writer in self.selected_writers:
                    basenames[writer] = basename
                break

        # actually do the export
        self.progress.start()
        try:
            self.lib.export_data(
                data_paths=output_folders,
                data_files=basenames,
                data_formats=self.selected_writers,
                custom_writer_instrument=custom_writer_instrument)
        except RuntimeError as e:
            self.progress.end()
            msg = "Issue in exporting the data.\nReason: %s" % e
            # noinspection PyCallByClass
            QtWidgets.QMessageBox.critical(self, "Export error", msg,
                                           QtWidgets.QMessageBox.Ok)
            return

        # opening the output folder
        export_open_folder = self.openFolder.isChecked()
        settings.setValue("export_open_folder", export_open_folder)
        if export_open_folder:

            opened_folders = list()
            for output_folder in output_folders.values():
                if output_folder not in opened_folders:
                    Helper.explore_folder(
                        output_folder)  # open the output folder
                    opened_folders.append(output_folder)
            self.progress.end()

        else:
            self.progress.end()
            msg = "Profile successfully exported!"
            # noinspection PyCallByClass
            QtWidgets.QMessageBox.information(self, "Export profile", msg,
                                              QtWidgets.QMessageBox.Ok)

        self.accept()
示例#16
0
 def open_project_folder(self) -> None:
     Helper.explore_folder(str(self.path))
示例#17
0
from hyo2.abc.lib.helper import Helper
from hyo2.qc.common import lib_info
from hyo2.qc.common import default_logging
from hyo2.qc.common import testing

default_logging.load()

Helper.explore_folder(Helper(lib_info=lib_info).package_folder())
Helper(lib_info=lib_info).explore_package_folder()

print("- This file size: %s" % Helper.file_size(__file__))

print("- Info libs:\n%s" % Helper(lib_info=lib_info).package_info())

print("- Python path: %s" % Helper.python_path())

print("- QC2 package folder: %s" % Helper(lib_info=lib_info).package_folder())

print("- Testing output: %s" % testing.output_data_folder())

print("- Web URL: %s" % Helper(lib_info=lib_info).web_url(suffix="test"))
示例#18
0
 def click_open_manual(cls):
     logger.debug("open manual")
     Helper.explore_folder(
         "https://www.hydroffice.org/manuals/qctools/user_manual_survey_sbdare_export.html"
     )
示例#19
0
 def click_open_manual_v8(cls):
     logger.debug("open manual")
     Helper.explore_folder(
         "https://www.hydroffice.org/manuals/qctools/user_manual_survey_detect_fliers.html"
     )
示例#20
0
    def _open_triangle_output_folder(self):
        if self.file_triangle_s57:
            Helper.explore_folder(os.path.dirname(self.file_triangle_s57))

        else:
            logger.warning('unable to define the output folder to open')
示例#21
0
 def click_open_manual_v3(cls):
     logger.debug("open manual")
     Helper.explore_folder(
         "https://www.hydroffice.org/manuals/qctools/user_manual_survey_submission_checks.html"
     )
示例#22
0
 def open_system_noaa_support_folder(cls):
     if cls.system_noaa_support_folder_present():
         Helper.explore_folder(cls.system_noaa_support_folder())
         return
示例#23
0
 def open_output_folder(self) -> None:
     if self.output_folder:
         Helper.explore_folder(str(self.output_folder))
     else:
         logger.warning('unable to define the output folder to open')
示例#24
0
 def click_open_manual(cls):
     logger.debug("open manual")
     Helper.explore_folder(
         "https://www.hydroffice.org/manuals/abc/user_manual_info.html#noaa-s-57-support-files-for-caris"
     )
示例#25
0
 def load_ccom_unh_edu(cls):
     url = 'https://ccom.unh.edu'
     Helper.explore_folder(url)
示例#26
0
 def open_root_folder(self) -> None:
     Helper.explore_folder(str(self.root_folder()))
示例#27
0
    def open_local_noaa_support_folder(self):
        if self.local_noaa_support_folder_present():
            Helper.explore_folder(self.local_noaa_support_folder())
            return

        Helper(lib_info=self._li).explore_package_folder()
示例#28
0
 def load_unh_edu(cls):
     url = 'https://www.unh.edu'
     Helper.explore_folder(url)
示例#29
0
 def click_open_manual(cls):
     logger.debug("open manual")
     Helper.explore_folder(
         "https://www.hydroffice.org/manuals/qctools/user_manual_chart_grid_truncate.html"
     )
示例#30
0
 def load_ausseabed_gov_au(cls):
     url = 'http://www.ausseabed.gov.au/'
     Helper.explore_folder(url)