hydroffice.bag-0.2.15/0000777000000000000000000000000012723323303012601 5ustar 00000000000000hydroffice.bag-0.2.15/AUTHORS.rst0000666000000000000000000000066712672544462014507 0ustar 00000000000000Credits ------- Authors ~~~~~~~ HydrOffice BAG is written and maintained by: - `Giuseppe Masetti `_ - `Brian Calder `_ Contributors ~~~~~~~~~~~~ The following wonderful people contributed directly or indirectly to this project: - `Matt Wilson `_ Please add yourself here alphabetically when you submit your first pull request. hydroffice.bag-0.2.15/docs/0000777000000000000000000000000012723323303013531 5ustar 00000000000000hydroffice.bag-0.2.15/docs/api/0000777000000000000000000000000012723323303014302 5ustar 00000000000000hydroffice.bag-0.2.15/docs/api/hydroffice.bag.rst0000666000000000000000000000306412672544462017727 0ustar 00000000000000hydroffice.bag package ====================== Subpackages ----------- .. toctree:: hydroffice.bag.tools Submodules ---------- hydroffice.bag.bag module ------------------------- .. automodule:: hydroffice.bag.bag :members: :undoc-members: :show-inheritance: hydroffice.bag.base module -------------------------- .. automodule:: hydroffice.bag.base :members: :undoc-members: :show-inheritance: hydroffice.bag.bbox module -------------------------- .. automodule:: hydroffice.bag.bbox :members: :undoc-members: :show-inheritance: hydroffice.bag.elevation module ------------------------------- .. automodule:: hydroffice.bag.elevation :members: :undoc-members: :show-inheritance: hydroffice.bag.helper module ---------------------------- .. automodule:: hydroffice.bag.helper :members: :undoc-members: :show-inheritance: hydroffice.bag.meta module -------------------------- .. automodule:: hydroffice.bag.meta :members: :undoc-members: :show-inheritance: hydroffice.bag.tracklist module ------------------------------- .. automodule:: hydroffice.bag.tracklist :members: :undoc-members: :show-inheritance: hydroffice.bag.uncertainty module --------------------------------- .. automodule:: hydroffice.bag.uncertainty :members: :undoc-members: :show-inheritance: Module contents --------------- .. automodule:: hydroffice.bag :members: :undoc-members: :show-inheritance: hydroffice.bag-0.2.15/docs/api/hydroffice.bag.tools.rst0000666000000000000000000000261512672544462021067 0ustar 00000000000000hydroffice.bag.tools package ============================ Submodules ---------- hydroffice.bag.tools.bag_bbox module ------------------------------------ .. automodule:: hydroffice.bag.tools.bag_bbox :members: :undoc-members: :show-inheritance: hydroffice.bag.tools.bag_elevation module ----------------------------------------- .. automodule:: hydroffice.bag.tools.bag_elevation :members: :undoc-members: :show-inheritance: hydroffice.bag.tools.bag_metadata module ---------------------------------------- .. automodule:: hydroffice.bag.tools.bag_metadata :members: :undoc-members: :show-inheritance: hydroffice.bag.tools.bag_tracklist module ----------------------------------------- .. automodule:: hydroffice.bag.tools.bag_tracklist :members: :undoc-members: :show-inheritance: hydroffice.bag.tools.bag_uncertainty module ------------------------------------------- .. automodule:: hydroffice.bag.tools.bag_uncertainty :members: :undoc-members: :show-inheritance: hydroffice.bag.tools.bag_validate module ---------------------------------------- .. automodule:: hydroffice.bag.tools.bag_validate :members: :undoc-members: :show-inheritance: Module contents --------------- .. automodule:: hydroffice.bag.tools :members: :undoc-members: :show-inheritance: hydroffice.bag-0.2.15/docs/api/hydroffice.rst0000666000000000000000000000035012672544462017172 0ustar 00000000000000hydroffice package ================== Subpackages ----------- .. toctree:: hydroffice.bag Module contents --------------- .. automodule:: hydroffice :members: :undoc-members: :show-inheritance: hydroffice.bag-0.2.15/docs/api/modules.rst0000666000000000000000000000011212672544462016514 0ustar 00000000000000hydroffice ========== .. toctree:: :maxdepth: 4 hydroffice hydroffice.bag-0.2.15/docs/api.rst0000666000000000000000000000007312672544462015052 0ustar 00000000000000API === .. toctree:: :maxdepth: 4 api/moduleshydroffice.bag-0.2.15/docs/banner.rst0000666000000000000000000000300512672544462015544 0ustar 00000000000000Banner ====== .. code-block:: python | ========================================================== | | _ _ _ _____ __ __ _ | | | | | | | | | _ |/ _|/ _(_) | | | |_| |_ _ __| |_ __| | | | |_| |_ _ ___ ___ | | | _ | | | |/ _\ | '__| | | | _| _| |/ __/ _ \ | | | | | | |_| | (_| | | \ \_/ / | | | | | (_| __/ | | \_| |_/\__, |\__,_|_| \___/|_| |_| |_|\___\___| | | __/ | | | |___/ | | | | ---------------------------------------------------------- | | Office Tools to Facilitate | | Hydrographic Surveys, Data Review and | | Nautical Chart Compilation | | | | ---------------------------------------------------------- | | For comments/suggestions: | | - matt.wilson@noaa.gov | | - brc@ccom.unh.edu | | - gmasetti@ccom.unh.edu | | | | ========================================================== | hydroffice.bag-0.2.15/docs/conf.py0000666000000000000000000002060112723323107015031 0ustar 00000000000000# -*- coding: utf-8 -*- import sys import os this = os.path.dirname(os.path.abspath(__file__)) # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. sys.path.insert(0, os.path.join(this, os.pardir)) # -- General configuration ------------------------------------------------ # If your documentation needs a minimal Sphinx version, state it here. #needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ 'sphinx.ext.autodoc', 'sphinx.ext.coverage', 'sphinx.ext.pngmath', 'sphinx.ext.viewcode', 'sphinx.ext.coverage', 'sphinx.ext.intersphinx', ] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.rst' # The encoding of source files. #source_encoding = 'utf-8-sig' # The master toctree document. master_doc = 'index' # General information about the project. project = u'HydrOffice BAG' copyright = u'2016, University of New Hampshire, Center for Coastal and Ocean Mapping' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. version = '0.2' # The full version, including alpha/beta/rc tags. release = '0.2.15' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. #language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: #today = '' # Else, today_fmt is used as the format for a strftime call. #today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. exclude_patterns = ['_build'] # The reST default role (used for this markup: `text`) to use for all # documents. #default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. #add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). #add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. #show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'colorful' # A list of ignored prefixes for module index sorting. #modindex_common_prefix = [] # If true, keep warnings as "system message" paragraphs in the built documents. #keep_warnings = False # -- Options for HTML output ---------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. html_theme = 'hyo' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. #html_theme_options = {} # Add any paths that contain custom themes here, relative to this directory. html_theme_path = ['_theme'] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". #html_title = None # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. #html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. #html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] # Add any extra paths that contain custom files (such as robots.txt or # .htaccess) here, relative to this directory. These files are copied # directly to the root of the documentation. #html_extra_path = [] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. #html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. html_use_smartypants = True # Custom sidebar templates, maps document names to template names. html_sidebars = { 'index': ['sidebarintro.html', 'sourcelink.html', 'searchbox.html'], '**': ['sidebarlogo.html', 'relations.html', 'sourcelink.html', 'searchbox.html'], } # Additional templates that should be rendered to pages, maps page names to # template names. #html_additional_pages = {} # If false, no module index is generated. #html_domain_indices = True # If false, no index is generated. html_use_index = True # If true, the index is split into individual pages for each letter. #html_split_index = False # If true, links to the reST sources are added to the pages. #html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. html_show_sphinx = False # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. #html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = None # Output file base name for HTML help builder. htmlhelp_basename = 'HydrOfficeBAGdoc' # -- Options for LaTeX output --------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). #'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). #'pointsize': '10pt', # Additional stuff for the LaTeX preamble. #'preamble': '', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ ('index', 'HydrOfficeBAG.tex', u'HydrOffice BAG Documentation', u'University of New Hampshire, Center for Coastal and Ocean Mapping', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. #latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False # If true, show page references after internal links. #latex_show_pagerefs = False # If true, show URL addresses after external links. #latex_show_urls = False # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. #latex_domain_indices = True # -- Options for manual page output --------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ ('index', 'hydrofficebag', u'HydrOffice BAG Documentation', [u'University of New Hampshire, Center for Coastal and Ocean Mapping'], 1) ] # If true, show URL addresses after external links. #man_show_urls = False # -- Options for Texinfo output ------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ ('index', 'HydrOfficeBAG', u'HydrOffice BAG Documentation', u'University of New Hampshire, Center for Coastal and Ocean Mapping', 'HydrOfficeBAG', 'Library and tools for working with BAG files.', 'Miscellaneous'), ] # Documents to append as an appendix to all manuals. #texinfo_appendices = [] # If false, no module index is generated. #texinfo_domain_indices = True # How to display URL addresses: 'footnote', 'no', or 'inline'. #texinfo_show_urls = 'footnote' # If true, do not generate a @detailmenu in the "Top" node's menu. #texinfo_no_detailmenu = False hydroffice.bag-0.2.15/docs/dev_commands.rst0000666000000000000000000000414012677467315016745 0ustar 00000000000000Development cheatsheet ====================== Useful Mercurial commands ------------------------- Merge a branch to default ~~~~~~~~~~~~~~~~~~~~~~~~~ * ``hg update default`` * ``hg merge 2.0.0`` * ``hg commit -m"Merged 2.0.0 branch with default" -ugiumas`` * ``hg update 2.0.0`` * ``hg commit -m"Close 2.0.0 branch" -ugiumas --close-branch`` Open a new branch ~~~~~~~~~~~~~~~~~ * ``hg update default`` * ``hg branch 2.0.1`` * ``hg commit -m"Created 2.0.1 branch" -ugiumas`` Useful git commands ------------------- Syncing a fork (without SourceTree) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Add a remote that points to the upstream repo (from the forked project folder): * ``git remote -v`` (check before and after if the remote is present) * ``git remote add upstream https://github.com/HDFGroup/hdf-compass`` Fetching from the remote repository: * ``git branch -va`` (check all the available branches) * ``git fetch upstream`` Merging with the upstream repository: * ``git checkout master`` (to switch to ``master`` branch) * ``git merge upstream/master`` Finally: * :``git push origin master`` Reset the fork ~~~~~~~~~~~~~~ * ``git remote add upstream https://github.com/HDFGroup/hdf-compass`` * ``git fetch upstream`` * ``git branch backup`` * ``git checkout upstream/master -B master`` * ``git push --force`` In case of need to retrieve the original code status: * ``git checkout backup`` Documentation ------------- The documentation is built using ``sphinx``: * ``pip install sphinx sphinx-autobuild`` For the first time, the documentation template is created in the 'docs' folder: * ``mkdir docs`` * ``cd docs`` * ``sphinx-quickstart`` To update the API documentation: * ``sphinx-apidoc -f -o docs/api hydroffice hydroffice/bag/scripts`` PyPi ---- Some instructions can be found `here `_: * ``python setup.py register -r test`` * ``python setup.py register -r pypi`` * ``python setup.py build bdist_wheel upload -r test`` * ``python setup.py build bdist_wheel upload -r pypi`` hydroffice.bag-0.2.15/docs/how_to_contribute.rst0000666000000000000000000000364212653306525020036 0ustar 00000000000000How to contribute ================= Every open source project lives from the generous help by contributors that sacrifice their time and this is no different. To make participation as pleasant as possible, this project adheres to the `Code of Conduct`_ by the Python Software Foundation. Here are a few hints and rules to get you started: - Add yourself to the AUTHORS.txt_ file in an alphabetical fashion. Every contribution is valuable and shall be credited. - If your change is noteworthy, add an entry to the changelog_. - No contribution is too small; please submit as many fixes for typos and grammar bloopers as you can! - Don't *ever* break backward compatibility. - *Always* add tests and docs for your code. This is a hard rule; patches with missing tests or documentation won't be merged. If a feature is not tested or documented, it does not exist. - Obey `PEP 8`_ and `PEP 257`_. - Write `good commit messages`_. - Ideally, `collapse`_ your commits, i.e. make your pull requests just one commit. .. note:: If you have something great but aren't sure whether it adheres -- or even can adhere -- to the rules above: **please submit a pull request anyway**! In the best case, we can mold it into something, in the worst case the pull request gets politely closed. There's absolutely nothing to fear. Thank you for considering to contribute! If you have any question or concerns, feel free to reach out to us. .. _`Code of Conduct`: http://www.python.org/psf/codeofconduct/ .. _AUTHORS.txt: https://bitbucket.org/ccomjhc/hyo_bag/raw/tip/AUTHORS.rst .. _changelog: https://bitbucket.org/ccomjhc/hyo_bag/raw/tip/HISTORY.rst .. _`PEP 8`: http://www.python.org/dev/peps/pep-0008/ .. _`PEP 257`: http://www.python.org/dev/peps/pep-0257/ .. _collapse: https://www.mercurial-scm.org/wiki/RebaseExtension .. _`good commit messages`: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html hydroffice.bag-0.2.15/docs/how_to_install.rst0000666000000000000000000000024712672544462017331 0ustar 00000000000000How to install ============== * the simplest way: ``pip install hydroffice.bag`` * for the latest features: ``hg clone ssh://hg@bitbucket.org/gmasetti/hyo_bag``hydroffice.bag-0.2.15/docs/how_to_install_on_linux_mint.rst0000666000000000000000000000242612672544462022274 0ustar 00000000000000BAG library on Linux Mint ========================= This document describes a tested configuration to install the BAG library on Linux Mint. For use with a VM image: * Download from here: http://www.osboxes.org/linux-mint/#linuxmint-173-rosa-vmware * Change Display resolution *[optional]* * Install VM Tools using Software Manager (select open-vm-tools-desktop) *[optional]* Installation: * Download 64-bit Python 2.7 miniconda: http://conda.pydata.org/miniconda.html * Install it from terminal: ``bash Miniconda-latest-Linux-x86_64.sh`` * Install dependencies using conda (since with pip they may fail): ``conda install numpy matplotlib gdal lxml spyder`` * Finally use pip for hydroffice.bag: ``pip install hydroffice.bag`` Test: * Open Spyder using the terminal: ``spyder`` * Write in the temp.py: .. code-block:: python from hydroffice import bag print("BAG version: %s" % bag.__version__) * Run the script and you should get the library version without errors: .. image:: ./_static/linux_mint_spyder.png :align: center :alt: Spyder .. NOTE:: If you get issues on the installation, you may open a ticket: * https://bitbucket.org/ccomjhc/hyo_bag/issues?status=new&status=open * https://github.com/giumas/hyo_bag/issues hydroffice.bag-0.2.15/docs/how_to_release.rst0000666000000000000000000000131512672544462017300 0ustar 00000000000000How to release ============== Versioning ---------- You might want to install ``bumpversion``, so that you can run something like: * ``bumpversion --allow-dirty --new-version 0.2.5 patch``. The above version value must agree with the variables ``version`` and ``release`` present in the ``conf.py`` under the `docs` folder. PyInstaller ----------- For the `BAG_.1file.spec` files, you need to verify that the following parameters are passed to the ``EXE()`` function: * ``console=False``: to avoid that a console window is opened at run-time for standard I/O * ``debug=False``: to avoid that the boot-loader issues progress messages while initializing and starting the bundled app hydroffice.bag-0.2.15/docs/how_to_use.rst0000666000000000000000000000030212672544462016447 0ustar 00000000000000How to use ========== For some examples on how to use the library: * `https://bitbucket.org/gmasetti/hyo_bag/src/tip/examples/ `_hydroffice.bag-0.2.15/docs/index.rst0000666000000000000000000000074512672544462015416 0ustar 00000000000000.. HydrOffice BAG documentation master file, created by sphinx-quickstart on Sun Oct 18 16:44:37 2015. HydrOffice BAG's documentation ============================== Contents -------- .. toctree:: :maxdepth: 2 in_brief requirements license how_to_install how_to_use how_to_contribute api how_to_release dev_commands banner Indices and tables ================== * :ref:`genindex` * :ref:`modindex` * :ref:`search` hydroffice.bag-0.2.15/docs/in_brief.rst0000666000000000000000000000105612672544462016060 0ustar 00000000000000In brief ======== .. image:: https://bitbucket.org/ccomjhc/hyo_bag/raw/tip/hydroffice/bag/media/favicon.png :alt: logo HydrOffice is a research development environment for ocean mapping. It provides a collection of hydro-packages, each of them dealing with a specific issue of the field. The main goal is to speed up both algorithms testing and research-2-operation. The BAG hydro-package collects tools for working with BAG files. BAG is a data format by the `ONS-WG `_ (Open Navigation Surface Working Group). hydroffice.bag-0.2.15/docs/license.rst0000666000000000000000000002007412674135025015717 0ustar 00000000000000License ======= Copyright Notice and License Terms for: hydroffice.bag - BAG package for HydrOffice Copyright (c) 2016, University of New Hampshire, Center for Coastal and Ocean Mapping Released under a dual license: - Community license (under LGPL v3) - Industrial Associate license For more info, visit: http://www.hydroffice.org/license/ ----------------------------------------------------------------------------- GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library.hydroffice.bag-0.2.15/docs/make.bat0000777000000000000000000001507312612307350015150 0ustar 00000000000000@ECHO OFF REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) set BUILDDIR=_build set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . set I18NSPHINXOPTS=%SPHINXOPTS% . if NOT "%PAPER%" == "" ( set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% ) if "%1" == "" goto help if "%1" == "help" ( :help echo.Please use `make ^` where ^ is one of echo. html to make standalone HTML files echo. dirhtml to make HTML files named index.html in directories echo. singlehtml to make a single large HTML file echo. pickle to make pickle files echo. json to make JSON files echo. htmlhelp to make HTML files and a HTML help project echo. qthelp to make HTML files and a qthelp project echo. devhelp to make HTML files and a Devhelp project echo. epub to make an epub echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter echo. text to make text files echo. man to make manual pages echo. texinfo to make Texinfo files echo. gettext to make PO message catalogs echo. changes to make an overview over all changed/added/deprecated items echo. xml to make Docutils-native XML files echo. pseudoxml to make pseudoxml-XML files for display purposes echo. linkcheck to check all external links for integrity echo. doctest to run all doctests embedded in the documentation if enabled goto end ) if "%1" == "clean" ( for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i del /q /s %BUILDDIR%\* goto end ) %SPHINXBUILD% 2> nul if errorlevel 9009 ( echo. echo.The 'sphinx-build' command was not found. Make sure you have Sphinx echo.installed, then set the SPHINXBUILD environment variable to point echo.to the full path of the 'sphinx-build' executable. Alternatively you echo.may add the Sphinx directory to PATH. echo. echo.If you don't have Sphinx installed, grab it from echo.http://sphinx-doc.org/ exit /b 1 ) if "%1" == "html" ( %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/html. goto end ) if "%1" == "dirhtml" ( %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. goto end ) if "%1" == "singlehtml" ( %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. goto end ) if "%1" == "pickle" ( %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can process the pickle files. goto end ) if "%1" == "json" ( %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can process the JSON files. goto end ) if "%1" == "htmlhelp" ( %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can run HTML Help Workshop with the ^ .hhp project file in %BUILDDIR%/htmlhelp. goto end ) if "%1" == "qthelp" ( %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can run "qcollectiongenerator" with the ^ .qhcp project file in %BUILDDIR%/qthelp, like this: echo.^> qcollectiongenerator %BUILDDIR%\qthelp\HydrOfficeBAG.qhcp echo.To view the help file: echo.^> assistant -collectionFile %BUILDDIR%\qthelp\HydrOfficeBAG.ghc goto end ) if "%1" == "devhelp" ( %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp if errorlevel 1 exit /b 1 echo. echo.Build finished. goto end ) if "%1" == "epub" ( %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub if errorlevel 1 exit /b 1 echo. echo.Build finished. The epub file is in %BUILDDIR%/epub. goto end ) if "%1" == "latex" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex if errorlevel 1 exit /b 1 echo. echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. goto end ) if "%1" == "latexpdf" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex cd %BUILDDIR%/latex make all-pdf cd %BUILDDIR%/.. echo. echo.Build finished; the PDF files are in %BUILDDIR%/latex. goto end ) if "%1" == "latexpdfja" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex cd %BUILDDIR%/latex make all-pdf-ja cd %BUILDDIR%/.. echo. echo.Build finished; the PDF files are in %BUILDDIR%/latex. goto end ) if "%1" == "text" ( %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text if errorlevel 1 exit /b 1 echo. echo.Build finished. The text files are in %BUILDDIR%/text. goto end ) if "%1" == "man" ( %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man if errorlevel 1 exit /b 1 echo. echo.Build finished. The manual pages are in %BUILDDIR%/man. goto end ) if "%1" == "texinfo" ( %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo if errorlevel 1 exit /b 1 echo. echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. goto end ) if "%1" == "gettext" ( %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale if errorlevel 1 exit /b 1 echo. echo.Build finished. The message catalogs are in %BUILDDIR%/locale. goto end ) if "%1" == "changes" ( %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes if errorlevel 1 exit /b 1 echo. echo.The overview file is in %BUILDDIR%/changes. goto end ) if "%1" == "linkcheck" ( %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck if errorlevel 1 exit /b 1 echo. echo.Link check complete; look for any errors in the above output ^ or in %BUILDDIR%/linkcheck/output.txt. goto end ) if "%1" == "doctest" ( %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest if errorlevel 1 exit /b 1 echo. echo.Testing of doctests in the sources finished, look at the ^ results in %BUILDDIR%/doctest/output.txt. goto end ) if "%1" == "xml" ( %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml if errorlevel 1 exit /b 1 echo. echo.Build finished. The XML files are in %BUILDDIR%/xml. goto end ) if "%1" == "pseudoxml" ( %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml if errorlevel 1 exit /b 1 echo. echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. goto end ) :end hydroffice.bag-0.2.15/docs/requirements.rst0000666000000000000000000000016112672544462017022 0ustar 00000000000000Requirements ============ * `h5py `_ * `lxml `_hydroffice.bag-0.2.15/docs/_static/0000777000000000000000000000000012723323303015157 5ustar 00000000000000hydroffice.bag-0.2.15/docs/_static/linux_mint_spyder.png0000666000000000000000000016576312672544462021501 0ustar 00000000000000PNG  IHDR$JsRGBgAMA a pHYsodIDATx^\UeƱD=@ĽHSK33ˬ\eg2jr3̍Dq Ld{>{/\.)vO9Fz ǥK(RJ H)Rj2RJ) RJ)* RJ H)Rj8ݺ́%zl.#_OLϭc1KZ 8-ǗRJ UxGW}i}b^7skr{IBork̓ c~Gb`)ueҳ GZZ ⃗;<~[uǸp. 0_ADZq&RJ h(Jcy`xo'U"Pk^᧡07wǦw)Z& Q!]&#K -q ݏap%y #o#:bf>RJ)U8KYt(?N[M?}aO~քĂ7+@~h `g[Z\Obhnn&m,au"򼄀s0|/1n4i݂~r8 O,Cl}̻@}0w7QFv-Ѵi[ 5a }]Zh=ϩBi6S̛4 zvBC0sX0`:7) LgM¢d8|1'0k/}\͛6EK2m?]ۊ~-eWإ^|#MNSG8WߎMKᄲ>^dR?k MA1uVkгms âD,?:yO>=ѹ}g 'NcX |58?^@G[U++QWH3X= ~&{.K_N=^NʺuysNju뎎:cż'`#ݎ3Qa]1~xm@ot_=sMr yc ; ´GsgvA{?x׺+f(RJiR_p=>kѵA Myw>@',y%;AYwvS".[83;y?K [r\\\emz~ >nghfS6( 8fvG%`s<@4+ƯiŸyG|]^׻_ޅuYڋǸθ E#Ѯ쀓k ZG|޳3&uN3np:篾5l~_b޾.X5:Lف G-xc7Ucaз8,Yl~=L77ۍ 7?xlxYgGWx .Zu Y5bK8}r<[e{Ivx}bv=*Z¢ > rY7€ X{9:jJq|`ts5$zzy@Y7?/BdY;q^|w[W6Qæ546Q;>T-FձlW.`b9zt|;/gυRt gjקv?N^X2 F)U-R Yei2n ή_h97,fT{#?hM1c pAm1!E`1uIWMlW_ObpOG.3a)5؈W2>n tvd/*D enPwh!:w ^K"Ğ8;𕃺$nɐ"?}:-^UO~wj*uE@ c ZK60f}p>h7~@ް ϱ 鵯Хb;|| v<)ix?N6Jd7X8 R=^ Nʺ7bZ.9~MN;{={.]>ԬZձ!l4ݱjX [%;:'d-BR«= J)OptQgmV"(5&i.Bsн{A0R j3L{dt|d썎_kBiOpu닯/&uPn=YK6X(:KGNS[9jvAs˫hj m,-a-Z wrttOǢG5a"`:ryz`zP>_dxNp!c 2[Ms1DxZX̵θ(Kuo.Exvވꇶ-`} ŪWEakqFLS)a6SX*n!WA[o=o^aװ r;A~s4ǹ ~_G'}j>.).q'[Yh0:L 0C߼J)Op/i_[~i7E J;]}Xw- jJVؙ\%"NS^KԷj/2V p!ms:9W`^LAG}Cg \᷉ݝRBDK Zz"Dptt*,h=d ܱ#`=]ӕ[b8xR;$;Ab|/5>.1Fۿr:l>p;,%puÌ?Wb(v\Uo8+4 :ypfEM7㵠{|[b"WW֩VɦZVb& *ۣ5>li~: XJ)Op 44Y3z`V"6u+ߴ_G _l# <-"u>:rK4^;cЏr:nKpm4?Mӻݸuu:k]1~΋0wg Zspw]~LJ0y_d#VB~YƂC>.\Cg-ktg9Wo\[ VX|.ϺzLb>ˆ e-&?E`J)h+//cѩG^^^*}vtg={;yS؇=j멻>1;F=rڙk+nbCi13z逡dZSJ)}jՄ3:M~j8ʖm4AKy[O9Uн9Zgs?~UfG}nJFɃ`xXf߂g3XhLv|<XAP/_1m5m_ zI ֩-۠2DY.ѴI tj8wŊ+GU>j逮3vSr9ܷ~Lu`Us4i,{Yv M*m&ѲOepRA?̞;=6y3k J?e װ-Ɯ|؆yno>vlgG/Tg{Nb7masgc܇>Դݧ=a1jN"סs)lb5?NjdȿvJ)vPO}OҘF H飚'؏h=e eC)DAZUм: {˥R ;'Z5o! wRJii H)Rj2RJ) RJ)* RJ H)Rj 뫼ӓ>}%}I)Ҳg 8y${nرa>J3SJ)-dJnnn8rR())Ig2 dRJ)- (o1)"!!qqqeXJLLT܇-RJˎe2fvRJZvܹSه-RJˎe6zg}a]%r1RJ)e_AZJ)ҧCAZJ)ҧç.:tHizQ?~J SN8w<<>% RJS]\\p-2ɿ#""p]+ϳTƕOAJ)pm)ŽObrn'7#bX;쏻fq-RŜ9s0{l|lg8KQaB4cAAPx"Õҿ;w(!PS*- ]hޟmNJ`ԝ122R Ѻe7O{AJ)7+?(x#7cpA(x;Aqt'Cp+v`oŵ /B ]ii"T!Edi2D࣏f)VQ-(zoV,ӼyDS [;! F߀? {+ƌԫQnAJ)pr~xAP6$owM9惁ϲQKn>+Ҿ+Wk׮oD*d?9LQK% RJinw--@tttMg>DDF) "_?x{׮cX|9LeI,%Vl0{z/pByg?k~Щ ۯ3=]cnY˄?ӿc@K4mM91z N}}opVC0{G"l1ӫX{>vW(OzcoN8`2ָ &K}7g)3 n={[nJ1b[v0rX}U H)#g۷owB "<QQQ5{x㑘i ?P/lߗ>=a\]*7͢XPAXXA$>^_E϶k0%"~!".ٴH ^3=}Fx.ƀ.rJC0qFc~bWMDF Sv]F| Ap|3s]x!bE>X᭝ĸ9W0oʒn}Ǚ(7wZjSD!84|7|Aaӧ[v RZ`ppV\)Ϛ>J-Un y,]v#))Y$ !z +޾o޽ؾ}ił'²$011QW66|n81.>ljP07uXN?qus?ջpV}/[ Y}3B5<wuB }`iar!с1J4bO^]sE7..7nP><'7>% RJi}U'W',T?~^3E9wŵ D3 \~իƶm۲n:v>秱 ("yÇþݭ4QB`F n2.pgpep3p[S7 VmѲP" ]~Ǎ#-F-_"@[F^ #t u]{naovĘ?/!}.\JXQu.g̘cRv0էARJ)-mN)Ͱp%N=}Vy꾪$01QTdd#C$]r`qsE oTž\q6 [=6m(t՞Ƃ|l "K冒Ťۏ`J}Ol͑@BWT{ h}3OY''i qfA/XMr["f.PĘ,󒥉1=tA/O",ES<cd㐉'Rv0E AJ)pqV 2;pEz0'"=]9SG9K*^OY).==ٸرch֬Y秱 (Ij Q6Tn'B`!g5 gtz o;k.%PLQ|֣#YwD3^] gx4}cJKKO0C#er88n!hF0G O+XOY*oN4 ӦM|K*ʿe7O"RJi6otLtN>HHL@rRNCgOt-0x2޺/o41 kZ2$kҤ ߟkAY[E2*Ӵ&AC?l't 4*l?6Ma5f .F &|<#o? Aˁr;c!vV>u0ڽ Q2@wѲ9Zye弃vyTEC>oUqF)ʿe7O#7 ]% RJin?\7e֪:}WQJj9kZY-AyKX UBphX8.xy8}Lɷg\jWwiAAPD=ݫCYJ(K'`?p57XǮa]@aJUG̣0&;cbOD_Deᅰ_RV&iE RZ;V|=<SLE5}t]<2T/W5gi[`%o DH[-<pZyt`IxvvvK P^1yve% (+yˈ,NuYjA0!KlnxRreWPvtARJ)-ΪV%q%gi[`^|E ZYrg]/]Fq-(TWM.GwgOgh%[ >/+aRJ wQwx^.Zh7,(ҲARJ)-ܽNp \;ρ.[v;=.{\qlN搋iWAZJ)ҧCAZJ)ҧCAZJ)ҧCAZJ)ҧCAZJ)ҧCAZJ)ҧCAZJ)ҧC%n۶LaTwr۷RJ)w-[˗SJ)2 |B!PpuuUx*33Hfdd(Of>AB!̓ Ʌ H!aԑB!P`ԑB!P`ԑ䐕t .' ݎt{ZɌvoc{;HR B  wCek `gdvwSrb3}8_LDz8 }JApP |hB?5+8~'Rcq(f#N!v\Y>!w1 xP "T‘IQ(YH0܏] {E%,$r{8].K􇫴Hs<+to~Z&\ljIWPBþ5{W%fc8~5r40W)YDR5?nۃnx.RK-3)ga$0ޮak#9oD#*RqaJ_AP Rwq^;E=ǜ`|@vyQxa՚@Zy9[ Eݨxx%sNq/.⠽lIJNAmq\ao'vq+$zG8\trG wB! XH̸#АK;WH(;+>Qr9/!<ˁR#u.HHBVz<"CUB ˩w7NEf%"."!#!gaosg"07D`9`&Y kGvYH A3 (f؞g=IC=]OPجdDHJvZpאOd%!\.mt<w1>B) E(J >Ka(fiZmŦ -V {H y3QعDތavv`p>4ȼi1 GqU;)GhTU!p=N*Uw1 v8>3۲鱸p0J2<5^|Dd#5?/"Z<B) A0[h#Í,*yfĊq9LwZYHv͞%h[.peJF ;.EddH<Aٍ@2☣|f_Qӈw{bEAzgY8n&'*O(=b;pwmuJ=԰S?~Y&wND픆3{Nc B92vĶ<S B!0Z"3pV8|*T+Բ@\:bSzJ,3e#p8-[:vN?s'HUyG@}EVr0\Od7*,f>#N"L8rؓv%'/9yAS]/5G3Yy0.j2r*zp!]J!<l+pApG(b绢{2721˯j gp&YLGTpTm0Rn'H(.ݗaH]"xLUgN%x%^ 4Tdz4\igbVr8|X223p llݡS3]‰)Q,1 y^6psb5!=4j  {W8>h㐖A8/>\B!p 4F3sNcՋCVm8⍸t[>^2sB*A ϾݛxRv*@gt.'ጓ-\-x8)۫Z ؉q<@,ͳ4L;,UU:ۃvZ%YH"yx oIG9:7.Ug^~uU7WBJdNR6wR{ !oaطH{/^!B; :#3) R!)#/z1!B3 :#-"wrWB!%u$B1u$B1 2{n*,Y([ ߶oXҏB!P0 s#u?- H!Áò H!ÁA^4.XE[γDB!@Z.bτB!A[nogXv#B1 6ƅ1#V;!B`An_CdL,bcqJ !B`A0c,ǿ H!J!b(0H!b(0H!b(0H!b(0/Y@#Ggݟ4Im$;T\Z5_;.DC}c$>˗kgadT sPTk+n;<;BOtJ9h3=!cA0. v?)-Ċ?ˏX` 蒺ÿE Y6b'EE hޛ CIذ2!':| vK(0B) 2ލ?k8g~tw xp )pÿE 73LIO4ӏQ !KH\rZ;Z |05 &ZEx%`V=2䖼 V-bdv6,g_W㽢d(A.^n&zyN,S- Ⳁ8Z (Z! qv#a+ʂv&VB㡘:!jh+? ,]կ 슈)#t-jtW$Wlb۾b&bGO[IeQ%ErGF#ST,|tBmy9`[|6*>cbI/!QlBAFRp$H @@fgMo D13)_HS%Ɵ-OLSC1sT;FI|s3?6:} XCF*bTlV(p9ω /wF86# !;SŊ#k?B10 7F`߯?a7#GuEIKz@K,"4$ON8EP4I "C#oZW5AE#T;4 yjg^280:Z-+vGFPdnF[=m"Zj4._ۿ{bwip%*[-e~iח3<R`f Հ8(xދ+rRCJh n%_ѯ%j<,)YܒoOaY5I9 !a븛0̤<&v8&Ƙmp)/" !&\"Ȱ;cpZ=? C?ׅT#Dp=Deh|/E@ap>o djh1G ^JLK*{ u bY0F[$[VU ~*C&ՄNlU~֮ɗPB\RuXkr+ (6ny>yC*;ZiT X!n'+Dm Xk@[o 26cB 5&Ϲ(iW #0lRDn{8 f`MfYH !@aa5G\cJB\X՟5t5 @@⺯?_bvEHx Wmnwń:-:0ş{ =05k+VXVBQ ~ kHʵinE>} TVA0J[gC7PYթzuQj5Wf"_ԷOSbgo:“aU~"otCSA6??uKMixU"VbRij SSzW+ة !( ?zWy),P Ŭ%o> ( CG3WPUˊ>UN )%`# D'*)l5D,w!ЬD[V4VM۽Yq"6zJ],cD"5EG)*/JZu icS Z.ƪ .qN$6c !*z{\­HDEXWD0O#xQD0^u!A1,4f:U;c-MIGк0 ŠY\1~:y,[nd:-~ү#ce8XxRG ,۷DA+[!m@)}BUG0V ԯ"BcjҒtq?T(uW?!Gm"pmN>Tr`2jSuC4dAB1X 0EE;lmXn/N݈VGI`]`HF_Cr1A${anC#u]iM l{4j xm`m!ʤssRK ~f\A0 7zVFX]j.<ԃe;oYsp5[v |6ض߳UѸy xwy[ b,ix[VM><"XFt},rbϋP7sGOR`+Dl/e(sWi$|s{h_>ZXuDa`fb"{ B }8 7ѳ1bUMJRL kdzϗG:][3B #!B #!B`A07ł'VÄB!5 :–k_ !bpnؾAB!H߽X$# !B  їaz-^ !B  ;~HAB!Hxm !&BcE4DB! !B A !B A !B A !B AuIM)S/䟾q(=RJu=tLoGUV]΂Tӯj6{`ucŽϝ-n&!.0!1S Cq]';.nw&RJu5 u[472ڃO}+W\oۦcT$闯QXcڒ{i~>^/k&\CP1G tO| =b}+, }58wW݌Ꞃ!ᣣPQkcvF }}#6 -v/e#\ ;5owDs\u[m?9hؿd̞U*8o~Qb'ψ}B }uՇXr{j-&X1u{bֶxpLfh kaJD\턊;kq_+,T\OYðy.17t!) WƢX,a-؜nZ'G[yNuJC) cUqDc/g`WG0 w.H';WAótIJ`X"Hg1-N"@Zd/1(uif}׃m1J)Q4;DG3#z".a_-6P1Ϧb NbbƘu\/9>0koEh wm+黻p94Q'Ou |{Ze#~Xt<bݣ$}7OL>$FWOz_*c|k[F*_hA }t0ޭS cs/ݮ/ڟAM8RAhgޞ:o lge(l%FkUm:헩࠭꒑+M%u OY0]Up\_D!7u?as[GPh;BOJh(S/8G;++1b{A_jETsn.,PT? EH[`m0c*ht\vymQR^{s]WDhl>u8~nV:-%%#&{7nQx }YB2sAs 1Oy*Vh%UqNQ8V,yh^u MF-U.`l,߬+[r'#b(To 09+m/UG.cZ~APC*ǵt'> ׿OF . IMC*5\|A eb°kt\y[МiGz_@s RJu5 ˻702jՋfa᜕4L]z'Y_qtV\Y}rJJ\"{s&Dđ ]Qc+)bؘB5lp#F\lKcbpn7#XvnmX$¨M-Ե򀘏اǪ[/N6D41B9[+W0\-.*eP8 Ƈ7p Uosb4x텷kOuAKy8”30`M< NZKb|+b߉yyl*g% X&{p[4{nWk0X5)L< JcaVCҔ8޲msTg>80Z~QYUi0v_xKxU[s,d-rOZ}b$IO'cx8eM|ֶ$~4^?VdV|Ƣ,ϙFqIDp K)œA- 1A 5a;+'v/Z%"~蜳4m3gU.aְխ#İ贯b؈}"K-'?'zM+(u"_Qr/+׊nN^N7}PJpf::ד"٠O# J鯋faL4U%ZA 1rWRn<6 ѢQ`S!T̷ftR~i~%>9Z6o1u 0U~!Z"ߵ*˔M\啒ºQb嚇~"v`l{x-i4&.m=) @d`8tE}rzbeM0qmVF{*ݓc`/*uNF6618>/5B-!1W ڜX3J+f(7+UDkuŇ k1<2RJ&o 먋&T$97֭{`,B˘IWBw.tI}ؙ|2KYo s>\v,6xidO(4 :B! 2[1B!Au$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1u$B1D2B!>a Fn:+- ssm¦RJ)-j™ЦQ_miQp [oy.oI[ikJDSyAuK~p? ^8U/{V=>fuK=65A優 RJӬ&醴>k= }֌k"|pp4o3_lpκa!oaw.9@_7lƭˮ#_q[Wo%@o[c|cyzȯѾTԭ#x߲F)K #p~RJ)-5Lnh_ޟ&N-`~`7||lj,zij5vU/s j&Ze/^x(on[l5oT8jA9~8,ejCf3,!RJӧvPO}OҘF H)RJ27 H)Rj2RJ) RJ)* RJ H)Rj2RJ) RJ)j򂧧'}JK7}RJ)e2qIcرc-$orۯRJ)-; (Kp$''#++ #SRRdd RZ-AP^SBEBBK˸r??_J) duvڥ2 l+ٹs_J) lu$-JcRJ˶ ԕ0RJ)e_AZJ)Ҳ"e,T>~% RJi2} ߅~sȹ됻/$$$+aRZt! ɧ>ʒ~_HhM[aӾS||qU H)}7ˇ!00P07>IQtÞCn]BTwD +uvqw, mmm1g̞=,8Y4Ro7X (FN '~t?sqїq߿ :-_'pJI`{S~v:waAP&O?A* ׮իpU^K Q15 }>ۊ~`oCЩq6po2nQ v*NW;'#/bC9u|BA0o;f QK% oʕڵ+,--o(ԥoMdP H),jD{vFvKd:ş4dZ[[KA7mž=K2 _||+^ucppp3ZP%Cڣo0c)M]L%q@[mZ:APvkƵ%G6UX6W54I[+X "lW[ۡefh?S P@[7Em%8rCUx1l>~ NֲֽQ/QW/n]JCCC[={Dnݔ7bE&aARJiYQGj$繳z)-9\o߾ezሊR劻wGbR"RRRiA^޿/}{¸E"N4bAAPz h9>[7Wg#C`O@Pb/ӧLOל >p\<]>űk5U&߆X!:tS"h~qZb"}ktv}'E"&{g;p5ZۛwG"ZL+Z z 94 +W7`РA0`(d?9q)aRZ<(5푑| X]Y,sz)-V < SvOE5}Xw4!0Y4gd(9~^4K],kXIo7q}l߾]4ba%/(B a~頻~ \.S8 M5uY/bbcp=t+.F"ob\A /W\Ѱx\ a#dzQ1rvߌQ`NqzO޽0g=>jÍ7Çϥ&aO Ҳp+ 09r܎94;&&+%N OAY6~xf"sC4KB`||bJB41,)z*m۶[N]Oi,( 2c1OQ1w_݁͸sRQwz5m>2`x~ܒlA ns;{[{bv\ ;tZoC/J ]|~1OOAkDn3f`رd?9q)aRZ/?,pwE}d#A0"!k#Jk`㖆RaaJ{ #}UI`b75-D' HAJؓ 066~~"a˖sQiF7XP޽{HOOW+hB`ChUmsqq)R`?û`mU&ͿHv oԥYDK߅O,<H68qb.e7OS0(aRZVtk%B7BHi R"+!S@ߞE8>cְlxi/9!05U7Jz:ʞ9u ׯx1,Ś2 >b[ӹ}6;f͚Z`Y{~ R e%DLn\t>x`._ҵ (> C)X=~c ۯp`L68xU ~:O2ʐ,oN4 ӦM|K*ʿe7O"RJ6tGus9s#6AꊪWaz8zFS"`(=f,08qB n)ۿm5 Gdi`tt .*;;."hI&ؿa4U6VTFIO_N|q }a3BGo4ja+A9ml5gz$O>N.UgiqLHtL·*uH׽cBeIlQ+4A*ny{Q0RJ);1 ҿ/oE\e l5u"3,v[7aP",^ {n$fIq Ymɕg*鋔)XY5T^yWLUAZT6!@i+G( B(^V6}r<;;;} ޚh3Z:37M@ǁp^SbQ?}ue7O{AJ):_pmy`'?fG~E |)cEzYRw;Z n#XLUAW:v9rg]/]Fq-N rEXT7b\hsV?eRZ6< z&SqӦp'vyV8I+8T+&س;,r/AZ0RJ)<p1ǃpvtګua;ٿGlvȾ8ۣa v;8c39pۅnDZEq+t r;ҐAAJ) HK] RZeARJ)-2RW H)}i+aRJ˾ ԕ0RJ)e_AZJ)ҲmVܰaSD?_J){ ˖-)RJXAكB!AB!a$B1P !B AB!_Y]Dx)>1q{,/Z ̈&`~ =JЍd{ al6<AzF i.Rw!3v1Fϝ1TD`kMPʙơ%" _Xi32' ;D{d[c uR(zLg HuqaN C;YA8-^ r=7@{p;E;_pcEk," _d߽L8 so{+Ѩf;v! ah*ʲ>_&kd﮺qؾ`ZYQ0yݻn@H) qI} f1mp#ɓ;6Kp xV?^ߌ|(ALp{uς{υE"_5?rGjE~4yxXUFYjq$v{' m;mT͆#9)=g4+4yN^ςG}46EE$7NE5f.!ʿshLĞC"4' ĸ|UVZ1寫Gad #07Qz>/\IR¶8M4}.P XD#=-Q^Zu#4W);A0W6|o?8N0T$''}Es#'.A7Z _U Y?)Vh)x[_JaA! wGZZP/!H߃cHGDjFӣP WkJKcw+sؓfp,#ఠV c0Fd~8|!ssHi7/A[ET~i'vF8bcF=\XN u nAhkZ*2`OC:l #M``7{ $؊Q/Ѐuko 60Ƚ#kŴϡק0)W3z,UW;wysTFWI]MѶ8r_݁s. 89 Eb8PKsVu;v3TRlb -rS*" UDm&coL8p/'cU?aPe\~b9)qF|ײ,􋩍 uN2R ba1 ߻HjɒrfJx=OO*câ LjI*,U+LMMQojPf=QǴXUC}7ZIucYkʯ鸽=W=RX| 47 'Ņ!fgoT-ˡzW 3p!k&_6$cB*C`+0r#|YGiL=UNKk0}3w)M9|Ԡ;{{^㉤ݨ6&U_1~}Lu#HM į*>J)cѽrLԴh|bS5':"ZߠyS+\e,Nn뤓t~6*O,}q\EE&mF+SXԭ _|>)W#~ Hnf}PX:WFM>Bz1QAɂ`OTX+1 ^Ch2qm'ofaЪ0$m~N,­o,໙Un#!3 c"JqWKT75[ɩ}uDRL؍C XP8L7Gvj2cj5Q@숔0jxL%9dRui 3vjdRNC>xދ+zoE&$ޭo~>:=#e-t ׊=!G) K }7~%\ŏ-ˣӆ;~vOǐ#'Ύ7a9h)ǥ"fQppakY3=*X@ॿM]7÷%#u@/#"%a}]^OjU-IT?nYS7@=CfkJ^T}P (v3P8/KyzrNpY+qAARvݢ4\]&C< {R˅JfCNJX$)/6j ˦fbH/av~C[5ƫַ8<  &1젾<uRPTm%|RTr_qSY4\_j'jJ\Mp0qѽD\6k)k57dRg{j"l-RFZo@{uAq>4DɊ=5'b kn S"..`ǙR?n˦0ͦdA0_7E!JH=|9Yf^^EP7 Sު=Dz"LsȲ9>Q6Ȋ`&U$< +s~gƬV\V-[[%ۄaͪ<.Zstj!9kpOЩBy]]Z ;WR.g-SHŕ[B =05^Ǝ=[>f+_tD84xoߝ\_ #1epS9ÁtJ5IYAtx ѸP] _ǡ{85E>ԡ ?2 T58_L^l` </zBJCȮ7װM} [|c`I='BxbA0ɠQn.D'*)l5 DVWu ';ø "ټT9:.,,nd=äAP_w\nK?D<K"ԪD0{C.A02X[1}pon8>Z|㧪j21E>`*)6U J`Y"VRҮ6 5W꓋Fx}UA:aI"M 7EyK #wZuk }"n6JoE=$_YUGP;T~ -*vjnM{6I0A]{ubKT&--Fug5)Ѣ@l >:oAJ`hv?a`&($jZj~h7~[u) +W[K]_ :WڬtD di晉d_]GrJz (~pr&SGlCz`f"jT \KBƃ Xܭ2|tVh#4AmԭfHɘb1J h5\w3_JM $fc]G0BދsUP gQtZ gh91Kh#~hF۾ &`=0 :Ӆ Zx1c:3 (ΕڢZ-Pڭ Q ݃Wyr$Œ_aH/ 8X#l5_jmce8&NsGʅ-[TR1An gDaJw4g8Zomq>YL =st2^}?\a ZqՓ(b<^?1R$~y4fq>JrCYwOdkU5HH3b/dԌ;OE3zU|2ps W0KI^KUj/λgV1dA&h#QZK XhS/]mnmP텊R &)?W )t%[=`uf $6NiPZ2螷t.R?|L^n'y;<Ѭ\j2j |z&հ-G/Ź{r'%fЯnElZ}VJĻaj0UZ V4 \!mB lb֤&%bghXZv 3_A3;*4]:z'z \M-pd=4Amaݩ7z tJD*+ۡ7j${aoź/R3祜/~εMU4We0# ~xmLs^@bwNj˩{7ש$oC61/9r^uVS׷|D>߲*9NڷUϡAP~ONp{|ҳ1U0Eu)gXToMixBWF8| 6E1`, HEHG̴Ɩ>cl[)wM/Օnp !U!C)B!bAF¸Vg|[g"H ʥ' 7m'@VAjz?xKdF0}s'GyY !IS Y+7)ZZ짎Vf5WKaF [U^V^MU446.?UѳPhs4XneTVSE3 @7#As=!WErzilߌp}U'WkMɖF0x洂C55Lrśh晁HDպz>/\IR-PֽSh$Gtڭر^h#h_PBȌq[ףxSpiq{靝I>m%~ :T6h>;wp%[}ȷB:o6߀!=vG8 ۵+s{\nk1DlA3f"vZmJŚ(|R?#)!YjM_`߼q+<|1~y҅Фb;wEb~W"Q(# naR?{b8q a7%+JõP8(ѪB |#"UW;wysTFW}"C_kk*;d7 .;{UmUV$DԳX Xfôd]ލ ˡ,ף{`mL\1`x5Ph/oW?Ms=1U CAǁucuߟ)>A 9BȓT`h|LՐ ۗyEuAFqh.*+fwVCf&T*ZE?kY vh""_ 'ZD2@ˇͶFk!_ uOl[]XTpճ"yvV?~^o~eo:ɸ3_>/)Ɋكyފ 9KM\ꀙ 1RRh,?/!DJItw>ԛ[~0~HLm.S?g1WA]Ӫx^BހոQĂ$Ln p' T(N̈xkN1-bE׮\5^TUyՠq'̞2:5E΁eM=UGrf&0i;{CUՇb5v:M%|ՙ18OF?x8DFawxγFI`hh: bOwk_*e n9ET>r][ Ys|5jOܘV5Lm-©М'| j[F,)b '1IeU2\r59H 9OC'`? = ׷:f>nR}W#!-`տ|?Ly<~\ CBIKSaE-ז'fh3ܾ{ f;q5a/jףUZ} +nD(T^MB}O,Vf{(ejkT CKG.0 0@%U˕_K[Bd) M|/QBBTh+"-L*bA}ew9t>u 3'6GbKUwԡ*~|w#zJ9 !6Q&;AylVF0+ jvX*$fD0U e\S{*h;N{ykCDjpܲt7d~d(nyfcw6 \%j6~7x(%pZc V+gAB2Ԟ7B(iUEY_Q9t#HMByJL3ZVU7MA^\8ۼT9:Z /4uU%4%Hߛ '1,xFFMbI&"wq8_|iQ78tiP2p. W`R V =`UUl˧ܞ[#Pk%~:ct +z7VGP,2Zd> 9jM͌؊nC}꼹L3=* {ova}-BcJ-1՘vWh%%x}HA9hP]*]"HAa0fR ~7XU ; '_GkySZ84=[fB,Eq۰j6`NI@=/,|-d''g M1&=D V~gFb\VIw4p譆%&y. ~|o=/aoh7~[sq"#WDS*໬?j6! -8S3TB6 CrX ]5b{y3\ eԛ2꿶WjZ ]հLLF/ѦBs|+.s"'lu Dh]߈ `&ú2n&RU\[`٥x$=`3qqN`K`pno7f`cseDu[5f@Bf]?{pY ;N@n?r8V }V"xiA܅KUx%!x z/F`~X>%iWa`æxOT,h>R/6uަ T \KBƃ Xܭ2|tVƏ@玾P 0ڬfǐN} 'ԋז9`n&mQZ\'B$) (AeĎ,bM)57|敔RjX}m,(_=?)sAޚF:>wkXm a;e[ vm)Uhu7@A$ybvR_Um5$N7WWUz)/msuL}kLd*Z?wЦV8D7]Fwńj* Dz&c|pP0A|f7 V;?Oyt!^izaJU!w!6{MX۫cѲRQo  ѩǫ5* Y;[+V(l/>aϋpY- [jOVD?CTzMǁ3_F8hP^-G/U~ 0~zT썭;+TjȨ2LL`Q-)$hXZv 3_Aryď_OТl܇N|KSt[)vwULQQo K).)qY<1bVaY -fժS H!R H!B0B!( B!4>jjx<<*cݦZzaaV'聾Q5h!Ѝdxj|7 eٍJ*}]!;E|TY }Fϛ3E|B \RL3g+#}tiM@5,iW_hɃS͊]G#q nuRȌ8|m  zcqs@h_`VB v<f DZE>oZnhDYSv/)cUί|VfȨ<Gۧ twxsh4f=i~:OжECm6?  ןǠ\P=lRe;%q9#U2ǰ.PNX _øޖhe^|C)"pmYVEUdl@V4+? ,]կ 슸( pqO1g5qs{^@ݾ1ee#b*V ߾ UPd Kŕ}P״م)|7`5nh  ks&h9f% aFkܲ.*W@ەwYuZ7ԕ{6ϲAf=ڡX b؆ b5EV}FrL:92Eg4*Dlӆb_(1p=jgʕóg@ST@[?B)߯'cU AP$}:.+câ LjKIv_@rϢbj]rl4BE?1¤͗FR힅8D3UB;?><4K:x?w,Wx_٪/%g߅xpo42I1e[ʳ&;a̗ѹU=T$aj,3ߓZQ/% U:.Ċ]аf5TbGkMud 3?:?/k2pԷѺ y)9 RHj6VK.pR F1'V;֯I6nnD80eHK tskW[)#wk2VQV2RӚ3 \nK@"A-99wy0s o^N? Ajױ>2qm''C^K 7etW\N4̶Od:Uzw2/LگP lnyɊ AJkrn]# 1f9fn$"a v42j9G"_UF/}eF["X{b=`8$v@k؍Kq6: YiQؽW43B-%+ AHȊF+ KAZI|mU}7=krE OCMx\G08Z柞|^xk8r3Y`+Y2Vַ\!^AjZ4\>kVs46PϗB%OAߓ,W#~/Όfh9.0vL8.@|9gefVR:\jXb%*x,DFyx"\ ëu{0֟γ^4T=dn 4\WzUtы%gܽK1wž0CO!;Q 0Ş U흈:bG&V"|((TН~UA Ѧt8D?oZoQ>/6 2VkK?B!"tbߠ*hwAzG=PG(@󦊬(lQEB"ͳ X'Ѽ^A4i}&AXk]ר'7w%{Qs D/м:t=;1ȴʞ!X4[)dlU~ҥ/fc~ `6K#߷&GMAA # 6nyP.~U0&V}Qpoר3݅(ӫZxY}qच0) x`1jgB6 " {R˅gCNJXyAv~)A,{R>Rf4\_js\ccq?S|Iح.ݑoqUV+n9䏾 -}`2"rݓy+K-,p;B~AТJ_QO Jo,|)Q_!^&-W]c9x"zl5$N/]6 DR p-jCqjʋ0 ~2VC \J#$&~4QڨW:fTc$(kڌU/藷d gAҜ@N:u^qUrcq^ -Xz@ fK+w݊*>U {b`3:,\ERzt۴*n  {лRk,NةJ e(Zvbf"/~ ^ v9#TQ7ث[ LGP ۣ|2ְbAAj= F(g6_),"-@E0JӜEmGAIA$2ѮK1o >c*-`eUY9^]ԬZ +;E_|LD VJQ{aF)y*tAɽ ڲ{mk;%#"-WWSqN k%l/*3q /ʻXy/z\߁ 60nwg?%&~a: i)8BօxUN런!CF6GnU,z n60q.|&e:y3)ԭ|c +xy pbmK'TqPkAi׻trs)81Z:KmvMǮAh=r穳pZ,1S 9YӤ~Y#­k!v*.VT[w2qkx $(D6~m}zA龩tϤvտĵ4JV#Bg BAq b?f(X W$X%,陈 A3\S-T +y{Q2!u3fC!)k@J]rA}zL|5alҎ`b#F`FHG(E!וNtB4' WuNﻢ\[h_^rĄ ÂkQuoa5.e[=OD( aPأPRTQ٥ +kǽ_ ӯ{M08{?P^GDϺ(')ñ-' [^Ūd#g^fDJnpw kڻowzW_긣a@#n uX4򱇭 vHCSazj(3*a.nAvL[M22)H„ip7틡6~g2f&@0YR:˰Ԇx_I^V0yVx /%y}KJ|!BPZȨ!oͻocBw x(E!^sdNT:ҷ/(ZoFO?OS-t"5|yc,rcEUX瑰b,T@Opy|rRL!}}a17Ĕ,]Hx^BPo{9ڇp95 O~ކϬΊ"rb|dy\m43fH A #W8ŚCCbpx|mxa.('Fg ¯x?!2Ҋh6s}*Njr /jM5ݵ2NB0BY $e\P} &Q_+aɦpVUr66(臺#w#Hq'AJѧs1 ú{Ѵx!OodvHrn2OFX9/$bKQq;>%w Ҧ34f$Ƽ )y^Xq+O..LmW'VNVw|$&?JQ/v.\+ ]\ <*AsgT<GA0l$6x(=Cl m}yTg̽B۪x>K*NAC81LX_M~? LW׵PL<NLL];ZD!7~@ǙQL K-sy%{Td' \~&ڐ,bBGs wsshb!$öGnYLwD'RhU[|&nMAC $yVm{܃>~~OcW_HOƱ4X{M77=ewlB0υ 37_-\(dd?}LƦ=Z*G<qj_o]w@Ht~2pYjI8we6jE U$h8yCmj뜂S??`GP;bADA5-j]N<\g㖮̬T P[yj52/oҿSqr4]1MہCuR t)åo6Eece r7v[#ulHfΈT;< 屬obxa[nkޥoQž6h0 "qW0uDW\^MOA6 Sy8 \Zmv/z4;0U95c!첅L pFCsCQڽh\Q_[<C_)4IiRs1V;]X$BKG7/'ơ!~-&g DHo8B"5Nen k^uC̤Ⱦ5npl`vM{թ84DymjA%b!uF,@ĭ+ę'۲'XDGУ;vփ}!/Hf oUV;ZY R88ԣ%o˩ 6X ~auj49!$T6l{3MOD>a+/π{{sjʐ` <~bG{xTf  3"'&(&IJY {?2 d2[+߆[0&ѭ ĀMs ;y:}_sBaǯ|Tw'm_LyM87Zn`޵9hTA:AYŁA7xSm鄊#2 Q<?GsS,k(x5al`b#o{O\" w/oHOt.krtZݥX A֞>}a͕G$tvFXFB;=h7IلNrhQϋ hP_uYj oܛl<@75Pm3V=#0g-l[ALjbC;'Ȼn_' ua7 D=!"^ij9>=?ز4cw _]=2Tw0l;Qৼԫh&tD[G] tF@d5Ԭ:B0rv :}0V?Ɩ!uh#|柀au;xC>-;BKYvu0hynHՃ T 1vUᦍB5ܳ*l@CãBPԽc2x6Eߨ@uڽ2+C:6~GJ'[[Kޕ TӢ~ߴ #Lbfw֏pucF\ya/S8% 1;l!iٗj S@~kX"q ,i8=U:{R:|tbkc *Ѣ`4pSb!}dzNpE T EФ` 2\23H֮.U\xfBN5̾ޅ~m_!Hl`S6 秣}\؍E5xcv2DˁA *A̬YI^V0I?VYPgᐷYAW !hh2aHQGѿ':aUW9C< ǛonN R4O+ʗ;i|G)dxdFo $n 0nڋ_π 7g׃ A!!HAaT_6p@7sF (x>cmڥ򒺡'77~ros?!J}}<J/ cȄQY8.lI]2&xqBt&St/.Du74s$]0qC.aJ574nJ۾_^!!H(EGPe9&A̼4 AWW1po4?!lY?W^ra4*7?$&zQqty AM9,.FW9/ 7/Wg@ȸ%\̬NS Ʋxūll޳:$׿1L&A|ʺ2.1d!EAօ_~Bp";.䅎s=vεv]Yn6dWTS5S=__w@W.[xT{+̍:FwYdy}*Ǿk‹Z #?.}A:-=\:2wh7b}CyBg +u"Gj.#:' 2A >FWxbS}v NUm=9Ņn-d޷>Cl {V^gT<G:AV/-FaX/v@TwTP3rw&@[ d6pk4Ʈ*>'x%m i|i|&@iHy#"b_9sS;{&~R{&BPFgM~TǤ )_%Q<3CCbpx|>=Z @vwBo`4]?0|\|:=&? 3A풋K(whP?Ib˧Mholtȣ:cðH7Uni(Z~)OD Y͵}zd6\`ɖ\Scw@wMi:KgEԤ`W^]O;"?֫áMMZcUΰFc!vQM&NdσFV6 SB {?@ayTM ꣰ywat;νGW\St%T)u-T ;]cBq:E03µl%ҎOC#L'!c/9 LRN!iQp/܀RZ_ӼT?:+\4vFgE4{@JܘNoSPirp{Rl୩֐ro3WBIGPǑ(q[Q1vق@x!(૓!K_w.kF L 3.FNG-y㳮(|22jd^ތsx-\a>7&^8B8łU%W Y {2Ʀ=@^#LۻBehѨhί(Lmz?1Da[#7,;"T[>YSؽ,bpM8?<!3xJǡY5!Lgv틪("៉7pfXfgewZk9.HTyv `vrF08GtHqr4]1fہC `i<=nl 砕;5~~"LDmt:vdKS!]5;Cj_SqsD8TR~_a/G~Z~3~P+pcEwx;6<+ %6] p.YܳP1<2$c"TW0A1 {3)c{;. ||( ݶո0 OG[?U 273j_oÕTc8 BM,?6uGwL7쎿LC=,֦>8A}7`;z[B1T7c5{ͼn!NvR ݻ)P(l5hQYsn1_? A*e)m6 MZcûfzj..hiC,F><ŨV f^pȆi%sߑ}DcYjZBa!XD!LĄCIv SمO(L8!(g7QS*G ʣ͟k.7g ? r[#?0gW_߯}^lk A)Ҿpj[ >=\} )XӮ2*O bLlt! pFyɻsyŮ\ prF5xľ,0?@&᭽_/Hg7뚬~>:Qj*!HP52%#32Sau5\\ABЬ )t4O.'q%s}MT:t ǧ /oïl*d^<^0}:zqs>j A?B.O SSX.=1!hU?9o+\ee!qR/?N:Bb&5\wdmQrި;x%ni_HD)h| Q45%X#h"c3]۳klN:u*<ͣ=Qٰcۣj<=0=ƒWW~ Oe>-iۈf⼓@su5& ]3G- d?p&,&By\X;HohpBP/+ABp`aR7р`w>1y.~k .T13*!ksctђ7 =ݱCS 0?C5$4fm60tWN:)8K=a&y9!xW@6KX!~!#P X$TgfB6|>R +w .H"0 3a&װ<7J:5,΁<Ņcrkn[&%dH!|6~#Njy^j!_B^ .N°a۸wq3ñ}KSlx q/焅B0k'!ԓ>hz0fl4 _<邪~nٹ"a↹#͡xa,Bd0(O@%cZթ<$6S`$loXwOCMbɹ 3ҽ VqY9:c!{DӯAj9)0l}:ոB|4<7zl9B!Ρ:X9#aR6lt~ 鶾ScRpH`S -I!P7By.`aXwOWO \[>xqX5zaE.CGW oC[ -"d¾RBpS[ 1D?ՁO2'lt*G9uCݑ`¢|[tFHfߥcvK='TSPݚx:&ǾHС_"< F=~ @שZ%7<9a`]/X0|\r|mh\yx.d;}:!۳) ;sB "}#ac.[%*>U"*ޗ¿peЧ;g}xO_?AR\\ƀ|Z0RLLW;ݵIyx'{nt o)85,i Wmz8^,7E A#j14f$Ƽ ){{a]MH}kn}wUG@b}SO0TyT"`ʝ>an,W*Ʀ,=O}oRv}8:8QDGp+? s! T hSI@iD{L=90o ؅˜/!|6l yTg̽"4/"csOV6dc5YvEu!MyH: A olamP $Z]1n!F WSʣ8+٣';T5B^qpcVMH&d&{&qf.oV$t9򮯯6)BG.m} ؉ڸXjSCz fĕླྀ{Btu1ҮI_,ڢkpExrK>ڻnF܃>~~pQ.nnZW M27uGoƞř 샽\5wZk9.(y1FPWy^\^¹d m>v.]SfNG-yӏHՖ:i/M<)pg9㺻8E4*f>pqkLp*Sx)jãdD/ot]eR!8- xK`{Pg1ì9̸Fw[͠184e6./5/Q{=[ 3OQ(NFk"]U@c;pP>v.r\0;V k!pnyj|JM۰BЀ܇8nT2y :O;H3Xo]^Qi[n7BӢ*Цbyi=)jͻ+\NiS,{3bzy4fEhV /(E۩ӷuHCѺ`#;/<_Z6"E0x+1U:c6UKߢ}mfaJTϵaGQ7J0ko_L=> 嵭ym`kWpBgeeo w<҈G)߂Wp˧`_ ga߭FR9rqH85O'"ѵP[9˓>~vzN'CZdㅠWټA6φGAd3!X"CYO*MG`oZ`okVY99~X uofcV,@:y8*{Fhet9Ӷ/ 8Q`Y}k8PgK7q`xwl D+*O>ު3}P.MlKjo}S'1S>8'lzy66\I58m?pFZl^m{TbRK3#Q~Jed=j}RGZ.874]dHn6&>=d& )q_HiE fj=y[4MFPG.]܌Y#ڡу6ps}X3u;8XJp7@BP`uC$(]! $e!/wqcO4xk{3A1`2ex`8H^nЩY)N #\1od\\?i1H^`mNg#͔'0:VL(̩&_X<-CRu-~p7+ FrM@C#$I >Cz4j @Q '+`#^|ܥpm04_-L Gӵ{svGLyz̻`tFԗmN۳kvʃz 1."lĻ5"^ Z=ঢ়.Sb`Nep1{ {SòVVxN H᭽_/HGod{Ab{qD:G~ў(/CPϱM;M[ .W̎ZrAƳ/oG9ad]GZR>7&TǏ.m<z`R|o\n"u_KIx|6j91|hGAw.bBgopyM ̀Ŋ.>jj_]jF♰PqC')2!wZyZhqaa}b&qQY']@*quz58 {.=b?f(4(qvbwhQܺv CK[-¹"ń {yCZ ua.^s'AsBT6%uW@W,<FCxZ<;FGk+]Iݥă]˱C5Vtp6X#XD3'S#/DNN䪴#Zuk[:b_"DrmܜX:m k 2i ;Apab >ApN#ZL.,^y1 e nU̬sS{ײfʬ$Y z&`1|760y"BPo2̖G+Z٭\ʆ*&;"BT\wZ%+ψPV߅Fp:Ng*sTu/{>UY׽B1TY!CAhAIWlI^eX&jX2 50\hU;qܛl bzOƨ~VX!pdedޘ/(-Bg.`9~ѹ WO>{lx ՅSR.+Xy8ÿݪc0:R1ԏeH;k럀au;9!7zi- ~U#q]]zt?MNj`װh3'vՋM5Vtp}p,QӡWsDGDϺ(Wpw~:̩&vK[=Ohޕ٩bz_ rH{aiEl VR򤼷ԫh&tD[G0Wg5vװdg8_ۜ|4x BGh&}&&dlo7F-w O7;0>k By_]Ý~84e^]/-6LW{:ӯ6rRuEl|QTpAn,C7wpg~~:GɅ]e\Pi8],}|d c~ ؛BpZ41/gb!H܎bd3~=Wq֏, ;71\5{qz LŭMʟ)CO"5~i 6+ɩ|Yڽ82m Gͻ#|aN\}׏mǮBIx SL! r3٢*mz#W8}PϙZ85:>}so&ad K$(IҰ~Bsmb˧MhoI Gu\]cmGЦ԰ז:^x{^XxQU -"#|`N=y`n.@oa2 [7Rrfx~XU"\. QX.m䯭g  IɄ&w*pF\p,qcP]>ƏV! cW'G#« hd >u µl%ҎOC#LⅠ$&|$Eq}}ok"]U@88b5PǑ[E1v$VףAA*' =~QtJy ﺍI/*ܙ_v~qT=/ۣpsT[|„p0;w7VadbuBz1rBPq~:GQ; 1 Gs| jy gLw(puI,>+y;{6K؅k,f55+kOqq)YY}VGQ}p)}QTu*LnJR k8Z `$  [$ RHAAX)$  AAV A  + AAbŹڢEIH:@?πy) 1AAKBPXTv*Z]1n!

This document describes the HydrOffice BAG library and tools ({{ version }}). For the source code, go here.

{{ body }} {% endblock %} hydroffice.bag-0.2.15/docs/_templates/sidebarintro.html0000666000000000000000000000026312672544462021260 0ustar 00000000000000 hydroffice.bag-0.2.15/docs/_templates/sidebarlogo.html0000666000000000000000000000026312672544462021065 0ustar 00000000000000 hydroffice.bag-0.2.15/docs/_theme/0000777000000000000000000000000012723323303014772 5ustar 00000000000000hydroffice.bag-0.2.15/docs/_theme/hyo/0000777000000000000000000000000012723323303015571 5ustar 00000000000000hydroffice.bag-0.2.15/docs/_theme/hyo/static/0000777000000000000000000000000012723323303017060 5ustar 00000000000000hydroffice.bag-0.2.15/docs/_theme/hyo/static/hyo.css_t0000666000000000000000000001464712653306525020741 0ustar 00000000000000/* * hyo.css_t */ {% set page_width = 940 %} {% set sidebar_width = 220 %} {% set body_font_stack = 'Optima, Segoe, "Segoe UI", Candara, Calibri, Arial, sans-serif' %} {% set headline_font_stack = 'Futura, "Trebuchet MS", Arial, sans-serif' %} {% set code_font_stack = "'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace" %} @import url("basic.css"); /* -- page layout ----------------------------------------------------------- */ body { font-family: {{ body_font_stack }}; font-size: 17px; background-color: white; color: #000; margin: 26px 0 0 0; padding: 0; } div.document { width: {{ page_width }}px; margin: 0 auto; } div.deck { font-size: 18px; } p.developmentversion { color: red; } div.related { width: {{ page_width - 20 }}px; padding: 5px 10px; background: #e8eef3; margin: 15px auto 15px auto; } div.documentwrapper { float: left; width: 100%; } div.bodywrapper { margin: 0 0 0 {{ sidebar_width }}px; } div.sphinxsidebar { width: {{ sidebar_width }}px; } hr { border: 1px solid #a7c0cf; } div.body { background-color: #ffffff; color: #3E4349; padding: 0 30px 0 30px; } img.hyologo { padding: 0 0 10px 10px; float: right; } div.footer { width: {{ page_width - 15 }}px; margin: 10px auto 30px auto; padding-right: 15px; font-size: 14px; color: #888; text-align: right; } div.footer a { color: #888; } div.sphinxsidebar a { color: #444; text-decoration: none; border-bottom: 1px dashed #DCF0D5; } div.sphinxsidebar a:hover { border-bottom: 1px solid #999; } div.sphinxsidebar { font-size: 14px; line-height: 1.5; } div.sphinxsidebarwrapper { padding: 7px 10px; } div.sphinxsidebarwrapper p.logo { padding: 0 0 20px 0; margin: 0; } div.sphinxsidebar h3, div.sphinxsidebar h4 { font-family: {{ headline_font_stack }}; color: #444; font-size: 24px; font-weight: normal; margin: 0 0 5px 0; padding: 0; } div.sphinxsidebar h4 { font-size: 20px; } div.sphinxsidebar h3 a { color: #444; } div.sphinxsidebar p.logo a, div.sphinxsidebar h3 a, div.sphinxsidebar p.logo a:hover, div.sphinxsidebar h3 a:hover { border: none; } div.sphinxsidebar p { color: #555; margin: 10px 0; } div.sphinxsidebar ul { margin: 10px 0; padding: 0; color: #000; } div.sphinxsidebar input { border: 1px solid #ccc; font-family: {{ body_font_stack }}; font-size: 1em; } /* -- body styles ----------------------------------------------------------- */ a { color: #135186; text-decoration: underline; } a:hover { color: #668aa9; text-decoration: underline; } div.body h1, div.body h2, div.body h3, div.body h4, div.body h5, div.body h6 { font-family: {{ headline_font_stack }}; font-weight: normal; margin: 30px 0px 10px 0px; padding: 0; } div.body h1 { margin-top: 0; padding-top: 0; font-size: 160%; } div.body h2 { font-size: 140%; } div.body h3 { font-size: 120%; } div.body h4 { font-size: 110%; } div.body h5 { font-size: 100%; } div.body h6 { font-size: 100%; } div.body h1 a.toc-backref, div.body h2 a.toc-backref, div.body h3 a.toc-backref, div.body h4 a.toc-backref, div.body h5 a.toc-backref, div.body h6 a.toc-backref { color: inherit!important; text-decoration: none; } a.headerlink { color: #ddd; padding: 0 4px; text-decoration: none; } a.headerlink:hover { color: #444; background: #eaeaea; } div.body p, div.body dd, div.body li { line-height: 1.4em; } div.admonition { background: #fafafa; margin: 20px -30px; padding: 10px 30px; border-top: 1px solid #ccc; border-bottom: 1px solid #ccc; } div.admonition p.admonition-title { font-family: {{ headline_font_stack }}; font-weight: normal; font-size: 24px; margin: 0 0 10px 0; padding: 0; line-height: 1; } div.admonition p.last { margin-bottom: 0; } div.highlight{ background-color: white; } dt:target, .highlight { background: #FAF3E8; } div.note { background-color: #eee; border: 1px solid #ccc; } div.seealso { background-color: #ffc; border: 1px solid #ff6; } div.topic { background-color: #eee; } div.warning { background-color: #ffe4e4; border: 1px solid #f66; } p.admonition-title { display: inline; } p.admonition-title:after { content: ":"; } pre, tt { font-family: {{ code_font_stack }}; font-size: 0.9em; } img.screenshot { } tt.descname, tt.descclassname { font-size: 0.95em; } tt.descname { padding-right: 0.08em; } img.screenshot { -moz-box-shadow: 2px 2px 4px #eee; -webkit-box-shadow: 2px 2px 4px #eee; box-shadow: 2px 2px 4px #eee; } table.docutils { border: 1px solid #888; -moz-box-shadow: 2px 2px 4px #eee; -webkit-box-shadow: 2px 2px 4px #eee; box-shadow: 2px 2px 4px #eee; } table.docutils td, table.docutils th { border: 1px solid #888; padding: 0.25em 0.7em; } table.field-list, table.footnote { border: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } table.footnote { margin: 15px 0; width: 100%; border: 1px solid #eee; background: #fdfdfd; font-size: 0.9em; } table.footnote + table.footnote { margin-top: -15px; border-top: none; } table.field-list th { padding: 0 0.8em 0 0; } table.field-list td { padding: 0; } table.footnote td.label { width: 0px; padding: 0.3em 0 0.3em 0.5em; } table.footnote td { padding: 0.3em 0.5em; } dl { margin: 0; padding: 0; } dl dd { margin-left: 30px; } blockquote { margin: 0 0 0 30px; padding: 0; } ul { margin: 10px 0 10px 30px; padding: 0; } pre { background: #5798bd; padding: 7px 10px; margin: 15px 0; border: 1px solid #C7ECB8; border-radius: 2px; -moz-border-radius: 2px; -webkit-border-radius: 2px; line-height: 1.3em; } tt { background: #5798bd; color: #222; /* padding: 1px 2px; */ } tt.xref, a tt { background: #5798bd; border-bottom: 1px solid white; } a.reference { text-decoration: none; border-bottom: 1px dashed #DCF0D5; } a.reference:hover { border-bottom: 1px solid #6D4100; } a.footnote-reference { text-decoration: none; font-size: 0.7em; vertical-align: top; border-bottom: 1px dashed #DCF0D5; } a.footnote-reference:hover { border-bottom: 1px solid #6D4100; } a:hover tt { background: #EEE; } hydroffice.bag-0.2.15/docs/_theme/hyo/theme.conf0000666000000000000000000000007012653306525017550 0ustar 00000000000000[theme] inherit = basic stylesheet = hyo.css [options] hydroffice.bag-0.2.15/examples/0000777000000000000000000000000012723323303014417 5ustar 00000000000000hydroffice.bag-0.2.15/examples/run_bag_bbox.py0000666000000000000000000000174212672544462017442 0ustar 00000000000000from __future__ import absolute_import, division, print_function, unicode_literals import subprocess import os from hydroffice.bag.helper import Helper from hydroffice.bag import tools tools_folder = os.path.abspath(os.path.dirname(tools.__file__)) tool_path = os.path.join(tools_folder, 'bag_bbox.py') print("tool: %s" % tool_path) # help print("\n\n# -h") subprocess.call("python %s -h" % tool_path) # verbose + test file file_bag_0 = os.path.join(Helper.samples_folder(), "bdb_00.bag") print("\n\n# -v %s" % file_bag_0) subprocess.call("python %s -v -o test_it.kml %s" % (tool_path, file_bag_0)) # verbose + fake file file_bag_0 = os.path.join(Helper.samples_folder(), "not_present_00.bag") print("\n\n# -v %s" % file_bag_0) subprocess.call("python %s -v %s" % (tool_path, file_bag_0)) # test file file_bag_0 = os.path.join(Helper.samples_folder(), "bdb_00.bag") print("\n\n# %s" % file_bag_0) subprocess.call("python %s %s" % (tool_path, file_bag_0)) hydroffice.bag-0.2.15/examples/run_bag_elevation.py0000666000000000000000000000210212672544462020465 0ustar 00000000000000from __future__ import absolute_import, division, print_function, unicode_literals import subprocess import os from hydroffice.bag.helper import Helper from hydroffice.bag import tools tools_folder = os.path.abspath(os.path.dirname(tools.__file__)) tool_path = os.path.join(tools_folder, 'bag_elevation.py') print("tool: %s" % tool_path) # help print("\n\n# -h") subprocess.call("python %s -h" % tool_path) # verbose + test file file_bag_0 = os.path.join(Helper.samples_folder(), "bdb_00.bag") print("\n\n# -v %s" % file_bag_0) subprocess.call("python %s -v -o test_elv.tiff %s" % (tool_path, file_bag_0)) subprocess.call("python %s -v -o test_elv.ascii -f ascii %s" % (tool_path, file_bag_0)) # verbose + fake file file_bag_0 = os.path.join(Helper.samples_folder(), "not_present_00.bag") print("\n\n# -v %s" % file_bag_0) subprocess.call("python %s -v %s" % (tool_path, file_bag_0)) # test file file_bag_0 = os.path.join(Helper.samples_folder(), "bdb_00.bag") print("\n\n# %s" % file_bag_0) subprocess.call("python %s %s" % (tool_path, file_bag_0)) hydroffice.bag-0.2.15/examples/run_bag_metadata.py0000666000000000000000000000174312672544462020271 0ustar 00000000000000from __future__ import absolute_import, division, print_function, unicode_literals import subprocess import os from hydroffice.bag.helper import Helper from hydroffice.bag import tools tools_folder = os.path.abspath(os.path.dirname(tools.__file__)) tool_path = os.path.join(tools_folder, 'bag_metadata.py') print("tool: %s" % tool_path) # help print("\n\n# -h") subprocess.call("python %s -h" % tool_path) # verbose + test file file_bag_0 = os.path.join(Helper.samples_folder(), "bdb_00.bag") print("\n\n# -v %s" % file_bag_0) subprocess.call("python %s -v -x text.xml %s" % (tool_path, file_bag_0)) # verbose + fake file file_bag_0 = os.path.join(Helper.samples_folder(), "not_present_00.bag") print("\n\n# -v %s" % file_bag_0) subprocess.call("python %s -v %s" % (tool_path, file_bag_0)) # test file file_bag_0 = os.path.join(Helper.samples_folder(), "bdb_00.bag") print("\n\n# %s" % file_bag_0) subprocess.call("python %s %s" % (tool_path, file_bag_0)) hydroffice.bag-0.2.15/examples/run_bag_tracklist.py0000666000000000000000000000175312672544462020512 0ustar 00000000000000from __future__ import absolute_import, division, print_function, unicode_literals import subprocess import os from hydroffice.bag.helper import Helper from hydroffice.bag import tools tools_folder = os.path.abspath(os.path.dirname(tools.__file__)) tool_path = os.path.join(tools_folder, 'bag_tracklist.py') print("tool: %s" % tool_path) # help print("\n\n# -h") subprocess.call("python %s -h" % tool_path) # verbose + test file file_bag_0 = os.path.join(Helper.samples_folder(), "bdb_02.bag") print("\n\n# -v %s" % file_bag_0) subprocess.call("python %s -v -hd -o test_it.csv %s" % (tool_path, file_bag_0)) # verbose + fake file file_bag_0 = os.path.join(Helper.samples_folder(), "not_present_00.bag") print("\n\n# -v %s" % file_bag_0) subprocess.call("python %s -v %s" % (tool_path, file_bag_0)) # test file file_bag_0 = os.path.join(Helper.samples_folder(), "bdb_02.bag") print("\n\n# %s" % file_bag_0) subprocess.call("python %s %s" % (tool_path, file_bag_0)) hydroffice.bag-0.2.15/examples/run_bag_uncertainty.py0000666000000000000000000000210412672544462021046 0ustar 00000000000000from __future__ import absolute_import, division, print_function, unicode_literals import subprocess import os from hydroffice.bag.helper import Helper from hydroffice.bag import tools tools_folder = os.path.abspath(os.path.dirname(tools.__file__)) tool_path = os.path.join(tools_folder, 'bag_uncertainty.py') print("tool: %s" % tool_path) # help print("\n\n# -h") subprocess.call("python %s -h" % tool_path) # verbose + test file file_bag_0 = os.path.join(Helper.samples_folder(), "bdb_00.bag") print("\n\n# -v %s" % file_bag_0) subprocess.call("python %s -v -o test_unc.tiff %s" % (tool_path, file_bag_0)) subprocess.call("python %s -v -o test_unc.ascii -f ascii %s" % (tool_path, file_bag_0)) # verbose + fake file file_bag_0 = os.path.join(Helper.samples_folder(), "not_present_00.bag") print("\n\n# -v %s" % file_bag_0) subprocess.call("python %s -v %s" % (tool_path, file_bag_0)) # test file file_bag_0 = os.path.join(Helper.samples_folder(), "bdb_00.bag") print("\n\n# %s" % file_bag_0) subprocess.call("python %s %s" % (tool_path, file_bag_0)) hydroffice.bag-0.2.15/examples/run_bag_validate.py0000666000000000000000000000172712672544462020304 0ustar 00000000000000from __future__ import absolute_import, division, print_function, unicode_literals import subprocess import os from hydroffice.bag.helper import Helper from hydroffice.bag import tools tools_folder = os.path.abspath(os.path.dirname(tools.__file__)) tool_path = os.path.join(tools_folder, 'bag_validate.py') print("tool: %s" % tool_path) # help print("\n\n# -h") subprocess.call("python %s -h" % tool_path) # verbose + test file file_bag_0 = os.path.join(Helper.samples_folder(), "bdb_00.bag") print("\n\n# -v %s" % file_bag_0) subprocess.call("python %s -v %s" % (tool_path, file_bag_0)) # verbose + fake file file_bag_0 = os.path.join(Helper.samples_folder(), "not_present_00.bag") print("\n\n# -v %s" % file_bag_0) subprocess.call("python %s -v %s" % (tool_path, file_bag_0)) # test file file_bag_0 = os.path.join(Helper.samples_folder(), "bdb_00.bag") print("\n\n# %s" % file_bag_0) subprocess.call("python %s %s" % (tool_path, file_bag_0)) hydroffice.bag-0.2.15/examples/using_bag_bag.py0000666000000000000000000000723212722165145017553 0ustar 00000000000000from __future__ import absolute_import, division, print_function, unicode_literals import os import logging from matplotlib import pyplot as plt logger = logging.getLogger() logger.setLevel(logging.NOTSET) ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) # change to WARNING to reduce verbosity, DEBUG for high verbosity ch_formatter = logging.Formatter('%(levelname)-9s %(name)s.%(funcName)s:%(lineno)d > %(message)s') ch.setFormatter(ch_formatter) logger.addHandler(ch) from hydroffice.bag import BAGFile from hydroffice.bag import BAGError from hydroffice.bag.helper import Helper # Example that use bag.BAGFile to: # - open a BAG file # - read the whole elevation and uncertainty layers # - read a selected range of rows for the elevation and uncertainty layers file_bag_0 = os.path.join(Helper.samples_folder(), "bdb_00.bag") if os.path.exists(file_bag_0): logger.debug("- file_bag_0: %s" % file_bag_0) # - open a file bag_0 = BAGFile(file_bag_0) logger.debug("\n%s\n" % bag_0) # - get elevation shape logger.info("elevation shape: %s" % (bag_0.elevation_shape(), )) # - read the full elevation full_elevation = bag_0.elevation(mask_nan=True) logger.info("elevation array:\n type: %s\n shape: %s\n dtype: %s" % (type(full_elevation), full_elevation.shape, full_elevation.dtype)) ax = plt.contourf(full_elevation) plt.colorbar(ax) plt.show() # - read the first 10 rows of the elevation layers selection_slice = slice(0, 10) sliced_elevation = bag_0.elevation(mask_nan=True, row_range=selection_slice) logger.info("sliced elevation array:\n type: %s\n shape: %s\n dtype: %s" % (type(sliced_elevation), sliced_elevation.shape, sliced_elevation.dtype)) ax = plt.contourf(sliced_elevation) plt.colorbar(ax) plt.show() # - get uncertainty shape logger.info("uncertainty shape: %s" % (bag_0.uncertainty_shape(), )) # - read the full uncertainty full_uncertainty = bag_0.uncertainty(mask_nan=True) logger.info("uncertainty array:\n type: %s\n shape: %s\n dtype: %s" % (type(full_uncertainty), full_uncertainty.shape, full_uncertainty.dtype)) ax = plt.contourf(full_uncertainty) plt.colorbar(ax) plt.show() # - read the first 10 rows of the uncertainty layers selection_slice = slice(10, 20) sliced_uncertainty = bag_0.uncertainty(mask_nan=True, row_range=selection_slice) logger.info("sliced uncertainty array:\n type: %s\n shape: %s\n dtype: %s" % (type(sliced_uncertainty), sliced_uncertainty.shape, sliced_uncertainty.dtype)) ax = plt.contourf(sliced_uncertainty) plt.colorbar(ax) plt.show() # - tracking list logger.debug("\ntracking list:\n type: %s\n shape: %s\n dtype: %s" % (type(bag_0.tracking_list()), bag_0.tracking_list().shape, bag_0.tracking_list().dtype)) # - metadata logger.debug("\nmetadata: %s %s\n" % (type(bag_0.metadata()), len(bag_0.metadata()))) file_bag_0_xml = os.path.join("bdb_00.bag.xml") bag_0.extract_metadata(name=file_bag_0_xml) bag_0.populate_metadata() logger.debug("rows, cols: %d, %d" % (bag_0.meta.rows, bag_0.meta.cols)) logger.debug("res x, y: %f, %f" % (bag_0.meta.res_x, bag_0.meta.res_y)) logger.debug("corner SW, NE: %s, %s" % (bag_0.meta.sw, bag_0.meta.ne)) logger.debug("coord sys: %s" % bag_0.meta.wkt_srs) logger.debug(bag_0) file_bag_1 = os.path.join(Helper.samples_folder(), "bdb_01.bag") if os.path.exists(file_bag_1): logger.debug("file_bag_1: %s" % file_bag_1) file_bag_2 = os.path.abspath(os.path.join("test_00.bag")) logger.debug("file_bag_2: %s" % file_bag_2) bag_2 = BAGFile.create_template(file_bag_2) bag_2.close() if os.path.exists(file_bag_2): os.remove(file_bag_2) hydroffice.bag-0.2.15/examples/using_bag_base.py0000666000000000000000000000317612722154472017740 0ustar 00000000000000from __future__ import absolute_import, division, print_function, unicode_literals import os import logging logger = logging.getLogger() logger.setLevel(logging.NOTSET) ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) # change to WARNING to reduce verbosity, DEBUG for high verbosity ch_formatter = logging.Formatter('%(levelname)-9s %(name)s.%(funcName)s:%(lineno)d > %(message)s') ch.setFormatter(ch_formatter) logger.addHandler(ch) # Example that use bag.base to: # - test for being a BAG file # - open and read some metadata info from a BAG file from hydroffice.bag.base import is_bag, File from hydroffice.bag.helper import Helper file_bag_0 = os.path.join(Helper.samples_folder(), "bdb_00.bag") if os.path.exists(file_bag_0): logger.info("- file_bag_0: %s is BAG? %r" % (file_bag_0, is_bag(file_bag_0))) file_bag_1 = os.path.join(Helper.samples_folder(), "bdb_01.bag") if os.path.exists(file_bag_1): logger.info("- file_bag_1: %s is BAG? %r" % (file_bag_1, is_bag(file_bag_1))) file_fake_0 = os.path.join(Helper.samples_folder(), "fake_00.bag") if os.path.exists(file_fake_0): logger.info("- file_fake_0: %s is BAG? %r" % (file_fake_0, is_bag(file_fake_0))) bag_0 = File(file_bag_0) logger.info("\n%s\n" % bag_0) logger.info("filename: %s" % bag_0.filename) logger.info("attributes for %s: %d" % (bag_0.attrs, len(bag_0.attrs))) logger.info("driver: %s" % bag_0.driver) bag_0.flush() bag_0.close() logger.info("\n%s\n" % bag_0) bag_1 = File(file_bag_1) bag_1.flush() bag_1.close() try: fake_0 = File(file_fake_0) except IOError: logger.info("Expected exception") hydroffice.bag-0.2.15/examples/using_bag_bbox.py0000666000000000000000000000255012672544462017761 0ustar 00000000000000from __future__ import absolute_import, division, print_function, unicode_literals import os import logging from matplotlib import pyplot as plt logger = logging.getLogger() logger.setLevel(logging.NOTSET) ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) # change to WARNING to reduce verbosity, DEBUG for high verbosity ch_formatter = logging.Formatter('%(levelname)-9s %(name)s.%(funcName)s:%(lineno)d > %(message)s') ch.setFormatter(ch_formatter) logger.addHandler(ch) from hydroffice.bag import BAGFile from hydroffice.bag import BAGError from hydroffice.bag.helper import Helper file_bag_0 = os.path.join(Helper.samples_folder(), "bdb_00.bag") if os.path.exists(file_bag_0): print("- file_bag_0: %s" % file_bag_0) bag_0 = BAGFile(file_bag_0) print(bag_0) print(type(bag_0.elevation(mask_nan=True)), bag_0.elevation(mask_nan=True).shape, bag_0.elevation(mask_nan=True).dtype) # ax =plt.contourf(bag_0.elevation(mask_nan=True)) # plt.colorbar(ax) # plt.show() bag_meta = bag_0.populate_metadata() print(bag_meta) from hydroffice.bag.bbox import Bbox2Gdal Bbox2Gdal(bag_meta, fmt="gjs", title=os.path.basename(file_bag_0)) Bbox2Gdal(bag_meta, fmt="gml", title=os.path.basename(file_bag_0)) Bbox2Gdal(bag_meta, fmt="kml", title=os.path.basename(file_bag_0)) Bbox2Gdal(bag_meta, fmt="shp", title=os.path.basename(file_bag_0)) hydroffice.bag-0.2.15/examples/using_bag_elevation.py0000666000000000000000000000233712672544462021020 0ustar 00000000000000from __future__ import absolute_import, division, print_function, unicode_literals import os import logging from matplotlib import pyplot as plt logger = logging.getLogger() logger.setLevel(logging.NOTSET) ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) # change to WARNING to reduce verbosity, DEBUG for high verbosity ch_formatter = logging.Formatter('%(levelname)-9s %(name)s.%(funcName)s:%(lineno)d > %(message)s') ch.setFormatter(ch_formatter) logger.addHandler(ch) from hydroffice.bag import BAGFile from hydroffice.bag import BAGError from hydroffice.bag.helper import Helper bag_file = os.path.join(Helper.samples_folder(), "bdb_00.bag") if os.path.exists(bag_file): print("- file_bag_0: %s" % bag_file) bag = BAGFile(bag_file) bag_meta = bag.populate_metadata() print(bag_meta) bag_elevation = bag.elevation(mask_nan=False) print(type(bag.elevation()), bag.elevation().shape, bag.elevation().dtype) from hydroffice.bag.elevation import Elevation2Gdal Elevation2Gdal(bag_elevation=bag_elevation, bag_meta=bag_meta, fmt="ascii") Elevation2Gdal(bag_elevation=bag_elevation, bag_meta=bag_meta, fmt="geotiff") Elevation2Gdal(bag_elevation=bag_elevation, bag_meta=bag_meta, fmt="xyz") hydroffice.bag-0.2.15/examples/using_bag_elevation_with_reprojection.py0000666000000000000000000000240012674134102024611 0ustar 00000000000000from __future__ import absolute_import, division, print_function, unicode_literals import os import logging from matplotlib import pyplot as plt logger = logging.getLogger() logger.setLevel(logging.NOTSET) ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) # change to WARNING to reduce verbosity, DEBUG for high verbosity ch_formatter = logging.Formatter('%(levelname)-9s %(name)s.%(funcName)s:%(lineno)d > %(message)s') ch.setFormatter(ch_formatter) logger.addHandler(ch) from hydroffice.bag import BAGFile from hydroffice.bag import BAGError from hydroffice.bag.helper import Helper bag_file = os.path.join(Helper.samples_folder(), "bdb_00.bag") if os.path.exists(bag_file): print("- file_bag_0: %s" % bag_file) bag = BAGFile(bag_file) bag_meta = bag.populate_metadata() print(bag_meta) bag_elevation = bag.elevation(mask_nan=False) print(type(bag.elevation()), bag.elevation().shape, bag.elevation().dtype) from hydroffice.bag.elevation import Elevation2Gdal Elevation2Gdal(bag_elevation=bag_elevation, bag_meta=bag_meta, fmt="ascii", epsg=4326) Elevation2Gdal(bag_elevation=bag_elevation, bag_meta=bag_meta, fmt="geotiff", epsg=4326) Elevation2Gdal(bag_elevation=bag_elevation, bag_meta=bag_meta, fmt="xyz", epsg=4326) hydroffice.bag-0.2.15/examples/using_bag_helper.py0000666000000000000000000000165212672544462020310 0ustar 00000000000000from __future__ import absolute_import, division, print_function, unicode_literals import os import logging logger = logging.getLogger() logger.setLevel(logging.NOTSET) ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) # change to WARNING to reduce verbosity, DEBUG for high verbosity ch_formatter = logging.Formatter('%(levelname)-9s %(name)s.%(funcName)s:%(lineno)d > %(message)s') ch.setFormatter(ch_formatter) logger.addHandler(ch) from hydroffice.bag.helper import BAGError, Helper try: raise BAGError("test") except BAGError as e: print(e) data_folder = Helper.samples_folder() if os.path.exists(data_folder): print("data folder: %s" % data_folder) iso_folder = Helper.iso19139_folder() if os.path.exists(iso_folder): print("iso folder: %s" % iso_folder) iso_folder = Helper.iso19757_3_folder() if os.path.exists(iso_folder): print("iso folder: %s" % iso_folder) hydroffice.bag-0.2.15/examples/using_bag_tracklist.py0000666000000000000000000000202112672544462021020 0ustar 00000000000000from __future__ import absolute_import, division, print_function, unicode_literals import os import logging from matplotlib import pyplot as plt logger = logging.getLogger() logger.setLevel(logging.NOTSET) ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) # change to WARNING to reduce verbosity, DEBUG for high verbosity ch_formatter = logging.Formatter('%(levelname)-9s %(name)s.%(funcName)s:%(lineno)d > %(message)s') ch.setFormatter(ch_formatter) logger.addHandler(ch) from hydroffice.bag import BAGFile from hydroffice.bag import BAGError from hydroffice.bag.helper import Helper from hydroffice.bag.tracklist import TrackList2Csv bag_file = os.path.join(Helper.samples_folder(), "bdb_00.bag") bag = BAGFile(bag_file) tl = bag.tracking_list() tl2csv = TrackList2Csv(tl) bag_file = os.path.join(Helper.samples_folder(), "bdb_02.bag") bag = BAGFile(bag_file) tl = bag.tracking_list() tl_fields = bag.tracking_list_fields() print(tl_fields) tl2csv = TrackList2Csv(track_list=tl, header=tl_fields) hydroffice.bag-0.2.15/examples/using_bag_uncertainty.py0000666000000000000000000000214412672544462021373 0ustar 00000000000000from __future__ import absolute_import, division, print_function, unicode_literals import os import logging from matplotlib import pyplot as plt logger = logging.getLogger() logger.setLevel(logging.NOTSET) ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) # change to WARNING to reduce verbosity, DEBUG for high verbosity ch_formatter = logging.Formatter('%(levelname)-9s %(name)s.%(funcName)s:%(lineno)d > %(message)s') ch.setFormatter(ch_formatter) logger.addHandler(ch) from hydroffice.bag import BAGFile from hydroffice.bag import BAGError from hydroffice.bag.helper import Helper bag_file = os.path.join(Helper.samples_folder(), "bdb_00.bag") if os.path.exists(bag_file): print("- file_bag_0: %s" % bag_file) bag = BAGFile(bag_file) bag_meta = bag.populate_metadata() print(bag_meta) bag_uncertainty = bag.uncertainty(mask_nan=True) print(type(bag.elevation(mask_nan=True)), bag.elevation(mask_nan=True).shape, bag.elevation(mask_nan=True).dtype) from hydroffice.bag.uncertainty import Uncertainty2Gdal Uncertainty2Gdal(bag_uncertainty, bag_meta, fmt="geotiff") hydroffice.bag-0.2.15/examples/using_bag_uncertainty_with_reprojection.py0000666000000000000000000000250212674133225025200 0ustar 00000000000000from __future__ import absolute_import, division, print_function, unicode_literals import os import logging from matplotlib import pyplot as plt logger = logging.getLogger() logger.setLevel(logging.NOTSET) ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) # change to WARNING to reduce verbosity, DEBUG for high verbosity ch_formatter = logging.Formatter('%(levelname)-9s %(name)s.%(funcName)s:%(lineno)d > %(message)s') ch.setFormatter(ch_formatter) logger.addHandler(ch) from hydroffice.bag import BAGFile from hydroffice.bag import BAGError from hydroffice.bag.helper import Helper bag_file = os.path.join(Helper.samples_folder(), "bdb_00.bag") if os.path.exists(bag_file): print("- file_bag_0: %s" % bag_file) bag = BAGFile(bag_file) bag_meta = bag.populate_metadata() print(bag_meta) bag_uncertainty = bag.uncertainty(mask_nan=True) print(type(bag.elevation(mask_nan=True)), bag.elevation(mask_nan=True).shape, bag.elevation(mask_nan=True).dtype) from hydroffice.bag.uncertainty import Uncertainty2Gdal Uncertainty2Gdal(bag_uncertainty=bag_uncertainty, bag_meta=bag_meta, fmt="ascii", epsg=4326) Uncertainty2Gdal(bag_uncertainty=bag_uncertainty, bag_meta=bag_meta, fmt="geotiff", epsg=4326) Uncertainty2Gdal(bag_uncertainty=bag_uncertainty, bag_meta=bag_meta, fmt="xyz", epsg=4326) hydroffice.bag-0.2.15/HISTORY.rst0000666000000000000000000000063212722165555014511 0ustar 00000000000000History ------- 0.2 ~~~ 2016-05-27 - Added option to read a slice of rows for elevation and uncertainty layers 2016-03-21 - Added option to reproject layers into user-defined EPSG 2015-10-24 - Split BAG Explorer as stand-alone hydro-package 2015-10-09 - Added BAG Explorer - Started Schematron schema for BAG Metadata profile 0.1 ~~~ 2015-03-31 - Initial commit. hydroffice.bag-0.2.15/hydroffice/0000777000000000000000000000000012723323303014723 5ustar 00000000000000hydroffice.bag-0.2.15/hydroffice/bag/0000777000000000000000000000000012723323303015454 5ustar 00000000000000hydroffice.bag-0.2.15/hydroffice/bag/bag.py0000666000000000000000000003040012722164424016562 0ustar 00000000000000from __future__ import absolute_import, division, print_function # , unicode_literals import os import sys import logging import numpy as np import h5py from lxml import etree log = logging.getLogger(__name__) from .base import is_bag, File from .helper import BAGError, Helper from .meta import Meta class BAGFile(File): """ Represents a BAG file. """ _bag_root = "BAG_root" _bag_version = "Bag Version" _bag_version_number = b'1.5.3' _bag_elevation = "BAG_root/elevation" _bag_elevation_min_ev = "Minimum Elevation Value" _bag_elevation_max_ev = "Maximum Elevation Value" _bag_metadata = "BAG_root/metadata" _bag_tracking_list = "BAG_root/tracking_list" _bag_tracking_list_len = "Tracking List Length" _bag_tracking_list_type = np.dtype([('row', np.uint32), ('col', np.uint32), ('depth', np.float32), ('uncertainty', np.float32), ('track_code', np.byte), ('list_series', np.uint16)]) _bag_uncertainty = "BAG_root/uncertainty" _bag_uncertainty_min_uv = "Minimum Uncertainty Value" _bag_uncertainty_max_uv = "Maximum Uncertainty Value" BAG_NAN = 1000000 default_metadata_file = "BAG_metadata.xml" def __init__(self, name, mode=None, driver=None, libver=None, userblock_size=None, swmr=False, **kwds): """ Create a new file object. See the low level bag.File for a detailed explanation of the options. """ if mode is not None: if 'w' not in mode: if not is_bag(name): raise BAGError("The passed file %s is not a BAG file") super(BAGFile, self).__init__(name=name, mode=mode, driver=driver, libver=libver, userblock_size=userblock_size, swmr=swmr, **kwds) self.meta = None self.meta_errors = list() self._str = None @classmethod def create_template(cls, name): """ create a BAG file with empty template structure """ log.debug("create new BAG file: %s" % name) try: new_bag = File(name, 'w') new_bag.create_group(cls._bag_root) new_bag.attrs.create(cls._bag_version, cls._bag_version_number, shape=(), dtype="S5") elevation = new_bag.create_dataset(cls._bag_elevation, shape=(), dtype=np.float32) elevation.attrs.create(cls._bag_elevation_min_ev, 0.0, shape=(), dtype=np.float32) elevation.attrs.create(cls._bag_elevation_max_ev, 0.0, shape=(), dtype=np.float32) new_bag.create_dataset(cls._bag_metadata, shape=(1, ), dtype="S1") tracking_list = new_bag.create_dataset(cls._bag_tracking_list, shape=(), dtype=cls._bag_tracking_list_type) tracking_list.attrs.create(cls._bag_tracking_list_len, 0, shape=(), dtype=np.uint32) uncertainty = new_bag.create_dataset(cls._bag_uncertainty, shape=(), dtype=np.float32) uncertainty.attrs.create(cls._bag_uncertainty_min_uv, 0.0, shape=(), dtype=np.float32) uncertainty.attrs.create(cls._bag_uncertainty_max_uv, 0.0, shape=(), dtype=np.float32) except (BAGError, OSError) as e: raise BAGError("Unable to create the BAG file %s: %s" % (name, e)) return new_bag def elevation(self, mask_nan=True, row_range=None): """ Return the elevation as numpy array mask_nan If True, apply a mask using the BAG nan value row_range If present, a slice of rows to read from """ if row_range: if not isinstance(row_range, slice): raise BAGError("Invalid type of slice selector: %s" % type(row_range)) if (row_range.start < 0) or (row_range.start >= self.elevation_shape()[0]) \ or (row_range.stop < 0) or (row_range.stop > self.elevation_shape()[0]) \ or (row_range.start > row_range.stop): raise BAGError("Invalid values for slice selector: %s" % row_range) if mask_nan: if row_range: el = self[BAGFile._bag_elevation][row_range] else: el = self[BAGFile._bag_elevation][:] mask = el == BAGFile.BAG_NAN el[mask] = np.nan return el if slice: return self[BAGFile._bag_elevation][row_range] else: return self[BAGFile._bag_elevation][:] def elevation_shape(self): return self[BAGFile._bag_elevation].shape def uncertainty(self, mask_nan=True, row_range=None): """ Return the uncertainty as numpy array mask_nan If True, apply a mask using the BAG nan value row_range If present, a slice of rows to read from """ if row_range: if not isinstance(row_range, slice): raise BAGError("Invalid type of slice selector: %s" % type(row_range)) if (row_range.start < 0) or (row_range.start >= self.uncertainty_shape()[0]) \ or (row_range.stop < 0) or (row_range.stop > self.uncertainty_shape()[0]) \ or (row_range.start > row_range.stop): raise BAGError("Invalid values for slice selector: %s" % row_range) if mask_nan: if row_range: un = self[BAGFile._bag_uncertainty][row_range] else: un = self[BAGFile._bag_uncertainty][:] mask = un == BAGFile.BAG_NAN un[mask] = np.nan return un if slice: return self[BAGFile._bag_uncertainty][row_range] else: return self[BAGFile._bag_uncertainty][:] def uncertainty_shape(self): return self[BAGFile._bag_uncertainty].shape def tracking_list(self): """ Return the tracking list as numpy array """ return self[BAGFile._bag_tracking_list][:] def tracking_list_fields(self): """ Return the tracking list field names """ return self[BAGFile._bag_tracking_list].dtype.names def metadata(self, as_string=True, as_pretty_xml=True): """ Return the metadata as_string If True, convert the metadata from a dataset of characters to a string as_pretty_xml If True, return the xml in a pretty format """ if as_string and not as_pretty_xml: try: return self[BAGFile._bag_metadata][:].tostring() except RuntimeError as e: log.info("exception raised: %s" % e) return None if as_pretty_xml: try: xml_tree = etree.fromstring(self[BAGFile._bag_metadata][:].tostring()) return etree.tostring(xml_tree, pretty_print=True) except RuntimeError as e: log.info("exception raised: %s" % e) return None return self[BAGFile._bag_metadata][:] def extract_metadata(self, name=None): """ Save metadata on disk name The file path where the metadata will be saved. If None, use a default name. """ meta_xml = self.metadata(as_pretty_xml=True) if meta_xml is None: log.info("unable to access the metadata") return if name is None: name = os.path.join(self.default_metadata_file) with open(os.path.abspath(name), 'w') as fid: fid.write(meta_xml) def validate_metadata(self): """ Validate metadata based on XML Schemas and schematron. """ # clean metadata error list self.meta_errors = list() # assuming a valid BAG is_valid = True try: xml_tree = etree.fromstring(self.metadata(as_pretty_xml=True)) except etree.Error as e: log.warning("unabled to parse XML metadata: %s" % e) self.meta_errors.append(e.message) return False try: schema_path = os.path.join(Helper.iso19139_folder(), 'bag', 'bag.xsd') schema_doc = etree.parse(schema_path) schema = etree.XMLSchema(schema_doc) except etree.Error as e: log.warning("unabled to parse XML schema: %s" % e) self.meta_errors.append(e.message) return False try: schema.assertValid(xml_tree) except etree.DocumentInvalid as e: log.warning("invalid metadata based on XML schema: %s" % e) self.meta_errors.append(e.message) for i in schema.error_log: self.meta_errors.append(i) is_valid = False if is_valid: log.debug("xsd validated") try: schematron_path = os.path.join(Helper.iso19757_3_folder(), 'bag_metadata_profile.sch') schematron_doc = etree.parse(schematron_path) except etree.DocumentInvalid as e: log.warning("unabled to parse BAG schematron: %s" % e) self.meta_errors.append(e.message) return False try: from lxml import isoschematron except IOError as e: msg = "Unable to load lxml isoschematron files" log.warning("%s: %s" % (msg, e)) self.meta_errors.append(e.message) return False try: schematron = isoschematron.Schematron(schematron_doc, store_report=True) except etree.DocumentInvalid as e: log.warning("unabled to load BAG schematron: %s" % e) self.meta_errors.append(e.message) return False if schematron.validate(xml_tree): log.debug("schematron validated") else: log.warning("invalid metadata based on Schematron") is_valid = False ns = { 'svrl': 'http://purl.oclc.org/dsdl/svrl', } for i in schematron.error_log: err_tree = etree.fromstring(i.message) # print(etree.tostring(err_tree, pretty_print=True)) err_msg = err_tree.xpath('/svrl:failed-assert/svrl:text', namespaces=ns)[0].text.strip() log.warning(err_msg) self.meta_errors.append(err_msg) return is_valid def validation_info(self): """ Return a message string with the result of the validation """ msg = str() msg += "XML input source: %s\nValidation output: " % self._bag_metadata if self.validate_metadata(): msg += "VALID" else: msg += "INVALID\nReasons:\n" for err_msg in self.meta_errors: msg += " - %s\n" % err_msg return msg def populate_metadata(self): """ Populate metadata class """ if self.meta is not None: # log.debug("metadata already populated") return self.meta self.meta = Meta(meta_xml=self.metadata(as_pretty_xml=True)) return self.meta def _str_group_info(self, grp): if grp == self._bag_root: self._str += " \n" elif grp == self._bag_elevation: self._str += " \n" % str(self.elevation().shape) elif grp == self._bag_uncertainty: self._str += " \n" % str(self.uncertainty().shape) elif grp == self._bag_tracking_list: self._str += " \n" % str(self.tracking_list().shape) elif grp == self._bag_metadata: if self.meta is not None: self._str += " %s\n" % str(self.meta) else: self._str += " <%s>\n" % grp else: self._str += " <%s>\n" % grp if grp != self._bag_metadata: for atr in self[grp].attrs: atr_val = self[grp].attrs[atr] self._str += " <%s: %s (%s, %s)>\n" % (atr, atr_val, atr_val.shape, atr_val.dtype) def __str__(self): self._str = super(BAGFile, self).__str__() self.visit(self._str_group_info) return self._str hydroffice.bag-0.2.15/hydroffice/bag/base.py0000666000000000000000000000633612722155242016754 0ustar 00000000000000from __future__ import absolute_import, division, print_function # , unicode_literals import os import sys import logging log = logging.getLogger(__name__) import h5py from h5py._hl.base import with_phil from .helper import BAGError PY3 = sys.version_info[0] == 3 if PY3: def u(s): return s else: def u(s): return unicode(s.replace(r'\\', r'\\\\'), "unicode_escape") def is_bag(file_name): """ Determine if a file is valid BAG (False if it doesn't exist). """ # we first check if the file is a valid hdf5 (it also checks if the file exists) if not h5py.is_hdf5(file_name): return False fid = h5py.File(file_name, 'r') try: fid["BAG_root"] except KeyError: return False return True class File(h5py.File): """ Represents a BAG file (at low-level, thin wrapper around h5py). """ def __init__(self, name, mode=None, driver=None, libver=None, userblock_size=None, swmr=False, **kwds): """ Create a new file object. See the h5py user guide for a detailed explanation of the options. name Name of the file on disk. Note: for files created with the 'core' driver, HDF5 still requires this be non-empty. driver Name of the driver to use. Legal values are None (default, recommended), 'core', 'sec2', 'stdio', 'mpio'. libver Library version bounds. Currently only the strings 'earliest' and 'latest' are defined. userblock Desired size of user block. Only allowed when creating a new file (mode w, w- or x). swmr Open the file in SWMR read mode. Only used when mode = 'r'. Additional keywords Passed on to the selected file driver. """ super(File, self).__init__(name=name, mode=mode, driver=driver, libver=libver, userblock_size=userblock_size, swmr=swmr, **kwds) def close(self): """ Close the file. All open objects become invalid """ log.debug("closing") super(File, self).close() def flush(self): """ Tell the BAG library to flush its buffers. """ log.debug("flushing") super(File, self).flush() @with_phil def __repr__(self): if not self.id: log.info("closed file") r = u('\n') r += " " else: # Filename has to be forced to Unicode if it comes back bytes # Mode is always a "native" string filename = self.filename if isinstance(filename, bytes): # Can't decode fname filename = filename.decode('utf8', 'replace') r = u('') % (os.path.basename(filename), self.mode) r += " \n" r += " \n" % self.id r += " \n" % self.name r += " \n" % self.driver r += " \n" % self.userblock_size if PY3: return r return r.encode('utf8') hydroffice.bag-0.2.15/hydroffice/bag/bbox.py0000666000000000000000000001115212672544462016776 0ustar 00000000000000from __future__ import absolute_import, division, print_function, unicode_literals import os import logging log = logging.getLogger(__name__) from osgeo import ogr, osr from .meta import Meta from .helper import BAGError, Helper from . import __version__ ogr.UseExceptions() class Bbox2Gdal(object): formats = { 'gjs': [b"GeoJSON", "bag.geojson"], 'gml': [b"GML", "bag.gml"], 'kml': [b"KML", "bag.kml"], 'shp': [b"ESRI Shapefile", "bag.shp"], } def __init__(self, bag_meta, fmt="kml", title=None, out_file=None): assert isinstance(bag_meta, Meta) self.bag_meta = bag_meta if not self.bag_meta.valid_bbox(): raise BAGError("invalid bbox read in BAG metadata") self.title = title if self.title is None: self.title = "Metadata" log.debug("title: %s" % self.title) # get the ogr driver self.drv = ogr.GetDriverByName(self.formats[fmt][0]) if self.drv is None: raise BAGError("%s driver not available.\n" % self.formats[fmt][0]) # set the output file self.out_file = out_file if self.out_file is None: self.out_file = os.path.abspath(self.formats[fmt][1]) log.debug("output: %s" % self.out_file) if os.path.exists(self.out_file): os.remove(self.out_file) # create the data source ds = self.drv.CreateDataSource(self.out_file) # create the spatial reference (WGS84) self.srs = osr.SpatialReference() self.srs.ImportFromEPSG(4326) # create the layer self.lyr = ds.CreateLayer(b"BAG", self.srs, ogr.wkbLineString25D) self._define_layer_fields() # add feature self._add_feature() ds.Destroy() def _define_layer_fields(self): # Add the fields we're interested in self.lyr.CreateField(ogr.FieldDefn(b"Name", ogr.OFTString)) if self.bag_meta.rows is not None: self.lyr.CreateField(ogr.FieldDefn(b"Rows", ogr.OFTInteger)) if self.bag_meta.cols is not None: self.lyr.CreateField(ogr.FieldDefn(b"Cols", ogr.OFTInteger)) if self.bag_meta.ne is not None: self.lyr.CreateField(ogr.FieldDefn(b"NE", ogr.OFTString)) if self.bag_meta.sw is not None: self.lyr.CreateField(ogr.FieldDefn(b"SW", ogr.OFTString)) if self.bag_meta.res_x is not None: self.lyr.CreateField(ogr.FieldDefn(b"ResX", ogr.OFTReal)) if self.bag_meta.res_y is not None: self.lyr.CreateField(ogr.FieldDefn(b"ResY", ogr.OFTReal)) if self.bag_meta.abstract is not None: self.lyr.CreateField(ogr.FieldDefn(b"Abstract", ogr.OFTString)) if self.bag_meta.date is not None: self.lyr.CreateField(ogr.FieldDefn(b"Date", ogr.OFTString)) if self.bag_meta.wkt_srs is not None: self.lyr.CreateField(ogr.FieldDefn(b"SRS", ogr.OFTString)) self.lyr.CreateField(ogr.FieldDefn(b"Tools", ogr.OFTString)) def _add_feature(self): # create the WKT for the feature using Python string formatting feature = ogr.Feature(self.lyr.GetLayerDefn()) feature.SetField(b"Name", self.title.encode()) if self.bag_meta.rows is not None: feature.SetField(b"Rows", self.bag_meta.rows) if self.bag_meta.cols is not None: feature.SetField(b"Cols", self.bag_meta.cols) if self.bag_meta.ne is not None: feature.SetField(b"NE", ("%s" % self.bag_meta.ne).encode()) if self.bag_meta.sw is not None: feature.SetField(b"SW", ("%s" % self.bag_meta.sw).encode()) if self.bag_meta.res_x is not None: feature.SetField(b"ResX", ("%s" % self.bag_meta.res_x).encode()) if self.bag_meta.res_y is not None: feature.SetField(b"ResY", ("%s" % self.bag_meta.res_y).encode()) if self.bag_meta.abstract is not None: feature.SetField(b"Abstract", self.bag_meta.abstract) if self.bag_meta.date is not None: feature.SetField(b"Date", self.bag_meta.date) if self.bag_meta.wkt_srs is not None: feature.SetField(b"SRS", Helper.elide(self.bag_meta.wkt_srs, max_len=60).encode()) feature.SetField(b"Tools", ("r%s" % __version__).encode()) wkt = self.bag_meta.wkt_bbox() # log.debug("bbox: %s" % wkt) point = ogr.CreateGeometryFromWkt(wkt) feature.SetGeometry(point) self.lyr.CreateFeature(feature) feature.Destroy() hydroffice.bag-0.2.15/hydroffice/bag/elevation.py0000666000000000000000000000701412674132306020024 0ustar 00000000000000from __future__ import absolute_import, division, print_function, unicode_literals import os import logging log = logging.getLogger(__name__) import numpy as np from osgeo import gdal, osr from .meta import Meta from .helper import BAGError, Helper from . import __version__ from .bag import BAGFile gdal.UseExceptions() class Elevation2Gdal(object): formats = { 'ascii': [b"AAIGrid", "bag.elevation.asc"], 'geotiff': [b"GTiff", "bag.elevation.tif"], 'xyz': [b"XYZ", "bag.elevation.xyz"], } def __init__(self, bag_elevation, bag_meta, fmt="geotiff", out_file=None, epsg=None): """Export the elevation layer in one of the listed formats""" assert isinstance(bag_elevation, np.ndarray) assert isinstance(bag_meta, Meta) self.bag_elv = bag_elevation self.bag_meta = bag_meta # get the IN-MEMORY ogr driver self.mem = gdal.GetDriverByName(b"MEM") if self.mem is None: raise BAGError("%s driver not available.\n" % self.formats[fmt][0]) log.debug("format: %s" % fmt) # set the output file self.out_file = out_file if self.out_file is None: self.out_file = os.path.abspath(self.formats[fmt][1]) log.debug("output: %s" % self.out_file) if os.path.exists(self.out_file): os.remove(self.out_file) log.debug("dtype: %s" % self.bag_elv.dtype) self.rst = self.mem.Create(utf8_path=self.out_file, xsize=self.bag_meta.cols, ysize=self.bag_meta.rows, bands=1, eType=gdal.GDT_Float32) self.rst.SetGeoTransform((self.bag_meta.sw[0], self.bag_meta.res_x, 0, self.bag_meta.ne[1], 0, -self.bag_meta.res_y)) self.bnd = self.rst.GetRasterBand(1) self.bnd.WriteArray(self.bag_elv[::-1]) self.bnd.SetNoDataValue(BAGFile.BAG_NAN) self.srs = osr.SpatialReference() if self.bag_meta.wkt_srs is not None: self.srs.ImportFromWkt(self.bag_meta.wkt_srs) else: log.warning("unable to recover valid spatial reference info") self.rst.SetProjection(self.srs.ExportToWkt()) self.bnd.FlushCache() # get the required ogr driver self.drv = gdal.GetDriverByName(self.formats[fmt][0]) # check if re-projection is required if not epsg: # if not, we just create a copy in the selected format dst_ds = self.drv.CreateCopy(self.out_file, self.rst) dst_ds = None self.rst = None return # we need to change projection: # - we create the output srs dst_srs = osr.SpatialReference() dst_srs.ImportFromEPSG(epsg) dst_wkt = dst_srs.ExportToWkt() # Call AutoCreateWarpedVRT() to fetch default values for target raster dimensions and geotransform tmp_ds = gdal.AutoCreateWarpedVRT(self.rst, None, # src_wkt : left to default value --> will use the one from source dst_wkt, gdal.GRA_NearestNeighbour, 0.125 # error threshold --> use same value as in gdalwarp ) # Create the final warped raster dst_ds = self.drv.CreateCopy(self.out_file, tmp_ds) dst_ds = None self.rst = None hydroffice.bag-0.2.15/hydroffice/bag/helper.py0000666000000000000000000000331012606055312017304 0ustar 00000000000000from __future__ import absolute_import, division, print_function, unicode_literals import os import logging log = logging.getLogger(__name__) class BAGError(Exception): """ BAG class for exceptions""" def __init__(self, message, *args): if isinstance(message, Exception): msg = message.args[0] if len(message.args) > 0 else '' else: msg = message self.message = msg # allow users initialize misc. arguments as any other builtin Error Exception.__init__(self, message, *args) class Helper(object): @classmethod def samples_folder(cls): samples_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "samples")) if not os.path.exists(samples_dir): raise BAGError("unable to find the samples folder: %s" % samples_dir) return samples_dir @classmethod def iso19139_folder(cls): iso_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "iso19139")) if not os.path.exists(iso_dir): raise BAGError("unable to find the iso19139 folder: %s" % iso_dir) return iso_dir @classmethod def iso19757_3_folder(cls): iso_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "iso19757-3")) if not os.path.exists(iso_dir): raise BAGError("unable to find the iso19757-3 folder: %s" % iso_dir) return iso_dir @staticmethod def elide(input_str, max_len=255): """ only in case the passed string is longer than 'max_len', it applies elision """ if len(input_str) > max_len: return input_str[:max_len] + "[..]" return input_str hydroffice.bag-0.2.15/hydroffice/bag/iso19139/0000777000000000000000000000000012723323303016655 5ustar 00000000000000hydroffice.bag-0.2.15/hydroffice/bag/iso19139/bag/0000777000000000000000000000000012723323303017406 5ustar 00000000000000hydroffice.bag-0.2.15/hydroffice/bag/iso19139/bag/bag.xsd0000666000000000000000000000205312606055312020661 0ustar 00000000000000 This file contains the BAG extensions to the ISO19115 schema hydroffice.bag-0.2.15/hydroffice/bag/iso19139/bag/bagCodelists.xml0000666000000000000000000001534112606055312022541 0ustar 00000000000000 bagCodelists Codelists for description of BAG metadata datasets BAG (and imported) namespace 1.0 2012-01-31 identification of when a given event occurred BAG_OptGroupCode CUBE contributed the elevation solution cube NOAA standard product uncertainty V1.0 (a blend of CUBE uncertainty and other measures) product Average of all of the contributing sounding TPE's within the node averageTPE None, Node and Elevation Solution Groups unused unknown identification of when a given event occurred BAG_DepthCorrectCode Depth corrected for sound velocity trueDepth Depth at assumed sound velocity of 1500m/s nominalDepthMetre Depth at assumed sound velocity of 4800ft/s nominalDepthFeet Corrected depth using Carter's tables correctedCarters Corrected depth using Matthew's tables correctedMatthews Unknown depth correction type or mixture of above types unknown identification of when a given event occurred BAG_VertUncertCode Raw standard deviation of soundings the contributed to the node rawStdDev Standard deviation of soundings captured by a CUBE hypothesis (i.e., CUBE’s standard output of uncertainty) cubeStdDev NOAA standard product uncertainty V1.0 (a blend of CUBE uncertainty and other measures) productUncert Estimated standard deviation based on historical/archive data historicalStdDev Average of all of the contributing sounding TPE's within the node averageTPE The uncertainty layer is an unknown type. unknown hydroffice.bag-0.2.15/hydroffice/bag/iso19139/bag/extension.xsd0000666000000000000000000001203012606055312022140 0ustar 00000000000000 This file contains the BAG extensions to the ISO19115 schema hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gco/0000777000000000000000000000000012723323303017425 5ustar 00000000000000hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gco/basicTypes.xsd0000666000000000000000000005310412606055312022260 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 01-26-2005 12:00:05 ====== A TypeName is a LocalName that references either a recordType or object type in some form of schema. The stored value "aName" is the returned value for the "aName()" operation. This is the types name. - For parsing from types (or objects) the parsible name normally uses a "." navigation separator, so that it is of the form [class].[member].[memberOfMember]. ...) A MemberName is a LocalName that references either an attribute slot in a record or recordType or an attribute, operation, or association role in an object instance or type description in some form of schema. The stored value "aName" is the returned value for the "aName()" operation. Use to represent the possible cardinality of a relation. Represented by a set of simple multiplicity ranges. A component of a multiplicity, consisting of an non-negative lower bound, and a potentially infinite upper bound. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gco/gco.xsd0000666000000000000000000000167312606055312020726 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 01-26-2005 12:00:06 ====== hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gco/gcoBase.xsd0000666000000000000000000000721512606055312021517 0ustar 00000000000000 This schema provides: 1. tools to handle specific objects like "code lists" and "record"; 2. Some XML types representing that do not follow the general encoding rules. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gco/readme.txt0000666000000000000000000000011612606055312021423 0ustar 00000000000000http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/gcohydroffice.bag-0.2.15/hydroffice/bag/iso19139/gmd/0000777000000000000000000000000012723323303017424 5ustar 00000000000000hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gmd/applicationSchema.xsd0000666000000000000000000000522012606055312023571 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 01-26-2005 12:40:03 ====== Information about the application schema used to build the dataset hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gmd/citation.xsd0000666000000000000000000003503112606055312021762 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 01-26-2005 12:40:04 ====== Identification of, and means of communication with, person(s) and organisations associated with the dataset Standardized resource reference Location of the responsible individual or organisation Information about online sources from which the dataset, specification, or community profile name and extended metadata elements can be obtained. Information required enabling contact with the responsible person and/or organisation Telephone numbers for contacting the responsible individual or organisation hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gmd/constraints.xsd0000666000000000000000000001354312606055312022523 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 01-26-2005 12:40:01 ====== Restrictions on the access and use of a dataset or metadata Restrictions and legal prerequisites for accessing and using the dataset. Handling restrictions imposed on the dataset because of national security, privacy, or other concerns hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gmd/content.xsd0000666000000000000000000002504712606055312021630 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 01-26-2005 12:40:03 ====== Information identifing the feature catalogue Information about the domain of the raster cell Information about an image's suitability for use Set of adjacent wavelengths in the electro-magnetic spectrum with a common characteristic, such as the visible band hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gmd/dataQuality.xsd0000666000000000000000000007220512606055312022436 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 01-26-2005 12:40:01 ====== quantitative_result from Quality Procedures - - renamed to remove implied use limitiation. Quantitative_conformance_measure from Quality Procedures. - - Renamed to remove implied use limitation - - OCL - -- result is type specified by valueDomain - result.tupleType = valueDomain hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gmd/distribution.xsd0000666000000000000000000002557212606055312022700 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 01-26-2005 12:40:03 ====== Information about the media on which the data can be distributed Technical means and media by which a dataset is obtained from the distributor Common ways in which the dataset may be obtained or received, and related instructions and fee information Information about the distributor Information about the distributor of and options for obtaining the dataset Description of the form of the data to be distributed hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gmd/extent.xsd0000666000000000000000000002454012606055312021462 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 01-26-2005 12:40:04 ====== Time period covered by the content of the dataset Vertical domain of dataset Boundary enclosing the dataset expressed as the closed set of (x,y) coordinates of the polygon (last point replicates first point) Information about spatial, vertical, and temporal extent Geographic area of the dataset Geographic area of the entire dataset referenced to WGS 84 Extent with respect to date and time hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gmd/freeText.xsd0000666000000000000000000001460712606055312021744 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 03-17-2005 17:21:53 ====== Informative package (concepts are not implementable) - pragmatic approach for encoding hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gmd/gmd.xsd0000666000000000000000000000167212606055312020723 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 01-26-2005 12:40:04 ====== hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gmd/identification.xsd0000666000000000000000000004500412606055312023142 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 01-26-2005 12:40:05 ====== Basic information about data Graphic that provides an illustration of the dataset (should include a legend for the graphic) See 19119 for further info Brief description of ways in which the dataset is currently used. Keywords, their type and reference source Encapsulates the dataset aggregation information High-level geospatial data thematic classification to assist in the grouping and search of available geospatial datasets hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gmd/maintenance.xsd0000666000000000000000000001255012606055312022433 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 01-26-2005 12:40:04 ====== Status of the dataset or progress of a review Information about the scope and frequency of updating Description of the class of information covered by the information hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gmd/metadataApplication.xsd0000666000000000000000000002121512606055312024113 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 01-26-2005 12:40:05 ====== Identifiable collection of datasets Identifiable collection of data hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gmd/metadataEntity.xsd0000666000000000000000000001253212606055312023126 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 01-26-2005 12:40:00 ====== Information about the metadata hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gmd/metadataExtension.xsd0000666000000000000000000001344712606055312023634 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 01-26-2005 12:40:03 ====== Method used to represent geographic information in the dataset New metadata element, not found in ISO 19115, which is required to describe geographic data Information describing metadata extensions. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gmd/portrayalCatalogue.xsd0000666000000000000000000000420512606055312024011 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 01-26-2005 12:40:03 ====== Information identifing the portrayal catalogue used hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gmd/readme.txt0000666000000000000000000000011712606055312021423 0ustar 00000000000000http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/gmd/hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gmd/referenceSystem.xsd0000666000000000000000000001205412606055312023313 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 01-26-2005 12:40:04 ====== Description of the spatial and temporal reference systems used in the dataset hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gmd/spatialRepresentation.xsd0000666000000000000000000003166212606055312024536 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 01-26-2005 12:40:02 ====== Frequency with which modifications and deletations are made to the data after it is first produced Types and numbers of raster spatial objects in the dataset Information about the vector spatial objects in the dataset Digital mechanism used to represent spatial information hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gmi/0000777000000000000000000000000012723323303017431 5ustar 00000000000000hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gmi/acquisitionInformation.xsd0000666000000000000000000005353012606055312024717 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 07-30-2010 11:34:36 ====== Description: requirement to be satisfied by the planned data acquisition - shortName: Requirement Description: Describes the characteristics, spatial and temportal extent of the intended object to be observed - shortName: TargetId Description: Designations for the measuring instruments and their bands, the platform carrying them, and the mission to which the data contributes - FGDC: Platform_and_Instrument_Identification, Mission_Information - shortName: PltfrmInstId Description: Designations for the planning information related to meeting requirements - shortName: PlanId Description: Designations for the operation used to acquire the dataset - shortName: MssnId Description: Designations for the measuring instruments - FGDC: Platform_and_Instrument_Identification - shortName: PltfrmInstId Description: Designations for the platform used to acquire the dataset - shortName: PltfrmId Description: identification of a significant collection point within an operation - shortName: Event Description: range of date validity - shortName: ReqstDate Description: identification of collection coverage - shortName: PlatformPass hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gmi/contentInformation.xsd0000666000000000000000000001760412606055312024043 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 07-30-2010 11:34:35 ====== Name: Content - Position: 5 Description: description of specific range elements - shortName: RgEltDesc Description: extensions to electromagnetic spectrum wavelength description - shortName: BandExt Description: information about the content of a coverage, including the description of specific range elements - shortName: CCovDesc Description: information about the content of an image, including the description of specific range elements - shortName: ICovDesc hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gmi/dataQualityInformation.xsd0000666000000000000000000002720712606055312024653 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 07-30-2010 11:34:33 ====== Name: Lineage - Position: 2 Description: Information about an event or transformation in the life of the dataset including details of the algorithm and software used for processing - FGDC: - shortName: DetailProcStep Description: Comprehensive information about the procedure(s), process(es) and algorithm(s) applied in the process step - shortName: Procsg Description: Result of a data quality measure organising the measured values as a coverage - shortName: CoverageResult Description: Report of what occured during the process step - shortName: ProcStepRep Description: Details of the methodology by which geographic information was derived from the instrument readings - FGDC: Algorithm_Information - shortName: Algorithm Description: information on source of data sets for processing step - shortName: SrcDataset Description: to: degree of adherence of a dataset to a specific set of user requirements - shortName: Usability Description: Distance between adjacent pixels - shortName: nomRes hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gmi/gmi.xsd0000666000000000000000000000251712606055312020734 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 07-30-2010 11:34:37 ====== hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gmi/metadataEntitySet.xsd0000666000000000000000000000437512606055312023615 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 07-30-2010 11:34:30 ====== Description: Root entity that defines information about imagery or gridded data - shortName: IMetadata hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gmi/spatialRepresentationInformation.xsd0000666000000000000000000001665312606055312026754 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 07-30-2010 11:34:34 ====== Name: SpatialRepresentation - Position: 3 Description: Description of information provided in metadata that allows the geographic or map location raster points to be located - FGDC: Georeferencing_Description - shortName: IGeoref Description: extends georectified grid description to include associated checkpoints - shortName: IGeorect hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/0000777000000000000000000000000012723323303017434 5ustar 00000000000000hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/3.1.1/0000777000000000000000000000000012723323303020074 5ustar 00000000000000hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/3.1.1/smil/0000777000000000000000000000000012723323303021040 5ustar 00000000000000hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/3.1.1/smil/smil20-language.xsd0000666000000000000000000001204312606055312024451 0ustar 00000000000000 hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/3.1.1/smil/smil20.xsd0000666000000000000000000002261112606055312022672 0ustar 00000000000000 hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/3.1.1/smil/xml-mod.xsd0000666000000000000000000000340712606055312023143 0ustar 00000000000000 In due course, we should install the relevant ISO 2- and 3-letter codes as the enumerated possible values . . . hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/basicTypes.xsd0000666000000000000000000003454612606055312022300 0ustar 00000000000000 basicTypes.xsd See ISO/DIS 19136 8.2. W3C XML Schema provides a set of built-in "simple" types which define methods for representing values as literals without internal markup. These are described in W3C XML Schema Part 2:2001. Because GML is an XML encoding in which instances are described using XML Schema, these simple types shall be used as far as possible and practical for the representation of data types. W3C XML Schema also provides methods for defining - new simple types by restriction and combination of the built-in types, and - complex types, with simple content, but which also have XML attributes. In many places where a suitable built-in simple type is not available, simple content types derived using the XML Schema mechanisms are used for the representation of data types in GML. A set of these simple content types that are required by several GML components are defined in the basicTypes schema, as well as some elements based on them. These are primarily based around components needed to record amounts, counts, flags and terms, together with support for exceptions or null values. gml:NilReasonType defines a content model that allows recording of an explanation for a void value or other exception. gml:NilReasonType is a union of the following enumerated values: - inapplicable there is no value - missing the correct value is not readily available to the sender of this data. Furthermore, a correct value may not exist - template the value will be available later - unknown the correct value is not known to, and not computable by, the sender of this data. However, a correct value probably exists - withheld the value is not divulged - other:text other brief explanation, where text is a string of two or more characters with no included spaces and - anyURI which should refer to a resource which describes the reason for the exception A particular community may choose to assign more detailed semantics to the standard values provided. Alternatively, the URI method enables a specific or more complete explanation for the absence of a value to be provided elsewhere and indicated by-reference in an instance document. gml:NilReasonType is used as a member of a union in a number of simple content types where it is necessary to permit a value from the NilReasonType union as an alternative to the primary type. gml:SignType is a convenience type with values "+" (plus) and "-" (minus). Extension to the respective XML Schema built-in simple type to allow a choice of either a value of the built-in simple type or a reason for a nil value. Extension to the respective XML Schema built-in simple type to allow a choice of either a value of the built-in simple type or a reason for a nil value. Extension to the respective XML Schema built-in simple type to allow a choice of either a value of the built-in simple type or a reason for a nil value. Extension to the respective XML Schema built-in simple type to allow a choice of either a value of the built-in simple type or a reason for a nil value. Extension to the respective XML Schema built-in simple type to allow a choice of either a value of the built-in simple type or a reason for a nil value. gml:CodeType is a generalized type to be used for a term, keyword or name. It adds a XML attribute codeSpace to a term, where the value of the codeSpace attribute (if present) shall indicate a dictionary, thesaurus, classification scheme, authority, or pattern for the term. gml:CodeWithAuthorityType requires that the codeSpace attribute is provided in an instance. gml:MeasureType supports recording an amount encoded as a value of XML Schema double, together with a units of measure indicated by an attribute uom, short for "units Of measure". The value of the uom attribute identifies a reference system for the amount, usually a ratio or interval scale. The simple type gml:UomIdentifer defines the syntax and value space of the unit of measure identifier. This type specifies a character string of length at least one, and restricted such that it must not contain any of the following characters: ":" (colon), " " (space), (newline), (carriage return), (tab). This allows values corresponding to familiar abbreviations, such as "kg", "m/s", etc. It is recommended that the symbol be an identifier for a unit of measure as specified in the "Unified Code of Units of Measure" (UCUM) (http://aurora.regenstrief.org/UCUM). This provides a set of symbols and a grammar for constructing identifiers for units of measure that are unique, and may be easily entered with a keyboard supporting the limited character set known as 7-bit ASCII. ISO 2955 formerly provided a specification with this scope, but was withdrawn in 2001. UCUM largely follows ISO 2955 with modifications to remove ambiguities and other problems. This type specifies a URI, restricted such that it must start with one of the following sequences: "#", "./", "../", or a string of characters followed by a ":". These patterns ensure that the most common URI forms are supported, including absolute and relative URIs and URIs that are simple fragment identifiers, but prohibits certain forms of relative URI that could be mistaken for unit of measure symbol . NOTE It is possible to re-write such a relative URI to conform to the restriction (e.g. "./m/s"). In an instance document, on elements of type gml:MeasureType the mandatory uom attribute shall carry a value corresponding to either - a conventional unit of measure symbol, - a link to a definition of a unit of measure that does not have a conventional symbol, or when it is desired to indicate a precise or variant definition. This type is deprecated for tuples with ordinate values that are numbers. CoordinatesType is a text string, intended to be used to record an array of tuples or coordinates. While it is not possible to enforce the internal structure of the string through schema validation, some optional attributes have been provided in previous versions of GML to support a description of the internal structure. These attributes are deprecated. The attributes were intended to be used as follows: Decimal symbol used for a decimal point (default="." a stop or period) cs symbol used to separate components within a tuple or coordinate string (default="," a comma) ts symbol used to separate tuples or coordinate strings (default=" " a space) Since it is based on the XML Schema string type, CoordinatesType may be used in the construction of tables of tuples or arrays of tuples, including ones that contain mixed text and numeric values. A type for a list of values of the respective simple type. A type for a list of values of the respective simple type. A type for a list of values of the respective simple type. A type for a list of values of the respective simple type. A type for a list of values of the respective simple type. A type for a list of values of the respective simple type. A type for a list of values of the respective simple type. A type for a list of values of the respective simple type. A type for a list of values of the respective simple type. A type for a list of values of the respective simple type. gml:CodeListType provides for lists of terms. The values in an instance element shall all be valid according to the rules of the dictionary, classification scheme, or authority identified by the value of its codeSpace attribute. gml:CodeOrNilReasonListType provides for lists of terms. The values in an instance element shall all be valid according to the rules of the dictionary, classification scheme, or authority identified by the value of its codeSpace attribute. An instance element may also include embedded values from NilReasonType. It is intended to be used in situations where a term or classification is expected, but the value may be absent for some reason. gml:MeasureListType provides for a list of quantities. gml:MeasureOrNilReasonListType provides for a list of quantities. An instance element may also include embedded values from NilReasonType. It is intended to be used in situations where a value is expected, but the value may be absent for some reason. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/coordinateOperations.xsd0000666000000000000000000010050212606055312024347 0ustar 00000000000000 coordinateOperations.xsd See ISO/DIS 19136 13.6. The spatial or temporal coordinate operations schema components can be divided into five logical parts, which define elements and types for XML encoding of the definitions of: - Multiple abstract coordinate operations - Multiple concrete types of coordinate operations, including Transformations and Conversions - Abstract and concrete parameter values and groups - Operation methods - Abstract and concrete operation parameters and groups These schema component encodes the Coordinate Operation package of the UML Model for ISO 19111 Clause 11. gml:AbstractCoordinateOperation is a mathematical operation on coordinates that transforms or converts coordinates to another coordinate reference system. Many but not all coordinate operations (from CRS A to CRS B) also uniquely define the inverse operation (from CRS B to CRS A). In some cases, the operation method algorithm for the inverse operation is the same as for the forward algorithm, but the signs of some operation parameter values shall be reversed. In other cases, different algorithms are required for the forward and inverse operations, but the same operation parameter values are used. If (some) entirely different parameter values are needed, a different coordinate operation shall be defined. The optional coordinateOperationAccuracy property elements provide estimates of the impact of this coordinate operation on point position accuracy. gml:operationVersion is the version of the coordinate transformation (i.e., instantiation due to the stochastic nature of the parameters). Mandatory when describing a transformation, and should not be supplied for a conversion. gml:coordinateOperationAccuracy is an association role to a DQ_PositionalAccuracy object as encoded in ISO/TS 19139, either referencing or containing the definition of that positional accuracy. That object contains an estimate of the impact of this coordinate operation on point accuracy. That is, it gives position error estimates for the target coordinates of this coordinate operation, assuming no errors in the source coordinates. gml:sourceCRS is an association role to the source CRS (coordinate reference system) of this coordinate operation. gml:targetCRS is an association role to the target CRS (coordinate reference system) of this coordinate operation. gml:CoordinateOperationPropertyType is a property type for association roles to a coordinate operation, either referencing or containing the definition of that coordinate operation. gml:AbstractSingleOperation is a single (not concatenated) coordinate operation. gml:SingleOperationPropertyType is a property type for association roles to a single operation, either referencing or containing the definition of that single operation. gm:AbstractGeneralConversion is an abstract operation on coordinates that does not include any change of datum. The best-known example of a coordinate conversion is a map projection. The parameters describing coordinate conversions are defined rather than empirically derived. Note that some conversions have no parameters. The operationVersion, sourceCRS, and targetCRS elements are omitted in a coordinate conversion. This abstract complex type is expected to be extended for well-known operation methods with many Conversion instances, in GML Application Schemas that define operation-method-specialized element names and contents. This conversion uses an operation method, usually with associated parameter values. However, operation methods and parameter values are directly associated with concrete subtypes, not with this abstract type. All concrete types derived from this type shall extend this type to include a "usesMethod" element that references the "OperationMethod" element. Similarly, all concrete types derived from this type shall extend this type to include zero or more elements each named "uses...Value" that each use the type of an element substitutable for the "AbstractGeneralParameterValue" element. gml:GeneralConversionPropertyType is a property type for association roles to a general conversion, either referencing or containing the definition of that conversion. gml:AbstractGeneralTransformation is an abstract operation on coordinates that usually includes a change of Datum. The parameters of a coordinate transformation are empirically derived from data containing the coordinates of a series of points in both coordinate reference systems. This computational process is usually "over-determined", allowing derivation of error (or accuracy) estimates for the transformation. Also, the stochastic nature of the parameters may result in multiple (different) versions of the same coordinate transformation. The operationVersion, sourceCRS, and targetCRS proeprty elements are mandatory in a coordinate transformation. This abstract complex type is expected to be extended for well-known operation methods with many Transformation instances, in Application Schemas that define operation-method-specialized value element names and contents. This transformation uses an operation method with associated parameter values. However, operation methods and parameter values are directly associated with concrete subtypes, not with this abstract type. All concrete types derived from this type shall extend this type to include a "usesMethod" element that references one "OperationMethod" element. Similarly, all concrete types derived from this type shall extend this type to include one or more elements each named "uses...Value" that each use the type of an element substitutable for the "AbstractGeneralParameterValue" element. gml:GeneralTransformationPropertyType is a property type for association roles to a general transformation, either referencing or containing the definition of that transformation. gml:ConcatenatedOperation is an ordered sequence of two or more coordinate operations. This sequence of operations is constrained by the requirement that the source coordinate reference system of step (n+1) must be the same as the target coordinate reference system of step (n). The source coordinate reference system of the first step and the target coordinate reference system of the last step are the source and target coordinate reference system associated with the concatenated operation. Instead of a forward operation, an inverse operation may be used for one or more of the operation steps mentioned above, if the inverse operation is uniquely defined by the forward operation. The gml:coordOperation property elements are an ordered sequence of associations to the two or more operations used by this concatenated operation. The AggregationAttributeGroup should be used to specify that the coordOperation associations are ordered. gml:coordOperation is an association role to a coordinate operation. gml:ConcatenatedOperationPropertyType is a property type for association roles to a concatenated operation, either referencing or containing the definition of that concatenated operation. gml:PassThroughOperation is a pass-through operation specifies that a subset of a coordinate tuple is subject to a specific coordinate operation. The modifiedCoordinate property elements are an ordered sequence of positive integers defining the positions in a coordinate tuple of the coordinates affected by this pass-through operation. The AggregationAttributeGroup should be used to specify that the modifiedCoordinate elements are ordered. gml:modifiedCoordinate is a positive integer defining a position in a coordinate tuple. gml:PassThroughOperationPropertyType is a property type for association roles to a pass through operation, either referencing or containing the definition of that pass through operation. gml:Conversion is a concrete operation on coordinates that does not include any change of Datum. The best-known example of a coordinate conversion is a map projection. The parameters describing coordinate conversions are defined rather than empirically derived. Note that some conversions have no parameters. This concrete complex type can be used without using a GML Application Schema that defines operation-method-specialized element names and contents, especially for methods with only one Conversion instance. The usesValue property elements are an unordered list of composition associations to the set of parameter values used by this conversion operation. gml:method is an association role to the operation method used by a coordinate operation. gml:parameterValue is a composition association to a parameter value or group of parameter values used by a coordinate operation. gml:ConversionPropertyType is a property type for association roles to a concrete general-purpose conversion, either referencing or containing the definition of that conversion. gml:Transformation is a concrete object element derived from gml:GeneralTransformation (13.6.2.13). This concrete object can be used for all operation methods, without using a GML Application Schema that defines operation-method-specialized element names and contents, especially for methods with only one Transformation instance. The parameterValue elements are an unordered list of composition associations to the set of parameter values used by this conversion operation. gml:TransformationPropertyType is a property type for association roles to a transformation, either referencing or containing the definition of that transformation. gml:AbstractGeneralParameterValue is an abstract parameter value or group of parameter values. This abstract complexType is expected to be extended and restricted for well-known operation methods with many instances, in Application Schemas that define operation-method-specialized element names and contents. Specific parameter value elements are directly contained in concrete subtypes, not in this abstract type. All concrete types derived from this type shall extend this type to include one "...Value" element with an appropriate type, which should be one of the element types allowed in the ParameterValueType. In addition, all derived concrete types shall extend this type to include a "operationParameter" property element that references one element substitutable for the "OperationParameter" object element. gml:AbstractGeneralParameterValuePropertyType is a property type for inline association roles to a parameter value or group of parameter values, always containing the values. gml:ParameterValue is a parameter value, an ordered sequence of values, or a reference to a file of parameter values. This concrete complex type may be used for operation methods without using an Application Schema that defines operation-method-specialized element names and contents, especially for methods with only one instance. This complex type may be used, extended, or restricted for well-known operation methods, especially for methods with many instances. gml:value is a numeric value of an operation parameter, with its associated unit of measure. gml:stringValue is a character string value of an operation parameter. A string value does not have an associated unit of measure. gml:integerValue is a positive integer value of an operation parameter, usually used for a count. An integer value does not have an associated unit of measure. gml:booleanValue is a boolean value of an operation parameter. A Boolean value does not have an associated unit of measure. gml:valueList is an ordered sequence of two or more numeric values of an operation parameter list, where each value has the same associated unit of measure. An element of this type contains a space-separated sequence of double values. gml:integerValueList is an ordered sequence of two or more integer values of an operation parameter list, usually used for counts. These integer values do not have an associated unit of measure. An element of this type contains a space-separated sequence of integer values. gml:valueFile is a reference to a file or a part of a file containing one or more parameter values, each numeric value with its associated unit of measure. When referencing a part of a file, that file shall contain multiple identified parts, such as an XML encoded document. Furthermore, the referenced file or part of a file may reference another part of the same or different files, as allowed in XML documents. gml:operationParameter is an association role to the operation parameter of which this is a value. gml:ParameterValueGroup is a group of related parameter values. The same group can be repeated more than once in a Conversion, Transformation, or higher level ParameterValueGroup, if those instances contain different values of one or more parameterValues which suitably distinquish among those groups. This concrete complex type can be used for operation methods without using an Application Schema that defines operation-method-specialized element names and contents. This complex type may be used, extended, or restricted for well-known operation methods, especially for methods with only one instance. The parameterValue elements are an unordered set of composition association roles to the parameter values and groups of values included in this group. gml:group is an association role to the operation parameter group for which this element provides parameter values. gml:OperationMethod is a method (algorithm or procedure) used to perform a coordinate operation. Most operation methods use a number of operation parameters, although some coordinate conversions use none. Each coordinate operation using the method assigns values to these parameters. The parameter elements are an unordered list of associations to the set of operation parameters and parameter groups used by this operation method. gml:formulaCitation provides a reference to a publication giving the formula(s) or procedure used by an coordinate operation method. gml:formula Formula(s) or procedure used by an operation method. The use of the codespace attribite has been deprecated. The property value shall be a character string. gml:sourceDimensions is the number of dimensions in the source CRS of this operation method. gml:targetDimensions is the number of dimensions in the target CRS of this operation method. gml:parameter is an association to an operation parameter or parameter group. gml:OperationMethodPropertyType is a property type for association roles to a concrete general-purpose operation method, either referencing or containing the definition of that method. gml:GeneralOperationParameter is the abstract definition of a parameter or group of parameters used by an operation method. gml:minimumOccurs is the minimum number of times that values for this parameter group or parameter are required. If this attribute is omitted, the minimum number shall be one. gml:AbstractGeneralOperationParameterPropertyType is a property type for association roles to an operation parameter or group, either referencing or containing the definition of that parameter or group. gml:OperationParameter is the definition of a parameter used by an operation method. Most parameter values are numeric, but other types of parameter values are possible. This complex type is expected to be used or extended for all operation methods, without defining operation-method-specialized element names. gml:OperationParameterPropertyType is a property type for association roles to an operation parameter, either referencing or containing the definition of that parameter. gml:OperationParameterGroup is the definition of a group of parameters used by an operation method. This complex type is expected to be used or extended for all applicable operation methods, without defining operation-method-specialized element names. The generalOperationParameter elements are an unordered list of associations to the set of operation parameters that are members of this group. gml:maximumOccurs is the maximum number of times that values for this parameter group may be included. If this attribute is omitted, the maximum number shall be one. gml:OperationParameterPropertyType is a property type for association roles to an operation parameter group, either referencing or containing the definition of that parameter group. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/coordinateReferenceSystems.xsd0000666000000000000000000004344112606055312025522 0ustar 00000000000000 coordinateReferenceSystems.xsd See ISO/DIS 19136 13.3. The spatial-temporal coordinate reference systems schema components are divided into two logical parts. One part defines elements and types for XML encoding of abstract coordinate reference systems definitions. The larger part defines specialized constructs for XML encoding of definitions of the multiple concrete types of spatial-temporal coordinate reference systems. These schema components encode the Coordinate Reference System packages of the UML Models of ISO 19111 Clause 8 and ISO/DIS 19136 D.3.10, with the exception of the abstract "SC_CRS" class. gml:AbstractSingleCRS implements a coordinate reference system consisting of one coordinate system and one datum (as opposed to a Compound CRS). gml:SingleCRSPropertyType is a property type for association roles to a single coordinate reference system, either referencing or containing the definition of that coordinate reference system. gml:AbstractGeneralDerivedCRS is a coordinate reference system that is defined by its coordinate conversion from another coordinate reference system. This abstract complex type shall not be used, extended, or restricted, in a GML Application Schema, to define a concrete subtype with a meaning equivalent to a concrete subtype specified in this document. gml:conversion is an association role to the coordinate conversion used to define the derived CRS. gml:CompundCRS is a coordinate reference system describing the position of points through two or more independent coordinate reference systems. It is associated with a non-repeating sequence of two or more instances of SingleCRS. The gml:componentReferenceSystem elements are an ordered sequence of associations to all the component coordinate reference systems included in this compound coordinate reference system. The gml:AggregationAttributeGroup should be used to specify that the gml:componentReferenceSystem properties are ordered. gml:CompoundCRSPropertyType is a property type for association roles to a compound coordinate reference system, either referencing or containing the definition of that reference system. gml:GeodeticCRS is a coordinate reference system based on a geodetic datum. gml:ellipsoidalCS is an association role to the ellipsoidal coordinate system used by this CRS. gml:cartesianCS is an association role to the Cartesian coordinate system used by this CRS. gml:sphericalCS is an association role to the spherical coordinate system used by this CRS. gml:geodeticDatum is an association role to the geodetic datum used by this CRS. gml:GeodeticCRSPropertyType is a property type for association roles to a geodetic coordinate reference system, either referencing or containing the definition of that reference system. gml:VerticalCRS is a 1D coordinate reference system used for recording heights or depths. Vertical CRSs make use of the direction of gravity to define the concept of height or depth, but the relationship with gravity may not be straightforward. By implication, ellipsoidal heights (h) cannot be captured in a vertical coordinate reference system. Ellipsoidal heights cannot exist independently, but only as an inseparable part of a 3D coordinate tuple defined in a geographic 3D coordinate reference system. gml:verticalCS is an association role to the vertical coordinate system used by this CRS. gml:verticalDatum is an association role to the vertical datum used by this CRS. gml:VerticalCRSPropertyType is a property type for association roles to a vertical coordinate reference system, either referencing or containing the definition of that reference system. gml:ProjectedCRS is a 2D coordinate reference system used to approximate the shape of the earth on a planar surface, but in such a way that the distortion that is inherent to the approximation is carefully controlled and known. Distortion correction is commonly applied to calculated bearings and distances to produce values that are a close match to actual field values. gml:baseGeodeticCRS is an association role to the geodetic coordinate reference system used by this projected CRS. gml:ProjectedCRSPropertyType is a property type for association roles to a projected coordinate reference system, either referencing or containing the definition of that reference system. gml:DerivedCRS is a single coordinate reference system that is defined by its coordinate conversion from another single coordinate reference system known as the base CRS. The base CRS can be a projected coordinate reference system, if this DerivedCRS is used for a georectified grid coverage as described in ISO 19123, Clause 8. gml:baseCRS is an association role to the coordinate reference system used by this derived CRS. The gml:derivedCRSType property describes the type of a derived coordinate reference system. The required codeSpace attribute shall reference a source of information specifying the values and meanings of all the allowed string values for this property. An association role to the coordinate system used by this CRS. gml:DerivedCRSPropertyType is a property type for association roles to a non-projected derived coordinate reference system, either referencing or containing the definition of that reference system. gml:EngineeringCRS is a contextually local coordinate reference system which can be divided into two broad categories: - earth-fixed systems applied to engineering activities on or near the surface of the earth; - CRSs on moving platforms such as road vehicles, vessels, aircraft, or spacecraft, see ISO 19111 8.3. deprecated gml:cylindricalCS is an association role to the cylindrical coordinate system used by this CRS. gml:linearCS is an association role to the linear coordinate system used by this CRS. gml:polarCS is an association role to the polar coordinate system used by this CRS. gml:userDefinedCS is an association role to the user defined coordinate system used by this CRS. gml:engineeringDatum is an association role to the engineering datum used by this CRS. gml:EngineeringCRSPropertyType is a property type for association roles to an engineering coordinate reference system, either referencing or containing the definition of that reference system. gml:ImageCRS is an engineering coordinate reference system applied to locations in images. Image coordinate reference systems are treated as a separate sub-type because the definition of the associated image datum contains two attributes not relevant to other engineering datums. gml:affineCS is an association role to the affine coordinate system used by this CRS. gml:imageDatum is an association role to the image datum used by this CRS. gml:ImageCRSPropertyType is a property type for association roles to an image coordinate reference system, either referencing or containing the definition of that reference system. gml:TemporalCRS is a 1D coordinate reference system used for the recording of time. gml:timeCS is an association role to the time coordinate system used by this CRS. gml:temporalDatum is an association role to the temporal datum used by this CRS. gml:TemporalCRSPropertyType is a property type for association roles to a temporal coordinate reference system, either referencing or containing the definition of that reference system. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/coordinateSystems.xsd0000666000000000000000000004407112606055312023703 0ustar 00000000000000 coordinateSystems.xsd See ISO/DIS 19136 13.4. The coordinate systems schema components can be divded into three logical parts, which define elements and types for XML encoding of the definitions of: - Coordinate system axes - Abstract coordinate system - Multiple concrete types of spatial-temporal coordinate systems These schema components encode the Coordinate System packages of the UML Models of ISO 19111 Clause 9 and ISO/DIS 19136 D.3.10. gml:CoordinateSystemAxis is a definition of a coordinate system axis. The uom attribute provides an identifier of the unit of measure used for this coordinate system axis. The value of this coordinate in a coordinate tuple shall be recorded using this unit of measure, whenever those coordinates use a coordinate reference system that uses a coordinate system that uses this axis. gml:axisAbbrev is the abbreviation used for this coordinate system axis; this abbreviation is also used to identify the coordinates in the coordinate tuple. The codeSpace attribute may reference a source of more information on a set of standardized abbreviations, or on this abbreviation. gml:axisDirection is the direction of this coordinate system axis (or in the case of Cartesian projected coordinates, the direction of this coordinate system axis at the origin). Within any set of coordinate system axes, only one of each pair of terms may be used. For earth-fixed CRSs, this direction is often approximate and intended to provide a human interpretable meaning to the axis. When a geodetic datum is used, the precise directions of the axes may therefore vary slightly from this approximate direction. The codeSpace attribute shall reference a source of information specifying the values and meanings of all the allowed string values for this property. The gml:minimumValue and gml:maximumValue properties allow the specification of minimum and maximum value normally allowed for this axis, in the unit of measure for the axis. For a continuous angular axis such as longitude, the values wrap-around at this value. Also, values beyond this minimum/maximum can be used for specified purposes, such as in a bounding box. A value of minus infinity shall be allowed for the gml:minimumValue element, a value of plus infiniy for the gml:maximumValue element. If these elements are omitted, the value is unspecified. The gml:minimumValue and gml:maximumValue properties allow the specification of minimum and maximum value normally allowed for this axis, in the unit of measure for the axis. For a continuous angular axis such as longitude, the values wrap-around at this value. Also, values beyond this minimum/maximum can be used for specified purposes, such as in a bounding box. A value of minus infinity shall be allowed for the gml:minimumValue element, a value of plus infiniy for the gml:maximumValue element. If these elements are omitted, the value is unspecified. gml:rangeMeaning describes the meaning of axis value range specified by gml:minimumValue and gml:maximumValue. This element shall be omitted when both gml:minimumValue and gml:maximumValue are omitted. This element should be included when gml:minimumValue and/or gml:maximumValue are included. If this element is omitted when the gml:minimumValue and/or gml:maximumValue are included, the meaning is unspecified. The codeSpace attribute shall reference a source of information specifying the values and meanings of all the allowed string values for this property. gml:CoordinateSystemAxisPropertyType is a property type for association roles to a coordinate system axis, either referencing or containing the definition of that axis. gml:AbstractCoordinateSystem is a coordinate system (CS) is the non-repeating sequence of coordinate system axes that spans a given coordinate space. A CS is derived from a set of mathematical rules for specifying how coordinates in a given space are to be assigned to points. The coordinate values in a coordinate tuple shall be recorded in the order in which the coordinate system axes associations are recorded. This abstract complex type shall not be used, extended, or restricted, in an Application Schema, to define a concrete subtype with a meaning equivalent to a concrete subtype specified in this document. The gml:axis property is an association role (ordered sequence) to the coordinate system axes included in this coordinate system. The coordinate values in a coordinate tuple shall be recorded in the order in which the coordinate system axes associations are recorded, whenever those coordinates use a coordinate reference system that uses this coordinate system. The gml:AggregationAttributeGroup should be used to specify that the axis objects are ordered. gml:CoordinateSystemPropertyType is a property type for association roles to a coordinate system, either referencing or containing the definition of that coordinate system. gml:EllipsoidalCS is a two- or three-dimensional coordinate system in which position is specified by geodetic latitude, geodetic longitude, and (in the three-dimensional case) ellipsoidal height. An EllipsoidalCS shall have two or three gml:axis property elements; the number of associations shall equal the dimension of the CS. gml:EllipsoidalCSPropertyType is a property type for association roles to an ellipsoidal coordinate system, either referencing or containing the definition of that coordinate system. gml:CartesianCS is a 1-, 2-, or 3-dimensional coordinate system. In the 1-dimensional case, it contains a single straight coordinate axis. In the 2- and 3-dimensional cases gives the position of points relative to orthogonal straight axes. In the multi-dimensional case, all axes shall have the same length unit of measure. A CartesianCS shall have one, two, or three gml:axis property elements. gml:CartesianCSPropertyType is a property type for association roles to a Cartesian coordinate system, either referencing or containing the definition of that coordinate system. gml:VerticalCS is a one-dimensional coordinate system used to record the heights or depths of points. Such a coordinate system is usually dependent on the Earth's gravity field, perhaps loosely as when atmospheric pressure is the basis for the vertical coordinate system axis. A VerticalCS shall have one gml:axis property element. gml:VerticalCSPropertyType is a property type for association roles to a vertical coordinate system, either referencing or containing the definition of that coordinate system. gml:TimeCS is a one-dimensional coordinate system containing a time axis, used to describe the temporal position of a point in the specified time units from a specified time origin. A TimeCS shall have one gml:axis property element. gml:TimeCSPropertyType is a property type for association roles to a time coordinate system, either referencing or containing the definition of that coordinate system. gml:LinearCS is a one-dimensional coordinate system that consists of the points that lie on the single axis described. The associated coordinate is the distance – with or without offset – from the specified datum to the point along the axis. A LinearCS shall have one gml:axis property element. gml:LinearCSPropertyType is a property type for association roles to a linear coordinate system, either referencing or containing the definition of that coordinate system. gml:UserDefinedCS is a two- or three-dimensional coordinate system that consists of any combination of coordinate axes not covered by any other coordinate system type. A UserDefinedCS shall have two or three gml:axis property elements; the number of property elements shall equal the dimension of the CS. gml:UserDefinedCSPropertyType is a property type for association roles to a user-defined coordinate system, either referencing or containing the definition of that coordinate system. gml:SphericalCS is a three-dimensional coordinate system with one distance measured from the origin and two angular coordinates. A SphericalCS shall have three gml:axis property elements. gml:SphericalCSPropertyType is property type for association roles to a spherical coordinate system, either referencing or containing the definition of that coordinate system. gml:PolarCS ia s two-dimensional coordinate system in which position is specified by the distance from the origin and the angle between the line from the origin to a point and a reference direction. A PolarCS shall have two gml:axis property elements. gml:PolarCSPropertyType is a property type for association roles to a polar coordinate system, either referencing or containing the definition of that coordinate system. gml:CylindricalCS is a three-dimensional coordinate system consisting of a polar coordinate system extended by a straight coordinate axis perpendicular to the plane spanned by the polar coordinate system. A CylindricalCS shall have three gml:axis property elements. gml:CylindricalCSPropertyType is a property type for association roles to a cylindrical coordinate system, either referencing or containing the definition of that coordinate system. gml:AffineCS is a two- or three-dimensional coordinate system with straight axes that are not necessarily orthogonal. An AffineCS shall have two or three gml:axis property elements; the number of property elements shall equal the dimension of the CS. gml:AffineCSPropertyType is a property type for association roles to an affine coordinate system, either referencing or containing the definition of that coordinate system. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/coverage.xsd0000666000000000000000000005021312606055312021752 0ustar 00000000000000 coverage.xsd See ISO/DIS 19136 20.3. A coverage incorporates a mapping from a spatiotemporal domain to a range set, the latter providing the set in which the attribute values live. The range set may be an arbitrary set including discrete lists, integer or floating point ranges, and multi-dimensional vector spaces. A coverage can be viewed as the graph of the coverage function f:A à B, that is as the set of ordered pairs {(x, f(x)) | where x is in A}. This view is especially applicable to the GML encoding of a coverage. In the case of a discrete coverage, the domain set A is partitioned into a collection of subsets (typically a disjoint collection) A = UAi and the function f is constant on each Ai. For a spatial domain, the Ai are geometry elements, hence the coverage can be viewed as a collection of (geometry,value) pairs, where the value is an element of the range set. If the spatial domain A is a topological space then the coverage can be viewed as a collection of (topology,value) pairs, where the topology element in the pair is a topological n-chain (in GML terms this is a gml:TopoPoint, gml:TopoCurve, gml:TopoSurface or gml:TopoSolid). A coverage is implemented as a GML feature. We can thus speak of a "temperature distribution feature", or a "remotely sensed image feature", or a "soil distribution feature". As is the case for any GML object, a coverage object may also be the value of a property of a feature. The base type for coverages is gml:AbstractCoverageType. The basic elements of a coverage can be seen in this content model: the coverage contains gml:domainSet and gml:rangeSet properties. The gml:domainSet property describes the domain of the coverage and the gml:rangeSet property describes the range of the coverage. This element serves as the head of a substitution group which may contain any coverage whose type is derived from gml:AbstractCoverageType. It may act as a variable in the definition of content models where it is required to permit any coverage to be valid. A discrete coverage consists of a domain set, range set and optionally a coverage function. The domain set consists of either spatial or temporal geometry objects, finite in number. The range set is comprised of a finite number of attribute values each of which is associated to every direct position within any single spatiotemporal object in the domain. In other words, the range values are constant on each spatiotemporal object in the domain. This coverage function maps each element from the coverage domain to an element in its range. The coverageFunction element describes the mapping function. This element serves as the head of a substitution group which may contain any discrete coverage whose type is derived from gml:DiscreteCoverageType. A continuous coverage as defined in ISO 19123 is a coverage that can return different values for the same feature attribute at different direct positions within a single spatiotemporal object in its spatiotemporal domain. The base type for continuous coverages is AbstractContinuousCoverageType. The coverageFunction element describes the mapping function. The abstract element gml:AbstractContinuousCoverage serves as the head of a substitution group which may contain any continuous coverage whose type is derived from gml:AbstractContinuousCoverageType. The gml:domainSet property element describes the spatio-temporal region of interest, within which the coverage is defined. Its content model is given by gml:DomainSetType. The value of the domain is thus a choice between a gml:AbstractGeometry and a gml:AbstractTimeObject. In the instance these abstract elements will normally be substituted by a geometry complex or temporal complex, to represent spatial coverages and time-series, respectively. The presence of the gml:AssociationAttributeGroup means that domainSet follows the usual GML property model and may use the xlink:href attribute to point to the domain, as an alternative to describing the domain inline. Ownership semantics may be provided using the gml:OwnershipAttributeGroup. The gml:rangeSet property element contains the values of the coverage (sometimes called the attribute values). Its content model is given by gml:RangeSetType. This content model supports a structural description of the range. The semantic information describing the range set is embedded using a uniform method, as part of the explicit values, or as a template value accompanying the representation using gml:DataBlock and gml:File. The values from each component (or "band") in the range may be encoded within a gml:ValueArray element or a concrete member of the gml:AbstractScalarValueList substitution group . Use of these elements satisfies the value-type homogeneity requirement. gml:DataBlock describes the Range as a block of text encoded values similar to a Common Separated Value (CSV) representation. The range set parameterization is described by the property gml:rangeParameters. gml:CoordinatesType consists of a list of coordinate tuples, with each coordinate tuple separated by the ts or tuple separator (whitespace), and each coordinate in the tuple by the cs or coordinate separator (comma). The gml:tupleList encoding is effectively "band-interleaved". gml:doubleOrNilReasonList consists of a list of gml:doubleOrNilReason values, each separated by a whitespace. The gml:doubleOrNilReason values are grouped into tuples where the dimension of each tuple in the list is equal to the number of range parameters. for efficiency reasons, GML also provides a means of encoding the range set in an arbitrary external encoding, such as a binary file. This encoding may be "well-known" but this is not required. This mode uses the gml:File element. The values of the coverage (attribute values in the range set) are transmitted in a external file that is referenced from the XML structure described by gml:FileType. The external file is referenced by the gml:fileReference property that is an anyURI (the gml:fileName property has been deprecated). This means that the external file may be located remotely from the referencing GML instance. The gml:compression property points to a definition of a compression algorithm through an anyURI. This may be a retrievable, computable definition or simply a reference to an unambiguous name for the compression method. The gml:mimeType property points to a definition of the file mime type. The gml:fileStructure property is defined by a codelist. Note further that all values shall be enclosed in a single file. Multi-file structures for values are not supported in GML. The semantics of the range set is described as above using the gml:rangeParameters property. Note that if any compression algorithm is applied, the structure above applies only to the pre-compression or post-decompression structure of the file. Note that the fields within a record match the gml:valueComponents of the gml:CompositeValue in document order. deprecated The gml:coverageFunction property describes the mapping function from the domain to the range of the coverage. The value of the CoverageFunction is one of gml:CoverageMappingRule and gml:GridFunction. If the gml:coverageFunction property is omitted for a gridded coverage (including rectified gridded coverages) the gml:startPoint is assumed to be the value of the gml:low property in the gml:Grid geometry, and the gml:sequenceRule is assumed to be linear and the gml:axisOrder property is assumed to be "+1 +2". gml:CoverageMappingRule provides a formal or informal description of the coverage function. The mapping rule may be defined as an in-line string (gml:ruleDefinition) or via a remote reference through xlink:href (gml:ruleReference). If no rule name is specified, the default is 'Linear' with respect to members of the domain in document order. gml:GridFunction provides an explicit mapping rule for grid geometries, i.e. the domain shall be a geometry of type grid. It describes the mapping of grid posts (discrete point grid coverage) or grid cells (discrete surface coverage) to the values in the range set. The gml:startPoint is the index position of a point in the grid that is mapped to the first point in the range set (this is also the index position of the first grid post). If the gml:startPoint property is omitted the gml:startPoint is assumed to be equal to the value of gml:low in the gml:Grid geometry. Subsequent points in the mapping are determined by the value of the gml:sequenceRule. The gml:SequenceRuleType is derived from the gml:SequenceRuleEnumeration through the addition of an axisOrder attribute. The gml:SequenceRuleEnumeration is an enumerated type. The rule names are defined in ISO 19123. If no rule name is specified the default is "Linear". deprecated The different values in a gml:AxisDirectionList indicate the incrementation order to be used on all axes of the grid. Each axis shall be mentioned once and only once. The value of a gml:AxisDirection indicates the incrementation order to be used on an axis of the grid. In a gml:MultiPointCoverage the domain set is a gml:MultiPoint, that is a collection of arbitrarily distributed geometric points. The content model is identical with gml:DiscreteCoverageType, but that gml:domainSet shall have values gml:MultiPoint. In a gml:MultiPointCoverage the mapping from the domain to the range is straightforward. - For gml:DataBlock encodings the points of the gml:MultiPoint are mapped in document order to the tuples of the data block. - For gml:CompositeValue encodings the points of the gml:MultiPoint are mapped to the members of the composite value in document order. - For gml:File encodings the points of the gml:MultiPoint are mapped to the records of the file in sequential order. In a gml:MultiCurveCoverage the domain is partioned into a collection of curves comprising a gml:MultiCurve. The coverage function then maps each curve in the collection to a value in the range set. The content model is identical with gml:DiscreteCoverageType, but that gml:domainSet shall have values gml:MultiCurve. In a gml:MultiCurveCoverage the mapping from the domain to the range is straightforward. - For gml:DataBlock encodings the curves of the gml:MultiCurve are mapped in document order to the tuples of the data block. - For gml:CompositeValue encodings the curves of the gml:MultiCurve are mapped to the members of the composite value in document order. - For gml:File encodings the curves of the gml:MultiCurve are mapped to the records of the file in sequential order. In a gml:MultiSurfaceCoverage the domain is partioned into a collection of surfaces comprising a gml:MultiSurface. The coverage function than maps each surface in the collection to a value in the range set. The content model is identical with gml:DiscreteCoverageType, but that gml:domainSet shall have values gml:MultiSurface. In a gml:MultiSurfaceCoverage the mapping from the domain to the range is straightforward. - For gml:DataBlock encodings the surfaces of the gml:MultiSurface are mapped in document order to the tuples of the data block. - For gml:CompositeValue encodings the surfaces of the gml:MultiSurface are mapped to the members of the composite value in document order. - For gml:File encodings the surfaces of the gml:MultiSurface are mapped to the records of the file in sequential order. In a gml:MultiSolidCoverage the domain is partioned into a collection of solids comprising a gml:MultiSolid. The coverage function than maps each solid in the collection to a value in the range set. The content model is identical with gml:DiscreteCoverageType, but that gml:domainSet shall have values gml:MultiSolid. In a gml:MultiSolidCoverage the mapping from the domain to the range is straightforward. - For gml:DataBlock encodings the solids of the gml:MultiSolid are mapped in document order to the tuples of the data block. - For gml:CompositeValue encodings the solids of the gml:MultiSolid are mapped to the members of the composite value in document order. - For gml:File encodings the solids of the gml:MultiSolid are mapped to the records of the file in sequential order. A gml:GriddedCoverage is a discrete point coverage in which the domain set is a geometric grid of points. Note that this is the same as the gml:MultiPointCoverage except that we have a gml:Grid to describe the domain. The simple gridded coverage is not geometrically referenced and hence no geometric positions are assignable to the points in the grid. Such geometric positioning is introduced in the gml:RectifiedGridCoverage. The gml:RectifiedGridCoverage is a discrete point coverage based on a rectified grid. It is similar to the grid coverage except that the points of the grid are geometrically referenced. The rectified grid coverage has a domain that is a gml:RectifiedGrid geometry. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/datums.xsd0000666000000000000000000003654012606055312021463 0ustar 00000000000000 datums.xsd See ISO/DIS 19136 13.5 The datums schema components can be divided into three logical parts, which define elements and types for XML encoding of the definitions of: - Abstract datum - Geodetic datums, including ellipsoid and prime meridian - Multiple other concrete types of spatial or temporal datums These schema components encode the Datum packages of the UML Models of ISO 19111 Clause 10 and ISO/DIS 19136 D.3.10. A gml:AbstractDatum specifies the relationship of a coordinate system to the earth, thus creating a coordinate reference system. A datum uses a parameter or set of parameters that determine the location of the origin of the coordinate reference system. Each datum subtype may be associated with only specific types of coordinate systems. This abstract complex type shall not be used, extended, or restricted, in a GML Application Schema, to define a concrete subtype with a meaning equivalent to a concrete subtype specified in this document. gml:anchorDefinition is a description, possibly including coordinates, of the definition used to anchor the datum to the Earth. Also known as the "origin", especially for engineering and image datums. The codeSpace attribute may be used to reference a source of more detailed on this point or surface, or on a set of such descriptions. - For a geodetic datum, this point is also known as the fundamental point, which is traditionally the point where the relationship between geoid and ellipsoid is defined. In some cases, the "fundamental point" may consist of a number of points. In those cases, the parameters defining the geoid/ellipsoid relationship have been averaged for these points, and the averages adopted as the datum definition. - For an engineering datum, the anchor definition may be a physical point, or it may be a point with defined coordinates in another CRS.may - For an image datum, the anchor definition is usually either the centre of the image or the corner of the image. - For a temporal datum, this attribute is not defined. Instead of the anchor definition, a temporal datum carries a separate time origin of type DateTime. gml:realizationEpoch is the time after which this datum definition is valid. See ISO 19111 Table 32 for details. gml:DatumPropertyType is a property type for association roles to a datum, either referencing or containing the definition of that datum. gml:GeodeticDatum is a geodetic datum defines the precise location and orientation in 3-dimensional space of a defined ellipsoid (or sphere), or of a Cartesian coordinate system centered in this ellipsoid (or sphere). gml:primeMeridian is an association role to the prime meridian used by this geodetic datum. gml:ellipsoid is an association role to the ellipsoid used by this geodetic datum. gml:GeodeticDatumPropertyType is a property type for association roles to a geodetic datum, either referencing or containing the definition of that datum. A gml:Ellipsoid is a geometric figure that may be used to describe the approximate shape of the earth. In mathematical terms, it is a surface formed by the rotation of an ellipse about its minor axis. gml:semiMajorAxis specifies the length of the semi-major axis of the ellipsoid, with its units. Uses the MeasureType with the restriction that the unit of measure referenced by uom must be suitable for a length, such as metres or feet. gml:secondDefiningParameter is a property containing the definition of the second parameter that defines the shape of an ellipsoid. An ellipsoid requires two defining parameters: semi-major axis and inverse flattening or semi-major axis and semi-minor axis. When the reference body is a sphere rather than an ellipsoid, only a single defining parameter is required, namely the radius of the sphere; in that case, the semi-major axis "degenerates" into the radius of the sphere. The inverseFlattening element contains the inverse flattening value of the ellipsoid. This value is a scale factor (or ratio). It uses gml:LengthType with the restriction that the unit of measure referenced by the uom attribute must be suitable for a scale factor, such as percent, permil, or parts-per-million. The semiMinorAxis element contains the length of the semi-minor axis of the ellipsoid. When the isSphere element is included, the ellipsoid is degenerate and is actually a sphere. The sphere is completely defined by the semi-major axis, which is the radius of the sphere. gml:EllipsoidPropertyType is a property type for association roles to an ellipsoid, either referencing or containing the definition of that ellipsoid. A gml:PrimeMeridian defines the origin from which longitude values are determined. The default value for the prime meridian gml:identifier value is "Greenwich". gml:greenwichLongitude is the longitude of the prime meridian measured from the Greenwich meridian, positive eastward. If the value of the prime meridian "name" is "Greenwich" then the value of greenwichLongitude shall be 0 degrees. gml:PrimeMeridianPropertyType is a property type for association roles to a prime meridian, either referencing or containing the definition of that meridian. gml:EngineeringDatum defines the origin of an engineering coordinate reference system, and is used in a region around that origin. This origin may be fixed with respect to the earth (such as a defined point at a construction site), or be a defined point on a moving vehicle (such as on a ship or satellite). gml:EngineeringDatumPropertyType is a property type for association roles to an engineering datum, either referencing or containing the definition of that datum. gml:ImageDatum defines the origin of an image coordinate reference system, and is used in a local context only. For an image datum, the anchor definition is usually either the centre of the image or the corner of the image. For more information, see ISO 19111 B.3.5. gml:pixelInCell is a specification of the way an image grid is associated with the image data attributes. The required codeSpace attribute shall reference a source of information specifying the values and meanings of all the allowed string values for this property. gml:ImageDatumPropertyType is a property type for association roles to an image datum, either referencing or containing the definition of that datum. gml:VerticalDatum is a textual description and/or a set of parameters identifying a particular reference level surface used as a zero-height surface, including its position with respect to the Earth for any of the height types recognized by this International Standard. gml:VerticalDatumPropertyType is property type for association roles to a vertical datum, either referencing or containing the definition of that datum. A gml:TemporalDatum defines the origin of a Temporal Reference System. This type omits the "anchorDefinition" and "realizationEpoch" elements and adds the "origin" element with the dateTime type. The TemporalDatumBaseType partially defines the origin of a temporal coordinate reference system. This type restricts the AbstractDatumType to remove the "anchorDefinition" and "realizationEpoch" elements. gml:origin is the date and time origin of this temporal datum. gml:TemporalDatumPropertyType is a property type for association roles to a temporal datum, either referencing or containing the definition of that datum. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/defaultStyle.xsd0000666000000000000000000004523712606055312022636 0ustar 00000000000000 defaultStyle.xsd Top-level property. Used in application schemas to "attach" the styling information to GML data. The link between the data and the style should be established through this property only. [complexType of] Top-level property. Used in application schemas to "attach" the styling information to GML data. The link between the data and the style should be established through this property only. The value of the top-level property. It is an abstract element. Used as the head element of the substitution group for extensibility purposes. [complexType of] The value of the top-level property. It is an abstract element. Used as the head element of the substitution group for extensibility purposes. Predefined concrete value of the top-level property. Encapsulates all other styling information. [complexType of] Predefined concrete value of the top-level property. Encapsulates all other styling information. The style descriptor for features. [complexType of] The style descriptor for features. Used to specify the grammar of the feature query mechanism. Base complex type for geometry, topology, label and graph styles. The style descriptor for geometries of a feature. [complexType of] The style descriptor for geometries of a feature. deprecated Deprecated in GML version 3.1.0. Use symbol with inline content instead. The style descriptor for topologies of a feature. Describes individual topology elements styles. [complexType of] The style descriptor for topologies of a feature. Describes individual topology elements styles. deprecated Deprecated in GML version 3.1.0. Use symbol with inline content instead. The style descriptor for labels of a feature, geometry or topology. [complexType of] The style descriptor for labels of a feature, geometry or topology. The style descriptor for a graph consisting of a number of features. Describes graph-specific style attributes. [complexType of] The style descriptor for a graph consisting of a number of features. Describes graph-specific style attributes. The symbol property. Extends the gml:AssociationType to allow for remote referencing of symbols. [complexType of] The symbol property. Allows for remote referencing of symbols. Used to specify the type of the symbol used. Label is mixed -- composed of text and XPath expressions used to extract the useful information from the feature. Defines the geometric transformation of entities. There is no particular grammar defined for this value. Used to vary individual graphic parameters and attributes of the style, symbol or text. Graph-specific styling property. Graph-specific styling property. Graph-specific styling property. Graph-specific styling property. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/deprecatedTypes.xsd0000666000000000000000000010327012606055312023306 0ustar 00000000000000 deprecatedTypes.xsd All global schema components that are part of the GML schema, but were deprecated. See Annex I. deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated deprecated hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/dictionary.xsd0000666000000000000000000001541712606055312022333 0ustar 00000000000000 dictionary.xsd See ISO/DIS 19136 Clause 16. Many applications require definitions of terms which are used within instance documents as the values of certain properties or as reference information to tie properties to standard information values in some way. Units of measure and descriptions of measurable phenomena are two particular examples. It will often be convenient to use definitions provided by external authorities. These may already be packaged for delivery in various ways, both online and offline. In order that they may be referred to from GML documents it is generally necessary that a URI be available for each definition. Where this is the case then it is usually preferable to refer to these directly. Alternatively, it may be convenient or necessary to capture definitions in XML, either embedded within an instance document containing features or as a separate document. The definitions may be transcriptions from an external source, or may be new definitions for a local purpose. In order to support this case, some simple components are provided in GML in the form of - a generic gml:Definition, which may serve as the basis for more specialized definitions - a generic gml:Dictionary, which allows a set of definitions or references to definitions to be collected These components may be used directly, but also serve as the basis for more specialised definition elements in GML, in particular: coordinate operations, coordinate reference systems, datums, temporal reference systems, and units of measure. Note that the GML definition and dictionary components implement a simple nested hierarchy of definitions with identifiers. The latter provide handles which may be used in the description of more complex relationships between terms. However, the GML dictionary components are not intended to provide direct support for complex taxonomies, ontologies or thesauri. Specialised XML tools are available to satisfy the more sophisticated requirements. The basic gml:Definition element specifies a definition, which can be included in or referenced by a dictionary. The content model for a generic definition is a derivation from gml:AbstractGMLType. The gml:description property element shall hold the definition if this can be captured in a simple text string, or the gml:descriptionReference property element may carry a link to a description elsewhere. The gml:identifier element shall provide one identifier identifying this definition. The identifier shall be unique within the dictionaries using this definition. The gml:name elements shall provide zero or more terms and synonyms for which this is the definition. The gml:remarks element shall be used to hold additional textual information that is not conceptually part of the definition but is useful in understanding the definition. Sets of definitions may be collected into dictionaries or collections. A gml:Dictionary is a non-abstract collection of definitions. The gml:Dictionary content model adds a list of gml:dictionaryEntry properties that contain or reference gml:Definition objects. A database handle (gml:id attribute) is required, in order that this collection may be referred to. The standard gml:identifier, gml:description, gml:descriptionReference and gml:name properties are available to reference or contain more information about this dictionary. The gml:description and gml:descriptionReference property elements may be used for a description of this dictionary. The derived gml:name element may be used for the name(s) of this dictionary. for remote definiton references gml:dictionaryEntry shall be used. If a Definition object contained within a Dictionary uses the descriptionReference property to refer to a remote definition, then this enables the inclusion of a remote definition in a local dictionary, giving a handle and identifier in the context of the local dictionary. This property element contains or refers to the definitions which are members of a dictionary. The content model follows the standard GML property pattern, so a gml:dictionaryEntry may either contain or refer to a single gml:Definition. Since gml:Dictionary is substitutable for gml:Definition, the content of an entry may itself be a lower level dictionary. Note that if the value is provided by reference, this definition does not carry a handle (gml:id) in this context, so does not allow external references to this specific definition in this context. When used in this way the referenced definition will usually be in a dictionary in the same XML document. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/direction.xsd0000666000000000000000000000755712606055312022154 0ustar 00000000000000 direction.xsd See ISO/DIS 19136 Clause 18. The direction schema components provide the GML Application Schema developer with a standard property element to describe direction, and associated objects that may be used to express orientation, direction, heading, bearing or other directional aspects of geographic features. The property gml:direction is intended as a pre-defined property expressing a direction to be assigned to features defined in a GML application schema. Direction vectors are specified by providing components of a vector. deprecated direction descriptions are specified by a compass point code, a keyword, a textual description or a reference to a description. A gml:compassPoint is specified by a simple enumeration. In addition, thre elements to contain text-based descriptions of direction are provided. If the direction is specified using a term from a list, gml:keyword should be used, and the list indicated using the value of the codeSpace attribute. if the direction is decribed in prose, gml:direction or gml:reference should be used, allowing the value to be included inline or by reference. These directions are necessarily approximate, giving direction with a precision of 22.5°. It is thus generally unnecessary to specify the reference frame, though this may be detailed in the definition of a GML application language. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/dynamicFeature.xsd0000666000000000000000000001470412606055312023124 0ustar 00000000000000 dynamicFeature.xsd See ISO/DIS 19136 15.6. A number of types and relationships are defined to represent the time-varying properties of geographic features. In a comprehensive treatment of spatiotemporal modeling, Langran (see Bibliography) distinguished three principal temporal entities: states, events, and evidence; the schema specified in the following Subclauses incorporates elements for each. Evidence is represented by a simple gml:dataSource or gml:dataSourceReference property that indicates the source of the temporal data. The remote link attributes of the gml:dataSource element have been deprecated along with its current type. Evidence is represented by a simple gml:dataSource or gml:dataSourceReference property that indicates the source of the temporal data. A convenience group. This allows an application schema developer to include dynamic properties in a content model in a standard fashion. States are captured by time-stamped instances of a feature. The content model extends the standard gml:AbstractFeatureType with the gml:dynamicProperties model group. Each time-stamped instance represents a 'snapshot' of a feature. The dynamic feature classes will normally be extended to suit particular applications. A dynamic feature bears either a time stamp or a history. A gml:DynamicFeatureCollection is a feature collection that has a gml:validTime property (i.e. is a snapshot of the feature collection) or which has a gml:history property that contains one or more gml:AbstractTimeSlices each of which contain values of the time varying properties of the feature collection. Note that the gml:DynamicFeatureCollection may be one of the following: 1. A feature collection which consists of static feature members (members do not change in time) but which has properties of the collection object as a whole that do change in time . 2. A feature collection which consists of dynamic feature members (the members are gml:DynamicFeatures) but which also has properties of the collection as a whole that vary in time. To describe an event — an action that occurs at an instant or over an interval of time — GML provides the gml:AbtractTimeSlice element. A timeslice encapsulates the time-varying properties of a dynamic feature -- it shall be extended to represent a time stamped projection of a specific feature. The gml:dataSource property describes how the temporal data was acquired. A gml:AbstractTimeSlice instance is a GML object that encapsulates updates of the dynamic—or volatile—properties that reflect some change event; it thus includes only those feature properties that have actually changed due to some process. gml:AbstractTimeSlice basically provides a facility for attribute-level time stamping, in contrast to the object-level time stamping of dynamic feature instances. The time slice can thus be viewed as event or process-oriented, whereas a snapshot is more state or structure-oriented. A timeslice has richer causality, whereas a snapshot merely portrays the status of the whole. A generic sequence of events constitute a gml:history of an object. The gml:history element contains a set of elements in the substitution group headed by the abstract element gml:AbstractTimeSlice, representing the time-varying properties of interest. The history property of a dynamic feature associates a feature instance with a sequence of time slices (i.e. change events) that encapsulate the evolution of the feature. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/feature.xsd0000666000000000000000000001237512606055312021621 0ustar 00000000000000 feature.xsd See ISO/DIS 19136 Clause 9. A GML feature is a (representation of a) identifiable real-world object in a selected domain of discourse. The feature schema provides a framework for the creation of GML features and feature collections. The basic feature model is given by the gml:AbstractFeatureType. The content model for gml:AbstractFeatureType adds two specific properties suitable for geographic features to the content model defined in gml:AbstractGMLType. The value of the gml:boundedBy property describes an envelope that encloses the entire feature instance, and is primarily useful for supporting rapid searching for features that occur in a particular location. The value of the gml:location property describes the extent, position or relative location of the feature. This abstract element serves as the head of a substitution group which may contain any elements whose content model is derived from gml:AbstractFeatureType. This may be used as a variable in the construction of content models. gml:AbstractFeature may be thought of as "anything that is a GML feature" and may be used to define variables or templates in which the value of a GML property is "any feature". This occurs in particular in a GML feature collection where the feature member properties contain one or multiple copies of gml:AbstractFeature respectively. This property describes the minimum bounding box or rectangle that encloses the entire feature. gml:EnvelopeWithTimePeriod is provided for envelopes that include a temporal extent. It adds two time position properties, gml:beginPosition and gml:endPosition, which describe the extent of a time-envelope. Since gml:EnvelopeWithTimePeriod is assigned to the substitution group headed by gml:Envelope, it may be used whenever gml:Envelope is valid. The gml:locationName property element is a convenience property where the text value describes the location of the feature. If the location names are selected from a controlled list, then the list shall be identified in the codeSpace attribute. The gml:locationReference property element is a convenience property where the text value referenced by the xlink:href attribute describes the location of the feature. To create a collection of GML features, a property type shall be derived by extension from gml:AbstractFeatureMemberType. By default, this abstract property type does not imply any ownership of the features in the collection. The owns attribute of gml:OwnershipAttributeGroup may be used on a property element instance to assert ownership of a feature in the collection. A collection shall not own a feature already owned by another object. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/geometryAggregates.xsd0000666000000000000000000002606012606055312024007 0ustar 00000000000000 geometryAggregates.xsd See ISO/DIS 19136 12.3. Geometric aggregates (i.e. instances of a subtype of gml:AbstractGeometricAggregateType) are arbitrary aggregations of geometry elements. They are not assumed to have any additional internal structure and are used to "collect" pieces of geometry of a specified type. Application schemas may use aggregates for features that use multiple geometric objects in their representations. gml:AbstractGeometricAggregate is the abstract head of the substitution group for all geometric aggregates. gml:MultiGeometry is a collection of one or more GML geometry objects of arbitrary type. The members of the geometric aggregate may be specified either using the "standard" property (gml:geometryMember) or the array property (gml:geometryMembers). It is also valid to use both the "standard" and the array properties in the same collection. This property element either references a geometry element via the XLink-attributes or contains the geometry element. This property element contains a list of geometry elements. The order of the elements is significant and shall be preserved when processing the array. A property that has a geometric aggregate as its value domain may either be an appropriate geometry element encapsulated in an element of this type or an XLink reference to a remote geometry element (where remote includes geometry elements located elsewhere in the same document). Either the reference or the contained element shall be given, but neither both nor none. A gml:MultiPoint consists of one or more gml:Points. The members of the geometric aggregate may be specified either using the "standard" property (gml:pointMember) or the array property (gml:pointMembers). It is also valid to use both the "standard" and the array properties in the same collection. This property element either references a Point via the XLink-attributes or contains the Point element. This property element contains a list of points. The order of the elements is significant and shall be preserved when processing the array. A property that has a collection of points as its value domain may either be an appropriate geometry element encapsulated in an element of this type or an XLink reference to a remote geometry element (where remote includes geometry elements located elsewhere in the same document). Either the reference or the contained element shall be given, but neither both nor none. A gml:MultiCurve is defined by one or more gml:AbstractCurves. The members of the geometric aggregate may be specified either using the "standard" property (gml:curveMember) or the array property (gml:curveMembers). It is also valid to use both the "standard" and the array properties in the same collection. This property element contains a list of curves. The order of the elements is significant and shall be preserved when processing the array. A property that has a collection of curves as its value domain may either be an appropriate geometry element encapsulated in an element of this type or an XLink reference to a remote geometry element (where remote includes geometry elements located elsewhere in the same document). Either the reference or the contained element shall be given, but neither both nor none. A gml:MultiSurface is defined by one or more gml:AbstractSurfaces. The members of the geometric aggregate may be specified either using the "standard" property (gml:surfaceMember) or the array property (gml:surfaceMembers). It is also valid to use both the "standard" and the array properties in the same collection. This property element contains a list of surfaces. The order of the elements is significant and shall be preserved when processing the array. A property that has a collection of surfaces as its value domain may either be an appropriate geometry element encapsulated in an element of this type or an XLink reference to a remote geometry element (where remote includes geometry elements located elsewhere in the same document). Either the reference or the contained element shall be given, but neither both nor none. A gml:MultiSolid is defined by one or more gml:AbstractSolids. The members of the geometric aggregate may be specified either using the "standard" property (gml:solidMember) or the array property (gml:solidMembers). It is also valid to use both the "standard" and the array properties in the same collection. This property element either references a solid via the XLink-attributes or contains the solid element. A solid element is any element, which is substitutable for gml:AbstractSolid. This property element contains a list of solids. The order of the elements is significant and shall be preserved when processing the array. A property that has a collection of solids as its value domain may either be an appropriate geometry element encapsulated in an element of this type or an XLink reference to a remote geometry element (where remote includes geometry elements located elsewhere in the same document). Either the reference or the contained element shall be given, but neither both nor none. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/geometryBasic0d1d.xsd0000666000000000000000000004443612606055312023437 0ustar 00000000000000 geometryBasic0d1d.xsd See ISO/DIS 19136 Clause 10. Any geometry element that inherits the semantics of AbstractGeometryType may be viewed as a set of direct positions. All of the classes derived from AbstractGeometryType inherit an optional association to a coordinate reference system. All direct positions shall directly or indirectly be associated with a coordinate reference system. When geometry elements are aggregated in another geometry element (such as a MultiGeometry or GeometricComplex), which already has a coordinate reference system specified, then these elements are assumed to be in that same coordinate reference system unless otherwise specified. The geometry model distinguishes geometric primitives, aggregates and complexes. Geometric primitives, i.e. instances of a subtype of AbstractGeometricPrimitiveType, will be open, that is, they will not contain their boundary points; curves will not contain their end points, surfaces will not contain their boundary curves, and solids will not contain their bounding surfaces. All geometry elements are derived directly or indirectly from this abstract supertype. A geometry element may have an identifying attribute (gml:id), one or more names (elements identifier and name) and a description (elements description and descriptionReference) . It may be associated with a spatial reference system (attribute group gml:SRSReferenceGroup). The following rules shall be adhered to: - Every geometry type shall derive from this abstract type. - Every geometry element (i.e. an element of a geometry type) shall be directly or indirectly in the substitution group of AbstractGeometry. The attribute group SRSReferenceGroup is an optional reference to the CRS used by this geometry, with optional additional information to simplify the processing of the coordinates when a more complete definition of the CRS is not needed. In general the attribute srsName points to a CRS instance of gml:AbstractCoordinateReferenceSystem. For well-known references it is not required that the CRS description exists at the location the URI points to. If no srsName attribute is given, the CRS shall be specified as part of the larger context this geometry element is part of. The attributes uomLabels and axisLabels, defined in the SRSInformationGroup attribute group, are optional additional and redundant information for a CRS to simplify the processing of the coordinate values when a more complete definition of the CRS is not needed. This information shall be the same as included in the complete definition of the CRS, referenced by the srsName attribute. When the srsName attribute is included, either both or neither of the axisLabels and uomLabels attributes shall be included. When the srsName attribute is omitted, both of these attributes shall be omitted. The attribute axisLabels is an ordered list of labels for all the axes of this CRS. The gml:axisAbbrev value should be used for these axis labels, after spaces and forbidden characters are removed. When the srsName attribute is included, this attribute is optional. When the srsName attribute is omitted, this attribute shall also be omitted. The attribute uomLabels is an ordered list of unit of measure (uom) labels for all the axes of this CRS. The value of the string in the gml:catalogSymbol should be used for this uom labels, after spaces and forbidden characters are removed. When the axisLabels attribute is included, this attribute shall also be included. When the axisLabels attribute is omitted, this attribute shall also be omitted. The AbstractGeometry element is the abstract head of the substitution group for all geometry elements of GML. This includes pre-defined and user-defined geometry elements. Any geometry element shall be a direct or indirect extension/restriction of AbstractGeometryType and shall be directly or indirectly in the substitution group of AbstractGeometry. A geometric property may either be any geometry element encapsulated in an element of this type or an XLink reference to a remote geometry element (where remote includes geometry elements located elsewhere in the same or another document). Note that either the reference or the contained element shall be given, but not both or none. If a feature has a property that takes a geometry element as its value, this is called a geometry property. A generic type for such a geometry property is GeometryPropertyType. If a feature has a property which takes an array of geometry elements as its value, this is called a geometry array property. A generic type for such a geometry property is GeometryArrayPropertyType. The elements are always contained inline in the array property, referencing geometry elements or arrays of geometry elements via XLinks is not supported. Direct position instances hold the coordinates for a position within some coordinate reference system (CRS). Since direct positions, as data types, will often be included in larger objects (such as geometry elements) that have references to CRS, the srsName attribute will in general be missing, if this particular direct position is included in a larger element with such a reference to a CRS. In this case, the CRS is implicitly assumed to take on the value of the containing object's CRS. if no srsName attribute is given, the CRS shall be specified as part of the larger context this geometry element is part of, typically a geometric object like a point, curve, etc. posList instances (and other instances with the content model specified by DirectPositionListType) hold the coordinates for a sequence of direct positions within the same coordinate reference system (CRS). if no srsName attribute is given, the CRS shall be specified as part of the larger context this geometry element is part of, typically a geometric object like a point, curve, etc. The optional attribute count specifies the number of direct positions in the list. If the attribute count is present then the attribute srsDimension shall be present, too. The number of entries in the list is equal to the product of the dimensionality of the coordinate reference system (i.e. it is a derived value of the coordinate reference system definition) and the number of direct positions. GML supports two different ways to specify a geometric position: either by a direct position (a data type) or a point (a geometric object). pos elements are positions that are "owned" by the geometric primitive encapsulating this geometric position. pointProperty elements contain a point that may be referenced from other geometry elements or reference another point defined elsewhere (reuse of existing points). GML supports two different ways to specify a list of geometric positions: either by a sequence of geometric positions (by reusing the group definition) or a sequence of direct positions (element posList). The posList element allows for a compact way to specify the coordinates of the positions, if all positions are represented in the same coordinate reference system. For some applications the components of the position may be adjusted to yield a unit vector. deprecated Envelope defines an extent using a pair of positions defining opposite corners in arbitrary dimensions. The first direct position is the "lower corner" (a coordinate position consisting of all the minimal ordinates for each dimension for all points within the envelope), the second one the "upper corner" (a coordinate position consisting of all the maximal ordinates for each dimension for all points within the envelope). The use of the properties "coordinates" and "pos" has been deprecated. The explicitly named properties "lowerCorner" and "upperCorner" shall be used instead. gml:AbstractGeometricPrimitiveType is the abstract root type of the geometric primitives. A geometric primitive is a geometric object that is not decomposed further into other primitives in the system. All primitives are oriented in the direction implied by the sequence of their coordinate tuples. The AbstractGeometricPrimitive element is the abstract head of the substitution group for all (pre- and user-defined) geometric primitives. A property that has a geometric primitive as its value domain may either be an appropriate geometry element encapsulated in an element of this type or an XLink reference to a remote geometry element (where remote includes geometry elements located elsewhere in the same document). Either the reference or the contained element shall be given, but neither both nor none. A Point is defined by a single coordinate tuple. The direct position of a point is specified by the pos element which is of type DirectPositionType. A property that has a point as its value domain may either be an appropriate geometry element encapsulated in an element of this type or an XLink reference to a remote geometry element (where remote includes geometry elements located elsewhere in the same document). Either the reference or the contained element shall be given, but neither both nor none. This property element either references a point via the XLink-attributes or contains the point element. pointProperty is the predefined property which may be used by GML Application Schemas whenever a GML feature has a property with a value that is substitutable for Point. gml:PointArrayPropertyType is a container for an array of points. The elements are always contained inline in the array property, referencing geometry elements or arrays of geometry elements via XLinks is not supported. gml:AbstractCurveType is an abstraction of a curve to support the different levels of complexity. The curve may always be viewed as a geometric primitive, i.e. is continuous. The AbstractCurve element is the abstract head of the substitution group for all (continuous) curve elements. A property that has a curve as its value domain may either be an appropriate geometry element encapsulated in an element of this type or an XLink reference to a remote geometry element (where remote includes geometry elements located elsewhere in the same document). Either the reference or the contained element shall be given, but neither both nor none. This property element either references a curve via the XLink-attributes or contains the curve element. curveProperty is the predefined property which may be used by GML Application Schemas whenever a GML feature has a property with a value that is substitutable for AbstractCurve. A container for an array of curves. The elements are always contained in the array property, referencing geometry elements or arrays of geometry elements via XLinks is not supported. A LineString is a special curve that consists of a single segment with linear interpolation. It is defined by two or more coordinate tuples, with linear interpolation between them. The number of direct positions in the list shall be at least two. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/geometryBasic2d.xsd0000666000000000000000000001423612606055312023207 0ustar 00000000000000 geometryBasic2d.xsd See ISO/DIS 19136 Clause 10. gml:AbstractSurfaceType is an abstraction of a surface to support the different levels of complexity. A surface is always a continuous region of a plane. The AbstractSurface element is the abstract head of the substitution group for all (continuous) surface elements. A property that has a surface as its value domain may either be an appropriate geometry element encapsulated in an element of this type or an XLink reference to a remote geometry element (where remote includes geometry elements located elsewhere in the same document). Either the reference or the contained element shall be given, but neither both nor none. This property element either references a surface via the XLink-attributes or contains the surface element. surfaceProperty is the predefined property which may be used by GML Application Schemas whenever a GML feature has a property with a value that is substitutable for AbstractSurface. gml:SurfaceArrayPropertyType is a container for an array of surfaces. The elements are always contained in the array property, referencing geometry elements or arrays of geometry elements via XLinks is not supported. A Polygon is a special surface that is defined by a single surface patch (see D.3.6). The boundary of this patch is coplanar and the polygon uses planar interpolation in its interior. The elements exterior and interior describe the surface boundary of the polygon. A boundary of a surface consists of a number of rings. In the normal 2D case, one of these rings is distinguished as being the exterior boundary. In a general manifold this is not always possible, in which case all boundaries shall be listed as interior boundaries, and the exterior will be empty. A boundary of a surface consists of a number of rings. The "interior" rings separate the surface / surface patch from the area enclosed by the rings. An abstraction of a ring to support surface boundaries of different complexity. The AbstractRing element is the abstract head of the substituition group for all closed boundaries of a surface patch. A property with the content model of gml:AbstractRingPropertyType encapsulates a ring to represent the surface boundary property of a surface. A LinearRing is defined by four or more coordinate tuples, with linear interpolation between them; the first and last coordinates shall be coincident. The number of direct positions in the list shall be at least four. A property with the content model of gml:LinearRingPropertyType encapsulates a linear ring to represent a component of a surface boundary. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/geometryComplexes.xsd0000666000000000000000000001275512606055312023703 0ustar 00000000000000 geometryComplexes.xsd See ISO/DIS 19136 12.2. Geometric complexes (i.e. instances of gml:GeometricComplexType) are closed collections of geometric primitives, i.e. they will contain their boundaries. A geometric complex (gml:GeometricComplex) is defined by ISO 19107:2003, 6.6.1 as "a set of primitive geometric objects (in a common coordinate system) whose interiors are disjoint. Further, if a primitive is in a geometric complex, then there exists a set of primitives in that complex whose point-wise union is the boundary of this first primitive." A geometric composite (gml:CompositeCurve, gml:CompositeSurface and gml:CompositeSolid) represents a geometric complex with an underlying core geometry that is isomorphic to a primitive, i.e. it can be viewed as a primitive and as a complex. See ISO 19107:2003, 6.1 and 6.6.3 for more details on the nature of composite geometries. Geometric complexes and composites are intended to be used in application schemas where the sharing of geometry is important. A property that has a geometric complex as its value domain may either be an appropriate geometry element encapsulated in an element of this type or an XLink reference to a remote geometry element (where remote includes geometry elements located elsewhere in the same document). Either the reference or the contained element shall be given, but neither both nor none. A gml:CompositeCurve is represented by a sequence of (orientable) curves such that each curve in the sequence terminates at the start point of the subsequent curve in the list. curveMember references or contains inline one curve in the composite curve. The curves are contiguous, the collection of curves is ordered. Therefore, if provided, the aggregationType attribute shall have the value "sequence". A gml:CompositeSurface is represented by a set of orientable surfaces. It is geometry type with all the geometric properties of a (primitive) surface. Essentially, a composite surface is a collection of surfaces that join in pairs on common boundary curves and which, when considered as a whole, form a single surface. surfaceMember references or contains inline one surface in the composite surface. The surfaces are contiguous. gml:CompositeSolid implements ISO 19107 GM_CompositeSolid (see ISO 19107:2003, 6.6.7) as specified in D.2.3.6. A gml:CompositeSolid is represented by a set of orientable surfaces. It is a geometry type with all the geometric properties of a (primitive) solid. Essentially, a composite solid is a collection of solids that join in pairs on common boundary surfaces and which, when considered as a whole, form a single solid. solidMember references or contains one solid in the composite solid. The solids are contiguous. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/geometryPrimitives.xsd0000666000000000000000000012253112606055312024071 0ustar 00000000000000 geometryPrimitives.xsd See ISO/DIS 19136 Clause 11. Beside the "simple" geometric primitives specified in the previous Clause, this Clause specifies additional primitives to describe real world situations which require a more expressive geometry model. A curve is a 1-dimensional primitive. Curves are continuous, connected, and have a measurable length in terms of the coordinate system. A curve is composed of one or more curve segments. Each curve segment within a curve may be defined using a different interpolation method. The curve segments are connected to one another, with the end point of each segment except the last being the start point of the next segment in the segment list. The orientation of the curve is positive. The element segments encapsulates the segments of the curve. The property baseCurve references or contains the base curve, i.e. it either references the base curve via the XLink-attributes or contains the curve element. A curve element is any element which is substitutable for AbstractCurve. The base curve has positive orientation. OrientableCurve consists of a curve and an orientation. If the orientation is "+", then the OrientableCurve is identical to the baseCurve. If the orientation is "-", then the OrientableCurve is related to another AbstractCurve with a parameterization that reverses the sense of the curve traversal. A curve segment defines a homogeneous segment of a curve. The attributes numDerivativesAtStart, numDerivativesAtEnd and numDerivativesInterior specify the type of continuity as specified in ISO 19107:2003, 6.4.9.3. The AbstractCurveSegment element is the abstract head of the substituition group for all curve segment elements, i.e. continuous segments of the same interpolation mechanism. All curve segments shall have an attribute interpolation with type gml:CurveInterpolationType specifying the curve interpolation mechanism used for this segment. This mechanism uses the control points and control parameters to determine the position of this curve segment. gml:CurveSegmentArrayPropertyType is a container for an array of curve segments. This property element contains a list of curve segments. The order of the elements is significant and shall be preserved when processing the array. gml:CurveInterpolationType is a list of codes that may be used to identify the interpolation mechanisms specified by an application schema. A LineStringSegment is a curve segment that is defined by two or more control points including the start and end point, with linear interpolation between them. The content model follows the general pattern for the encoding of curve segments. An ArcString is a curve segment that uses three-point circular arc interpolation ("circularArc3Points"). The number of arcs in the arc string may be explicitly stated in the attribute numArc. The number of control points in the arc string shall be 2 * numArc + 1. The content model follows the general pattern for the encoding of curve segments. An Arc is an arc string with only one arc unit, i.e. three control points including the start and end point. As arc is an arc string consisting of a single arc, the attribute "numArc" is fixed to "1". A Circle is an arc whose ends coincide to form a simple closed loop. The three control points shall be distinct non-co-linear points for the circle to be unambiguously defined. The arc is simply extended past the third control point until the first control point is encountered. This variant of the arc computes the mid points of the arcs instead of storing the coordinates directly. The control point sequence consists of the start and end points of each arc plus the bulge (see ISO 19107:2003, 6.4.17.2). The normal is a vector normal (perpendicular) to the chord of the arc (see ISO 19107:2003, 6.4.17.4). The interpolation is fixed as "circularArc2PointWithBulge". The number of arcs in the arc string may be explicitly stated in the attribute numArc. The number of control points in the arc string shall be numArc + 1. The content model follows the general pattern for the encoding of curve segments. An ArcByBulge is an arc string with only one arc unit, i.e. two control points, one bulge and one normal vector. As arc is an arc string consisting of a single arc, the attribute "numArc" is fixed to "1". This variant of the arc requires that the points on the arc shall be computed instead of storing the coordinates directly. The single control point is the center point of the arc plus the radius and the bearing at start and end. This representation can be used only in 2D. The element radius specifies the radius of the arc. The element startAngle specifies the bearing of the arc at the start. The element endAngle specifies the bearing of the arc at the end. The interpolation is fixed as "circularArcCenterPointWithRadius". Since this type describes always a single arc, the attribute "numArc" is fixed to "1". The content model follows the general pattern for the encoding of curve segments. A gml:CircleByCenterPoint is an gml:ArcByCenterPoint with identical start and end angle to form a full circle. Again, this representation can be used only in 2D. The number of control points shall be at least three. vectorAtStart is the unit tangent vector at the start point of the spline. vectorAtEnd is the unit tangent vector at the end point of the spline. Only the direction of the vectors shall be used to determine the shape of the cubic spline, not their length. interpolation is fixed as "cubicSpline". degree shall be the degree of the polynomial used for the interpolation in this spline. Therefore the degree for a cubic spline is fixed to "3". The content model follows the general pattern for the encoding of curve segments. A B-Spline is a piecewise parametric polynomial or rational curve described in terms of control points and basis functions as specified in ISO 19107:2003, 6.4.30. Therefore, interpolation may be either "polynomialSpline" or "rationalSpline" depending on the interpolation type; default is "polynomialSpline". degree shall be the degree of the polynomial used for interpolation in this spline. knot shall be the sequence of distinct knots used to define the spline basis functions (see ISO 19107:2003, 6.4.26.2). The attribute isPolynomial shall be set to "true" if this is a polynomial spline (see ISO 19107:2003, 6.4.30.5). The attribute knotType shall provide the type of knot distribution used in defining this spline (see ISO 19107:2003, 6.4.30.4). The content model follows the general pattern for the encoding of curve segments. gml:KnotPropertyType encapsulates a knot to use it in a geometric type. A knot is a breakpoint on a piecewise spline curve. value is the value of the parameter at the knot of the spline (see ISO 19107:2003, 6.4.24.2). multiplicity is the multiplicity of this knot used in the definition of the spline (with the same weight). weight is the value of the averaging weight used for this knot of the spline. This enumeration type specifies values for the knots' type (see ISO 19107:2003, 6.4.25). Bezier curves are polynomial splines that use Bezier or Bernstein polynomials for interpolation purposes. It is a special case of the B-Spline curve with two knots. degree shall be the degree of the polynomial used for interpolation in this spline. knot shall be the sequence of distinct knots used to define the spline basis functions. interpolation is fixed as "polynomialSpline". isPolynomial is fixed as "true". knotType is not relevant for Bezier curve segments. An offset curve is a curve at a constant distance from the basis curve. offsetBase is the base curve from which this curve is defined as an offset. distance and refDirection have the same meaning as specified in ISO 19107:2003, 6.4.23. The content model follows the general pattern for the encoding of curve segments. location, refDirection, inDimension and outDimension have the same meaning as specified in ISO 19107:2003, 6.4.21. A clothoid, or Cornu's spiral, is plane curve whose curvature is a fixed function of its length. refLocation, startParameter, endParameter and scaleFactor have the same meaning as specified in ISO 19107:2003, 6.4.22. interpolation is fixed as "clothoid". The content model follows the general pattern for the encoding of curve segments. A sequence of geodesic segments. The number of control points shall be at least two. interpolation is fixed as "geodesic". The content model follows the general pattern for the encoding of curve segments. A Surface is a 2-dimensional primitive and is composed of one or more surface patches as specified in ISO 19107:2003, 6.3.17.1. The surface patches are connected to one another. patches encapsulates the patches of the surface. The property baseSurface references or contains the base surface. The property baseSurface either references the base surface via the XLink-attributes or contains the surface element. A surface element is any element which is substitutable for gml:AbstractSurface. The base surface has positive orientation. OrientableSurface consists of a surface and an orientation. If the orientation is "+", then the OrientableSurface is identical to the baseSurface. If the orientation is "-", then the OrientableSurface is a reference to a gml:AbstractSurface with an up-normal that reverses the direction for this OrientableSurface, the sense of "the top of the surface". A surface patch defines a homogenuous portion of a surface. The AbstractSurfacePatch element is the abstract head of the substituition group for all surface patch elements describing a continuous portion of a surface. All surface patches shall have an attribute interpolation (declared in the types derived from gml:AbstractSurfacePatchType) specifying the interpolation mechanism used for the patch using gml:SurfaceInterpolationType. gml:SurfacePatchArrayPropertyType is a container for a sequence of surface patches. The patches property element contains the sequence of surface patches. The order of the elements is significant and shall be preserved when processing the array. gml:SurfaceInterpolationType is a list of codes that may be used to identify the interpolation mechanisms specified by an application schema. A gml:PolygonPatch is a surface patch that is defined by a set of boundary curves and an underlying surface to which these curves adhere. The curves shall be coplanar and the polygon uses planar interpolation in its interior. interpolation is fixed to "planar", i.e. an interpolation shall return points on a single plane. The boundary of the patch shall be contained within that plane. gml:Triangle represents a triangle as a surface patch with an outer boundary consisting of a linear ring. Note that this is a polygon (subtype) with no inner boundaries. The number of points in the linear ring shall be four. The ring (element exterior) shall be a gml:LinearRing and shall form a triangle, the first and the last position shall be coincident. interpolation is fixed to "planar", i.e. an interpolation shall return points on a single plane. The boundary of the patch shall be contained within that plane. gml:Rectangle represents a rectangle as a surface patch with an outer boundary consisting of a linear ring. Note that this is a polygon (subtype) with no inner boundaries. The number of points in the linear ring shall be five. The ring (element exterior) shall be a gml:LinearRing and shall form a rectangle; the first and the last position shall be coincident. interpolation is fixed to "planar", i.e. an interpolation shall return points on a single plane. The boundary of the patch shall be contained within that plane. A ring is used to represent a single connected component of a surface boundary as specified in ISO 19107:2003, 6.3.6. Every gml:curveMember references or contains one curve, i.e. any element which is substitutable for gml:AbstractCurve. In the context of a ring, the curves describe the boundary of the surface. The sequence of curves shall be contiguous and connected in a cycle. If provided, the aggregationType attribute shall have the value "sequence". A property with the content model of gml:RingPropertyType encapsulates a ring to represent a component of a surface boundary. A gml:PointGrid group contains or references points or positions which are organised into sequences or grids. All rows shall have the same number of positions (columns). The element provides a substitution group head for the surface patches based on parametric curves. All properties are specified in the derived subtypes. All derived subtypes shall conform to the constraints specified in ISO 19107:2003, 6.4.40. If provided, the aggregationType attribute shall have the value "set". if provided, rows gives the number of rows, columns the number of columns in the parameter grid. The parameter grid is represented by an instance of the gml:PointGrid group. The element provides a substitution group head for the surface patches based on a grid. All derived subtypes shall conform to the constraints specified in ISO 19107:2003, 6.4.41. A polyhedral surface is a surface composed of polygon patches connected along their common boundary curves. This differs from the surface type only in the restriction on the types of surface patches acceptable. polygonPatches encapsulates the polygon patches of the polyhedral surface. A triangulated surface is a polyhedral surface that is composed only of triangles. There is no restriction on how the triangulation is derived. trianglePatches encapsulates the triangles of the triangulated surface. A tin is a triangulated surface that uses the Delauny algorithm or a similar algorithm complemented with consideration of stoplines (stopLines), breaklines (breakLines), and maximum length of triangle sides (maxLength). controlPoint shall contain a set of the positions (three or more) used as posts for this TIN (corners of the triangles in the TIN). See ISO 19107:2003, 6.4.39 for details. gml:LineStringSegmentArrayPropertyType provides a container for line strings. gml:AbstractSolidType is an abstraction of a solid to support the different levels of complexity. The solid may always be viewed as a geometric primitive, i.e. is contiguous. The AbstractSolid element is the abstract head of the substituition group for all (continuous) solid elements. A property that has a solid as its value domain may either be an appropriate geometry element encapsulated in an element of this type or an XLink reference to a remote geometry element (where remote includes geometry elements located elsewhere in the same document). Either the reference or the contained element shall be given, but neither both nor none. This property element either references a solid via the XLink-attributes or contains the solid element. solidProperty is the predefined property which may be used by GML Application Schemas whenever a GML feature has a property with a value that is substitutable for AbstractSolid. gml:SolidArrayPropertyType is a container for an array of solids. The elements are always contained in the array property, referencing geometry elements or arrays of geometry elements is not supported. A solid is the basis for 3-dimensional geometry. The extent of a solid is defined by the boundary surfaces as specified in ISO 19107:2003, 6.3.18. exterior specifies the outer boundary, interior the inner boundary of the solid. A shell is used to represent a single connected component of a solid boundary as specified in ISO 19107:2003, 6.3.8. Every gml:surfaceMember references or contains one surface, i.e. any element which is substitutable for gml:AbstractSurface. In the context of a shell, the surfaces describe the boundary of the solid. If provided, the aggregationType attribute shall have the value "set". This property element either references a surface via the XLink-attributes or contains the surface element. A surface element is any element, which is substitutable for gml:AbstractSurface. A property with the content model of gml:ShellPropertyType encapsulates a shell to represent a component of a solid boundary. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/gml.xsd0000666000000000000000000000153412606055312020740 0ustar 00000000000000 gml.xsd hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/gmlBase.xsd0000666000000000000000000003040212606055312021527 0ustar 00000000000000 gmlBase.xsd See ISO/DIS 19136 7.2. The gmlBase schema components establish the GML model and syntax, in particular - a root XML type from which XML types for all GML objects should be derived, - a pattern and components for GML properties, - patterns for collections and arrays, and components for generic collections and arrays, - components for associating metadata with GML objects, - components for constructing definitions and dictionaries. This element has no type defined, and is therefore implicitly (according to the rules of W3C XML Schema) an XML Schema anyType. It is used as the head of an XML Schema substitution group which unifies complex content and certain simple content elements used for datatypes in GML, including the gml:AbstractGML substitution group. The abstract element gml:AbstractGML is "any GML object having identity". It acts as the head of an XML Schema substitution group, which may include any element which is a GML feature, or other object, with identity. This is used as a variable in content models in GML core and application schemas. It is effectively an abstract superclass for all GML objects. XLink components are the standard method to support hypertext referencing in XML. An XML Schema attribute group, gml:AssociationAttributeGroup, is provided to support the use of Xlinks as the method for indicating the value of a property by reference in a uniform manner in GML. deprecated Applying this pattern shall restrict the multiplicity of objects in a property element using this content model to exactly one. An instance of this type shall contain an element representing an object, or serve as a pointer to a remote object. Applying the pattern to define an application schema specific property type allows to restrict - the inline object to specified object types, - the encoding to "by-reference only" (see 7.2.3.7), - the encoding to "inline only" (see 7.2.3.8). Encoding a GML property inline vs. by-reference shall not imply anything about the "ownership" of the contained or referenced GML Object, i.e. the encoding style shall not imply any "deep-copy" or "deep-delete" semantics. To express ownership over the contained or referenced GML Object, the gml:OwnershipAttributeGroup attribute group may be added to object-valued property elements. If the attribute group is not part of the content model of such a property element, then the value may not be "owned". When the value of the owns attribute is "true", the existence of inline or referenced object(s) depends upon the existence of the parent object. This element shows how an element declaration may include a Schematron constraint to limit the property to act in either inline or by-reference mode, but not both. gml:abstractReference may be used as the head of a subtitution group of more specific elements providing a value by-reference. gml:ReferenceType is intended to be used in application schemas directly, if a property element shall use a "by-reference only" encoding. gml:abstractInlineProperty may be used as the head of a subtitution group of more specific elements providing a value inline. If the value of an object property is another object and that object contains also a property for the association between the two objects, then this name of the reverse property may be encoded in a gml:reversePropertyName element in an appinfo annotation of the property element to document the constraint between the two properties. The value of the element shall contain the qualified name of the property element. The value of this property is a text description of the object. gml:description uses gml:StringOrRefType as its content model, so it may contain a simple text string content, or carry a reference to an external description. The use of gml:description to reference an external description has been deprecated and replaced by the gml:descriptionReference property. The value of this property is a remote text description of the object. The xlink:href attribute of the gml:descriptionReference property references the external description. The gml:name property provides a label or identifier for the object, commonly a descriptive name. An object may have several names, typically assigned by different authorities. gml:name uses the gml:CodeType content model. The authority for a name is indicated by the value of its (optional) codeSpace attribute. The name may or may not be unique, as determined by the rules of the organization responsible for the codeSpace. In common usage there will be one name per authority, so a processing application may select the name from its preferred codeSpace. Often, a special identifier is assigned to an object by the maintaining authority with the intention that it is used in references to the object For such cases, the codeSpace shall be provided. That identifier is usually unique either globally or within an application domain. gml:identifier is a pre-defined property for such identifiers. The attribute gml:id supports provision of a handle for the XML element representing a GML Object. Its use is mandatory for all GML objects. It is of XML type ID, so is constrained to be unique in the XML document within which it occurs. To create a collection of GML Objects that are not all features, a property type shall be derived by extension from gml:AbstractMemberType. This abstract property type is intended to be used only in object types where software shall be able to identify that an instance of such an object type is to be interpreted as a collection of objects. By default, this abstract property type does not imply any ownership of the objects in the collection. The owns attribute of gml:OwnershipAttributeGroup may be used on a property element instance to assert ownership of an object in the collection. A collection shall not own an object already owned by another object. A GML Object Collection is any GML Object with a property element in its content model whose content model is derived by extension from gml:AbstractMemberType. In addition, the complex type describing the content model of the GML Object Collection may also include a reference to the attribute group gml:AggregationAttributeGroup to provide additional information about the semantics of the object collection. This information may be used by applications to group GML objects, and optionally to order and index them. The allowed values for the aggregationType attribute are defined by gml:AggregationType. See 8.4 of ISO/IEC 11404:1996 for the meaning of the values in the enumeration. To associate metadata described by any XML Schema with a GML object, a property element shall be defined whose content model is derived by extension from gml:AbstractMetadataPropertyType. The value of such a property shall be metadata. The content model of such a property type, i.e. the metadata application schema shall be specified by the GML Application Schema. By default, this abstract property type does not imply any ownership of the metadata. The owns attribute of gml:OwnershipAttributeGroup may be used on a metadata property element instance to assert ownership of the metadata. If metadata following the conceptual model of ISO 19115 is to be encoded in a GML document, the corresponding Implementation Specification specified in ISO/TS 19139 shall be used to encode the metadata information. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/grids.xsd0000666000000000000000000000752112606055312021273 0ustar 00000000000000 grids.xsd See ISO/DIS 19136 20.2. An implicit description of geometry is one in which the items of the geometry do not explicitly appear in the encoding. Instead, a compact notation records a set of parameters, and a set of objects may be generated using a rule with these parameters. This Clause provides grid geometries that are used in the description of gridded coverages and other applications. In GML two grid structures are defined, namely gml:Grid and gml:RectifiedGrid. The gml:Grid implicitly defines an unrectified grid, which is a network composed of two or more sets of curves in which the members of each set intersect the members of the other sets in an algorithmic way. The region of interest within the grid is given in terms of its gml:limits, being the grid coordinates of diagonally opposed corners of a rectangular region. gml:axisLabels is provided with a list of labels of the axes of the grid (gml:axisName has been deprecated). gml:dimension specifies the dimension of the grid. The gml:limits element contains a single gml:GridEnvelope. The gml:low and gml:high property elements of the envelope are each integerLists, which are coordinate tuples, the coordinates being measured as offsets from the origin of the grid along each axis, of the diagonally opposing corners of a "rectangular" region of interest. A rectified grid is a grid for which there is an affine transformation between the grid coordinates and the coordinates of an external coordinate reference system. It is defined by specifying the position (in some geometric space) of the grid "origin" and of the vectors that specify the post locations. Note that the grid limits (post indexes) and axis name properties are inherited from gml:GridType and that gml:RectifiedGrid adds a gml:origin property (contains or references a gml:Point) and a set of gml:offsetVector properties. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/measures.xsd0000666000000000000000000000551712606055312022012 0ustar 00000000000000 measures.xsd See ISO/DIS 19136 17.3. gml:MeasureType is defined in the basicTypes schema. The measure types defined here correspond with a set of convenience measure types described in ISO/TS 19103. The XML implementation is based on the XML Schema simple type "double" which supports both decimal and scientific notation, and includes an XML attribute "uom" which refers to the units of measure for the value. Note that, there is no requirement to store values using any particular format, and applications receiving elements of this type may choose to coerce the data to any other type as convenient. The value of a physical quantity, together with its unit. This is a prototypical definition for a specific measure type defined as a vacuous extension (i.e. aliases) of gml:MeasureType. In this case, the content model supports the description of a length (or distance) quantity, with its units. The unit of measure referenced by uom shall be suitable for a length, such as metres or feet. The gml:angle property element is used to record the value of an angle quantity as a single number, with its units. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/observation.xsd0000666000000000000000000001231012606055312022506 0ustar 00000000000000 observation.xsd See ISO/DIS 19136 Clause 19. A GML observation models the act of observing, often with a camera, a person or some form of instrument. An observation feature describes the "metadata" associated with an information capture event, together with a value for the result of the observation. This covers a broad range of cases, from a tourist photo (not the photo but the act of taking the photo), to images acquired by space borne sensors or the measurement of a temperature 5 meters below the surfaces of a lake. The basic structures introduced in this schema are intended to serve as the foundation for more comprehensive schemas for scientific, technical and engineering measurement schemas. The content model is a straightforward extension of gml:AbstractFeatureType; it automatically has the gml:identifier, gml:description, gml:descriptionReference, gml:name, and gml:boundedBy properties. The gml:validTime element describes the time of the observation. Note that this may be a time instant or a time period. The gml:using property contains or references a description of a sensor, instrument or procedure used for the observation. The gml:target property contains or references the specimen, region or station which is the object of the observation. This property is particularly useful for remote observations, such as photographs, where a generic location property might apply to the location of the camera or the location of the field of view, and thus may be ambiguous. The gml:subject element is provided as a convenient synonym for gml:target. This is the term commonly used in phtotography. The gml:resultOf property indicates the result of the observation. The value may be inline, or a reference to a value elsewhere. A gml:DirectedObservation is the same as an observation except that it adds an additional gml:direction property. This is the direction in which the observation was acquired. Clearly this applies only to certain types of observations such as visual observations by people, or observations obtained from terrestrial cameras. gml:DirectedObservationAtDistance adds an additional distance property. This is the distance from the observer to the subject of the observation. Clearly this applies only to certain types of observations such as visual observations by people, or observations obtained from terrestrial cameras. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/readme.txt0000666000000000000000000000011312606055312021427 0ustar 00000000000000http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19136_Schemas/hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/referenceSystems.xsd0000666000000000000000000001051212606055312023503 0ustar 00000000000000 referenceSystems.xsd See ISO/DIS 19136 13.2. The reference systems schema components have two logical parts, which define elements and types for XML encoding of the definitions of: - Identified Object, inherited by the ten types of GML objects used for coordinate reference systems and coordinate operations - High-level part of the definitions of coordinate reference systems This schema encodes the Identified Object and Reference System packages of the UML Model for ISO 19111. gml:IdentifiedObjectType provides identification properties of a CRS-related object. In gml:DefinitionType, the gml:identifier element shall be the primary name by which this object is identified, encoding the "name" attribute in the UML model. Zero or more of the gml:name elements can be an unordered set of "identifiers", encoding the "identifier" attribute in the UML model. Each of these gml:name elements can reference elsewhere the object's defining information or be an identifier by which this object can be referenced. Zero or more other gml:name elements can be an unordered set of "alias" alternative names by which this CRS related object is identified, encoding the "alias" attributes in the UML model. An object may have several aliases, typically used in different contexts. The context for an alias is indicated by the value of its (optional) codeSpace attribute. Any needed version information shall be included in the codeSpace attribute of a gml:identifier and gml:name elements. In this use, the gml:remarks element in the gml:DefinitionType shall contain comments on or information about this object, including data source information. gml:AbstractCRS specifies a coordinate reference system which is usually single but may be compound. This abstract complex type shall not be used, extended, or restricted, in a GML Application Schema, to define a concrete subtype with a meaning equivalent to a concrete subtype specified in this document. The gml:domainOfValidity property implements an association role to an EX_Extent object as encoded in ISO/TS 19139, either referencing or containing the definition of that extent. The gml:scope property provides a description of the usage, or limitations of usage, for which this CRS-related object is valid. If unknown, enter "not known". gml:CRSPropertyType is a property type for association roles to a CRS abstract coordinate reference system, either referencing or containing the definition of that CRS. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/temporal.xsd0000666000000000000000000003603412606055312022007 0ustar 00000000000000 temporal.xsd See ISO/DIS 19136 15.2. The GML temporal schemas include components for describing temporal geometry and topology, temporal reference systems, and the temporal characteristics of geographic data. The model underlying the representation constitutes a profile of the conceptual schema described in ISO 19108. The underlying spatiotemporal model strives to accommodate both feature-level and attribute-level time stamping; basic support for tracking moving objects is also included. Time is measured on two types of scales: interval and ordinal. An interval scale offers a basis for measuring duration, an ordinal scale provides information only about relative position in time. Two other ISO standards are relevant to describing temporal objects: ISO 8601 describes encodings for time instants and time periods, as text strings with particular structure and punctuation; ISO 11404 provides a detailed description of time intervals as part of a general discussion of language independent datatypes. The temporal schemas cover two interrelated topics and provide basic schema components for representing temporal instants and periods, temporal topology, and reference systems; more specialized schema components defines components used for dynamic features. Instances of temporal geometric types are used as values for the temporal properties of geographic features. gml:AbstractTimeObject acts as the head of a substitution group for all temporal primitives and complexes. gml:AbstractTimePrimitive acts as the head of a substitution group for geometric and topological temporal primitives. gml:TimePrimitivePropertyType provides a standard content model for associations between an arbitrary member of the substitution group whose head is gml:AbstractTimePrimitive and another object. gml:validTime is a convenience property element. gml:RelatedTimeType provides a content model for indicating the relative position of an arbitrary member of the substitution group whose head is gml:AbstractTimePrimitive. It extends the generic gml:TimePrimitivePropertyType with an XML attribute relativePosition, whose value is selected from the set of 13 temporal relationships identified by Allen (1983) gml:AbstractTimeComplex is an aggregation of temporal primitives and acts as the head of a substitution group for temporal complexes. gml:TimeGeometricPrimitive acts as the head of a substitution group for geometric temporal primitives. A temporal geometry shall be associated with a temporal reference system through the frame attribute that provides a URI reference that identifies a description of the reference system. Following ISO 19108, the Gregorian calendar with UTC is the default reference system, but others may also be used. The GPS calendar is an alternative reference systems in common use. The two geometric primitives in the temporal dimension are the instant and the period. GML components are defined to support these as follows. gml:TimeInstant acts as a zero-dimensional geometric primitive that represents an identifiable position in time. gml:TimeInstantPropertyType provides for associating a gml:TimeInstant with an object. gml:TimePeriod acts as a one-dimensional geometric primitive that represents an identifiable extent in time. The location in of a gml:TimePeriod is described by the temporal positions of the instants at which it begins and ends. The length of the period is equal to the temporal distance between the two bounding temporal positions. Both beginning and end may be described in terms of their direct position using gml:TimePositionType which is an XML Schema simple content type, or by reference to an indentifiable time instant using gml:TimeInstantPropertyType. Alternatively a limit of a gml:TimePeriod may use the conventional GML property model to make a reference to a time instant described elsewhere, or a limit may be indicated as a direct position. gml:TimePeriodPropertyType provides for associating a gml:TimePeriod with an object. The method for identifying a temporal position is specific to each temporal reference system. gml:TimePositionType supports the description of temporal position according to the subtypes described in ISO 19108. Values based on calendars and clocks use lexical formats that are based on ISO 8601, as described in XML Schema Part 2:2001. A decimal value may be used with coordinate systems such as GPS time or UNIX time. A URI may be used to provide a reference to some era in an ordinal reference system . In common with many of the components modelled as data types in the ISO 19100 series of International Standards, the corresponding GML component has simple content. However, the content model gml:TimePositionType is defined in several steps. Three XML attributes appear on gml:TimePositionType: A time value shall be associated with a temporal reference system through the frame attribute that provides a URI reference that identifies a description of the reference system. Following ISO 19108, the Gregorian calendar with UTC is the default reference system, but others may also be used. Components for describing temporal reference systems are described in 14.4, but it is not required that the reference system be described in this, as the reference may refer to anything that may be indentified with a URI. For time values using a calendar containing more than one era, the (optional) calendarEraName attribute provides the name of the calendar era. Inexact temporal positions may be expressed using the optional indeterminatePosition attribute. This takes a value from an enumeration. These values are interpreted as follows: - "unknown" indicates that no specific value for temporal position is provided. - "now" indicates that the specified value shall be replaced with the current temporal position whenever the value is accessed. - "before" indicates that the actual temporal position is unknown, but it is known to be before the specified value. - "after" indicates that the actual temporal position is unknown, but it is known to be after the specified value. A value for indeterminatePosition may - be used either alone, or - qualify a specific value for temporal position. The simple type gml:TimePositionUnion is a union of XML Schema simple types which instantiate the subtypes for temporal position described in ISO 19108. An ordinal era may be referenced via URI. A decimal value may be used to indicate the distance from the scale origin . time is used for a position that recurs daily (see ISO 19108:2002 5.4.4.2). Finally, calendar and clock forms that support the representation of time in systems based on years, months, days, hours, minutes and seconds, in a notation following ISO 8601, are assembled by gml:CalDate This element is used directly as a property of gml:TimeInstant (see 15.2.2.3), and may also be used in application schemas. The length of a time period. gml:duration conforms to the ISO 8601 syntax for temporal length as implemented by the XML Schema duration type. gml:timeInterval conforms to ISO 11404 which is based on floating point values for temporal length. ISO 11404 syntax specifies the use of a positiveInteger together with appropriate values for radix and factor. The resolution of the time interval is to one radix ^(-factor) of the specified time unit. The value of the unit is either selected from the units for time intervals from ISO 31-1:1992, or is another suitable unit. The encoding is defined for GML in gml:TimeUnitType. The second component of this union type provides a method for indicating time units other than the six standard units given in the enumeration. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/temporalReferenceSystems.xsd0000666000000000000000000003026412606055312025215 0ustar 00000000000000 temporalReferenceSystems.xsd See ISO/DIS 19136 15.5. A value in the time domain is measured relative to a temporal reference system. Common types of reference systems include calendars, ordinal temporal reference systems, and temporal coordinate systems (time elapsed since some epoch). The primary temporal reference system for use with geographic information is the Gregorian Calendar and 24 hour local or Coordinated Universal Time (UTC), but special applications may entail the use of alternative reference systems. The Julian day numbering system is a temporal coordinate system that has an origin earlier than any known calendar, at noon on 1 January 4713 BC in the Julian proleptic calendar, and is useful in transformations between dates in different calendars. In GML seven concrete elements are used to describe temporal reference systems: gml:TimeReferenceSystem, gml:TimeCoordinateSystem, gml:TimeCalendar, gml:TimeCalendarEra, gml:TimeClock, gml:TimeOrdinalReferenceSystem, and gml:TimeOrdinalEra. A reference system is characterized in terms of its domain of validity: the spatial and temporal extent over which it is applicable. The basic GML element for temporal reference systems is gml:TimeReferenceSystem. Its content model extends gml:DefinitionType with one additional property, gml:domainOfValidity. A temporal coordinate system shall be based on a continuous interval scale defined in terms of a single time interval. The differences to ISO 19108 TM_CoordinateSystem are: - the origin is specified either using the property gml:originPosition whose value is a direct time position, or using the property gml:origin whose model is gml:TimeInstantPropertyType; this permits more flexibility in representation and also supports referring to a value fixed elsewhere; - the interval uses gml:TimeIntervalLengthType. A calendar is a discrete temporal reference system that provides a basis for defining temporal position to a resolution of one day. gml:TimeCalendar adds one property to those inherited from gml:TimeReferenceSystem. A gml:referenceFrame provides a link to a gml:TimeCalendarEra that it uses. A gml:TimeCalendar may reference more than one calendar era. The referenceFrame element follows the standard GML property model, allowing the association to be instantiated either using an inline description using the gml:TimeCalendarEra element, or a link to a gml:TimeCalendarEra which is explicit elsewhere. gml:TimeCalendarEra inherits basic properties from gml:DefinitionType and has the following additional properties: - gml:referenceEvent is the name or description of a mythical or historic event which fixes the position of the base scale of the calendar era. This is given as text or using a link to description held elsewhere. - gml:referenceDate specifies the date of the referenceEvent expressed as a date in the given calendar. In most calendars, this date is the origin (i.e., the first day) of the scale, but this is not always true. - gml:julianReference specifies the Julian date that corresponds to the reference date. The Julian day number is an integer value; the Julian date is a decimal value that allows greater resolution. Transforming calendar dates to and from Julian dates provides a relatively simple basis for transforming dates from one calendar to another. - gml:epochOfUse is the period for which the calendar era was used as a basis for dating. gml:TimeCalendarPropertyType provides for associating a gml:TimeCalendar with an object. gml:TimeCalendarEraPropertyType provides for associating a gml:TimeCalendarEra with an object. A clock provides a basis for defining temporal position within a day. A clock shall be used with a calendar in order to provide a complete description of a temporal position within a specific day. gml:TimeClock adds the following properties to those inherited from gml:TimeReferenceSystemType: - gml:referenceEvent is the name or description of an event, such as solar noon or sunrise, which fixes the position of the base scale of the clock. - gml:referenceTime specifies the time of day associated with the reference event expressed as a time of day in the given clock. The reference time is usually the origin of the clock scale. - gml:utcReference specifies the 24 hour local or UTC time that corresponds to the reference time. - gml:dateBasis contains or references the calendars that use this clock. gml:TimeClockPropertyType provides for associating a gml:TimeClock with an object. In some applications of geographic information — such as geology and archaeology — relative position in time is known more precisely than absolute time or duration. The order of events in time can be well established, but the magnitude of the intervals between them cannot be accurately determined; in such cases, the use of an ordinal temporal reference system is appropriate. An ordinal temporal reference system is composed of a sequence of named coterminous eras, which may in turn be composed of sequences of member eras at a finer scale, giving the whole a hierarchical structure of eras of verying resolution. An ordinal temporal reference system whose component eras are not further subdivided is effectively a temporal topological complex constrained to be a linear graph. An ordinal temporal reference system some or all of whose component eras are subdivided is effectively a temporal topological complex with the constraint that parallel branches may only be constructed in pairs where one is a single temporal ordinal era and the other is a sequence of temporal ordinal eras that are called "members" of the "group". This constraint means that within a single temporal ordinal reference system, the relative position of all temporal ordinal eras is unambiguous. The positions of the beginning and end of a given era may calibrate the relative time scale. gml:TimeOrdinalReferenceSystem adds one or more gml:component properties to the generic temporal reference system model. Its content model follows the pattern of gml:TimeEdge, inheriting standard properties from gml:DefinitionType, and adding gml:start, gml:end and gml:extent properties, a set of gml:member properties which indicate ordered gml:TimeOrdinalEra elements, and a gml:group property which points to the parent era. The recursive inclusion of gml:TimeOrdinalEra elements allow the construction of an arbitrary depth hierarchical ordinal reference schema, such that an ordinal era at a given level of the hierarchy includes a sequence of shorter, coterminous ordinal eras. gml:TimeOrdinalEraPropertyType provides for associating a gml:TimeOrdinalEra with an object. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/temporalTopology.xsd0000666000000000000000000001664012606055312023545 0ustar 00000000000000 temporalTopology.xsd See ISO/DIS 19136 15.3. Temporal topology is described in terms of time complexes, nodes, and edges, and the connectivity between these. Temporal topology does not directly provide information about temporal position. It is used in the case of describing a lineage or a history (e.g. a family tree expressing evolution of species, an ecological cycle, a lineage of lands or buildings, or a history of separation and merger of administrative boundaries). The following Subclauses specifies the temporal topology as temporal characteristics of features in compliance with ISO 19108. gml:TimeTopologyPrimitive acts as the head of a substitution group for topological temporal primitives. Temporal topology primitives shall imply the ordering information between features or feature properties. The temporal connection of features can be examined if they have temporal topology primitives as values of their properties. Usually, an instantaneous feature associates with a time node, and a static feature associates with a time edge. A feature with both modes associates with the temporal topology primitive: a supertype of time nodes and time edges. A topological primitive is always connected to one or more other topological primitives, and is, therefore, always a member of a topological complex. In a GML instance, this will often be indicated by the primitives being described by elements that are descendents of an element describing a complex. However, in order to support the case where a temporal topological primitive is described in another context, the optional complex property is provided, which carries a reference to the parent temporal topological complex. gml:TimeTopologyPrimitivePropertyType provides for associating a gml:AbstractTimeTopologyPrimitive with an object. A temporal topology complex shall be the connected acyclic directed graph composed of temporal topological primitives, i.e. time nodes and time edges. Because a time edge may not exist without two time nodes on its boundaries, static features have time edges from a temporal topology complex as the values of their temporal properties, regardless of explicit declarations. A temporal topology complex expresses a linear or a non-linear graph. A temporal linear graph, composed of a sequence of time edges, provides a lineage described only by "substitution" of feature instances or feature element values. A time node as the start or the end of the graph connects with at least one time edge. A time node other than the start and the end shall connect to at least two time edges: one of starting from the node, and another ending at the node. A temporal topological complex is a set of connected temporal topological primitives. The member primtives are indicated, either by reference or by value, using the primitive property. gml:TimeTopologyComplexPropertyType provides for associating a gml:TimeTopologyComplex with an object. A time node is a zero-dimensional topological primitive that represents an identifiable node in time (it is equivalent to a point in space). A node may act as the termination or initiation of any number of time edges. A time node may be realised as a geometry, its position, whose value is a time instant. gml:TimeNodePropertyType provides for associating a gml:TimeNode with an object A time edge is a one-dimensional topological primitive. It is an open interval that starts and ends at a node. The edge may be realised as a geometry whose value is a time period. gml:TimeEdgePropertyType provides for associating a gml:TimeEdge with an object. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/topology.xsd0000666000000000000000000005406112606055312022040 0ustar 00000000000000 topology.xsd See ISO/DIS 19136 Clause 14. Topology is the branch of mathematics describing the properties of objects which are invariant under continuous deformation. For example, a circle is topologically equivalent to an ellipse because one can be transformed into the other by stretching. In geographic modelling, the foremost use of topology is in accelerating computational geometry. The constructs of topology allow characterisation of the spatial relationships between objects using simple combinatorial or algebraic algorithms. Topology, realised by the appropriate geometry, also allows a compact and unambiguous mechanism for expressing shared geometry among geographic features. There are four instantiable classes of primitive topology objects, one for each dimension up to 3D. In addition, topological complexes are supported, too. There is strong symmetry in the (topological boundary and coboundary) relationships between topology primitives of adjacent dimensions. Topology primitives are bounded by directed primitives of one lower dimension. The coboundary of each topology primitive is formed from directed topology primitives of one higher dimension. This abstract type supplies the root or base type for all topological elements including primitives and complexes. It inherits AbstractGMLType and hence can be identified using the gml:id attribute. gml:AbstractTopoPrimitive acts as the base type for all topological primitives. Topology primitives are the atomic (smallest possible) units of a topology complex. Each topology primitive may contain references to other topology primitives of codimension 2 or more (gml:isolated). Conversely, nodes may have faces as containers and nodes and edges may have solids as containers (gml:container). In the case of planar topology, a gml:Node must have a clockwise sequence of gml:directedEdge properties, to ensure a lossless topology representation as defined by Kuijpers, et. al. (see OGC 05-102 Topology IPR). gml:Node represents the 0-dimensional primitive. The optional coboundary of a node (gml:directedEdge) is a sequence of directed edges which are incident on this node. Edges emanating from this node appear in the node coboundary with a negative orientation. If provided, the aggregationType attribute shall have the value "sequence". A node may optionally be realised by a 0-dimensional geometric primitive (gml:pointProperty). A gml:directedNode property element describes the boundary of topology edges and is used in the support of topological point features via the gml:TopoPoint expression, see below. The orientation attribute of type gml:SignType expresses the sense in which the included node is used: start ("-") or end ("+") node. gml:Edge represents the 1-dimensional primitive. The topological boundary of an Edge (gml:directedNode) consists of a negatively directed start Node and a positively directed end Node. The optional coboundary of an edge (gml:directedFace) is a circular sequence of directed faces which are incident on this edge in document order. In the 2D case, the orientation of the face on the left of the edge is "+"; the orientation of the face on the right on its right is "-". If provided, the aggregationType attribute shall have the value "sequence". An edge may optionally be realised by a 1-dimensional geometric primitive (gml:curveProperty). A gml:directedEdge property element describes the boundary of topology faces, the coBoundary of topology nodes and is used in the support of topological line features via the gml:TopoCurve expression, see below. The orientation attribute of type gml:SignType expresses the sense in which the included edge is used, i.e. forward or reverse. If the topological representation exists an unbounded manifold (e.g. Euclidean plane), a gml:Face must indicate whether it is a universal face or not, to ensure a lossless topology representation as defined by Kuijpers, et. al. (see OGC 05-102 Topology IPR). The optional universal attribute of type boolean is used to indicate this. NOTE The universal face is normally not part of any feature, and is used to represent the unbounded portion of the data set. Its interior boundary (it has no exterior boundary) would normally be considered the exterior boundary of the map represented by the data set. gml:Face represents the 2-dimensional topology primitive. The topological boundary of a face (gml:directedEdge) consists of a sequence of directed edges. If provided, the aggregationType attribute shall have the value "sequence". The optional coboundary of a face (gml:directedTopoSolid) is a pair of directed solids which are bounded by this face. A positively directed solid corresponds to a solid which lies in the direction of the negatively directed normal to the face in any geometric realisation. A face may optionally be realised by a 2-dimensional geometric primitive (gml:surfaceProperty). The gml:directedFace property element describes the boundary of topology solids, in the coBoundary of topology edges and is used in the support of surface features via the gml:TopoSurface expression, see below. The orientation attribute of type gml:SignType expresses the sense in which the included face is used i.e. inward or outward with respect to the surface normal in any geometric realisation. A gml:TopoSolid must indicate whether it is a universal topo-solid or not, to ensure a lossless topology representation as defined by Kuijpers, et. al. (see OGC 05-102 Topology IPR). The optional universal attribute of type boolean is used to indicate this and the default is fault. NOTE The universal topo-solid is normally not part of any feature, and is used to represent the unbounded portion of the data set. Its interior boundary (it has no exterior boundary) would normally be considered the exterior boundary of the data set. gml:TopoSolid represents the 3-dimensional topology primitive. The topological boundary of a solid (gml:directedFace) consists of a set of directed faces. A solid may optionally be realised by a 3-dimensional geometric primitive (gml:solidProperty). The gml:directedSolid property element describes the coBoundary of topology faces and is used in the support of volume features via the gml:TopoVolume expression, see below. The orientation attribute of type gml:SignType expresses the sense in which the included solid appears in the face coboundary. In the context of a gml:TopoVolume the orientation attribute has no meaning. The intended use of gml:TopoPoint is to appear within a point feature to express the structural and possibly geometric relationships of this feature to other features via shared node definitions. The gml:topoPointProperty property element may be used in features to express their relationship to the referenced topology node. gml:TopoCurve represents a homogeneous topological expression, a sequence of directed edges, which if realised are isomorphic to a geometric curve primitive. The intended use of gml:TopoCurve is to appear within a line feature to express the structural and geometric relationships of this feature to other features via the shared edge definitions. If provided, the aggregationType attribute shall have the value "sequence". The gml:topoCurveProperty property element may be used in features to express their relationship to the referenced topology edges. gml:TopoSurface represents a homogeneous topological expression, a set of directed faces, which if realised are isomorphic to a geometric surface primitive. The intended use of gml:TopoSurface is to appear within a surface feature to express the structural and possibly geometric relationships of this surface feature to other features via the shared face definitions. The gml:topoSurfaceProperty property element may be used in features to express their relationship to the referenced topology faces. gml:TopoVolume represents a homogeneous topological expression, a set of directed topologic solids, which if realised are isomorphic to a geometric solid primitive. The intended use of gml:TopoVolume is to appear within a solid feature to express the structural and geometric relationships of this solid feature to other features via the shared solid definitions. The gml:topoVolumeProperty element may be used in features to express their relationship to the referenced topology volume. gml:TopoComplex is a collection of topological primitives. Each complex holds a reference to its maximal complex (gml:maximalComplex) and optionally to sub- or super-complexes (gml:subComplex, gml:superComplex). A topology complex contains its primitive and sub-complex members. The property elements gml:subComplex, gml:superComplex and gml:maximalComplex provide an encoding for relationships between topology complexes as described for gml:TopoComplex above. The property elements gml:subComplex, gml:superComplex and gml:maximalComplex provide an encoding for relationships between topology complexes as described for gml:TopoComplex above. The property elements gml:subComplex, gml:superComplex and gml:maximalComplex provide an encoding for relationships between topology complexes as described for gml:TopoComplex above. The gml:topoPrimitiveMember property element encodes for the relationship between a topology complex and a single topology primitive. The gml:topoPrimitiveMembers property element encodes the relationship between a topology complex and an arbitrary number of topology primitives. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/units.xsd0000666000000000000000000002745212606055312021332 0ustar 00000000000000 units.xsd See ISO/DIS 17.2. Several GML Schema components concern or require a reference scale or units of measure. Units are required for quantities that may occur as values of properties of feature types, as the results of observations, in the range parameters of a coverage, and for measures used in Coordinate Reference System definitions. The basic unit definition is an extension of the general gml:Definition element defined in 16.2.1. Three specialized elements for unit definition are further derived from this. This model is based on the SI system of units [ISO 1000], which distinguishes between Base Units and Derived Units. - Base Units are the preferred units for a set of orthogonal fundamental quantities which define the particular system of units, which may not be derived by combination of other base units. - Derived Units are the preferred units for other quantities in the system, which may be defined by algebraic combination of the base units. In some application areas Conventional units are used, which may be converted to the preferred units using a scaling factor or a formula which defines a re-scaling and offset. The set of preferred units for all physical quantity types in a particular system of units is composed of the union of its base units and derived units. Unit definitions are substitutable for the gml:Definition element declared as part of the dictionary model. A dictionary that contains only unit definitions and references to unit definitions is a units dictionary. The element gml:unitOfMeasure is a property element to refer to a unit of measure. This is an empty element which carries a reference to a unit of measure definition. A gml:UnitDefinition is a general definition of a unit of measure. This generic element is used only for units for which no relationship with other units or units systems is known. The content model of gml:UnitDefinition adds three additional properties to gml:Definition, gml:quantityType, gml:quantityTypeReference and gml:catalogSymbol. The gml:catalogSymbol property optionally gives the short symbol used for this unit. This element is usually used when the relationship of this unit to other units or units systems is unknown. The gml:quantityType property indicates the phenomenon to which the units apply. This element contains an informal description of the phenomenon or type of physical quantity that is measured or observed. When the physical quantity is the result of an observation or measurement, this term is known as observable type or measurand. The use of gml:quantityType for references to remote values is deprecated. The gml:quantityTypeReference property indicates the phenomenon to which the units apply. The content is a reference to a remote value. The catalogSymbol is the preferred lexical symbol used for this unit of measure. The codeSpace attribute in gml:CodeType identifies a namespace for the catalog symbol value, and might reference the external catalog. The string value in gml:CodeType contains the value of a symbol that should be unique within this catalog namespace. This symbol often appears explicitly in the catalog, but it could be a combination of symbols using a specified algebra of units. A base unit is a unit of measure that cannot be derived by combination of other base units within a particular system of units. For example, in the SI system of units, the base units are metre, kilogram, second, Ampere, Kelvin, mole, and candela, for the physical quantity types length, mass, time interval, electric current, thermodynamic temperature, amount of substance and luminous intensity, respectively. gml:BaseUnit extends generic gml:UnitDefinition with the property gml:unitsSystem, which carries a reference to the units system to which this base unit is asserted to belong. Derived units are defined by combination of other units. Derived units are used for quantities other than those corresponding to the base units, such as hertz (s-1) for frequency, Newton (kg.m/s2) for force. Derived units based directly on base units are usually preferred for quantities other than the fundamental quantities within a system. If a derived unit is not the preferred unit, the gml:ConventionalUnit element should be used instead. The gml:DerivedUnit extends gml:UnitDefinition with the property gml:derivationUnitTerms. A set of gml:derivationUnitTerm elements describes a derived unit of measure. Each element carries an integer exponent. The terms are combined by raising each referenced unit to the power of its exponent and forming the product. This unit term references another unit of measure (uom) and provides an integer exponent applied to that unit in defining the compound unit. The exponent may be positive or negative, but not zero. Conventional units that are neither base units nor defined by direct combination of base units are used in many application domains. For example electronVolt for energy, feet and nautical miles for length. In most cases there is a known, usually linear, conversion to a preferred unit which is either a base unit or derived by direct combination of base units. The gml:ConventionalUnit extends gml:UnitDefinition with a property that describes a conversion to a preferred unit for this physical quantity. When the conversion is exact, the element gml:conversionToPreferredUnit should be used, or when the conversion is not exact the element gml:roughConversionToPreferredUnit is available. Both of these elements have the same content model. The gml:derivationUnitTerm property defined above is included to allow a user to optionally record how this unit may be derived from other ("more primitive") units. The elements gml:conversionToPreferredUnit and gml:roughConversionToPreferredUnit represent parameters used to convert conventional units to preferred units for this physical quantity type. A preferred unit is either a Base Unit or a Derived Unit that is selected for all values of one physical quantity type. The elements gml:conversionToPreferredUnit and gml:roughConversionToPreferredUnit represent parameters used to convert conventional units to preferred units for this physical quantity type. A preferred unit is either a Base Unit or a Derived Unit that is selected for all values of one physical quantity type. The inherited attribute uom references the preferred unit that this conversion applies to. The conversion of a unit to the preferred unit for this physical quantity type is specified by an arithmetic conversion (scaling and/or offset). The content model extends gml:UnitOfMeasureType, which has a mandatory attribute uom which identifies the preferred unit for the physical quantity type that this conversion applies to. The conversion is specified by a choice of - gml:factor, which defines the scale factor, or - gml:formula, which defines a formula by which a value using the conventional unit of measure can be converted to obtain the corresponding value using the preferred unit of measure. The formula defines the parameters of a simple formula by which a value using the conventional unit of measure can be converted to the corresponding value using the preferred unit of measure. The formula element contains elements a, b, c and d, whose values use the XML Schema type double. These values are used in the formula y = (a + bx) / (c + dx), where x is a value using this unit, and y is the corresponding value using the base unit. The elements a and d are optional, and if values are not provided, those parameters are considered to be zero. If values are not provided for both a and d, the formula is equivalent to a fraction with numerator and denominator parameters. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gml/valueObjects.xsd0000666000000000000000000002573512606055312022620 0ustar 00000000000000 valueObjects.xsd See ISO/DIS 19136 17.5. The elements declared in this Clause build on other GML schema components, in particular gml:AbstractTimeObject, gml:AbstractGeometry, and the following types: gml:MeasureType, gml:MeasureListType, gml:CodeType, gml:CodeOrNilReasonListType, gml:BooleanOrNilReasonListType, gml:IntegerOrNilReasonList. Of particular interest are elements that are the heads of substitution groups, and one named choice group. These are the primary reasons for the value objects schema, since they may act as variables in the definition of content models, such as Observations, when it is desired to permit alternative value types to occur some of which may have complex content such as arrays, geometry and time objects, and where it is useful not to prescribe the actual value type in advance. The members of the groups include quantities, category classifications, boolean, count, temporal and spatial values, and aggregates of these. The value objects are defined in a hierarchy. The following relationships are defined: - Concrete elements gml:Quantity, gml:Category, gml:Count and gml:Boolean are substitutable for the abstract element gml:AbstractScalarValue. - Concrete elements gml:QuantityList, gml:CategoryList, gml:CountList and gml:BooleanList are substitutable for the abstract element gml:AbstractScalarValueList. - Concrete element gml:ValueArray is substitutable for the concrete element gml:CompositeValue. - Abstract elements gml:AbstractScalarValue and gml:AbstractScalarValueList, and concrete elements gml:CompositeValue, gml:ValueExtent, gml:CategoryExtent, gml:CountExtent and gml:QuantityExtent are substitutable for abstract element gml:AbstractValue. - Abstract elements gml:AbstractValue, gml:AbstractTimeObject and gml:AbstractGeometry are all in a choice group named gml:Value, which is used for compositing in gml:CompositeValue and gml:ValueExtent. - Schemas which need values may use the abstract element gml:AbstractValue in a content model in order to permit any of the gml:AbstractScalarValues, gml:AbstractScalarValueLists, gml:CompositeValue or gml:ValueExtent to occur in an instance, or the named group gml:Value to also permit gml:AbstractTimeObjects, gml:AbstractGeometrys. A gml:Category has an optional XML attribute codeSpace, whose value is a URI which identifies a dictionary, codelist or authority for the term. An XML attribute uom ("unit of measure") is required, whose value is a URI which identifies the definition of a ratio scale or units by which the numeric value shall be multiplied, or an interval or position scale on which the value occurs. gml:AbstractValue is an abstract element which acts as the head of a substitution group which contains gml:AbstractScalarValue, gml:AbstractScalarValueList, gml:CompositeValue and gml:ValueExtent, and (transitively) the elements in their substitution groups. These elements may be used in an application schema as variables, so that in an XML instance document any member of its substitution group may occur. gml:AbstractScalarValue is an abstract element which acts as the head of a substitution group which contains gml:Boolean, gml:Category, gml:Count and gml:Quantity, and (transitively) the elements in their substitution groups. gml:AbstractScalarValueList is an abstract element which acts as the head of a substitution group which contains gml:BooleanList, gml:CategoryList, gml:CountList and gml:QuantityList, and (transitively) the elements in their substitution groups. This is a convenience choice group which unifies generic values defined in this Clause with spatial and temporal objects and the measures described above, so that any of these may be used within aggregate values. Property that refers to, or contains, a Value. Convenience element for general use. Property that refers to, or contains, a Value. Property that contains Values. gml:CompositeValue is an aggregate value built from other values . It contains zero or an arbitrary number of gml:valueComponent elements, and zero or one gml:valueComponents property elements. It may be used for strongly coupled aggregates (vectors, tensors) or for arbitrary collections of values. A Value Array is used for homogeneous arrays of primitive and aggregate values. The member values may be scalars, composites, arrays or lists. ValueArray has the same content model as CompositeValue, but the member values shall be homogeneous. The element declaration contains a Schematron constraint which expresses this restriction precisely. Since the members are homogeneous, the gml:referenceSystem (uom, codeSpace) may be specified on the gml:ValueArray itself and inherited by all the members if desired. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gsr/0000777000000000000000000000000012723323303017450 5ustar 00000000000000hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gsr/gsr.xsd0000666000000000000000000000167112606055312020772 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 01-26-2005 12:24:48 ====== hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gsr/readme.txt0000666000000000000000000000011612606055312021446 0ustar 00000000000000http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/gsrhydroffice.bag-0.2.15/hydroffice/bag/iso19139/gsr/spatialReferencing.xsd0000666000000000000000000000322212606055312023776 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 01-26-2005 12:24:48 ====== hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gss/0000777000000000000000000000000012723323303017451 5ustar 00000000000000hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gss/geometry.xsd0000666000000000000000000001305312606055312022030 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 01-26-2005 12:14:37 ====== The geometry packages (Figure 4) contain the various classes for coordinate geometry. All of these classes through the root class GM_Object inherit an optional association to a coordinate reference system. All direct positions exposed through the interfaces defined in this standard shall be in the coordinate reference system of the geometric object accessed. All elements of a geometric complex, composite, or aggregate shall be associated to the same coordinate reference system. When instances of GM_Object are aggregated in another GM_Object (such as a GM_Aggregate, or GM_Complex) which already has a coordinate reference system specified, then these elements are assumed to be in that same coordinate reference system unless otherwise specified. - The geometry package has several internal packages that separate primitive geometric objects, aggregates and complexes, which have a more elaborate internal structure than simple aggregates. Figure 4 shows the dependencies between the geometry packages as well as a list of classes for each package - Figure 5 shows the basic classes defined in the geometry packages. Any object that inherits the semantics of the GM_Object acts as a set of direct positions. Its behavior will be determined by which direct positions it contains. Objects under GM_Primitive will be open, that is, they will not contain their boundary points; curves will not contain their end points, surfaces will not contain their boundary curves, and solids will not contain their bounding surfaces. Objects under GM_Complex will be closed, that is, they will contain their boundary points. This leads to some apparent ambiguity. A representation of a line as a primitive must reference its end points, but will not contain these points as a set of direct positions. A representation of a line as a complex will also reference its end points, and will contain these points as a set of direct positions. This means that identical digital representations will have slightly different semantics depending on whether they are accessed as primitives or complexes. - This difference of semantics is most striking in the GM_CompositeCurve. Composite curves are used to represent features whose geometry could also be represented as curve primitives. From a cartographic point of view, these two representations are not different. From a topological point of view, they are different. This distinction appears in the inheritance diagram (Figure 5) as an inheritance relationship between GM_CompositeCurve and GM_OrientableCurve. The primary semantics of a GM_CompositeCurve (see 6.6.5) is as a closed GM_Object, but it may also act as an open GM_Object under GM_Primitive operations (see 6.3.10). Interface protocols depending upon the topological details of this object will have to be distinguished as to whether they have been inherited from GM_Primitive or GM_Complex, where the distinction first occurs. Even though these protocols have been inherited from the same operations defined at GM_Object, they will act differently depending upon the branch of the inheritance tree from which they have inherited semantics. Creators of implementation profiles may take this into account and use a proxy mechanism for realization relationships that cause semantic dissonance. Such a procedure will be necessary in object-oriented programming and databases in systems that disallow multiple inheritance or make limiting assumptions about method binding. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gss/gss.xsd0000666000000000000000000000235312606055312020772 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 01-26-2005 12:14:37 ====== This package contains the normative (Geometry and Topology) parts of the model for ISO 19107. This document should be referred to as the official description of the Model. If there are any differences, then ISO 19107 takes precedence. - - This packages also contains example (informative) of applications of 19107. hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gss/readme.txt0000666000000000000000000000011612606055312021447 0ustar 00000000000000http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/gsshydroffice.bag-0.2.15/hydroffice/bag/iso19139/gts/0000777000000000000000000000000012723323303017452 5ustar 00000000000000hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gts/gts.xsd0000666000000000000000000000166612606055312021002 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 01-26-2005 12:18:09 ====== hydroffice.bag-0.2.15/hydroffice/bag/iso19139/gts/readme.txt0000666000000000000000000000011612606055312021450 0ustar 00000000000000http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_19139_Schemas/gtshydroffice.bag-0.2.15/hydroffice/bag/iso19139/gts/temporalObjects.xsd0000666000000000000000000000426012606055312023333 0ustar 00000000000000 This file was generated from ISO TC/211 UML class diagrams == 01-26-2005 12:18:09 ====== hydroffice.bag-0.2.15/hydroffice/bag/iso19139/xlink/0000777000000000000000000000000012723323303020002 5ustar 00000000000000hydroffice.bag-0.2.15/hydroffice/bag/iso19139/xlink/xlinks.xsd0000666000000000000000000001206512606055312022040 0ustar 00000000000000 xlinks.xsd see GML 7.2 The 'show' attribute is used to communicate the desired presentation of the ending resource on traversal from the starting resource; it's value should be treated as follows: new - load ending resource in a new window, frame, pane, or other presentation context replace - load the resource in the same window, frame, pane, or other presentation context embed - load ending resource in place of the presentation of the starting resource other - behavior is unconstrained; examine other markup in the link for hints none - behavior is unconstrained The 'actuate' attribute is used to communicate the desired timing of traversal from the starting resource to the ending resource; it's value should be treated as follows: onLoad - traverse to the ending resource immediately on loading the starting resource onRequest - traverse from the starting resource to the ending resource only on a post-loading event triggered for this purpose other - behavior is unconstrained; examine other markup in link for hints none - behavior is unconstrained hydroffice.bag-0.2.15/hydroffice/bag/iso19757-3/0000777000000000000000000000000012723323303017023 5ustar 00000000000000hydroffice.bag-0.2.15/hydroffice/bag/iso19757-3/bag_metadata_profile.sch0000666000000000000000000002033312606055312023636 0ustar 00000000000000 Generic checks The document root must be an gmi:MI_Metadata or an gmd:MD_Metadata element. The gmi:MI_Metadata element must have a gmd:metadataConstraints/gmd:MD_LegalConstraints [$5.3.1.1]. The gmi:MI_Metadata element must have a gmd:metadataConstraints/gmd:MD_SecurityConstraints [$5.3.1.1]. The gmi:MI_Metadata element must have a gmd:referenceSystemInfo for horizontal datum and gmd:referenceSystemInfo for vertical datum [$5.3.1.1]. The BAG XML Metadata Library requires this node [$5.3.1.7]. The gmd:languageCode value must be 'en' (iso639-1) or 'eng' (iso639-2) [$5.3.1.1]. The BAG XML Metadata Library requires this node [$5.3.1.9]. The BAG XML Metadata Library requires this node [$5.3.1.10]. The gmd:metadataStandardName/gco:CharacterString value must be 'ISO 19139' or '19115' [$5.3.1.1]. The BAG XML Metadata Library requires this node [$5.3.1.11]. The gmd:identificationInfo/bag:BAG_DataIdentification must exist [$5.3.1.2]. The gmd:languageCode value must be 'en' (iso639-1) or 'eng' (iso639-2) [$5.3.1.1]. The gmd:spatialRepresentationType/gmd:MD_SpatialRepresentationTypeCode should be set to 'grid' [$5.3.1.2]. The gmd:topicCategory/gmd:MD_TopicCategoryCode should be set to 'elevation' [$5.3.1.2]. The bag:verticalUncertaintyType must exist [$5.3.1.2]. The gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:scope/gmd:DQ_Scope/gmd:level/gmd:MD_ScopeCode is always set to 'dataset' [$5.3.1.4]. The gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:lineage/gmd:LI_Lineage must have at least 1 source and/or at least 1 processStep [$5.3.1.4]. The gmd:MD_Georectified/gmd:numberOfDimensions must specify at least two dimensions [$5.3.1.5]. The number of gmd:axisDimensionProperties must correspond to gmd:MD_Georectified/gmd:numberOfDimensions [$5.3.1.5], but !=. hydroffice.bag-0.2.15/hydroffice/bag/media/0000777000000000000000000000000012723323303016533 5ustar 00000000000000hydroffice.bag-0.2.15/hydroffice/bag/media/BAG.icns0000666000000000000000000023367312612307350020021 0ustar 00000000000000icns7is32Ŋ  `0  N D( 2##)g - 7LHh[\v$B@ ( tmՊ؅ׅ؅׽Ѕ ָȒұۊwzmgmjwkոji qgjgqjtqʄs8mkܿ4ƨvVudBٽذP%8J<qI@̛lCXy q wEil32,śŗ     ``00 ``00  NN NN DD(( DD(( 22 22# ))gg# ))gg-- -- ␐77LLHH␐77LLHHhh[[\\hh[[\\vvvv $$BB@@ $$BB@@ ((  (( ttmmttmm՛՗ ؍؍ ׍ ׍ ؍ ؍ ׽Ћ ׽Ѝ ָ ָȒұȒұ ۛۗ 츸 츸 wwzz wwzzmmggmmmmggmmjjwwkkjjwwkkոjjiiոjjiiqqggjjggqqqqggjjggqqjjttqqʋjjttqqʋ ⥥ ⥥ l8mkܿ44ܿ44鈈ƨ鈈ƨ魭vvVV魭vvVV驩uudd驩uuddBBٽذBBٽذPPPP%%88JJ<<qqII%%88JJ<<qqII@@̛ll@@̛llCCXXCCXXyy qqyy qq wwEE wwEEit32\         `0 `0 `0 `0 `0 `0 `0 `0 N N N N N N N N D( D( D( D( D( D( D( D( 2 2 2 2 2 2 2 2#)g΅#)g΅#)g΅#)g΅#)g΅#)g΅#)g΅#)g΅- - - - - - - - ⅐օ7LH⅐օ7LH⅐օ7LH⅐օ7LH⅐օ7LH⅐օ7LH⅐օ7LH⅐օ7LH˅DžDžh[\˅DžDžh[\˅DžDžh[\˅DžDžh[\˅DžDžh[\˅DžDžh[\˅DžDžh[\˅DžDžh[\vvvvvvvv$B@ $B@ $B@ $B@ $B@ $B@ $B@ $B@ ( ( ( ( ( ( ( ( tmtmtmtmtmtmtmtmمؽمؽمؽمؽمؽمؽمؽمؽׅօ׽ׅօ׽ׅօ׽ׅօ׽ׅօ׽ׅօ׽ׅօ׽ׅօ׽؅ȅؽ؅ȅؽ؅ȅؽ؅ȅؽ؅ȅؽ؅ȅؽ؅ȅؽ؅ȅؽׅ؅еׅ؅еׅ؅еׅ؅еׅ؅еׅ؅еׅ؅еׅ؅нօυׅօօυׅօօυׅօօυׅօօυׅօօυׅօօυׅօօυׅօ؅ȅ̅҅؅ȅ̅҅؅ȅ̅҅؅ȅ̅҅؅ȅ̅҅؅ȅ̅҅؅ȅ̅҅؅ȅ̅҅ЅЅЅЅЅЅЅЅ셸Ӆ셸Ӆ셸Ӆ셸Ӆ셸Ӆ셸Ӆ셸Ӆ셸Ӆƅwzƅwzƅwzƅwzƅwzƅwzƅwzƅwząׅmgmąׅmgmąׅmgmąׅmgmąׅmgmąׅmgmąׅmgmąׅmgm߅jwk߅jwk߅jwk߅jwk߅jwk߅jwk߅jwk߅jwk܅݅Յji܅݅Յji܅݅Յji܅݅Յji܅݅Յji܅݅Յji܅݅Յji܅݅Յjiqgjgqqgjgqqgjgqqgjgqqgjgqqgjgqqgjgqqgjgqjtq̅ʵjtq̅ʵjtq̅ʵjtq̅ʵjtq̅ʵjtq̅ʵjtq̅ʵjtq̅ʵⅥⅥⅥⅥⅥⅥⅥⅥхххххххх߅ͅ߅ͅ߅ͅ߅ͅ߅ͅ߅ͅ߅ͅ߅ׅׅׅׅׅׅׅׅͅt8mk@ܿ44444444ܿ44444444ܿ44444444ܿ44444444ܿ44444444ܿ44444444ܿ44444444ܿ44444444鈈ƨ鈈ƨ鈈ƨ鈈ƨ鈈ƨ鈈ƨ鈈ƨ鈈ƨ魭vvvvvvvvVVVVVVVV魭vvvvvvvvVVVVVVVV魭vvvvvvvvVVVVVVVV魭vvvvvvvvVVVVVVVV魭vvvvvvvvVVVVVVVV魭vvvvvvvvVVVVVVVV魭vvvvvvvvVVVVVVVV魭vvvvvvvvVVVVVVVV驩uuuuuuuudddddddd驩uuuuuuuudddddddd驩uuuuuuuudddddddd驩uuuuuuuudddddddd驩uuuuuuuudddddddd驩uuuuuuuudddddddd驩uuuuuuuudddddddd驩uuuuuuuuddddddddBBBBBBBBٽذBBBBBBBBٽذBBBBBBBBٽذBBBBBBBBٽذBBBBBBBBٽذBBBBBBBBٽذBBBBBBBBٽذBBBBBBBBٽذPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP%%%%%%%%88888888JJJJJJJJ<<<<<<<<qqqqqqqqIIIIIIII%%%%%%%%88888888JJJJJJJJ<<<<<<<<qqqqqqqqIIIIIIII%%%%%%%%88888888JJJJJJJJ<<<<<<<<qqqqqqqqIIIIIIII%%%%%%%%88888888JJJJJJJJ<<<<<<<<qqqqqqqqIIIIIIII%%%%%%%%88888888JJJJJJJJ<<<<<<<<qqqqqqqqIIIIIIII%%%%%%%%88888888JJJJJJJJ<<<<<<<<qqqqqqqqIIIIIIII%%%%%%%%88888888JJJJJJJJ<<<<<<<<qqqqqqqqIIIIIIII%%%%%%%%88888888JJJJJJJJ<<<<<<<<qqqqqqqqIIIIIIII@@@@@@@@̛llllllll@@@@@@@@̛llllllll@@@@@@@@̛llllllll@@@@@@@@̛llllllll@@@@@@@@̛llllllll@@@@@@@@̛llllllll@@@@@@@@̛llllllll@@@@@@@@̛llllllllCCCCCCCCXXXXXXXXCCCCCCCCXXXXXXXXCCCCCCCCXXXXXXXXCCCCCCCCXXXXXXXXCCCCCCCCXXXXXXXXCCCCCCCCXXXXXXXXCCCCCCCCXXXXXXXXCCCCCCCCXXXXXXXXyyyyyyyy qqqqqqqqyyyyyyyy qqqqqqqqyyyyyyyy qqqqqqqqyyyyyyyy qqqqqqqqyyyyyyyy qqqqqqqqyyyyyyyy qqqqqqqqyyyyyyyy qqqqqqqqyyyyyyyy qqqqqqqq wwwwwwwwEEEEEEEE wwwwwwwwEEEEEEEE wwwwwwwwEEEEEEEE wwwwwwwwEEEEEEEE wwwwwwwwEEEEEEEE wwwwwwwwEEEEEEEE wwwwwwwwEEEEEEEE wwwwwwwwEEEEEEEEic08H' jP ftypjp2 jp2 *jp2hihdr colrGjp2cOQ2R \@@HHPHHPHHPHHPHHP GrS ]@@HHPHHPHHPHHPHHPS ]@@HHPHHPHHPHHPHHPS ]@@HHPHHPHHPHHPHHPz0Z\+\'[ FsQdjh7l_@17M8iyU5/B;?=C\z0 ֚cB"<-Ա8;tYs:L?wn@I >V\D퍮gu"=?^z@ ֚cB"ܒ4NZܺ7pn2{ g !7(kZMM(XLW'WܷF(z8  (2o-DX8γjAPJ  3)K!Bre hV2ka>gʔ![4aCCG>~9D-yZSo*k2 Թ[{JvO3U';dsx,T,;/ks8}IAqbosbi+DRp׶}*T3#5ꛫGÙ\l]>LO^̕@i+Ai) nj#7 B1qG4{8VgEN|MqpǟtnR T*( e>(}|AvAXr^Kpn,ǓpƻIOR3r׊,]>A +W4GRZR{࠲(y]UKyjzOyd9g6g_4y3DrA-+x)_+/ϼ}0 \0fea?}Qq8U)8-rJ tsXhaZ= JcPO30G\uJi:y]㮗reAв*v$awMրIEct~6lRܦ9ϾEOH,(}G fb ڱ`F!CqVO1aßM:54|YбXgk<<ײRz1v k{^19_uېdpuӅ"5^kiz+I %_^Dqjy'IWS#7apa=+EȮA@ߘ>i\Ϡ?Gk]\NLӘ9bfRk)\$^(t1H50c8 oET/udFeܬ&vS:< &4 emr {C:=18XIYYŜI? @3Ūe H d6|'2@.ZlEunH&VbkSC+OaIpg'zK?~0͎oHG ʦnK6\ -@Yl]éY4e}°o[qZv8] xj@AeъVtS7%ke3A"!cжsZ @+K\<̆Y'f3Ú?AHX+\+5EBs; ֗zIav2NA^Z||:܀\T]]_?M& \<~SOoMQ8o5r'DkmxRq!qAE2=--&37\q15\Cڤ8[nI|j$8dlŒ msv#3p0T.!5-ˆr䰽 NOSmBtFFUV-((秐qL=՞LϾA ʢOòٲ X_$|In7Ǟh!C3gԕС,%;Ҿ+y>U.7Իw0rk%UuXxx8LjwomL}ZrB{-?n=*knLxH׫jhKvGo-A:&"GD&/m#-B.wozp`NJݙg|$rK\uIAs>ƛ%;t|I[d"X'7].lnt@AC_4(E-z~RlLWӚuO%*__Q}'Oi%sp0͟qn>#cw(1xx>xHA&wY7XETAxIϾDktoy }onw7@|.نAyHaD`E;(-2jͳw5Z%mK{,t=B A@TMo`@X駶F {wkk4b>GJ]w{V=Du?53V"&-bZ8(rWt?Znj=tBgv$,&k6d*|<33AYn$ksHZM[46BNQZϣ"Cj&NA.\Ik?|&~]/_I4JIK3L7d+#K 2$,L%ݑrf,n>Xr$R{iTIѪ+?uww1T@[Bd87`Ͽ`߯0tg96X=Txg@wc߸ޞ\`X̓[Y睿{$1;[ .#Z92UTDl> DST=nۧ I7 _Wۦ=ǫ]+L[JgLH#)|c*@ʺm/&hts- 2lchIazQ'ه<X$- 6dUڄ w6=Qc s./ۻԊ P)=+$)!XTk"^NZ 1UbUȚ )D0"B2Y+p6K8\V~c̅CZ~5HC(N8ֆ wJ"mۥ~Ǡ <#OPgk5&!\_Ɋ1T<0㨡$di'j ن 8W(t 7X D /:u8x8JB+=IwBԷ3y9@:4ˉLKLܡYrw( _~tZ@7'T8VEu+=Y-\iZ}>@ʩT'l OyM#w_ĊI/]c}ʘ̬9Ɇ*&D*~Mmüh"LG?5 Ѻ-TJ6MW^7ȁU\1}Tݛ FtXL߯Ֆy5|/e r\oϿ['߭t/xR'=qyt@F)r}aƷPS,+~$k%7毪Η?U^k_0 -  ږ.+E^iО7E8`AX7U[q9\Fڃ"1BKYLyk ,+>x.e*؞-2ʈ !Ef(N."0lx~ˇ./e[6av 2K14k(a՛_(ʩO0],Ӈ%|NĀdђ0FƌN{/.>uȩ^"%h|_c(ZPƔGwv!Sfy ̋"Z\JE@>ג\bwqЊD?va(?f1z(R)_vSfXK$ 0PXTCx:+ޭ@l=q.e&[~IArYD8ʈooKR0ؙ="eHZS^.2YÅ)PI8=8ğ7g-,ph`T254 kY%\^+}),)ܮGf!|@k%$sy'z:yTG5n~LGI:aɱ8ՄlJ%TWi\ܶגh] q>eȡaYc[oHa=rª@(DE)lvu.D]XY ~(R-z-?Z ]JGh̯c߯P}Zuɚfg4r$>T FDWac~`}طwVt^1ogDON$,Nng 8b*e?N(L>"; |3Qڕ rT9 P(3C'Ϛ߶G[N}nHv< ך!uK(ә4gD7 w ݷ^]ENkcITr&JFlRDE!_p^WhgC Xͷq5Rӗy$E#>)y^1g߻ib$+\EVK7sc]Ol D8J#]'bJ`93rMY&TTvB0qD#YƝY? S$7*&,A+cx#1?\ͮgU )o l9sHRw- %, pPsE*rs.2;6[gD YF9ΔD7dd[m21\-zmUlZld WY[I0vڨFRg_.n9ۻb ](}c=ϻ2g?l[hTNBbiF9=C@Y|ߑa7L@|%QcgP>Ry+.z'ZIpL wݛPs? E _$O-bs4+|#2Z FhQ鮩始1tBkyg$t fg-w1 R_äteQ޻?큶/tYZ\2 w;4u} vh{kIռs|vX`Y3M^ иL[Ipum0J !GPHms peS~ً.&l8O*flCd]K#_ͫ7$'lMOmr"Y ;iUS93usR(uncX f[NE&eqW| l@VQʳyhtP[o){LNJHR`c ձ_zUFi`"ܥ՝~U)ێm&  CmolsA# &-Z~ꅗ"mpzǙo~A.@y*Cl |Q]4U# X:2θ, 7ZW9U -)/CL9p&gxb(,cQ[3φm:(AniRҧqn7.;$(HdjO|926`vvƭ&W /iNˇ6ӧqٕw%‘.!4$[4\uI1uwfCXVbqddR+Z=F0<{b#GV-ъnA6| @\1n]M^]>/ͷO=rHDp $]Eiщu-нLG((eDaʗVZdTEa;%<Ҧ=e 8yK"[5LftʸrS٨NBQ;5zҿJcl3eC~jfe4x"L,zNc?:Ϳ)ָoE-A qgtT[_~p{t\#X:vgLX">%݃_5DtڰMao_v8ۙGukPً:乇|1pJDJQ2<*&|W cDLG-)nwV`ͻ+\_2,5žegb7oUyVy lȥS43]$]2@Nޏ{/&$]la?arpݍ; 㙃-7D5s-^4AUO`-dyS2re^ٚmZ;뚫1n~Q RU(g*-^S"3ƚ|KM @'f'0M`|o؍d\#>_ls8ƭY yteI8¢5qE+%EJ0&G썇ew Ed>Av~30mzT:Dz_rx=6Pќ[؄vh#Zr,^sW>Zsd^"/j]G[Hn[_ ?K ?Co p^HO|Q`G.`K0->[LʴoãI)M@Tє Я O" e7g@Tu *o; $j9UO9>`uT;R<Rcx<+kN_nRQPO +C3њ821DS"UlCpTF*(q2mI~C/P^t2(c% [W)Ma0fݺ_tSqYOXԫr0A)*$5CE܈3vAOe"s;3٬)90kU8kO WG_J+9skԛ?` 8T$`aY\Q 2.+s;L".@nm`;2~MEib7??3c[.V䯺 rT="18[Vmo&ma=b_Swv i#whDAf{%qX|/h^*bzbnXsDBIbk@VW (ΨAƃ|ಣԳ 'PEwF5&AIMJptWH2w$W/ڧy?Z1qڇP|nxS42S ߗh\q [z0t-Z񀕳$/49$w 3`;(c.rЉf}lR01ס#|iy1S)kfZ4R]{iL@;%uMk &ku}"6kA*tO5e: J|+@WnwQJHpacPwkCG9%)oEbVs)B<οY-+A ;*)vh$g!S{k* g!1p#<݇O0rN}r|mtv\\ _`f-|>tеWl@"vK\@q]pMj(+]K0aH.sTqmO >-Xڍ}:D"o$|WhOO ix 1C ަD% ?]&[NI8 D08ܕ9Ds_%~qWbXm&V&̳$#.^w.]QԨ!8[^JW3FGlMO@vQ f۲E6qn^ Lߒ&>:WE{HZHܻ*%FМ0j)T'Qr^m/V޼tuDIwSDkhJ'ætW@`hR *~ HOfh0%O\ƅd)ޕQMLYJg !I HeB0|ͬGΦPCpK}w3<+ 7~䥬˚Ńs٦rsЯu}عm*-7>,>G/\* mf}Qe6[B˺xt\%s$pp}ĨVPݴC՗@rPPiT*AU ޸mpWn%:]26-tx(za"b:,Ҵ穀))/da5Mu ` "6X%ya ]pkA8H/4 MJrߔCONg"(/DWl|o>m{0`АnU9j[-,o1ɍM^pjJX.yñ>\۴ ӾE>1țv7% KceV ]+}{F?Nc̥b$ߠ,w;D0ZjCi|PĈKH ]_W\;zM恰|Alvhtz$0A%]IOҡ:{"p)Vqo}^[usMxd=$u@%Ua.!C7>ţ1y>5+]i(PjM%bTLۯ0]mͮAfz\NԿ<$vߙ\t:f+}A6l~`Wk^ech~ oR+Jl xJ_-,h\ڹ^䳛]?77W&k|% #ROU}pޛ`GE0=唟ٷ(UB:ܱ0"i>pXo3`ui} 2le&ݭ|0L60~E,(m[ [DҢq{oJ wtIƺvpGj!feFlV3E5Vv{}1 ;{N΂0"'Y:tk#$_ tU **Z:I#3iN]evRdB[k݄֒w*:Tfw aD|C0x/.Nt¨OOs+ eCoh첶|)YoT9(+1;Ҍ,5y!j)h{ms 8Nv'QF`;J+)+-Ku$dRLn54e˃yXW  MƧ. 6*OKWQrPR LeW IŨ/dO˜:] 9&}cN u}'T]o*%>3z:Fd(W;~.WGodk8|X SP8QPl88b&Ì"ϛ~;wQV0!NxTE'ȳ1 ?zY~ˀEn rvqMHKp7@`\nS*4O=v>|)ԂT훣L{.P b4 1!"Lxq4-3沚-Y~>Mr1bÅ{ʹr0!WjVfhAóxF 1& b@[Dc3'e*`6r~ UۀJܼӰ b5iKĊ]K$QtJ%&Vv!hX{^uvCLg;!!h߳q9+c)K&ίF%NY'G4550_rpN6AMb<|stuS_), {kmsY4֮ܶ cc\0 i/Iùdo嶈߄_AWzYkdvS}Wh[op`@Wƴ`x57=(P)o<<A1MOjCBuܝ_OBC$ ٞ?p?=\+_uȀk\ي系ccV/>l?$EB o"xiΜӁW[!LnAFo^F ]kfFjcn&w$;,{tg1,wRX@{5?¦Y<(2ڵhU}S{L;1/ vj9fpq63`D_q-^R6`=%#AUCC=>ƎՈ.)*1òk_O~$@lc_/4/d"|6RnJ=+x%?+5S|ku $2Q&0hfwó,%)CWG_ɗ@0QPL ѝc"TRj{aM|)X%2̐J("RP)v'r}X,ƍ#=g4N|e1V _R \tP5 : zYjMX="n"%ŔwA~"$Mh+0r)F+C:G_d4';`1ߧ?Qջqep> Y_j?ܽ>Jlr,4ssW W+[3oWJfKdS9ŸS%]Yj7j` ڄ+@ VQ_3MUc%4z Z5^W! :vm;^)1e/% [ ʇh.BqkKdЪ_"(m;*")5TO'ɜi1̞=~n$~8: qU?XZVk ۼan}(MNJ0 74v {OCb3׊Yi O(l!&•I9qH*VB/2]W1yPG2z (+`2b:mtI5C?糹+ صD3>qKA@sQa l-ǒ;?~fEaW\Wf^pyC= M#D~A!zXpx i`H_3w_H7d>Ppi8C-Mx:5B|k%b!%svx6b!س}SUΈQVЃ'm?0]mQ9 GkY9h+zN_M ? cҢʰnn LRMC]/@PNV'/ҖΏ[oWZNCqe2wvt}m>M @3?2& .8JVOwDۃ?Png`+jI|_h' ~+𽯴XonU$_e)~ы!慐PP(f3fDj^`?~k~) 7kkƵ W"<7sݸŴ) &oӁ?hP9SX~TJŦ=Z f%ӛvٛ磻AOV~.ʾ|Ⱦ>g uveAIP4o-`?P!.I\2e0;&6Dm/d`o- Ӡ8PppP < s@d."Pml+QhY>\ӵ}(:J 99n# +^u[)M gЀi"H#TU22Ӭ 'z1r LJfԃUk}e׋L\2:Щ !i1̞=~9 /_cu,bF{6jZz1݆I4s>SpIXwIFqۡ7 q~6JP~bVRK;8H=bG/5\ 6Ql "3ڑn ۝8{C W4ꬻw`S(E{~fyV伢SXH<74w!#b ;B..vJ?ef%Дlfđj:d Czl}N|ߎ QX!LaUo"k ,l̍O(V kEINJ$LvBJ;穠 k/@x2RK&Kjğ O~l`h/u`2RNplOD722J1)kkNm #Cj' 8yv~VVE[l#_A9 UnҍҙZ)CW[$a"EgJ@aقsȠ6NfTYMPf@"|Bu ;^+~[#ޓ K=ں3v1n"Qj ;3'm?0]mQ9'e!T`a!yvORO8BzWs'n׮rW|ZaD*K\saA8˙p`)Ci<{V߾[ALCWL;N6'\Q>MFdPߧhi4(̋/$Փcx`o'?fr@Vg`m}Jtݛh']*G%5{,@o؛e,1ҏ(O˨dz=~|s?֬>ᆭE_H=V"р&8fbnBvS8Yg /x-<}sޔR(zk #˜p#dV0 )}&X);#KIvm^%P( s/_Xu4gwEM͠A F%ȏ+s~1܊v#A$gIܜ=X̷P}VyS3wi[Fs'% M%,X;HT`xPr: ʜ>-`,#mu/ӵhƌS98B2=<| ]Wmz1ϫAjzqk,wC_) ie%+yY܏G[g_68NMNmk :} &;T7=dA?@ \C+ [_`&+EzA?a6! ¸X>f7dUIx^p%{!0м]\}W`| Lg㽟V>Wu+ :{ou9XiBI.ǯl\ .T\ys/;D9+Sï4W奒<-NMS,aG:W-e'ND;g=D <#18Ŭ›OտM;IQpNϿ,?n ^d}AQ7^/Fˌ>鷡csG)%\ll2<Au*Vы`LP<4IqL-h!Vx9 x T)+_Cnkd#S d2?ʜJ"]lȨ }"{· QnI aNvWϢ3s.1s;]H(AXM4=CW.@0@{}*6,z̠d,7u Y= vO>(djN%A  35ڈYώOziAFo†ƌe!`fp3WJo)@,G<+]`'so\,BtC64?IGH~WWv!׋Q0($;{|I#\Np =J6a:_8' Vb=w*〵H)GtPFr%,H6Sq!- έ3s%C]`4" ճ: xF5OdOXMn>?rx[̤$U)^ncՀ=njpyڬdIt:N)[zvChʺaQ Ä_e dկ ;()2d+k޳Pwsn OxR2Ww(_s `_8"jՂ#q.MbFc#[FtÅ $tUuFq%'F)c @=5DK,ESKۄZWZ6+(?md|BN&Uu?Pጤ3Y p徽򻪦l( [JIf/YXGa'UCuRlmٰV/'7unGL.2Cwt1Y4dUrf&𚣉o4p[< cG(^lE74g{~j8_ȄEtн ٛ 3\T!Z4rp3衊X=;±zp >%\WK +Ӳ>s,9%blhU*D bF<'P%୾܎>S:O#>75/4c+Gi]BY,д{?WKJ ?I&$ņiz#Og϶,he= DP +@ŇtEQh߳AL)>o[I.9wFO(֠e:,U|TGSS4'TnRq Mh^[LP<NkӀ~@h6KCBSIx#-UcWB&ewXԸ}G'MM{Θ-nNThP]+^SA:쨖(gVeFlMpBWl4dJ2T-ނ4RfSǰK-d4:1Kז{z7f~@uka5a~iqGأ6I7/}Vʦ^CRۨj$U/Etj-EP!8Jj|GDZQ"Mdq!Zuz@ח3HG9+.|+C'T)ߨ>v*Pɚj{}Px0y:nWj`::s?lE+9pfw*@ ^B%I'Ყsj< hg_݅hvroڐuj|V," %faPC,7 *_*?+u!D-Km+P]$UpDºu[{y{[yJj$z5>*[tn(*6!Xa";PhY̨\%75)ZBd|P$Q=PDIW&ڢdPeUŻ'8JFmKNAOOd'|Z dzjOz(g`l[_o^~0:Cžp"̙pJd&B G\Z thK섻Q>f؋ %ni%kY_U@Q| Ykȏx35|R-ׅ$+S{$ }=k/j?k 1ر]Kǜ4!!&e]ۓd9|M;N%Ky"_ .DVA|! O;焦/h {=T.#LO[<_7P5 T1QA::ŨKFu -SAC{>簠vXٶ rؓD1dil 37mN."&A ʖ=]#7xsS1?٭kV/ExykJ'F2CffXѳ2\7M>.]Jλi;+a򆌷4 ڱ RnբU&G$TLm#;X?\%Or%vN.㊥uK_" Z k&Q{X'7S,鉤T1N4p]vBΧ['V^x0W s.%|C0)8S+Tl7C J$% E_$f,p~+_{Kzt Xo.GG)(~d1 sWQy|.aYE.+NB{y\g cJƘǚX `=WEC N+gJ*75Q}(~Q6Ѧ.q?x`tMs/(^+K(bUB[GkDӋ۽41~sAB{ةgZCHNf\,?J jM ێ;fo&l@1Ij8t:հx!q^n4oQa\)?k?#k],zeu1*EL\I5Vw >PX;1wzi}r!D6~3A͠v 6_ĞgxxߨNOh7J;U`1D:` lK}@֬'ݦ8:w'0{'d_7tס^jD8s׉.wAMy< K9DvaD,Zoܘqw჻h5,SJ1Kk۲QlV"UFSΚɣ愹Li6'\4< Q](i m\^v|8% sU 2~a]y ##FA$ĂkBrDGN~+nxƈjxx<܉(po DZl9 d=NFD" B> ӤP";ܚ[~"-w>K>rhg R7,S-:ԕ~"ɻsx'I@Ou&A\%}:OFĨT&5D>A:urCd>1((, .9n²'C6ؐס]K1xu6-F![QFnb&D:C=~Sۡ1<~"NtYr. {]\<ak[zM_j k2eO!~ g8WZ٥IDv\:] B=!~ X7p5f)9&'RO;TCT]K`fyS$DmqgPz6aIl .rJAKCyD ,$K-G{Ի,yΒB_gh!V(/}0_^ɐJA=; k&~&X5%F&?%0C7@)f1ڟL"nÚo_&*{d{E:hFSN4mqfWOm}myjj逘H|̜h6TdU9m>dzF)TO쪁?g@fau%x}|_/5RἝB>c^KdBk ؗGy"{+d6jnX։SId;,.j $k%UcX?6gpOP?Jq=C+*G^̅kA=)jVbdtus=Srta4@adVma9An 2Kk?H&t`Cٔ&EjYoxFn~h63ac:K=5n?E-A xF0CR9\N|ɵs¯!kۚ\X(&¦%ue'-Ɠ _"Vax&mƬ[~1&֒FM<4,.^APo{^xrKKi'mPLkbMIJ-KCZ!6W)]5'EQ?<1N;גY(ׄ8.Oky| ;;iчzMP >`Xkt,Vm~ ZWo{9keHР%ꐟXxːYߵh@Mrc_H5`NF@h! A5V^Hs۾V eM3|t|܏?̍J+"+9@G/@Sr@}pHL Fr{Sh2([,4PDKiNLO\6 MiBW!@]|HN&cdT$޸ -nUDni2V5 9 0G, ^dc1O_8Q.xDYRCE$s')eB\8䓔"?[qQ|d: ȩ^Ui,vK΄=8Lm;,J& lz% ¶Hm(_BL3~<ĔW^-) 5sۏ~Cq<ݒKJG22Me':{$m'o^$jqʇRs;FEx-zQ&,\3>_}cD٫8n*TaD6Y':3G4tRESٖ ~hSM3đ=æV!'E|B} P}ǠL+5iB=ƅv#qׇ(b!vh>u uKRplCuO2UrMiBj."hlc#neyWPYI demGq<կͳ1%KMj(+龟v*Gܽ?eh!V"},I`DS,9$[a!Rea[wD -W/\3`Rηv(SΒdSu*knM&άM]Gnduڏԧyܱ |K]HAF WTR̟A{.tD്- |s}1i^XW v]S`#:a"_;4y9U7åX@TZǧٔOLvn\kpVLIoQDJzTh1C6OK::)-¢sc6wD2m8;WN/Q04X&zdڣoYlKS[rBf4Ծ{gQP\Pv14d\f6"s; 5zb{i"Æ% .'+E:ڢë>m$/,8>kb z_,l䨝q(nIyDzoFBo1.'1cIظnP23e{ c3GZW;"<-*^*su[kO#s~QGaP iK7<]%Z/NΙ7ØnkԮq a9/]-S:A[D#\f4Uk>Q:[E_=2`uyr&ddI:@4Be!ǙNU5P`65u}FH[7--HkiX&@]مX`,|n_q#Eգ2h4ÞܾaSZTI;a%#DA9 arOcp?'#SmkgKT:a*&t*0sO:()9 ;uQy2KK8-1`` ##Fy>H]+78V.mlI(DIZZ]sI0[@y/NN"j>b*nwES {L_VIOe4W =k ڥV`u3v?ky71:"e!s)niԢѿ8mz:# I'C6ʠ8?J^DӴK:f c:z`o Y_/ɦ'Ԡe0I+<'h{ _ds]jsqA[>+uXwAA-&'Gq՛o({ZFX#dVUFHfCI< ^rMΧ{΀parOrȆtۘ2k oƪnbވG&M8{E{ 6+êYu/ձ /Q%e#Z5FllP%gx5sxﵙ#܈5ߪ"a (sqEmgĉLdL!W7iLȽsSr=rB‹56e}&6?d` !bR%>lFM}yj8iġq/2m+.#$ 0>KE1g`Ifes}ݨaCV:e"nNhW+!uyÁ 4KP yW֎q \T"[Öq'K  Kd')xFIrr<`I/w37j":E*?]E3"U hcG8;),%rh'EĽ8n Кv2h?uB r6pRՆh tPY#Dmz^2},w ED`U'GiAZq8Ggf^PYR.nSFv<\Ec ͶN磲Džܐu!֟x!pGhZ$P_f_kK>qq,$5?{z3A%gbeI'c# JOJzSM 9:ݛ>-EJ{7I #U_Z>%rD$:u-:퍊XFRL+-$2PÃ-E}[PJk8I=@|F:M{ksC&IsrLT6 vӜ(Wәownrˈ Qq۔]=R.Ǒ A0'8#鏍!g}M$ee_z۵έQ3{#Lxȉr&H>^++4:lԗlZ0źmm_aL2ZBÐrDE?y36g;GRLNjWz#U m}` IV]9x- @,ϝVOR!Szb8Մ[NǷߕUqCZFCO@a3Bꃻp)n* OdUxrƀ_sDZnp &y~l &bLkA9yZ8d}b6r#B!A`+דQVŚ&-**L;:B̺%JqevTo#P{NR2!A8^2 =~Xs#\20TxݷZPlCL?N9Z~vf[9=A!D8]nH.nZl˙ l Së3&PǾb&0z&gQ)dg۝CӁe_rpN6AMΪ&ψF 2u;YlwWQp @s#A^ *BPdͰjHz<٠`?y0{w LP8ExV>Ks^I r(xajrK3OW'`K33-V:YZìA$~o,*,4Zmy B'ڄW,NZBw8n;vQIg1mZVa#lx #lݾF3a C2lIiV2W(KB5]xyF %29 :"7B !wpѾ70gu5gfo0*5rьÕ|f6Uy4_ !-\'y~\'5ȸӓ*㛒>!1c]ᗂ/xnEd)\@kƀ'.d^%F;kC+}/C70<;zT/Ko{o)M'Nj H#|ׇCCƎd[6`VFճcǔw0:0\qboI1B` \M<Ӊ=շm4xORz nyo&lESY$loP RCǻ tA0($тgT4`3 ϢtNrpxNx w#IG77KXƚ`B բĜDsP of.M =V%Z ,PMU>LVhe3ݘZ +u.y.|p(r 6~(v` deoo;ҥkOYm(0/EI`k(foyCS!?-/).{0@)S`FXFf1LSXB"Yk{NF1b4R$fwD@V՘n #nm{zfuʥR?-T5e-7"lBa a$S5}@TZyJC&G`_mA-CNa v@|IĒsuK'(0|*cS,{(4g80;N U;&%g2U)+,kY=&U\8ƯEȂDujԒhHΦH: &e&3ZLz澏XQV _Qr R DiXhrt2*䪪tUD@㝊h&)lGˁ) i зo^M!?p?MH2:Low!P { ^ aј?/4/dWKJad?R,hV-<[J߲:SBĸ!Vhw' uT_὿)CWG_ɗLF<IArzIzT\  (dWZuVQB$=*ѽC`A9(=86D^mNF&hM40=aW\$@v)$#8yCzndH @ @n"xE<Y)v>ɚLF&'q&I%\nB2A"LPġzby 'Qk:eM^E$`lśF?9hS܄;mȔS9 #F0 ^WSb馽uܩ%sO'F~H&fˠc >hb6W4;U]h^gN,X +Ǭ_5mIGށ|_12{7|4vg2 "h\3lHHr *_/@'"/f^B1醏cnh a^uT'k[ALC8 .v' !K{f%߈|Dow+P=w: wf>M @3.BL2FbE5H+B$Ul(}R>]AB LK3}W=(!iYe$a*K`ϼyջJ/jv~4 E_nhQ}GCn8RCD__l+ nM4i?+isAR/T3Pt +,b;tW.'bGzcX ӅqD3W)4CVy9ipupxG(P?, 7su-<r7 +V V[t .PX}e41xKoisL=W76yӻTڵMI`QI[a2Ŕ`. 3Pȓј fXy.amUe_d"x{M^ug$? l(}|^v*n){A;8OnpA4DXaBb]Gt*z,gwT-IԻcPPV)C8*vqg~7[y.nEIvGoiI;M0 $W|PM5kT-㊇ r3l4 mk9urGI$Q tg) ;FdZcfТOFjh?:I9T4SSOE`cZgIZCN 3 [@e@t9g?)o,XʿiS?!QnFi]Jd\!cāk6qGKد"huȺ@Rn? pC_|PjHiT?]ʒ"o dz*Sbr(UMgcy[]lfFd@%8cҪ );f&GEVd|hF 3cvQ©vڤetrEvUL?jme)PҽU )C\1 ߌ7h/S!?3 L5+JY{nTk fOOٵ10kTpov#1F1ZOHҫdݱҍݲe93R0;vIYT3,jin 8k >awʉ]+uZx?}n)׳6UCf lZ7Nr̴$ YH.[=:'m?0]q,f[DUiJCuͬn{H]X0n!? kyip!wFM KillV>.NݖI2 b*^i3ِM @3*d\}#^g)<[.iޚtK?6G+Xv ͚J[/y6C6EཌKps0] 3S+sh’jyWuᩃCeoL')׏ޥ}}Ia}H[Sߘ f`1p'WU|rW<ҋ_@X+6 l?95=y3ro<%6CJ)6CgKZ:]KT c_fs}ǎcn*x} B,~Lj2ޣ#ŝ)AVO!tOyvuN:(s.GW T"c1vZbE} _Hg/i!#J^2OW9LLvm46>-_ǜcTCkE)u#(QT2ֺFTi^(bOz2P؞si5pW3~ȱa/ =)[(U9c֩*P?`I-P`ͪ-qH'Ns %) +YQoC+7icQP;zy`);)Z m=foVX?9n"Xؚc͐*D4 /ܹ}Q س~i\Bd~ 5GwM&%?e{CUDaT*ۧ3m>^j>{N\o_p`?āȒlm2y&KJ 51Tb)=xS ?FC[dh4|2=IYQL?mVL J+y ^UB/ JHG1NO37m/)(QKi YxT^C]xwxq, |Hk|qjWjlg R ɳw4 [?bZE.[-ʜJV/3 ?`&U0T=[L)\B^M 3qmt2BUPXGj'SD8liLt&A4L4bEeM +Ej9Tccν^ !jRx~$E.#=2Z9z;1A>|_q.U}kQ2Xy gPk/{O@2^TX z.J"$R:`ZcQzys-ВZߚ=dJ̿B2%HVj^r;̕^H)9f&Έ/ p#yfuIĄBkȣ$cz+=2,`~|΋tmzNZ")KoLAU~X{6~v|UFuGp\Ru"JΦ=q]O:΍bqFT#4s?Tg_33D_*gVڱ`}-o6`>s8}16t~ pl< Ֆs(U+6 Fd3ƖÅ.l3#7T @~(i&?gSBF<5TBdwݮ@0kw( >ZfSJmA9bf}%5;;})mN0D>|7ACs)#|2`#f㷢LE=t̳wѦ4,"24i bjk8rL}&CؾqLW|2 VQ<>m}D$Ms$ShA GMi5:?S5Gh~߲7_{(U5C!`_߲Ib/ =h8Fߨ'wK>r޴oa΀@_AKa )~QsZgQM,j6%{@^INzi(gDK "͘Y4 1n\5U|RvYHKQ`˗VIa/7ܹ d]HApQWua^596aA8giw<{ $tĩtL`i!:NS`+0 ,)!r/|/(v.䵻6*˘ct-9K>m61OM 2FOcv`l{1 @$fZ(f\k+K;ߙѣIyρ]>,rjFme{"tQrJʋJU"ݮwLsN:ʐN|g ~ o+Nsa񰂠5T 5 8d_t61H{@hBD_SqRI&A=6 96N'[]EDa{`KV塗ĐC$@V \pwaWз jIy\=C䏗:ԄZW~@kx#9D=& 1rc :e!0qǚ΢ o% Ut}1nVz{ Ǚ]RsVRqPVlC0i*C03,;bcW?2ײWF-/ c; ҍB>;'*]d+fFPso?q)~֣+#Y~@$j!H% )PLqjau*ѯ|tΊ9s/&q3Q8m ܙP\#Nca!w5 a 1)a>p`9F( ړ?c'kaOJ?p8qW@RAq ' FT8mh2ZcmW#NA>bW+ӽ7y?ka}~0gXb'K0*h2!K^^\NU.nk`VL+wŁhGr5  ߰,{-.Ǔ?YlF?3Ǭn;Wg-D+?&ƅ) ?))aIYʞPVC?P*4?b[q^ _l@0VEsJz*'Z@G^zh6It6rMi׾-ʹ* ϊ S<#Hޖїdw*%UŻs ݎ{1FxIwb)ZBS.0 @Uq U ef@ B{Hd_?x?-KuS[ڈ-C1Gޥ|;[`?+5G@(^Ì )Z($@@/FE`L`r¢-=@(u][*U Apb5%`yOR>0 cRrCy kDY۵ijT>` Q MT{U./`3QġJh^aB0峌TPb%(Ą_Z0-+J2}&yِE~="Lʓ Nt]~\PtDŽ bxY?ca? a[tǃGʵ5sr?PotG׃GϗEX@ 2)D?ZPr O41M/tT{tsq _pMQf.șҳ?Kҽ=+!vW3C-zuwkiH𝅿V.QHl+'δT9czs-zɟ.?W;=W'FcViR?a?أ"3~ӯ3oԹ/?b/3C!_V|?P =R?P޴tL`d0Vgp#S1籁o3TNBz|3^QHdDO|N8K";kuU6U񁲼^ܒiZit6_a˟^Vux $#nU:p嶺Y9үXX"PZ>VaZ̄?uccs4c$,qyǺEH"#ð] X#cM"M 8l;rwb_7^_A'7Jl$J~ 0`jSv>?t61c°rOG%F9H#*489H7:`Zb|""~ :,L'bG+s o e݋ 4s(4)_˪5Ah~ tGqQ1 y0H 7w誠Ie][gHFH8266u fnyzVP*γ0B?:Hb[ #-$ Jz*'cr)_c_/ȵ]Z&{HJ#Z%/hglcjǴ(&c"90tZ ua?F{NqɱBȖ9.2rا\v& ljK J^0,>0ǾX:\;KO84>XC/80-@֊dDKKYIe}EBA`#od; a~a/3 ~NO r? #{ǵ!GUFajgZ> {J>() `yNI}@)!cLj̬~v}N-қUQ$_abWab~pxUqRag9 FE}4&F%͗M %hrVPEo4;Qtv{wcsӐr3+!ezvNSW&9vn89gF ,&r}M T[vTM-(ĦɔQL?}G}N hk߶Gh|ޟ`rkO;`T߱|Oا x_+ _1m`'HCD޴tL`~N "H@q }N0Z\~^U=/O^~> 4dGu ~cXgg nx\R& 2,/^PMJDE @̾iʆrVܣgǿ/XBBŸ&* ~+h<`t0ĂcU NcR`Zw;=A`ZmvL_GP* 2Hb(F[6aD)p~lA|u t%7eG 彩a'$b(QW69@|b8bO*ŤVzTzs4aYԄ$Bd/oaf`LJsQJ|mT/Zw[i0-@X976:[*fu/  LF &erc:)FCʐTi͂%㊠;@t}!>fU|0[BA `yb[ #-w`~Jz#@~%`3GgeDWJӉtBE1n*D )Y'\+ ۭAO؞j}7΄#Qii < ̬?+9yo@X` Z~zb,%-< 21b;2Jԫ~Peb1F\`Z\mgX63b+`YIe}#)r=0 tG *N SuI63aQ Vj2j5B$p GVzZ;V izԃʈJ\w_pm%W37L c?|^:]ck-Ҝu֩wa ?a`9_zBNh-t"G׃Gϔp)k V+tCqAyt{wcs_O5 4t_*&'plN w(Q/ߗW]|H}a@Om5"T,' ~+P'qqu?-5F`?ʫC1llba}?jO쨯_줿bi0?Im>k0~|bIBg9GU>MgN h-} 9Aj/ȼpcC3LD_/\^̓iQvRf9=kY؃IA8~w_>$!?y:AVղga61Of@XQ^%Q~O; -)Qi#EFqPЯF7ޟy,J*Ī9ZzzC|KA_޴O0O$]&pxxlH# IMa)ډCo`'|I`O=]YRa(`}:Li+m ӷNjiumX,E]aZ6r0DY")upC;K?i= akQAwnRX`E9s"~l=XJ*baW5WDs~Թ 1{3& CVJ1612&gN*~IW>4_`ԛ{0 .Y+ǩHEǢXשwğ:9Xwa47Ń0.h=u>vYR^Q_<{ 41!Su񚫋5 n*h$5I s9 C/ tpqBzUq0Z3QjAs$絎N# z]Bbgۤo"GBd^/4մ{ hl?o)YSAXu8KY6 aWoQPkruCH #U9;O¶{ݞ ;} YyaZ 'P6X)?7ߜi1-;5rBLxAn#(IT [a*oJHRoaz6R~@ C6C -au6O@9Fv!\~c_fGa1ϊӰ"MTxP LS|{BJM%=?GM-u𡪩HɄ'yV YWb;Ha q"0O$mZ{AEFfRڝjgT̐!,~20<[0R< $ax:JZx Qd*iU c!P* o\zF[Hw& ż0 JY޵*lKU< Dܰ-63 QRK~9cܱ 0R`(~w@vT[h;Ӷ+! ,lG$OhVTSZDÃe/=:?gtّvlC\{A. j`ZDkjj""1m[hP*JsǴw<_ ,Qb[|  jbIŝN|RNPi`72@eA "~Wok&Os=@v(oa_pG7`L1@T092,mZ 6aD/%~/un# *P9g%`1R*kDGP@﯋)`p+@ɫD)Bzױ"ҍ| nd~4j]N| 9b0S rtauwz$QE4rM>؃j2?2m{jW'jT|7>`\ox12zh kynRW&4`[Omrtm>F 1z(I(w(]$M#:X8B ) wYISd.ͥ(VD^ޏ__a~{ ނ[p*W9eT/g_N'_]a,s P|TRsG3o"8gc3L0:aq{7ajDa{}O{}{"O7:(xK?s uaW2\v-l.ܵ@V,s? 7-,\=RDmR)qԍD/Qay𝅶;Nb;ic10gPNG  IHDR+&IDATxOU{: )Y$) EATe0M"ES EfAd☂0Ȍ {zq6y\~8pd6U>                 @Lt9pcU{gvsew_;Oy      8         @F_lۜߏ&?Z@֚_<rx@@@@@@@@@@@@@@@@@@f[nJ_Z*ygW&5<[K޿|OAx@@@@@@@@@@@@@@@@@@fl칑Kr`tKIY-{>pS              *d׾h=vO,/M$_343pSN                ԫ?@=I?(~H?йM޿yݪ7yг]?ʙk6g0@o            Ԭpl>8)y[, ǖ %7V'6_^,N?ݕk|U'/(               P Ts/L_;q0ytߊ0hG?Vw&]+07@@@@@@@@ @@@@@@@@@@jV:ő;PW^~d8X[`hD*o            Ԭp ꯯>@U %߽xVN%,]v6ycc        N          P 4+: ʡ=O5Gf.^y5?ټ        N          P 4{8y}iv>y{ʷ         N          P y VO%o@uOsy@@@@@@@@@@@@@@@@@@@T*ÓH*CIENDB`hydroffice.bag-0.2.15/hydroffice/bag/media/BAG.ico0000666000000000000000000004725612612307350017637 0ustar 00000000000000 hF  00 %V :(  twmEר( ߭$yB ͧ@q ѹvˁCXhۥ[\jtⳘ@q֛̥̀7LʨHl%8qJgjgq<- qIܪ#ݪ#զ)gjPi ߰2Bjwk ĢDר(mugmd ƦNvwzV 鸠`Ө0 п 4?( @ x{Ϫgej蟗ʛD֦%ݮ,v ׫2 B2 iѨ7ٱB6ݲ;^ȱt7ѥ.شOJ үO]x?+q8Pߥ̪HȂ[;[9[9_|wq|НwoòCЧ8흠5zBfm\eh˼ZY~r jefkԕ ߩԥ'צ"ofknnifoȊ)]F.+kyiIsofgfgfguVɆ@͛+˧H͢1͢0̢1@f󝛕}t.hmLhh°֨(XkfV}݌fm߰2?CL۬/ofٚufrް2b(tZfzpf=ȧL[iihk!Ф)ş9 @%pffpwJzz@'-3"4ް22 %X°T昖l'J˺ ̣̞8w.dT Ծǂ ?????(0`   MsyW.Kv䰙[MKLWo皘ƛ.|jФ+ ҮJ~F[گ9t M A4y ۯ8Q߬! :hʔۯ8ЫDx !Ćܰ:(ۯ8x߭&#Hة(ۯ8ް23/İ{H¡G;۰9ֲQ$*&ձO/Ѷnf޳<ٵQ%*%ѮL/zZH|.B& 3X̣3ZFȂ[Y[U[V[U[Tc)È玥*Yڈ頟kۧizArkp승\ ֙mjƾղ)ƤG򛞨hs$jfj}ݎ)vffz޶2 `cJHSr*pgfzş7bpfho׻E5ß>assiRa~xquhfsĕhfhvS0Z  ް1~?jfgoqqqlffny*ȊB+%Bwmfffffffffnz(:;o2+ !z:DT(uCuefhffhgfhtu˒!ȁ ΣöeOHGHJVh㞜mqLifudifi:ް4֦#[񣜌1jfiR• }ۙhfnݨ ߰0 .$ťKٲ %f\̠KAjizG-g)[E4TԾԾ??????8?p?`?`?`?`??????00 ? ?p?0?0????PNG  IHDR\rfwIDATxyt߳{,HUč#Z.,"uөgf:gZ9T{=ǞzڙNUt=6bh]e\YT\@2'^ 'ys}~. K}ƉmzrR@@@o./ީҥb nӁ\|pM-F- w<9^xMWG0C=}ݧb>mPP~޾#r=1%;sFR݋\儳|͋,_ 8{TJ\1wqț7d>\޳D Bw'b8Πݳtz~r] cyr(;djȵ|cZG}_>^Ę"o+?X:<{qrݼ c0Xr]{#r.{Kz7}XeX*smPP=m!&\X$u{B>o2P4,kh/m3bv`*X. ]ッbBvs`=2-ÿ<}7λ#Yc s;vy9ԣP3&0װ1cT_0bǎH]qŇr{Ǫ6C~[JGls0!{(( |vИS0TV-D$ݿZk/lX1n;^CGs!2({(( AY>OsKEU= ʩ"w"ȦzS/]Pwk1;95ͱ"yUw {(( %J,6ж-L$#3ZӉiz~ ۢRbg`o)|,@@@`X0إ1 gϙ =t騻k\F̩7c%Z=?![541ޕ.4=}o+z gyB`<trVj'"Bs@@@4l| )=6*e0@ P<)ߪZ>J<_n*Y%rmUָ; \Zdž=Yy_F⊦eQnlcx~ {1F1c UTu\f,@= ϭF״Պk zED(gko牊l?5zԝK=zbW9Fڟp.] zA`n}s\wqq~991uĘ:9"ׯ2ȴIbDo3/}؛M<Աy?n23I=os|1b=CC*?+Ƽq]ځ@~ك|I1[g='lU!{?yqǛTv؀N;03E[c grlQCxe]kM|*}γZEiL|`P3򵨅o=QwՉ"aʞCh>:k^|@@@೔K^Gg;DCh53?ܯ|GM?Xq7_g1ƯZXϗѴIM= G>у)sig-NJ=R"{ޭŘ9+7k:Ƙ$=-{5̣o}iz;֧" 0~U#[pu?UDOct<@Xuz+x|@@0,YGz[g mz.xlc?Zf51mPn إX,qGa|vqmh=ż$yM)N]'F@kfrqC|{((|WE<ܯ5' .]f{2|b,Η TJZW;9'LMJ||;\<ㄏ@@@J)uEz.qR'.% C|Gal*~[Y^#g]?4zww)<)#=o9c~1&(|i"O;1|2+1zu2yRr;VVsb-pt8rۖBQw`R#DMu<'**'\yjOouSt,;\+:^XjWݣgo_N^><|%g9z)WK_vDcSEθù=)=wP]nz``c雲cy'r}@.AZW17.P2f=/\s"mf=cCK+ytԉ9OKܞeKӏ+.\= cHFP.gT\Sq3gW =R՝3ĠbN|;r,؎bҽҲ|ݷ꿧T*y8a2X\Bÿq`D1w.dbZ7n' w;wni{K<݄3_'%U/% q{-oyCɥŬO7{H~?`SW08Cl֬YGL0!cIEOmK&cK fo*=җF 2aW2${(((I6M)w!=V%NssZ.` mR1 z8$S=doz0:u5oL:׋=! zrX#R"QeC~ ~=_.'򁸘AyP)79@A a``]!{4~ϊE޾`|'TI1w80|GQ~5z~ŜY;%z[U )PP11,^N,o|%`n8+KV=TNDX z8Mz>MznI$c]A?W?Ξ5= 9/@@@$˒'q)len/v\%;Y,"Ɲn5Y8hz %gz9^G_ l/mvgű?N&?(幑z^ԾRϏq ԯ{C#s:J=0tyڋ*,dA 9*W^ ÄpXrzeFY%0|b)  ;q݀yz^ܱc`.(@9V8cv8.!Ȝ5*/dr=8B8ʟ׬ގܓΞ=vh˞@+qKG2rJ^ȣxpâs|~|PbFLn "ɒ SPn@ydgV,Q 3`(fд 4Mx!agj6b]:f!W& [`ߊx4TS δx+fmPHv  w5VI/D^޴R/$`ftw!=<k[ XHAY=8%Fy)?Ą 7yju? ʥ1ڤ {j]( (Ҵ?#VVY+@qr/' ,o5l's:29k%vy?siYy!I:Y@R"x(Iزe z8'( Ǡ wQ3r8*m##ۣҼ77@AA9lH,pA@TՐ0B1/*ZjKGEhKp@mfhrGĚ} p Q`v,.,y,^ݴ~eCuY=Ö U[H2R;ucz[o4拗Ԇx$!$ZPp9p 3rY P ,+.<0\8(!E=P6^n C39}&qMj "覀~e9, ò ~lI =#C45Mlp &RS5tpm vmATs NM:T#q 7xy!\QR|s>Ty@0_C3G}cНqͥ1L 4w}^g:S  *ןԥ3)wϗivTQ^>mRoA=V[ڭ*-\&AA͉j%|aJs.ؖ:W%ڜ4~P^? J:(9ׂA *% 4}=j4Oo$ S&O'pyL_yqPL..q1Ą *B1U$0] @zuq2?/Ig\k5vG1bGLe1Gh6꽼#wynJpXeHb7xG`,5\&oOW\X~}gaA,fx^@j¶ũ|C7)A#:nJ9PI^XXJ៝:xdDhd0| ]/IENDB`hydroffice.bag-0.2.15/hydroffice/bag/media/hyo_button.png0000666000000000000000000004562312612307350021446 0ustar 00000000000000PNG  IHDR y`sRGBgAMA a pHYs&?K(IDATx^gTTY.|~ߏc1sv2gmsDQd$L(&̀bNsMܦn;{W*6b7-k9ڬZԳs7}M̤?Gvani <;OrxZKr1$"!]_l'fct[*TEl[$o|~QM 7:TG:ק ND;&w{*_}I1 i w`<6^&aُF;ýj]0:z˄o=]÷##wŁM wW;T~ͶCvXH4R/>/8Ta} wt6D1-#F\`gBaxXo0-ncFLoxD AsÒ*`B)uhم8R53a~H;|9didn;ꬑ_sH*8-8jiƂEcTrϢAY :,wشδt!uC X뀺<]Й6!1FKpÎIMw[9IS9LHV:7_*j FG77~/(ZYRegT}8ݖ;=P9~$;V\,:t̎t!OP3<*?&ϢoD.E4"ґoTtH#c;̦PGStM ;ŲߍUaئA8L^Ug nfnB-?b0S`!¶F:uhv7ぉ"\S\1"X\&VG3H[u !0. Ni)7⒱hF_t#$-F;Ptpݔ+skY]y`]xbKNQsO$im` LQ!h5@3OZ).mzttD'htvAep]rs:f7PG~&aHJs ZB䪾xY⧉(M/|j滒/[u ){_"K}i{>u5|%u*]uNU\x6Q]C} &Oh3)w?^(!yGW~sIN(EОV)BLv#I3S'|%$`5G=2H(] ǒC;C2ZbkD 1Xu184%Q nFtJ#lU-da5;0GJ(+ 9|E*̈ X4CmBB +x$[ ᩫRr QN960_هFR` !i?60VB4$2@n2LoasHoLuva?NZRsyx 5o68 R5rڃ28!~cvtnC[/͢L'̓K.?DL>c=Q9165X ЌG6B, wLңo sd4p?mzY =UY~cxdKll㙫uaTʊ8/2Oa3w68VrCW7qT2Tιe":N68 h[%_Vn>vtǒl4 1Ypŷ:&s:D[ܳeIe%R߾Em"fUݸyp]r #gF1M{{-/ťp2 hVCn/=!W%}i,:AOTW \i!5W mL*;vtӷb>v4@^*I*a_)?8~$Ѫa펢޿jp UcsvH\&yK$³ẌꈅS=l(pmVdUcUUVc ZyvIړfn$x¤6¹xrcQ_<8v syBD̎ #cK/NApȃ~_88k ]M(z|rLP]cflc`03zo|)u {˝9$vHdNj1;v`$O!|»<{48fKcr ƷLë"cAxx??͢%&TcؤR2BINVi8H?m|ZޭvaKlI# 39I6% ׅfNz C{h؟n`Q/W0żL.U^O%/ 6~p =ܪ.' B`-ҹ՞[F{\g'[ܒ,%M\dp&1[2JnQEn;!ՏBϘNJH BLQzX ֳkqvvc+w4 | sHޣSWK8ǦmE͘_~?Xcb}:- 9Ϻ ?|Sgko*Get*;bRRqȽ[G>-xے^zFTr[p;J @+4?P"|. JC=G%cn@&g[z§{ J(Ƿ##dkZX NeXXr`&/-ˠi5u&](A]y1`]bXc&ǹXYh<N\!aGe ÌH|!jexgaKo -q8} Ecg %p928RbܼIw$W.k0AY$vx(:Ġn=a5]iLN A)85Q 8͆Iۖ.! ͦ_f̑>㉅W&s/Egp !nqϗxsy!Z {Aw#,*||hw\ee>j`lE|Ɣ!hp$ NsG.;{G).ŝ93Jg.W s8 pZS 5񬺡f0æo0\vYau"+ʑѱbܚ16F >mM×6w.r硬7qXh7Qh#kЏ{M6dBٜ>d Hz^L ]ŕt&r8ۻ#E:9E~6f^V>NȎ0/6]{}:Vv^qrǂOIXY |W|n'楡K mhqzRFqk׶7F'Tfò)=O fa>Ţg `:o*ǛIm%^^Jnx+Sqhʶ8ώpsŴ*`8eG 5Ogqxqa6GoWKr~1kVr"t>k?>pl|Vb~,9Lꆩ\3 t+7^c@o'X /9Ml/-HC bܪ&#GBǤNYjTigGsNGBL)[ =BYb^P͓M*lTK 8o]ade| -^'+Mv]hbM;9 neɿ88mV 5{g {7YR<:)%x~#(pze`CnD]0]#gW}N0{"6xKr?8Ƿ;4C%ٰ եⒶnȭJ_[1x~S2 {aV\Ox& 't;>t2{llοqWAk|rUvR}U8 ^ndȕ#f2"k_#D*ǴB^J fؤ'|\)޼>eKhm):Mz0~B_MG5Mcg `NėaHjzvN>‘p޶fpڭ/2_g/uqLsqFr2M==V*| =d_^,2=98X[,a:3i$+׏7|= 5-8İ=fJԜ?WG8 [bܽPWrg %VbM\v^AdH/pږ2=V*|{t.>Ss\8f_W݅wё~e!j4n!u;fГ8E XTlaY븻+{t:n]Hw$c eXF'W29?E402LHpD XRkg=Z8ki);AM2ML cgqe.)wdjorV~ wiV.>MCMw1>"^r~Ӓh|~5qIX:|X>[*=O79|mtz-Zl!9_?Ea%D /h=~GƝߟqPiZӐZw413oiNYt;o\ȷ\Z^ү"Q%z>.I-7mBx^I i7sgN]@n*Dƍg?\L I{w⶿Ew#USZ,p>px)tRa DxY߉$敄^c30dbD -v4ηEk5Mrr}޴-R"32&TDٙι1=Sdc!aWJ\gcvxӷ{9śoxC_w\9 MR{%Ξ.Id`|9:z$Zp:xS >6uv' h'՝ ̑eWjBiN72W6'%Ն3NcඔI1fnl#f&=y.O.TZp>pld.OnM}wu%}/#kYQE,cٰm#l։b69=lHAe`9sO7r>{r8ތxc 91dqʊ2‰X7@t%'%ߋGNZOcHrP=~<+e$Մ !pM { ҅(UtCC†Y$1"77ݳ&iGci"JfFrH[aRIݥ1[: q\[s~)qky F269&l~}o1qk?d}3,T 1xqc(~܄nﵓ)o { W刊pswK#){[)ݏ0#1,<.&̗4/%w躩&5Sy]lÕxuώycҁR''77X::t~e;VBr2,M.sL rcxWsN6\<5Rԭζ R5{Z]+|ZtH,$D77%K'ѣs4H( 8Qtqu ҿ̀c g^]u/po(,N&2|Fd>]EK<凍9Lc{gCycwK bf0, [r 5jf pl".raxt gØ~^w}$uu"ήw4Iq`jDGS+l"MN^%Wɬ>8QC'O#EJ62랐r3BnY"+wL/Oȯꉸw`GL r^ws_:99~& QrRN02I*KZF8u\a{q8'-'ՋyCMe59VI+\qztOShh^XO6ߺxET\#xD!Fd0/#yW \TcT){z!uI#x8&7%'d^%~4n/y扃j#M X cW?G%W'\ ׿ت` \hў3ǧ.#ǢdB#Mud͓񝤮V[R/՘8U@y#s/z/ N 5)=C7HCq[ Ag2s3R8e5 0bJ5؂ӈZ'Kn̨\5p׷ӭ%G|5P':g{ghW}zBEG5 >ؼlD_R# p[WmȷiڜssRotG^.p <8d ,#=lmx֘JC^J no΂~'^Ύ{SjҭK3#4V*.]SHux wqyO^Ǯb; h;"L2f0xi>p, ɓWt2tЊaBX78{{cTeԕ ;{Qm>HoА#7#w*:NI!g"uF5UϞY kfN#S 8>Yx͹qi(s8_vŚ"Ovx=~8썻|qkhl,6_b@ɿ5⶿G{Wvo &fݪp|=zx/eHwA/xT?ӂ#6&CBGG :>`BYd1kW [2v`DǷEBYrckF^,3,"8!dFC0r{?x-8v U=Y/O%VIE}ތԃoŬI##3=1TyG;ҕVqkAN F-)FdQ%Fpx!7 uJ=GO}[nVZIn!tαR*1pa(mmRIM{F>WޡM]ykxjtY#6r9޴ +Jz >pM6'geyu9/3%\^wc%Keg e IQ_+8W#,X֭_.{zOȒ͗apQNm։٫qܽe(߼G}t6eB1u}=^ NzOGĚ:m~>:lʂkyQc.P72+{)77+8y5NmGK@|f-M. M'2s[ Ή"?Ө?~BqC5x[DR{I7gS>wZ 66gɋmjF}n$-=k4{s4!1}D$^\R)pީKR-^jtaazEMxS* M3zN"r&|ZC54E1isҴ%E$m6h+Vfᵄ%,]'o\ WլDL\~Vn9OaVHg^ҋ`^^4E6 $EKµ,-t_}2@G74:DQ s#(k&ͪ"/EvW5Rft;,eCiBqFj6TP)JVYRZ5w;`J1&q:#JV5F:߂"sy/PVIpvf+ZIb>J5F3K+H&yft0B1B 98JV}(m'+4!%W)X)B8u\ *q2Q',Ň)dςx_u`f]tkt}r0$Z{]+]KpMd&X>ꄯsߜ+wSH%sFNe3vyy.౤0_%Z+>FR)gnF5tڔ\rquNSH8N"̧L<|H;-܆1Kwx L~m!}FR)gnF5tӑo+qUK\eP tKG{x%S%'ct򱣓R'wtEGtJCXs3"Ʈ5!o%!)0[Jsm%'"&FR)gnF5t*0^.Sxc*JF*Srɺ&H/mƢMptuS%$Vo).OKmU*%T`8\"7  Km, #YBSp+LS\W/*袦N˅L䛮ϷB>"S)*bZy+{}uzK&2 #.:.y8s{v-}>-"Gc|̙4ҼĈW*袦Β|Eboq:{vݖ蒛dݕ cҒwp)ZR.htzuy*!;6GmKKn\\܎5#WvD\7pIN;h+rftQSIlĀ"!g\\j3ゥ\%FoGFoIvVI#4#fB(qPCXȒM'0>+!{̿*Sy[~ ɕ- /i[{Ὼ9ZIH^TʙEM%ȓDx (\P| )<3hh>.w*ް5.q?H90RHXmvL䄰G^hk1@!ޢYDV}Jib+rftQSI b\S!F KSS~[?* ^"tݏ^V?%y@"[AZ."gnÔuXްV'C_+!ҵ·B`$[IېNOa+rftQSI L_Bm H ĜLm:Ccr`I\.'chB%cvMjpJeN!jsuVlI9}NԎ G(3%G _HRȚ,L>NsVGci["ڑێ4'd ֞4#1\'|3=6e5r/J#9lHf@7;F+>!鴌qE_dx\ۙ)&DѲC&Uy9=iY;=/яBI>PY5aM:MxR܌.j*4q\nˁ_ռ.!wD"*L&Nsn_ىD;6q}LtR=g)kJGw[ ұ\ޝ'}SY}w;0Bvvq[r-QQYN8ŢR܌.j*9&&Eɦ>eBp)^Lڈ5H$r~9 1B>j<ų k nfAcc#krw\nt<DD^8R9 ';GGKƕ |n_W5Omۋ==~ݲ]zWZ[J%.+ D~;2RǫqQ*D)//2JSp6dŒR_{K#+W}K+¯[:Pr]ڜ)=ދy#ai`Z_Y+7i5Lւ&`Q6WdX cKUqkoM@&7iYGdox:JdS~e7Nl(5["^"gM ";dNj"kĮRMu_ǕDaE"ydy43Hib?9<\s;Ջl(qk;^~Ë>]7Ջ2/JgAVZwYNN,*袦N;Y!Ey$QzhpT/V쿒Y}qIٟ 41J9s3)3.FĐ"uY{](&⑇D4<=H0!4ue/KL &OD~Q`cr>.h?\ m6X>("/q\[0'VˆW*袖N:F'QDx~>hdqm ]  =kR_ x}/oqHN#5ۭjЏl)xm,{x(Z8"W9`#yȚ(' >ؤJ]Irl%xY޽NtC`dvv͌>T^9f'%#-xj֐W1Ȉ哈X\}dIB2nz9?=K]xt'?ZB2%S'Yp?TYH2>4VW9v䥺 g~1bٿtmD$Z@ZX.)SBG2^"(=R%kMNtƼz9X1h}q?r)7WbwF#}0Y`DKYQg"uqF-d^j7<$XVDde(F10") I\cm_6(Mԑ͘tJ]{&˅w΂+mݗYq~8RGgGx\PB{ .kF-$^l|m?# fEoy0:8E*$F o`B0 S-BJ&Z3kQ{z ΞYcǾ,BB DB/Tt'9Rt "/0c }NzbQ)gnF^I[ԯ`3% Xfލ&m8/O:iY07lv8 B=H&ޯ'Y6񥨜__1ʗTyFie*IJM:n@rޙ3䄚z\J]Ҏ=GwҀaèd ґ>i8drl_zZIi'<|7c+ˁ|α)G|##\qFI<#^37ZI<3Jdl. ľr %d'XlMD½B!iyrs6&!z7`Y*9rtdkt,/]|0k7<&<-ˮ8#U5L:MxR܌.j%]N*~! /9q&OLFtҷ{^D@P1\lgĜ̉Lޑy7+p*J`Hvΰ7s1FN?דLӎ7VO>c}D򵒮9HgdRL]G t'?WubDg+$}4 -9)$o$JB;Y5KĴ?07~')ΆO5pcj]8ɧG{H"FR)gnFӐ$޹PȌ擊.^)IBf'tD?D) FG:lyLSwIv&iǁ'3@M`u`W"?ĭ7Trsa:iXANls&YP8x'"qE]JOG:ɽ˕(^SANnqh+A'IyT"6 ?t!LXD1`Bc`" "8~l?xwgLz>ɒvG<ňtwQ-u*&&FR)gnFӓ,K(.ߴB"trJ\ "NdE8|aLiHP qM{LVҵӤ >|aRβ[n}qRVҵNet lVV.ӜJZIgD:ʢv4_R͸Mp%DVҵaұ2x,v_kiP&um'"V^"thr0^BS#wYw7i""N''^B@bj=;?F$7Qml[rDuΚaZIσt.0tfSЯo" 50E9x{IJ?Xñ#ֽ~,oU)؃?R:zLBTۿ? TmIENDB`hydroffice.bag-0.2.15/hydroffice/bag/meta.py0000666000000000000000000002245012672544462016775 0ustar 00000000000000from __future__ import absolute_import, division, print_function # , unicode_literals import os import sys import logging import numpy as np import h5py from lxml import etree log = logging.getLogger(__name__) from .helper import Helper class Meta(object): """ Helper class to manage BAG xml metadata. """ ns = { 'bag': 'http://www.opennavsurf.org/schema/bag', 'gco': 'http://www.isotc211.org/2005/gco', 'gmd': 'http://www.isotc211.org/2005/gmd', 'gmi': 'http://www.isotc211.org/2005/gmi', 'gml': 'http://www.opengis.net/gml/3.2', 'xsi': 'http://www.w3.org/2001/XMLSchema-instance', } def __init__(self, meta_xml): self.xml_tree = etree.fromstring(meta_xml) # rows and cols self.rows = None self.cols = None self._read_rows_and_cols() # resolution along x and y axes self.res_x = None self.res_y = None self._read_res_x_and_y() # corner SW and NE self.sw = None self.ne = None self._read_corners_sw_and_ne() # corner wkt projection self.wkt_srs = None self._read_wkt_prj() # bbox self.lon_min = None self.lon_max = None self.lat_min = None self.lat_max = None self._read_bbox() # abstract self.abstract = None self._read_abstract() # date self.date = None self._read_date() def __str__(self): output = "" if (self.rows is not None) and (self.cols is not None): output += "\n " % (self.rows, self.cols) if (self.res_x is not None) and (self.res_y is not None): output += "\n " % (self.res_x, self.res_y) if (self.sw is not None) and (self.ne is not None): output += "\n " % (self.sw, self.ne) if self.wkt_srs is not None: output += "\n " % Helper.elide(self.wkt_srs, max_len=60) if self.date is not None: output += "\n " % self.date if self.abstract is not None: output += "\n " % self.abstract output += "\n " if (self.lon_min is not None) and (self.lon_max is not None): output += "\n " % (self.lon_min, self.lon_max) if (self.lat_min is not None) and (self.lat_max is not None): output += "\n " % (self.lat_min, self.lat_max) return output def valid_bbox(self): return (self.lon_min is not None) and (self.lon_max is not None) and \ (self.lat_min is not None) and (self.lat_max is not None) def geo_extent(self): """ Return the geographic extent as a tuple: (x_min, x_max, y_min, y_max) """ return self.lon_min, self.lon_max, self.lat_min, self.lat_max def wkt_bbox(self): return "LINESTRING Z(%.6f %.6f 0, %.6f %.6f 0, %.6f %.6f 0, %.6f %.6f 0, %.6f %.6f 0)" \ % (self.lon_min, self.lat_min, self.lon_min, self.lat_max, self.lon_max, self.lat_max, self.lon_max, self.lat_min, self.lon_min, self.lat_min) def _read_rows_and_cols(self): """ attempts to read rows and cols info """ try: ret = self.xml_tree.xpath('//*/gmd:spatialRepresentationInfo/gmd:MD_Georectified/' 'gmd:axisDimensionProperties/gmd:MD_Dimension/gmd:dimensionSize/gco:Integer', namespaces=self.ns) except etree.Error as e: log.warning("unable to read rows and cols: %s" % e) return try: self.rows = int(ret[0].text) self.cols = int(ret[1].text) except (ValueError, IndexError) as e: log.warning("unable to read rows and cols: %s" % e) return def _read_res_x_and_y(self): """ attempts to read resolution along x- and y- axes """ try: ret = self.xml_tree.xpath('//*/gmd:spatialRepresentationInfo/gmd:MD_Georectified/' 'gmd:axisDimensionProperties/gmd:MD_Dimension/gmd:resolution/gco:Measure', namespaces=self.ns) except etree.Error as e: log.warning("unable to read res x and y: %s" % e) return try: self.res_x = float(ret[0].text) self.res_y = float(ret[1].text) except (ValueError, IndexError) as e: log.warning("unable to read res x and y: %s" % e) return def _read_corners_sw_and_ne(self): """ attempts to read corners SW and NE """ try: ret = self.xml_tree.xpath('//*/gmd:spatialRepresentationInfo/gmd:MD_Georectified/' 'gmd:cornerPoints/gml:Point/gml:coordinates', namespaces=self.ns)[0].text.split() except etree.Error as e: log.warning("unable to read corners SW and NE: %s" % e) return try: self.sw = [float(c) for c in ret[0].split(',')] self.ne = [float(c) for c in ret[1].split(',')] except (ValueError, IndexError) as e: log.warning("unable to read corners SW and NE: %s" % e) return def _read_wkt_prj(self): """ attempts to read the WKT projection string """ try: ret = self.xml_tree.xpath('//*/gmd:referenceSystemInfo/gmd:MD_ReferenceSystem/' 'gmd:referenceSystemIdentifier/gmd:RS_Identifier/gmd:code/gco:CharacterString', namespaces=self.ns) except etree.Error as e: log.warning("unable to read the WKT projection string: %s" % e) return try: self.wkt_srs = ret[0].text except (ValueError, IndexError) as e: log.warning("unable to read the WKT projection string: %s" % e) return def _read_bbox(self): """ attempts to read the bounding box values """ try: ret_x_min = self.xml_tree.xpath('//*/gmd:EX_GeographicBoundingBox/gmd:westBoundLongitude/gco:Decimal', namespaces=self.ns) ret_x_max = self.xml_tree.xpath('//*/gmd:EX_GeographicBoundingBox/gmd:eastBoundLongitude/gco:Decimal', namespaces=self.ns) except etree.Error as e: log.warning("unable to read the bbox's longitude values: %s" % e) return try: self.lon_min = float(ret_x_min[0].text) self.lon_max = float(ret_x_max[0].text) except (ValueError, IndexError) as e: log.warning("unable to read the bbox's longitude values: %s" % e) return try: ret_y_min = self.xml_tree.xpath('//*/gmd:EX_GeographicBoundingBox/gmd:southBoundLatitude/gco:Decimal', namespaces=self.ns) ret_y_max = self.xml_tree.xpath('//*/gmd:EX_GeographicBoundingBox/gmd:northBoundLatitude/gco:Decimal', namespaces=self.ns) except etree.Error as e: log.warning("unable to read the bbox's latitude values: %s" % e) return try: self.lat_min = float(ret_y_min[0].text) self.lat_max = float(ret_y_max[0].text) except (ValueError, IndexError) as e: log.warning("unable to read the bbox's latitude values: %s" % e) return def _read_abstract(self): """ attempts to read the abstract string """ try: ret = self.xml_tree.xpath('//*/gmd:abstract/gco:CharacterString', namespaces=self.ns) except etree.Error as e: log.warning("unable to read the abstract string: %s" % e) return try: self.abstract = ret[0].text except (ValueError, IndexError) as e: log.warning("unable to read the abstract string: %s" % e) return def _read_date(self): """ attempts to read the date string """ try: ret = self.xml_tree.xpath('//*/gmd:CI_Date/gmd:date/gco:Date', namespaces=self.ns) except etree.Error as e: log.warning("unable to read the date string: %s" % e) return try: text_date = ret[0].text except (ValueError, IndexError) as e: log.warning("unable to read the date string: %s" % e) return tm_date = None try: import dateutil.parser parsed_date = dateutil.parser.parse(text_date) tm_date = parsed_date.strftime('%Y-%m-%dT%H:%M:%SZ') except Exception: log.warning("unable to handle the date string: %s" % text_date) if tm_date is None: self.date = text_date else: self.date = tm_date hydroffice.bag-0.2.15/hydroffice/bag/samples/0000777000000000000000000000000012723323303017120 5ustar 00000000000000hydroffice.bag-0.2.15/hydroffice/bag/samples/bdb_00.bag0000666000000000000000000006674012616407433020646 0ustar 00000000000000HDF  m`TREEHEAPXBAG_root@(hTREE8HEAPXHmetadatatracking_listelevationuncertaintySNOD Hh H Bag Version 1.5.3$tIbad allocationERRO4EVSNOD(  8X hrow col depth  uncertainty   track_codelist_series EV @ Tracking List Length 8$tI$tI   EV HMinimum Elevation Value  L HMaximum Elevation Value  oH$tI$tI   `&EV PMinimum Uncertainty Value  R^A PMaximum Uncertainty Value  ATREE59= AEIMQ U$Y(],a0e4i4$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI᲍ōlč7V)ɏ'd$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tIHǍŎٍs 7ڍf=_;ŬoŠ٦ђŕ7꓍!ړʼnłk̍Ň$tI$tIRKŻ"nMFҍťJۍŘɍčŻSٍA܍్r뗍gż쾍H᠍Í)$tI$tI Ů(~gń^΍ōڍ(׍zҍKŢňŊ؍ōȍzŞ ՍsŪڍ ?$tI$tI/#.~ŚRxQCmY ū4Z$B (Ş]9FOn}K$tI$tIN@ʼnŶoŔfŞj4Ŭ=2OŸ* % %Ł\8VŴ=xqńŚ3ŀʌ{馎ݎ$tI$tI-uuqcņhůz^s\ŪehŅ\IŶ,uäuǎ!wŋ ŷ(ŖŎK$tI$tIu}ŖnŔu8ſ*`zŜ։Tb˧Ł/ێp3K VŨn…ۏ֏@'Q$tI$tIojŨ~Ŋq֎FƎŨŤŎَnݎ{׎JP̎_'XjʼndT {ŲQܲʑ"$tI}z“E>ş͎=؎<Ď ȎŶŔłގńEMœťMKŖőE(=-LZeŎR$tIwË顎ŽŪyŠώňŅő$ Ť.3ūŖŨJUŦ>mFteL홒$tI*;źŵŐłŲVY;ŔW| y@Ŧ1**O;OJŮXr$tIWzsǎńŅh ŁŧW!z{G'k>qW2ſFE2ŰYŒ/D3ʼn $tIMdk;NŻ#pu#`;ŠŦ\OŠJN]E.D<zZO$Ł$tIGeŇ Ŭ̎Î'U#)SS@łBŮ1?u6*"(Ўfŷ.iΎ$tIȾl܎׎cS-S"œx'ŰşśrߎQǎZ'Ŗů3&'n$tImĎn29ÎŅż"Ř#rŢoێŢx ǎv͎ⴎKƎů JҎŷ^$tIµ6_nlœ֎ lŢ ŌŎjˎ|܎ŘũЎŅˎmێxō|Ŵ/ڎőCЎťW$tIõţŧŌߎ$ ŷ 5؎ţˎ/ҎsɎń œĎŊώeĎώŜ؎Lю[ŝD$tIʎŐĎ1KՎ᭎Ł^ň܎׎֎1ޕGk *0WƻiT̎ǎAӎżňJů3$tIǎbŭ֎ ŧśю׎lێZK]ſr^y`#oɖœHĎŐŖi;ž?:$tI[ŮЎȎSWŃ:Ǝŝņ_҈ЈũY:\*vSvŻk\[)?k $tI.[ltʼnfJŃſi셎Ōuw0:ŗnfFjŧ}|+}\gŀJ0Ũ$tIsxŏŇԭR՚ufdbų|iŁoa $ˆzcAj_pӕkpŇivNB5$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tIaŎBŇ$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tIAoArAAAAAվAAvAAFAfAϚAAAֵA2ATALAA/$A)A{MAdAA[A|A窕A^AASAWAiAm^AAعAdAmAdNAۗAopAA䡼AZ#AϿA]A叫AkAHAײAVAŚAAߧAAӎA$tIqAZaAEھA4ArA``A_AFA!#ASAAA/FAA\AүAA7AvBAAzAAaAA 2A0A aA%A ALA$tIKA.AALAZAAwA|AALAA)AAvASZAA(A}dAkAԷAAAhkAACADA AA`]AAgA$tIAA½A_DA-A6 A~`A% Ae[AJA*AռA AA"APAA]AWA)AAA AAe˾AA0AT(A>AMA$tI6AZAսAGAA'AA#AAN AAA̸AL\A$AAAoA2Ab*AA鉨AA8A5AЗA$tIAAA]AA'A믽AQAA6A\A)þACAAA)AAA{AlSA+AwAhA3AuAKAAvAA2A$tIAeA#AA̼A鍼A AuqA(APA7AKUA0AAxEApA1A 7AAA?ǽAQAEAA0AAA>A1AuA$tIXAC:ALAAAAmA`AAVgAپAAPAg:A"_AAAAlAA;A AAҾAASAAAAaAA$tI8A0AvAmAA A uA)#A1AAؾAAqA7AEվA/%AIA3AxAAfA̗AAzAAEAAAFAaA$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI4A!AA 86edd853-2b98-4a9f-8618-11e578c43f51engutf8datasetGiuseppe Masetti (gmasetti@ccom.nh)ccom-jhcpostdocprocessor2015-10-05ISO 191152003/Cor.1:2006geometryOnlysurface12row32100column31100point10423000.000000000000,3956300.000000000000 426100.000000000000,3959500.000000000000centerPROJCS["EPSG:32619",GEOGCS["unnamed",DATUM["WGS_1984",SPHEROID["WGS_1984",6378137,298.2572201434276],TOWGS84[0,0,0,0,0,0,0]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433],EXTENSION["Scaler","0,0,0,0.01,0.01,0.0001"],EXTENSION["Source","CARIS"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-69],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]]WKTVERT_CS["MLW", VERT_DATUM["MLW", 2000]]WKTcaris_00.csar2015-08-15creationGiuseppe Masetti (gmasetti@ccom.nh)ccom-jhcpostdocoriginatorTest abstractunderDevelopmentgrid100engutf8elevationCARIS BASE Editor 4.1.14-69.8516-69.817635.747735.77682015-08-01T14:30:472015-08-15T22:14:53-4692.037109-4525.958984productUncertCSAR5,632datasetMethod: Extract2015-10-05T19:24:36Giuseppe Masetti (gmasetti@ccom.nh)processorSourceSource = K:\Processing\Products\hips\south_area\south_area_cube_100m.csarcreationDesignated soundings applied by automated procedure.0otherRestrictionsFreeunclassifiedTest noteLangsethPlatform Nameinstrument unknowninstrument type unknown hydroffice.bag-0.2.15/hydroffice/bag/samples/bdb_00.bag.aux.xml0000666000000000000000000000115212674133537022230 0ustar 00000000000000 Point 1.5.3 Elevation 1.00000000000000E+006 m Height Uncertainty 1.00000000000000E+006 m NAP hydroffice.bag-0.2.15/hydroffice/bag/samples/bdb_01.bag0000666000000000000000000005733012606055312020634 0ustar 00000000000000HDF  ^`TREEHEAPXBAG_root@(hTREE8HEAPXHmetadatatracking_listelevationuncertaintySNOD Hh H Bag Version 1.5.3$tIbad allocationERRO;>bUSNOD(  8X hrow col depth  uncertainty   track_codelist_series >bU @ Tracking List Length 8$tI$tI   >bU HMinimum Elevation Value  % HMaximum Elevation Value  i83H$tI$tI   >bU PMinimum Uncertainty Value   PMaximum Uncertainty Value  TREE"&* .26:> B$F(J,N0R4V8Z<TREE" $tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tIRz\D$tI$tI$tI$tI$tI$tI$tI$tI$tId~LAp1ʱ$tI$tI$tI$tI$tI$tI$tI$tIy܇`=}~~'`BMo~$tI$tI$tI$tI$tI$tI$tIRXɨ,n~C)f$tI$tI$tI$tI$tI$tI%]-~j@x?5Nu$tI$tI$tI$tI$tI$tIjypl,M~@zHƂ$$tI$tI$tI$tI$tI$tIZ{q$tI$tI$tI$tI$tIi83ËT{tj&~-iKȀ$tI$tI$tI$tI$tIqme3@yN_y(ti{Ł$tI$tI$tI$tI$tI$tI$tI*΍=;~~t v<b$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI?Gt-n {Ѣ$tI$tI$tI$tI$tI$tI$tI  |$tI:g|x$tI: 22aa85d9-2b76-4661-816b-2510816b599eengutf8datasetGiuseppe Masetti (gmasetti@ccom.nh)////author2015-05-24ISO 191152003/Cor.1:2006geometryOnlysurface12row124column164point10580104.000000000000,4495100.000000000000 580168.000000000000,4495148.000000000000centerPROJCS["UTM-18N-Nad83",GEOGCS["unnamed",DATUM["North_American_Datum_1983",SPHEROID["North_American_Datum_1983",6378137,298.2572201434276],TOWGS84[0,0,0,0,0,0,0]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433],EXTENSION["Scaler","0,0,0,0.01,0.01,0.0001"],EXTENSION["Source","CARIS"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]]WKTVERT_CS["//", VERT_DATUM["//", 2000]]WKT001.csar2013-12-19creationGiuseppe Masetti (gmasetti@ccom.nh)////originator//underDevelopmentgrid4engutf8elevationCARIS BASE Editor 4.1.10-74.0532-74.052440.602840.60332013-09-21T13:32:252013-12-19T18:42:32-4.515887-2.800318unknownCSAR5,632datasetMethod: Extract2015-05-24T19:30:12Giuseppe Masetti (gmasetti@ccom.nh)processorSourceSource = G:\H12604\OPR-B310-KR2-13_New_York_Harbor_and_Approaches_NY\H12604\Data\Processed\Bathymetry_&_SSS\Fieldsheets\H12604_Full\H12604_MB_4m_MLLW_Final.csarcreationDesignated soundings applied by automated procedure.0otherRestrictions//unclassified//ABLEII_MB_8125_CrosslinesPlatform Nameinstrument unknowninstrument type unknownABLEII_MB_8125_InvestigationsPlatform Nameinstrument unknowninstrument type unknownABLEII_MB_8125_MainschemePlatform Nameinstrument unknowninstrument type unknownABLEII_MB_8125_SidelookingPlatform Nameinstrument unknowninstrument type unknown hydroffice.bag-0.2.15/hydroffice/bag/samples/bdb_02.bag0000666000000000000000000006401012672544462020642 0ustar 00000000000000HDF  h`TREEHEAPXBAG_root@(hTREE8HEAPXHmetadatatracking_listelevationuncertaintySNOD Hh H Bag Version 1.5.3$tIbad allocationERRO;\:VSNOD(  8X hrow col depth  uncertainty   track_codelist_series \:V @ Tracking List Length 8$tI$tI  \:V HMinimum Elevation Value  W4 HMaximum Elevation Value  RH$tI$tI  (%\:V PMinimum Uncertainty Value  > PMaximum Uncertainty Value  3%?TREE,04 8<@DH L$P(T,X0\4`8d<TREE@+ $tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tIgNT3Z_o\dYiٌn_XtQz^`qϠ˃[݃Rj`ߚѳW4ʅ$tIF G1OJW^/eum0t(z.%Ճ: r 6vE$#$tI8w=C NeYaMc]ClsyRKaz;62: տ~B+C$tI<} C'8>T@)3Rh^ӯhpww{57`u,eg4<~{|Bzw$tI a?F*L;pRJZOb &lͬqWuhx]y z |*|}B~~P~0};{wyAwthq$tIT*j"\,K ;OM[@cRhl`npqr2s tyv&\x>xxx>wutroMm$tIq.OLR#UUX[O^a.de~fffcgAgg f ;f$tI$tILesfM%70: ? CHLBQNUXt[ZD]L^^F._Ѩ_C` oa—bc$tI$tIL!$]'b+ 0`43988ZJ"9#&x*0487=@>0DF+IqKЀM֬O6R$tI$tI$tI$tIRXw{ҖCLdMW>'Q! %z)8.2097 ;K>^AC]EXH:K$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI9=<>B$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI>/>>a:>rS>ns>\>̦>>Q>!>>>H>>p>>1>->O>>>->N>,>$tI> ? ?G>>a>> >A>)>>s>>n9> >>{e>'>1?>6>>>I>>H>$tI>W>?S?I>h>>+A>*>>R>W>pC>>[>Յ>lI>>v->h>>v>,>>h=>$tI$??~>?TZ> ?>>>.{>>5Q>S>>Y>Ϯ>}>O>5(>>V>W>y>6>m>'>$tIv?u>>GU?>?>}R>4>>:>/>->>>>O>3(>>>>п>U>R>">$tI:>>&>>>tS?>(?0>>>f>>O>> .>>Q>m>K>h>[">d>>p>$tI?7>>>q_>*H?3%?'? r?}??@a?>>&>C>*>RA>9>>#>/{>C>g><>$tIG?>>>>g?Y?M>>??F ?ݬ>>>/R>1Y>4<>>w>?>E>7h> >>$tI$tIN?>?> >>]D?k&>n>M>i?/g ?C>>;>8P>5P>2P>0P>> >>Q> >/>$tI$tI?W> >B+>>H?>g ? h?H?M??] ?82>2>T>9>&> >)>)>d>A>6>$tI$tI$tI&?>с>>_ ?R>W>>9???\??+>^>>˼>>>>$^>Y>j>$tI$tI$tIO ?<>e>vO>u?J>l>>9>]v>ڜ>>(?!i> >jG>>>u>>>W>$tI$tI$tI$tI,>N>>E?g>U>e>>>>A>/>2>"i>?v>]>+> >s>>>$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI$tI1>>J>>$tIM (>G> 764ea41b-3dff-4d9a-bcd6-e0d9a389f1fdengutf8datasetGiuseppe Masetti (gmasetti@ccom.nh)ccom/jhcpostdocprocessor2015-11-04ISO 191152003/Cor.1:2006geometryOnlysurface12row154column264point10614136.000000000000,4494756.000000000000 614240.000000000000,4494816.000000000000centerPROJCS["UTM-18N-Nad83",GEOGCS["unnamed",DATUM["North_American_Datum_1983",SPHEROID["North_American_Datum_1983",6378137,298.2572201434276],TOWGS84[0,0,0,0,0,0,0]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433],EXTENSION["Scaler","0,0,0,0.01,0.01,0.0001"],EXTENSION["Source","CARIS"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-75],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]]WKTVERT_CS["unknown", VERT_DATUM["unknown", 2000]]WKTH12607.csar2014-02-27creationGiuseppe Masetti (gmasetti@ccom.nh)ccom/jhcpostdocoriginatortest with designated soundingsunderDevelopmentgrid4engutf8elevationCARIS BASE Editor 4.1.14-73.6511-73.649940.595740.59632014-01-18T16:24:302014-02-27T17:32:42-16.775557-0.822565productUncertCSAR5,632datasetMethod: Extract2015-11-04T14:00:19Giuseppe Masetti (gmasetti@ccom.nh)processorSourceSource = R:\bathy\AHB\H12607\Data\Processed\Bathymetry_&_SSS\Fieldsheets\H12607\H12607_MB_4m_MLLW_Final.csarcreationDesignated soundings applied by automated procedure.0otherRestrictions//unclassifiedsome notesABLEII_MB_8125_CrosslinesPlatform Nameinstrument unknowninstrument type unknownABLEII_MB_8125_InvestigationsPlatform Nameinstrument unknowninstrument type unknownABLEII_MB_8125_MainschemePlatform Nameinstrument unknowninstrument type unknownABLEII_MB_8125_SidelookingPlatform Nameinstrument unknowninstrument type unknown hydroffice.bag-0.2.15/hydroffice/bag/samples/fake_00.bag0000666000000000000000000000000112606055312020771 0ustar 000000000000008hydroffice.bag-0.2.15/hydroffice/bag/tools/0000777000000000000000000000000012723323303016614 5ustar 00000000000000hydroffice.bag-0.2.15/hydroffice/bag/tools/bag_bbox.py0000666000000000000000000000477112672544462020760 0ustar 00000000000000from __future__ import absolute_import, division, print_function, unicode_literals import os import logging def main(): logger = logging.getLogger() logger.setLevel(logging.NOTSET) import argparse from hydroffice.bag import BAGFile, is_bag, __version__ app_name = "bag_bbox" app_info = "Extraction of bounding box from an OpenNS BAG file, using hydroffice.bag r%s" % __version__ formats = ['gjs', 'gml', 'kml', 'shp'] parser = argparse.ArgumentParser(prog=app_name, description=app_info) parser.add_argument("bag_file", type=str, help="a valid BAG file from which to extract metadata") parser.add_argument("-f", "--format", help="one of the available file format: " + ", ".join(formats), choices=formats, default="kml", metavar='') parser.add_argument("-o", "--output", help="the output file", type=str) parser.add_argument("-v", "--verbose", help="increase output verbosity", action="store_true") args = parser.parse_args() if args.verbose: print("> verbosity: ON") ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) # change to WARNING to reduce verbosity, DEBUG for high verbosity ch_formatter = logging.Formatter('%(levelname)-9s %(name)s.%(funcName)s:%(lineno)d > %(message)s') ch.setFormatter(ch_formatter) logger.addHandler(ch) if args.verbose: print("> input: %s" % args.bag_file) if args.output: args.output = os.path.abspath(args.output) print("> output: %s" % args.output) else: args.output = None print("> output: [default]") print("> format: %s" % args.format) if not os.path.exists(args.bag_file): parser.exit(1, "ERROR: the input valid does not exist: %s" % args.bag_file) if not is_bag(args.bag_file): parser.exit(1, "ERROR: the input valid does not seem a BAG file: %s" % args.bag_file) bf = BAGFile(args.bag_file) try: bag_meta = bf.populate_metadata() except Exception as e: parser.exit(1, "ERROR: issue in metadata population: %s" % e) try: from hydroffice.bag.bbox import Bbox2Gdal Bbox2Gdal(bag_meta, fmt=args.format, title=os.path.basename(args.bag_file), out_file=args.output) except Exception as e: parser.exit(1, "ERROR: issue in output creation: %s" % e) if args.verbose: print("> DONE") if __name__ == "__main__": main() hydroffice.bag-0.2.15/hydroffice/bag/tools/bag_elevation.py0000666000000000000000000000534712672544462022014 0ustar 00000000000000from __future__ import absolute_import, division, print_function, unicode_literals import os import logging def main(): logger = logging.getLogger() logger.setLevel(logging.NOTSET) import argparse from hydroffice.bag import BAGFile, is_bag, __version__ app_name = "bag_elevation" app_info = "Extraction of elevation layer from an OpenNS BAG file, using hydroffice.bag r%s" % __version__ formats = ['ascii', 'geotiff', 'xyz'] parser = argparse.ArgumentParser(prog=app_name, description=app_info) parser.add_argument("bag_file", type=str, help="a valid BAG file from which to extract metadata") parser.add_argument("-f", "--format", help="one of the available file format: " + ", ".join(formats), choices=formats, default="geotiff", metavar='') parser.add_argument("-o", "--output", help="the output file", type=str) parser.add_argument("-v", "--verbose", help="increase output verbosity", action="store_true") args = parser.parse_args() if args.verbose: print("> verbosity: ON") ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) # change to WARNING to reduce verbosity, DEBUG for high verbosity ch_formatter = logging.Formatter('%(levelname)-9s %(name)s.%(funcName)s:%(lineno)d > %(message)s') ch.setFormatter(ch_formatter) logger.addHandler(ch) if args.verbose: print("> input: %s" % args.bag_file) if args.output: args.output = os.path.abspath(args.output) print("> output: %s" % args.output) else: args.output = None print("> output: [default]") print("> format: %s" % args.format) if not os.path.exists(args.bag_file): parser.exit(1, "ERROR: the input valid does not exist: %s" % args.bag_file) if not is_bag(args.bag_file): parser.exit(1, "ERROR: the input valid does not seem a BAG file: %s" % args.bag_file) bf = BAGFile(args.bag_file) bag_meta = None try: bag_meta = bf.populate_metadata() except Exception as e: parser.exit(1, "ERROR: issue in metadata population: %s" % e) bag_elevation = None try: bag_elevation = bf.elevation(mask_nan=False) except Exception as e: parser.exit(1, "ERROR: issue in elevation population: %s" % e) try: from hydroffice.bag.elevation import Elevation2Gdal Elevation2Gdal(bag_elevation=bag_elevation, bag_meta=bag_meta, fmt=args.format, out_file=args.output) except Exception as e: parser.exit(1, "ERROR: issue in output creation: %s" % e) if args.verbose: print("> DONE") if __name__ == "__main__": main() hydroffice.bag-0.2.15/hydroffice/bag/tools/bag_metadata.py0000666000000000000000000000404012672544462021573 0ustar 00000000000000from __future__ import absolute_import, division, print_function, unicode_literals import os import logging def main(): logger = logging.getLogger() logger.setLevel(logging.NOTSET) import argparse from hydroffice.bag import BAGFile, is_bag, __version__ app_name = "bag_metadata" app_info = "Extraction of XML metadata from an OpenNS BAG file, using hydroffice.bag r%s" % __version__ parser = argparse.ArgumentParser(prog=app_name, description=app_info) parser.add_argument("bag_file", type=str, help="a valid BAG file from which to extract metadata") parser.add_argument("-x", "--xml_file", help="the output XML metadata file", type=str) parser.add_argument("-v", "--verbose", help="increase output verbosity", action="store_true") args = parser.parse_args() if args.verbose: print("> verbosity: ON") ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) # change to WARNING to reduce verbosity, DEBUG for high verbosity ch_formatter = logging.Formatter('%(levelname)-9s %(name)s.%(funcName)s:%(lineno)d > %(message)s') ch.setFormatter(ch_formatter) logger.addHandler(ch) if args.verbose: print("> input: %s" % args.bag_file) if args.xml_file: args.xml_file = os.path.abspath(args.xml_file) print("> output: %s" % args.xml_file) else: args.xml_file = os.path.abspath(BAGFile.default_metadata_file) print("> output: %s [default]" % args.xml_file) if not os.path.exists(args.bag_file): parser.exit(1, "ERROR: the input valid does not exist: %s" % args.bag_file) if not is_bag(args.bag_file): parser.exit(1, "ERROR: the input valid does not seem a BAG file: %s" % args.bag_file) bf = BAGFile(args.bag_file) try: bf.extract_metadata(args.xml_file) except Exception as e: parser.exit(1, "ERROR: %s" % e) if args.verbose: print("> DONE") if __name__ == "__main__": main()hydroffice.bag-0.2.15/hydroffice/bag/tools/bag_tracklist.py0000666000000000000000000000546012672544462022022 0ustar 00000000000000from __future__ import absolute_import, division, print_function, unicode_literals import os import logging def main(): logger = logging.getLogger() logger.setLevel(logging.NOTSET) import argparse from hydroffice.bag import BAGFile, is_bag, __version__ app_name = "bag_tracklist" app_info = "Extraction the tracklist from an OpenNS BAG file, using hydroffice.bag r%s" % __version__ formats = ['csv'] parser = argparse.ArgumentParser(prog=app_name, description=app_info) parser.add_argument("bag_file", type=str, help="a valid BAG file from which to extract metadata") parser.add_argument("-f", "--format", help="one of the available file format: " + ", ".join(formats), choices=formats, default="csv", metavar='') parser.add_argument("-o", "--output", help="the output file", type=str) parser.add_argument("-hd", "--header", help="add an header", action="store_true") parser.add_argument("-v", "--verbose", help="increase output verbosity", action="store_true") args = parser.parse_args() if args.verbose: print("> verbosity: ON") ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) # change to WARNING to reduce verbosity, DEBUG for high verbosity ch_formatter = logging.Formatter('%(levelname)-9s %(name)s.%(funcName)s:%(lineno)d > %(message)s') ch.setFormatter(ch_formatter) logger.addHandler(ch) if args.verbose: print("> input: %s" % args.bag_file) if args.output: args.output = os.path.abspath(args.output) print("> output: %s" % args.output) else: args.output = None print("> output: [default]") print("> format: %s" % args.format) print("> header: %s" % args.header) if not os.path.exists(args.bag_file): parser.exit(1, "ERROR: the input valid does not exist: %s" % args.bag_file) if not is_bag(args.bag_file): parser.exit(1, "ERROR: the input valid does not seem a BAG file: %s" % args.bag_file) bf = BAGFile(args.bag_file) tl = None try: tl = bf.tracking_list() except Exception as e: parser.exit(1, "ERROR: issue in tracking-list recovery: %s" % e) tlf = "" if args.header: try: tlf = bf.tracking_list_fields() except Exception as e: parser.exit(1, "ERROR: issue in tracking-list fields recovery: %s" % e) try: from hydroffice.bag.tracklist import TrackList2Csv TrackList2Csv(track_list=tl, csv_file=args.output, header=tlf) except Exception as e: parser.exit(1, "ERROR: issue in output creation: %s" % e) if args.verbose: print("> DONE") if __name__ == "__main__": main() hydroffice.bag-0.2.15/hydroffice/bag/tools/bag_uncertainty.py0000666000000000000000000000540112672544462022362 0ustar 00000000000000from __future__ import absolute_import, division, print_function, unicode_literals import os import logging def main(): logger = logging.getLogger() logger.setLevel(logging.NOTSET) import argparse from hydroffice.bag import BAGFile, is_bag, __version__ app_name = "bag_uncertainty" app_info = "Extraction of uncertainty layer from an OpenNS BAG file, using hydroffice.bag r%s" % __version__ formats = ['ascii', 'geotiff', 'xyz'] parser = argparse.ArgumentParser(prog=app_name, description=app_info) parser.add_argument("bag_file", type=str, help="a valid BAG file from which to extract metadata") parser.add_argument("-f", "--format", help="one of the available file format: " + ", ".join(formats), choices=formats, default="geotiff", metavar='') parser.add_argument("-o", "--output", help="the output file", type=str) parser.add_argument("-v", "--verbose", help="increase output verbosity", action="store_true") args = parser.parse_args() if args.verbose: print("> verbosity: ON") ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) # change to WARNING to reduce verbosity, DEBUG for high verbosity ch_formatter = logging.Formatter('%(levelname)-9s %(name)s.%(funcName)s:%(lineno)d > %(message)s') ch.setFormatter(ch_formatter) logger.addHandler(ch) if args.verbose: print("> input: %s" % args.bag_file) if args.output: args.output = os.path.abspath(args.output) print("> output: %s" % args.output) else: args.output = None print("> output: [default]") print("> format: %s" % args.format) if not os.path.exists(args.bag_file): parser.exit(1, "ERROR: the input valid does not exist: %s" % args.bag_file) if not is_bag(args.bag_file): parser.exit(1, "ERROR: the input valid does not seem a BAG file: %s" % args.bag_file) bf = BAGFile(args.bag_file) bag_meta = None try: bag_meta = bf.populate_metadata() except Exception as e: parser.exit(1, "ERROR: issue in metadata population: %s" % e) bag_uncertainty = None try: bag_uncertainty = bf.uncertainty(mask_nan=False) except Exception as e: parser.exit(1, "ERROR: issue in uncertainty population: %s" % e) try: from hydroffice.bag.uncertainty import Uncertainty2Gdal Uncertainty2Gdal(bag_uncertainty=bag_uncertainty, bag_meta=bag_meta, fmt=args.format, out_file=args.output) except Exception as e: parser.exit(1, "ERROR: issue in output creation: %s" % e) if args.verbose: print("> DONE") if __name__ == "__main__": main() hydroffice.bag-0.2.15/hydroffice/bag/tools/bag_validate.py0000666000000000000000000000276212672544462021615 0ustar 00000000000000from __future__ import absolute_import, division, print_function, unicode_literals import os import logging def main(): logger = logging.getLogger() logger.setLevel(logging.NOTSET) import argparse from hydroffice.bag import BAGFile, is_bag, __version__ app_name = "bag_validate" app_info = "Validation of an OpenNS BAG file, using hydroffice.bag r%s" % __version__ parser = argparse.ArgumentParser(prog=app_name, description=app_info) parser.add_argument("bag_file", type=str, help="a valid BAG file to validate") parser.add_argument("-v", "--verbose", help="increase output verbosity", action="store_true") args = parser.parse_args() if args.verbose: print("> verbosity: ON") ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) # change to WARNING to reduce verbosity, DEBUG for high verbosity ch_formatter = logging.Formatter('%(levelname)-9s %(name)s.%(funcName)s:%(lineno)d > %(message)s') ch.setFormatter(ch_formatter) logger.addHandler(ch) if args.verbose: print("> input: %s" % args.bag_file) if not os.path.exists(args.bag_file): parser.exit(1, "ERROR: the input valid does not exist: %s" % args.bag_file) if not is_bag(args.bag_file): parser.exit(1, "ERROR: the input valid does not seem a BAG file: %s" % args.bag_file) bf = BAGFile(args.bag_file) print(bf.validation_info()) if __name__ == "__main__": main() hydroffice.bag-0.2.15/hydroffice/bag/tools/__init__.py0000666000000000000000000000013412674235465020743 0ustar 00000000000000import logging log = logging.getLogger(__name__) log.addHandler(logging.NullHandler()) hydroffice.bag-0.2.15/hydroffice/bag/tracklist.py0000666000000000000000000000316612672544462020052 0ustar 00000000000000from __future__ import absolute_import, division, print_function, unicode_literals import os import logging log = logging.getLogger(__name__) import numpy as np from .meta import Meta from .helper import BAGError, Helper from . import __version__ class TrackList2Csv(object): default_csv_name = "BAG.tracklist.csv" def __init__(self, track_list, csv_file=None, header=None, comment=None): assert isinstance(track_list, np.ndarray) log.debug("track list shape: %s" % track_list.shape) log.debug("track list size: %s" % track_list.size) self.track_list = track_list if self.track_list.size == 0: log.warning("nothing to export since the tracking list is empty") return self.csv_file = csv_file if csv_file is None: self.csv_file = self.default_csv_name self.csv_file = os.path.abspath(self.csv_file) log.debug("output: %s" % self.csv_file) self.header = header if self.header is None: self.header = str() if type(self.header) is tuple: self.header = bytes(",".join(fld for fld in self.header)) log.debug("header: %s" % self.header) self.comment = comment if self.comment is None: self.comment = "# Exported using BAG tools r%s\n" % bytes(__version__) self.comment = self.comment.encode("utf-8") log.debug("comment: %s" % self.comment) np.savetxt(fname=self.csv_file, X=track_list, fmt=b'%.7g', delimiter=b',', header=self.header, comments=self.comment) hydroffice.bag-0.2.15/hydroffice/bag/uncertainty.py0000666000000000000000000000703012674133225020402 0ustar 00000000000000from __future__ import absolute_import, division, print_function, unicode_literals import os import logging log = logging.getLogger(__name__) import numpy as np from osgeo import gdal, osr from .meta import Meta from .helper import BAGError, Helper from . import __version__ from .bag import BAGFile gdal.UseExceptions() class Uncertainty2Gdal(object): formats = { 'ascii': [b"AAIGrid", "bag.uncertainty.asc"], 'geotiff': [b"GTiff", "bag.uncertainty.tif"], 'xyz': [b"XYZ", "bag.uncertainty.xyz"], } def __init__(self, bag_uncertainty, bag_meta, fmt="geotiff", out_file=None, epsg=None): """Export the elevation layer in one of the listed formats""" assert isinstance(bag_uncertainty, np.ndarray) assert isinstance(bag_meta, Meta) self.bag_unc = bag_uncertainty self.bag_meta = bag_meta # get the IN-MEMORY ogr driver self.mem = gdal.GetDriverByName(b"MEM") if self.mem is None: raise BAGError("%s driver not available.\n" % self.formats[fmt][0]) log.debug("format: %s" % fmt) # set the output file self.out_file = out_file if self.out_file is None: self.out_file = os.path.abspath(self.formats[fmt][1]) log.debug("output: %s" % self.out_file) if os.path.exists(self.out_file): os.remove(self.out_file) log.debug("dtype: %s" % self.bag_unc.dtype) self.rst = self.mem.Create(utf8_path=self.out_file, xsize=self.bag_meta.cols, ysize=self.bag_meta.rows, bands=1, eType=gdal.GDT_Float32) self.rst.SetGeoTransform((self.bag_meta.sw[0], self.bag_meta.res_x, 0, self.bag_meta.ne[1], 0, -self.bag_meta.res_y)) self.bnd = self.rst.GetRasterBand(1) self.bnd.WriteArray(self.bag_unc[::-1]) self.bnd.SetNoDataValue(BAGFile.BAG_NAN) self.srs = osr.SpatialReference() if self.bag_meta.wkt_srs is not None: self.srs.ImportFromWkt(self.bag_meta.wkt_srs) else: log.warning("unable to recover valid spatial reference info") self.rst.SetProjection(self.srs.ExportToWkt()) self.bnd.FlushCache() # get the required ogr driver self.drv = gdal.GetDriverByName(self.formats[fmt][0]) # check if re-projection is required if not epsg: # if not, we just create a copy in the selected format dst_ds = self.drv.CreateCopy(self.out_file, self.rst) dst_ds = None self.rst = None return # we need to change projection: # - we create the output srs dst_srs = osr.SpatialReference() dst_srs.ImportFromEPSG(epsg) dst_wkt = dst_srs.ExportToWkt() # Call AutoCreateWarpedVRT() to fetch default values for target raster dimensions and geotransform tmp_ds = gdal.AutoCreateWarpedVRT(self.rst, None, # src_wkt : left to default value --> will use the one from source dst_wkt, gdal.GRA_NearestNeighbour, 0.125 # error threshold --> use same value as in gdalwarp ) # Create the final warped raster dst_ds = self.drv.CreateCopy(self.out_file, tmp_ds) dst_ds = None self.rst = None hydroffice.bag-0.2.15/hydroffice/bag/__init__.py0000666000000000000000000000117612723323107017574 0ustar 00000000000000""" Hydro-Package BAG """ from __future__ import absolute_import, division, print_function, unicode_literals import logging log = logging.getLogger(__name__) log.addHandler(logging.NullHandler()) from .helper import BAGError from .base import is_bag from .bag import BAGFile __version__ = '0.2.15' __doc__ = 'BAG' __author__ = 'gmasetti@ccom.unh.edu, brc@ccom.unh.edu' __license__ = 'LGPLv3 license' __copyright__ = 'Copyright (c) 2016, University of New Hampshire, Center for Coastal and Ocean Mapping' # def hyo_app(): # return __doc__, __version__ def hyo_lib(): return __doc__, __version__ hydroffice.bag-0.2.15/hydroffice/__init__.py0000666000000000000000000000033312606055312017035 0ustar 00000000000000""" HydrOffice Namespace Packages """ try: import pkg_resources pkg_resources.declare_namespace(__name__) except ImportError: import pkgutil __path__ = pkgutil.extend_path(__path__, __name__) hydroffice.bag-0.2.15/hydroffice.bag.egg-info/0000777000000000000000000000000012723323303017145 5ustar 00000000000000hydroffice.bag-0.2.15/hydroffice.bag.egg-info/dependency_links.txt0000666000000000000000000000000112723323303023213 0ustar 00000000000000 hydroffice.bag-0.2.15/hydroffice.bag.egg-info/entry_points.txt0000666000000000000000000000053112723323303022442 0ustar 00000000000000[console_scripts] bag_bbox = hydroffice.bag.tools.bag_bbox:main bag_elevation = hydroffice.bag.tools.bag_elevation:main bag_metadata = hydroffice.bag.tools.bag_metadata:main bag_tracklist = hydroffice.bag.tools.bag_tracklist:main bag_uncertainty = hydroffice.bag.tools.bag_uncertainty:main bag_validate = hydroffice.bag.tools.bag_validate:main hydroffice.bag-0.2.15/hydroffice.bag.egg-info/namespace_packages.txt0000666000000000000000000000001312723323303023472 0ustar 00000000000000hydroffice hydroffice.bag-0.2.15/hydroffice.bag.egg-info/PKG-INFO0000666000000000000000000002170512723323303020247 0ustar 00000000000000Metadata-Version: 1.1 Name: hydroffice.bag Version: 0.2.15 Summary: A package to manage Bathymetric Attributed Grid (BAG) data files. Home-page: https://bitbucket.org/gmasetti/hyo_bag/ Author: Giuseppe Masetti (CCOM,UNH); Brian R. Calder (CCOM,UNH) Author-email: gmasetti@ccom.unh.edu, brc@ccom.unh.edu License: LGPLv3 license Description: HydrOffice BAG ============== .. image:: https://img.shields.io/pypi/v/hydroffice.bag.svg :target: https://pypi.python.org/pypi/hydroffice.bag :alt: PyPi version .. image:: https://img.shields.io/badge/docs-stable-brightgreen.svg :target: http://giumas.github.io/hyo_bag/stable :alt: Stable Documentation .. image:: https://img.shields.io/badge/docs-latest-brightgreen.svg :target: http://giumas.github.io/hyo_bag/latest :alt: Latest Documentation .. image:: https://ci.appveyor.com/api/projects/status/thng6eg4g05s8mi4?svg=true :target: https://ci.appveyor.com/project/giumas/hyo-bag :alt: AppVeyor Status .. image:: https://travis-ci.org/hydroffice/hyo_bag.svg?branch=master :target: https://travis-ci.org/hydroffice/hyo_bag :alt: Travis-CI Status General Info ------------ .. image:: https://bitbucket.org/ccomjhc/hyo_bag/raw/tip/hydroffice/bag/media/favicon.png :alt: logo HydrOffice is a research development environment for ocean mapping. It provides a collection of hydro-packages, each of them dealing with a specific issue of the field. The main goal is to speed up both algorithms testing and research-2-operation. The BAG hydro-package collects tools for working with BAG files. BAG is a data format by the `ONS-WG `_ (Open Navigation Surface Working Group). Dependencies ------------ For the BAG library, you will need: * ``python`` *[>=2.7, >=3.4]* * ``numpy`` * ``h5py`` * ``lxml`` * ``gdal`` *[<2.0]* * ``PyInstaller`` *[for freezing the tools]* For running some of the example scripts, you might also need: * ``matplotlib`` Other info ---------- * Bitbucket: `https://bitbucket.org/ccomjhc/hyo_bag `_ * Project page: `http://www.hydroffice.org `_ * License: LGPLv3 license (See `LICENSE `_) """"""" History ------- 0.2 ~~~ 2016-05-27 - Added option to read a slice of rows for elevation and uncertainty layers 2016-03-21 - Added option to reproject layers into user-defined EPSG 2015-10-24 - Split BAG Explorer as stand-alone hydro-package 2015-10-09 - Added BAG Explorer - Started Schematron schema for BAG Metadata profile 0.1 ~~~ 2015-03-31 - Initial commit. """"""" Credits ------- Authors ~~~~~~~ HydrOffice BAG is written and maintained by: - `Giuseppe Masetti `_ - `Brian Calder `_ Contributors ~~~~~~~~~~~~ The following wonderful people contributed directly or indirectly to this project: - `Matt Wilson `_ Please add yourself here alphabetically when you submit your first pull request. """"""" How to contribute ================= Every open source project lives from the generous help by contributors that sacrifice their time and this is no different. To make participation as pleasant as possible, this project adheres to the `Code of Conduct`_ by the Python Software Foundation. Here are a few hints and rules to get you started: - Add yourself to the AUTHORS.txt_ file in an alphabetical fashion. Every contribution is valuable and shall be credited. - If your change is noteworthy, add an entry to the changelog_. - No contribution is too small; please submit as many fixes for typos and grammar bloopers as you can! - Don't *ever* break backward compatibility. - *Always* add tests and docs for your code. This is a hard rule; patches with missing tests or documentation won't be merged. If a feature is not tested or documented, it does not exist. - Obey `PEP 8`_ and `PEP 257`_. - Write `good commit messages`_. - Ideally, `collapse`_ your commits, i.e. make your pull requests just one commit. .. note:: If you have something great but aren't sure whether it adheres -- or even can adhere -- to the rules above: **please submit a pull request anyway**! In the best case, we can mold it into something, in the worst case the pull request gets politely closed. There's absolutely nothing to fear. Thank you for considering to contribute! If you have any question or concerns, feel free to reach out to us. .. _`Code of Conduct`: http://www.python.org/psf/codeofconduct/ .. _AUTHORS.txt: https://bitbucket.org/ccomjhc/hyo_bag/raw/tip/AUTHORS.rst .. _changelog: https://bitbucket.org/ccomjhc/hyo_bag/raw/tip/HISTORY.rst .. _`PEP 8`: http://www.python.org/dev/peps/pep-0008/ .. _`PEP 257`: http://www.python.org/dev/peps/pep-0257/ .. _collapse: https://www.mercurial-scm.org/wiki/RebaseExtension .. _`good commit messages`: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html """"""" Banner ====== .. code-block:: python | ========================================================== | | _ _ _ _____ __ __ _ | | | | | | | | | _ |/ _|/ _(_) | | | |_| |_ _ __| |_ __| | | | |_| |_ _ ___ ___ | | | _ | | | |/ _\ | '__| | | | _| _| |/ __/ _ \ | | | | | | |_| | (_| | | \ \_/ / | | | | | (_| __/ | | \_| |_/\__, |\__,_|_| \___/|_| |_| |_|\___\___| | | __/ | | | |___/ | | | | ---------------------------------------------------------- | | Office Tools to Facilitate | | Hydrographic Surveys, Data Review and | | Nautical Chart Compilation | | | | ---------------------------------------------------------- | | For comments/suggestions: | | - matt.wilson@noaa.gov | | - brc@ccom.unh.edu | | - gmasetti@ccom.unh.edu | | | | ========================================================== | Keywords: hydrography ocean mapping survey bag openns Platform: UNKNOWN Classifier: Development Status :: 4 - Beta Classifier: Intended Audience :: Science/Research Classifier: Natural Language :: English Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3) Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.4 Classifier: Programming Language :: Python :: 3.5 Classifier: Topic :: Scientific/Engineering :: GIS Classifier: Topic :: Office/Business :: Office Suites hydroffice.bag-0.2.15/hydroffice.bag.egg-info/requires.txt0000666000000000000000000000002012723323303021535 0ustar 00000000000000lxml numpy gdal hydroffice.bag-0.2.15/hydroffice.bag.egg-info/SOURCES.txt0000666000000000000000000001314012723323303021030 0ustar 00000000000000AUTHORS.rst HISTORY.rst LICENSE MANIFEST.in README.rst setup.cfg setup.py docs/api.rst docs/banner.rst docs/conf.py docs/dev_commands.rst docs/how_to_contribute.rst docs/how_to_install.rst docs/how_to_install_on_linux_mint.rst docs/how_to_release.rst docs/how_to_use.rst docs/in_brief.rst docs/index.rst docs/license.rst docs/make.bat docs/requirements.rst docs/_static/linux_mint_spyder.png docs/_templates/page.html docs/_templates/sidebarintro.html docs/_templates/sidebarlogo.html docs/_theme/hyo/theme.conf docs/_theme/hyo/static/hyo.css_t docs/api/hydroffice.bag.rst docs/api/hydroffice.bag.tools.rst docs/api/hydroffice.rst docs/api/modules.rst examples/run_bag_bbox.py examples/run_bag_elevation.py examples/run_bag_metadata.py examples/run_bag_tracklist.py examples/run_bag_uncertainty.py examples/run_bag_validate.py examples/using_bag_bag.py examples/using_bag_base.py examples/using_bag_bbox.py examples/using_bag_elevation.py examples/using_bag_elevation_with_reprojection.py examples/using_bag_helper.py examples/using_bag_tracklist.py examples/using_bag_uncertainty.py examples/using_bag_uncertainty_with_reprojection.py hydroffice/__init__.py hydroffice.bag.egg-info/PKG-INFO hydroffice.bag.egg-info/SOURCES.txt hydroffice.bag.egg-info/dependency_links.txt hydroffice.bag.egg-info/entry_points.txt hydroffice.bag.egg-info/namespace_packages.txt hydroffice.bag.egg-info/requires.txt hydroffice.bag.egg-info/top_level.txt hydroffice/bag/__init__.py hydroffice/bag/bag.py hydroffice/bag/base.py hydroffice/bag/bbox.py hydroffice/bag/elevation.py hydroffice/bag/helper.py hydroffice/bag/meta.py hydroffice/bag/tracklist.py hydroffice/bag/uncertainty.py hydroffice/bag/iso19139/bag/bag.xsd hydroffice/bag/iso19139/bag/bagCodelists.xml hydroffice/bag/iso19139/bag/extension.xsd hydroffice/bag/iso19139/gco/basicTypes.xsd hydroffice/bag/iso19139/gco/gco.xsd hydroffice/bag/iso19139/gco/gcoBase.xsd hydroffice/bag/iso19139/gco/readme.txt hydroffice/bag/iso19139/gmd/applicationSchema.xsd hydroffice/bag/iso19139/gmd/citation.xsd hydroffice/bag/iso19139/gmd/constraints.xsd hydroffice/bag/iso19139/gmd/content.xsd hydroffice/bag/iso19139/gmd/dataQuality.xsd hydroffice/bag/iso19139/gmd/distribution.xsd hydroffice/bag/iso19139/gmd/extent.xsd hydroffice/bag/iso19139/gmd/freeText.xsd hydroffice/bag/iso19139/gmd/gmd.xsd hydroffice/bag/iso19139/gmd/identification.xsd hydroffice/bag/iso19139/gmd/maintenance.xsd hydroffice/bag/iso19139/gmd/metadataApplication.xsd hydroffice/bag/iso19139/gmd/metadataEntity.xsd hydroffice/bag/iso19139/gmd/metadataExtension.xsd hydroffice/bag/iso19139/gmd/portrayalCatalogue.xsd hydroffice/bag/iso19139/gmd/readme.txt hydroffice/bag/iso19139/gmd/referenceSystem.xsd hydroffice/bag/iso19139/gmd/spatialRepresentation.xsd hydroffice/bag/iso19139/gmi/acquisitionInformation.xsd hydroffice/bag/iso19139/gmi/contentInformation.xsd hydroffice/bag/iso19139/gmi/dataQualityInformation.xsd hydroffice/bag/iso19139/gmi/gmi.xsd hydroffice/bag/iso19139/gmi/metadataEntitySet.xsd hydroffice/bag/iso19139/gmi/spatialRepresentationInformation.xsd hydroffice/bag/iso19139/gml/basicTypes.xsd hydroffice/bag/iso19139/gml/coordinateOperations.xsd hydroffice/bag/iso19139/gml/coordinateReferenceSystems.xsd hydroffice/bag/iso19139/gml/coordinateSystems.xsd hydroffice/bag/iso19139/gml/coverage.xsd hydroffice/bag/iso19139/gml/datums.xsd hydroffice/bag/iso19139/gml/defaultStyle.xsd hydroffice/bag/iso19139/gml/deprecatedTypes.xsd hydroffice/bag/iso19139/gml/dictionary.xsd hydroffice/bag/iso19139/gml/direction.xsd hydroffice/bag/iso19139/gml/dynamicFeature.xsd hydroffice/bag/iso19139/gml/feature.xsd hydroffice/bag/iso19139/gml/geometryAggregates.xsd hydroffice/bag/iso19139/gml/geometryBasic0d1d.xsd hydroffice/bag/iso19139/gml/geometryBasic2d.xsd hydroffice/bag/iso19139/gml/geometryComplexes.xsd hydroffice/bag/iso19139/gml/geometryPrimitives.xsd hydroffice/bag/iso19139/gml/gml.xsd hydroffice/bag/iso19139/gml/gmlBase.xsd hydroffice/bag/iso19139/gml/grids.xsd hydroffice/bag/iso19139/gml/measures.xsd hydroffice/bag/iso19139/gml/observation.xsd hydroffice/bag/iso19139/gml/readme.txt hydroffice/bag/iso19139/gml/referenceSystems.xsd hydroffice/bag/iso19139/gml/temporal.xsd hydroffice/bag/iso19139/gml/temporalReferenceSystems.xsd hydroffice/bag/iso19139/gml/temporalTopology.xsd hydroffice/bag/iso19139/gml/topology.xsd hydroffice/bag/iso19139/gml/units.xsd hydroffice/bag/iso19139/gml/valueObjects.xsd hydroffice/bag/iso19139/gml/3.1.1/smil/smil20-language.xsd hydroffice/bag/iso19139/gml/3.1.1/smil/smil20.xsd hydroffice/bag/iso19139/gml/3.1.1/smil/xml-mod.xsd hydroffice/bag/iso19139/gsr/gsr.xsd hydroffice/bag/iso19139/gsr/readme.txt hydroffice/bag/iso19139/gsr/spatialReferencing.xsd hydroffice/bag/iso19139/gss/geometry.xsd hydroffice/bag/iso19139/gss/gss.xsd hydroffice/bag/iso19139/gss/readme.txt hydroffice/bag/iso19139/gts/gts.xsd hydroffice/bag/iso19139/gts/readme.txt hydroffice/bag/iso19139/gts/temporalObjects.xsd hydroffice/bag/iso19139/xlink/xlinks.xsd hydroffice/bag/iso19757-3/bag_metadata_profile.sch hydroffice/bag/media/BAG.icns hydroffice/bag/media/BAG.ico hydroffice/bag/media/favicon.png hydroffice/bag/media/hyo_button.png hydroffice/bag/samples/bdb_00.bag hydroffice/bag/samples/bdb_00.bag.aux.xml hydroffice/bag/samples/bdb_01.bag hydroffice/bag/samples/bdb_02.bag hydroffice/bag/samples/fake_00.bag hydroffice/bag/tools/__init__.py hydroffice/bag/tools/bag_bbox.py hydroffice/bag/tools/bag_elevation.py hydroffice/bag/tools/bag_metadata.py hydroffice/bag/tools/bag_tracklist.py hydroffice/bag/tools/bag_uncertainty.py hydroffice/bag/tools/bag_validate.py tests/__init__.py tests/test_hydroffice_bag_bag.py tests/test_hydroffice_bag_base.py tests/test_hydroffice_bag_helper.pyhydroffice.bag-0.2.15/hydroffice.bag.egg-info/top_level.txt0000666000000000000000000000001312723323303021671 0ustar 00000000000000hydroffice hydroffice.bag-0.2.15/LICENSE0000666000000000000000000002004412675537250013624 0ustar 00000000000000Copyright Notice and License Terms for: hydroffice.bag - BAG package for HydrOffice Copyright (c) 2016, University of New Hampshire, Center for Coastal and Ocean Mapping Released under a dual license: - Community license (LGPL v3) - Industrial Associate license For more info, visit: http://www.hydroffice.org/license/ ----------------------------------------------------------------------------- GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. hydroffice.bag-0.2.15/MANIFEST.in0000666000000000000000000000030312723323107014335 0ustar 00000000000000# Include the license file include LICENSE include AUTHORS.rst include HISTORY.rst recursive-include examples *.py recursive-include tests *.py recursive-include docs *.* prune docs/_buildhydroffice.bag-0.2.15/PKG-INFO0000666000000000000000000002170512723323303013703 0ustar 00000000000000Metadata-Version: 1.1 Name: hydroffice.bag Version: 0.2.15 Summary: A package to manage Bathymetric Attributed Grid (BAG) data files. Home-page: https://bitbucket.org/gmasetti/hyo_bag/ Author: Giuseppe Masetti (CCOM,UNH); Brian R. Calder (CCOM,UNH) Author-email: gmasetti@ccom.unh.edu, brc@ccom.unh.edu License: LGPLv3 license Description: HydrOffice BAG ============== .. image:: https://img.shields.io/pypi/v/hydroffice.bag.svg :target: https://pypi.python.org/pypi/hydroffice.bag :alt: PyPi version .. image:: https://img.shields.io/badge/docs-stable-brightgreen.svg :target: http://giumas.github.io/hyo_bag/stable :alt: Stable Documentation .. image:: https://img.shields.io/badge/docs-latest-brightgreen.svg :target: http://giumas.github.io/hyo_bag/latest :alt: Latest Documentation .. image:: https://ci.appveyor.com/api/projects/status/thng6eg4g05s8mi4?svg=true :target: https://ci.appveyor.com/project/giumas/hyo-bag :alt: AppVeyor Status .. image:: https://travis-ci.org/hydroffice/hyo_bag.svg?branch=master :target: https://travis-ci.org/hydroffice/hyo_bag :alt: Travis-CI Status General Info ------------ .. image:: https://bitbucket.org/ccomjhc/hyo_bag/raw/tip/hydroffice/bag/media/favicon.png :alt: logo HydrOffice is a research development environment for ocean mapping. It provides a collection of hydro-packages, each of them dealing with a specific issue of the field. The main goal is to speed up both algorithms testing and research-2-operation. The BAG hydro-package collects tools for working with BAG files. BAG is a data format by the `ONS-WG `_ (Open Navigation Surface Working Group). Dependencies ------------ For the BAG library, you will need: * ``python`` *[>=2.7, >=3.4]* * ``numpy`` * ``h5py`` * ``lxml`` * ``gdal`` *[<2.0]* * ``PyInstaller`` *[for freezing the tools]* For running some of the example scripts, you might also need: * ``matplotlib`` Other info ---------- * Bitbucket: `https://bitbucket.org/ccomjhc/hyo_bag `_ * Project page: `http://www.hydroffice.org `_ * License: LGPLv3 license (See `LICENSE `_) """"""" History ------- 0.2 ~~~ 2016-05-27 - Added option to read a slice of rows for elevation and uncertainty layers 2016-03-21 - Added option to reproject layers into user-defined EPSG 2015-10-24 - Split BAG Explorer as stand-alone hydro-package 2015-10-09 - Added BAG Explorer - Started Schematron schema for BAG Metadata profile 0.1 ~~~ 2015-03-31 - Initial commit. """"""" Credits ------- Authors ~~~~~~~ HydrOffice BAG is written and maintained by: - `Giuseppe Masetti `_ - `Brian Calder `_ Contributors ~~~~~~~~~~~~ The following wonderful people contributed directly or indirectly to this project: - `Matt Wilson `_ Please add yourself here alphabetically when you submit your first pull request. """"""" How to contribute ================= Every open source project lives from the generous help by contributors that sacrifice their time and this is no different. To make participation as pleasant as possible, this project adheres to the `Code of Conduct`_ by the Python Software Foundation. Here are a few hints and rules to get you started: - Add yourself to the AUTHORS.txt_ file in an alphabetical fashion. Every contribution is valuable and shall be credited. - If your change is noteworthy, add an entry to the changelog_. - No contribution is too small; please submit as many fixes for typos and grammar bloopers as you can! - Don't *ever* break backward compatibility. - *Always* add tests and docs for your code. This is a hard rule; patches with missing tests or documentation won't be merged. If a feature is not tested or documented, it does not exist. - Obey `PEP 8`_ and `PEP 257`_. - Write `good commit messages`_. - Ideally, `collapse`_ your commits, i.e. make your pull requests just one commit. .. note:: If you have something great but aren't sure whether it adheres -- or even can adhere -- to the rules above: **please submit a pull request anyway**! In the best case, we can mold it into something, in the worst case the pull request gets politely closed. There's absolutely nothing to fear. Thank you for considering to contribute! If you have any question or concerns, feel free to reach out to us. .. _`Code of Conduct`: http://www.python.org/psf/codeofconduct/ .. _AUTHORS.txt: https://bitbucket.org/ccomjhc/hyo_bag/raw/tip/AUTHORS.rst .. _changelog: https://bitbucket.org/ccomjhc/hyo_bag/raw/tip/HISTORY.rst .. _`PEP 8`: http://www.python.org/dev/peps/pep-0008/ .. _`PEP 257`: http://www.python.org/dev/peps/pep-0257/ .. _collapse: https://www.mercurial-scm.org/wiki/RebaseExtension .. _`good commit messages`: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html """"""" Banner ====== .. code-block:: python | ========================================================== | | _ _ _ _____ __ __ _ | | | | | | | | | _ |/ _|/ _(_) | | | |_| |_ _ __| |_ __| | | | |_| |_ _ ___ ___ | | | _ | | | |/ _\ | '__| | | | _| _| |/ __/ _ \ | | | | | | |_| | (_| | | \ \_/ / | | | | | (_| __/ | | \_| |_/\__, |\__,_|_| \___/|_| |_| |_|\___\___| | | __/ | | | |___/ | | | | ---------------------------------------------------------- | | Office Tools to Facilitate | | Hydrographic Surveys, Data Review and | | Nautical Chart Compilation | | | | ---------------------------------------------------------- | | For comments/suggestions: | | - matt.wilson@noaa.gov | | - brc@ccom.unh.edu | | - gmasetti@ccom.unh.edu | | | | ========================================================== | Keywords: hydrography ocean mapping survey bag openns Platform: UNKNOWN Classifier: Development Status :: 4 - Beta Classifier: Intended Audience :: Science/Research Classifier: Natural Language :: English Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3) Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.4 Classifier: Programming Language :: Python :: 3.5 Classifier: Topic :: Scientific/Engineering :: GIS Classifier: Topic :: Office/Business :: Office Suites hydroffice.bag-0.2.15/README.rst0000666000000000000000000000367512706714117014313 0ustar 00000000000000HydrOffice BAG ============== .. image:: https://img.shields.io/pypi/v/hydroffice.bag.svg :target: https://pypi.python.org/pypi/hydroffice.bag :alt: PyPi version .. image:: https://img.shields.io/badge/docs-stable-brightgreen.svg :target: http://giumas.github.io/hyo_bag/stable :alt: Stable Documentation .. image:: https://img.shields.io/badge/docs-latest-brightgreen.svg :target: http://giumas.github.io/hyo_bag/latest :alt: Latest Documentation .. image:: https://ci.appveyor.com/api/projects/status/thng6eg4g05s8mi4?svg=true :target: https://ci.appveyor.com/project/giumas/hyo-bag :alt: AppVeyor Status .. image:: https://travis-ci.org/hydroffice/hyo_bag.svg?branch=master :target: https://travis-ci.org/hydroffice/hyo_bag :alt: Travis-CI Status General Info ------------ .. image:: https://bitbucket.org/ccomjhc/hyo_bag/raw/tip/hydroffice/bag/media/favicon.png :alt: logo HydrOffice is a research development environment for ocean mapping. It provides a collection of hydro-packages, each of them dealing with a specific issue of the field. The main goal is to speed up both algorithms testing and research-2-operation. The BAG hydro-package collects tools for working with BAG files. BAG is a data format by the `ONS-WG `_ (Open Navigation Surface Working Group). Dependencies ------------ For the BAG library, you will need: * ``python`` *[>=2.7, >=3.4]* * ``numpy`` * ``h5py`` * ``lxml`` * ``gdal`` *[<2.0]* * ``PyInstaller`` *[for freezing the tools]* For running some of the example scripts, you might also need: * ``matplotlib`` Other info ---------- * Bitbucket: `https://bitbucket.org/ccomjhc/hyo_bag `_ * Project page: `http://www.hydroffice.org `_ * License: LGPLv3 license (See `LICENSE `_) hydroffice.bag-0.2.15/setup.cfg0000666000000000000000000000036212723323303014423 0ustar 00000000000000[bumpversion] current_version = 0.2.15 files = setup.py hydroffice/bag/__init__.py docs/conf.py [bdist_wheel] universal = 1 [metadata] description-file = README.rst [egg_info] tag_build = tag_date = 0 tag_svn_revision = 0 hydroffice.bag-0.2.15/setup.py0000666000000000000000000001166712723323107014330 0ustar 00000000000000""" A setuptools based setup module. See: https://packaging.python.org/en/latest/distributing.html https://github.com/pypa/sampleproject """ from __future__ import absolute_import, division, print_function # unicode_literals import os import sys # To use a consistent encoding from codecs import open # Always prefer setuptools over distutils from setuptools import setup, find_packages # --------------------------------------------------------------------------- # Some helper stuff # --------------------------------------------------------------------------- here = os.path.abspath(os.path.dirname(__file__)) def is_windows(): """ Check if the current OS is Windows """ return (sys.platform == 'win32') or (os.name is "nt") def txt_read(*paths): """ Build a file path from *paths* and return the textual contents """ with open(os.path.join(here, *paths), encoding='utf-8') as f: return f.read() # --------------------------------------------------------------------------- # Populate dictionary with settings # --------------------------------------------------------------------------- # Create a dict with the basic information that is passed to setup after keys are added. setup_args = dict() setup_args['name'] = 'hydroffice.bag' setup_args['version'] = '0.2.15' setup_args['url'] = 'https://bitbucket.org/gmasetti/hyo_bag/' setup_args['license'] = 'LGPLv3 license' setup_args['author'] = 'Giuseppe Masetti (CCOM,UNH); Brian R. Calder (CCOM,UNH)' setup_args['author_email'] = 'gmasetti@ccom.unh.edu, brc@ccom.unh.edu' # # descriptive stuff # description = 'A package to manage Bathymetric Attributed Grid (BAG) data files.' setup_args['description'] = description setup_args['long_description'] = (txt_read('README.rst') + '\n\n\"\"\"\"\"\"\"\n\n' + txt_read('HISTORY.rst') + '\n\n\"\"\"\"\"\"\"\n\n' + txt_read('AUTHORS.rst') + '\n\n\"\"\"\"\"\"\"\n\n' + txt_read(os.path.join('docs', 'how_to_contribute.rst')) + '\n\n\"\"\"\"\"\"\"\n\n' + txt_read(os.path.join('docs', 'banner.rst'))) setup_args['classifiers'] = \ [ # https://pypi.python.org/pypi?%3Aaction=list_classifiers 'Development Status :: 4 - Beta', 'Intended Audience :: Science/Research', 'Natural Language :: English', 'License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)', 'Operating System :: OS Independent', 'Programming Language :: Python', 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', 'Topic :: Scientific/Engineering :: GIS', 'Topic :: Office/Business :: Office Suites', ] setup_args['keywords'] = "hydrography ocean mapping survey bag openns" # # code stuff # # requirements setup_args['setup_requires'] =\ [ "setuptools", "wheel", ] setup_args['install_requires'] =\ [ "lxml", "numpy", "gdal", # <2.0 or >=2.1 for freezing ] if not is_windows(): setup_args['install_requires'].append("h5py") # since there are issues in building it from pypi on Win # hydroffice namespace, packages and other files setup_args['namespace_packages'] = ['hydroffice'] setup_args['packages'] = find_packages(exclude=["*.tests", "*.tests.*", "tests.*", "tests", "*.test*", ]) setup_args['package_data'] =\ { '': ['media/*.png', 'media/*.ico', 'media/*.icns', 'media/*.txt',], 'hydroffice.bag': [ 'iso19139/bag/*', 'iso19139/gco/*', 'iso19139/gmd/*', 'iso19139/gmi/*', 'iso19139/gml/*.xsd', 'iso19139/gml/*.txt', 'iso19139/gml/3.1.1/smil/*', 'iso19139/gsr/*', 'iso19139/gss/*', 'iso19139/gts/*', 'iso19139/xlink/*', 'iso19757-3/*', 'samples/*', ], } setup_args['test_suite'] = "tests" setup_args['entry_points'] =\ { 'console_scripts': ['bag_bbox = hydroffice.bag.tools.bag_bbox:main', 'bag_elevation = hydroffice.bag.tools.bag_elevation:main', 'bag_metadata = hydroffice.bag.tools.bag_metadata:main', 'bag_tracklist = hydroffice.bag.tools.bag_tracklist:main', 'bag_uncertainty = hydroffice.bag.tools.bag_uncertainty:main', 'bag_validate = hydroffice.bag.tools.bag_validate:main'], } # --------------------------------------------------------------------------- # Do the actual setup now # --------------------------------------------------------------------------- setup(**setup_args) hydroffice.bag-0.2.15/tests/0000777000000000000000000000000012723323303013743 5ustar 00000000000000hydroffice.bag-0.2.15/tests/test_hydroffice_bag_bag.py0000666000000000000000000000074012672544462021137 0ustar 00000000000000from __future__ import absolute_import, division, print_function, unicode_literals import unittest import os from hydroffice.bag.bag import BAGFile class TestBAGFile(unittest.TestCase): def setUp(self): pass def tearDown(self): pass def test_is_instance(self): self.assertTrue(True) def suite(): s = unittest.TestSuite() s.addTests(unittest.TestLoader().loadTestsFromTestCase(TestBAGFile)) return s hydroffice.bag-0.2.15/tests/test_hydroffice_bag_base.py0000666000000000000000000000260112672544462021316 0ustar 00000000000000from __future__ import absolute_import, division, print_function, unicode_literals import unittest import os from hydroffice.bag.helper import Helper, BAGError from hydroffice.bag.base import is_bag, File class TestBagBase(unittest.TestCase): def setUp(self): self.file_bag_0 = os.path.join(Helper.samples_folder(), "bdb_00.bag") self.file_bag_1 = os.path.join(Helper.samples_folder(), "bdb_01.bag") self.file_fake_0 = os.path.join(Helper.samples_folder(), "fake_00.bag") def tearDown(self): pass def test_is_bag(self): self.assertTrue(is_bag(self.file_bag_0)) self.assertTrue(is_bag(self.file_bag_1)) self.assertFalse(is_bag(self.file_fake_0)) def test_bag_File_raise(self): with self.assertRaises(IOError): File(self.file_fake_0) def test_bag_File_open(self): self.assertIsNotNone(File(self.file_bag_0)) self.assertIsNotNone(File(self.file_bag_1)) def test_bag_File_filename(self): bag_0 = File(self.file_bag_0) self.assertEqual(os.path.abspath(self.file_bag_0), bag_0.filename) bag_1 = File(self.file_bag_1) self.assertEqual(os.path.abspath(self.file_bag_1), bag_1.filename) def suite(): s = unittest.TestSuite() s.addTests(unittest.TestLoader().loadTestsFromTestCase(TestBagBase)) return s hydroffice.bag-0.2.15/tests/test_hydroffice_bag_helper.py0000666000000000000000000000210512672544462021662 0ustar 00000000000000from __future__ import absolute_import, division, print_function, unicode_literals import unittest import os from hydroffice.bag.helper import Helper from hydroffice.bag.helper import BAGError class TestBAGError(unittest.TestCase): def setUp(self): self.err = BAGError("test") def tearDown(self): pass def test_is_instance(self): self.assertTrue(isinstance(self.err, Exception)) def test_raise(self): with self.assertRaises(BAGError): raise self.err try: raise self.err except BAGError as e: self.assertIn("test", str(e)) def test_has_message(self): assert hasattr(self.err, 'message') class TestBagHelper(unittest.TestCase): def test_bag_samples_folder(self): assert os.path.exists(Helper.samples_folder()) def suite(): s = unittest.TestSuite() s.addTests(unittest.TestLoader().loadTestsFromTestCase(TestBAGError)) s.addTests(unittest.TestLoader().loadTestsFromTestCase(TestBagHelper)) return s hydroffice.bag-0.2.15/tests/__init__.py0000666000000000000000000000000212676223256016061 0ustar 00000000000000