From eafe41cf7ca45686d0c7f7849d7ace5b66ca17e6 Mon Sep 17 00:00:00 2001 From: Robin Wimmers Date: Wed, 8 Nov 2023 17:24:03 +0100 Subject: [PATCH] chore: init commit py-vibracore --- .coveragerc | 3 + .flake8 | 6 + .github/dependabot.yml | 10 + .github/workflows/deploy_docs.yaml | 33 + .github/workflows/release_pypi.yaml | 43 + .github/workflows/test.yaml | 106 ++ README.md | 102 ++ docs/_static/css/index.css | 16 + docs/conf.py | 62 + docs/index.rst | 21 + docs/tree/getting_started.rst | 24 + docs/tree/reference.rst | 4 + notebooks/NBxxxxx_SBRA.ipynb | 610 ++++++++ notebooks/NBxxxxx_impact_force.ipynb | 438 ++++++ pyproject.toml | 93 ++ requirements.txt | 327 +++++ run_super_linter.sh | 18 + src/pyvibracore/__init__.py | 11 + src/pyvibracore/_version.py | 1 + src/pyvibracore/api.py | 187 +++ src/pyvibracore/input/__init__.py | 0 src/pyvibracore/input/constants.py | 171 +++ .../input/impact_force_properties.py | 290 ++++ src/pyvibracore/input/vibration_properties.py | 535 +++++++ src/pyvibracore/results/__init__.py | 0 .../results/impact_force_result.py | 301 ++++ src/pyvibracore/results/vibration_result.py | 337 +++++ tests/__init__.py | 0 tests/conftest.py | 45 + tests/data/cpt.gef | 1278 +++++++++++++++++ tests/response/bag_response.json | 68 + tests/response/classify_response.json | 1 + tests/response/impact_force_response.json | 25 + tests/test_impact_force.py | 64 + tests/test_vibration_cur166.py | 62 + 35 files changed, 5292 insertions(+) create mode 100644 .coveragerc create mode 100644 .flake8 create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/deploy_docs.yaml create mode 100644 .github/workflows/release_pypi.yaml create mode 100644 .github/workflows/test.yaml create mode 100644 docs/_static/css/index.css create mode 100644 docs/conf.py create mode 100644 docs/index.rst create mode 100644 docs/tree/getting_started.rst create mode 100644 docs/tree/reference.rst create mode 100644 notebooks/NBxxxxx_SBRA.ipynb create mode 100644 notebooks/NBxxxxx_impact_force.ipynb create mode 100644 pyproject.toml create mode 100644 requirements.txt create mode 100755 run_super_linter.sh create mode 100644 src/pyvibracore/__init__.py create mode 100644 src/pyvibracore/_version.py create mode 100644 src/pyvibracore/api.py create mode 100644 src/pyvibracore/input/__init__.py create mode 100644 src/pyvibracore/input/constants.py create mode 100644 src/pyvibracore/input/impact_force_properties.py create mode 100644 src/pyvibracore/input/vibration_properties.py create mode 100644 src/pyvibracore/results/__init__.py create mode 100644 src/pyvibracore/results/impact_force_result.py create mode 100644 src/pyvibracore/results/vibration_result.py create mode 100644 tests/__init__.py create mode 100644 tests/conftest.py create mode 100644 tests/data/cpt.gef create mode 100644 tests/response/bag_response.json create mode 100644 tests/response/classify_response.json create mode 100644 tests/response/impact_force_response.json create mode 100644 tests/test_impact_force.py create mode 100644 tests/test_vibration_cur166.py diff --git a/.coveragerc b/.coveragerc new file mode 100644 index 0000000..283b93b --- /dev/null +++ b/.coveragerc @@ -0,0 +1,3 @@ +[run] +omit = */tests/* +source = src/pyvibracore \ No newline at end of file diff --git a/.flake8 b/.flake8 new file mode 100644 index 0000000..83aec3b --- /dev/null +++ b/.flake8 @@ -0,0 +1,6 @@ +[flake8] +# just stop shouting as black decides line lengths. +max-line-length = 180 +# E203, W504: due to black fmt +ignore = E203,W503 +exclude = ["test*"] \ No newline at end of file diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..b728efb --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,10 @@ +version: 2 +updates: + - package-ecosystem: "pip" + directory: "/" + schedule: + interval: "daily" + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" diff --git a/.github/workflows/deploy_docs.yaml b/.github/workflows/deploy_docs.yaml new file mode 100644 index 0000000..058ba1e --- /dev/null +++ b/.github/workflows/deploy_docs.yaml @@ -0,0 +1,33 @@ +name: deploy docs + +on: + push: + branches: + - main + +jobs: + deploy_docs: + name: Deploy docs + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v3 + + - name: Install python 3.9 + uses: actions/setup-python@v4 + with: + python-version: 3.9 + + - name: Install dependencies + run: | + python -m pip install --upgrade pip setuptools + pip install -r requirements.txt + pip install . + + - name: Build docs + run: sphinx-build -b html docs public + + - name: Publish docs + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./public \ No newline at end of file diff --git a/.github/workflows/release_pypi.yaml b/.github/workflows/release_pypi.yaml new file mode 100644 index 0000000..55a1ca3 --- /dev/null +++ b/.github/workflows/release_pypi.yaml @@ -0,0 +1,43 @@ +name: Release + +on: + push: + tags: ['*'] + +jobs: + deploy: + runs-on: ubuntu-latest + + environment: + name: pypi + url: https://pypi.org/p/py-vibracore + + # Mandatory permission for trusted publishing to PyPi + permissions: + id-token: write + + steps: + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.11" + + - name: Install dependencies + run: | + pip install setuptools build + + - name: Build a binary wheel and a source tarball + run: python3 -m build + + - name: Store the distribution packages + uses: actions/upload-artifact@v3 + with: + name: python-package-distributions + path: dist/ + + - name: Publish distribution 📦 to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + user: __token__ + password: ${{ secrets.PYPI_TOKEN }} diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml new file mode 100644 index 0000000..473c5e9 --- /dev/null +++ b/.github/workflows/test.yaml @@ -0,0 +1,106 @@ +name: Test + +on: + push: + paths-ignore: + - "docs/**" + - "**.md" + pull_request: + paths-ignore: + - "docs/**" + - "**.md" + workflow_call: + +jobs: + test: + name: Unit test + runs-on: ubuntu-latest + strategy: + matrix: + python-version: + - '3.9' + - '3.10' + - '3.11' + steps: + - uses: actions/checkout@v3 + + - name: Install python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dependencies + run: | + python -m pip install --upgrade pip setuptools + # shellcheck disable=SC2102 + pip install -e .[test] + + - name: Test + run: coverage run -m pytest + + - name: Post coverage results + uses: coverallsapp/github-action@v2 + with: + flag-name: run-${{ matrix.python-version }} + parallel: true + + finish: + needs: test + if: ${{ always() }} + runs-on: ubuntu-latest + steps: + - name: Coveralls Finished + uses: coverallsapp/github-action@v2 + with: + parallel-finished: true + + lint: + name: Formatting check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + # Full git history is needed to get a proper list of changed test_files within `super-linter` + fetch-depth: 0 + + - name: Lint + uses: github/super-linter@v5 + env: + VALIDATE_ALL_CODEBASE: false + DEFAULT_BRANCH: main + + VALIDATE_JSCPD: false + VALIDATE_CSS: false + VALIDATE_BASH: false + VALIDATE_YAML: false + VALIDATE_PYTHON_PYLINT: false + VALIDATE_NATURAL_LANGUAGE: false + VALIDATE_MARKDOWN: false + + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + LINTER_RULES_PATH: / + PYTHON_BLACK_CONFIG_FILE: pyproject.toml + PYTHON_ISORT_CONFIG_FILE: pyproject.toml + PYTHON_MYPY_CONFIG_FILE: pyproject.toml + PYTHON_FLAKE8_CONFIG_FILE: .flake8 + + test_docs: + name: Test docs + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Install python 3.9 + uses: actions/setup-python@v4 + with: + python-version: 3.9 + + - name: Install dependencies + run: | + python -m pip install --upgrade pip setuptools + pip install -r requirements.txt + pip install . + + - name: Build docs + run: sphinx-build -b html docs public \ No newline at end of file diff --git a/README.md b/README.md index 09e25eb..0d7cb23 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,104 @@ # py-vibracore Public python SDK for the CEMS VibraCore web-API + +[![Checked with mypy](https://www.mypy-lang.org/static/mypy_badge.svg)](http://mypy-lang.org/) +[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) +[![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336)](https://pycqa.github.io/isort/) + + +This repository is created by [CEMS BV](https://cemsbv.nl/) and is a public python wrapper around the CEMS [VibraCore web-API](https://nuclei.cemsbv.io/#/vibracore/api). + +# Installation + +To install a package in this repository run: + +`$ pip install py-vibracore` + + +## ENV VARS + +To use `py-vibracore` add the follow ENV vars to your environment. Or provide them when asked. + +``` +* NUCLEI_TOKEN + - Your NUCLEI user token +``` + +You can obtain your `NUCLEI_TOKEN` on [NUCLEI](https://nuclei.cemsbv.io/#/). +Go to `personal-access-tokens` and create a new user token. + +# Contribution + +## Environment + +We recommend developing in Python3.9 with a clean virtual environment (using `virtualenv` or `conda`), installing the requirements from the requirements.txt file: + +Example using `virtualenv` and `pip` to install the dependencies in a new environment .env on Linux: + +```bash +python -m venv .env +source .env/bin/activate +python -m pip install --upgrade pip setuptools +pip install -r requirements.txt +pip install -e . +``` + +## Documentation + +Build the docs: + +```bash +python -m pip install --upgrade pip setuptools +pip install -r requirements.txt +pip install . + +sphinx-build -b html docs public +``` + +## Format + +We format our code with black and isort. + +```bash +black --config "pyproject.toml" src/pyvibracore tests notebooks +isort --settings-path "pyproject.toml" src/pyvibracore tests notebooks +``` + +## Lint + +To maintain code quality we use the GitHub super-linter. + +To run the linters locally, run the `run_super_linters.sh` bash script from the root directory. + +## UnitTest + +Test the software with the use of coverage: + +```bash +python -m pip install --upgrade pip setuptools +pip install -r requirements.txt +pip install -e . +coverage run -m pytest +``` + +## Requirements + +Requirements are autogenerated by the `pip-compile` command with python 3.9 + +Install pip-tools with: + +```bash +pip install pip-tools +``` + +Generate requirements.txt file with: + +```bash +pip-compile --extra=test --extra=lint --extra=docs --extra=notebook --output-file=requirements.txt pyproject.toml +``` + +Update the requirements within the defined ranges with: + +```bash +pip-compile --upgrade --extra=test --extra=lint --extra=docs --extra=notebook --output-file=requirements.txt pyproject.toml +``` \ No newline at end of file diff --git a/docs/_static/css/index.css b/docs/_static/css/index.css new file mode 100644 index 0000000..cd2bff1 --- /dev/null +++ b/docs/_static/css/index.css @@ -0,0 +1,16 @@ + + +.red { + color: red; +} + +.blue { + color: blue; +} + +.green { + color: green; +} +.body { + max-width: 1200px !important; +} diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 0000000..8dec4c6 --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,62 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# 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. + +import os +import sys +from typing import List + +sys.path.insert(0, os.path.abspath("../src")) +os.environ["DOC_PATH"] = os.path.dirname(__file__) + +import pyvibracore # noqa: E402 + +project = "py-vibracore" +copyright = "2023, CEMS BV" +author = "Robin Wimmers" + +# The full version, including alpha/beta/rc tags +release = pyvibracore.__version__ + +# 'sphinx.ext.napoleon' Used for numpy docstring support +extensions = [ + "IPython.sphinxext.ipython_console_highlighting", + "IPython.sphinxext.ipython_directive", + "sphinx.ext.napoleon", + "sphinx.ext.viewcode", + "sphinx.ext.intersphinx", + "sphinx.ext.autodoc", + "sphinx.ext.mathjax", + "sphinx_autodoc_typehints", + "matplotlib.sphinxext.plot_directive", +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns: List = [] + +# -- 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 = "sphinx_rtd_theme" + +# 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"] + +html_css_files = ["css/index.css"] diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 0000000..f77c630 --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,21 @@ +Welcome to py-VibraCore documentation! +======================================= + +The `py-Vibracore` library is created by `CEMS BV `_ and is a public +python wrapper around the CEMS `VibraCore web-API `_. + + + +Indices and tables +================== + +* :ref:`genindex` + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + tree/getting_started.rst + + tree/reference.rst + diff --git a/docs/tree/getting_started.rst b/docs/tree/getting_started.rst new file mode 100644 index 0000000..e8eca0f --- /dev/null +++ b/docs/tree/getting_started.rst @@ -0,0 +1,24 @@ +Installing py-vibracore +======================= +To install :code:`pyvibracore`, we strongly recommend using Python Package Index (PyPI). +You can install :code:`pyvibracore` with: + +.. code-block:: bash + + pip install py-vibracore + + +How to import py-vibracore +========================== + +Getting started with pyvibracore is easy done by importing the :code:`pyvibracore` library: + +.. ipython:: python + + import pyvibracore + +or any equivalent :code:`import` statement. + + +How to initialize class +========================== diff --git a/docs/tree/reference.rst b/docs/tree/reference.rst new file mode 100644 index 0000000..9ae9ff8 --- /dev/null +++ b/docs/tree/reference.rst @@ -0,0 +1,4 @@ + +Reference +========= + diff --git a/notebooks/NBxxxxx_SBRA.ipynb b/notebooks/NBxxxxx_SBRA.ipynb new file mode 100644 index 0000000..c4df333 --- /dev/null +++ b/notebooks/NBxxxxx_SBRA.ipynb @@ -0,0 +1,610 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "9ffe2ba7", + "metadata": {}, + "source": [ + "# VibraCore report\n", + "\n", + "______________________________________________________________________\n", + "\n", + "**Authors:** \\\n", + "Robin Wimmers\\\n", + "Jorrit de Vries\n", + "\n", + "Notebook with stepwise explanation of reading and processing soil and building data and writing the results to a standard template. For more information about VibraCore, take a look at the documentation!\n", + "\n", + "The notebook is organized in the following sections:\n", + "\n", + "1. [Project Information](#Project-Information)\n", + "1. [Create Dataframe with Buildings](#Create-Dataframe-with-Buildings)\n", + "1. [Add Building Specific SBR-A Characteristics](#Add-Building-Specific-SBR-A-Characteristics)\n", + "1. [Results](#Results)\n", + "1. [Create Classes](#Create-Classes)\n", + "1. [Create Graphs and Figures](#Create-Graphs-and-Figures)\n", + "1. [Writing and Downloading Report](#Writing-and-Downloading-Report)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "cae0e1fc", + "metadata": {}, + "outputs": [], + "source": [ + "from typing import Dict\n", + "import io\n", + "import logging\n", + "\n", + "import pygef\n", + "from ipywidgets import FileUpload\n", + "from IPython.display import display\n", + "import fiona\n", + "from nuclei.client import NucleiClient\n", + "from pyvibracore import api\n", + "from pyvibracore.input.vibration_properties import (\n", + " create_cur166_payload,\n", + " create_prepal_payload,\n", + " get_buildings_geodataframe,\n", + " get_normative_building,\n", + " create_single_payload,\n", + " create_vibration_report_payload,\n", + ")\n", + "from pyvibracore.results.vibration_result import (\n", + " plot_reduction,\n", + " VibrationResults,\n", + " map_payload,\n", + " plot_reduction,\n", + ")\n", + "from shapely.geometry import LineString, Polygon, Point\n", + "import geopandas as gpd\n", + "import pandas as pd\n", + "import contextily as ctx\n", + "\n", + "from tqdm import tqdm\n", + "\n", + "pd.set_option(\"display.max_columns\", None)\n", + "logging.getLogger().setLevel(logging.INFO)" + ] + }, + { + "cell_type": "markdown", + "id": "bdbfb503-5ba9-49a3-908a-a9be0b036249", + "metadata": {}, + "source": [ + "### Start a Nuclei client session\n", + "\n", + "In the next cell we will create a nuclei-client with a session that takes care of the\n", + "authentication and communication with the Nuclei server.\n", + "\n", + "You will need to provide your user token, which can be obtained by login in to the [nuclei website](https://nuclei.cemsbv.io/) with your personal credentials and going to the \"API Access Tokens\" section." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c0ef4a32", + "metadata": {}, + "outputs": [], + "source": [ + "# import os\n", + "# os.environ[\"NUCLEI_TOKEN\"] = \"\"\n", + "\n", + "client = NucleiClient()" + ] + }, + { + "cell_type": "markdown", + "id": "857f1299", + "metadata": {}, + "source": [ + "# Project Information\n", + "\n", + "Below standard information of the project is gathered:" + ] + }, + { + "cell_type": "markdown", + "id": "c07eb48f", + "metadata": {}, + "source": [ + "
\n", + "USER INPUT REQUIRED BELOW:\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f2ae709e-7d07-4f1f-be86-114085cb72e0", + "metadata": {}, + "outputs": [], + "source": [ + "# General input data\n", + "project_id = 21305 # also used to select cpt\n", + "project_remark = \"Voorbeeld Notebook\" # Optional additional information\n", + "author = \"N. Uclei\"\n", + "project_name = \"Vibration prediction\"\n", + "\n", + "# ** methode:\n", + "# Vibration prediction methode\n", + "# Accepted values: [\"prepal\", \"cur166\"]\n", + "methode = \"prepal\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2dbb82cb-d51e-4425-8f19-39981bc20f4c", + "metadata": {}, + "outputs": [], + "source": [ + "# Points in RD_new\n", + "(west, south, east, north) = (120614, 482434, 121003, 482670)\n", + "\n", + "# define project location can be Polygon, Linestring or path\n", + "project_location = LineString([[120676, 482515], [120842, 482513]])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bd6aedd1-b713-46cf-8c7c-eeef0dfe2800", + "metadata": {}, + "outputs": [], + "source": [ + "\"\"\"\n", + "Characteristics SBR-A\n", + "\"\"\"\n", + "\n", + "# ** category:\n", + "# Building category based on the SBR A table 10.1.\n", + "# Accepted values: [\"one\", \"two\"]\n", + "category = \"two\"\n", + "\n", + "# ** frequency:\n", + "# The dominate frequency [Hz]\n", + "frequency = 30.0 # Hz\n", + "\n", + "# ** vibration_type:\n", + "# Based on the SBR A table 10.4.\n", + "# Accepted values: ['short-term', 'repeated-short-term', 'continuous']\n", + "vibration_type = \"continuous\"\n", + "\n", + "# ** vibration_sensitive\n", + "# Has the building structure a vibration sensitive\n", + "# foundation. Based on the SBR A chapter 10.2.5\n", + "# Accepted values: [True, False]\n", + "vibration_sensitive = False\n", + "\n", + "# ** structural_condition\n", + "# Based on the SBR A table 10.2.\n", + "# Accepted values: ['sensitive', 'normal']\n", + "structural_condition = \"normal\"\n", + "\n", + "# **frequency_vibration_sensitive\n", + "# The dominate frequency for vibration sensitive building [Hz].\n", + "frequency_vibration_sensitive = 40.0 # Hz\n", + "\n", + "# ** thickness\n", + "# Layer thickness settlement-sensitive layer [m]\n", + "thickness = 8.0\n", + "\n", + "# ** referenceLocation\n", + "# Based on CUR 166-1997 table 5.16 and 5.17\n", + "# Accepted values: [\"Amsterdam\", \"Maasvlakte\", \"Rotterdam\", \"Groningen\", \"Den Haag\", \"Tiel\", \"Eindhoven\"]\n", + "reference_location = \"Amsterdam\"\n", + "\n", + "# ** measurement_type\n", + "# Type of measurement based on the SBR A table 9.2.\n", + "# Accepted values: [\"indicative\", \"limited\", \"extensive\" ]\n", + "measurement_type = \"extensive\"\n", + "\n", + "# ** methode_safety_factor\n", + "# Parameter that indicated how the safety factor is calculated.\n", + "# Accepted values: [\"CUR\", \"exact\" ]\n", + "methode_safety_factor = \"exact\"\n", + "\n", + "# ** monumental\n", + "# Has the building structure a monumental status. Based on the SBR A table 10.3.\n", + "# Accepted values: [\"False\", \"True\" ]\n", + "monumental = False" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d8bd5c15-30d8-4049-a35f-af492fd07434", + "metadata": {}, + "outputs": [], + "source": [ + "\"\"\"\n", + "Characteristics CUR166\n", + "\"\"\"\n", + "\n", + "# ** material_floor\n", + "# Based on CUR 166 3rd edition table 5.20\n", + "# Accepted values: [\"concrete\", \"wood\" ]\n", + "material_floor = \"concrete\"\n", + "\n", + "# ** installation_type\n", + "# Based on the SBR A table 10.4.\n", + "# Accepted values: [\"vibrate\", \"driving\" ]\n", + "installation_type = \"vibrate\"\n", + "\n", + "# ** building_part\n", + "# Based on CUR 166 3rd edition table 5.20 or 5.21\n", + "# Accepted values: [\"floor\", \"wall\" ]\n", + "building_part = \"floor\"\n", + "\n", + "# ** building_part\n", + "# Based on CUR 166 3rd edition table 5.19\n", + "# Accepted values: [\"shallow foundation\", \"concrete piles\", \"timber piles\", \"steel piles\" ]\n", + "foundation_element = \"shallow foundation\"\n", + "\n", + "# ** safety_factor\n", + "# SBR-A overschreidingskans\n", + "safety_factor = 0.05 # safety_factor = SBR-A overschreidingskans\n", + "\n", + "# ** vibration_direction\n", + "# Based on CUR 166 3rd edition table 5.22\n", + "# Accepted values: [\"vertical\", \"horizontal\"]\n", + "vibration_direction = \"vertical\"\n", + "\n", + "# ** force\n", + "# impact force [kN]\n", + "force = 1350\n", + "\n", + "# ** force_reduction\n", + "# factor 5% wanneer trilblok wordt gebruikt,\n", + "# factor 10% - 20% wanneer heiblok wordt gebruikt,\n", + "# 0% wanneer slagkracht berekend obv conusweerstand.\n", + "force_reduction = 5" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2a5a88f9-7021-4330-aab8-c46351ea52ca", + "metadata": {}, + "outputs": [], + "source": [ + "\"\"\"\n", + "Characteristics PrePal\n", + "\"\"\"\n", + "# ** heireductie_factor\n", + "# 1, inwendig heien = 0.3 - 0.5 [-]\n", + "heireductie_factor = 1\n", + "\n", + "# ** cone_resistance\n", + "# Characteristics cone resistance [MPa]\n", + "cone_resistance = 36\n", + "\n", + "# ** cone_resistance_reduction\n", + "# Reduction of the cone resistance [%]\n", + "cone_resistance_reduction = 0.0\n", + "\n", + "# ** unit_weight\n", + "# soil unit weight [kN/m3]\n", + "unit_weight = 20\n", + "\n", + "# ** elastic_modulus_factor\n", + "# Elastic modulus factor of the soil [-].\n", + "elastic_modulus_factor = 15\n", + "\n", + "# ** poisson_ratio\n", + "# Poisson’s ratio of the soil [-]\n", + "poisson_ratio = 0.2\n", + "\n", + "# ** pile_shape\n", + "# Shape of the pile.\n", + "# Accepted values: [\"square\", \"round\"]\n", + "pile_shape = \"square\"\n", + "\n", + "# ** pile_size\n", + "# Size of the pile [m]\n", + "# Single side length of the piles, diameter when pile pile is round\n", + "pile_size = 220e-3\n", + "\n", + "# ** hysteretic_damping_barkan\n", + "# hysteretic damping barkan [m^-1]\n", + "hysteretic_damping_barkan = -0.05" + ] + }, + { + "cell_type": "markdown", + "id": "509206cf", + "metadata": {}, + "source": [ + "
\n", + "END USER INPUT\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a26b2496", + "metadata": {}, + "outputs": [], + "source": [ + "# Location of the piles\n", + "if isinstance(project_location, str):\n", + " location = (\n", + " gpd.read_file(project_location)\n", + " .explode(index_parts=False)[\"geometry\"]\n", + " .values[0]\n", + " .geoms\n", + " )[0]\n", + "elif isinstance(project_location, (LineString, Polygon, Point)):\n", + " location = project_location\n", + "else:\n", + " ValueError(\"Not valid\")\n", + "location" + ] + }, + { + "cell_type": "markdown", + "id": "47620a8a-79df-4e5d-b426-a6d387bd9028", + "metadata": {}, + "source": [ + "# Create Dataframe with Buildings\n", + "Create a dataframe containing buildings with their \"depth\".First add all the buildings, then delete the unnecessary ones from the dataframe. The depth of the building perpendicular to the vibration source face has to be added as shown in the figure below." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "522019b6-4a8d-47f4-becf-6c889facaf97", + "metadata": {}, + "outputs": [], + "source": [ + "upload = FileUpload(accept=\".geojson\", multiple=False)\n", + "buildings = get_buildings_geodataframe(\n", + " west,\n", + " south,\n", + " east,\n", + " north,\n", + " category,\n", + " monumental,\n", + " structural_condition,\n", + " vibration_sensitive,\n", + " thickness,\n", + " foundation_element,\n", + " material_floor,\n", + ")\n", + "\n", + "# save building data to file\n", + "buildings.to_file(\"dataframe.geojson\", driver=\"GeoJSON\")" + ] + }, + { + "cell_type": "markdown", + "id": "14be3dcf-36ad-423c-9940-8f21c2139d8a", + "metadata": {}, + "source": [ + "
\n", + "After uploading you own file, please make sure that you (re)run all the code blocks below.
\n", + " You can use the `run>Run Selected Cell and All Below` from the menu bar to run all code blocks\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "caa57152-ef26-413e-a3c0-809f15fd585a", + "metadata": {}, + "outputs": [], + "source": [ + "display(upload)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "02f7f920-9b17-4573-9f07-e06ca3d08de0", + "metadata": {}, + "outputs": [], + "source": [ + "if len(upload.value) == 1:\n", + " logging.info(\"Use uploaded geojson file\")\n", + " content = upload.value[0].content.tobytes()\n", + " with fiona.BytesCollection(content) as f:\n", + " crs = f.crs\n", + " buildings = gpd.GeoDataFrame.from_features(f, crs=crs).explode(\n", + " index_parts=False\n", + " )\n", + "\n", + "fig = map_payload(buildings, location)\n", + "\n", + "# add basemap\n", + "ctx.add_basemap(fig.axes[0], crs=\"EPSG:28992\", source=ctx.providers.Esri.WorldTopoMap)" + ] + }, + { + "cell_type": "markdown", + "id": "4eabb865", + "metadata": {}, + "source": [ + "# Create Classes\n", + "Below standard information of the project is gathered:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f22da2c4-b9c5-4e3d-85da-0dd56406233c", + "metadata": {}, + "outputs": [], + "source": [ + "if methode.lower() == \"prepal\":\n", + " multi_vibration_payload = create_prepal_payload(\n", + " buildings,\n", + " location,\n", + " pile_shape,\n", + " pile_size,\n", + " cone_resistance,\n", + " cone_resistance_reduction,\n", + " unit_weight,\n", + " elastic_modulus_factor,\n", + " poisson_ratio,\n", + " frequency,\n", + " vibration_type,\n", + " frequency_vibration_sensitive,\n", + " measurement_type,\n", + " hysteretic_damping_barkan,\n", + " )\n", + "\n", + " response = api.get_prepal_calculation(client, payload=multi_vibration_payload)\n", + "elif methode.lower() == \"cur166\":\n", + " multi_vibration_payload = create_cur166_payload(\n", + " buildings,\n", + " location,\n", + " force,\n", + " force_reduction,\n", + " installation_type,\n", + " building_part,\n", + " safety_factor,\n", + " vibration_direction,\n", + " frequency,\n", + " vibration_type,\n", + " frequency_vibration_sensitive,\n", + " reference_location,\n", + " measurement_type,\n", + " methode_safety_factor,\n", + " )\n", + "\n", + " response = api.get_cur166_calculation(client, payload=multi_vibration_payload)\n", + "else:\n", + " raise NotImplementedError(\n", + " f\"Methode {methode} not implemented. Accepted values: [prepal, cur166]\"\n", + " )\n", + "\n", + "results = VibrationResults.from_api_response(response)" + ] + }, + { + "cell_type": "markdown", + "id": "b7cfd5c1", + "metadata": {}, + "source": [ + "# Results\n", + "To get an overview of the result of the vibration calculation run the code-block below." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "eabce151", + "metadata": {}, + "outputs": [], + "source": [ + "fig = results.map(location)\n", + "\n", + "# add basemap\n", + "ctx.add_basemap(fig.axes[0], crs=\"EPSG:28992\", source=ctx.providers.Esri.WorldTopoMap)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b80a7668-f53e-4364-ac97-4181376a5d73", + "metadata": {}, + "outputs": [], + "source": [ + "name = get_normative_building(buildings, location, category=\"two\")\n", + "if name:\n", + " single_payload = create_single_payload(multi_vibration_payload, name=name)\n", + " result = client.call_endpoint(\n", + " \"VibraCore\", f\"/{methode.lower()}/validation/single\", single_payload\n", + " )\n", + " fig = plot_reduction(result, sensitive=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "acd5c8e2-5f2a-4412-9cf8-1bd501de3679", + "metadata": {}, + "outputs": [], + "source": [ + "name = get_normative_building(buildings, location, category=\"one\")\n", + "if name:\n", + " single_payload = create_single_payload(multi_vibration_payload, name=name)\n", + " result = client.call_endpoint(\n", + " \"VibraCore\", f\"/{methode.lower()}/validation/single\", single_payload\n", + " )\n", + " fig = plot_reduction(result, sensitive=True)" + ] + }, + { + "cell_type": "markdown", + "id": "7cc96321-d9f7-4fca-982d-9a36a0ac2458", + "metadata": {}, + "source": [ + "# Writing and Downloading Report\n", + "\n", + "The following code wil call the report API." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "23e817d5-8115-4d33-b797-165a7265c70a", + "metadata": {}, + "outputs": [], + "source": [ + "# Create report\n", + "report_payload = create_vibration_report_payload(\n", + " multi_vibration_payload,\n", + " project_name=project_name,\n", + " project_id=str(project_id),\n", + " author=author,\n", + ")\n", + "\n", + "if methode.lower() == \"prepal\":\n", + " report = api.get_prepal_report(client=client, payload=report_payload)\n", + "elif methode.lower() == \"cur166\":\n", + " report = api.get_cur166_report(client=client, payload=report_payload)\n", + "else:\n", + " raise NotImplementedError(\n", + " f\"Methode {methode} not implemented. Accepted values: [prepal, cur166]\"\n", + " )\n", + "\n", + "with open(f\"{project_name} report.pdf\", \"wb\") as f:\n", + " f.write(report)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/NBxxxxx_impact_force.ipynb b/notebooks/NBxxxxx_impact_force.ipynb new file mode 100644 index 0000000..16a71bd --- /dev/null +++ b/notebooks/NBxxxxx_impact_force.ipynb @@ -0,0 +1,438 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "immune-fusion", + "metadata": {}, + "source": [ + "# VibraCore report\n", + "\n", + "______________________________________________________________________\n", + "\n", + "**Authors: Robin Wimmers (r.wimmers@cemsbv.io)**\n", + "\n", + "Notebook with stepwise explanation of reading and processing CPT data and writing the results to a standard template. For more information about VibraCore, take a look at the documentation!\n", + "\n", + "The structure of the tutorial is as follows:\n", + "\n", + "- [Project definition](#Input-definition)\n", + "- [Download CPT's in project](#Download-CPTs-in-project)\n", + "- [Classify CPTs](#Classify-CPTs)\n", + "- [Call VibraCore-API](#Call-VibraCore-API)\n", + "- [View Results](#View-Results)\n", + "- [Report](#Report)\n" + ] + }, + { + "cell_type": "markdown", + "id": "alive-diesel", + "metadata": {}, + "source": [ + "Now we can import the required packages:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "paperback-flour", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from typing import Dict\n", + "import io\n", + "import logging\n", + "\n", + "import pygef\n", + "from nuclei.client import NucleiClient\n", + "from pyvibracore import api\n", + "from pyvibracore.input.impact_force_properties import (\n", + " VibrationSource,\n", + " create_multi_cpt_impact_force_payload,\n", + " create_multi_cpt_impact_force_report_payload,\n", + ")\n", + "from pyvibracore.results.impact_force_result import MultiCalculationData\n", + "\n", + "import contextily as ctx\n", + "import pandas as pd\n", + "from tqdm import tqdm\n", + "\n", + "pd.set_option(\"display.max_columns\", None)\n", + "logging.getLogger().setLevel(logging.INFO)" + ] + }, + { + "cell_type": "markdown", + "id": "0b04d2c6-d7d2-410d-9674-23978885d5c1", + "metadata": {}, + "source": [ + "### Start a Nuclei client session\n", + "\n", + "In the next cell we will create a nuclei-client with a session that takes care of the\n", + "authentication and communication with the Nuclei server.\n", + "\n", + "You will need to provide your user token, which can be obtained by login in to the [nuclei website](https://nuclei.cemsbv.io/) with your personal credentials and going to the \"API Access Tokens\" section." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0670bfcc", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# import os\n", + "# os.environ[\"NUCLEI_TOKEN\"] = \"\"\n", + "\n", + "client = NucleiClient()" + ] + }, + { + "cell_type": "markdown", + "id": "elegant-jumping", + "metadata": {}, + "source": [ + "# Input definition" + ] + }, + { + "cell_type": "markdown", + "id": "bfa5cb30-bace-471b-aae0-c756f10b458c", + "metadata": {}, + "source": [ + "
\n", + "USER INPUT REQUIRED BELOW:\n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4048ba44-971f-4f28-882f-a5778161a33d", + "metadata": {}, + "outputs": [], + "source": [ + "# General input data\n", + "project_id = 21305 # also used to select cpt\n", + "project_remark = \"Voorbeeld Notebook\" # Optional additional information\n", + "author = \"N. Uclei\"\n", + "project_name = \"Impact force calculation\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "13ccaae1-386f-453d-ad8c-f3a191787c25", + "metadata": {}, + "outputs": [], + "source": [ + "# Specify CPT selection from project\n", + "\n", + "# ** cpt_selection\n", + "# Specify a list of CPTs names (i.e. BRO ID).\n", + "cpt_selection = [\n", + " \"CPT000000200908\",\n", + " \"CPT000000200909\",\n", + " \"CPT000000112268\",\n", + " \"CPT000000112278\",\n", + " \"CPT000000200904\",\n", + " \"CPT000000200905\",\n", + " \"CPT000000112265\",\n", + " \"CPT000000200906\",\n", + " \"CPT000000200907\",\n", + "]\n", + "\n", + "\n", + "# ** classify_metode:\n", + "# Metode used to classify CPT data.\n", + "# Accepted values: [\"beenJefferies\", \"machineLearning\", \"nen\", \"table\", \"robertson\", \"table\"]\n", + "classify_metode = \"robertson\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ef963382-f763-4459-851e-1b23874002a1", + "metadata": {}, + "outputs": [], + "source": [ + "# Sheet pile information (single sheetpile (1 sheet))\n", + "name = \"AZ12-770\"\n", + "\n", + "# ** slot_resistance_specific\n", + "# kPa push = 5 / vibrate = 10 for new sheet piles\n", + "slot_resistance_specific = 5\n", + "\n", + "# ** amount_of_sheet_piles\n", + "# push = 1 / vibrate = 2\n", + "amount_of_sheet_piles = 2" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9996334b-04ee-4480-a1c2-a9036cc10b73", + "metadata": {}, + "outputs": [], + "source": [ + "# Installation information\n", + "\n", + "# ** drive_strategy\n", + "# Accepted values: [push, vibrate]\n", + "drive_strategy = \"vibrate\"\n", + "\n", + "# ** installation_level_offset\n", + "# installation level [m w.r.t offset]\n", + "installation_level_offset = -20" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9749edda-c3f0-4b1e-b93e-559eac0571ef", + "metadata": {}, + "outputs": [], + "source": [ + "# ** friction_strategy\n", + "# Defines the the strategy on how to computed the sleeve friction.\n", + "# Accepted values: [SlipFrictionStrategy, CPTFrictionStrategy]\n", + "friction_strategy = \"CPTFrictionStrategy\"" + ] + }, + { + "cell_type": "markdown", + "id": "d714a627-6ad9-4e63-b27d-7ad766655d38", + "metadata": {}, + "source": [ + "
\n", + "END USER INPUT\n", + "
" + ] + }, + { + "cell_type": "markdown", + "id": "automated-truth", + "metadata": {}, + "source": [ + "#### Download CPTs in project" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "commercial-pleasure", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Get CPTs\n", + "# loop over the cpt id's and fetch file from BRO\n", + "cptdata_objects = []\n", + "for file_metadata in tqdm(cpt_selection, desc=\"Download CPT's from BRO\"):\n", + " # download CPT from BRO\n", + " response = client.session.get(\n", + " url=f\"https://publiek.broservices.nl/sr/cpt/v1/objects/{file_metadata}\"\n", + " )\n", + " if not response.ok:\n", + " print(\n", + " f\"RuntimeError: {file_metadata} could not be donwloaded from de BRO server. \\n Statuse code: {response.status_code}\"\n", + " )\n", + " continue\n", + "\n", + " cpt = pygef.read_cpt(io.BytesIO(response.content))\n", + " object.__setattr__(cpt, \"alias\", file_metadata)\n", + " object.__setattr__(cpt, \"data\", cpt.data.drop_nulls())\n", + " cptdata_objects.append(cpt)" + ] + }, + { + "cell_type": "markdown", + "id": "intimate-stroke", + "metadata": {}, + "source": [ + "#### Classify CPTs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "8087c1a5-2cde-4154-b2e1-579d436cd1d8", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "classify_tables: Dict[str, dict] = {}\n", + "\n", + "for i, cpt in tqdm(enumerate(cptdata_objects), desc=\"Classify CPT's from BRO\"):\n", + " # classify CPT with CPTCore\n", + " payload = {\n", + " \"aggregateLayersPenalty\": 5,\n", + " \"minimumSegmentLength\": 5,\n", + " \"data\": {\n", + " \"coneResistance\": cpt.data.get_column(\"coneResistance\")\n", + " .clip(0, 50)\n", + " .to_list(),\n", + " \"correctedPenetrationLength\": cpt.data.get_column(\"depth\").to_list(),\n", + " \"localFriction\": cpt.data.get_column(\"localFriction\").clip(0, 50).to_list(),\n", + " },\n", + " \"verticalPositionOffset\": cpt.delivered_vertical_position_offset,\n", + " \"x\": cpt.delivered_location.x,\n", + " \"y\": cpt.delivered_location.y,\n", + " }\n", + " if \"porePressureU2\" in cpt.data.columns:\n", + " payload[\"data\"][\"porePressureU2\"] = (\n", + " cpt.data.get_column(\"porePressureU2\").clip(0, 50).to_list(),\n", + " )[0]\n", + "\n", + " response = client.session.post(\n", + " f\"https://crux-nuclei.com/api/cptcore/v1/classify/{classify_metode}\",\n", + " json=payload,\n", + " )\n", + " if not response.ok:\n", + " cptdata_objects.pop(i)\n", + " print(\n", + " f\"RuntimeError: {file_metadata} could not be classified. \\n Statuse code: {response.status_code}\"\n", + " )\n", + " continue\n", + " classify_tables[cpt.alias] = response.json()" + ] + }, + { + "cell_type": "markdown", + "id": "f5881aff-0e1c-4306-a5e8-9abe2b3445e0", + "metadata": {}, + "source": [ + "#### Call VibraCore-API" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f1843772-665b-4be3-9bfc-6c7f33956fcd", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# get pile properties\n", + "vibration_source = VibrationSource.from_sheet_pile_name(\n", + " name, amount_of_sheet_piles, slot_resistance_specific\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "c19432be-dff9-46ff-b353-2a63a794b978", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Get results\n", + "multi_cpt_payload = create_multi_cpt_impact_force_payload(\n", + " cptdata_objects=cptdata_objects,\n", + " classify_tables=classify_tables,\n", + " vibration_source=vibration_source,\n", + " friction_strategy=friction_strategy,\n", + " drive_strategy=drive_strategy,\n", + " installation_level_offset=installation_level_offset,\n", + ")\n", + "\n", + "api_response = api.get_impact_force_calculation(\n", + " client=client, payload=multi_cpt_payload\n", + ")\n", + "\n", + "results = MultiCalculationData.from_api_response(\n", + " response_dict=api_response,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "9c6100ad-49b0-485c-945d-4b4fc101c66b", + "metadata": {}, + "source": [ + "## View Results" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a6fb9f06", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "fig = results.plot(figsize=[20, 15])\n", + "\n", + "# add basemap\n", + "ctx.add_basemap(fig.axes[0], crs=\"EPSG:28992\", source=ctx.providers.Esri.WorldTopoMap)" + ] + }, + { + "cell_type": "markdown", + "id": "1d7e4091", + "metadata": {}, + "source": [ + "## Report" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bd60c820-6681-42ef-93fc-fdf08b821773", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Create report\n", + "report_payload = create_multi_cpt_impact_force_report_payload(\n", + " multi_cpt_payload,\n", + " project_name=project_name,\n", + " project_id=str(project_id),\n", + " author=author,\n", + ")\n", + "\n", + "report = api.get_impact_force_report(client=client, payload=report_payload)\n", + "\n", + "with open(f\"{project_name} report.pdf\", \"wb\") as f:\n", + " f.write(report)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.18" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..253c672 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,93 @@ +[build-system] +requires = ["setuptools"] +build-backend = "setuptools.build_meta" + +[project] +name = "py-vibracore" +version = "0.0.1" +description = "Public python SDK for the CEMS VibraCore web-API." +requires-python = ">=3.9" +dependencies = [ + "pygef", + "cems-nuclei==0.4.0.b2", + "geopandas", + "pyogrio" +] +license = { file = "LICENSE" } +readme = "README.md" +keywords = ["API", "VibraCore", "CEMS", "CRUX"] + +[project.urls] +repository = "https://github.com/cemsbv/py-vibracore" + +[project.optional-dependencies] +test = ["coveralls", "pytest", "requests-mock"] +docs = [ + "Sphinx==6.1.3", + "sphinx-autodoc-typehints==1.22", + "ipython==8.11.0", + "asteroid-sphinx-theme==0.0.3", + "sphinx_rtd_theme==1.2.0" +] +# lint dependencies from github super-linter v5 +# See https://github.com/super-linter/super-linter/tree/main/dependencies/python +lint = [ + "mypy==1.5.1", + "mypy-extensions==1.0.0", + "tomli==2.0.1", + "typing_extensions==4.7.1", + "black[jupyter]==23.3.0", + "click==8.1.3", + "packaging==23.2", + "pathspec==0.11.1", + "platformdirs==3.5.1", + "tomli==2.0.1,", + "isort==5.12.0", + "flake8==6.0.0", + "mccabe==0.7.0", + "pycodestyle==2.10.0", + "pyflakes==3.0.1", + 'pandas-stubs>2,<3', + 'types-tqdm>4,<5', +] +notebook = [ + "contextily", + "tqdm[notebook]", + "ipympl" +] + +[tool.isort] +profile = "black" +multi_line_output = 3 +include_trailing_comma = true +force_grid_wrap = 0 +use_parentheses = true +ensure_newline_before_comments = true +line_length = 88 + +[tool.mypy] +files = ["pyvibracore"] +mypy_path = 'src' +namespace_packages = true +show_error_codes = true +warn_redundant_casts = true +warn_unused_ignores = true +warn_unused_configs = true +disallow_subclassing_any = true +no_implicit_optional = true +disallow_untyped_defs = true +disallow_any_generics = false +disallow_untyped_calls = true +warn_return_any = false +no_implicit_reexport = true +strict_equality = true +install_types = true + +[[tool.mypy.overrides]] +module = ["matplotlib.*", "requests.*", "pytest.*"] +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = ["tests/*"] +disallow_untyped_defs = false +disallow_untyped_calls = false diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..b7ca1ad --- /dev/null +++ b/requirements.txt @@ -0,0 +1,327 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --extra=docs --extra=lint --extra=notebook --extra=test --output-file=requirements.txt pyproject.toml +# +affine==2.4.0 + # via rasterio +alabaster==0.7.13 + # via sphinx +asteroid-sphinx-theme==0.0.3 + # via py-vibracore (pyproject.toml) +asttokens==2.4.1 + # via stack-data +attrs==23.1.0 + # via + # fiona + # rasterio +babel==2.13.1 + # via sphinx +backcall==0.2.0 + # via ipython +black[jupyter]==23.3.0 + # via + # black + # py-vibracore (pyproject.toml) +cems-nuclei==0.4.0b2 + # via py-vibracore (pyproject.toml) +certifi==2023.7.22 + # via + # fiona + # pyogrio + # pyproj + # rasterio + # requests +charset-normalizer==3.3.2 + # via requests +click==8.1.3 + # via + # black + # click-plugins + # cligj + # fiona + # mercantile + # py-vibracore (pyproject.toml) + # rasterio +click-plugins==1.1.1 + # via + # fiona + # rasterio +cligj==0.7.2 + # via + # fiona + # rasterio +comm==0.2.0 + # via ipywidgets +contextily==1.4.0 + # via py-vibracore (pyproject.toml) +contourpy==1.2.0 + # via matplotlib +coverage==6.5.0 + # via coveralls +coveralls==3.3.1 + # via py-vibracore (pyproject.toml) +cycler==0.12.1 + # via matplotlib +decorator==5.1.1 + # via ipython +docopt==0.6.2 + # via coveralls +docutils==0.18.1 + # via + # sphinx + # sphinx-rtd-theme +exceptiongroup==1.1.3 + # via pytest +executing==2.0.1 + # via stack-data +fiona==1.9.5 + # via geopandas +flake8==6.0.0 + # via py-vibracore (pyproject.toml) +fonttools==4.44.0 + # via matplotlib +gef-file-to-map==0.1.0 + # via pygef +geographiclib==2.0 + # via geopy +geopandas==0.14.0 + # via py-vibracore (pyproject.toml) +geopy==2.4.0 + # via contextily +idna==3.4 + # via requests +imagesize==1.4.1 + # via sphinx +importlib-metadata==6.8.0 + # via + # fiona + # sphinx +importlib-resources==6.1.0 + # via matplotlib +iniconfig==2.0.0 + # via pytest +ipython==8.11.0 + # via + # black + # ipywidgets + # py-vibracore (pyproject.toml) +ipywidgets==8.1.1 + # via tqdm +isort==5.12.0 + # via py-vibracore (pyproject.toml) +jedi==0.19.1 + # via ipython +jinja2==3.1.2 + # via sphinx +joblib==1.3.2 + # via contextily +jupyterlab-widgets==3.0.9 + # via ipywidgets +kiwisolver==1.4.5 + # via matplotlib +lxml==4.9.3 + # via pygef +markupsafe==2.1.3 + # via jinja2 +matplotlib==3.8.1 + # via + # contextily + # pygef +matplotlib-inline==0.1.6 + # via ipython +mccabe==0.7.0 + # via + # flake8 + # py-vibracore (pyproject.toml) +mercantile==1.2.1 + # via contextily +mypy==1.5.1 + # via py-vibracore (pyproject.toml) +mypy-extensions==1.0.0 + # via + # black + # mypy + # py-vibracore (pyproject.toml) +numpy==1.26.1 + # via + # contourpy + # matplotlib + # pandas + # pandas-stubs + # pyarrow + # pyogrio + # rasterio + # shapely + # snuggs +packaging==23.2 + # via + # black + # geopandas + # matplotlib + # py-vibracore (pyproject.toml) + # pyogrio + # pytest + # sphinx +pandas==2.1.2 + # via geopandas +pandas-stubs==2.1.1.230928 + # via py-vibracore (pyproject.toml) +parso==0.8.3 + # via jedi +pathspec==0.11.1 + # via + # black + # py-vibracore (pyproject.toml) +pexpect==4.8.0 + # via ipython +pickleshare==0.7.5 + # via ipython +pillow==10.1.0 + # via + # contextily + # matplotlib +platformdirs==3.5.1 + # via + # black + # py-vibracore (pyproject.toml) +pluggy==1.3.0 + # via pytest +polars[pyarrow]==0.19.12 + # via + # polars + # pygef +prompt-toolkit==3.0.39 + # via ipython +ptyprocess==0.7.0 + # via pexpect +pure-eval==0.2.2 + # via stack-data +pyarrow==14.0.0 + # via polars +pycodestyle==2.10.0 + # via + # flake8 + # py-vibracore (pyproject.toml) +pyflakes==3.0.1 + # via + # flake8 + # py-vibracore (pyproject.toml) +pygef==0.10.0 + # via py-vibracore (pyproject.toml) +pygments==2.16.1 + # via + # ipython + # sphinx +pyjwt==2.6.0 + # via cems-nuclei +pyogrio==0.7.2 + # via py-vibracore (pyproject.toml) +pyparsing==3.1.1 + # via + # matplotlib + # snuggs +pyproj==3.6.1 + # via geopandas +pytest==7.4.3 + # via py-vibracore (pyproject.toml) +python-dateutil==2.8.2 + # via + # matplotlib + # pandas +pytz==2023.3.post1 + # via pandas +rasterio==1.3.9 + # via contextily +requests==2.31.0 + # via + # cems-nuclei + # contextily + # coveralls + # sphinx +shapely==2.0.2 + # via geopandas +six==1.16.0 + # via + # asttokens + # fiona + # python-dateutil +snowballstemmer==2.2.0 + # via sphinx +snuggs==1.4.7 + # via rasterio +sphinx==6.1.3 + # via + # asteroid-sphinx-theme + # py-vibracore (pyproject.toml) + # sphinx-autodoc-typehints + # sphinx-rtd-theme + # sphinxcontrib-applehelp + # sphinxcontrib-devhelp + # sphinxcontrib-htmlhelp + # sphinxcontrib-jquery + # sphinxcontrib-qthelp + # sphinxcontrib-serializinghtml +sphinx-autodoc-typehints==1.22 + # via py-vibracore (pyproject.toml) +sphinx-rtd-theme==1.2.0 + # via py-vibracore (pyproject.toml) +sphinxcontrib-applehelp==1.0.7 + # via sphinx +sphinxcontrib-devhelp==1.0.5 + # via sphinx +sphinxcontrib-htmlhelp==2.0.4 + # via sphinx +sphinxcontrib-jquery==4.1 + # via sphinx-rtd-theme +sphinxcontrib-jsmath==1.0.1 + # via sphinx +sphinxcontrib-qthelp==1.0.6 + # via sphinx +sphinxcontrib-serializinghtml==1.1.9 + # via sphinx +stack-data==0.6.3 + # via ipython +tokenize-rt==5.2.0 + # via black +tomli==2.0.1 + # via + # black + # mypy + # py-vibracore (pyproject.toml) + # pytest +tqdm[notebook]==4.66.1 + # via py-vibracore (pyproject.toml) +traitlets==5.13.0 + # via + # comm + # ipython + # ipywidgets + # matplotlib-inline +types-pytz==2023.3.1.1 + # via pandas-stubs +types-tqdm==4.66.0.3 + # via py-vibracore (pyproject.toml) +typing-extensions==4.7.1 + # via + # black + # mypy + # py-vibracore (pyproject.toml) +tzdata==2023.3 + # via pandas +urllib3==2.0.7 + # via requests +wcwidth==0.2.9 + # via prompt-toolkit +widgetsnbextension==4.0.9 + # via ipywidgets +xyzservices==2023.10.1 + # via contextily +zipp==3.17.0 + # via + # importlib-metadata + # importlib-resources + +# The following packages are considered to be unsafe in a requirements file: +# setuptools diff --git a/run_super_linter.sh b/run_super_linter.sh new file mode 100755 index 0000000..64c4117 --- /dev/null +++ b/run_super_linter.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +docker run \ +--env VALIDATE_ALL_CODEBASE=false \ +--env RUN_LOCAL=true \ +--env VALIDATE_JSCPD=false \ +--env VALIDATE_CSS=false \ +--env VALIDATE_BASH=false \ +--env VALIDATE_YAML=false \ +--env VALIDATE_PYTHON_PYLINT=false \ +--env VALIDATE_NATURAL_LANGUAGE=false \ +--env VALIDATE_MARKDOWN=false \ +--env LINTER_RULES_PATH=/ \ +--env PYTHON_BLACK_CONFIG_FILE=pyproject.toml \ +--env PYTHON_ISORT_CONFIG_FILE=pyproject.toml \ +--env PYTHON_MYPY_CONFIG_FILE=pyproject.toml \ +--env PYTHON_FLAKE8_CONFIG_FILE=.flake8 \ +-v $(pwd):/tmp/lint github/super-linter:v5 \ No newline at end of file diff --git a/src/pyvibracore/__init__.py b/src/pyvibracore/__init__.py new file mode 100644 index 0000000..5967dff --- /dev/null +++ b/src/pyvibracore/__init__.py @@ -0,0 +1,11 @@ +from ._version import __version__ +from .input import impact_force_properties, vibration_properties +from .results import impact_force_result, vibration_result + +__all__ = [ + "__version__", + "impact_force_properties", + "impact_force_result", + "vibration_result", + "vibration_properties", +] diff --git a/src/pyvibracore/_version.py b/src/pyvibracore/_version.py new file mode 100644 index 0000000..f102a9c --- /dev/null +++ b/src/pyvibracore/_version.py @@ -0,0 +1 @@ +__version__ = "0.0.1" diff --git a/src/pyvibracore/api.py b/src/pyvibracore/api.py new file mode 100644 index 0000000..e859296 --- /dev/null +++ b/src/pyvibracore/api.py @@ -0,0 +1,187 @@ +import logging +from time import sleep + +from nuclei.client import NucleiClient +from requests import Response + + +def wait_until_ticket_is_ready(client: NucleiClient, ticket: Response) -> None: + if ticket.status_code != 200: + raise RuntimeError(rf"{ticket.text}") + + status = "STARTED" + sleep_time = 0.05 + while status in ["PENDING", "STARTED", "RETRY"]: + sleep_time = min(sleep_time * 2, 10) + sleep(sleep_time) + response = client.call_endpoint( + "VibraCore", "/get-task-status", schema=ticket.json(), return_response=True + ) + if response.status_code != 200: + raise RuntimeError(rf"{response.text}") + status = response.json()["state"] + + if status == "FAILURE": + raise RuntimeError(f'{response.json()["msg"]}\n{response.json()["traceback"]}') + + +def get_impact_force_report(client: NucleiClient, payload: dict) -> bytes: + """ + Wrapper around the VibraCore endpoint "/impact-force/report". + + Parameters + ---------- + client: NucleiClient + client object created by [nuclei](https://github.com/cemsbv/nuclei) + payload: dict + the payload of the request, can be created by calling `create_multi_cpt_impact_force_report_payload()` + """ + logging.info( + "Generate report... \n" + "Depending on the amount of CPT's this can take a while." + ) + ticket = client.call_endpoint( + "VibraCore", + "/impact-force/report", + schema=payload, + return_response=True, + ) + + wait_until_ticket_is_ready(client=client, ticket=ticket) + + return client.call_endpoint("VibraCore", "/get-task-results", schema=ticket.json()) + + +def get_impact_force_calculation(client: NucleiClient, payload: dict) -> bytes: + """ + Wrapper around the VibraCore endpoint "/impact-force/calculation/multi". + + Parameters + ---------- + client: NucleiClient + client object created by [nuclei](https://github.com/cemsbv/nuclei) + payload: dict + the payload of the request, can be created by calling `create_multi_cpt_impact_force_payload()` + """ + logging.info( + "Calculation impact force... \n" + "Depending on the amount of CPT's this can take a while." + ) + ticket = client.call_endpoint( + "VibraCore", + "/impact-force/calculation/multi", + schema=payload, + return_response=True, + ) + + wait_until_ticket_is_ready(client=client, ticket=ticket) + + return client.call_endpoint("VibraCore", "/get-task-results", schema=ticket.json()) + + +def get_prepal_calculation(client: NucleiClient, payload: dict) -> bytes: + """ + Wrapper around the VibraCore endpoint "/prepal/validation/multi". + + Parameters + ---------- + client: NucleiClient + client object created by [nuclei](https://github.com/cemsbv/nuclei) + payload: dict + the payload of the request, can be created by calling `create_prepal_payload()` + """ + logging.info( + "Prepal prediction... \n" + "Depending on the amount of buildings this can take a while." + ) + ticket = client.call_endpoint( + "VibraCore", + "/prepal/validation/multi", + schema=payload, + return_response=True, + ) + + wait_until_ticket_is_ready(client=client, ticket=ticket) + + return client.call_endpoint("VibraCore", "/get-task-results", schema=ticket.json()) + + +def get_cur166_calculation(client: NucleiClient, payload: dict) -> bytes: + """ + Wrapper around the VibraCore endpoint "/cur166/validation/multi". + + Parameters + ---------- + client: NucleiClient + client object created by [nuclei](https://github.com/cemsbv/nuclei) + payload: dict + the payload of the request, can be created by calling `create_cur166_payload()` + """ + logging.info( + "CUR166 prediction... \n" + "Depending on the amount of buildings this can take a while." + ) + ticket = client.call_endpoint( + "VibraCore", + "/cur166/validation/multi", + schema=payload, + return_response=True, + ) + + wait_until_ticket_is_ready(client=client, ticket=ticket) + + return client.call_endpoint("VibraCore", "/get-task-results", schema=ticket.json()) + + +def get_cur166_report(client: NucleiClient, payload: dict) -> bytes: + """ + Wrapper around the VibraCore endpoint "/cur166/report". + + Parameters + ---------- + client: NucleiClient + client object created by [nuclei](https://github.com/cemsbv/nuclei) + payload: dict + the payload of the request, can be created by calling `create_vibration_report_payload()` + """ + logging.info( + "Generate report... \n" + "Depending on the amount of buildings this can take a while." + ) + ticket = client.call_endpoint( + "VibraCore", + "/cur166/report", + schema=payload, + return_response=True, + ) + + wait_until_ticket_is_ready(client=client, ticket=ticket) + + return client.call_endpoint("VibraCore", "/get-task-results", schema=ticket.json()) + + +def get_prepal_report(client: NucleiClient, payload: dict) -> bytes: + """ + Wrapper around the VibraCore endpoint "/cur166/report". + + Parameters + ---------- + client: NucleiClient + client object created by [nuclei](https://github.com/cemsbv/nuclei) + payload: dict + the payload of the request, can be created by calling `create_vibration_report_payload()` + """ + logging.info( + "Generate report... \n" + "Depending on the amount of buildings this can take a while." + ) + ticket = client.call_endpoint( + "VibraCore", + "/prepal/report", + schema=payload, + return_response=True, + ) + + wait_until_ticket_is_ready(client=client, ticket=ticket) + + return client.call_endpoint("VibraCore", "/get-task-results", schema=ticket.json()) diff --git a/src/pyvibracore/input/__init__.py b/src/pyvibracore/input/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/pyvibracore/input/constants.py b/src/pyvibracore/input/constants.py new file mode 100644 index 0000000..214e9a9 --- /dev/null +++ b/src/pyvibracore/input/constants.py @@ -0,0 +1,171 @@ +SHEETPILE_REFERENCE_PROFILES = [ + {"label": "AZ12-770", "area_tip_specific": 0.00925, "area_shaft_specific": 1.86}, + {"label": "AZ13-770", "area_tip_specific": 0.00969, "area_shaft_specific": 1.86}, + {"label": "AZ14-770", "area_tip_specific": 0.01013, "area_shaft_specific": 1.86}, + {"label": "AZ12-700", "area_tip_specific": 0.00862, "area_shaft_specific": 1.72}, + {"label": "AZ13-700", "area_tip_specific": 0.00943, "area_shaft_specific": 1.72}, + {"label": "AZ14-700", "area_tip_specific": 0.01023, "area_shaft_specific": 1.72}, + {"label": "AZ17-700", "area_tip_specific": 0.00931, "area_shaft_specific": 1.86}, + {"label": "AZ18-700", "area_tip_specific": 0.00975, "area_shaft_specific": 1.86}, + {"label": "AZ19-700", "area_tip_specific": 0.01019, "area_shaft_specific": 1.86}, + {"label": "AZ20-700", "area_tip_specific": 0.01064, "area_shaft_specific": 1.86}, + {"label": "AZ24-700", "area_tip_specific": 0.01219, "area_shaft_specific": 1.94}, + {"label": "AZ26-700", "area_tip_specific": 0.0131, "area_shaft_specific": 1.94}, + {"label": "AZ28-700", "area_tip_specific": 0.01402, "area_shaft_specific": 1.94}, + {"label": "AZ36-700N", "area_tip_specific": 0.01511, "area_shaft_specific": 2.06}, + {"label": "AZ38-700N", "area_tip_specific": 0.0161, "area_shaft_specific": 2.06}, + {"label": "AZ40-700N", "area_tip_specific": 0.01709, "area_shaft_specific": 2.06}, + {"label": "AZ42-700N", "area_tip_specific": 0.01811, "area_shaft_specific": 2.06}, + {"label": "AZ44-700N", "area_tip_specific": 0.0191, "area_shaft_specific": 2.06}, + {"label": "AZ46-700N", "area_tip_specific": 0.02009, "area_shaft_specific": 2.06}, + {"label": "AZ48-700", "area_tip_specific": 0.02019, "area_shaft_specific": 2.04}, + {"label": "AZ50-700", "area_tip_specific": 0.02118, "area_shaft_specific": 2.04}, + {"label": "AZ52-700", "area_tip_specific": 0.02217, "area_shaft_specific": 2.04}, + {"label": "PU18-1", "area_tip_specific": 0.00925, "area_shaft_specific": 1.74}, + {"label": "PU18+1", "area_tip_specific": 0.01034, "area_shaft_specific": 1.74}, + {"label": "PU22-1", "area_tip_specific": 0.01043, "area_shaft_specific": 1.80}, + {"label": "PU22+1", "area_tip_specific": 0.01152, "area_shaft_specific": 1.80}, + {"label": "PU28-1", "area_tip_specific": 0.01241, "area_shaft_specific": 1.86}, + {"label": "PU28+1", "area_tip_specific": 0.01353, "area_shaft_specific": 1.86}, + {"label": "PU32-1", "area_tip_specific": 0.014, "area_shaft_specific": 1.84}, + {"label": "PU32+1", "area_tip_specific": 0.01508, "area_shaft_specific": 1.84}, + {"label": "PU12", "area_tip_specific": 0.00842, "area_shaft_specific": 1.60}, + {"label": "PU12S", "area_tip_specific": 0.00905, "area_shaft_specific": 1.60}, + {"label": "PU22", "area_tip_specific": 0.01097, "area_shaft_specific": 1.80}, + {"label": "PU18", "area_tip_specific": 0.0098, "area_shaft_specific": 1.74}, + {"label": "PU32", "area_tip_specific": 0.01454, "area_shaft_specific": 1.84}, + {"label": "PU28", "area_tip_specific": 0.01297, "area_shaft_specific": 1.86}, +] + +SOIL_REFERENCE = [ + # CUR 166-1997 Tabel 5.16 parameters voor het inheien buispalen + { + "location": "Amsterdam", + "method": "driving", + "vibration_direction": "vertical", + "Uo": 0.03, + "alpha": 0.03, + "Vo": 0.6, + }, + { + "location": "Maasvlakte", + "method": "driving", + "vibration_direction": "vertical", + "Uo": 0.04, + "alpha": 0.02, + "Vo": 0.6, + }, + { + "location": "Rotterdam", + "method": "driving", + "vibration_direction": "vertical", + "Uo": 0.017, + "alpha": 0.03, + "Vo": 0.6, + }, + { + "location": "Rotterdam", + "method": "driving", + "vibration_direction": "horizontal", + "Uo": 0.026, + "alpha": 0.03, + "Vo": 0.6, + }, + # CUR 166-1997 Tabel 5.17 Parameters voor het intrillen van stale planken (tot 14 meter) + { + "location": "Amsterdam", + "method": "vibrate", + "vibration_direction": "vertical", + "Uo": 1.1, + "alpha": 0.02, + "Vo": 0.9, + }, + { + "location": "Amsterdam", + "method": "vibrate", + "vibration_direction": "horizontal", + "Uo": 1.6, + "alpha": 0.02, + "Vo": 1.5, + }, + { + "location": "Eindhoven", + "method": "vibrate", + "vibration_direction": "vertical", + "Uo": 1.9, + "alpha": 0.02, + "Vo": 1.1, + }, + { + "location": "Eindhoven", + "method": "vibrate", + "vibration_direction": "horizontal", + "Uo": 2.6, + "alpha": 0.02, + "Vo": 0.8, + }, + { + "location": "Groningen", + "method": "vibrate", + "vibration_direction": "vertical", + "Uo": 1.7, + "alpha": 0.02, + "Vo": 1.8, + }, + { + "location": "Groningen", + "method": "vibrate", + "vibration_direction": "horizontal", + "Uo": 0.9, + "alpha": 0.02, + "Vo": 0.5, + }, + { + "location": "Den Haag", + "method": "vibrate", + "vibration_direction": "vertical", + "Uo": 1.9, + "alpha": 0.02, + "Vo": 0.9, + }, + { + "location": "Den Haag", + "method": "vibrate", + "vibration_direction": "horizontal", + "Uo": 2.6, + "alpha": 0.02, + "Vo": 1.5, + }, + { + "location": "Rotterdam", + "method": "vibrate", + "vibration_direction": "vertical", + "Uo": 1.1, + "alpha": 0.02, + "Vo": 0.9, + }, + { + "location": "Rotterdam", + "method": "vibrate", + "vibration_direction": "horizontal", + "Uo": 1.6, + "alpha": 0.02, + "Vo": 1.5, + }, + { + "location": "Tiel", + "method": "vibrate", + "vibration_direction": "vertical", + "Uo": 1.1, + "alpha": 0.02, + "Vo": 0.9, + }, + { + "location": "Tiel", + "method": "vibrate", + "vibration_direction": "horizontal", + "Uo": 1.6, + "alpha": 0.02, + "Vo": 1.5, + }, +] diff --git a/src/pyvibracore/input/impact_force_properties.py b/src/pyvibracore/input/impact_force_properties.py new file mode 100644 index 0000000..823c10d --- /dev/null +++ b/src/pyvibracore/input/impact_force_properties.py @@ -0,0 +1,290 @@ +from copy import deepcopy +from dataclasses import dataclass +from typing import Dict, List, Literal + +import numpy as np +from pygef.cpt import CPTData + +from .constants import SHEETPILE_REFERENCE_PROFILES + +CustomInterval = 0.5 +UnitWeightWater = 9.81 + + +@dataclass(frozen=True) +class VibrationSource: + """ + + Attributes + ----------- + areaShaftSpecific: float + Specific shaft area of the single sheet pile (1 sheet) per unit length [m^2/m]. + areaTipSpecific: float + Specific tip area of the single sheet pile (1 sheet) [m^2]. + amountOfSheetPiles: int = 1 + Number of sheets + - push = 1 + - vibrate = 2 + slotResistanceSpecific: float + Specific sheet pile slot resistance [kN/m] based on CUR 166 6th edition. + for new sheet piles: + - push = 5 + - vibrate = 10 + sheetPileName: str = "User defined" + Sheet pile name + """ + + areaShaftSpecific: float + areaTipSpecific: float + slotResistanceSpecific: float + amountOfSheetPiles: int = 1 + sheetPileName: str = "User defined" + + @classmethod + def from_sheet_pile_name( + cls, + name: str, + amount_of_sheet_piles: int = 1, + slot_resistance_specific: float = 10.0, + ) -> "VibrationSource": + """ + + Parameters + ---------- + name: str + Sheet pile name + amount_of_sheet_piles: int = 1 + Number of sheets + slot_resistance_specific: float = 10 + Specific sheet pile slot resistance [kN/m] based on CUR 166 6th edition. + Returns + ------- + VibrationSource + """ + props = next( + (item for item in SHEETPILE_REFERENCE_PROFILES if item["label"] == name), + None, + ) + if props is None: + raise ValueError( + f"{name} is not a valid sheet pile name. " + "Please specify the areaShaftSpecific and areaTipSpecific in the " + "main class or update the SHEETPILE_REFERENCE_PROFILES table." + ) + + return cls( + areaShaftSpecific=props.get("area_shaft_specific"), + areaTipSpecific=props.get("area_tip_specific"), + amountOfSheetPiles=amount_of_sheet_piles, + slotResistanceSpecific=slot_resistance_specific, + sheetPileName=name, + ) + + +def create_multi_cpt_impact_force_payload( + cptdata_objects: List[CPTData], + classify_tables: Dict[str, dict], + vibration_source: VibrationSource, + friction_strategy: Literal["CPTFrictionStrategy", "SlipFrictionStrategy"], + drive_strategy: Literal["vibrate", "push"], + installation_level_offset: float, + zeta: float = 0.6, +) -> dict: + """ + Creates a dictionary with the payload content for the VibraCore endpoint + "/impact-force/calculation/multi" + + This dictionary can be passed directly to `nuclei.client.call_endpoint()`. + + Parameters + ---------- + cptdata_objects: + A list of pygef.CPTData objects + classify_tables: + A dictionary, mapping `CPTData.alias` values to dictionary with the resulting response + of a call to CPTCore `classify/*` information, containing the following keys: + + - geotechnicalSoilName: Sequence[str] + Geotechnical Soil Name related to the ISO + - lowerBoundary: Sequence[float] + Lower boundary of the layer [m] + - upperBoundary: Sequence[float] + Upper boundary of the layer [m] + - color: Sequence[str] + Hex color code + - mainComponent: Sequence[Literal["rocks", "gravel", "sand", "silt", "clay", "peat"]] + Main soil component + - cohesion: Sequence[float] + Cohesion of the layer [kPa] + - gamma_sat: Sequence[float] + Saturated unit weight [kN/m^3] + - gamma_unsat: Sequence[float] + Unsaturated unit weight [kN/m^3] + - phi: Sequence[float] + Phi [degrees] + - undrainedShearStrength: Sequence[float] + Undrained shear strength [kPa] + vibration_source: VibrationSource + Vibration source object + friction_strategy: Literal["CPTFrictionStrategy", "SlipFrictionStrategy"], + Defines the strategy on how to compute the sleeve friction: + + - CPTFrictionStrategy + + The CPT Friction Strategy takes the sleeve friction provided by the cpt. + Note that this method is only valid when the sleeve friction is provided within + the cpt object. + + + - SlipFrictionStrategy + + The Slip Friction Strategy calculated the sleeve friction based on the gamma, + gamma saturation, phi and the undrained shear strength. To use this methode the + values must be provided within the cpt object. + drive_strategy: Literal["vibrate", "push"] + Defines the strategy on how to compute the impact force: + + - vibrate + + The vibration strategy calculates the impact force based on a vibration installation method. + + - push + + The push strategy calculates the impact force based on a push installation method. + installation_level_offset: float + Installation level of the sheet pile [m w.r.t REF] + zeta: float = 0.6 + verknedingsfactor [-], used in the push drive strategy based on CUR 166 6th edition. + + Returns + ------- + payload: dict + """ + + payload = { + "soilProperties": [ + { + "cptObject": { + "coneResistance": cpt.data.get_column("coneResistance") + .clip(lower_bound=0, upper_bound=1e10) + .to_list(), + "depthOffset": cpt.data.get_column("depthOffset").to_list(), + "localFriction": cpt.data.get_column("localFriction") + .clip(lower_bound=0, upper_bound=1e10) + .to_list(), + "name": cpt.alias, + "verticalPositionOffset": cpt.delivered_vertical_position_offset, + "x": cpt.delivered_location.x, + "y": cpt.delivered_location.y, + }, + "customInterval": CustomInterval, + "groundwaterLevelOffset": cpt.groundwater_level_offset + if cpt.groundwater_level_offset + else cpt.delivered_vertical_position_offset - 1, + "layerTable": { + "gamma_sat": classify_tables[cpt.alias].get("gamma_sat"), + "gamma_unsat": classify_tables[cpt.alias].get("gamma_unsat"), + "phi": classify_tables[cpt.alias].get("phi"), + "soilcode": classify_tables[cpt.alias].get("mainComponent"), + "undrainedShearStrength": classify_tables[cpt.alias].get( + "undrainedShearStrength" + ), + "upperBoundary": ( + cpt.delivered_vertical_position_offset + - np.array(classify_tables[cpt.alias].get("upperBoundary")) + ).tolist(), + }, + "unitWeightWater": UnitWeightWater, + } + for cpt in cptdata_objects + ], + "vibrationSource": { + "areaShaftSpecific": vibration_source.areaShaftSpecific, + "areaTipSpecific": vibration_source.areaTipSpecific, + "numSheets": vibration_source.amountOfSheetPiles, + "sheetPileName": vibration_source.sheetPileName, + "slotResistanceSpecific": vibration_source.slotResistanceSpecific, + }, + "frictionStrategy": friction_strategy, + "impactForceCalculation": { + "driveStrategy": drive_strategy, + "installationLevel": installation_level_offset, + "zeta": zeta, + }, + } + return payload + + +def create_multi_cpt_impact_force_report_payload( + multi_cpt_payload: dict, + project_name: str, + project_id: str, + author: str, +) -> dict: + """ + Creates a dictionary with the payload content for the VibraCore endpoint + "/impact-force/report" + + This dictionary can be passed directly to `nuclei.client.call_endpoint()`. + + Parameters + ---------- + multi_cpt_payload: + The result of a call to `create_multi_cpt_impact_force_payload()` + project_name: + The name of the project. + project_id: + The identifier (code) of the project. + author: + The author of the report. + + Returns + ------- + payload: dict + """ + payload = deepcopy(multi_cpt_payload) + payload.update( + dict( + reportProperties=dict( + author=author, + projectNumber=project_id, + projectName=project_name, + ), + ) + ) + return payload + + +def create_single_cpt_impact_force_payload(multi_cpt_payload: dict, name: str) -> dict: + """ + Creates a dictionary with the payload content for the VibraCore endpoint + "/impact-force/calculation/single" + + This dictionary can be passed directly to `nuclei.client.call_endpoint()`. + + Parameters + ---------- + multi_cpt_payload: dict + The result of a call to `create_multi_cpt_impact_force_payload()` + name: str + CPT name + + Returns + ------- + payload: dict + """ + payload = deepcopy(multi_cpt_payload) + + props = next( + ( + item + for item in payload["soilProperties"] + if item["cptObject"]["name"] == name + ), + None, + ) + if props is None: + raise ValueError(f"{name} is not a valid CPT name.") + payload.update(dict(soilProperties=props)) + + return payload diff --git a/src/pyvibracore/input/vibration_properties.py b/src/pyvibracore/input/vibration_properties.py new file mode 100644 index 0000000..9a9179a --- /dev/null +++ b/src/pyvibracore/input/vibration_properties.py @@ -0,0 +1,535 @@ +from __future__ import annotations + +import json +import logging +import uuid +from copy import deepcopy +from typing import Literal + +import geopandas as gpd +import numpy as np +import requests +from shapely.geometry import LineString, Point, Polygon, mapping + +from .constants import SOIL_REFERENCE + +BAG_WFS_URL = "https://service.pdok.nl/lv/bag/wfs/v2_0" +THRESHOLD = 10000 + + +def get_buildings_geodataframe( + west: float, + south: float, + east: float, + north: float, + category: Literal["one", "two"] = "two", + monumental: bool = False, + structural_condition: Literal["sensitive", "normal"] = "normal", + vibration_sensitive: bool = False, + thickness: float = 8.0, + foundation_element: Literal[ + "shallow foundation", "concrete piles", "timber piles", "steel piles" + ] = "shallow foundation", + material_floor: Literal["concrete", "wood"] = "concrete", + feature: Literal[ + "bag:pand", + "bag:ligplaats", + "bag:verblijfsobject", + "bag:woonplaats", + "bag:standplaats", + ] = "bag:pand", + pagesize: Literal["10", "20", "50", "100", "1000"] = "1000", +) -> gpd.GeoDataFrame: + """ + Get a GeoDataFrame with the default values for CUR166 and PrePal methode. + + Parameters + ---------- + west: + west coordinate in rd new (EPSG:28992) + south: + south coordinate in rd new (EPSG:28992) + east: + east coordinate in rd new (EPSG:28992) + north: + north coordinate in rd new (EPSG:28992) + category: + Building category based on the SBR A table 10.1. + monumental: + Has the building structure a monumental status. Based on the SBR A table 10.3. + structural_condition: + Based on the SBR A table 10.2. + vibration_sensitive: + Has the building structure a vibration sensitive foundation. Based on the SBR A chapter 10.2.5. + thickness: + Layer thickness settlement-sensitive layer [m] + foundation_element: + Based on CUR 166 3rd edition table 5.19 + material_floor: + Based on CUR 166 3rd edition table 5.20 + feature: + default is bag:pand + item in the BAG, see https://www.nationaalgeoregister.nl/geonetwork/srv/dut/catalog.search#/metadata/1c0dcc64-91aa-4d44-a9e3-54355556f5e7 + pagesize: + Results per page + + Returns + ------- + gdf: gpd.GeoDataFrame + """ + + if west > east: + raise ValueError("west coordinate is larger than east coordinate") + + if south > north: + raise ValueError("south coordinate is larger than north coordinate") + + if east - west > THRESHOLD: + raise ValueError( + f"x dimension of the bbox is {east - west} meters, larger than threshold" + ) + + if north - south > THRESHOLD: + raise ValueError( + f"y dimension of the bbox is {north - south} meters, larger than threshold" + ) + + wfs_query_params = { + "service": "WFS", + "version": "2.0.0", + "request": "GetFeature", + "typeName": feature, + "srsname": "EPSG:28992", + "outputFormat": "json", + "bbox": str(west) + "," + str(south) + "," + str(east) + "," + str(north), + "count": pagesize, + } + + response = requests.get( + url=BAG_WFS_URL, + headers={"Content-Type": "application/json"}, + params=wfs_query_params, + timeout=5, + ) + if not response.ok: + raise RuntimeError(response.text) + + gdf = gpd.read_file(json.dumps(response.json()), driver="GeoJSON").to_crs( + "EPSG:28992" + ) + + # add default values + gdf["name"] = gdf.index.astype(str) + + # sbr-A + gdf["category"] = category + gdf["structuralCondition"] = structural_condition + gdf["vibrationSensitive"] = vibration_sensitive + gdf["thickness"] = thickness + gdf["monumental"] = monumental + + # prepal + gdf["buildingDepth"] = np.clip(np.sqrt(gdf.area), 1.0, 18.0) + gdf["buildingDepthVibrationSensitive"] = 1.0 + + # cur166 + gdf["foundationElement"] = foundation_element + gdf["material"] = material_floor + + return gdf + + +def create_prepal_payload( + buildings: gpd.GeoDataFrame, + location: Polygon | LineString | Point, + pile_shape: Literal["square", "round"], + pile_size: float, + cone_resistance: float, + reduction: float = 0.0, + unit_weight: float = 20, + elastic_modulus_factor: float = 15, + poisson_ratio: float = 0.2, + frequency: float = 20.0, + vibration_type: Literal[ + "short-term", "repeated-short-term", "continuous" + ] = "continuous", + frequency_vibration_sensitive: float = 40.0, + measurement_type: Literal["indicative", "limited", "extensive"] = "extensive", + hysteretic_damping_barkan: float = -0.05, +): + """ + Create payload for VibraCore call `cur166/validation/multi` + + Parameters + ---------- + buildings + GeoDataFrame that holds teh building information. Must have the following columns: + - buildingDepth: + The minimum building depth [m] + - buildingDepthVibrationSensitive: + The minimum building depth [m] + - category + Based on the SBR A table 10.1. + - monumental + Has the building structure a monumental status. Based on the SBR A table 10.3. + - structuralCondition + Based on the SBR A table 10.2. + - thickness + Layer thickness settlement-sensitive layer [m] + - vibrationSensitive + Has the building structure a vibration sensitive foundation. Based on the SBR A chapter 10.2.5. + location: + Location of the source + poisson_ratio: + Poisson’s ratio of the soil [-] + elastic_modulus_factor: + Elastic modulus factor of the soil [-]. + unit_weight: + Volume weight of the soil [kN/m^3] + cone_resistance: + Cone resistance [MPa] + reduction: + Reduction of the cone resistance [%] + pile_size: + Size of the pile [m] + pile_shape: + Shape of the pile. + frequency: + The dominate frequency [Hz] + vibration_type + Based on the SBR A table 10.4. + frequency_vibration_sensitive + The dominate frequency for vibration sensitive building [Hz]. + measurement_type + Type of measurement based on the SBR A table 9.2. + hysteretic_damping_barkan: + hysteretic damping barkan [m^-1] + + Returns + ------- + payload: dict + + Raises + ------- + KeyError: + Missing column names in GeoDataFrame + """ + columns = [ + "category", + "structuralCondition", + "vibrationSensitive", + "thickness", + "buildingDepth", + ] + if not set(columns).issubset(set(buildings.columns)): + msg = ( + f"Column names:{list(set(columns) - set(buildings.columns))} must be in GeoDataFrame. " + f"Found column names: {buildings.columns}" + ) + raise KeyError(msg) + + payload = { + "buildingInformation": [ + { + "geometry": mapping(row.geometry), + "metadata": {"ID": row.get("name", uuid.uuid4().__str__())}, + "properties_PrePal": { + "buildingDepth": row["buildingDepth"], + "buildingDepthVibrationSensitive": row.get( + "buildingDepthVibrationSensitive", 1 + ), + "calculationHeight": None, + }, + "properties_SBRa": { + "category": row["category"], + "frequency": frequency, + "frequencyVibrationSensitive": frequency_vibration_sensitive, + "monumental": row["monumental"], + "structuralCondition": row["structuralCondition"], + "thickness": row["thickness"], + "vibrationSensitive": row["vibrationSensitive"], + "vibrationType": vibration_type, + }, + } + for i, row in buildings.iterrows() + ], + "vibrationSource": {"shape": pile_shape, "size": pile_size}, + "soilProperties": { + "coneResistance": cone_resistance * (100 - reduction) / 100, + "elasticModulus": cone_resistance * elastic_modulus_factor, + "poissonRatio": poisson_ratio, + "unitWeight": unit_weight, + }, + "prediction": { + "hystereticDampingBarkan": hysteretic_damping_barkan, + "measurementType": measurement_type, + }, + "validation": {"sourceLocation": mapping(location)}, + } + + return payload + + +def create_cur166_payload( + buildings: gpd.GeoDataFrame, + location: Polygon | LineString | Point, + force: float, + reduction: float = 0, + installation_type: Literal["vibrate", "driving"] = "vibrate", + building_part: Literal["floor", "wall"] = "floor", + safety_factor: float = 0.05, + vibration_direction: Literal["vertical", "horizontal"] = "vertical", + frequency: float = 30.0, + vibration_type: Literal[ + "short-term", "repeated-short-term", "continuous" + ] = "continuous", + frequency_vibration_sensitive: float = 40.0, + reference_location: Literal[ + "Amsterdam", + "Maasvlakte", + "Rotterdam", + "Groningen", + "Den Haag", + "Tiel", + "Eindhoven", + ] = "Amsterdam", + measurement_type: Literal["indicative", "limited", "extensive"] = "extensive", + methode_safety_factor: Literal["CUR", "exact"] = "exact", +): + """ + Create payload for VibraCore call `cur166/validation/multi` + + Parameters + ---------- + buildings + GeoDataFrame that holds teh building information. Must have the following columns: + - foundationElement + Based on CUR 166 3rd edition table 5.19 + - material + Based on CUR 166 3rd edition table 5.20 + - category + Based on the SBR A table 10.1. + - monumental + Has the building structure a monumental status. Based on the SBR A table 10.3. + - structuralCondition + Based on the SBR A table 10.2. + - thickness + Layer thickness settlement-sensitive layer [m] + - vibrationSensitive + Has the building structure a vibration sensitive foundation. Based on the SBR A chapter 10.2.5. + location: + Location of the source + force: + Impact force of the pile [kN] + reduction: + Reduction of impact [%] + installation_type + Based on CUR 166 3rd edition table 5.20 or 5.21 + building_part + Based on CUR 166 3rd edition table 5.20 or 5.21 + safety_factor + Based on CUR 166 3rd edition table 5.22 + vibration_direction + Based on CUR 166 3rd edition table 5.22 + frequency: + The dominate frequency [Hz] + vibration_type + Based on the SBR A table 10.4. + frequency_vibration_sensitive + The dominate frequency for vibration sensitive building [Hz]. + If not provided the frequency of 20 Hz is used for PrePal and 40 + for CUR 166 3rd edition high frequency vibration calculation. + reference_location + Based on CUR 166-1997 table 5.16 and 5.17 + measurement_type + Type of measurement based on the SBR A table 9.2. + methode_safety_factor + Parameter that indicated how the safety factor is calculated. + Find more info about the exact method here -> https://issuu.com/uitgeverijeducom/docs/geo_okt2014_totaal_v4_klein/36 + + Returns + ------- + payload: dict + + Raises + ------- + ValueError: + No reference values found for reference location + KeyError: + Missing column names in GeoDataFrame + """ + reference = next( + ( + item + for item in SOIL_REFERENCE + if item["location"] == reference_location + and item["method"] == installation_type + and item["vibration_direction"] == vibration_direction + ), + None, + ) + + if reference is None: + raise ValueError( + f"No reference values found for reference location: {reference_location}" + f"with installation type: {installation_type} and vibration direction: {vibration_direction}." + ) + + columns = [ + "foundationElement", + "material", + "category", + "monumental", + "structuralCondition", + "thickness", + "vibrationSensitive", + ] + if not set(columns).issubset(set(buildings.columns)): + msg = ( + f"Column names:{list(set(columns) - set(buildings.columns))} must be in GeoDataFrame. " + f"Found column names: {buildings.columns}" + ) + raise KeyError(msg) + + payload = { + "buildingInformation": [ + { + "geometry": mapping(row.geometry), + "metadata": {"ID": row.get("name", uuid.uuid4().__str__())}, + "properties_CUR": { + "buildingPart": building_part, + "foundationElement": row["foundationElement"], + "installationType": installation_type, + "material": row["material"], + "safetyFactor": safety_factor, + "vibrationDirection": vibration_direction, + }, + "properties_SBRa": { + "category": row["category"], + "frequency": frequency, + "frequencyVibrationSensitive": frequency_vibration_sensitive, + "monumental": row["monumental"], + "structuralCondition": row["structuralCondition"], + "thickness": row["thickness"], + "vibrationSensitive": row["vibrationSensitive"], + "vibrationType": vibration_type, + }, + } + for _, row in buildings.iterrows() + ], + "prediction": { + "hystereticDampingBarkan": reference["Uo"], + "force": force * (100 - reduction) / 100, + "measurementType": measurement_type, + "methodeSafetyFactor": methode_safety_factor, + "referencesVelocity": reference["Vo"], + "variationCoefficient": reference["alpha"], + }, + "validation": {"sourceLocation": mapping(location)}, + } + + return payload + + +def get_normative_building( + buildings: gpd.GeoDataFrame, + location: Polygon | LineString | Point, + category: Literal["one", "two"], +) -> str | None: + """ + Get the name of the closest building + + Parameters + ---------- + buildings: + GeoDataFrame that holds the building information + location: + Geometry of the source location + category: + building category based on the SBR A table 10.1. + + Returns + ------- + name: str + """ + gdf = buildings.get(buildings["category"] == category) + if gdf.empty: + logging.error(f"ValueError: No buildings with category {category}.") + return None + gdf["distance"] = gdf.distance(location) + return gdf.sort_values("distance", na_position="last").iloc[0].get("name") + + +def create_single_payload( + multi_vibration_payload: dict, + name: str, +) -> dict: + """ + Create payload for VibraCore call `cur166/validation/single` or `prepal/validation/single` + + Parameters + ---------- + multi_vibration_payload: + result from `create_cur166_payload` or `create_prepal_payload` + name: + building name + + Returns + ------- + payload: dict + """ + payload = deepcopy(multi_vibration_payload) + + props = next( + ( + item + for item in payload["buildingInformation"] + if item["metadata"]["ID"] == name + ), + None, + ) + if props is None: + raise ValueError(f"{name} is not a valid building name.") + payload.update(dict(buildingInformation=props)) + + return payload + + +def create_vibration_report_payload( + multi_vibration_payload: dict, + project_name: str, + project_id: str, + author: str, +) -> dict: + """ + Creates a dictionary with the payload content for the VibraCore endpoint + "/cur166/report" or "/prepal/report" + + This dictionary can be passed directly to `nuclei.client.call_endpoint()`. + + Parameters + ---------- + vibration_payload: + The result of a call to `create_cur166_payload()` or `create_prepal_payload()` + project_name: + The name of the project. + project_id: + The identifier (code) of the project. + author: + The author of the report. + + Returns + ------- + payload: dict + """ + payload = deepcopy(multi_vibration_payload) + payload.update( + dict( + reportProperties=dict( + author=author, + projectNumber=project_id, + projectName=project_name, + ), + ) + ) + return payload diff --git a/src/pyvibracore/results/__init__.py b/src/pyvibracore/results/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/pyvibracore/results/impact_force_result.py b/src/pyvibracore/results/impact_force_result.py new file mode 100644 index 0000000..57a86d4 --- /dev/null +++ b/src/pyvibracore/results/impact_force_result.py @@ -0,0 +1,301 @@ +from __future__ import annotations + +import json +from dataclasses import dataclass +from typing import Any, Sequence, Tuple + +import geopandas as gpd +import matplotlib.pyplot as plt +import pandas as pd +from mpl_toolkits.axes_grid1.anchored_artists import AnchoredSizeBar + + +@dataclass(frozen=True) +class MultiCalculationData: + gdf: gpd.GeoDataFrame + + @classmethod + def from_api_response(cls, response_dict: dict) -> "MultiCalculationData": + return cls( + gdf=gpd.read_file(json.dumps(response_dict), driver="GeoJSON"), + ) + + def plot( + self, + figsize: Tuple[float, float] = (10.0, 12.0), + settings: dict | None = None, + **kwargs: Any, + ) -> plt.Figure: + """ + Plots the CPT and soil table data. + + Parameters + ---------- + figsize: + Size of the activate figure, as the `plt.figure()` argument. + settings: + Plot settings used in plot: default settings are: + + { + "hue": "max", + "title": "Maximale slagkracht [kN]", + "xlabel": "X-coördinaat", + "ylabel": "Y-coördinaat" + } + **kwargs: + All additional keyword arguments are passed to the `pyplot.subplots()` call. + + Returns + ------- + fig: + The matplotlib Figure + """ + kwargs_settings = { + "hue": "max", + "title": "Maximale slagkracht [kN]", + "xlabel": "X-coördinaat", + "ylabel": "Y-coördinaat", + } + + if settings: + kwargs_settings.update(settings) + + if kwargs_settings["hue"] not in ["max", "base", "Q90", "Q95"]: + raise ValueError( + f"The value {kwargs_settings['hue']} is not in [max, base, Q90, Q95]" + ) + + kwargs_subplot = { + "figsize": figsize, + "tight_layout": True, + } + + kwargs_subplot.update(kwargs) + + fig, axes = plt.subplots(**kwargs_subplot) + + # Create figure + self.gdf.plot( + kwargs_settings.get("hue", "max"), + ax=axes, + legend=True, + figsize=(15, 10), + legend_kwds={"orientation": "vertical"}, + cmap="RdYlGn_r", # 'jet', + markersize=150, + marker="v", + aspect=1, + ) + + # add CPT name to plot + for idx, row in self.gdf.iterrows(): + axes.annotate( + row["id"], + xy=(row["x"], row["y"]), + horizontalalignment="center", + fontsize=20, + xytext=(row["x"], row["y"] + 3), + ) + + # Set label and title for figure + axes.set_xlabel(xlabel=kwargs_settings.get("xlabel", ""), size=15) + axes.set_ylabel(ylabel=kwargs_settings.get("ylabel", ""), size=15) + axes.set_title(label=kwargs_settings.get("title", ""), size=25) + + # Add north arrow + x, y, arrow_length = 0.95, 0.98, 0.1 + axes.annotate( + "N", + xy=(x, y), + xytext=(x, y - arrow_length), + arrowprops=dict(facecolor="black", width=5, headwidth=15), + ha="center", + va="center", + fontsize=20, + xycoords=axes.transAxes, + ) + + # scale bar + scalebar = AnchoredSizeBar( + axes.transData, + 20, + "20 m", + "lower left", + pad=1, + color="black", + frameon=True, + size_vertical=2, + ) + axes.add_artist(scalebar) + + return fig + + +@dataclass(frozen=True) +class ImpactForceTable: + """ + Object that contains the impact force related data-traces. + + Attributes: + ------------ + betaFrictionalResistance: Sequence[float] + beta frictional resistance [kN] + betaPointResistance: Sequence[float] + beta point resistance [kN] + correctedConeResistance: Sequence[float] + corrected cone resistance [Mpa] + depthOffset: Sequence[float] + CPT depth [m w.r.t. Reference] + frictionalResistance: Sequence[float] + frictional resistance [kN] + pointResistance: Sequence[float] + point resistance [kN] + sheetResistance: Sequence[float] + sheet resistance [kN] + slotResistance: Sequence[float] + slot resistance [kN] + totalResistance: Sequence[float] + total resistance [kN] + """ + + betaFrictionalResistance: Sequence[float] | None + betaPointResistance: Sequence[float] | None + correctedConeResistance: Sequence[float] + depthOffset: Sequence[float] + frictionalResistance: Sequence[float] + pointResistance: Sequence[float] + sheetResistance: Sequence[float] | None + slotResistance: Sequence[float] + totalResistance: Sequence[float] + + def __post_init__(self) -> None: + raw_lengths = [] + for values in self.__dict__.values(): + if values: + raw_lengths.append(len(values)) + if len(list(set(raw_lengths))) > 1: + raise ValueError("All values in this dataclass must have the same length.") + + @classmethod + def from_api_response(cls, response_dict: dict) -> "ImpactForceTable": + """ + Stores the response of the VibraCore endpoint + + Parameters + ---------- + response_dict: + The resulting response of a call to `impact-force/calculation/single` + """ + return cls( + betaFrictionalResistance=response_dict.get("betaFrictionalResistance"), + betaPointResistance=response_dict.get("betaPointResistance"), + correctedConeResistance=response_dict.get("correctedConeResistance"), + depthOffset=response_dict.get("depthOffset"), + frictionalResistance=response_dict.get("frictionalResistance"), + pointResistance=response_dict.get("pointResistance"), + sheetResistance=response_dict.get("sheetResistance"), + slotResistance=response_dict.get("slotResistance"), + totalResistance=response_dict.get("totalResistance"), + ) + + @property + def dataframe(self) -> pd.DataFrame: + """The pandas.DataFrame representation""" + return pd.DataFrame(self.__dict__).dropna(axis="rows", how="any") # type: ignore + + +@dataclass(frozen=True) +class SingleCalculationData: + """ + Object that contains the impact force related data. + + Attributes: + ------------ + table: ImpactForceTable + installationLevel: float + installation level [m w.r.t. Reference] + maximumForce: float + total resistance [kN] + pointForce: float + resistance at the base [kN] + """ + + table: ImpactForceTable + installationLevel: float + maximumForce: float + pointForce: float | None + + @classmethod + def from_api_response(cls, response_dict: dict) -> "SingleCalculationData": + """ + Stores the response of the VibraCore endpoint + + Parameters + ---------- + response_dict: + The resulting response of a call to `impact-force/calculation/single` + """ + return cls( + table=ImpactForceTable.from_api_response(response_dict["data"]), + installationLevel=response_dict["installationLevel"], + maximumForce=response_dict["maximumForce"], + pointForce=response_dict.get("pointForce"), + ) + + def plot( + self, + figsize: Tuple[float, float] = (10.0, 12.0), + **kwargs: Any, + ) -> plt.Figure: + """ + Plots the resistance data. + + Parameters + ---------- + figsize: + Size of the activate figure, as the `plt.figure()` argument. + **kwargs: + All additional keyword arguments are passed to the `pyplot.subplots()` call. + + Returns + ------- + fig: + The matplotlib Figure + """ + kwargs_subplot = { + "figsize": figsize, + "tight_layout": True, + } + + kwargs_subplot.update(kwargs) + + fig, axes = plt.subplots(**kwargs_subplot) + + for item in [ + "totalResistance", + "frictionalResistance", + "slotResistance", + "pointResistance", + ]: + axes.plot( + self.table.__getattribute__(item), + self.table.depthOffset, + label=item, + ) + + axes.axvline( + x=self.installationLevel, + c="k", + linestyle="dashed", + label=f"max force ({self.maximumForce.__round__(2)})", + ) + axes.axhline( + y=self.installationLevel, + c="k", + linestyle="dotted", + label=f"installation level ({self.installationLevel})", + ) + axes.set_xlabel("Resistance [kN]") + axes.grid() + + return fig diff --git a/src/pyvibracore/results/vibration_result.py b/src/pyvibracore/results/vibration_result.py new file mode 100644 index 0000000..589ffa0 --- /dev/null +++ b/src/pyvibracore/results/vibration_result.py @@ -0,0 +1,337 @@ +from __future__ import annotations + +import json +from dataclasses import dataclass +from typing import Any, Tuple + +import geopandas as gpd +import matplotlib.patches as patches +import matplotlib.pyplot as plt +import numpy as np +from mpl_toolkits.axes_grid1.anchored_artists import AnchoredSizeBar +from shapely.geometry import LineString, Point, Polygon + + +def _north_arrow(axes: plt.Axes) -> None: + x, y, arrow_length = 0.05, 0.98, 0.1 + axes.annotate( + "N", + xy=(x, y), + xytext=(x, y - arrow_length), + arrowprops=dict(facecolor="black", width=5, headwidth=15), + ha="center", + va="center", + fontsize=20, + xycoords=axes.transAxes, + ) + + +def _scalebar(axes: plt.Axes) -> None: + scalebar = AnchoredSizeBar( + axes.transData, + 20, + "20 m", + "lower left", + pad=1, + color="black", + frameon=True, + size_vertical=2, + ) + + axes.add_artist(scalebar) + + +@dataclass(frozen=True) +class VibrationResults: + gdf: gpd.GeoDataFrame + + @classmethod + def from_api_response(cls, response_dict: dict) -> "VibrationResults": + """ + Stores the response of the VibraCore endpoint + + Parameters + ---------- + response_dict: + The resulting response of a call to `/cur166/validation/multi` or `/prepal/validation/multi` + """ + return cls( + gpd.read_file(json.dumps(response_dict), driver="GeoJSON").set_crs( + "EPSG:28992", allow_override=True + ) + ) + + def map( + self, + source_location: Point | LineString | Polygon, + title: str = "Legend:", + figsize: Tuple[float, float] = (10.0, 12.0), + settings: dict | None = None, + **kwargs: Any, + ): + if settings is None: + settings = { + "source_location": {"label": "Trillingsbron", "color": "black"}, + "insufficient_cat1": { + "label": "Voldoet Niet - Cat.1", + "color": "orange", + }, + "insufficient_cat2": {"label": "Voldoet Niet - Cat.2", "color": "red"}, + "sufficient": {"label": "Voldoet", "color": "green"}, + } + + kwargs_subplot = { + "figsize": figsize, + "tight_layout": True, + } + + kwargs_subplot.update(kwargs) + + fig, axes = plt.subplots(**kwargs_subplot) + + gpd.GeoSeries(source_location).plot( + ax=axes, + color=settings["source_location"]["color"], + alpha=1, + zorder=1, + aspect=1, + ) + + # plot category 1 zone of influence + self.gdf.where( + np.logical_and(self.gdf["cat"] == "one", ~self.gdf["check"]) + ).plot( + ax=axes, zorder=2, color=settings["insufficient_cat1"]["color"], aspect=1 + ) + self.gdf.where( + np.logical_and(self.gdf["cat"] == "two", ~self.gdf["check"]) + ).plot( + ax=axes, zorder=2, color=settings["insufficient_cat2"]["color"], aspect=1 + ) + self.gdf.where(self.gdf.check).plot( + ax=axes, zorder=2, color=settings["sufficient"]["color"], aspect=1 + ) + self.gdf.where(self.gdf.check).buffer(self.gdf.x_required).plot( + ax=axes, alpha=0.25, zorder=1, aspect=1 + ) + self.gdf.where(~self.gdf.check).buffer(self.gdf.x_required).plot( + ax=axes, alpha=0.6, zorder=1, aspect=1 + ) + + for idx, row in self.gdf.iterrows(): + x = row.geometry.centroid.xy[0][0] + y = row.geometry.centroid.xy[1][0] + + axes.annotate( + idx, + xy=(x, y), + horizontalalignment="center", + ) + + # add legend + axes.legend( + title=title, + title_fontsize=18, + fontsize=15, + loc="lower right", + handles=[ + patches.Patch( + facecolor=value["color"], + label=value["label"], + alpha=0.9, + linewidth=2, + edgecolor="black", + ) + for value in settings.values() + ], + ) + + _north_arrow(axes) + _scalebar(axes) + + return fig + + +def map_payload( + gdf: gpd.GeoDataFrame, + source_location: Point | LineString | Polygon, + title: str = "Legend:", + figsize: Tuple[float, float] = (10.0, 12.0), + settings: dict | None = None, + **kwargs: Any, +): + if settings is None: + settings = { + "source_location": {"label": "Trillingsbron", "color": "black"}, + "sensitive_cat1": { + "label": "Monumentaal/ gevoelig - Cat.1", + "color": "blue", + }, + "sensitive_cat2": { + "label": "Monumentaal/ gevoelig - Cat.2", + "color": "cyan", + }, + "normal_cat1": {"label": "Normaal - Cat.1", "color": "orange"}, + "normal_cat2": {"label": "Normaal - Cat.2", "color": "olive"}, + } + + kwargs_subplot = { + "figsize": figsize, + "tight_layout": True, + } + + kwargs_subplot.update(kwargs) + + fig, axes = plt.subplots(**kwargs_subplot) + + gpd.GeoSeries(source_location).plot( + ax=axes, color=settings["source_location"]["color"], alpha=1, zorder=1, aspect=1 + ) + + gdf.where( + np.logical_and( + gdf["category"] == "one", + np.logical_or(gdf["monumental"], gdf["vibrationSensitive"]), + ) + ).plot(ax=axes, zorder=2, color=settings["sensitive_cat1"]["color"], aspect=1) + gdf.where( + np.logical_and( + gdf["category"] == "one", + ~np.logical_or(gdf["monumental"], gdf["vibrationSensitive"]), + ) + ).plot(ax=axes, zorder=2, color=settings["sensitive_cat1"]["color"], aspect=1) + gdf.where( + np.logical_and( + gdf["category"] == "two", + np.logical_or(gdf["monumental"], gdf["vibrationSensitive"]), + ) + ).plot(ax=axes, zorder=2, color=settings["sensitive_cat2"]["color"], aspect=1) + gdf.where( + np.logical_and( + gdf["category"] == "two", + ~np.logical_or(gdf["monumental"], gdf["vibrationSensitive"]), + ) + ).plot(ax=axes, zorder=2, color=settings["normal_cat2"]["color"], aspect=1) + + for idx, row in gdf.iterrows(): + x = row.geometry.centroid.xy[0][0] + y = row.geometry.centroid.xy[1][0] + + axes.annotate( + idx, + xy=(x, y), + horizontalalignment="center", + ) + + # add legend + axes.legend( + title=title, + title_fontsize=18, + fontsize=15, + loc="lower right", + handles=[ + patches.Patch( + facecolor=value["color"], + label=value["label"], + alpha=0.9, + linewidth=2, + edgecolor="black", + ) + for value in settings.values() + ], + ) + + _north_arrow(axes) + _scalebar(axes) + + return fig + + +def plot_reduction( + response_dict: dict, + sensitive: bool = False, + figsize: Tuple[float, float] = (8, 8), + **kwargs: Any, +): + kwargs_subplot = { + "figsize": figsize, + "tight_layout": True, + } + + kwargs_subplot.update(kwargs) + + fig, axes = plt.subplots(**kwargs_subplot) + + axes.axvline( + x=response_dict["calculation"]["distance"], + linestyle="-", + label="Building distance", + color="green", + ) + + # normal + axes.axhline( + y=response_dict["calculation"]["failureValueVibrationVelocity"], + linestyle="-", + label="Vr", + color="orange", + ) + axes.axvline( + x=response_dict["calculation"]["distanceRequired"], + linestyle="-", + label="Distance required", + color="black", + ) + axes.plot( + response_dict["data"]["distance"], + response_dict["data"]["vibrationVelocity"], + linestyle="-", + label="Vd", + color="blue", + ) + + # sensitive + if sensitive: + axes.axhline( + y=response_dict["calculation"][ + "failureValueVibrationVelocityVibrationSensitive" + ], + linestyle="--", + label="Vr", + color="orange", + ) + axes.axvline( + x=response_dict["calculation"][ + "distanceRequiredVelocityVibrationSensitive" + ], + linestyle="--", + label="Distance required", + color="black", + ) + # excitation + axes.axhline( + y=response_dict["calculation"]["failureValueExcitationVelocity"], + linestyle="--", + label="Vr", + color="orange", + ) + axes.axvline( + x=response_dict["calculation"]["distanceRequiredExcitationVelocity"], + linestyle="--", + label="Distance required", + color="black", + ) + axes.plot( + response_dict["data"]["distance"], + response_dict["data"]["vibrationVelocityVibrationSensitive"], + linestyle="--", + label="Vd", + color="blue", + ) + + axes.set_xlabel("Distance from source [m]") + axes.set_ylabel("Vibration velocity [mm/s]") + axes.set_xlim(0, 50) + axes.set_ylim(0, 30) + + return fig diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..13ce5e3 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,45 @@ +import json + +import pygef +import pytest +from pygef.cpt import CPTData +from shapely.geometry import Polygon + + +@pytest.fixture +def mock_classify_response() -> dict: + with open("tests/response/classify_response.json", "r") as file: + data = json.load(file) + return data + + +@pytest.fixture +def cpt() -> CPTData: + return pygef.read_cpt("tests/data/cpt.gef", engine="gef") + + +@pytest.fixture +def mock_impact_force_response() -> dict: + with open("tests/response/impact_force_response.json", "r") as file: + data = json.load(file) + return data + + +@pytest.fixture +def mock_bag_response() -> dict: + with open("tests/response/bag_response.json", "r") as file: + data = json.load(file) + return data + + +@pytest.fixture +def mock_source_location() -> Polygon: + return Polygon( + [ + [120434.347344895664719, 486290.957240115036257], + [120492.474963364205905, 486244.753235691343434], + [120492.474963364205905, 486244.753235691343434], + [120541.659871299110819, 486145.638193943712395], + [120434.347344895664719, 486290.957240115036257], + ] + ) diff --git a/tests/data/cpt.gef b/tests/data/cpt.gef new file mode 100644 index 0000000..337c008 --- /dev/null +++ b/tests/data/cpt.gef @@ -0,0 +1,1278 @@ +#GEFID= 1, 1, 0 +#FILEOWNER= UNISTART +#FILEDATE= 2014,01,31 +#PROJECTID= CPT, 1013-0269-000, - +#COLUMN= 9 +#COLUMNINFO= 1, m, Sondeerlengte, 1 +#COLUMNINFO= 2, MPa, Conusweerstand qc, 2 +#COLUMNINFO= 3, MPa, Wrijvingsweerstand fs, 3 +#COLUMNINFO= 4, %, Wrijvingsgetal Rf, 4 +#COLUMNINFO= 5, MPa, Waterspanning u2, 6 +#COLUMNINFO= 6, graden, Helling, 8 +#COLUMNINFO= 7, -, Classificatie zone Robertson 1990, 99 +#COLUMNINFO= 8, m, Gecorrigeerde diepte, 11 +#COLUMNINFO= 9, s, Tijd, 12 +#ANALYSISTEXT= 130, P:\10\1013-0269-000\21_UITVOERING_TERREINONDERZOEK\40_DATA\10_CPT_DEFINITIEF\RENAMED\S-TUN-016-PG.000, oorspronkelijke UNICAS datafile +#ANALYSISTEXT= 131, UNIPLOT 05.24.00, conversie programma +#COMPANYID= Fugro GeoServices B.V., NL005621409B08, 31 +#DATAFORMAT= ASCII +#DATATYPE= REAL8 +#COLUMNVOID= 1, -99999.000 +#COLUMNVOID= 2, -99999.000 +#COLUMNVOID= 3, -99999.000 +#COLUMNVOID= 4, -99999.000 +#COLUMNVOID= 5, -99999.00000 +#COLUMNVOID= 6, -99999.000 +#COLUMNVOID= 7, -99999 +#COLUMNVOID= 8, -99999.00 +#COLUMNVOID= 9, -99999.0 +#LASTSCAN= 1211 +#XYID= 31000, 119957.94, 483499.87, 0.03, 0.03 +#ZID= 31000, 0.36, 0.03 +#MEASUREMENTTEXT= 1, -, opdrachtgever +#MEASUREMENTTEXT= 2, TOESTANDSONDERZOEKEN ZUIDASDOK, projectnaam +#MEASUREMENTTEXT= 3, AMSTERDAM, plaatsnaam +#MEASUREMENTTEXT= 4, F7.5CKEHGW2/B P1-1701-1882, conus type en serienummer +#MEASUREMENTTEXT= 5, REO 73/SC/JWV, sondeerapparaat/operator +#MEASUREMENTTEXT= 6, NEN 5140 klasse 2, gevolgde norm +#MEASUREMENTTEXT= 9, maaiveld, vast horizontaal vlak +#MEASUREMENTVAR= 1, 1500, mm2, Nom. opp. conuspunt +#MEASUREMENTVAR= 2, 19956, mm2, Nom. opp. wrijvingsmantel +#MEASUREMENTVAR= 3, 0.58, -, Netto oppervlaktequotient van de conuspunt +#MEASUREMENTVAR= 4, 1.00, -, Netto oppervlaktequotient van de kleefmantel +#MEASUREMENTVAR= 5, 148, mm, Afstand conus tot midden kleefmantel +#MEASUREMENTVAR= 12, 0, -, electrische sondering +#MEASUREMENTVAR= 13, 2.00, m, voorgegraven diepte +#MEASUREMENTVAR= 16, 26.19, m, einddiepte sondering +#MEASUREMENTVAR= 17, 0, - , Stopcriterium : +#MEASUREMENTVAR= 20, 0.790, MPa, nulmeting conus voor sondering +#MEASUREMENTVAR= 21, 0.765, MPa, nulmeting conus na sondering +#MEASUREMENTVAR= 22, -0.012, MPa, nulmeting wrijving voor sondering +#MEASUREMENTVAR= 23, -0.001, MPa, nulmeting wrijving na sondering +#MEASUREMENTVAR= 26, -0.028, MPa, nulmeting WSM u2 voor sondering +#MEASUREMENTVAR= 27, -0.033, MPa, nulmeting WSM u2 na sondering +#MEASUREMENTVAR= 30, 1.9, graden, nulmeting helling voor sondering +#MEASUREMENTVAR= 31, 3.6, graden, nulmeting helling na sondering +#SPECIMENVAR= 1 , 0.00, m, Verharding - Klinkers +#SPECIMENVAR= 2 , 0.10, m, Zand +#SPECIMENVAR= 3 , 0.20, m, Verharding - Stabilisatielaag +#SPECIMENVAR= 4 , 0.50, m, Zand +#SPECIMENVAR= 5 , 1.00, m, Zand - Humeus +#SPECIMENVAR= 6 , 1.80, m, Zand +#TESTID= S-TUN-016-PG +#REPORTCODE= GEF-CPT-Report,1,1,0 +#STARTDATE= 2014,01,29 +#STARTTIME= 14,05,52 +#OS= DOS +#EOH= + 2.00 0.839 -99999.000 -99999.000 -99999.000 -0.031 4 2.00 655.9 + 2.02 0.936 -99999.000 -99999.000 0.04126 -0.031 5 2.02 656.6 + 2.04 1.040 -99999.000 -99999.000 0.04018 -0.031 5 2.04 657.4 + 2.06 1.150 -99999.000 -99999.000 0.03888 -0.031 5 2.06 658.3 + 2.08 1.302 0.019 1.382 0.03850 -0.031 5 2.08 659.0 + 2.10 1.561 0.020 1.343 0.03554 -0.031 6 2.10 659.9 + 2.12 1.856 0.022 1.323 0.03161 -0.031 6 2.12 660.6 + 2.14 1.988 0.023 1.297 0.02989 -0.031 6 2.14 661.4 + 2.16 2.001 0.030 1.540 0.03043 -0.031 6 2.16 662.2 + 2.18 2.025 0.033 1.510 0.03335 -0.031 5 2.18 663.0 + 2.20 2.102 0.033 1.337 0.03715 -0.031 6 2.20 663.8 + 2.22 2.540 0.031 1.112 0.04367 -0.032 6 2.22 664.6 + 2.24 3.252 0.032 1.082 0.05794 -0.031 6 2.24 665.4 + 2.26 4.021 0.035 1.093 0.07072 -0.031 6 2.26 666.2 + 2.28 4.135 0.037 1.103 0.06924 -0.031 6 2.28 667.0 + 2.30 3.728 0.040 1.113 0.03678 -0.031 6 2.30 667.8 + 2.32 3.403 0.042 1.124 0.02873 -0.032 6 2.32 671.4 + 2.34 3.495 0.044 1.133 0.03382 -0.032 6 2.34 683.6 + 2.36 3.588 0.042 1.100 0.03892 -0.032 6 2.36 695.7 + 2.38 3.681 0.039 0.958 0.04402 -0.032 6 2.38 707.9 + 2.40 3.773 0.038 0.770 0.04912 -0.032 6 2.40 720.0 + 2.42 3.866 0.036 0.651 0.05922 -0.032 6 2.42 732.2 + 2.44 5.030 0.035 0.576 0.08883 -0.031 6 2.44 734.1 + 2.46 6.644 0.036 0.566 0.11407 -0.032 6 2.46 734.9 + 2.48 7.626 0.037 0.589 0.12509 -0.031 7 2.48 735.7 + 2.50 7.997 0.040 0.603 0.09688 -0.031 7 2.50 736.5 + 2.52 7.738 0.042 0.639 0.07294 -0.031 7 2.52 737.3 + 2.54 6.789 0.047 0.735 0.04461 -0.031 6 2.54 738.1 + 2.56 5.572 0.051 0.878 0.03116 -0.031 6 2.56 738.9 + 2.58 4.470 0.054 1.071 0.02213 -0.031 6 2.58 739.8 + 2.60 3.713 0.057 1.316 0.01800 -0.031 6 2.60 740.5 + 2.62 2.995 0.058 1.648 0.01725 -0.031 6 2.62 741.3 + 2.64 2.363 0.059 2.062 0.01892 -0.031 4 2.64 742.1 + 2.66 1.910 0.057 2.434 0.01908 -0.031 4 2.66 742.9 + 2.68 1.570 0.054 2.814 0.01932 -0.031 4 2.68 743.7 + 2.70 1.347 0.050 3.129 0.01973 -0.031 4 2.70 744.5 + 2.72 1.243 0.048 3.474 0.02093 -0.032 4 2.72 745.3 + 2.74 1.107 0.043 3.634 0.02273 -0.030 4 2.74 746.1 + 2.76 0.975 0.037 3.549 0.02716 -0.031 4 2.76 747.0 + 2.78 0.886 0.030 3.300 0.03266 -0.031 4 2.78 747.8 + 2.80 0.773 0.025 3.027 0.03991 -0.032 4 2.80 748.5 + 2.82 0.643 0.020 2.857 0.04999 -0.031 4 2.82 749.4 + 2.84 0.551 0.018 2.748 0.06532 -0.031 4 2.84 750.2 + 2.86 0.482 0.014 2.511 0.08600 -0.031 4 2.86 751.0 + 2.88 0.464 0.012 2.307 0.11071 -0.031 4 2.88 751.8 + 2.90 0.460 0.011 2.140 0.13687 -0.031 4 2.90 752.6 + 2.92 0.470 0.009 1.783 0.15840 -0.031 4 2.92 753.3 + 2.94 0.480 0.008 1.418 0.17493 -0.031 5 2.94 754.2 + 2.96 0.487 0.008 1.028 0.18207 -0.031 5 2.96 755.0 + 2.98 0.506 0.009 0.655 0.19545 -0.031 5 2.98 755.8 + 3.00 1.000 0.011 0.518 0.22339 -0.031 5 3.00 756.6 + 3.02 2.424 0.014 0.490 0.29322 -0.032 6 3.02 757.4 + 3.04 4.606 0.018 0.499 0.03110 -0.031 6 3.04 758.2 + 3.06 6.206 0.021 0.485 0.02602 -0.033 7 3.06 759.1 + 3.08 6.439 0.026 0.516 0.02975 -0.033 7 3.08 759.8 + 3.10 6.226 0.032 0.569 0.02462 -0.032 6 3.10 760.7 + 3.12 6.001 0.036 0.632 0.01514 -0.032 6 3.12 761.5 + 3.14 5.702 0.040 0.724 0.01487 -0.032 6 3.14 762.3 + 3.16 5.405 0.043 0.848 0.01691 -0.032 6 3.16 762.8 + 3.18 4.517 0.049 1.064 0.01921 -0.032 6 3.18 763.9 + 3.20 3.803 0.053 1.332 0.02116 -0.032 6 3.20 764.6 + 3.22 3.062 0.057 1.657 0.02109 -0.033 5 3.22 765.5 + 3.24 2.446 0.057 1.992 0.02150 -0.032 4 3.24 766.2 + 3.26 1.895 0.057 2.393 0.02199 -0.032 4 3.26 767.0 + 3.28 1.490 0.057 2.745 0.02281 -0.033 4 3.28 767.9 + 3.30 1.286 0.056 3.093 0.02373 -0.032 4 3.30 768.7 + 3.32 1.165 0.054 3.467 0.02514 -0.032 4 3.32 769.5 + 3.34 1.064 0.050 3.887 0.03220 -0.031 4 3.34 779.2 + 3.36 0.995 0.048 4.331 0.04061 -0.031 4 3.36 798.0 + 3.38 0.925 0.045 4.560 0.04901 -0.031 4 3.38 816.7 + 3.40 0.862 0.040 4.566 0.06854 -0.031 4 3.40 822.9 + 3.42 0.813 0.038 4.541 0.10176 -0.031 4 3.42 823.7 + 3.44 0.783 0.038 4.640 0.13040 -0.029 4 3.44 824.6 + 3.46 0.757 0.036 4.566 0.16099 -0.032 4 3.46 825.3 + 3.48 0.740 0.033 4.400 0.18786 -0.031 4 3.48 826.1 + 3.50 0.725 0.031 4.241 0.20557 -0.031 4 3.50 827.0 + 3.52 0.711 0.036 5.075 0.22143 -0.031 10 3.52 827.7 + 3.54 0.696 0.036 5.220 0.23300 -0.031 10 3.54 828.5 + 3.56 0.677 0.035 5.136 0.24483 -0.031 10 3.56 829.3 + 3.58 0.652 0.034 5.058 0.24446 -0.030 10 3.58 830.2 + 3.60 0.631 0.034 5.281 0.23113 -0.031 10 3.60 831.0 + 3.62 0.629 0.037 5.733 0.21701 -0.031 10 3.62 831.7 + 3.64 0.622 0.038 5.905 0.22134 -0.031 10 3.64 832.6 + 3.66 0.617 0.040 6.149 0.21187 -0.031 10 3.66 833.3 + 3.68 0.639 0.044 6.727 0.19351 -0.031 10 3.68 834.1 + 3.70 0.679 0.048 7.078 0.18580 -0.031 10 3.70 835.0 + 3.72 0.712 0.052 7.395 0.18923 -0.031 10 3.72 835.8 + 3.74 0.741 0.055 7.683 0.19063 -0.031 10 3.74 836.5 + 3.76 0.769 0.057 7.802 0.18462 -0.031 10 3.76 837.4 + 3.78 0.764 0.060 8.218 0.17391 -0.031 10 3.78 838.2 + 3.80 0.744 0.063 8.545 0.17524 -0.031 10 3.80 839.0 + 3.82 0.726 0.063 8.638 0.17445 -0.031 10 3.82 839.8 + 3.84 0.704 0.064 9.009 0.17665 -0.031 10 3.84 840.6 + 3.86 0.689 0.064 9.225 0.17812 -0.031 10 3.86 841.4 + 3.88 0.669 0.064 9.424 0.18304 -0.030 10 3.88 842.2 + 3.90 0.651 0.064 9.615 0.18401 -0.031 10 3.90 843.0 + 3.92 0.641 0.062 9.619 0.19432 -0.031 10 3.92 843.8 + 3.94 0.627 0.062 9.763 0.20357 -0.031 10 3.94 844.6 + 3.96 0.614 0.062 9.904 0.20718 -0.031 10 3.96 845.4 + 3.98 0.608 0.062 9.958 0.20743 -0.030 10 3.98 846.2 + 4.00 0.603 0.062 10.200 0.19327 -0.029 10 4.00 847.0 + 4.02 0.608 0.058 9.502 0.18501 -0.031 10 4.02 847.8 + 4.04 0.608 0.058 9.617 0.18276 -0.031 10 4.04 848.6 + 4.06 0.608 0.059 9.706 0.19158 -0.031 10 4.06 849.4 + 4.08 0.607 0.058 9.550 0.19392 -0.031 10 4.08 850.2 + 4.10 0.612 0.059 9.671 0.19484 -0.031 10 4.10 851.0 + 4.12 0.616 0.058 9.446 0.19406 -0.031 10 4.12 851.8 + 4.14 0.624 0.059 9.477 0.18568 -0.031 10 4.14 852.6 + 4.16 0.627 0.058 9.307 0.18986 -0.031 10 4.16 853.5 + 4.18 0.630 0.057 9.088 0.19241 -0.031 10 4.18 854.1 + 4.20 0.637 0.057 9.056 0.21303 -0.031 10 4.20 855.1 + 4.22 0.643 0.056 8.850 0.23039 -0.031 10 4.22 855.9 + 4.24 0.641 0.057 8.963 0.23637 -0.031 10 4.24 856.7 + 4.26 0.634 0.056 8.425 0.23121 -0.031 10 4.26 857.5 + 4.28 0.633 0.053 7.790 0.22529 -0.031 10 4.28 858.3 + 4.30 0.681 0.051 7.155 0.23424 -0.031 10 4.30 859.1 + 4.32 0.885 0.049 6.634 0.28213 -0.031 10 4.32 859.9 + 4.34 1.182 0.048 4.978 0.25768 -0.031 4 4.34 862.3 + 4.36 1.488 0.045 3.905 0.19917 -0.031 4 4.36 867.1 + 4.38 1.795 0.045 3.850 0.14067 -0.030 4 4.38 872.0 + 4.40 1.793 0.044 3.581 0.09024 -0.031 4 4.40 875.2 + 4.42 1.341 0.044 3.694 0.07760 -0.032 4 4.42 876.0 + 4.44 1.048 0.045 4.034 0.07756 -0.032 4 4.44 876.8 + 4.46 0.900 0.044 4.194 0.08933 -0.032 3 4.46 877.6 + 4.48 0.749 0.041 4.506 0.09665 -0.032 3 4.48 878.4 + 4.50 0.651 0.039 5.212 0.10579 -0.032 10 4.50 879.2 + 4.52 0.579 0.036 5.512 0.11792 -0.032 10 4.52 880.0 + 4.54 0.536 0.032 5.424 0.12918 -0.032 10 4.54 880.8 + 4.56 0.504 0.029 5.334 0.13812 -0.032 10 4.56 881.6 + 4.58 0.483 0.025 4.967 0.14695 -0.032 3 4.58 882.4 + 4.60 0.468 0.023 4.782 0.15426 -0.032 3 4.60 883.2 + 4.62 0.454 0.021 4.563 0.16271 -0.032 3 4.62 884.0 + 4.64 0.446 0.021 4.512 0.16484 -0.032 3 4.64 884.8 + 4.66 0.440 0.020 4.471 0.16745 -0.032 3 4.66 885.6 + 4.68 0.431 0.019 4.309 0.16933 -0.032 3 4.68 886.4 + 4.70 0.432 0.020 4.480 0.17029 -0.032 3 4.70 887.2 + 4.72 0.434 0.019 4.263 0.17049 -0.032 3 4.72 888.0 + 4.74 0.438 0.020 4.438 0.17063 -0.032 3 4.74 888.8 + 4.76 0.442 0.018 4.157 0.17169 -0.032 3 4.76 889.6 + 4.78 0.449 0.019 4.278 0.17232 -0.032 3 4.78 890.4 + 4.80 0.452 0.018 4.154 0.16868 -0.032 3 4.80 891.3 + 4.82 0.444 0.018 4.186 0.16954 -0.032 3 4.82 892.0 + 4.84 0.434 0.017 3.905 0.17288 -0.032 3 4.84 892.8 + 4.86 0.435 0.018 4.162 0.17403 -0.032 3 4.86 893.6 + 4.88 0.435 0.022 4.932 0.18006 -0.032 3 4.88 894.4 + 4.90 0.434 0.021 4.918 0.18187 -0.032 3 4.90 895.2 + 4.92 0.440 0.022 5.082 0.18413 -0.032 2 4.92 896.0 + 4.94 0.442 0.021 4.788 0.18434 -0.032 3 4.94 896.8 + 4.96 0.436 0.022 5.089 0.18112 -0.031 2 4.96 897.6 + 4.98 0.428 0.021 4.855 0.18164 -0.031 3 4.98 898.4 + 5.00 0.425 0.024 5.411 0.18287 -0.032 2 5.00 899.3 + 5.02 0.430 0.024 5.423 0.18383 -0.032 2 5.02 900.0 + 5.04 0.448 0.025 5.581 0.18485 -0.032 2 5.04 900.9 + 5.06 0.478 0.025 5.590 0.18220 -0.032 2 5.06 901.7 + 5.08 0.467 0.026 5.644 0.17724 -0.032 2 5.08 902.5 + 5.10 0.467 0.025 5.417 0.17775 -0.032 2 5.10 903.3 + 5.12 0.455 0.023 5.043 0.18212 -0.032 2 5.12 904.0 + 5.14 0.442 0.023 4.936 0.18909 -0.033 3 5.14 904.8 + 5.16 0.457 0.024 5.163 0.19637 -0.033 2 5.16 905.7 + 5.18 0.494 0.024 4.973 0.19769 -0.033 3 5.18 906.5 + 5.20 0.510 0.024 5.084 0.18903 -0.033 10 5.20 907.3 + 5.22 0.497 0.024 4.888 0.17887 -0.033 3 5.22 908.1 + 5.24 0.476 0.023 4.655 0.17606 -0.033 3 5.24 908.9 + 5.26 0.475 0.023 4.700 0.17678 -0.033 3 5.26 909.7 + 5.28 0.488 0.022 4.517 0.17192 -0.033 3 5.28 910.5 + 5.30 0.502 0.021 4.334 0.16627 -0.033 3 5.30 911.3 + 5.32 0.491 0.020 4.186 0.16445 -0.033 3 5.32 912.1 + 5.34 0.485 0.021 4.211 0.16389 -0.033 3 5.34 913.1 + 5.36 0.508 0.023 4.494 0.16918 -0.033 3 5.36 917.6 + 5.38 0.531 0.023 4.486 0.17448 -0.033 3 5.38 922.2 + 5.40 0.554 0.023 4.525 0.17768 -0.033 3 5.40 926.7 + 5.42 0.533 0.023 4.770 0.17066 -0.033 3 5.42 928.1 + 5.44 0.505 0.024 4.936 0.17155 -0.034 3 5.44 928.8 + 5.46 0.457 0.023 4.915 0.18399 -0.034 3 5.46 929.6 + 5.48 0.432 0.024 5.077 0.19769 -0.033 2 5.48 930.5 + 5.50 0.420 0.024 5.373 0.21188 -0.033 2 5.50 931.3 + 5.52 0.419 0.023 5.356 0.22310 -0.033 2 5.52 932.0 + 5.54 0.426 0.023 5.366 0.23873 -0.033 2 5.54 932.9 + 5.56 0.427 0.024 5.456 0.23827 -0.033 2 5.56 933.7 + 5.58 0.437 0.024 5.332 0.24322 -0.033 2 5.58 934.5 + 5.60 0.466 0.023 5.215 0.25476 -0.033 2 5.60 935.3 + 5.62 0.479 0.023 5.089 0.24662 -0.034 2 5.62 936.0 + 5.64 0.463 0.022 4.917 0.24130 -0.033 3 5.64 936.9 + 5.66 0.446 0.024 5.304 0.24667 -0.033 2 5.66 937.6 + 5.68 0.435 0.025 5.646 0.24966 -0.033 2 5.68 938.5 + 5.70 0.429 0.025 5.723 0.25327 -0.033 2 5.70 939.3 + 5.72 0.427 0.025 5.628 0.25797 -0.033 2 5.72 940.1 + 5.74 0.428 0.026 5.874 0.26363 -0.033 2 5.74 940.9 + 5.76 0.434 0.025 5.605 0.26432 -0.033 2 5.76 941.7 + 5.78 0.444 0.025 5.608 0.26379 -0.033 2 5.78 942.5 + 5.80 0.446 0.024 5.453 0.26251 -0.033 2 5.80 943.3 + 5.82 0.454 0.025 5.475 0.26321 -0.033 2 5.82 944.1 + 5.84 0.457 0.025 5.643 0.26419 -0.033 2 5.84 944.9 + 5.86 0.460 0.026 5.844 0.26167 -0.033 2 5.86 945.7 + 5.88 0.455 0.027 5.961 0.26572 -0.033 2 5.88 946.5 + 5.90 0.434 0.026 5.959 0.26460 -0.034 2 5.90 947.3 + 5.92 0.426 0.027 6.122 0.26704 -0.034 2 5.92 948.1 + 5.94 0.425 0.024 5.580 0.26856 -0.033 2 5.94 948.9 + 5.96 0.430 0.023 5.369 0.26916 -0.034 2 5.96 949.7 + 5.98 0.431 0.021 4.782 0.27055 -0.034 3 5.98 950.5 + 6.00 0.430 0.018 4.079 0.27566 -0.033 3 6.00 951.3 + 6.02 0.431 0.020 4.659 0.27657 -0.033 3 6.02 952.1 + 6.04 0.437 0.021 4.839 0.27501 -0.034 3 6.04 952.9 + 6.06 0.443 0.020 4.597 0.27648 -0.034 3 6.06 953.7 + 6.08 0.455 0.020 4.469 0.27082 -0.034 3 6.08 954.5 + 6.10 0.465 0.020 4.436 0.27973 -0.034 3 6.10 955.3 + 6.12 0.472 0.021 4.507 0.28595 -0.034 3 6.12 956.1 + 6.14 0.478 0.022 4.869 0.27908 -0.034 3 6.14 956.9 + 6.16 0.456 0.022 4.964 0.26921 -0.034 3 6.16 957.7 + 6.18 0.431 0.022 4.818 0.25699 -0.034 3 6.18 958.5 + 6.20 0.421 0.021 4.627 0.24882 -0.034 3 6.20 959.4 + 6.22 0.423 0.020 4.473 0.25246 -0.034 3 6.22 960.1 + 6.24 0.429 0.020 4.462 0.25680 -0.034 3 6.24 960.9 + 6.26 0.447 0.019 4.118 0.25484 -0.034 3 6.26 961.7 + 6.28 0.459 0.017 3.573 0.24558 -0.034 3 6.28 962.5 + 6.30 0.493 0.015 3.028 0.24184 -0.034 4 6.30 963.3 + 6.32 0.569 0.014 2.802 0.24712 -0.034 4 6.32 964.2 + 6.34 0.668 0.016 2.813 0.24735 -0.034 4 6.34 965.4 + 6.36 0.731 0.018 2.758 0.24463 -0.034 4 6.36 970.2 + 6.38 0.795 0.020 2.764 0.24191 -0.034 4 6.38 975.0 + 6.40 0.855 0.021 2.626 0.23888 -0.034 4 6.40 979.5 + 6.42 0.870 0.024 2.788 0.22957 -0.034 4 6.42 980.3 + 6.44 0.861 0.026 2.840 0.22919 -0.034 4 6.44 981.1 + 6.46 0.909 0.025 2.694 0.22978 -0.034 4 6.46 981.9 + 6.48 1.000 0.024 2.524 0.23793 -0.034 4 6.48 982.7 + 6.50 1.081 0.024 2.439 0.24216 -0.034 4 6.50 983.5 + 6.52 1.100 0.024 2.436 0.23493 -0.034 4 6.52 984.3 + 6.54 1.034 0.022 2.263 0.21650 -0.034 4 6.54 985.1 + 6.56 0.967 0.023 2.358 0.21492 -0.034 4 6.56 985.9 + 6.58 0.884 0.021 2.339 0.24490 -0.034 4 6.58 986.7 + 6.60 0.802 0.024 2.740 0.33208 -0.034 4 6.60 987.5 + 6.62 0.765 0.025 3.029 0.41684 -0.034 4 6.62 988.3 + 6.64 0.733 0.024 2.926 0.44997 -0.034 4 6.64 989.1 + 6.66 0.760 0.024 2.885 0.41252 -0.034 4 6.66 989.9 + 6.68 0.868 0.020 2.381 0.36351 -0.035 4 6.68 990.7 + 6.70 0.949 0.017 1.979 0.35401 -0.035 5 6.70 991.5 + 6.72 0.935 0.019 2.031 0.37128 -0.035 4 6.72 992.3 + 6.74 0.937 0.020 1.996 0.40892 -0.035 4 6.74 993.1 + 6.76 0.994 0.020 1.833 0.45267 -0.034 4 6.76 993.9 + 6.78 1.111 0.020 1.759 0.38823 -0.036 5 6.78 994.7 + 6.80 1.276 0.021 1.651 0.29625 -0.036 5 6.80 995.5 + 6.82 1.449 0.022 1.625 0.27800 -0.035 5 6.82 996.3 + 6.84 1.572 0.022 1.473 0.27797 -0.035 5 6.84 997.1 + 6.86 1.692 0.021 1.314 0.26627 -0.036 5 6.86 998.0 + 6.88 1.796 0.018 1.069 0.25688 -0.036 5 6.88 998.7 + 6.90 1.924 0.017 0.961 0.21200 -0.035 5 6.90 999.6 + 6.92 1.997 0.015 0.851 0.17451 -0.034 6 6.92 1000.3 + 6.94 1.908 0.015 0.866 0.14660 -0.035 5 6.94 1001.1 + 6.96 1.689 0.015 0.923 0.13928 -0.035 5 6.96 1002.0 + 6.98 1.449 0.017 1.109 0.14239 -0.035 5 6.98 1002.8 + 7.00 1.283 0.020 1.369 0.15137 -0.035 5 7.00 1003.5 + 7.02 1.165 0.023 1.650 0.17377 -0.035 4 7.02 1004.4 + 7.04 1.176 0.023 1.684 0.20768 -0.035 4 7.04 1005.2 + 7.06 1.287 0.022 1.522 0.30881 -0.035 5 7.06 1006.0 + 7.08 1.457 0.021 1.386 0.35093 -0.035 5 7.08 1006.8 + 7.10 1.697 0.022 1.245 0.25192 -0.035 5 7.10 1007.6 + 7.12 1.952 0.020 1.051 0.20000 -0.035 5 7.12 1008.4 + 7.14 2.287 0.018 0.825 0.17718 -0.035 6 7.14 1009.2 + 7.16 2.654 0.017 0.708 0.16372 -0.035 6 7.16 1010.0 + 7.18 2.841 0.017 0.675 0.15253 -0.035 6 7.18 1010.8 + 7.20 2.799 0.017 0.670 0.14246 -0.035 6 7.20 1011.6 + 7.22 2.705 0.018 0.694 0.13180 -0.035 6 7.22 1012.4 + 7.24 2.522 0.018 0.727 0.12047 -0.035 6 7.24 1013.2 + 7.26 2.300 0.018 0.767 0.11485 -0.035 6 7.26 1014.0 + 7.28 2.043 0.016 0.730 0.11386 -0.035 5 7.28 1014.8 + 7.30 1.789 0.014 0.693 0.11776 -0.035 5 7.30 1015.6 + 7.32 1.551 0.012 0.664 0.12394 -0.035 5 7.32 1016.5 + 7.34 1.324 0.014 0.813 0.12972 -0.035 5 7.34 1017.3 + 7.36 1.239 0.015 1.068 0.12469 -0.035 5 7.36 1021.4 + 7.38 1.177 0.015 1.209 0.11967 -0.035 5 7.38 1026.0 + 7.40 1.116 0.015 1.256 0.11585 -0.035 5 7.40 1030.7 + 7.42 1.047 0.014 1.260 0.13989 -0.036 5 7.42 1032.5 + 7.44 1.048 0.012 1.117 0.17407 -0.036 5 7.44 1033.3 + 7.46 1.068 0.013 1.261 0.20018 -0.036 5 7.46 1034.1 + 7.48 1.048 0.013 1.347 0.19665 -0.036 5 7.48 1034.9 + 7.50 0.983 0.011 1.223 0.19342 -0.036 5 7.50 1035.8 + 7.52 0.884 0.011 1.247 0.20364 -0.034 5 7.52 1036.5 + 7.54 0.745 0.011 1.389 0.22945 -0.036 5 7.54 1037.3 + 7.56 0.653 0.015 1.984 0.26061 -0.036 4 7.56 1038.2 + 7.58 0.591 0.003 0.467 0.31084 -0.036 5 7.58 1038.9 + 7.60 0.556 0.004 0.597 0.35224 -0.026 5 7.60 1039.8 + 7.62 0.553 0.004 0.631 0.39114 -0.022 5 7.62 1040.5 + 7.64 0.549 0.004 0.688 0.36860 -0.022 5 7.64 1041.3 + 7.66 0.553 0.004 0.779 0.37650 -0.022 5 7.66 1042.1 + 7.68 0.555 0.005 0.818 0.38540 -0.022 5 7.68 1042.9 + 7.70 0.562 0.005 0.784 0.38287 -0.022 5 7.70 1043.8 + 7.72 0.575 0.005 0.822 0.38490 -0.022 5 7.72 1044.6 + 7.74 0.610 0.005 0.792 0.38209 -0.022 5 7.74 1045.3 + 7.76 0.676 0.005 0.678 0.29806 -0.022 5 7.76 1046.2 + 7.78 0.744 0.005 0.726 0.25562 -0.022 5 7.78 1047.0 + 7.80 0.783 0.005 0.612 0.23835 -0.022 5 7.80 1047.7 + 7.82 0.787 0.004 0.546 0.24483 -0.022 5 7.82 1048.6 + 7.84 0.823 0.004 0.464 0.25013 -0.022 5 7.84 1049.3 + 7.86 0.924 0.005 0.538 0.23406 -0.022 5 7.86 1050.2 + 7.88 0.974 0.006 0.586 0.21340 -0.022 5 7.88 1051.0 + 7.90 1.003 0.007 0.659 0.20000 -0.022 5 7.90 1051.8 + 7.92 1.047 0.006 0.545 0.20733 -0.022 5 7.92 1052.6 + 7.94 1.217 0.005 0.369 0.22123 -0.022 5 7.94 1053.4 + 7.96 1.461 0.004 0.340 0.21653 -0.022 6 7.96 1054.2 + 7.98 1.569 0.007 0.511 0.18117 -0.022 6 7.98 1055.0 + 8.00 1.515 0.009 0.640 0.16455 -0.022 5 8.00 1055.8 + 8.02 1.408 0.008 0.595 0.16604 -0.008 5 8.02 1056.6 + 8.04 1.332 0.009 0.612 0.17657 0.020 5 8.04 1057.4 + 8.06 1.288 0.007 0.499 0.19160 0.020 5 8.06 1058.2 + 8.08 1.338 0.007 0.489 0.20540 0.020 5 8.08 1059.0 + 8.10 1.472 0.008 0.625 0.20118 0.020 5 8.10 1059.8 + 8.12 1.461 0.010 0.802 0.18659 0.020 5 8.12 1060.6 + 8.14 1.308 0.012 0.973 0.17442 0.019 5 8.14 1061.4 + 8.16 1.101 0.014 1.235 0.16551 0.020 5 8.16 1062.2 + 8.18 0.926 0.014 1.335 0.17137 0.020 5 8.18 1063.0 + 8.20 0.851 0.015 1.537 0.18122 0.020 4 8.20 1063.8 + 8.22 0.778 0.014 1.680 0.19254 0.020 4 8.22 1064.6 + 8.24 0.694 0.013 1.751 0.20719 0.021 4 8.24 1065.4 + 8.26 0.655 0.010 1.427 0.22349 0.020 4 8.26 1066.2 + 8.28 0.628 0.007 0.946 0.25649 0.020 5 8.28 1067.0 + 8.30 0.632 0.003 0.465 0.28585 0.020 5 8.30 1067.8 + 8.32 0.654 0.000 0.073 0.28333 0.020 0 8.32 1068.7 + 8.34 0.686 0.001 0.160 0.27085 0.020 5 8.34 1069.8 + 8.36 0.734 0.002 0.342 0.25886 0.021 5 8.36 1074.4 + 8.38 0.782 0.003 0.419 0.24688 0.021 5 8.38 1078.9 + 8.40 0.830 0.003 0.337 0.23910 0.021 5 8.40 1083.4 + 8.42 0.917 0.002 0.239 0.24406 0.021 5 8.42 1084.6 + 8.44 1.036 0.003 0.332 0.23124 0.021 5 8.44 1085.4 + 8.46 1.132 0.003 0.329 0.20892 0.021 5 8.46 1086.2 + 8.48 1.159 0.004 0.330 0.19600 0.021 5 8.48 1087.0 + 8.50 1.151 0.005 0.413 0.19481 0.021 5 8.50 1087.8 + 8.52 1.193 0.005 0.390 0.19717 0.022 5 8.52 1088.6 + 8.54 1.253 0.004 0.286 0.20050 0.021 5 8.54 1089.4 + 8.56 1.326 0.004 0.307 0.20165 0.021 5 8.56 1090.2 + 8.58 1.392 0.004 0.297 0.18746 0.021 5 8.58 1091.0 + 8.60 1.396 0.006 0.434 0.18138 0.021 5 8.60 1091.8 + 8.62 1.284 0.007 0.580 0.19147 0.021 5 8.62 1092.6 + 8.64 1.171 0.011 0.828 0.20638 0.021 5 8.64 1093.4 + 8.66 1.130 0.011 0.823 0.21577 0.021 5 8.66 1094.2 + 8.68 1.201 0.012 0.893 0.21484 0.021 5 8.68 1095.0 + 8.70 1.331 0.012 0.869 0.21563 0.021 5 8.70 1095.8 + 8.72 1.457 0.010 0.697 0.21779 0.021 5 8.72 1096.6 + 8.74 1.616 0.010 0.630 0.19848 0.022 5 8.74 1097.4 + 8.76 1.782 0.009 0.527 0.19370 0.022 5 8.76 1098.2 + 8.78 2.014 0.010 0.512 0.18106 0.022 6 8.78 1099.0 + 8.80 2.194 0.011 0.539 0.17198 0.022 6 8.80 1099.8 + 8.82 2.314 0.014 0.606 0.17277 0.022 6 8.82 1100.6 + 8.84 2.471 0.015 0.637 0.17355 0.021 6 8.84 1101.5 + 8.86 2.652 0.017 0.686 0.16122 0.022 6 8.86 1102.3 + 8.88 2.788 0.019 0.706 0.14873 0.021 6 8.88 1103.1 + 8.90 2.810 0.020 0.735 0.14690 0.022 6 8.90 1103.8 + 8.92 2.799 0.022 0.789 0.15016 0.022 6 8.92 1104.7 + 8.94 2.789 0.024 0.861 0.15655 0.021 6 8.94 1105.5 + 8.96 2.753 0.026 0.938 0.15340 0.022 5 8.96 1106.3 + 8.98 2.729 0.029 1.008 0.14933 0.022 5 8.98 1107.1 + 9.00 2.781 0.029 1.009 0.14441 0.022 5 9.00 1107.9 + 9.02 2.941 0.028 0.915 0.13717 0.022 6 9.02 1108.7 + 9.04 3.106 0.027 0.846 0.13507 0.022 6 9.04 1109.5 + 9.06 3.306 0.028 0.803 0.14090 0.022 6 9.06 1110.3 + 9.08 3.645 0.028 0.734 0.13779 0.022 6 9.08 1111.1 + 9.10 4.144 0.028 0.676 0.13084 0.022 6 9.10 1112.0 + 9.12 4.666 0.026 0.565 0.12718 0.022 6 9.12 1112.7 + 9.14 5.236 0.024 0.500 0.13275 0.022 6 9.14 1113.5 + 9.16 5.732 0.026 0.498 0.11993 0.022 6 9.16 1114.4 + 9.18 5.844 0.028 0.532 0.10957 0.023 6 9.18 1115.2 + 9.20 5.677 0.032 0.597 0.10636 0.022 6 9.20 1116.0 + 9.22 5.361 0.032 0.621 0.10607 0.022 6 9.22 1116.8 + 9.24 4.952 0.034 0.692 0.11094 0.022 6 9.24 1117.6 + 9.26 4.544 0.035 0.764 0.11271 0.022 6 9.26 1118.4 + 9.28 4.120 0.031 0.688 0.11370 0.022 6 9.28 1119.2 + 9.30 3.715 0.026 0.612 0.11959 0.023 6 9.30 1120.0 + 9.32 3.384 0.021 0.536 0.12711 0.023 6 9.32 1120.8 + 9.34 3.151 0.021 0.567 0.13427 0.023 6 9.34 1121.6 + 9.36 3.117 0.021 0.610 0.12231 0.023 6 9.36 1125.2 + 9.38 3.143 0.021 0.634 0.11036 0.024 6 9.38 1130.0 + 9.40 3.168 0.021 0.646 0.09840 0.024 6 9.40 1134.7 + 9.42 3.193 0.021 0.656 0.10515 0.023 6 9.42 1136.9 + 9.44 3.228 0.023 0.706 0.11426 0.022 6 9.44 1137.7 + 9.46 3.287 0.025 0.750 0.11908 0.021 6 9.46 1138.5 + 9.48 3.401 0.025 0.750 0.12259 0.021 6 9.48 1139.3 + 9.50 3.480 0.026 0.769 0.12503 0.022 6 9.50 1140.1 + 9.52 3.525 0.027 0.788 0.12794 0.022 6 9.52 1141.0 + 9.54 3.503 0.028 0.811 0.12923 0.022 6 9.54 1141.7 + 9.56 3.322 0.027 0.808 0.12049 0.022 6 9.56 1142.7 + 9.58 3.119 0.027 0.837 0.11865 0.022 6 9.58 1143.8 + 9.60 2.916 0.028 0.905 0.11681 0.022 5 9.60 1145.0 + 9.62 2.753 0.027 0.883 0.11295 0.023 5 9.62 1146.1 + 9.64 2.788 0.025 0.782 0.11065 0.022 5 9.64 1146.8 + 9.66 2.961 0.022 0.671 0.11451 0.022 6 9.66 1147.7 + 9.68 3.343 0.021 0.610 0.12446 0.022 6 9.68 1148.5 + 9.70 3.826 0.022 0.613 0.13604 0.023 6 9.70 1149.3 + 9.72 4.105 0.023 0.580 0.15994 0.022 6 9.72 1150.1 + 9.74 4.262 0.021 0.492 0.15000 0.024 6 9.74 1150.9 + 9.76 4.629 0.021 0.459 0.12846 0.022 6 9.76 1151.7 + 9.78 5.121 0.023 0.467 0.12499 0.022 6 9.78 1152.5 + 9.80 5.761 0.028 0.563 0.11974 0.022 6 9.80 1153.3 + 9.82 5.823 0.035 0.709 0.11470 0.022 6 9.82 1154.1 + 9.84 5.376 0.042 0.876 0.10734 0.022 6 9.84 1155.0 + 9.86 4.742 0.050 1.117 0.09876 0.022 6 9.86 1155.7 + 9.88 3.746 0.056 1.399 0.09757 0.022 5 9.88 1156.6 + 9.90 2.957 0.060 1.728 0.10115 0.022 4 9.90 1157.3 + 9.92 2.374 0.061 2.134 0.10496 0.023 4 9.92 1158.1 + 9.94 1.876 0.060 2.509 0.10889 0.023 4 9.94 1159.0 + 9.96 1.571 0.057 2.965 0.11180 0.022 4 9.96 1159.8 + 9.98 1.387 0.054 3.401 0.11487 0.023 4 9.98 1160.6 + 10.00 1.238 0.048 3.592 0.12629 0.022 3 10.00 1161.4 + 10.02 1.053 0.039 3.476 0.15697 0.022 3 10.02 1162.2 + 10.04 0.851 0.031 3.150 0.22480 0.022 3 10.04 1163.0 + 10.06 0.731 0.024 2.675 0.30387 0.022 3 10.06 1163.8 + 10.08 0.674 0.019 2.161 0.35229 0.023 3 10.08 1164.6 + 10.10 0.665 0.014 1.587 0.38738 0.023 4 10.10 1165.4 + 10.12 0.870 0.011 1.246 0.40429 0.023 5 10.12 1166.2 + 10.14 1.153 0.013 1.409 0.40704 0.023 5 10.14 1167.0 + 10.16 1.162 0.014 1.483 0.32100 0.023 5 10.16 1167.8 + 10.18 1.039 0.015 1.537 0.25340 0.023 5 10.18 1168.6 + 10.20 0.926 0.015 1.610 0.25879 0.023 4 10.20 1169.4 + 10.22 0.849 0.016 1.721 0.30710 0.023 4 10.22 1170.2 + 10.24 0.799 0.015 1.738 0.38088 0.023 4 10.24 1171.0 + 10.26 0.797 0.015 1.798 0.43347 0.023 4 10.26 1171.8 + 10.28 0.816 0.013 1.584 0.48211 0.023 5 10.28 1172.6 + 10.30 0.813 0.011 1.339 0.39097 0.023 5 10.30 1173.4 + 10.32 0.762 0.009 1.093 0.36138 0.023 5 10.32 1174.3 + 10.34 0.710 0.009 1.028 0.42287 0.023 5 10.34 1175.0 + 10.36 0.917 0.008 0.761 0.38447 0.024 5 10.36 1178.1 + 10.38 1.284 0.009 0.736 0.32782 0.024 5 10.38 1183.0 + 10.40 1.650 0.009 0.738 0.27117 0.025 5 10.40 1187.9 + 10.42 1.753 0.011 0.881 0.20803 0.025 5 10.42 1190.3 + 10.44 1.531 0.014 1.081 0.19146 0.025 5 10.44 1191.2 + 10.46 1.284 0.018 1.430 0.19748 0.025 5 10.46 1192.0 + 10.48 1.109 0.019 1.576 0.21332 0.025 4 10.48 1192.8 + 10.50 0.948 0.019 1.771 0.24117 0.025 4 10.50 1193.5 + 10.52 0.810 0.018 1.867 0.29056 0.024 4 10.52 1194.3 + 10.54 0.753 0.016 1.884 0.32378 0.025 4 10.54 1195.2 + 10.56 0.727 0.013 1.653 0.34494 0.025 4 10.56 1196.0 + 10.58 0.731 0.010 1.292 0.36280 0.024 5 10.58 1196.8 + 10.60 0.756 0.008 1.083 0.38130 0.026 5 10.60 1197.5 + 10.62 0.787 0.007 0.965 0.40522 0.026 5 10.62 1198.4 + 10.64 0.772 0.007 0.952 0.39822 0.026 5 10.64 1199.2 + 10.66 0.730 0.007 1.013 0.41090 0.026 5 10.66 1200.0 + 10.68 0.673 0.007 0.942 0.45200 0.026 5 10.68 1200.8 + 10.70 0.659 0.006 0.848 0.48620 0.026 5 10.70 1201.6 + 10.72 0.658 0.007 1.001 0.49716 0.026 5 10.72 1202.4 + 10.74 0.660 0.006 0.910 0.49572 0.026 5 10.74 1203.2 + 10.76 0.675 0.006 0.883 0.50176 0.026 5 10.76 1204.0 + 10.78 0.683 0.008 1.185 0.49455 0.028 5 10.78 1204.8 + 10.80 0.679 0.008 1.211 0.49928 0.026 5 10.80 1205.6 + 10.82 0.666 0.008 1.216 0.52558 0.026 5 10.82 1206.4 + 10.84 0.659 0.008 1.260 0.54090 0.027 5 10.84 1207.2 + 10.86 0.657 0.009 1.303 0.55538 0.027 5 10.86 1208.0 + 10.88 0.652 0.009 1.342 0.56676 0.027 5 10.88 1208.8 + 10.90 0.653 0.009 1.340 0.57242 0.027 5 10.90 1209.6 + 10.92 0.661 0.009 1.314 0.57377 0.027 5 10.92 1210.4 + 10.94 0.667 0.008 1.249 0.58242 0.028 5 10.94 1211.2 + 10.96 0.668 0.010 1.515 0.58938 0.027 5 10.96 1212.0 + 10.98 0.660 0.010 1.532 0.58750 0.026 5 10.98 1212.8 + 11.00 0.663 0.012 1.655 0.58203 0.027 4 11.00 1213.6 + 11.02 0.686 0.013 1.792 0.59544 0.026 4 11.02 1214.4 + 11.04 0.767 0.013 1.767 0.64668 0.028 4 11.04 1215.2 + 11.06 0.846 0.015 1.858 0.64985 0.029 5 11.06 1216.0 + 11.08 0.904 0.017 2.048 0.66938 0.029 4 11.08 1216.8 + 11.10 0.863 0.018 2.087 0.72811 0.029 4 11.10 1217.6 + 11.12 0.873 0.019 2.070 0.75395 0.030 4 11.12 1218.4 + 11.14 0.917 0.021 2.213 0.78735 0.031 4 11.14 1219.3 + 11.16 0.983 0.021 2.224 0.84879 0.032 4 11.16 1220.1 + 11.18 1.040 0.024 2.379 0.90699 0.033 4 11.18 1220.8 + 11.20 1.060 0.026 2.525 0.90729 0.033 4 11.20 1221.7 + 11.22 1.077 0.028 2.689 0.86935 0.033 4 11.22 1222.5 + 11.24 1.067 0.030 2.860 0.84817 0.033 4 11.24 1223.3 + 11.26 1.064 0.033 3.127 0.81202 0.033 4 11.26 1224.1 + 11.28 1.044 0.033 3.145 0.81258 0.034 4 11.28 1224.9 + 11.30 1.037 0.033 3.100 0.81011 0.034 4 11.30 1225.7 + 11.32 1.039 0.032 3.055 0.82193 0.035 4 11.32 1226.5 + 11.34 1.067 0.034 3.203 0.83296 0.037 4 11.34 1227.3 + 11.36 1.119 0.037 3.362 0.85489 0.039 4 11.36 1229.1 + 11.38 1.185 0.038 3.300 0.89225 0.050 4 11.38 1233.8 + 11.40 1.251 0.046 3.744 0.92960 0.061 4 11.40 1238.6 + 11.42 1.312 0.054 4.236 0.90481 0.070 4 11.42 1242.5 + 11.44 1.345 0.063 4.817 0.78454 0.070 4 11.44 1243.4 + 11.46 1.341 0.070 5.374 0.70875 0.070 10 11.46 1244.1 + 11.48 1.335 0.073 5.627 0.70188 0.070 10 11.48 1245.0 + 11.50 1.305 0.076 5.802 0.74987 0.070 10 11.50 1245.8 + 11.52 1.277 0.077 5.921 0.81534 0.071 10 11.52 1246.6 + 11.54 1.252 0.074 5.740 0.85273 0.071 10 11.54 1247.3 + 11.56 1.263 0.070 5.370 0.88442 0.072 10 11.56 1248.1 + 11.58 1.296 0.067 5.044 0.93586 0.072 10 11.58 1249.0 + 11.60 1.328 0.066 4.866 0.94157 0.073 4 11.60 1249.8 + 11.62 1.377 0.070 5.048 0.97163 0.073 10 11.62 1250.6 + 11.64 1.467 0.078 5.521 0.91795 0.073 10 11.64 1251.4 + 11.66 1.497 0.089 6.095 0.90225 0.074 10 11.66 1252.1 + 11.68 1.530 0.099 6.605 0.79127 0.074 3 11.68 1253.0 + 11.70 1.558 0.112 7.263 0.74280 0.074 3 11.70 1253.8 + 11.72 1.578 0.122 7.851 0.76846 0.075 3 11.72 1254.6 + 11.74 1.614 0.130 8.434 0.82921 0.076 3 11.74 1255.4 + 11.76 1.597 0.133 8.779 0.84315 0.077 3 11.76 1256.2 + 11.78 1.534 0.130 8.870 0.77640 0.089 3 11.78 1257.0 + 11.80 1.401 0.126 8.878 0.65748 0.117 10 11.80 1257.8 + 11.82 1.277 0.121 8.743 0.57347 0.118 10 11.82 1258.6 + 11.84 1.203 0.115 8.267 0.57580 0.118 10 11.84 1259.5 + 11.86 1.205 0.108 7.296 0.62246 0.119 10 11.86 1260.3 + 11.88 1.364 0.105 6.303 0.79372 0.119 10 11.88 1261.1 + 11.90 1.732 0.101 5.153 0.91521 0.120 3 11.90 1261.9 + 11.92 2.224 0.096 4.021 0.67300 0.122 4 11.92 1262.7 + 11.94 2.925 0.086 2.996 0.25331 0.123 4 11.94 1263.5 + 11.96 3.697 0.069 2.016 0.15592 0.124 5 11.96 1264.3 + 11.98 4.354 0.059 1.476 0.13059 0.123 5 11.98 1265.1 + 12.00 4.936 0.055 1.261 0.11689 0.125 6 12.00 1265.9 + 12.02 5.332 0.054 1.065 0.10906 0.125 6 12.02 1266.7 + 12.04 5.669 0.054 0.985 0.10503 0.126 6 12.04 1267.5 + 12.06 5.993 0.054 0.904 0.10273 0.126 6 12.06 1268.3 + 12.08 6.423 0.053 0.838 0.10132 0.127 6 12.08 1269.2 + 12.10 6.907 0.055 0.808 0.09999 0.128 6 12.10 1270.0 + 12.12 7.443 0.060 0.826 0.09856 0.128 6 12.12 1270.8 + 12.14 7.919 0.065 0.847 0.09747 0.128 6 12.14 1271.6 + 12.16 8.346 0.070 0.871 0.09648 0.128 6 12.16 1272.5 + 12.18 8.629 0.075 0.905 0.09567 0.129 6 12.18 1273.2 + 12.20 8.807 0.079 0.944 0.09424 0.129 6 12.20 1274.1 + 12.22 8.777 0.083 0.991 0.09319 0.129 6 12.22 1274.8 + 12.24 8.540 0.087 1.046 0.09290 0.129 6 12.24 1275.7 + 12.26 8.207 0.089 1.106 0.09328 0.130 6 12.26 1276.5 + 12.28 7.752 0.084 1.062 0.09432 0.131 6 12.28 1277.3 + 12.30 7.290 0.071 0.926 0.09601 0.139 6 12.30 1278.1 + 12.32 6.808 0.059 0.791 0.09831 0.140 6 12.32 1278.9 + 12.34 6.425 0.054 0.747 0.10042 0.140 6 12.34 1279.7 + 12.36 6.115 0.053 0.799 0.10175 0.140 6 12.36 1281.3 + 12.38 5.832 0.051 0.824 0.10269 0.140 6 12.38 1286.2 + 12.40 5.548 0.050 0.860 0.10364 0.141 6 12.40 1291.0 + 12.42 5.317 0.048 0.866 0.10415 0.141 6 12.42 1295.0 + 12.44 5.270 0.049 0.912 0.10453 0.141 6 12.44 1295.8 + 12.46 5.223 0.050 0.931 0.10457 0.141 6 12.46 1296.6 + 12.48 5.218 0.050 0.935 0.10447 0.141 6 12.48 1297.5 + 12.50 5.261 0.048 0.895 0.10378 0.141 6 12.50 1298.3 + 12.52 5.345 0.046 0.847 0.10279 0.143 6 12.52 1299.1 + 12.54 5.460 0.044 0.810 0.10208 0.142 6 12.54 1299.9 + 12.56 5.592 0.045 0.810 0.10178 0.141 6 12.56 1300.7 + 12.58 5.744 0.047 0.814 0.10130 0.142 6 12.58 1301.5 + 12.60 5.909 0.047 0.801 0.10054 0.142 6 12.60 1302.3 + 12.62 6.117 0.048 0.790 0.09997 0.142 6 12.62 1303.1 + 12.64 6.328 0.049 0.781 0.09955 0.141 6 12.64 1303.9 + 12.66 6.546 0.050 0.776 0.09930 0.142 6 12.66 1304.7 + 12.68 6.773 0.052 0.773 0.09941 0.142 6 12.68 1305.6 + 12.70 6.991 0.054 0.772 0.09964 0.142 6 12.70 1306.4 + 12.72 7.221 0.055 0.773 0.10003 0.143 6 12.72 1307.2 + 12.74 7.472 0.057 0.763 0.10065 0.142 6 12.74 1308.0 + 12.76 7.739 0.059 0.769 0.10094 0.142 6 12.76 1308.8 + 12.78 8.006 0.061 0.774 0.10102 0.142 6 12.78 1309.6 + 12.80 8.238 0.063 0.785 0.10038 0.142 6 12.80 1310.4 + 12.82 8.403 0.066 0.796 0.09985 0.142 6 12.82 1311.3 + 12.84 8.527 0.068 0.799 0.09992 0.142 6 12.84 1312.1 + 12.86 8.658 0.070 0.808 0.09989 0.142 6 12.86 1312.9 + 12.88 8.799 0.071 0.812 0.10001 0.142 6 12.88 1313.7 + 12.90 8.972 0.073 0.820 0.09984 0.142 6 12.90 1314.5 + 12.92 9.106 0.075 0.833 0.09982 0.142 6 12.92 1315.3 + 12.94 9.210 0.077 0.835 0.10023 0.142 6 12.94 1316.1 + 12.96 9.337 0.078 0.845 0.10069 0.143 6 12.96 1316.9 + 12.98 9.490 0.079 0.831 0.10057 0.142 6 12.98 1317.7 + 13.00 9.642 0.079 0.821 0.10046 0.142 6 13.00 1318.5 + 13.02 9.819 0.080 0.819 0.10066 0.143 6 13.02 1319.4 + 13.04 10.003 0.081 0.819 0.10130 0.143 6 13.04 1320.2 + 13.06 10.182 0.082 0.818 0.10192 0.143 6 13.06 1321.0 + 13.08 10.302 0.083 0.813 0.10169 0.143 6 13.08 1321.8 + 13.10 10.353 0.083 0.807 0.10167 0.143 6 13.10 1322.6 + 13.12 10.369 0.083 0.807 0.10170 0.143 6 13.12 1323.4 + 13.14 10.388 0.084 0.806 0.10121 0.143 6 13.14 1324.3 + 13.16 10.468 0.085 0.808 0.10125 0.143 6 13.16 1325.1 + 13.18 10.603 0.086 0.814 0.10112 0.143 6 13.18 1325.9 + 13.20 10.704 0.088 0.824 0.10113 0.144 6 13.20 1326.7 + 13.22 10.733 0.089 0.827 0.10140 0.144 6 13.22 1327.5 + 13.24 10.783 0.090 0.825 0.10196 0.144 6 13.24 1328.3 + 13.26 10.935 0.091 0.821 0.10252 0.144 6 13.26 1329.2 + 13.28 11.197 0.083 0.740 0.10266 0.144 6 13.28 1330.0 + 13.30 11.515 0.072 0.641 0.10284 0.144 6 13.30 1330.8 + 13.32 11.844 0.062 0.542 0.10332 0.144 6 13.32 1331.6 + 13.34 12.215 0.066 0.562 0.10359 0.144 6 13.34 1332.5 + 13.36 12.436 0.069 0.574 0.10456 0.144 6 13.36 1335.1 + 13.38 12.553 0.076 0.606 0.10552 0.144 6 13.38 1340.0 + 13.40 12.670 0.080 0.615 0.10648 0.144 6 13.40 1344.9 + 13.42 13.136 0.083 0.615 0.10766 0.145 6 13.42 1347.8 + 13.44 13.797 0.089 0.633 0.10708 0.145 6 13.44 1348.6 + 13.46 14.445 0.096 0.671 0.10917 0.146 6 13.46 1349.4 + 13.48 15.001 0.103 0.707 0.11258 0.146 6 13.48 1350.2 + 13.50 15.468 0.109 0.726 0.11420 0.146 6 13.50 1351.0 + 13.52 15.930 0.114 0.734 0.11418 0.146 6 13.52 1351.9 + 13.54 16.335 0.120 0.748 0.11317 0.146 6 13.54 1352.7 + 13.56 16.693 0.125 0.765 0.11122 0.146 6 13.56 1353.5 + 13.58 17.025 0.132 0.787 0.10918 0.146 6 13.58 1354.3 + 13.60 17.288 0.138 0.815 0.10825 0.147 6 13.60 1355.1 + 13.62 17.506 0.144 0.840 0.10857 0.147 6 13.62 1356.0 + 13.64 17.562 0.149 0.866 0.10968 0.147 6 13.64 1356.8 + 13.66 17.478 0.152 0.883 0.11029 0.147 6 13.66 1357.6 + 13.68 17.256 0.154 0.901 0.11164 0.147 6 13.68 1358.4 + 13.70 16.930 0.161 0.946 0.11241 0.147 6 13.70 1359.2 + 13.72 16.613 0.160 0.949 0.11377 0.147 6 13.72 1360.0 + 13.74 16.377 0.151 0.908 0.11633 0.147 6 13.74 1360.9 + 13.76 16.202 0.137 0.829 0.12241 0.148 6 13.76 1361.7 + 13.78 16.076 0.127 0.773 0.13455 0.148 6 13.78 1362.5 + 13.80 16.203 0.121 0.740 0.14255 0.148 6 13.80 1363.3 + 13.82 16.358 0.115 0.708 0.15305 0.147 6 13.82 1364.1 + 13.84 16.303 0.105 0.654 0.14745 0.148 6 13.84 1365.0 + 13.86 16.075 0.096 0.602 0.13441 0.149 6 13.86 1365.8 + 13.88 15.779 0.095 0.607 0.12642 0.149 6 13.88 1366.6 + 13.90 15.397 0.099 0.641 0.12129 0.149 6 13.90 1367.5 + 13.92 14.935 0.103 0.688 0.12029 0.149 6 13.92 1368.3 + 13.94 14.324 0.107 0.734 0.12077 0.149 6 13.94 1369.1 + 13.96 13.797 0.108 0.763 0.12172 0.149 6 13.96 1369.9 + 13.98 13.433 0.107 0.775 0.12096 0.151 6 13.98 1370.7 + 14.00 13.207 0.105 0.781 0.11608 0.149 6 14.00 1371.5 + 14.02 13.128 0.102 0.778 0.11390 0.149 6 14.02 1372.3 + 14.04 13.004 0.103 0.797 0.11389 0.150 6 14.04 1373.1 + 14.06 12.781 0.100 0.790 0.11389 0.150 6 14.06 1373.9 + 14.08 12.513 0.096 0.781 0.11597 0.150 6 14.08 1374.5 + 14.10 11.851 0.096 0.793 0.11867 0.150 6 14.10 1375.6 + 14.12 11.386 0.093 0.789 0.11840 0.150 6 14.12 1376.4 + 14.14 11.074 0.090 0.774 0.11657 0.150 6 14.14 1377.2 + 14.16 11.054 0.088 0.765 0.11425 0.150 6 14.16 1378.0 + 14.18 11.282 0.086 0.761 0.11320 0.150 6 14.18 1378.8 + 14.20 11.442 0.088 0.779 0.11281 0.151 6 14.20 1379.6 + 14.22 11.499 0.091 0.796 0.11189 0.151 6 14.22 1380.5 + 14.24 11.513 0.093 0.811 0.11351 0.151 6 14.24 1381.3 + 14.26 11.514 0.094 0.815 0.11504 0.151 6 14.26 1382.1 + 14.28 11.491 0.086 0.737 0.11363 0.151 6 14.28 1382.9 + 14.30 11.635 0.075 0.643 0.11346 0.151 6 14.30 1383.7 + 14.32 11.915 0.065 0.548 0.11378 0.151 6 14.32 1384.5 + 14.34 12.335 0.067 0.560 0.11422 0.151 6 14.34 1385.4 + 14.36 12.843 0.072 0.579 0.11983 0.151 6 14.36 1388.0 + 14.38 13.232 0.077 0.588 0.12711 0.151 6 14.38 1392.9 + 14.40 13.621 0.081 0.584 0.13440 0.151 6 14.40 1397.7 + 14.42 14.265 0.084 0.573 0.13374 0.151 6 14.42 1400.8 + 14.44 15.087 0.086 0.557 0.13149 0.150 6 14.44 1401.5 + 14.46 15.873 0.095 0.602 0.13263 0.152 6 14.46 1402.4 + 14.48 16.601 0.102 0.632 0.13177 0.150 6 14.48 1403.2 + 14.50 17.464 0.107 0.632 0.12944 0.150 6 14.50 1404.0 + 14.52 18.073 0.111 0.627 0.12964 0.150 6 14.52 1404.7 + 14.54 18.841 0.115 0.625 0.13154 0.150 6 14.54 1405.6 + 14.56 19.399 0.124 0.658 0.13424 0.150 6 14.56 1406.5 + 14.58 20.023 0.140 0.727 0.13647 0.150 6 14.58 1407.3 + 14.60 20.417 0.151 0.786 0.13994 0.150 6 14.60 1408.2 + 14.62 20.094 0.155 0.814 0.14250 0.151 6 14.62 1409.0 + 14.64 19.046 0.155 0.835 0.14126 0.149 6 14.64 1409.8 + 14.66 17.588 0.153 0.858 0.13667 0.149 6 14.66 1410.6 + 14.68 16.299 0.152 0.893 0.13217 0.149 6 14.68 1411.4 + 14.70 15.345 0.148 0.916 0.12866 0.148 6 14.70 1412.2 + 14.72 14.665 0.138 0.898 0.12622 0.147 6 14.72 1413.0 + 14.74 14.215 0.123 0.827 0.12412 0.147 6 14.74 1413.8 + 14.76 13.898 0.115 0.799 0.12279 0.147 6 14.76 1414.7 + 14.78 13.704 0.110 0.777 0.12199 0.147 6 14.78 1415.5 + 14.80 13.610 0.107 0.768 0.12250 0.147 6 14.80 1416.3 + 14.82 13.620 0.105 0.757 0.12313 0.147 6 14.82 1417.1 + 14.84 13.727 0.103 0.742 0.12357 0.147 6 14.84 1417.9 + 14.86 13.922 0.100 0.715 0.12444 0.147 6 14.86 1418.8 + 14.88 14.172 0.101 0.705 0.12561 0.147 6 14.88 1419.6 + 14.90 14.541 0.103 0.698 0.12710 0.147 6 14.90 1420.4 + 14.92 15.193 0.106 0.693 0.12866 0.147 6 14.92 1421.2 + 14.94 16.006 0.106 0.666 0.13119 0.148 6 14.94 1422.0 + 14.96 17.004 0.105 0.629 0.13379 0.148 6 14.96 1422.8 + 14.98 17.758 0.105 0.593 0.13697 0.148 6 14.98 1423.7 + 15.00 18.584 0.108 0.569 0.14091 0.148 6 15.00 1424.5 + 15.02 20.044 0.122 0.605 0.14658 0.148 6 15.02 1425.3 + 15.04 22.129 0.135 0.633 0.15426 0.150 6 15.04 1426.2 + 15.06 23.981 0.144 0.643 0.16133 0.149 6 15.06 1427.0 + 15.08 25.228 0.150 0.641 0.16793 0.152 6 15.08 1427.9 + 15.10 25.568 0.156 0.645 0.17490 0.153 6 15.10 1428.7 + 15.12 25.593 0.160 0.645 0.18228 0.153 6 15.12 1429.5 + 15.14 25.486 0.162 0.645 0.18748 0.154 6 15.14 1430.4 + 15.16 25.362 0.158 0.627 0.18945 0.154 6 15.16 1431.1 + 15.18 25.161 0.155 0.616 0.18723 0.154 6 15.18 1432.0 + 15.20 24.948 0.149 0.595 0.18289 0.154 6 15.20 1432.8 + 15.22 24.693 0.145 0.588 0.17823 0.154 6 15.22 1433.6 + 15.24 24.370 0.145 0.595 0.17386 0.155 6 15.24 1434.5 + 15.26 24.062 0.148 0.615 0.17140 0.155 6 15.26 1435.1 + 15.28 23.614 0.143 0.601 0.16600 0.155 6 15.28 1436.1 + 15.30 23.196 0.124 0.524 0.16321 0.155 6 15.30 1437.0 + 15.32 22.807 0.104 0.447 0.16098 0.155 7 15.32 1437.8 + 15.34 22.407 0.098 0.424 0.15832 0.155 7 15.34 1438.6 + 15.36 22.041 0.109 0.484 0.15572 0.155 6 15.36 1439.4 + 15.38 21.510 0.116 0.530 0.15320 0.155 6 15.38 1444.5 + 15.40 20.978 0.122 0.574 0.15068 0.155 6 15.40 1449.6 + 15.42 20.489 0.128 0.622 0.14883 0.155 6 15.42 1454.0 + 15.44 20.061 0.132 0.663 0.14763 0.154 6 15.44 1454.8 + 15.46 19.769 0.139 0.708 0.14657 0.155 6 15.46 1455.6 + 15.48 19.295 0.146 0.753 0.14607 0.155 6 15.48 1456.5 + 15.50 18.730 0.144 0.760 0.14527 0.155 6 15.50 1457.3 + 15.52 18.149 0.139 0.757 0.14451 0.155 6 15.52 1458.1 + 15.54 17.613 0.135 0.752 0.14290 0.155 6 15.54 1458.9 + 15.56 17.050 0.128 0.740 0.14050 0.156 6 15.56 1459.7 + 15.58 16.500 0.122 0.725 0.13831 0.154 6 15.58 1460.5 + 15.60 15.899 0.116 0.719 0.13586 0.155 6 15.60 1461.4 + 15.62 15.315 0.109 0.698 0.13407 0.154 6 15.62 1462.2 + 15.64 14.720 0.104 0.687 0.13261 0.154 6 15.64 1463.0 + 15.66 14.206 0.101 0.687 0.13143 0.154 6 15.66 1463.8 + 15.68 13.749 0.098 0.690 0.13055 0.154 6 15.68 1464.6 + 15.70 13.424 0.096 0.688 0.13051 0.154 6 15.70 1465.4 + 15.72 13.220 0.092 0.675 0.13048 0.154 6 15.72 1466.3 + 15.74 13.164 0.090 0.667 0.13068 0.154 6 15.74 1467.0 + 15.76 13.270 0.091 0.664 0.13076 0.155 6 15.76 1467.9 + 15.78 13.575 0.090 0.647 0.13124 0.155 6 15.78 1468.7 + 15.80 14.091 0.094 0.647 0.13186 0.155 6 15.80 1469.5 + 15.82 14.986 0.102 0.667 0.13319 0.154 6 15.82 1470.4 + 15.84 16.126 0.109 0.674 0.13525 0.154 6 15.84 1471.1 + 15.86 17.608 0.113 0.659 0.13992 0.155 6 15.86 1472.0 + 15.88 19.204 0.125 0.685 0.14882 0.155 6 15.88 1472.8 + 15.90 20.540 0.138 0.718 0.16178 0.154 6 15.90 1473.6 + 15.92 21.519 0.149 0.745 0.16333 0.154 6 15.92 1474.5 + 15.94 22.013 0.158 0.763 0.16107 0.154 6 15.94 1475.3 + 15.96 21.921 0.162 0.772 0.15850 0.155 6 15.96 1476.1 + 15.98 21.536 0.162 0.767 0.15738 0.154 6 15.98 1477.0 + 16.00 21.030 0.161 0.768 0.15610 0.154 6 16.00 1477.8 + 16.02 20.415 0.154 0.751 0.15481 0.154 6 16.02 1478.6 + 16.04 19.838 0.145 0.726 0.15335 0.154 6 16.04 1479.4 + 16.06 19.045 0.133 0.692 0.15050 0.154 6 16.06 1480.2 + 16.08 18.226 0.127 0.690 0.14709 0.154 6 16.08 1481.1 + 16.10 17.332 0.124 0.714 0.14417 0.154 6 16.10 1481.9 + 16.12 16.330 0.119 0.729 0.14125 0.154 6 16.12 1482.7 + 16.14 15.131 0.112 0.730 0.13813 0.154 6 16.14 1483.5 + 16.16 13.776 0.105 0.737 0.13552 0.153 6 16.16 1484.3 + 16.18 12.542 0.100 0.749 0.13471 0.153 6 16.18 1485.1 + 16.20 11.514 0.096 0.781 0.13302 0.154 6 16.20 1485.9 + 16.22 10.736 0.091 0.797 0.13260 0.154 6 16.22 1486.7 + 16.24 10.141 0.079 0.732 0.13284 0.154 6 16.24 1487.5 + 16.26 9.662 0.074 0.743 0.13205 0.154 6 16.26 1488.3 + 16.28 9.280 0.067 0.687 0.13282 0.154 6 16.28 1489.2 + 16.30 8.951 0.057 0.594 0.13332 0.153 6 16.30 1490.0 + 16.32 8.673 0.046 0.500 0.13363 0.154 6 16.32 1490.8 + 16.34 8.488 0.042 0.470 0.13388 0.153 6 16.34 1491.6 + 16.36 8.100 0.042 0.497 0.13454 0.153 6 16.36 1492.9 + 16.38 7.760 0.042 0.522 0.13527 0.152 6 16.38 1497.9 + 16.40 7.419 0.041 0.533 0.13599 0.151 6 16.40 1502.9 + 16.42 7.164 0.040 0.529 0.13525 0.151 6 16.42 1507.1 + 16.44 7.184 0.038 0.533 0.13536 0.150 6 16.44 1507.8 + 16.46 7.112 0.039 0.548 0.13522 0.151 6 16.46 1508.7 + 16.48 7.006 0.039 0.552 0.13553 0.151 6 16.48 1509.5 + 16.50 6.917 0.039 0.570 0.13561 0.151 6 16.50 1510.3 + 16.52 6.752 0.040 0.580 0.13567 0.151 6 16.52 1511.1 + 16.54 6.642 0.039 0.575 0.13592 0.151 6 16.54 1511.9 + 16.56 6.543 0.038 0.581 0.13605 0.151 6 16.56 1512.7 + 16.58 6.452 0.038 0.587 0.13623 0.151 6 16.58 1513.5 + 16.60 6.395 0.037 0.574 0.13646 0.151 6 16.60 1514.3 + 16.62 6.329 0.040 0.619 0.13674 0.151 6 16.62 1515.1 + 16.64 6.304 0.038 0.595 0.13678 0.151 6 16.64 1516.0 + 16.66 6.304 0.037 0.574 0.13685 0.151 6 16.66 1516.7 + 16.68 6.372 0.039 0.593 0.13751 0.151 6 16.68 1517.6 + 16.70 6.564 0.042 0.610 0.13801 0.151 6 16.70 1518.4 + 16.72 7.024 0.049 0.652 0.13897 0.152 6 16.72 1519.2 + 16.74 7.788 0.049 0.605 0.13957 0.151 6 16.74 1520.0 + 16.76 8.909 0.050 0.548 0.14266 0.151 6 16.76 1520.8 + 16.78 10.467 0.053 0.520 0.14859 0.151 6 16.78 1521.6 + 16.80 12.280 0.056 0.503 0.16888 0.152 6 16.80 1522.5 + 16.82 13.591 0.061 0.500 0.18647 0.152 6 16.82 1523.3 + 16.84 14.563 0.065 0.490 0.17377 0.152 6 16.84 1524.1 + 16.86 15.071 0.071 0.510 0.15684 0.151 6 16.86 1525.0 + 16.88 15.254 0.076 0.515 0.14742 0.152 6 16.88 1525.8 + 16.90 15.323 0.082 0.543 0.14480 0.152 6 16.90 1526.6 + 16.92 15.404 0.088 0.570 0.14641 0.152 6 16.92 1527.4 + 16.94 15.493 0.090 0.575 0.14859 0.152 6 16.94 1528.2 + 16.96 15.794 0.091 0.574 0.15299 0.152 6 16.96 1529.0 + 16.98 16.275 0.099 0.617 0.15998 0.152 6 16.98 1529.9 + 17.00 16.707 0.103 0.638 0.16404 0.151 6 17.00 1530.7 + 17.02 16.871 0.106 0.663 0.16597 0.151 6 17.02 1531.5 + 17.04 16.479 0.108 0.688 0.16381 0.152 6 17.04 1532.3 + 17.06 15.468 0.109 0.712 0.15674 0.151 6 17.06 1533.1 + 17.08 14.288 0.109 0.739 0.14876 0.152 6 17.08 1534.0 + 17.10 13.247 0.109 0.777 0.14354 0.152 6 17.10 1534.8 + 17.12 12.588 0.106 0.779 0.14214 0.151 6 17.12 1535.6 + 17.14 12.239 0.104 0.790 0.14170 0.151 6 17.14 1536.4 + 17.16 12.231 0.103 0.808 0.14155 0.152 6 17.16 1537.2 + 17.18 12.472 0.103 0.822 0.14173 0.151 6 17.18 1538.0 + 17.20 12.773 0.103 0.827 0.14174 0.151 6 17.20 1538.9 + 17.22 12.789 0.104 0.844 0.14150 0.151 6 17.22 1539.6 + 17.24 12.469 0.104 0.859 0.14188 0.151 6 17.24 1540.5 + 17.26 11.947 0.100 0.846 0.14223 0.151 6 17.26 1541.3 + 17.28 11.236 0.095 0.838 0.14264 0.151 6 17.28 1542.1 + 17.30 10.581 0.084 0.764 0.14250 0.150 6 17.30 1542.9 + 17.32 9.851 0.074 0.690 0.14307 0.150 6 17.32 1543.7 + 17.34 9.153 0.066 0.647 0.14350 0.150 6 17.34 1544.5 + 17.36 8.437 0.070 0.741 0.14506 0.150 6 17.36 1545.3 + 17.38 7.741 0.074 0.872 0.14836 0.150 6 17.38 1550.0 + 17.40 7.044 0.079 1.071 0.15166 0.150 6 17.40 1554.8 + 17.42 6.347 0.079 1.224 0.15657 0.149 5 17.42 1559.6 + 17.44 5.860 0.080 1.320 0.16055 0.149 5 17.44 1560.7 + 17.46 5.466 0.080 1.396 0.16847 0.148 5 17.46 1561.5 + 17.48 5.226 0.074 1.337 0.15240 0.149 5 17.48 1562.3 + 17.50 5.051 0.069 1.364 0.14515 0.148 5 17.50 1563.1 + 17.52 4.801 0.060 1.269 0.15858 0.148 5 17.52 1563.9 + 17.54 4.453 0.053 1.190 0.18808 0.149 5 17.54 1564.7 + 17.56 4.062 0.054 1.276 0.20799 0.149 5 17.56 1565.5 + 17.58 3.726 0.054 1.357 0.22770 0.149 5 17.58 1566.3 + 17.60 3.503 0.060 1.592 0.27027 0.148 5 17.60 1567.1 + 17.62 3.415 0.061 1.680 0.43222 0.149 5 17.62 1567.9 + 17.64 3.450 0.056 1.578 0.75505 0.149 5 17.64 1568.7 + 17.66 3.464 0.048 1.388 0.90266 0.149 5 17.66 1569.5 + 17.68 3.421 0.045 1.327 0.77653 0.149 5 17.68 1570.4 + 17.70 3.372 0.047 1.374 0.48826 0.149 5 17.70 1571.2 + 17.72 3.361 0.047 1.344 0.51123 0.149 5 17.72 1572.0 + 17.74 3.452 0.046 1.294 0.74067 0.149 5 17.74 1572.8 + 17.76 3.637 0.038 1.056 0.90104 0.149 5 17.76 1573.6 + 17.78 3.727 0.036 0.992 0.51077 0.149 5 17.78 1574.4 + 17.80 3.737 0.036 1.007 0.43582 0.149 5 17.80 1575.2 + 17.82 3.686 0.037 1.008 0.42997 0.148 5 17.82 1576.0 + 17.84 3.567 0.038 1.047 0.44993 0.149 5 17.84 1576.8 + 17.86 3.582 0.034 0.927 0.48951 0.149 5 17.86 1577.6 + 17.88 3.704 0.031 0.862 0.56412 0.149 5 17.88 1578.5 + 17.90 3.633 0.029 0.831 0.56237 0.148 5 17.90 1579.3 + 17.92 3.429 0.032 0.964 0.41962 0.149 5 17.92 1580.1 + 17.94 3.122 0.035 1.117 0.35123 0.149 5 17.94 1580.8 + 17.96 2.823 0.041 1.387 0.41180 0.150 5 17.96 1581.7 + 17.98 2.604 0.036 1.297 0.57458 0.150 5 17.98 1582.5 + 18.00 2.438 0.040 1.495 0.78684 0.150 5 18.00 1583.3 + 18.02 2.407 0.047 1.796 1.47311 0.150 5 18.02 1584.1 + 18.04 2.310 0.052 1.911 1.09584 0.150 4 18.04 1584.9 + 18.06 2.469 0.054 1.912 1.06021 0.150 4 18.06 1585.7 + 18.08 2.882 0.055 1.778 1.15685 0.150 5 18.08 1586.5 + 18.10 3.470 0.047 1.377 1.20350 0.150 5 18.10 1587.3 + 18.12 4.009 0.041 1.090 0.97203 0.151 5 18.12 1588.1 + 18.14 4.373 0.041 0.964 0.53018 0.150 5 18.14 1588.9 + 18.16 4.809 0.041 0.880 0.32761 0.152 6 18.16 1589.8 + 18.18 5.373 0.039 0.795 0.27184 0.150 6 18.18 1590.6 + 18.20 5.703 0.036 0.722 0.33886 0.150 6 18.20 1591.4 + 18.22 5.572 0.040 0.782 0.41326 0.150 6 18.22 1592.2 + 18.24 5.219 0.047 0.900 0.41935 0.150 6 18.24 1593.0 + 18.26 4.916 0.052 0.985 0.33471 0.151 5 18.26 1593.8 + 18.28 4.756 0.054 0.999 0.29506 0.150 5 18.28 1594.6 + 18.30 4.997 0.050 0.917 0.38996 0.150 5 18.30 1595.4 + 18.32 5.760 0.046 0.836 0.74795 0.150 6 18.32 1596.2 + 18.34 6.598 0.042 0.749 0.86998 0.150 6 18.34 1597.1 + 18.36 6.869 0.035 0.606 0.67694 0.150 6 18.36 1597.9 + 18.38 6.457 0.038 0.654 0.51572 0.151 6 18.38 1602.6 + 18.40 6.045 0.046 0.788 0.35451 0.151 6 18.40 1607.4 + 18.42 5.633 0.052 0.957 0.22851 0.151 6 18.42 1612.1 + 18.44 5.120 0.055 1.096 0.21248 0.149 5 18.44 1613.1 + 18.46 4.685 0.059 1.219 0.20798 0.150 5 18.46 1613.9 + 18.48 4.440 0.063 1.355 0.23220 0.150 5 18.48 1614.7 + 18.50 4.207 0.064 1.520 0.26884 0.151 5 18.50 1615.5 + 18.52 3.850 0.057 1.471 0.31331 0.150 5 18.52 1616.3 + 18.54 3.573 0.051 1.449 0.33912 0.150 5 18.54 1617.1 + 18.56 3.097 0.049 1.557 0.32145 0.150 5 18.56 1618.0 + 18.58 2.648 0.047 1.630 0.32632 0.150 4 18.58 1618.8 + 18.60 2.214 0.043 1.678 0.37439 0.150 4 18.60 1619.6 + 18.62 1.987 0.038 1.654 0.46745 0.150 4 18.62 1620.4 + 18.64 1.810 0.034 1.598 0.67832 0.151 4 18.64 1621.2 + 18.66 1.784 0.036 1.761 1.00697 0.151 4 18.66 1622.0 + 18.68 1.781 0.041 1.998 1.34269 0.150 4 18.68 1622.8 + 18.70 1.984 0.044 2.062 1.38955 0.150 4 18.70 1623.6 + 18.72 2.312 0.049 2.131 1.18755 0.151 4 18.72 1624.4 + 18.74 2.619 0.054 2.202 0.94144 0.152 4 18.74 1625.2 + 18.76 2.846 0.059 2.244 0.96037 0.151 4 18.76 1626.0 + 18.78 2.979 0.064 2.242 1.04545 0.152 4 18.78 1626.8 + 18.80 3.075 0.064 2.080 1.01281 0.152 4 18.80 1627.6 + 18.82 3.183 0.068 2.084 0.93038 0.153 4 18.82 1628.4 + 18.84 3.414 0.073 2.158 1.13918 0.153 4 18.84 1629.3 + 18.86 3.708 0.070 1.991 1.22842 0.153 5 18.86 1630.1 + 18.88 3.864 0.070 1.948 1.70640 0.152 5 18.88 1630.8 + 18.90 3.859 0.069 1.880 1.27403 0.151 5 18.90 1631.7 + 18.92 3.858 0.067 1.823 1.00429 0.150 5 18.92 1632.5 + 18.94 3.652 0.061 1.691 1.20616 0.150 5 18.94 1633.3 + 18.96 3.383 0.061 1.719 1.23740 0.151 5 18.96 1634.1 + 18.98 3.315 0.067 1.897 0.56949 0.152 4 18.98 1634.9 + 19.00 3.380 0.070 2.004 0.59512 0.153 4 19.00 1635.7 + 19.02 3.410 0.072 2.049 1.23887 0.162 4 19.02 1636.5 + 19.04 3.432 0.076 2.100 1.62584 0.247 4 19.04 1637.3 + 19.06 3.590 0.079 2.069 1.63588 0.438 5 19.06 1638.2 + 19.08 4.064 0.079 1.951 1.74221 0.435 5 19.08 1639.0 + 19.10 4.396 0.074 1.733 1.10943 0.435 5 19.10 1639.8 + 19.12 4.706 0.069 1.519 0.66142 0.436 5 19.12 1640.6 + 19.14 5.039 0.064 1.315 0.49418 0.436 5 19.14 1641.4 + 19.16 5.330 0.063 1.222 0.58052 0.436 5 19.16 1642.2 + 19.18 5.568 0.060 1.117 0.62219 0.436 5 19.18 1643.0 + 19.20 5.793 0.059 1.032 0.75194 0.436 6 19.20 1643.8 + 19.22 6.016 0.058 0.983 0.76980 0.435 6 19.22 1644.6 + 19.24 6.197 0.054 0.893 0.74004 0.437 6 19.24 1645.5 + 19.26 6.306 0.050 0.803 0.68002 0.435 6 19.26 1646.3 + 19.28 6.400 0.046 0.732 0.46624 0.435 6 19.28 1647.1 + 19.30 6.512 0.042 0.650 0.34176 0.435 6 19.30 1647.9 + 19.32 6.606 0.037 0.568 0.33508 0.435 6 19.32 1648.7 + 19.34 6.701 0.033 0.508 0.19878 0.435 6 19.34 1649.5 + 19.36 6.758 0.032 0.486 0.20480 0.435 6 19.36 1650.3 + 19.38 6.828 0.033 0.484 0.22981 0.435 6 19.38 1654.7 + 19.40 6.904 0.034 0.495 0.25481 0.435 6 19.40 1659.6 + 19.42 6.980 0.034 0.482 0.26836 0.434 6 19.42 1664.4 + 19.44 7.066 0.033 0.456 0.26600 0.434 6 19.44 1665.6 + 19.46 7.248 0.032 0.441 0.26783 0.435 6 19.46 1666.5 + 19.48 7.365 0.031 0.423 0.22218 0.434 6 19.48 1667.2 + 19.50 7.422 0.031 0.425 0.23423 0.435 6 19.50 1668.0 + 19.52 7.458 0.034 0.456 0.23443 0.435 6 19.52 1668.8 + 19.54 7.460 0.037 0.492 0.26878 0.435 6 19.54 1669.7 + 19.56 7.453 0.036 0.481 0.35840 0.434 6 19.56 1670.5 + 19.58 7.526 0.034 0.448 0.55336 0.434 6 19.58 1671.3 + 19.60 7.710 0.032 0.419 0.32182 0.435 6 19.60 1672.1 + 19.62 7.871 0.031 0.406 0.34176 0.435 6 19.62 1672.9 + 19.64 7.950 0.031 0.398 0.23312 0.435 6 19.64 1673.8 + 19.66 7.994 0.031 0.388 0.21128 0.434 6 19.66 1674.6 + 19.68 8.072 0.029 0.360 0.26150 0.436 6 19.68 1675.4 + 19.70 8.134 0.029 0.357 0.29893 0.435 6 19.70 1676.2 + 19.72 8.255 0.029 0.359 0.20333 0.437 6 19.72 1677.0 + 19.74 8.371 0.031 0.371 0.19785 0.437 6 19.74 1677.8 + 19.76 8.428 0.034 0.413 0.18999 0.437 6 19.76 1678.7 + 19.78 8.424 0.038 0.450 0.20876 0.437 6 19.78 1679.5 + 19.80 8.497 0.041 0.481 0.21463 0.437 6 19.80 1680.2 + 19.82 8.599 0.044 0.509 0.24410 0.437 6 19.82 1681.1 + 19.84 8.723 0.046 0.530 0.19604 0.438 6 19.84 1681.9 + 19.86 8.850 0.049 0.553 0.20788 0.437 6 19.86 1682.7 + 19.88 8.979 0.051 0.576 0.21606 0.437 6 19.88 1683.6 + 19.90 9.074 0.054 0.599 0.19356 0.438 6 19.90 1684.3 + 19.92 9.156 0.057 0.627 0.17323 0.437 6 19.92 1685.2 + 19.94 9.200 0.058 0.637 0.19011 0.438 6 19.94 1686.0 + 19.96 9.218 0.059 0.642 0.19295 0.438 6 19.96 1686.8 + 19.98 9.283 0.060 0.650 0.21422 0.438 6 19.98 1687.6 + 20.00 9.314 0.061 0.661 0.22593 0.438 6 20.00 1688.5 + 20.02 9.372 0.062 0.664 0.19275 0.439 6 20.02 1689.3 + 20.04 9.409 0.062 0.658 0.19353 0.438 6 20.04 1690.1 + 20.06 9.452 0.060 0.637 0.25213 0.438 6 20.06 1690.9 + 20.08 9.460 0.060 0.641 0.23963 0.439 6 20.08 1691.8 + 20.10 9.478 0.061 0.646 0.21830 0.439 6 20.10 1692.6 + 20.12 9.507 0.062 0.650 0.18423 0.442 6 20.12 1693.4 + 20.14 9.476 0.062 0.660 0.18990 0.579 6 20.14 1694.2 + 20.16 9.507 0.062 0.663 0.19171 0.579 6 20.16 1695.0 + 20.18 9.425 0.063 0.675 0.19332 0.579 6 20.18 1695.8 + 20.20 9.329 0.066 0.700 0.17941 0.580 6 20.20 1696.6 + 20.22 9.232 0.069 0.741 0.19236 0.580 6 20.22 1697.5 + 20.24 9.198 0.074 0.791 0.18927 0.580 6 20.24 1698.3 + 20.26 9.206 0.075 0.805 0.20417 0.581 6 20.26 1699.1 + 20.28 9.244 0.074 0.794 0.19054 0.581 6 20.28 1699.9 + 20.30 9.453 0.069 0.731 0.16361 0.583 6 20.30 1700.8 + 20.32 9.594 0.063 0.667 0.17521 0.584 6 20.32 1701.6 + 20.34 9.630 0.058 0.610 0.18549 0.585 6 20.34 1702.4 + 20.36 9.592 0.056 0.594 0.18094 0.585 6 20.36 1703.2 + 20.38 9.493 0.055 0.578 0.18186 0.585 6 20.38 1707.5 + 20.40 9.397 0.055 0.572 0.18277 0.584 6 20.40 1712.3 + 20.42 9.302 0.055 0.575 0.18452 0.584 6 20.42 1717.1 + 20.44 9.492 0.058 0.595 0.17988 0.584 6 20.44 1718.5 + 20.46 9.761 0.062 0.624 0.18010 0.584 6 20.46 1719.3 + 20.48 10.054 0.066 0.665 0.18883 0.584 6 20.48 1720.2 + 20.50 10.271 0.069 0.691 0.22069 0.582 6 20.50 1721.0 + 20.52 10.418 0.072 0.717 0.22284 0.584 6 20.52 1721.8 + 20.54 10.367 0.075 0.745 0.18276 0.584 6 20.54 1722.6 + 20.56 10.018 0.077 0.774 0.18836 0.587 6 20.56 1723.4 + 20.58 9.650 0.080 0.821 0.17723 0.584 6 20.58 1724.2 + 20.60 9.337 0.080 0.843 0.17749 0.586 6 20.60 1725.0 + 20.62 9.103 0.081 0.864 0.17523 0.584 6 20.62 1725.8 + 20.64 8.895 0.081 0.887 0.17627 0.584 6 20.64 1726.7 + 20.66 8.753 0.081 0.899 0.17977 0.584 6 20.66 1727.5 + 20.68 8.709 0.081 0.898 0.19048 0.584 6 20.68 1728.3 + 20.70 8.784 0.078 0.858 0.18314 0.584 6 20.70 1729.1 + 20.72 9.011 0.076 0.809 0.18002 0.583 6 20.72 1729.9 + 20.74 9.439 0.074 0.765 0.19278 0.583 6 20.74 1730.7 + 20.76 10.092 0.076 0.744 0.20801 0.583 6 20.76 1731.5 + 20.78 10.999 0.078 0.723 0.20976 0.583 6 20.78 1732.4 + 20.80 12.123 0.081 0.717 0.22166 0.583 6 20.80 1733.2 + 20.82 13.220 0.085 0.686 0.20975 0.583 6 20.82 1734.0 + 20.84 14.421 0.090 0.664 0.19952 0.583 6 20.84 1734.9 + 20.86 15.694 0.097 0.650 0.19097 0.583 6 20.86 1736.2 + 20.88 16.942 0.105 0.638 0.18387 0.584 6 20.88 1737.5 + 20.90 18.068 0.116 0.654 0.17727 0.584 6 20.90 1738.3 + 20.92 19.176 0.127 0.672 0.17824 0.584 6 20.92 1739.1 + 20.94 20.146 0.137 0.703 0.17890 0.584 6 20.94 1740.0 + 20.96 21.081 0.148 0.727 0.17895 0.584 6 20.96 1740.8 + 20.98 21.738 0.155 0.738 0.17964 0.585 6 20.98 1741.6 + 21.00 22.240 0.163 0.750 0.18005 0.584 6 21.00 1742.5 + 21.02 22.602 0.171 0.767 0.18051 0.584 6 21.02 1743.3 + 21.04 22.930 0.177 0.777 0.18300 0.584 6 21.04 1744.1 + 21.06 23.278 0.182 0.783 0.18321 0.585 6 21.06 1745.0 + 21.08 23.693 0.186 0.783 0.18308 0.584 6 21.08 1745.8 + 21.10 24.356 0.190 0.785 0.18245 0.585 6 21.10 1746.6 + 21.12 25.017 0.194 0.788 0.18399 0.584 6 21.12 1747.5 + 21.14 25.409 0.200 0.800 0.18418 0.585 6 21.14 1748.3 + 21.16 25.802 0.206 0.809 0.18493 0.584 6 21.16 1749.1 + 21.18 26.215 0.214 0.833 0.18630 0.584 6 21.18 1750.0 + 21.20 26.323 0.217 0.840 0.18561 0.584 6 21.20 1750.8 + 21.22 26.219 0.221 0.851 0.18554 0.585 6 21.22 1751.6 + 21.24 26.033 0.222 0.857 0.18655 0.585 6 21.24 1752.5 + 21.26 25.784 0.225 0.869 0.18718 0.585 6 21.26 1753.3 + 21.28 25.575 0.226 0.875 0.18575 0.585 6 21.28 1754.1 + 21.30 25.394 0.206 0.803 0.18769 0.585 6 21.30 1755.0 + 21.32 25.426 0.184 0.720 0.18726 0.585 6 21.32 1755.8 + 21.34 25.452 0.166 0.653 0.18759 0.585 6 21.34 1756.6 + 21.36 25.422 0.174 0.686 0.18772 0.585 6 21.36 1757.5 + 21.38 25.441 0.182 0.714 0.18924 0.585 6 21.38 1760.8 + 21.40 25.412 0.189 0.736 0.19101 0.585 6 21.40 1766.0 + 21.42 25.382 0.193 0.742 0.19245 0.585 6 21.42 1771.3 + 21.44 26.038 0.196 0.747 0.19071 0.585 6 21.44 1773.1 + 21.46 26.449 0.199 0.748 0.19234 0.585 6 21.46 1773.9 + 21.48 26.783 0.205 0.765 0.19350 0.586 6 21.48 1774.7 + 21.50 27.249 0.211 0.776 0.19539 0.585 6 21.50 1775.6 + 21.52 27.853 0.219 0.793 0.19671 0.586 6 21.52 1776.4 + 21.54 28.551 0.226 0.806 0.19617 0.586 6 21.54 1777.2 + 21.56 29.096 0.236 0.830 0.19626 0.586 6 21.56 1778.1 + 21.58 29.356 0.244 0.851 0.19660 0.586 6 21.58 1778.9 + 21.60 29.288 0.250 0.873 0.19562 0.586 6 21.60 1779.7 + 21.62 28.923 0.254 0.888 0.19344 0.586 6 21.62 1780.6 + 21.64 28.402 0.255 0.900 0.19261 0.586 6 21.64 1781.4 + 21.66 27.815 0.253 0.905 0.19053 0.586 6 21.66 1782.2 + 21.68 27.167 0.251 0.913 0.19112 0.586 6 21.68 1783.1 + 21.70 26.572 0.245 0.912 0.19201 0.586 6 21.70 1783.9 + 21.72 25.965 0.239 0.908 0.19193 0.586 6 21.72 1784.7 + 21.74 25.433 0.230 0.893 0.19238 0.586 6 21.74 1785.5 + 21.76 24.922 0.226 0.895 0.19242 0.586 6 21.76 1786.3 + 21.78 24.407 0.221 0.894 0.19293 0.586 6 21.78 1787.2 + 21.80 23.962 0.221 0.905 0.19374 0.586 6 21.80 1788.0 + 21.82 23.647 0.217 0.901 0.19513 0.586 6 21.82 1788.8 + 21.84 23.508 0.212 0.886 0.19557 0.587 6 21.84 1789.7 + 21.86 23.552 0.210 0.881 0.19516 0.587 6 21.86 1790.5 + 21.88 23.645 0.210 0.880 0.19586 0.588 6 21.88 1791.3 + 21.90 23.834 0.211 0.882 0.19549 0.587 6 21.90 1792.1 + 21.92 24.151 0.214 0.887 0.19526 0.587 6 21.92 1793.0 + 21.94 24.483 0.216 0.890 0.19734 0.587 6 21.94 1793.8 + 21.96 24.749 0.219 0.891 0.19614 0.587 6 21.96 1794.7 + 21.98 24.896 0.221 0.890 0.19601 0.588 6 21.98 1795.5 + 22.00 25.084 0.223 0.890 0.19688 0.587 6 22.00 1796.3 + 22.02 25.385 0.225 0.885 0.19739 0.588 6 22.02 1797.1 + 22.04 25.761 0.227 0.884 0.19661 0.588 6 22.04 1798.0 + 22.06 26.159 0.230 0.884 0.19819 0.588 6 22.06 1798.9 + 22.08 26.527 0.234 0.888 0.19855 0.589 6 22.08 1799.7 + 22.10 26.951 0.237 0.890 0.19953 0.588 6 22.10 1800.5 + 22.12 27.267 0.242 0.902 0.19954 0.588 6 22.12 1801.3 + 22.14 27.423 0.245 0.908 0.20106 0.589 6 22.14 1802.2 + 22.16 27.433 0.247 0.910 0.19938 0.589 6 22.16 1803.0 + 22.18 27.270 0.248 0.914 0.20048 0.589 6 22.18 1803.9 + 22.20 26.992 0.250 0.921 0.20021 0.589 6 22.20 1804.7 + 22.22 26.902 0.248 0.918 0.19942 0.589 6 22.22 1805.5 + 22.24 27.009 0.247 0.917 0.19910 0.588 6 22.24 1806.4 + 22.26 26.896 0.243 0.909 0.19943 0.589 6 22.26 1807.2 + 22.28 26.492 0.239 0.897 0.19877 0.589 6 22.28 1808.0 + 22.30 26.185 0.221 0.832 0.19802 0.589 6 22.30 1808.9 + 22.32 26.146 0.197 0.744 0.19894 0.589 6 22.32 1809.7 + 22.34 26.290 0.175 0.661 0.20099 0.589 6 22.34 1810.5 + 22.36 26.773 0.172 0.644 0.20237 0.590 6 22.36 1811.4 + 22.38 27.637 0.178 0.642 0.20559 0.590 6 22.38 1813.8 + 22.40 28.589 0.192 0.663 0.20959 0.591 6 22.40 1819.4 + 22.42 29.541 0.207 0.678 0.21330 0.592 6 22.42 1825.0 + 22.44 31.938 0.227 0.713 0.21225 0.592 6 22.44 1827.0 + 22.46 33.550 0.245 0.745 0.21161 0.592 6 22.46 1827.8 + 22.48 34.412 0.264 0.793 0.20947 0.593 6 22.48 1828.7 + 22.50 34.879 0.283 0.836 0.20954 0.592 6 22.50 1829.5 + 22.52 35.141 0.305 0.874 0.21010 0.593 6 22.52 1830.4 + 22.54 35.585 0.317 0.894 0.21066 0.592 6 22.54 1831.2 + 22.56 36.106 0.322 0.896 0.21238 0.592 6 22.56 1832.1 + 22.58 36.538 0.327 0.901 0.21270 0.592 6 22.58 1832.8 + 22.60 36.956 0.335 0.914 0.21228 0.593 6 22.60 1833.7 + 22.62 37.285 0.337 0.910 0.21345 0.593 6 22.62 1834.6 + 22.64 37.694 0.342 0.912 0.21345 0.593 6 22.64 1835.4 + 22.66 37.966 0.344 0.908 0.21415 0.594 6 22.66 1836.3 + 22.68 38.172 0.351 0.919 0.21338 0.593 6 22.68 1837.1 + 22.70 38.731 0.364 0.946 0.21494 0.593 6 22.70 1838.0 + 22.72 39.270 0.372 0.962 0.21639 0.593 6 22.72 1838.8 + 22.74 39.264 0.370 0.951 0.21568 0.593 6 22.74 1839.7 + 22.76 39.024 0.371 0.946 0.21432 0.593 6 22.76 1840.5 + 22.78 39.056 0.377 0.953 0.21411 0.594 6 22.78 1841.4 + 22.80 39.574 0.386 0.967 0.21441 0.593 6 22.80 1842.2 + 22.82 40.309 0.391 0.973 0.21598 0.594 6 22.82 1843.1 + 22.84 41.090 0.389 0.960 0.21840 0.595 6 22.84 1844.0 + 22.86 41.517 0.383 0.937 0.21843 0.593 6 22.86 1844.8 + 22.88 41.499 0.381 0.922 0.21843 0.593 6 22.88 1845.6 + 22.90 41.533 0.379 0.912 0.21735 0.594 6 22.90 1846.5 + 22.92 41.876 0.377 0.903 0.21755 0.593 6 22.92 1847.4 + 22.94 42.023 0.379 0.905 0.21791 0.594 6 22.94 1848.2 + 22.96 42.040 0.384 0.913 0.21689 0.594 6 22.96 1849.1 + 22.98 42.254 0.393 0.934 0.21696 0.594 6 22.98 1849.9 + 23.00 42.461 0.402 0.955 0.21665 0.594 6 23.00 1850.8 + 23.02 42.312 0.405 0.965 0.21604 0.594 6 23.02 1851.6 + 23.04 41.987 0.412 0.986 0.21419 0.594 6 23.04 1852.5 + 23.06 41.532 0.414 0.994 0.21360 0.594 6 23.06 1853.3 + 23.08 41.096 0.410 0.989 0.21365 0.593 6 23.08 1854.2 + 23.10 40.910 0.406 0.985 0.21429 0.594 6 23.10 1855.1 + 23.12 40.680 0.399 0.968 0.21543 0.593 6 23.12 1855.9 + 23.14 40.721 0.392 0.946 0.21671 0.593 6 23.14 1856.8 + 23.16 41.192 0.394 0.945 0.21802 0.593 6 23.16 1857.7 + 23.18 42.049 0.393 0.931 0.21974 0.593 6 23.18 1858.6 + 23.20 43.124 0.399 0.933 0.22014 0.593 6 23.20 1859.4 + 23.22 43.924 0.406 0.939 0.22172 0.595 6 23.22 1860.3 + 23.24 44.403 0.411 0.940 0.22234 0.593 6 23.24 1861.1 + 23.26 44.662 0.417 0.942 0.22311 0.594 6 23.26 1862.0 + 23.28 44.749 0.420 0.941 0.22313 0.593 6 23.28 1862.9 + 23.30 44.955 0.402 0.895 0.22342 0.593 6 23.30 1863.7 + 23.32 45.233 0.373 0.828 0.22502 0.593 6 23.32 1864.6 + 23.34 45.671 0.345 0.761 0.22503 0.594 6 23.34 1865.5 + 23.36 46.045 0.332 0.731 0.22564 0.591 6 23.36 1866.3 + 23.38 46.399 0.353 0.769 0.22636 0.591 6 23.38 1868.5 + 23.40 46.488 0.374 0.811 0.22815 0.591 6 23.40 1873.1 + 23.42 46.577 0.393 0.845 0.22995 0.592 6 23.42 1877.7 + 23.44 46.666 0.407 0.870 0.23092 0.592 6 23.44 1882.4 + 23.46 46.855 0.414 0.878 0.23015 0.592 6 23.46 1883.2 + 23.48 46.991 0.421 0.887 0.22947 0.592 6 23.48 1884.1 + 23.50 47.341 0.434 0.908 0.23032 0.592 6 23.50 1885.0 + 23.52 48.149 0.441 0.916 0.23173 0.592 6 23.52 1885.9 + 23.54 49.210 0.453 0.931 0.23236 0.592 6 23.54 1886.7 + 23.56 49.830 0.470 0.964 0.23238 0.593 6 23.56 1887.6 + 23.58 49.839 0.476 0.973 0.23135 0.593 6 23.58 1888.5 + 23.60 49.580 0.482 0.986 0.23004 0.593 6 23.60 1889.4 + 23.62 48.987 0.490 1.003 0.22800 0.593 6 23.62 1890.2 + 23.64 48.116 0.497 1.023 0.22680 0.593 6 23.64 1891.1 + 23.66 47.660 0.497 1.033 0.22586 0.593 6 23.66 1892.1 + 23.68 47.527 0.494 1.034 0.22598 0.593 6 23.68 1892.9 + 23.70 47.343 0.484 1.022 0.22611 0.593 6 23.70 1893.8 + 23.72 46.952 0.477 1.012 0.22569 0.594 6 23.72 1894.6 + 23.74 46.662 0.473 1.007 0.22585 0.594 6 23.74 1895.5 + 23.76 46.471 0.473 1.006 0.22560 0.594 6 23.76 1896.4 + 23.78 46.605 0.468 0.992 0.22739 0.594 6 23.78 1897.2 + 23.80 46.976 0.461 0.972 0.22910 0.594 6 23.80 1898.1 + 23.82 47.554 0.460 0.961 0.23115 0.594 6 23.82 1899.1 + 23.84 48.451 0.459 0.945 0.23341 0.594 6 23.84 1900.0 + 23.86 49.299 0.461 0.934 0.23432 0.594 6 23.86 1900.8 + 23.88 50.469 0.466 0.925 0.23455 0.596 6 23.88 1901.8 + 23.90 51.582 0.474 0.921 0.23556 0.594 6 23.90 1902.7 + 23.92 52.691 0.480 0.921 0.23626 0.595 6 23.92 1903.6 + 23.94 53.546 0.493 0.931 0.23684 0.595 6 23.94 1904.6 + 23.96 54.523 0.507 0.944 0.23820 0.595 6 23.96 1905.5 + 23.98 55.217 0.525 0.967 0.23847 0.595 6 23.98 1906.5 + 24.00 55.578 0.553 1.013 0.23842 0.595 6 24.00 1907.5 + 24.02 55.155 0.579 1.061 0.23665 0.595 6 24.02 1908.4 + 24.04 54.762 0.584 1.075 0.23504 0.595 6 24.04 1909.4 + 24.06 54.226 0.579 1.072 0.23282 0.595 6 24.06 1910.4 + 24.08 53.145 0.571 1.066 0.23064 0.595 6 24.08 1911.4 + 24.10 52.331 0.561 1.056 0.23001 0.596 6 24.10 1912.3 + 24.12 51.915 0.554 1.050 0.22946 0.597 6 24.12 1913.3 + 24.14 52.019 0.542 1.033 0.23064 0.597 6 24.14 1914.3 + 24.16 51.985 0.513 0.982 0.23141 0.597 6 24.16 1915.3 + 24.18 52.342 0.494 0.947 0.23090 0.597 6 24.18 1916.2 + 24.20 52.205 0.493 0.944 0.22955 0.598 6 24.20 1917.2 + 24.22 52.395 0.498 0.954 0.22797 0.598 6 24.22 1918.1 + 24.24 52.462 0.508 0.974 0.22796 0.598 6 24.24 1919.1 + 24.26 52.244 0.519 1.001 0.22696 0.597 6 24.26 1920.1 + 24.28 51.834 0.520 1.013 0.22663 0.598 6 24.28 1921.1 + 24.30 51.347 0.493 0.970 0.22539 0.599 6 24.30 1922.1 + 24.32 49.956 0.456 0.906 0.22452 0.598 6 24.32 1923.0 + 24.34 48.253 0.419 0.843 0.22247 0.598 6 24.34 1923.9 + 24.36 46.368 0.397 0.808 0.22077 0.599 6 24.36 1924.9 + 24.38 45.078 0.414 0.871 0.22083 0.621 6 24.38 1927.2 + 24.40 43.726 0.419 0.926 0.22131 0.678 6 24.40 1931.7 + 24.42 42.375 0.411 0.957 0.22179 0.734 6 24.42 1936.2 + 24.44 41.024 0.404 1.008 0.22203 0.790 6 24.44 1940.6 + 24.46 39.331 0.399 1.026 0.22089 0.794 6 24.46 1941.7 + 24.48 37.802 0.393 1.022 0.22055 0.796 6 24.48 1942.6 + 24.50 36.813 0.388 1.020 0.22150 0.797 6 24.50 1943.4 + 24.52 36.197 0.376 1.012 0.22181 0.797 6 24.52 1944.3 + 24.54 35.872 0.361 0.989 0.22223 0.798 6 24.54 1945.1 + 24.56 35.794 0.350 0.971 0.22363 0.800 6 24.56 1946.0 + 24.58 35.745 0.343 0.956 0.22490 0.802 6 24.58 1946.8 + 24.60 35.506 0.341 0.952 0.22609 0.806 6 24.60 1947.7 + 24.62 35.453 0.343 0.954 0.22661 0.808 6 24.62 1948.6 + 24.64 35.761 0.345 0.955 0.22824 0.809 6 24.64 1949.4 + 24.66 36.451 0.345 0.949 0.22975 0.808 6 24.66 1950.2 + 24.68 36.933 0.346 0.949 0.23115 0.809 6 24.68 1951.1 + 24.70 37.163 0.349 0.950 0.23139 0.813 6 24.70 1952.0 + 24.72 37.290 0.356 0.960 0.23138 0.831 6 24.72 1952.8 + 24.74 37.380 0.363 0.971 0.23084 0.852 6 24.74 1953.6 + 24.76 37.499 0.364 0.971 0.23138 0.861 6 24.76 1954.5 + 24.78 37.668 0.365 0.968 0.23261 0.871 6 24.78 1955.3 + 24.80 37.921 0.366 0.970 0.23370 0.879 6 24.80 1956.2 + 24.82 38.103 0.369 0.976 0.23573 0.882 6 24.82 1957.1 + 24.84 38.084 0.371 0.981 0.23387 0.884 6 24.84 1958.0 + 24.86 37.857 0.372 0.986 0.23071 0.887 6 24.86 1958.7 + 24.88 37.546 0.369 0.981 0.22698 0.891 6 24.88 1959.6 + 24.90 37.343 0.366 0.978 0.22689 0.892 6 24.90 1960.5 + 24.92 36.972 0.365 0.980 0.22732 0.893 6 24.92 1961.3 + 24.94 36.652 0.365 0.985 0.22737 0.893 6 24.94 1962.2 + 24.96 36.624 0.366 0.989 0.22789 0.894 6 24.96 1963.0 + 24.98 36.777 0.364 0.985 0.22836 0.895 6 24.98 1963.8 + 25.00 36.898 0.364 0.982 0.22896 0.896 6 25.00 1964.7 + 25.02 37.107 0.365 0.980 0.22960 0.897 6 25.02 1965.5 + 25.04 37.476 0.365 0.972 0.23053 0.897 6 25.04 1966.4 + 25.06 38.004 0.367 0.970 0.23142 0.898 6 25.06 1967.2 + 25.08 38.408 0.371 0.968 0.23282 0.900 6 25.08 1968.1 + 25.10 38.743 0.378 0.974 0.23371 0.903 6 25.10 1969.0 + 25.12 39.226 0.386 0.983 0.23450 0.903 6 25.12 1969.8 + 25.14 39.911 0.389 0.979 0.23592 0.903 6 25.14 1970.7 + 25.16 40.636 0.396 0.983 0.23662 0.904 6 25.16 1971.5 + 25.18 40.992 0.404 0.992 0.23790 0.905 6 25.18 1972.4 + 25.20 41.409 0.409 0.989 0.23819 0.906 6 25.20 1973.2 + 25.22 41.949 0.412 0.984 0.23798 0.909 6 25.22 1974.1 + 25.24 42.588 0.413 0.975 0.23890 0.909 6 25.24 1975.0 + 25.26 43.028 0.416 0.969 0.23976 0.909 6 25.26 1975.8 + 25.28 43.574 0.420 0.967 0.24060 0.910 6 25.28 1976.7 + 25.30 44.118 0.407 0.930 0.24117 0.912 6 25.30 1977.6 + 25.32 44.511 0.378 0.857 0.24172 0.914 6 25.32 1978.4 + 25.34 45.051 0.348 0.784 0.24244 0.913 6 25.34 1979.3 + 25.36 45.511 0.337 0.753 0.24214 0.914 6 25.36 1980.2 + 25.38 45.583 0.359 0.800 0.24234 0.914 6 25.38 1981.9 + 25.40 44.969 0.380 0.846 0.24356 0.914 6 25.40 1986.8 + 25.42 44.354 0.398 0.886 0.24477 0.914 6 25.42 1991.7 + 25.44 43.929 0.409 0.909 0.24551 0.914 6 25.44 1996.0 + 25.46 44.466 0.420 0.926 0.24529 0.916 6 25.46 1996.9 + 25.48 44.944 0.432 0.944 0.24630 0.917 6 25.48 1997.7 + 25.50 45.763 0.446 0.962 0.24747 0.919 6 25.50 1998.6 + 25.52 47.181 0.457 0.970 0.24855 0.921 6 25.52 1999.5 + 25.54 48.367 0.465 0.963 0.25080 0.922 6 25.54 2000.3 + 25.56 49.874 0.473 0.955 0.25109 0.923 6 25.56 2001.2 + 25.58 51.446 0.490 0.962 0.25331 0.923 6 25.58 2002.1 + 25.60 52.894 0.505 0.967 0.25552 0.924 6 25.60 2003.0 + 25.62 54.058 0.517 0.967 0.25680 0.924 6 25.62 2004.0 + 25.64 54.952 0.530 0.977 0.25659 0.923 6 25.64 2004.9 + 25.66 55.894 0.548 0.993 0.25652 0.922 6 25.66 2005.8 + 25.68 56.576 0.561 1.004 0.25615 0.923 6 25.68 2006.8 + 25.70 57.092 0.568 1.009 0.25560 0.922 6 25.70 2007.8 + 25.72 57.145 0.572 1.011 0.25528 0.922 6 25.72 2008.8 + 25.74 57.076 0.580 1.019 0.25469 0.922 6 25.74 2009.8 + 25.76 57.068 0.588 1.029 0.25447 0.922 6 25.76 2010.8 + 25.78 57.252 0.596 1.041 0.25285 0.922 6 25.78 2011.9 + 25.80 57.474 0.604 1.057 0.25086 0.924 6 25.80 2013.6 + 25.82 57.599 0.612 1.072 0.24986 0.925 6 25.82 2015.0 + 25.84 57.285 0.611 1.073 0.24934 0.932 6 25.84 2015.9 + 25.86 56.899 0.617 1.090 0.24921 0.928 6 25.86 2016.8 + 25.88 56.490 0.615 1.091 0.24892 0.927 6 25.88 2017.7 + 25.90 55.873 0.614 1.097 0.24851 0.928 6 25.90 2018.6 + 25.92 55.297 0.610 1.101 0.24880 0.930 6 25.92 2019.4 + 25.94 54.535 0.597 1.089 0.24855 0.937 6 25.94 2020.3 + 25.96 53.728 0.571 1.049 0.24814 0.939 6 25.96 2021.2 + 25.98 53.042 0.555 1.026 0.24795 0.942 6 25.98 2022.0 + 26.00 52.894 0.542 1.006 0.24772 0.947 6 26.00 2023.0 + 26.02 53.385 0.534 0.990 0.24868 0.954 6 26.02 2023.8 + 26.04 53.818 0.535 0.983 0.24964 0.962 6 26.04 2024.7 + 26.06 54.539 0.539 0.979 0.25024 0.969 6 26.06 2025.6 + 26.08 55.715 0.553 0.990 0.25178 0.978 6 26.08 2026.5 + 26.10 57.152 0.573 1.008 0.25261 1.010 6 26.10 2027.5 + 26.12 58.389 -99999.000 -99999.000 0.25368 1.064 6 26.12 2028.5 + 26.14 59.160 -99999.000 -99999.000 0.25470 1.065 6 26.14 2029.4 + 26.16 59.880 -99999.000 -99999.000 0.25578 1.065 6 26.16 2030.4 + 26.18 60.647 -99999.000 -99999.000 0.25614 1.063 6 26.18 2031.5 + 26.19 61.029 -99999.000 -99999.000 -99999.000 1.064 -99999 26.19 2032.4 diff --git a/tests/response/bag_response.json b/tests/response/bag_response.json new file mode 100644 index 0000000..486d652 --- /dev/null +++ b/tests/response/bag_response.json @@ -0,0 +1,68 @@ +{ +"type": "FeatureCollection", +"name": "building", +"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:EPSG::28992" } }, +"features": [ +{ "type": "Feature", "properties": { "identificatie": "0363100012233619", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012233619", "bouwjaar": 1928, "status": "Pand in gebruik", "gebruiksdoel": "bijeenkomstfunctie", "oppervlakte_min": 1, "oppervlakte_max": 11574, "aantal_verblijfsobjecten": 2, "fuuid": "pand.bd581168-837a-4d53-9872-2870732393c8" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120418.665, 486253.18 ], [ 120415.569, 486257.12400000001071 ], [ 120415.497, 486257.215000000025611 ], [ 120397.785, 486244.315 ], [ 120394.239, 486241.712999999988824 ], [ 120388.112, 486242.336000000010245 ], [ 120387.246, 486244.061999999976251 ], [ 120374.904, 486269.920999999972992 ], [ 120357.191, 486261.99900000001071 ], [ 120359.52, 486256.164999999979045 ], [ 120346.258, 486250.368000000016764 ], [ 120347.471, 486247.418 ], [ 120349.342, 486242.884000000020023 ], [ 120352.566, 486235.059 ], [ 120352.867, 486234.38900000002468 ], [ 120353.48, 486233.058000000019092 ], [ 120356.274, 486234.294999999983702 ], [ 120358.978, 486235.493000000016764 ], [ 120362.7, 486237.15500000002794 ], [ 120368.779, 486239.869 ], [ 120369.885, 486237.458999999973457 ], [ 120370.772, 486235.505 ], [ 120376.633, 486224.18 ], [ 120377.488, 486224.50099999998929 ], [ 120378.365, 486224.75199999997858 ], [ 120379.26, 486224.930999999982305 ], [ 120380.359, 486225.050999999977648 ], [ 120381.465, 486225.063000000023749 ], [ 120382.566, 486224.967 ], [ 120382.603, 486225.351000000024214 ], [ 120388.778, 486224.770000000018626 ], [ 120388.722, 486224.170999999972992 ], [ 120389.323, 486224.114 ], [ 120389.842, 486224.466000000014901 ], [ 120389.887, 486224.859 ], [ 120395.686, 486224.195 ], [ 120395.634, 486223.744 ], [ 120395.908, 486223.490999999979977 ], [ 120396.388, 486223.444000000017695 ], [ 120396.697, 486223.632999999972526 ], [ 120396.748, 486224.072999999974854 ], [ 120402.855, 486223.37300000002142 ], [ 120402.793, 486222.835000000020955 ], [ 120403.043, 486222.517999999981839 ], [ 120403.764, 486222.420999999972992 ], [ 120404.258, 486222.693000000028405 ], [ 120404.323, 486223.210000000020955 ], [ 120410.278, 486222.463999999978114 ], [ 120410.187, 486221.661000000021886 ], [ 120413.074, 486221.331 ], [ 120413.087, 486221.441 ], [ 120420.417, 486220.580000000016298 ], [ 120423.023, 486220.73599999997532 ], [ 120423.048, 486220.674 ], [ 120423.078, 486220.615 ], [ 120423.114, 486220.558000000019092 ], [ 120423.154, 486220.505 ], [ 120423.199, 486220.456 ], [ 120423.248, 486220.411000000021886 ], [ 120423.3, 486220.37 ], [ 120423.356, 486220.333999999973457 ], [ 120423.415, 486220.303000000014435 ], [ 120423.477, 486220.278 ], [ 120423.538, 486220.259000000020023 ], [ 120423.6, 486220.245 ], [ 120423.663, 486220.23599999997532 ], [ 120423.726, 486220.233 ], [ 120423.79, 486220.23499999998603 ], [ 120423.853, 486220.242000000027474 ], [ 120423.903, 486220.25199999997858 ], [ 120423.953, 486220.26500000001397 ], [ 120424.001, 486220.281000000017229 ], [ 120424.048, 486220.300999999977648 ], [ 120424.095, 486220.322999999974854 ], [ 120424.139, 486220.348999999987427 ], [ 120429.332, 486224.121999999973923 ], [ 120429.254, 486224.408999999985099 ], [ 120429.25, 486224.418 ], [ 120429.247, 486224.428000000014435 ], [ 120429.244, 486224.438000000023749 ], [ 120429.243, 486224.447999999974854 ], [ 120429.242, 486224.457999999984168 ], [ 120429.242, 486224.468 ], [ 120429.243, 486224.478 ], [ 120429.245, 486224.488000000012107 ], [ 120429.248, 486224.49800000002142 ], [ 120429.252, 486224.506999999983236 ], [ 120429.256, 486224.516 ], [ 120429.261, 486224.525000000023283 ], [ 120429.267, 486224.533 ], [ 120429.274, 486224.541000000026543 ], [ 120429.281, 486224.548 ], [ 120429.289, 486224.555 ], [ 120429.298, 486224.560999999986961 ], [ 120429.307, 486224.566 ], [ 120429.316, 486224.57 ], [ 120429.326, 486224.572999999974854 ], [ 120429.336, 486224.576 ], [ 120429.347, 486224.577 ], [ 120429.357, 486224.577999999979511 ], [ 120429.367, 486224.577999999979511 ], [ 120429.378, 486224.577 ], [ 120429.388, 486224.575000000011642 ], [ 120429.398, 486224.571999999985565 ], [ 120429.408, 486224.568000000028405 ], [ 120429.417, 486224.563000000023749 ], [ 120429.426, 486224.558000000019092 ], [ 120429.434, 486224.552000000025146 ], [ 120429.442, 486224.544999999983702 ], [ 120429.449, 486224.537000000011176 ], [ 120430.406, 486225.295999999972992 ], [ 120430.401, 486225.306999999971595 ], [ 120430.397, 486225.316999999980908 ], [ 120430.394, 486225.329000000027008 ], [ 120430.392, 486225.340000000025611 ], [ 120430.391, 486225.352000000013504 ], [ 120430.391, 486225.364 ], [ 120430.392, 486225.375 ], [ 120430.394, 486225.386999999987893 ], [ 120430.397, 486225.397999999986496 ], [ 120430.401, 486225.408999999985099 ], [ 120430.406, 486225.419 ], [ 120430.412, 486225.429 ], [ 120430.419, 486225.439000000013039 ], [ 120430.426, 486225.447999999974854 ], [ 120430.435, 486225.456 ], [ 120430.444, 486225.462999999988824 ], [ 120430.454, 486225.468999999982771 ], [ 120430.464, 486225.474999999976717 ], [ 120430.475, 486225.479999999981374 ], [ 120430.486, 486225.483 ], [ 120430.497, 486225.48599999997532 ], [ 120430.509, 486225.487000000022817 ], [ 120430.52, 486225.488000000012107 ], [ 120430.532, 486225.487000000022817 ], [ 120430.544, 486225.48599999997532 ], [ 120430.555, 486225.483 ], [ 120430.566, 486225.479999999981374 ], [ 120430.577, 486225.474999999976717 ], [ 120430.587, 486225.468999999982771 ], [ 120430.597, 486225.462999999988824 ], [ 120430.606, 486225.456 ], [ 120430.614, 486225.447999999974854 ], [ 120430.622, 486225.439000000013039 ], [ 120431.279, 486225.954000000027008 ], [ 120433.117, 486223.607000000018161 ], [ 120434.628, 486224.74900000001071 ], [ 120435.994, 486225.908 ], [ 120437.073, 486227.367000000027474 ], [ 120437.574, 486228.691 ], [ 120437.716, 486229.066 ], [ 120437.944, 486230.810999999986961 ], [ 120437.693, 486232.62300000002142 ], [ 120435.991, 486235.794 ], [ 120434.804, 486237.275000000023283 ], [ 120432.545, 486235.50099999998929 ], [ 120418.665, 486253.18 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012160316", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012160316", "bouwjaar": 1942, "status": "Pand in gebruik", "gebruiksdoel": "woonfunctie", "oppervlakte_min": 76, "oppervlakte_max": 168, "aantal_verblijfsobjecten": 3, "fuuid": "pand.9558fb4b-e8aa-4893-b32b-33d134763235" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120390.688, 486205.642 ], [ 120390.967, 486207.288 ], [ 120389.757, 486206.393999999971129 ], [ 120389.703, 486206.060999999986961 ], [ 120388.828, 486206.204000000027008 ], [ 120388.778, 486205.898999999975786 ], [ 120386.893, 486206.206 ], [ 120386.943, 486206.511999999987893 ], [ 120386.423, 486206.597 ], [ 120386.374, 486206.291000000026543 ], [ 120384.57, 486206.585000000020955 ], [ 120384.62, 486206.891 ], [ 120384.1, 486206.974999999976717 ], [ 120384.05, 486206.669999999983702 ], [ 120382.237, 486206.965000000025611 ], [ 120382.286, 486207.271 ], [ 120381.767, 486207.356000000028871 ], [ 120381.717, 486207.049999999988358 ], [ 120381.35, 486207.10999999998603 ], [ 120379.167, 486194.164999999979045 ], [ 120383.531, 486193.425999999977648 ], [ 120388.478, 486192.588999999978114 ], [ 120390.688, 486205.642 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012168738", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012168738", "bouwjaar": 1894, "status": "Pand in gebruik", "gebruiksdoel": "bijeenkomstfunctie", "oppervlakte_min": 1, "oppervlakte_max": 10221, "aantal_verblijfsobjecten": 2, "fuuid": "pand.25851437-1ffc-4b9b-9aa2-623bee9a2e71" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120625.21, 486382.506 ], [ 120615.55, 486395.207 ], [ 120609.141, 486390.365999999979977 ], [ 120607.361, 486392.667000000015832 ], [ 120606.61, 486392.086000000010245 ], [ 120598.294, 486403.034999999974389 ], [ 120598.651, 486403.305999999982305 ], [ 120591.729, 486412.384000000020023 ], [ 120591.585, 486412.310999999986961 ], [ 120585.768, 486407.898999999975786 ], [ 120585.895, 486407.732000000018161 ], [ 120584.301, 486406.522999999986496 ], [ 120584.174, 486406.69 ], [ 120578.588, 486402.455000000016298 ], [ 120564.214, 486421.363000000012107 ], [ 120556.833, 486416.087 ], [ 120568.596, 486400.708999999973457 ], [ 120567.647, 486399.981000000028871 ], [ 120563.175, 486405.756 ], [ 120557.68, 486412.939000000013039 ], [ 120555.031, 486410.87599999998929 ], [ 120554.01, 486412.186999999976251 ], [ 120551.255, 486410.042000000015832 ], [ 120551.654, 486409.528999999980442 ], [ 120548.538, 486407.103 ], [ 120547.029, 486409.043 ], [ 120538.181, 486402.686999999976251 ], [ 120550.391, 486389.436999999976251 ], [ 120553.514, 486389.132999999972526 ], [ 120563.478, 486396.781000000017229 ], [ 120566.286, 486393.121999999973923 ], [ 120563.348, 486390.893999999971129 ], [ 120563.475, 486390.726000000024214 ], [ 120561.833, 486389.481000000028871 ], [ 120561.706, 486389.647999999986496 ], [ 120556.099, 486385.395000000018626 ], [ 120555.81, 486385.177000000025146 ], [ 120562.72, 486376.106000000028871 ], [ 120563.079, 486376.38 ], [ 120571.42, 486365.396 ], [ 120570.671, 486364.826 ], [ 120571.219, 486364.104999999981374 ], [ 120571.365, 486364.216000000014901 ], [ 120571.426, 486364.136 ], [ 120571.495, 486364.188000000023749 ], [ 120572.072, 486363.43 ], [ 120572.002, 486363.37699999997858 ], [ 120572.063, 486363.295999999972992 ], [ 120571.917, 486363.185 ], [ 120572.603, 486362.282 ], [ 120573.03, 486362.607000000018161 ], [ 120573.59, 486361.87 ], [ 120573.528, 486361.822999999974854 ], [ 120573.897, 486361.337999999988824 ], [ 120574.082, 486361.479 ], [ 120575.27, 486359.916000000026543 ], [ 120575.084, 486359.775000000023283 ], [ 120575.449, 486359.294 ], [ 120575.505, 486359.337 ], [ 120575.866, 486358.86099999997532 ], [ 120575.779, 486358.794999999983702 ], [ 120576.238, 486358.19 ], [ 120576.328, 486358.257999999972526 ], [ 120577.011, 486357.359 ], [ 120577.128, 486357.447999999974854 ], [ 120578.405, 486355.76400000002468 ], [ 120578.264, 486355.657 ], [ 120578.945, 486354.761 ], [ 120578.873, 486354.706 ], [ 120579.314, 486354.125 ], [ 120579.419, 486354.174999999988358 ], [ 120579.778, 486353.701 ], [ 120579.716, 486353.653999999980442 ], [ 120580.09, 486353.162000000011176 ], [ 120580.266, 486353.295999999972992 ], [ 120581.442, 486351.746999999973923 ], [ 120581.271, 486351.617000000027474 ], [ 120581.643, 486351.128000000026077 ], [ 120581.692, 486351.164999999979045 ], [ 120582.251, 486350.428000000014435 ], [ 120581.841, 486350.115999999979977 ], [ 120582.928, 486348.685 ], [ 120583.063, 486348.788 ], [ 120584.226, 486347.256 ], [ 120584.091, 486347.153 ], [ 120585.181, 486345.717 ], [ 120587.977, 486347.840000000025611 ], [ 120589.515, 486345.824000000022352 ], [ 120589.47, 486345.516 ], [ 120594.94, 486344.745999999984633 ], [ 120594.985, 486345.054 ], [ 120597.013, 486346.59499999997206 ], [ 120600.02, 486342.636999999987893 ], [ 120604.223, 486345.849999999976717 ], [ 120604.343, 486345.69 ], [ 120604.966, 486346.163 ], [ 120604.796, 486346.386999999987893 ], [ 120604.884, 486346.454000000027008 ], [ 120604.63, 486346.788999999989755 ], [ 120615.599, 486355.141 ], [ 120615.862, 486354.794 ], [ 120615.949, 486354.85999999998603 ], [ 120616.119, 486354.636999999987893 ], [ 120616.74, 486355.108 ], [ 120616.619, 486355.267 ], [ 120620.831, 486358.467 ], [ 120617.834, 486362.412000000011176 ], [ 120619.894, 486363.977000000013504 ], [ 120620.19, 486363.936999999976251 ], [ 120620.921, 486369.397 ], [ 120620.624, 486369.436999999976251 ], [ 120619.057, 486371.473 ], [ 120621.851, 486373.596000000019558 ], [ 120618.79, 486377.62300000002142 ], [ 120625.21, 486382.506 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012173447", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012173447", "bouwjaar": 1991, "status": "Pand in gebruik", "gebruiksdoel": "bijeenkomstfunctie", "oppervlakte_min": 474, "oppervlakte_max": 9835, "aantal_verblijfsobjecten": 2, "fuuid": "pand.98458206-5afe-444b-85cc-43d27f4233db" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120626.833, 486211.395000000018626 ], [ 120626.557, 486211.884000000020023 ], [ 120626.268, 486212.365 ], [ 120625.967, 486212.837999999988824 ], [ 120625.653, 486213.303000000014435 ], [ 120625.327, 486213.76 ], [ 120624.99, 486214.207999999984168 ], [ 120624.64, 486214.647 ], [ 120624.279, 486215.076 ], [ 120623.907, 486215.495999999984633 ], [ 120623.524, 486215.906000000017229 ], [ 120623.13, 486216.305 ], [ 120622.725, 486216.694000000017695 ], [ 120622.311, 486217.071999999985565 ], [ 120621.887, 486217.439000000013039 ], [ 120621.453, 486217.794999999983702 ], [ 120621.01, 486218.13900000002468 ], [ 120620.558, 486218.472 ], [ 120620.097, 486218.792000000015832 ], [ 120620.012, 486218.848 ], [ 120619.606, 486219.113000000012107 ], [ 120619.195, 486219.369 ], [ 120618.777, 486219.615999999979977 ], [ 120618.354, 486219.852000000013504 ], [ 120617.926, 486220.079000000027008 ], [ 120617.514, 486220.286000000021886 ], [ 120617.097, 486220.483 ], [ 120616.676, 486220.672000000020489 ], [ 120616.251, 486220.851000000024214 ], [ 120615.657, 486221.085000000020955 ], [ 120621.78, 486227.38 ], [ 120630.481, 486236.325000000011642 ], [ 120620.711, 486245.87400000001071 ], [ 120620.543, 486246.034999999974389 ], [ 120617.702, 486243.128000000026077 ], [ 120614.298, 486239.645000000018626 ], [ 120601.029, 486226.068000000028405 ], [ 120600.772, 486225.814000000013039 ], [ 120600.506, 486225.568000000028405 ], [ 120600.233, 486225.331 ], [ 120599.952, 486225.103 ], [ 120599.663, 486224.884000000020023 ], [ 120599.368, 486224.674999999988358 ], [ 120599.322, 486224.645000000018626 ], [ 120598.982, 486224.424 ], [ 120598.633, 486224.215000000025611 ], [ 120598.277, 486224.020000000018626 ], [ 120597.915, 486223.837 ], [ 120597.545, 486223.669 ], [ 120597.17, 486223.51400000002468 ], [ 120596.789, 486223.37300000002142 ], [ 120596.404, 486223.245999999984633 ], [ 120596.014, 486223.132999999972526 ], [ 120595.62, 486223.034999999974389 ], [ 120595.222, 486222.952 ], [ 120594.822, 486222.882999999972526 ], [ 120594.42, 486222.829000000027008 ], [ 120594.016, 486222.789999999979045 ], [ 120593.61, 486222.766 ], [ 120593.204, 486222.756999999983236 ], [ 120592.798, 486222.762999999977183 ], [ 120592.393, 486222.783999999985099 ], [ 120591.988, 486222.82 ], [ 120591.586, 486222.870999999984633 ], [ 120591.185, 486222.936999999976251 ], [ 120590.787, 486223.017 ], [ 120590.392, 486223.112000000022817 ], [ 120590.001, 486223.222 ], [ 120589.615, 486223.346000000019558 ], [ 120589.233, 486223.484 ], [ 120588.857, 486223.636 ], [ 120588.486, 486223.802000000025146 ], [ 120588.306, 486223.885 ], [ 120588.168, 486223.946 ], [ 120588.024, 486223.994 ], [ 120587.877, 486224.03000000002794 ], [ 120587.728, 486224.052000000025146 ], [ 120587.577, 486224.060999999986961 ], [ 120587.426, 486224.056999999971595 ], [ 120587.276, 486224.038999999989755 ], [ 120587.128, 486224.009000000020023 ], [ 120586.983, 486223.965000000025611 ], [ 120586.843, 486223.908999999985099 ], [ 120586.708, 486223.840000000025611 ], [ 120586.576, 486223.756999999983236 ], [ 120586.451, 486223.662000000011176 ], [ 120586.336, 486223.555999999982305 ], [ 120586.231, 486223.441 ], [ 120586.137, 486223.316 ], [ 120586.055, 486223.181999999971595 ], [ 120585.985, 486223.042000000015832 ], [ 120585.928, 486222.897 ], [ 120585.885, 486222.745999999984633 ], [ 120585.856, 486222.593 ], [ 120585.841, 486222.436999999976251 ], [ 120584.933, 486222.221000000019558 ], [ 120584.258, 486225.048 ], [ 120584.112, 486225.012999999977183 ], [ 120581.31, 486226.717 ], [ 120581.241, 486227.007999999972526 ], [ 120580.249, 486226.771 ], [ 120577.847, 486226.197999999974854 ], [ 120577.566, 486227.37300000002142 ], [ 120576.18, 486227.042000000015832 ], [ 120575.752, 486228.330000000016298 ], [ 120572.65, 486227.712999999988824 ], [ 120573.182, 486224.412000000011176 ], [ 120573.064, 486224.382999999972526 ], [ 120573.581, 486222.276000000012573 ], [ 120572.74, 486218.927000000025146 ], [ 120573.56, 486215.526000000012573 ], [ 120575.805, 486212.931999999971595 ], [ 120576.31, 486210.811999999976251 ], [ 120577.812, 486211.173 ], [ 120578.116, 486209.903999999980442 ], [ 120577.115, 486209.663999999989755 ], [ 120576.997, 486210.157 ], [ 120576.498, 486210.037000000011176 ], [ 120576.767, 486208.913999999989755 ], [ 120572.891, 486208.076 ], [ 120574.6, 486200.173 ], [ 120575.898, 486194.254000000015367 ], [ 120577.432, 486188.174999999988358 ], [ 120579.776, 486180.979 ], [ 120583.552, 486182.304 ], [ 120584.006, 486181.200000000011642 ], [ 120584.356, 486180.32 ], [ 120584.716, 486179.444000000017695 ], [ 120585.085, 486178.571 ], [ 120585.464, 486177.702999999979511 ], [ 120585.843, 486176.784999999974389 ], [ 120586.229, 486175.911000000021886 ], [ 120586.625, 486175.042000000015832 ], [ 120587.031, 486174.177000000025146 ], [ 120587.446, 486173.316 ], [ 120587.911, 486172.433000000019092 ], [ 120588.333, 486171.576 ], [ 120588.764, 486170.723999999987427 ], [ 120589.206, 486169.87699999997858 ], [ 120589.658, 486169.036000000021886 ], [ 120590.008, 486168.50199999997858 ], [ 120590.361, 486168.744 ], [ 120591.237, 486169.316 ], [ 120591.825, 486168.294 ], [ 120592.425, 486167.28000000002794 ], [ 120593.037, 486166.272 ], [ 120593.662, 486165.272 ], [ 120596.965, 486167.288999999989755 ], [ 120597.241, 486166.895000000018626 ], [ 120597.404, 486166.994 ], [ 120599.433, 486164.09499999997206 ], [ 120599.285, 486163.974999999976717 ], [ 120599.918, 486163.193000000028405 ], [ 120600.261, 486163.471000000019558 ], [ 120599.959, 486163.843 ], [ 120600.847, 486164.708999999973457 ], [ 120601.206, 486167.919 ], [ 120604.363, 486167.538 ], [ 120605.283, 486168.340000000025611 ], [ 120605.633, 486167.996999999973923 ], [ 120605.941, 486168.311999999976251 ], [ 120605.626, 486168.62 ], [ 120605.885, 486168.885 ], [ 120608.381, 486166.441999999980908 ], [ 120612.983, 486171.159999999974389 ], [ 120612.488, 486171.646 ], [ 120610.969, 486173.13 ], [ 120616.732, 486179.027 ], [ 120617.552, 486179.865999999979977 ], [ 120616.381, 486182.5 ], [ 120616.096, 486183.14000000001397 ], [ 120615.482, 486184.521 ], [ 120615.967, 486184.745 ], [ 120616.445, 486184.984 ], [ 120616.917, 486185.23599999997532 ], [ 120617.38, 486185.503000000026077 ], [ 120617.836, 486185.782 ], [ 120618.283, 486186.075000000011642 ], [ 120618.721, 486186.381 ], [ 120619.15, 486186.700000000011642 ], [ 120619.57, 486187.031000000017229 ], [ 120619.979, 486187.37400000001071 ], [ 120620.379, 486187.729 ], [ 120620.768, 486188.096000000019558 ], [ 120621.146, 486188.473999999987427 ], [ 120621.512, 486188.863000000012107 ], [ 120621.867, 486189.261999999987893 ], [ 120622.211, 486189.672000000020489 ], [ 120622.542, 486190.092 ], [ 120622.86, 486190.521 ], [ 120623.166, 486190.958999999973457 ], [ 120623.459, 486191.406000000017229 ], [ 120623.728, 486191.843999999982771 ], [ 120623.985, 486192.289999999979045 ], [ 120624.229, 486192.742000000027474 ], [ 120624.46, 486193.201 ], [ 120624.679, 486193.667000000015832 ], [ 120624.884, 486194.13900000002468 ], [ 120625.075, 486194.615999999979977 ], [ 120625.253, 486195.098 ], [ 120625.417, 486195.586000000010245 ], [ 120625.568, 486196.077 ], [ 120625.705, 486196.572999999974854 ], [ 120625.827, 486197.071999999985565 ], [ 120625.935, 486197.575000000011642 ], [ 120626.03, 486198.081 ], [ 120626.109, 486198.588999999978114 ], [ 120626.175, 486199.098999999987427 ], [ 120626.226, 486199.60999999998603 ], [ 120626.262, 486200.12300000002142 ], [ 120626.284, 486200.636999999987893 ], [ 120626.292, 486201.151000000012573 ], [ 120627.803, 486201.147999999986496 ], [ 120628.503, 486201.146 ], [ 120629.442, 486201.142999999981839 ], [ 120629.436, 486201.706 ], [ 120629.415, 486202.267999999981839 ], [ 120629.379, 486202.830000000016298 ], [ 120629.328, 486203.39000000001397 ], [ 120629.263, 486203.949000000022352 ], [ 120629.183, 486204.506 ], [ 120629.088, 486205.06 ], [ 120628.978, 486205.612000000022817 ], [ 120628.854, 486206.161000000021886 ], [ 120628.715, 486206.706 ], [ 120628.562, 486207.24800000002142 ], [ 120628.394, 486207.784999999974389 ], [ 120628.213, 486208.316999999980908 ], [ 120628.017, 486208.84499999997206 ], [ 120627.807, 486209.367000000027474 ], [ 120627.584, 486209.884000000020023 ], [ 120627.347, 486210.393999999971129 ], [ 120627.097, 486210.897999999986496 ], [ 120626.833, 486211.395000000018626 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012243136", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012243136", "bouwjaar": 2014, "status": "Pand in gebruik", "gebruiksdoel": "winkelfunctie", "oppervlakte_min": 39, "oppervlakte_max": 39, "aantal_verblijfsobjecten": 1, "fuuid": "pand.094d1b4b-e3af-451f-9cf5-21aa6d366b75" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120497.586, 486289.26 ], [ 120493.779, 486285.303000000014435 ], [ 120499.445, 486279.832999999984168 ], [ 120503.26, 486283.819000000017695 ], [ 120501.221, 486285.773999999975786 ], [ 120497.586, 486289.26 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012168734", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012168734", "bouwjaar": 1900, "status": "Pand in gebruik", "gebruiksdoel": "bijeenkomstfunctie,logiesfunctie", "oppervlakte_min": 1, "oppervlakte_max": 10300, "aantal_verblijfsobjecten": 2, "fuuid": "pand.79b5733e-deb6-412e-88c3-cfe998d55853" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120562.189, 486341.829000000027008 ], [ 120562.034, 486342.038999999989755 ], [ 120562.299, 486342.237000000022817 ], [ 120562.096, 486342.509000000020023 ], [ 120563.189, 486343.340000000025611 ], [ 120562.375, 486344.433000000019092 ], [ 120562.688, 486344.666000000026543 ], [ 120562.49, 486344.93 ], [ 120562.65, 486345.049 ], [ 120562.35, 486345.450000000011642 ], [ 120561.878, 486345.09499999997206 ], [ 120560.432, 486347.017999999981839 ], [ 120560.131, 486347.418 ], [ 120554.933, 486354.332 ], [ 120554.632, 486354.732000000018161 ], [ 120553.149, 486356.707 ], [ 120552.849, 486357.106000000028871 ], [ 120550.488, 486360.245999999984633 ], [ 120549.08, 486360.441 ], [ 120548.504, 486360.007999999972526 ], [ 120541.239, 486369.669999999983702 ], [ 120541.034, 486369.706 ], [ 120540.706, 486369.467 ], [ 120537.239, 486374.036000000021886 ], [ 120537.028, 486374.066999999980908 ], [ 120536.974, 486374.027 ], [ 120535.15, 486376.509000000020023 ], [ 120519.905, 486362.36099999997532 ], [ 120517.532, 486364.933000000019092 ], [ 120513.893, 486361.506 ], [ 120500.825, 486349.191999999980908 ], [ 120501.289, 486348.898999999975786 ], [ 120504.004, 486346.960000000020955 ], [ 120506.653, 486344.931999999971595 ], [ 120509.234, 486342.816999999980908 ], [ 120512.098, 486340.295999999972992 ], [ 120514.864, 486337.669 ], [ 120517.529, 486334.939000000013039 ], [ 120519.279, 486333.199000000022352 ], [ 120521.519, 486330.49900000001071 ], [ 120525.559, 486325.099999999976717 ], [ 120525.945, 486325.38900000002468 ], [ 120526.09, 486325.179 ], [ 120526.576, 486325.549 ], [ 120529.88, 486321.14000000001397 ], [ 120529.399, 486320.778999999980442 ], [ 120529.486, 486320.663 ], [ 120529.699, 486320.379000000015367 ], [ 120529.74, 486320.408999999985099 ], [ 120529.877, 486320.226000000024214 ], [ 120530.334, 486320.15500000002794 ], [ 120530.517, 486320.293 ], [ 120532.106, 486320.032 ], [ 120532.244, 486319.848 ], [ 120532.699, 486319.788999999989755 ], [ 120532.884, 486319.928000000014435 ], [ 120532.914, 486319.887999999977183 ], [ 120533.314, 486320.188000000023749 ], [ 120532.954, 486320.668 ], [ 120537.421, 486324.016 ], [ 120537.822, 486324.316 ], [ 120542.206, 486327.603 ], [ 120542.6, 486327.897999999986496 ], [ 120547.008, 486331.201 ], [ 120547.413, 486331.505 ], [ 120551.831, 486334.816 ], [ 120552.231, 486335.115999999979977 ], [ 120556.655, 486338.430999999982305 ], [ 120557.055, 486338.732000000018161 ], [ 120561.431, 486342.011 ], [ 120561.79, 486341.53000000002794 ], [ 120562.189, 486341.829000000027008 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012249472", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012249472", "bouwjaar": 2017, "status": "Pand in gebruik", "gebruiksdoel": "winkelfunctie", "oppervlakte_min": 24, "oppervlakte_max": 24, "aantal_verblijfsobjecten": 1, "fuuid": "pand.bd1188ce-3af5-4b53-93df-5afc494fb9c9" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120535.572, 486234.244 ], [ 120535.244, 486234.254000000015367 ], [ 120534.898, 486234.26400000002468 ], [ 120534.723, 486228.246999999973923 ], [ 120537.692, 486228.161000000021886 ], [ 120538.542, 486228.559 ], [ 120539.135, 486229.267 ], [ 120539.243, 486232.995 ], [ 120538.802, 486233.712999999988824 ], [ 120537.867, 486234.175999999977648 ], [ 120535.572, 486234.244 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012249471", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012249471", "bouwjaar": 2018, "status": "Pand in gebruik", "gebruiksdoel": "winkelfunctie", "oppervlakte_min": 24, "oppervlakte_max": 24, "aantal_verblijfsobjecten": 1, "fuuid": "pand.c11e7847-0483-4140-9649-efabc995e87c" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120535.063, 486220.73599999997532 ], [ 120538.101, 486220.590000000025611 ], [ 120538.266, 486223.596000000019558 ], [ 120535.229, 486223.742000000027474 ], [ 120535.063, 486220.73599999997532 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012249519", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012249519", "bouwjaar": 2022, "status": "Pand in gebruik", "gebruiksdoel": "winkelfunctie", "oppervlakte_min": 82, "oppervlakte_max": 82, "aantal_verblijfsobjecten": 1, "fuuid": "pand.f976b04a-00ab-496d-825f-5477f84a5f29" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120536.699, 486202.349999999976717 ], [ 120537.355, 486198.179 ], [ 120539.083, 486196.912000000011176 ], [ 120540.633, 486196.76 ], [ 120540.976, 486195.481000000028871 ], [ 120542.337, 486195.847 ], [ 120542.02, 486197.03000000002794 ], [ 120543.193, 486197.526000000012573 ], [ 120544.48, 486199.288 ], [ 120544.719, 486201.446999999985565 ], [ 120543.826, 486203.447999999974854 ], [ 120542.079, 486204.721000000019558 ], [ 120539.962, 486204.962 ], [ 120537.967, 486204.068000000028405 ], [ 120536.699, 486202.349999999976717 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012169852", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012169852", "bouwjaar": 1894, "status": "Pand in gebruik", "gebruiksdoel": "bijeenkomstfunctie,kantoorfunctie,woonfunctie", "oppervlakte_min": 37, "oppervlakte_max": 2284, "aantal_verblijfsobjecten": 6, "fuuid": "pand.004167db-8dfd-43c5-b76d-afcaa3ea5e81" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120455.218, 486384.283999999985099 ], [ 120457.196, 486383.804 ], [ 120455.309, 486376.028999999980442 ], [ 120455.296, 486375.988000000012107 ], [ 120455.284, 486375.946999999985565 ], [ 120455.272, 486375.906000000017229 ], [ 120455.26, 486375.865 ], [ 120455.249, 486375.822999999974854 ], [ 120455.239, 486375.782 ], [ 120455.229, 486375.74 ], [ 120455.219, 486375.697999999974854 ], [ 120455.21, 486375.656000000017229 ], [ 120455.202, 486375.614 ], [ 120455.193, 486375.571999999985565 ], [ 120455.186, 486375.53000000002794 ], [ 120455.179, 486375.488000000012107 ], [ 120455.172, 486375.446 ], [ 120455.166, 486375.403 ], [ 120455.16, 486375.36099999997532 ], [ 120455.155, 486375.318000000028405 ], [ 120455.15, 486375.276000000012573 ], [ 120455.146, 486375.233 ], [ 120455.142, 486375.19 ], [ 120455.139, 486375.147999999986496 ], [ 120455.136, 486375.104999999981374 ], [ 120455.134, 486375.061999999976251 ], [ 120455.132, 486375.018999999971129 ], [ 120455.13, 486374.976000000024214 ], [ 120455.13, 486374.934 ], [ 120455.129, 486374.891 ], [ 120455.129, 486374.848 ], [ 120455.13, 486374.805 ], [ 120455.131, 486374.761999999987893 ], [ 120455.133, 486374.718999999982771 ], [ 120455.135, 486374.675999999977648 ], [ 120455.137, 486374.634000000020023 ], [ 120455.14, 486374.591000000014901 ], [ 120455.144, 486374.548 ], [ 120455.148, 486374.506 ], [ 120455.152, 486374.462999999988824 ], [ 120455.157, 486374.419999999983702 ], [ 120455.163, 486374.378000000026077 ], [ 120455.169, 486374.335000000020955 ], [ 120455.175, 486374.293 ], [ 120455.182, 486374.25099999998929 ], [ 120455.19, 486374.208999999973457 ], [ 120455.198, 486374.167000000015832 ], [ 120455.206, 486374.12400000001071 ], [ 120455.215, 486374.082999999984168 ], [ 120455.224, 486374.041000000026543 ], [ 120455.234, 486373.99900000001071 ], [ 120455.244, 486373.957 ], [ 120455.255, 486373.916000000026543 ], [ 120455.266, 486373.875 ], [ 120455.278, 486373.832999999984168 ], [ 120455.29, 486373.792000000015832 ], [ 120455.303, 486373.75099999998929 ], [ 120455.316, 486373.711000000010245 ], [ 120455.329, 486373.669999999983702 ], [ 120455.343, 486373.629000000015367 ], [ 120455.358, 486373.588999999978114 ], [ 120455.373, 486373.549 ], [ 120455.388, 486373.509000000020023 ], [ 120455.404, 486373.468999999982771 ], [ 120455.42, 486373.429 ], [ 120455.437, 486373.39000000001397 ], [ 120455.454, 486373.351000000024214 ], [ 120455.472, 486373.311999999976251 ], [ 120455.49, 486373.272999999986496 ], [ 120455.509, 486373.234 ], [ 120455.528, 486373.196 ], [ 120455.547, 486373.158 ], [ 120455.567, 486373.12 ], [ 120455.587, 486373.082 ], [ 120455.608, 486373.044 ], [ 120455.629, 486373.006999999983236 ], [ 120455.651, 486372.96999999997206 ], [ 120455.673, 486372.933000000019092 ], [ 120455.695, 486372.897 ], [ 120455.718, 486372.86099999997532 ], [ 120455.741, 486372.825000000011642 ], [ 120455.765, 486372.788999999989755 ], [ 120455.789, 486372.753000000026077 ], [ 120455.813, 486372.718 ], [ 120455.838, 486372.683000000019092 ], [ 120455.863, 486372.648999999975786 ], [ 120455.889, 486372.614 ], [ 120455.915, 486372.580000000016298 ], [ 120455.941, 486372.545999999972992 ], [ 120455.968, 486372.512999999977183 ], [ 120455.995, 486372.479999999981374 ], [ 120456.023, 486372.446999999985565 ], [ 120456.051, 486372.414999999979045 ], [ 120456.079, 486372.381999999983236 ], [ 120456.108, 486372.351000000024214 ], [ 120456.137, 486372.319000000017695 ], [ 120456.166, 486372.288 ], [ 120456.196, 486372.256999999983236 ], [ 120456.226, 486372.226000000024214 ], [ 120456.256, 486372.196 ], [ 120456.287, 486372.166000000026543 ], [ 120456.318, 486372.136999999987893 ], [ 120456.35, 486372.108 ], [ 120456.382, 486372.079000000027008 ], [ 120456.414, 486372.050999999977648 ], [ 120456.446, 486372.022999999986496 ], [ 120456.479, 486371.995 ], [ 120456.512, 486371.968 ], [ 120456.545, 486371.941 ], [ 120456.579, 486371.913999999989755 ], [ 120456.613, 486371.887999999977183 ], [ 120456.647, 486371.862000000022817 ], [ 120456.682, 486371.837 ], [ 120456.716, 486371.811999999976251 ], [ 120456.752, 486371.788 ], [ 120456.787, 486371.762999999977183 ], [ 120456.823, 486371.74 ], [ 120456.859, 486371.716000000014901 ], [ 120456.895, 486371.693000000028405 ], [ 120456.931, 486371.670999999972992 ], [ 120456.968, 486371.648999999975786 ], [ 120457.005, 486371.62699999997858 ], [ 120457.042, 486371.606000000028871 ], [ 120457.08, 486371.585000000020955 ], [ 120457.117, 486371.565 ], [ 120457.155, 486371.544999999983702 ], [ 120457.193, 486371.525000000023283 ], [ 120457.232, 486371.506 ], [ 120457.27, 486371.487000000022817 ], [ 120457.309, 486371.468999999982771 ], [ 120470.729, 486365.900000000023283 ], [ 120471.177, 486366.428000000014435 ], [ 120476.139, 486364.324000000022352 ], [ 120475.83, 486363.739 ], [ 120488.11, 486357.229 ], [ 120499.335, 486378.26 ], [ 120495.303, 486382.806999999971595 ], [ 120495.877, 486383.854999999981374 ], [ 120495.999, 486383.966000000014901 ], [ 120491.536, 486389.561999999976251 ], [ 120467.205, 486395.658999999985099 ], [ 120466.987, 486394.593 ], [ 120459.935, 486396.039999999979045 ], [ 120457.922, 486395.433000000019092 ], [ 120455.218, 486384.283999999985099 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012169858", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012169858", "bouwjaar": 2010, "status": "Pand in gebruik", "gebruiksdoel": "bijeenkomstfunctie", "oppervlakte_min": 205, "oppervlakte_max": 205, "aantal_verblijfsobjecten": 1, "fuuid": "pand.a3af887b-a6c4-4fc9-b40f-7d1ddd3de622" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120529.929, 486382.169 ], [ 120529.687, 486381.946 ], [ 120520.18, 486392.25099999998929 ], [ 120520.422, 486392.473999999987427 ], [ 120517.759, 486395.35999999998603 ], [ 120517.392, 486395.020000000018626 ], [ 120502.526, 486381.257999999972526 ], [ 120507.261, 486376.066999999980908 ], [ 120512.55, 486370.332999999984168 ], [ 120517.532, 486364.933000000019092 ], [ 120519.905, 486362.36099999997532 ], [ 120535.15, 486376.509000000020023 ], [ 120529.929, 486382.169 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012072136", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012072136", "bouwjaar": 1940, "status": "Pand in gebruik", "gebruiksdoel": "winkelfunctie,woonfunctie", "oppervlakte_min": 68, "oppervlakte_max": 1523, "aantal_verblijfsobjecten": 20, "fuuid": "pand.66469b27-ec7e-42d8-be31-a6872f505d95" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120348.616, 486360.726000000024214 ], [ 120333.509, 486354.629000000015367 ], [ 120330.369, 486353.319000000017695 ], [ 120325.689, 486354.799 ], [ 120324.909, 486356.718999999982771 ], [ 120324.179, 486358.379000000015367 ], [ 120323.751, 486358.195 ], [ 120306.359, 486350.718999999982771 ], [ 120306.966, 486349.549 ], [ 120310.149, 486343.408999999985099 ], [ 120310.789, 486343.629000000015367 ], [ 120313.209, 486338.579000000027008 ], [ 120319.309, 486326.079000000027008 ], [ 120319.409, 486326.13900000002468 ], [ 120319.45, 486326.07 ], [ 120339.907, 486336.443000000028405 ], [ 120339.97, 486336.495999999984633 ], [ 120349.67, 486341.580000000016298 ], [ 120350.156, 486341.924999999988358 ], [ 120350.605, 486342.316 ], [ 120351.013, 486342.75 ], [ 120351.376, 486343.223 ], [ 120351.689, 486343.729999999981374 ], [ 120351.951, 486344.26500000001397 ], [ 120352.006, 486344.398999999975786 ], [ 120352.058, 486344.533999999985099 ], [ 120352.107, 486344.669999999983702 ], [ 120352.251, 486345.153 ], [ 120352.353, 486345.647 ], [ 120352.414, 486346.147999999986496 ], [ 120352.431, 486346.652 ], [ 120352.407, 486347.156000000017229 ], [ 120352.34, 486347.656000000017229 ], [ 120352.23, 486348.148999999975786 ], [ 120352.08, 486348.63 ], [ 120348.616, 486360.726000000024214 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012169857", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012169857", "bouwjaar": 2010, "status": "Pand in gebruik", "gebruiksdoel": null, "oppervlakte_min": null, "oppervlakte_max": null, "aantal_verblijfsobjecten": 0, "fuuid": "pand.47b6a745-089d-41da-a260-a75e2dd411c2" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120505.607, 486373.680999999982305 ], [ 120507.261, 486376.066999999980908 ], [ 120502.526, 486381.257999999972526 ], [ 120500.251, 486379.10999999998603 ], [ 120499.335, 486378.26 ], [ 120488.11, 486357.229 ], [ 120492.348, 486354.549 ], [ 120505.607, 486373.680999999982305 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012165488", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012165488", "bouwjaar": 1912, "status": "Pand in gebruik", "gebruiksdoel": "kantoorfunctie,overige gebruiksfunctie,winkelfunctie", "oppervlakte_min": 1, "oppervlakte_max": 9779, "aantal_verblijfsobjecten": 9, "fuuid": "pand.c87b3ea3-eee8-4ece-b1ae-637be28a38b1" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120652.766, 486281.222 ], [ 120653.203, 486281.554 ], [ 120652.264, 486282.787000000011176 ], [ 120651.827, 486282.455000000016298 ], [ 120649.222, 486285.875 ], [ 120649.66, 486286.207999999984168 ], [ 120648.72, 486287.441999999980908 ], [ 120648.282, 486287.109 ], [ 120645.677, 486290.528999999980442 ], [ 120646.114, 486290.862000000022817 ], [ 120645.872, 486291.18 ], [ 120646.311, 486291.51400000002468 ], [ 120638.803, 486301.370999999984633 ], [ 120638.364, 486301.037000000011176 ], [ 120638.127, 486301.348 ], [ 120637.691, 486301.01400000002468 ], [ 120635.08, 486304.441999999980908 ], [ 120635.516, 486304.776000000012573 ], [ 120634.577, 486306.01 ], [ 120634.14, 486305.677000000025146 ], [ 120631.535, 486309.097 ], [ 120631.972, 486309.43 ], [ 120630.729, 486311.059 ], [ 120630.571, 486310.939000000013039 ], [ 120630.295, 486311.300999999977648 ], [ 120630.097, 486311.150000000023283 ], [ 120629.812, 486311.523999999975786 ], [ 120629.614, 486311.37300000002142 ], [ 120629.161, 486311.729 ], [ 120629.087, 486311.635 ], [ 120628.701, 486311.892999999981839 ], [ 120628.294, 486312.115999999979977 ], [ 120627.87, 486312.304 ], [ 120627.431, 486312.454000000027008 ], [ 120626.981, 486312.566 ], [ 120626.523, 486312.63900000002468 ], [ 120626.049, 486312.672000000020489 ], [ 120625.574, 486312.663 ], [ 120625.102, 486312.612000000022817 ], [ 120624.636, 486312.518999999971129 ], [ 120624.18, 486312.386 ], [ 120623.737, 486312.212999999988824 ], [ 120623.708, 486312.319000000017695 ], [ 120623.099, 486312.153 ], [ 120622.965, 486312.327 ], [ 120622.607, 486312.053000000014435 ], [ 120622.509, 486312.179 ], [ 120620.875, 486310.934 ], [ 120621.209, 486310.496999999973923 ], [ 120617.803, 486307.902 ], [ 120617.47, 486308.338999999978114 ], [ 120616.237, 486307.398999999975786 ], [ 120616.571, 486306.962999999988824 ], [ 120613.136, 486304.346000000019558 ], [ 120612.802, 486304.782 ], [ 120611.582, 486303.852000000013504 ], [ 120611.915, 486303.416000000026543 ], [ 120608.488, 486300.804 ], [ 120608.154, 486301.24 ], [ 120606.916, 486300.297000000020489 ], [ 120607.249, 486299.85999999998603 ], [ 120603.822, 486297.24800000002142 ], [ 120603.488, 486297.685 ], [ 120602.258, 486296.74800000002142 ], [ 120602.591, 486296.310999999986961 ], [ 120599.163, 486293.699000000022352 ], [ 120598.829, 486294.135 ], [ 120597.601, 486293.200000000011642 ], [ 120597.935, 486292.762999999977183 ], [ 120594.518, 486290.158999999985099 ], [ 120594.185, 486290.596000000019558 ], [ 120592.966, 486289.667000000015832 ], [ 120593.299, 486289.229999999981374 ], [ 120589.866, 486286.615 ], [ 120589.533, 486287.050999999977648 ], [ 120588.301, 486286.113000000012107 ], [ 120588.635, 486285.675999999977648 ], [ 120585.213, 486283.068000000028405 ], [ 120584.879, 486283.505 ], [ 120583.309, 486282.309 ], [ 120583.445, 486282.131 ], [ 120591.691, 486271.43 ], [ 120594.232, 486268.131999999983236 ], [ 120595.554, 486266.416000000026543 ], [ 120592.082, 486263.746999999973923 ], [ 120595.353, 486259.457 ], [ 120597.647, 486256.447999999974854 ], [ 120598.566, 486255.242000000027474 ], [ 120601.508, 486251.39000000001397 ], [ 120603.083, 486249.333999999973457 ], [ 120603.485, 486248.808000000019092 ], [ 120603.076, 486248.495 ], [ 120604.227, 486246.987000000022817 ], [ 120604.635, 486247.299999999988358 ], [ 120607.958, 486242.946999999985565 ], [ 120609.153, 486241.381 ], [ 120609.258, 486241.243000000016764 ], [ 120617.74, 486249.99900000001071 ], [ 120625.527, 486255.898999999975786 ], [ 120627.14, 486253.768999999971129 ], [ 120628.723, 486254.974999999976717 ], [ 120628.389, 486255.413 ], [ 120631.811, 486258.017999999981839 ], [ 120632.145, 486257.580000000016298 ], [ 120633.386, 486258.525000000023283 ], [ 120633.052, 486258.962999999988824 ], [ 120636.481, 486261.574000000022352 ], [ 120636.815, 486261.136 ], [ 120638.048, 486262.075000000011642 ], [ 120637.714, 486262.512999999977183 ], [ 120641.135, 486265.118000000016764 ], [ 120641.469, 486264.68 ], [ 120642.702, 486265.619 ], [ 120642.368, 486266.056999999971595 ], [ 120645.797, 486268.668 ], [ 120646.131, 486268.229999999981374 ], [ 120647.364, 486269.169 ], [ 120647.03, 486269.607000000018161 ], [ 120650.451, 486272.212999999988824 ], [ 120650.785, 486271.775000000023283 ], [ 120652.026, 486272.71999999997206 ], [ 120651.693, 486273.158 ], [ 120655.106, 486275.756999999983236 ], [ 120655.439, 486275.319000000017695 ], [ 120657.029, 486276.528999999980442 ], [ 120655.815, 486278.12599999998929 ], [ 120655.378, 486277.793 ], [ 120652.766, 486281.222 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012168685", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012168685", "bouwjaar": 1884, "status": "Pand in gebruik", "gebruiksdoel": "woonfunctie", "oppervlakte_min": 79, "oppervlakte_max": 157, "aantal_verblijfsobjecten": 4, "fuuid": "pand.b8158f67-3378-4311-86f4-f316d7fcf948" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120594.152, 486250.560999999986961 ], [ 120581.241, 486244.939000000013039 ], [ 120583.932, 486238.549 ], [ 120597.127, 486244.261999999987893 ], [ 120594.152, 486250.560999999986961 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012168686", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012168686", "bouwjaar": 1885, "status": "Pand in gebruik", "gebruiksdoel": "woonfunctie", "oppervlakte_min": 62, "oppervlakte_max": 75, "aantal_verblijfsobjecten": 6, "fuuid": "pand.4957e189-674e-444e-bafc-cbf083285f25" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120591.179, 486256.862000000022817 ], [ 120591.097, 486256.827 ], [ 120578.449, 486251.37 ], [ 120581.241, 486244.939000000013039 ], [ 120594.152, 486250.560999999986961 ], [ 120591.179, 486256.862000000022817 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012169470", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012169470", "bouwjaar": 1888, "status": "Pand in gebruik", "gebruiksdoel": "woonfunctie", "oppervlakte_min": 30, "oppervlakte_max": 73, "aantal_verblijfsobjecten": 10, "fuuid": "pand.c7e3fca0-be17-4c5b-9d68-b80ade14bcc3" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120513.893, 486361.506 ], [ 120511.18, 486364.446999999985565 ], [ 120513.365, 486366.505 ], [ 120511.236, 486368.814000000013039 ], [ 120509.405, 486366.696 ], [ 120496.586, 486351.87 ], [ 120500.825, 486349.191999999980908 ], [ 120513.893, 486361.506 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012169856", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012169856", "bouwjaar": 1888, "status": "Pand in gebruik", "gebruiksdoel": "woonfunctie", "oppervlakte_min": 32, "oppervlakte_max": 81, "aantal_verblijfsobjecten": 10, "fuuid": "pand.fdb56a64-06d9-4597-b127-2b8b8a7b74f1" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120509.405, 486366.696 ], [ 120506.531, 486369.180999999982305 ], [ 120508.362, 486371.299 ], [ 120505.607, 486373.680999999982305 ], [ 120492.348, 486354.549 ], [ 120496.586, 486351.87 ], [ 120509.405, 486366.696 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012173449", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012173449", "bouwjaar": 1905, "status": "Pand in gebruik", "gebruiksdoel": "woonfunctie", "oppervlakte_min": 32, "oppervlakte_max": 318, "aantal_verblijfsobjecten": 4, "fuuid": "pand.b6607c0f-80f5-4813-be47-1ea5f4cb89b2" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120601.888, 486238.51400000002468 ], [ 120601.6, 486239.141 ], [ 120598.897, 486245.022 ], [ 120597.127, 486244.261999999987893 ], [ 120583.932, 486238.549 ], [ 120584.641, 486236.800999999977648 ], [ 120586.955, 486231.096000000019558 ], [ 120589.078, 486230.261 ], [ 120592.583, 486231.811999999976251 ], [ 120601.757, 486238.257999999972526 ], [ 120601.958, 486238.362000000022817 ], [ 120601.888, 486238.51400000002468 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012173450", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012173450", "bouwjaar": 1885, "status": "Pand in gebruik", "gebruiksdoel": "woonfunctie", "oppervlakte_min": 56, "oppervlakte_max": 67, "aantal_verblijfsobjecten": 6, "fuuid": "pand.c4953485-0897-4476-80e2-9eb0bace0fd3" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120587.323, 486262.814000000013039 ], [ 120587.13, 486262.731000000028871 ], [ 120575.621, 486257.89000000001397 ], [ 120576.581, 486255.677000000025146 ], [ 120576.5, 486255.642 ], [ 120577.359, 486253.661000000021886 ], [ 120577.441, 486253.696 ], [ 120578.449, 486251.37 ], [ 120591.097, 486256.827 ], [ 120589.295, 486259.201 ], [ 120588.936, 486259.047000000020489 ], [ 120587.323, 486262.814000000013039 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012249036", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012249036", "bouwjaar": 1880, "status": "Pand in gebruik", "gebruiksdoel": "kantoorfunctie,winkelfunctie,woonfunctie", "oppervlakte_min": 1, "oppervlakte_max": 520, "aantal_verblijfsobjecten": 10, "fuuid": "pand.486d7fb3-b143-4351-8169-c0f6eaa4d52a" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120577.684, 486277.768999999971129 ], [ 120570.944, 486272.631999999983236 ], [ 120570.809, 486272.650000000023283 ], [ 120570.766, 486272.332999999984168 ], [ 120570.9, 486272.315 ], [ 120570.569, 486269.960000000020955 ], [ 120570.435, 486269.978 ], [ 120570.39, 486269.659999999974389 ], [ 120570.524, 486269.642 ], [ 120572.871, 486264.229999999981374 ], [ 120575.621, 486257.89000000001397 ], [ 120587.13, 486262.731000000028871 ], [ 120586.012, 486265.298 ], [ 120584.389, 486264.591000000014901 ], [ 120582.792, 486268.257999999972526 ], [ 120584.315, 486268.920999999972992 ], [ 120577.684, 486277.768999999971129 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012253734", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012253734", "bouwjaar": 1880, "status": "Pand in gebruik", "gebruiksdoel": "kantoorfunctie,woonfunctie", "oppervlakte_min": 69, "oppervlakte_max": 219, "aantal_verblijfsobjecten": 2, "fuuid": "pand.77e43bdf-0444-4b15-9ea1-3c9a6ced96d0" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120583.457, 486282.179 ], [ 120577.676, 486277.802000000025146 ], [ 120584.326, 486268.968 ], [ 120585.796, 486267.005 ], [ 120591.702, 486271.477000000013504 ], [ 120583.457, 486282.179 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012236234", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012236234", "bouwjaar": 1884, "status": "Pand in gebruik", "gebruiksdoel": "bijeenkomstfunctie", "oppervlakte_min": 1950, "oppervlakte_max": 1950, "aantal_verblijfsobjecten": 1, "fuuid": "pand.8f047f0d-7056-4ad2-9e8e-44f3fe34dfc2" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120342.989, 486381.028999999980442 ], [ 120326.884, 486374.837999999988824 ], [ 120327.688, 486372.50199999997858 ], [ 120331.632, 486374.071999999985565 ], [ 120332.553, 486371.552000000025146 ], [ 120333.375, 486369.304 ], [ 120329.373, 486367.848999999987427 ], [ 120330.407, 486364.995999999984633 ], [ 120329.66, 486364.69 ], [ 120330.549, 486362.369 ], [ 120335.285, 486364.083999999973457 ], [ 120336.246, 486361.43 ], [ 120347.3, 486365.830000000016298 ], [ 120345.9, 486370.824000000022352 ], [ 120344.46, 486375.96999999997206 ], [ 120342.989, 486381.028999999980442 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012236892", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012236892", "bouwjaar": 1884, "status": "Pand in gebruik", "gebruiksdoel": "winkelfunctie,woonfunctie", "oppervlakte_min": 1, "oppervlakte_max": 119, "aantal_verblijfsobjecten": 3, "fuuid": "pand.23274958-362e-4767-b4ec-0268d3e96886" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120348.616, 486360.726000000024214 ], [ 120348.69, 486360.75 ], [ 120347.3, 486365.830000000016298 ], [ 120336.246, 486361.43 ], [ 120324.909, 486356.718999999982771 ], [ 120325.689, 486354.799 ], [ 120330.369, 486353.319000000017695 ], [ 120333.509, 486354.629000000015367 ], [ 120348.616, 486360.726000000024214 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012073194", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012073194", "bouwjaar": 1991, "status": "Pand in gebruik", "gebruiksdoel": "gezondheidszorgfunctie,sportfunctie,winkelfunctie", "oppervlakte_min": 177, "oppervlakte_max": 330, "aantal_verblijfsobjecten": 4, "fuuid": "pand.d53253aa-06ab-42ec-bff8-ee6f404d3b04" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120481.865, 486145.506999999983236 ], [ 120477.136, 486156.37699999997858 ], [ 120445.04, 486142.413 ], [ 120448.519, 486134.417000000015832 ], [ 120448.675, 486134.48499999998603 ], [ 120449.938, 486131.587999999988824 ], [ 120481.865, 486145.506999999983236 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012080492", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012080492", "bouwjaar": 1929, "status": "Pand in gebruik", "gebruiksdoel": "bijeenkomstfunctie,kantoorfunctie", "oppervlakte_min": 1, "oppervlakte_max": 12688, "aantal_verblijfsobjecten": 3, "fuuid": "pand.c90342e3-3d29-4987-8b13-b4d3d2e39e62" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120398.94, 486278.304 ], [ 120396.684, 486281.177000000025146 ], [ 120396.07, 486281.960000000020955 ], [ 120377.076, 486270.98499999998603 ], [ 120374.904, 486269.920999999972992 ], [ 120387.246, 486244.061999999976251 ], [ 120394.918, 486247.881999999983236 ], [ 120397.785, 486244.315 ], [ 120415.497, 486257.215000000025611 ], [ 120415.209, 486257.581 ], [ 120414.77, 486258.14000000001397 ], [ 120412.938, 486260.473999999987427 ], [ 120412.513, 486261.01500000001397 ], [ 120398.94, 486278.304 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012090765", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012090765", "bouwjaar": 1974, "status": "Pand in gebruik", "gebruiksdoel": "bijeenkomstfunctie,winkelfunctie", "oppervlakte_min": 45, "oppervlakte_max": 20776, "aantal_verblijfsobjecten": 2, "fuuid": "pand.cd95f0a6-be74-43f8-9c85-15e6bcaaed25" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120415.671, 486186.581 ], [ 120419.81, 486185.88 ], [ 120421.808, 486185.542000000015832 ], [ 120422.461, 486184.059 ], [ 120424.716, 486185.049 ], [ 120426.457, 486184.754000000015367 ], [ 120437.256, 486159.914999999979045 ], [ 120438.89, 486156.159999999974389 ], [ 120439.531, 486156.439000000013039 ], [ 120445.653, 486159.099999999976717 ], [ 120463.626, 486166.914999999979045 ], [ 120470.826, 486170.045999999972992 ], [ 120479.62, 486173.87 ], [ 120477.158, 486178.357000000018161 ], [ 120476.51, 486178.093999999982771 ], [ 120474.651, 486181.460000000020955 ], [ 120473.982, 486181.207 ], [ 120472.15, 486184.57 ], [ 120471.506, 486184.313000000023749 ], [ 120469.654, 486187.668 ], [ 120469.011, 486187.384000000020023 ], [ 120467.179, 486190.731000000028871 ], [ 120466.53, 486190.455000000016298 ], [ 120464.71, 486193.81 ], [ 120464.033, 486193.511999999987893 ], [ 120462.31, 486196.693000000028405 ], [ 120465.984, 486198.272 ], [ 120464.422, 486201.778999999980442 ], [ 120463.511, 486201.381 ], [ 120461.863, 486205.082 ], [ 120460.914, 486204.668 ], [ 120459.368, 486208.141 ], [ 120458.438, 486207.73499999998603 ], [ 120456.878, 486211.238000000012107 ], [ 120455.923, 486210.82 ], [ 120454.348, 486214.354 ], [ 120449.731, 486212.332 ], [ 120449.49, 486212.770000000018626 ], [ 120449.426, 486212.742000000027474 ], [ 120441.252, 486209.193000000028405 ], [ 120430.519, 486204.533 ], [ 120423.775, 486201.604 ], [ 120422.929, 486203.552000000025146 ], [ 120420.007, 486202.283 ], [ 120419.174, 486204.201 ], [ 120416.244, 486202.929 ], [ 120415.409, 486204.852000000013504 ], [ 120412.487, 486203.582999999984168 ], [ 120411.654, 486205.50099999998929 ], [ 120408.746, 486204.239 ], [ 120407.918, 486206.146 ], [ 120406.269, 486206.43 ], [ 120405.47, 486206.57 ], [ 120405.429, 486206.333999999973457 ], [ 120405.266, 486205.386999999987893 ], [ 120404.084, 486205.592 ], [ 120404.11, 486205.74 ], [ 120403.041, 486205.929 ], [ 120402.667, 486203.728 ], [ 120402.441, 486203.767 ], [ 120402.258, 486202.683000000019092 ], [ 120402.485, 486202.643999999971129 ], [ 120401.505, 486196.836000000010245 ], [ 120401.279, 486196.87400000001071 ], [ 120401.092, 486195.770000000018626 ], [ 120401.318, 486195.732000000018161 ], [ 120400.855, 486192.979999999981374 ], [ 120400.217, 486189.200000000011642 ], [ 120403.196, 486188.696 ], [ 120415.671, 486186.581 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012118949", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012118949", "bouwjaar": 1932, "status": "Pand in gebruik", "gebruiksdoel": "woonfunctie", "oppervlakte_min": 140, "oppervlakte_max": 150, "aantal_verblijfsobjecten": 4, "fuuid": "pand.8eefe91f-75dd-4f43-b872-8e1b0ad893b1" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120391.469, 486207.261 ], [ 120391.028, 486207.332999999984168 ], [ 120390.967, 486207.288 ], [ 120390.688, 486205.642 ], [ 120388.478, 486192.588999999978114 ], [ 120388.225, 486191.088999999978114 ], [ 120393.253, 486190.238000000012107 ], [ 120393.722, 486193.018999999971129 ], [ 120396.286, 486192.586000000010245 ], [ 120396.477, 486193.718999999982771 ], [ 120400.855, 486192.979999999981374 ], [ 120401.318, 486195.732000000018161 ], [ 120401.092, 486195.770000000018626 ], [ 120401.279, 486196.87400000001071 ], [ 120401.505, 486196.836000000010245 ], [ 120402.485, 486202.643999999971129 ], [ 120402.258, 486202.683000000019092 ], [ 120402.441, 486203.767 ], [ 120402.667, 486203.728 ], [ 120403.041, 486205.929 ], [ 120403.174, 486206.723999999987427 ], [ 120403.179, 486206.75099999998929 ], [ 120403.094, 486206.766 ], [ 120402.265, 486206.913 ], [ 120402.322, 486207.15500000002794 ], [ 120400.856, 486207.456 ], [ 120400.338, 486207.49900000001071 ], [ 120398.931, 486207.461000000010245 ], [ 120398.913, 486207.292000000015832 ], [ 120397.958, 486207.386999999987893 ], [ 120397.91, 486206.928000000014435 ], [ 120395.513, 486207.175999999977648 ], [ 120394.152, 486207.316999999980908 ], [ 120393.659, 486207.368000000016764 ], [ 120393.625, 486207.038999999989755 ], [ 120391.754, 486207.233 ], [ 120391.469, 486207.261 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012126819", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012126819", "bouwjaar": 1942, "status": "Pand in gebruik", "gebruiksdoel": "gezondheidszorgfunctie,kantoorfunctie,woonfunctie", "oppervlakte_min": 31, "oppervlakte_max": 145, "aantal_verblijfsobjecten": 26, "fuuid": "pand.d1bac961-af0d-42d9-a42c-e7a4b3b568bc" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120379.167, 486194.164999999979045 ], [ 120381.35, 486207.10999999998603 ], [ 120364.543, 486201.865 ], [ 120362.752, 486201.222 ], [ 120342.05, 486191.830000000016298 ], [ 120347.513, 486180.113000000012107 ], [ 120351.372, 486181.658999999985099 ], [ 120351.651, 486180.962999999988824 ], [ 120378.751, 486191.702999999979511 ], [ 120379.167, 486194.164999999979045 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012135250", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012135250", "bouwjaar": 1991, "status": "Pand in gebruik", "gebruiksdoel": "overige gebruiksfunctie,woonfunctie", "oppervlakte_min": 38, "oppervlakte_max": 450, "aantal_verblijfsobjecten": 56, "fuuid": "pand.cc3ce009-b7f6-4bbb-b90f-fe1513900089" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120502.431, 486138.545999999972992 ], [ 120499.851, 486144.473 ], [ 120485.106, 486138.058000000019092 ], [ 120481.865, 486145.506999999983236 ], [ 120449.938, 486131.587999999988824 ], [ 120430.406, 486123.147999999986496 ], [ 120426.688, 486131.708999999973457 ], [ 120419.347, 486128.484 ], [ 120419.929, 486127.093 ], [ 120417.329, 486125.956 ], [ 120416.644, 486125.656000000017229 ], [ 120414.494, 486124.716000000014901 ], [ 120414.173, 486124.575000000011642 ], [ 120411.932, 486123.59499999997206 ], [ 120411.615, 486123.456 ], [ 120411.62, 486122.669999999983702 ], [ 120411.877, 486109.227000000013504 ], [ 120415.442, 486101.052000000025146 ], [ 120428.91, 486070.166000000026543 ], [ 120436.11, 486073.304 ], [ 120487.55, 486095.723999999987427 ], [ 120487.149, 486096.642999999981839 ], [ 120486.249, 486098.707 ], [ 120487.25, 486099.142999999981839 ], [ 120487.364, 486098.881999999983236 ], [ 120487.885, 486099.109 ], [ 120503.148, 486105.753000000026077 ], [ 120502.772, 486106.619 ], [ 120514.169, 486111.566 ], [ 120502.431, 486138.545999999972992 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012149855", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012149855", "bouwjaar": 1923, "status": "Pand in gebruik", "gebruiksdoel": "kantoorfunctie", "oppervlakte_min": 3035, "oppervlakte_max": 3035, "aantal_verblijfsobjecten": 1, "fuuid": "pand.16abeab3-8ae1-4c16-ac98-dddb45f1c731" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120401.57, 486367.492000000027474 ], [ 120401.265, 486368.075000000011642 ], [ 120399.989, 486367.408 ], [ 120397.175, 486373.06 ], [ 120396.605, 486373.576 ], [ 120395.844, 486373.477000000013504 ], [ 120394.661, 486372.864 ], [ 120394.539, 486373.104999999981374 ], [ 120386.316, 486368.847 ], [ 120386.438, 486368.606000000028871 ], [ 120378.178, 486364.329000000027008 ], [ 120377.907, 486364.864 ], [ 120377.797, 486364.806999999971595 ], [ 120377.61, 486364.710000000020955 ], [ 120378.459, 486363.079000000027008 ], [ 120378.959, 486363.319000000017695 ], [ 120381.409, 486358.629000000015367 ], [ 120380.909, 486358.348999999987427 ], [ 120381.5, 486357.25 ], [ 120387.07, 486360.12599999998929 ], [ 120388.873, 486356.634000000020023 ], [ 120390.384, 486357.413999999989755 ], [ 120402.852, 486332.966000000014901 ], [ 120401.341, 486332.188000000023749 ], [ 120403.161, 486328.653999999980442 ], [ 120397.58, 486325.78000000002794 ], [ 120398.138, 486324.695 ], [ 120398.592, 486324.929 ], [ 120401.054, 486320.147999999986496 ], [ 120400.6, 486319.913999999989755 ], [ 120401.16, 486318.830000000016298 ], [ 120402.09, 486319.305 ], [ 120402.227, 486319.375 ], [ 120404.217, 486320.38900000002468 ], [ 120404.344, 486320.13900000002468 ], [ 120418.081, 486327.145000000018626 ], [ 120417.954, 486327.393999999971129 ], [ 120419.128, 486327.993000000016764 ], [ 120419.59, 486328.62300000002142 ], [ 120419.427, 486329.386999999987893 ], [ 120419.227, 486329.778999999980442 ], [ 120419.476, 486329.908999999985099 ], [ 120417.823, 486333.152 ], [ 120417.574, 486333.022 ], [ 120416.57, 486334.990999999979977 ], [ 120417.836, 486335.653 ], [ 120417.526, 486336.26 ], [ 120416.387, 486338.495 ], [ 120416.733, 486338.675999999977648 ], [ 120403.09, 486365.429 ], [ 120402.743, 486365.24800000002142 ], [ 120401.57, 486367.492000000027474 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012152690", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012152690", "bouwjaar": 1869, "status": "Pand in gebruik", "gebruiksdoel": "woonfunctie", "oppervlakte_min": 90, "oppervlakte_max": 102, "aantal_verblijfsobjecten": 4, "fuuid": "pand.4dfa8f47-1f53-4a68-84b5-503e21beaa4f" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120349.604, 486231.544 ], [ 120346.32, 486230.056999999971595 ], [ 120348.348, 486225.609 ], [ 120344.93, 486224.086000000010245 ], [ 120350.332, 486212.170999999972992 ], [ 120357.063, 486215.244 ], [ 120349.604, 486231.544 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012153259", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012153259", "bouwjaar": 1927, "status": "Pand in gebruik", "gebruiksdoel": "woonfunctie", "oppervlakte_min": 81, "oppervlakte_max": 115, "aantal_verblijfsobjecten": 4, "fuuid": "pand.3e3b9e77-322b-45aa-ae28-fcce2336e6e2" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120362.7, 486237.15500000002794 ], [ 120358.978, 486235.493000000016764 ], [ 120360.935, 486231.212 ], [ 120358.222, 486230.00199999997858 ], [ 120363.608, 486218.233 ], [ 120370.221, 486221.25199999997858 ], [ 120362.7, 486237.15500000002794 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012153462", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012153462", "bouwjaar": 1886, "status": "Pand in gebruik", "gebruiksdoel": "winkelfunctie,woonfunctie", "oppervlakte_min": 20, "oppervlakte_max": 120, "aantal_verblijfsobjecten": 2, "fuuid": "pand.c5060a74-8d9f-48d4-bf96-4e597bd7097b" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120332.735, 486292.766 ], [ 120328.89, 486290.88 ], [ 120333.595, 486279.505 ], [ 120335.436, 486280.25099999998929 ], [ 120337.218, 486275.862000000022817 ], [ 120339.324, 486276.713999999978114 ], [ 120332.735, 486292.766 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012153791", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012153791", "bouwjaar": 1914, "status": "Pand in gebruik", "gebruiksdoel": "logiesfunctie", "oppervlakte_min": 3310, "oppervlakte_max": 3310, "aantal_verblijfsobjecten": 1, "fuuid": "pand.6a346355-c1fc-4991-bc30-0f003027cdaf" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120328.89, 486290.88 ], [ 120318.14, 486285.76 ], [ 120322.886, 486272.786000000021886 ], [ 120334.386, 486277.555999999982305 ], [ 120333.595, 486279.505 ], [ 120328.89, 486290.88 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012156168", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012156168", "bouwjaar": 1870, "status": "Pand in gebruik", "gebruiksdoel": "logiesfunctie,woonfunctie", "oppervlakte_min": 60, "oppervlakte_max": 95, "aantal_verblijfsobjecten": 4, "fuuid": "pand.e42ae67b-a247-4b7a-ba1e-6f781c5fb1c4" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120331.924, 486218.294999999983702 ], [ 120331.364, 486219.552000000025146 ], [ 120325.467, 486216.930999999982305 ], [ 120331.627, 486203.63 ], [ 120337.376, 486206.255 ], [ 120331.924, 486218.294999999983702 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012156677", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012156677", "bouwjaar": 1879, "status": "Pand in gebruik", "gebruiksdoel": "woonfunctie", "oppervlakte_min": 81, "oppervlakte_max": 208, "aantal_verblijfsobjecten": 3, "fuuid": "pand.5733e6ff-0a65-465b-8d45-e72d18b92fd2" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120366.016, 486128.315 ], [ 120361.503, 486129.94 ], [ 120359.7, 486130.588999999978114 ], [ 120359.427, 486130.686999999976251 ], [ 120359.37, 486130.577 ], [ 120359.04, 486130.75 ], [ 120352.938, 486119.028999999980442 ], [ 120353.053, 486118.968999999982771 ], [ 120352.99, 486118.849999999976717 ], [ 120352.958, 486118.867000000027474 ], [ 120348.62, 486110.590000000025611 ], [ 120352.195, 486108.733 ], [ 120356.115, 486116.31 ], [ 120356.985, 486116.928000000014435 ], [ 120360.18, 486115.48499999998603 ], [ 120366.016, 486128.315 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012158244", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012158244", "bouwjaar": 1886, "status": "Pand in gebruik", "gebruiksdoel": "winkelfunctie,woonfunctie", "oppervlakte_min": 43, "oppervlakte_max": 58, "aantal_verblijfsobjecten": 4, "fuuid": "pand.c1183c14-97b7-4c85-aed2-676bdf4a27d1" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120336.65, 486294.63 ], [ 120336.605, 486294.619 ], [ 120332.735, 486292.766 ], [ 120339.324, 486276.713999999978114 ], [ 120341.617, 486277.642 ], [ 120339.862, 486282.053000000014435 ], [ 120341.578, 486282.740999999979977 ], [ 120336.65, 486294.63 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012161316", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012161316", "bouwjaar": 1870, "status": "Pand in gebruik", "gebruiksdoel": "logiesfunctie", "oppervlakte_min": 369, "oppervlakte_max": 369, "aantal_verblijfsobjecten": 1, "fuuid": "pand.32dfca72-2a0a-4bae-bbc2-a0632c08bdfa" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120325.467, 486216.930999999982305 ], [ 120319.757, 486214.392999999981839 ], [ 120325.727, 486200.936999999976251 ], [ 120331.627, 486203.63 ], [ 120325.467, 486216.930999999982305 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012161484", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012161484", "bouwjaar": 1869, "status": "Pand in gebruik", "gebruiksdoel": null, "oppervlakte_min": null, "oppervlakte_max": null, "aantal_verblijfsobjecten": 0, "fuuid": "pand.c22984cf-6c94-4d72-9ddf-e07cebbc1680" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120344.93, 486224.086000000010245 ], [ 120342.035, 486222.798 ], [ 120339.928, 486227.409999999974389 ], [ 120336.298, 486225.793 ], [ 120343.871, 486209.221000000019558 ], [ 120350.332, 486212.170999999972992 ], [ 120344.93, 486224.086000000010245 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012162627", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012162627", "bouwjaar": 1899, "status": "Pand in gebruik", "gebruiksdoel": "winkelfunctie,woonfunctie", "oppervlakte_min": 42, "oppervlakte_max": 201, "aantal_verblijfsobjecten": 7, "fuuid": "pand.ee4d66d5-b3e1-45af-8d44-34a3b05a3b7f" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120344.324, 486298.39000000001397 ], [ 120344.28, 486298.479999999981374 ], [ 120336.65, 486294.63 ], [ 120341.578, 486282.740999999979977 ], [ 120343.721, 486277.365 ], [ 120350.625, 486280.115 ], [ 120353.517, 486272.882999999972526 ], [ 120346.674, 486270.158 ], [ 120347.519, 486268.017999999981839 ], [ 120348.392, 486265.808000000019092 ], [ 120353.374, 486267.954000000027008 ], [ 120353.435, 486268.393999999971129 ], [ 120356.627, 486269.775000000023283 ], [ 120344.324, 486298.39000000001397 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012163123", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012163123", "bouwjaar": 1927, "status": "Pand in gebruik", "gebruiksdoel": "woonfunctie", "oppervlakte_min": 49, "oppervlakte_max": 145, "aantal_verblijfsobjecten": 4, "fuuid": "pand.f078d81d-66d9-4b70-9b27-a64bfd15f21e" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120370.772, 486235.505 ], [ 120368.054, 486234.26500000001397 ], [ 120367.17, 486236.201 ], [ 120369.885, 486237.458999999973457 ], [ 120368.779, 486239.869 ], [ 120362.7, 486237.15500000002794 ], [ 120370.221, 486221.25199999997858 ], [ 120376.633, 486224.18 ], [ 120370.772, 486235.505 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012166600", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012166600", "bouwjaar": 1869, "status": "Pand in gebruik", "gebruiksdoel": "bijeenkomstfunctie", "oppervlakte_min": 1013, "oppervlakte_max": 1013, "aantal_verblijfsobjecten": 1, "fuuid": "pand.b9ae4218-b33a-4453-9b44-edbf9be103d2" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120336.298, 486225.793 ], [ 120333.32, 486224.467 ], [ 120335.426, 486219.854 ], [ 120331.924, 486218.294999999983702 ], [ 120337.376, 486206.255 ], [ 120343.871, 486209.221000000019558 ], [ 120336.298, 486225.793 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012166693", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012166693", "bouwjaar": 1927, "status": "Pand in gebruik", "gebruiksdoel": "woonfunctie", "oppervlakte_min": 55, "oppervlakte_max": 55, "aantal_verblijfsobjecten": 8, "fuuid": "pand.18ad69a6-822d-484f-970b-4542cfe3428e" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120358.222, 486230.00199999997858 ], [ 120355.017, 486228.598 ], [ 120353.079, 486232.88 ], [ 120353.48, 486233.058000000019092 ], [ 120352.867, 486234.38900000002468 ], [ 120349.106, 486232.670999999972992 ], [ 120349.604, 486231.544 ], [ 120357.063, 486215.244 ], [ 120363.608, 486218.233 ], [ 120358.222, 486230.00199999997858 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012188744", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012188744", "bouwjaar": 1890, "status": "Pand in gebruik", "gebruiksdoel": null, "oppervlakte_min": null, "oppervlakte_max": null, "aantal_verblijfsobjecten": 0, "fuuid": "pand.037272fe-e844-4c72-8384-512ac59a60e8" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120381.072, 486167.128000000026077 ], [ 120380.608, 486166.862000000022817 ], [ 120380.705, 486166.695 ], [ 120381.765, 486164.842 ], [ 120385.651, 486167.069000000017695 ], [ 120384.494, 486169.088999999978114 ], [ 120381.072, 486167.128000000026077 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012198480", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012198480", "bouwjaar": 1886, "status": "Pand in gebruik", "gebruiksdoel": null, "oppervlakte_min": null, "oppervlakte_max": null, "aantal_verblijfsobjecten": 0, "fuuid": "pand.8ff860f7-7311-4140-96e7-431176e3c6f5" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120343.515, 486266.18 ], [ 120339.94, 486264.538999999989755 ], [ 120340.516, 486263.151000000012573 ], [ 120341.047, 486262.74800000002142 ], [ 120341.235, 486262.516 ], [ 120344.378, 486263.962 ], [ 120343.515, 486266.18 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012198510", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012198510", "bouwjaar": 1914, "status": "Pand in gebruik", "gebruiksdoel": null, "oppervlakte_min": null, "oppervlakte_max": null, "aantal_verblijfsobjecten": 0, "fuuid": "pand.6167afd6-f9c6-4f3c-a48d-b29a856908db" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120347.471, 486247.418 ], [ 120346.258, 486250.368000000016764 ], [ 120345.413, 486252.364 ], [ 120332.323, 486246.849999999976717 ], [ 120334.311, 486242.011 ], [ 120347.471, 486247.418 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012198512", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012198512", "bouwjaar": 1914, "status": "Pand in gebruik", "gebruiksdoel": null, "oppervlakte_min": null, "oppervlakte_max": null, "aantal_verblijfsobjecten": 0, "fuuid": "pand.e1b02ddf-f3f8-4529-992c-383503337771" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120341.235, 486262.516 ], [ 120341.047, 486262.74800000002142 ], [ 120340.516, 486263.151000000012573 ], [ 120339.94, 486264.538999999989755 ], [ 120337.314, 486270.856000000028871 ], [ 120325.46, 486265.893999999971129 ], [ 120326.42, 486263.114 ], [ 120327.415, 486260.412000000011176 ], [ 120330.455, 486252.096000000019558 ], [ 120343.474, 486257.39000000001397 ], [ 120341.235, 486262.516 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012200221", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012200221", "bouwjaar": 1886, "status": "Pand in gebruik", "gebruiksdoel": null, "oppervlakte_min": null, "oppervlakte_max": null, "aantal_verblijfsobjecten": 0, "fuuid": "pand.6a1ad26e-1d4e-4adb-9a92-87589d1b9a55" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120347.519, 486268.017999999981839 ], [ 120343.515, 486266.18 ], [ 120344.378, 486263.962 ], [ 120348.392, 486265.808000000019092 ], [ 120347.519, 486268.017999999981839 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012198511", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012198511", "bouwjaar": 1914, "status": "Pand in gebruik", "gebruiksdoel": null, "oppervlakte_min": null, "oppervlakte_max": null, "aantal_verblijfsobjecten": 0, "fuuid": "pand.9cab7b33-a5ec-47eb-a469-78cd9798e752" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120349.342, 486242.884000000020023 ], [ 120335.842, 486237.229999999981374 ], [ 120339.103, 486229.446999999985565 ], [ 120352.566, 486235.059 ], [ 120349.342, 486242.884000000020023 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012228712", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012228712", "bouwjaar": 1974, "status": "Pand in gebruik", "gebruiksdoel": null, "oppervlakte_min": null, "oppervlakte_max": null, "aantal_verblijfsobjecten": 0, "fuuid": "pand.210d2f28-3253-4dd0-ba0e-268d58c8754f" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120388.735, 486184.898999999975786 ], [ 120384.195, 486182.892999999981839 ], [ 120385.474, 486179.949000000022352 ], [ 120387.508, 486180.832999999984168 ], [ 120388.735, 486184.898999999975786 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012233595", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012233595", "bouwjaar": 1991, "status": "Pand in gebruik", "gebruiksdoel": "winkelfunctie,woonfunctie", "oppervlakte_min": 137, "oppervlakte_max": 566, "aantal_verblijfsobjecten": 10, "fuuid": "pand.9d2c0f5a-6337-4f09-a30d-d977a2f463b8" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120527.753, 486116.434 ], [ 120528.46, 486116.740999999979977 ], [ 120507.944, 486142.332 ], [ 120508.049, 486142.413 ], [ 120507.763, 486142.775000000023283 ], [ 120502.431, 486138.545999999972992 ], [ 120514.169, 486111.566 ], [ 120522.622, 486115.23499999998603 ], [ 120522.997, 486114.37 ], [ 120526.585, 486115.927000000025146 ], [ 120527.753, 486116.434 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012233556", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012233556", "bouwjaar": 1961, "status": "Pand in gebruik", "gebruiksdoel": "bijeenkomstfunctie,kantoorfunctie,winkelfunctie,woonfunctie", "oppervlakte_min": 59, "oppervlakte_max": 12688, "aantal_verblijfsobjecten": 4, "fuuid": "pand.f210a7c9-e6f7-46da-b0d8-94e4b70f0154" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120393.098, 486284.416000000026543 ], [ 120394.501, 486286.113000000012107 ], [ 120373.494, 486303.806999999971595 ], [ 120372.559, 486304.526000000012573 ], [ 120371.564, 486305.161000000021886 ], [ 120370.517, 486305.704000000027008 ], [ 120369.426, 486306.153999999980442 ], [ 120368.3, 486306.505 ], [ 120367.147, 486306.755 ], [ 120365.976, 486306.903 ], [ 120364.797, 486306.946 ], [ 120363.619, 486306.886 ], [ 120362.451, 486306.721000000019558 ], [ 120361.302, 486306.454000000027008 ], [ 120360.18, 486306.087 ], [ 120359.096, 486305.621999999973923 ], [ 120344.28, 486298.479999999981374 ], [ 120344.324, 486298.39000000001397 ], [ 120356.627, 486269.775000000023283 ], [ 120353.435, 486268.393999999971129 ], [ 120353.374, 486267.954000000027008 ], [ 120348.392, 486265.808000000019092 ], [ 120344.378, 486263.962 ], [ 120341.235, 486262.516 ], [ 120343.474, 486257.39000000001397 ], [ 120343.801, 486256.592 ], [ 120357.191, 486261.99900000001071 ], [ 120374.904, 486269.920999999972992 ], [ 120377.076, 486270.98499999998603 ], [ 120396.07, 486281.960000000020955 ], [ 120396.126, 486282.027 ], [ 120395.898, 486282.213999999978114 ], [ 120395.841, 486282.147999999986496 ], [ 120393.098, 486284.416000000026543 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012236072", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012236072", "bouwjaar": 1890, "status": "Pand in gebruik", "gebruiksdoel": "gezondheidszorgfunctie,kantoorfunctie", "oppervlakte_min": 574, "oppervlakte_max": 2238, "aantal_verblijfsobjecten": 2, "fuuid": "pand.1e18eace-34f0-4196-af62-4bc51f12de00" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120428.469, 486176.446999999985565 ], [ 120418.8, 486172.620999999984633 ], [ 120409.458, 486170.791000000026543 ], [ 120409.202, 486172.097 ], [ 120403.819, 486171.042000000015832 ], [ 120404.944, 486165.422000000020489 ], [ 120396.694, 486163.805 ], [ 120397.026, 486162.115999999979977 ], [ 120389.89, 486160.75 ], [ 120391.208, 486154.034999999974389 ], [ 120393.045, 486154.385 ], [ 120393.99, 486148.599999999976717 ], [ 120407.369, 486151.158999999985099 ], [ 120407.9, 486148.409999999974389 ], [ 120409.622, 486148.745 ], [ 120412.871, 486149.378000000026077 ], [ 120414.019, 486149.602000000013504 ], [ 120414.5, 486147.14000000001397 ], [ 120437.44, 486156.21999999997206 ], [ 120436.039, 486159.37599999998929 ], [ 120428.469, 486176.446999999985565 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012236079", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012236079", "bouwjaar": 1881, "status": "Pand in gebruik", "gebruiksdoel": "kantoorfunctie,woonfunctie", "oppervlakte_min": 419, "oppervlakte_max": 419, "aantal_verblijfsobjecten": 1, "fuuid": "pand.b796dcc9-5c02-4397-a3cf-4f204702c0bc" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120337.06, 486189.62 ], [ 120332.31, 486187.450000000011642 ], [ 120331.457, 486185.337 ], [ 120337.44, 486174.03000000002794 ], [ 120346.373, 486177.566999999980908 ], [ 120344.648, 486180.740999999979977 ], [ 120343.723, 486181.137999999977183 ], [ 120339.006, 486189.773999999975786 ], [ 120339.094, 486189.821999999985565 ], [ 120338.965, 486190.106000000028871 ], [ 120337.202, 486189.306999999971595 ], [ 120337.06, 486189.62 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012236355", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012236355", "bouwjaar": 1893, "status": "Pand in gebruik", "gebruiksdoel": "logiesfunctie", "oppervlakte_min": 3410, "oppervlakte_max": 3410, "aantal_verblijfsobjecten": 1, "fuuid": "pand.ec3250f3-cd10-4ea5-87ff-c1879979652a" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120331.493, 486131.923 ], [ 120330.539, 486133.994 ], [ 120324.129, 486131.011 ], [ 120325.679, 486127.549 ], [ 120319.35, 486124.798 ], [ 120320.174, 486122.961000000010245 ], [ 120325.365, 486111.37 ], [ 120327.102, 486112.158999999985099 ], [ 120329.33, 486113.169999999983702 ], [ 120331.214, 486115.221000000019558 ], [ 120330.323, 486117.178000000014435 ], [ 120333.874, 486118.794999999983702 ], [ 120336.044, 486121.843 ], [ 120335.089, 486123.943000000028405 ], [ 120331.493, 486131.923 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012236669", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012236669", "bouwjaar": 1884, "status": "Pand in gebruik", "gebruiksdoel": "logiesfunctie", "oppervlakte_min": 3410, "oppervlakte_max": 3410, "aantal_verblijfsobjecten": 1, "fuuid": "pand.96186b44-3a85-453e-8b0d-0c33bfa48d32" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120326.136, 486163.56 ], [ 120313.415, 486157.863000000012107 ], [ 120316.136, 486151.788999999989755 ], [ 120311.893, 486149.887999999977183 ], [ 120315.004, 486142.943000000028405 ], [ 120320.527, 486145.416000000026543 ], [ 120320.241, 486144.467 ], [ 120321.162, 486142.413 ], [ 120322.366, 486141.836000000010245 ], [ 120320.582, 486141.037000000011176 ], [ 120321.873, 486138.153999999980442 ], [ 120322.87, 486138.599999999976717 ], [ 120322.813, 486138.728 ], [ 120325.386, 486139.88 ], [ 120325.173, 486140.354999999981374 ], [ 120326.063, 486140.753000000026077 ], [ 120328.174, 486136.044999999983702 ], [ 120328.231, 486135.918 ], [ 120330.513, 486136.94 ], [ 120332.549, 486132.396 ], [ 120331.493, 486131.923 ], [ 120335.089, 486123.943000000028405 ], [ 120335.454, 486124.108 ], [ 120336.667, 486124.657 ], [ 120337.028, 486124.82 ], [ 120336.992, 486124.897999999986496 ], [ 120338.85, 486125.729999999981374 ], [ 120338.075, 486127.50199999997858 ], [ 120340.17, 486128.433000000019092 ], [ 120341.72, 486131.419999999983702 ], [ 120341.291, 486132.299 ], [ 120340.466, 486133.995999999984633 ], [ 120339.827, 486135.31 ], [ 120342.955, 486136.821999999985565 ], [ 120343.311, 486137.805 ], [ 120341.801, 486140.925999999977648 ], [ 120338.758, 486147.223 ], [ 120337.524, 486146.62599999998929 ], [ 120334.61, 486152.659999999974389 ], [ 120333.224, 486151.99 ], [ 120330.303, 486158.174999999988358 ], [ 120328.95, 486157.528 ], [ 120326.136, 486163.56 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012236811", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012236811", "bouwjaar": 1991, "status": "Pand in gebruik", "gebruiksdoel": "kantoorfunctie,overige gebruiksfunctie,winkelfunctie", "oppervlakte_min": 116, "oppervlakte_max": 841, "aantal_verblijfsobjecten": 11, "fuuid": "pand.f8dbd776-55a0-4a63-a160-93188a75dbe3" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120491.881, 486162.792000000015832 ], [ 120477.136, 486156.37699999997858 ], [ 120481.865, 486145.506999999983236 ], [ 120485.106, 486138.058000000019092 ], [ 120499.851, 486144.473 ], [ 120496.989, 486151.145000000018626 ], [ 120496.955, 486151.13 ], [ 120491.881, 486162.792000000015832 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012237139", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012237139", "bouwjaar": 1916, "status": "Pand in gebruik", "gebruiksdoel": "winkelfunctie,woonfunctie", "oppervlakte_min": 62, "oppervlakte_max": 1013, "aantal_verblijfsobjecten": 9, "fuuid": "pand.c43181ea-eb9c-4d45-a731-e939a2d18df3" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120315.082, 486270.103 ], [ 120314.351, 486271.938000000023749 ], [ 120310.024, 486281.973 ], [ 120309.957, 486281.941999999980908 ], [ 120309.912, 486282.031000000017229 ], [ 120309.719, 486281.935 ], [ 120309.681, 486281.754000000015367 ], [ 120309.732, 486281.648999999975786 ], [ 120306.306, 486279.949000000022352 ], [ 120306.255, 486280.049999999988358 ], [ 120306.05, 486280.117000000027474 ], [ 120305.874, 486280.032 ], [ 120305.85, 486279.846000000019558 ], [ 120302.244, 486278.056999999971595 ], [ 120302.07, 486278.145000000018626 ], [ 120301.875, 486278.052000000025146 ], [ 120301.868, 486277.87 ], [ 120301.917, 486277.771 ], [ 120298.381, 486276.017 ], [ 120298.332, 486276.115999999979977 ], [ 120298.19, 486276.226000000024214 ], [ 120298.042, 486276.153 ], [ 120298.092, 486276.054 ], [ 120298.009, 486276.012999999977183 ], [ 120298.08, 486275.868000000016764 ], [ 120294.921, 486274.299999999988358 ], [ 120301.578, 486259.891 ], [ 120302.068, 486259.950000000011642 ], [ 120306.117, 486250.913 ], [ 120310.166, 486241.419 ], [ 120331.191, 486250.13 ], [ 120330.455, 486252.096000000019558 ], [ 120327.415, 486260.412000000011176 ], [ 120320.096, 486257.511 ], [ 120315.082, 486270.103 ] ], [ [ 120305.802, 486260.794999999983702 ], [ 120304.416, 486264.009000000020023 ], [ 120303.815, 486263.75 ], [ 120303.195, 486265.210000000020955 ], [ 120306.381, 486266.577 ], [ 120308.391, 486261.911000000021886 ], [ 120305.802, 486260.794999999983702 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012237170", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012237170", "bouwjaar": 1882, "status": "Pand in gebruik", "gebruiksdoel": "kantoorfunctie,woonfunctie", "oppervlakte_min": 137, "oppervlakte_max": 712, "aantal_verblijfsobjecten": 5, "fuuid": "pand.99cd9869-0176-46d7-a592-88376e175fa4" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120361.236, 486157.39000000001397 ], [ 120363.006, 486155.919999999983702 ], [ 120364.94, 486158.229 ], [ 120366.327, 486157.033999999985099 ], [ 120366.348, 486156.914999999979045 ], [ 120366.609, 486156.946 ], [ 120368.454, 486157.163 ], [ 120368.68, 486157.19 ], [ 120368.666, 486157.309 ], [ 120371.191, 486160.356000000028871 ], [ 120369.909, 486161.411000000021886 ], [ 120371.756, 486163.658 ], [ 120365.415, 486168.858 ], [ 120366.248, 486169.87400000001071 ], [ 120361.685, 486173.615 ], [ 120360.747, 486172.471000000019558 ], [ 120353.214, 486178.647999999986496 ], [ 120352.511, 486178.579000000027008 ], [ 120349.767, 486175.232000000018161 ], [ 120348.533, 486173.726000000024214 ], [ 120346.624, 486173.76400000002468 ], [ 120344.39, 486171.039999999979045 ], [ 120344.805, 486169.18 ], [ 120347.734, 486166.778 ], [ 120347.17, 486166.07 ], [ 120348.951, 486164.615 ], [ 120354.036, 486160.462 ], [ 120354.146, 486160.371999999973923 ], [ 120355.438, 486159.316999999980908 ], [ 120355.82, 486159.005 ], [ 120355.89, 486159.090000000025611 ], [ 120356.381, 486159.688000000023749 ], [ 120359.242, 486157.341000000014901 ], [ 120359.28, 486157.31 ], [ 120361.217, 486157.234 ], [ 120361.213, 486157.363000000012107 ], [ 120361.236, 486157.39000000001397 ] ] ] } }, +{ "type": "Feature", "properties": { "identificatie": "0363100012571269", "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/pand/0363100012571269", "bouwjaar": 2023, "status": "Pand in gebruik", "gebruiksdoel": "overige gebruiksfunctie", "oppervlakte_min": 5, "oppervlakte_max": 5, "aantal_verblijfsobjecten": 1, "fuuid": "pand.89ab367b-eea3-41c8-9f1d-17638cc4c81c" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 120555.912, 486155.085000000020955 ], [ 120554.6, 486153.684 ], [ 120556.775, 486151.552000000025146 ], [ 120558.133, 486152.938000000023749 ], [ 120555.912, 486155.085000000020955 ] ] ] } } +] +} diff --git a/tests/response/classify_response.json b/tests/response/classify_response.json new file mode 100644 index 0000000..fcf3cd8 --- /dev/null +++ b/tests/response/classify_response.json @@ -0,0 +1 @@ +{"cohesion": [0, 13, 5, 2.5, 0, 5, 0, 0, 0, 0, 5, 0, 0, 0, 13, 0, 0], "color": ["#DBAD4B", "#578E57", "#578E57", "#a76b29", "#578E57", "#578E57", "#578E57", "#DBAD4B", "#578E57", "#578E57", "#578E57", "#578E57", "#DBAD4B", "#DBAD4B", "#578E57", "#DBAD4B", "#DBAD4B"], "gamma_sat": [20, 19, 17, 12, 15, 17, 15, 21, 18, 14, 17, 15, 21, 19, 20, 19, 21], "gamma_unsat": [18, 19, 17, 12, 15, 17, 15, 19, 18, 14, 17, 15, 19, 17, 20, 17, 19], "geotechnicalSoilName": ["zwakSiltigZand", "klei", "klei", "veen", "organischKlei", "klei", "zwakZandigeKlei", "zand", "sterkZandigeKlei", "klei", "klei", "organischKlei", "zand", "zand", "zwakZandigeKlei", "zand", "zand"], "lowerBoundary": [2.68, 3.28, 3.68, 4.28, 6.28, 6.88, 8.88, 9.88, 10.28, 11.08, 11.48, 11.88, 17.68, 18.48, 19.08, 19.48, 26.1], "mainComponent": ["sand", "clay", "clay", "peat", "clay", "clay", "clay", "sand", "clay", "clay", "clay", "clay", "sand", "sand", "clay", "sand", "sand"], "phi": [27, 17.5, 17.5, 15, 15, 17.5, 22.5, 35, 27.5, 17.5, 17.5, 15, 35, 30, 22.5, 30, 35], "soilDistribution": {"clay": [0.1525706244124224, 0.9225865195571746, 0.8613392288534939, 0.18339008229980924, 0.8342572715629463, 0.9361526393124562, 0.6572903748211626, 0.007379537924762375, 0.6016738532042947, 0.9012569599203498, 0.9333538828635992, 0.8142861513593955, 0.003874287624660146, 0.024289520897805825, 0.7245133929299404, 0.023722740772073925, 0.003144723849374637], "gravel": [0.0001402460336304477, 6.705001995400093e-06, 2.0816127628345276e-05, 1.1802533959527912e-07, 1.4390029193938555e-06, 1.462633252892466e-06, 8.900217007786741e-05, 3.721035862480591e-05, 6.498386941917885e-05, 1.82888765847673e-05, 2.111577949186417e-06, 5.008064379286782e-06, 2.7771809400339408e-05, 6.380966454223791e-05, 7.920023684891181e-05, 5.499506805740681e-05, 2.8158370699929e-05], "peat": [0.008850963402575712, 0.009464805418628111, 0.0394463294864106, 0.8067412325364202, 0.11788704260033123, 0.00728471449365966, 0.03653412875088766, 0.04134057764150154, 0.01038164328592007, 0.012446803562255275, 0.006548204712652408, 0.1284041036273179, 0.008093595516553843, 0.00514407562945616, 0.006717017564279934, 0.004376239790519133, 0.07335820667582338], "rocks": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], "sand": [0.7729635388986823, 0.013153926715389787, 0.03498491597293773, 1.2969342493913591e-05, 0.0001934310885392214, 0.00048552394368426254, 0.22757296440109062, 0.8977057734581336, 0.30094408782108445, 0.020079648900501457, 0.0008073774340152685, 0.0008450560054019007, 0.9350277397975124, 0.9133459034636024, 0.16396842987574556, 0.9042214739879725, 0.8624165082013989], "silt": [0.06547464192060344, 0.05478806597969986, 0.06420872262035189, 0.009855586578550651, 0.04766081652291533, 0.05607563305960113, 0.07851353777299563, 0.05353692739928686, 0.08693541283053144, 0.06619830161046811, 0.05928840122874674, 0.05645965876779554, 0.05297664190630449, 0.0571567145047973, 0.10472196903564053, 0.06762454270842554, 0.06105240621441947]}, "undrainedShearStrength": [0, 100, 50, 20, 25, 50, 40, 0, 0, 25, 50, 25, 0, 0, 120, 0, 0], "upperBoundary": [2.08, 2.68, 3.28, 3.68, 4.28, 6.28, 6.88, 8.88, 9.88, 10.28, 11.08, 11.48, 11.88, 17.68, 18.48, 19.08, 19.48]} \ No newline at end of file diff --git a/tests/response/impact_force_response.json b/tests/response/impact_force_response.json new file mode 100644 index 0000000..924d22d --- /dev/null +++ b/tests/response/impact_force_response.json @@ -0,0 +1,25 @@ +{ + "features": [ + { + "geometry": { + "coordinates": [ + 142892.19, + 470783.87 + ], + "type": "Point" + }, + "id": "CPT-001", + "properties": { + "Q90": 5.822596716084852, + "Q95": 5.822596716084852, + "base": null, + "depth": -4.85, + "max": 5.822596716084852, + "x": 142892.19, + "y": 470783.87 + }, + "type": "Feature" + } + ], + "type": "FeatureCollection" +} \ No newline at end of file diff --git a/tests/test_impact_force.py b/tests/test_impact_force.py new file mode 100644 index 0000000..4673b96 --- /dev/null +++ b/tests/test_impact_force.py @@ -0,0 +1,64 @@ +import matplotlib.pyplot as plt +import pytest + +from pyvibracore.input.impact_force_properties import ( + VibrationSource, + create_multi_cpt_impact_force_payload, + create_multi_cpt_impact_force_report_payload, + create_single_cpt_impact_force_payload, +) +from pyvibracore.results.impact_force_result import MultiCalculationData + + +def test_vibration_source(): + VibrationSource.from_sheet_pile_name("AZ12-770") + + with pytest.raises(ValueError): + VibrationSource.from_sheet_pile_name("abc") + + +def test_create_multi_cpt_impact_force_payload(cpt, mock_classify_response): + payload = create_multi_cpt_impact_force_payload( + [cpt], + {"S-TUN-016-PG": mock_classify_response}, + VibrationSource.from_sheet_pile_name("AZ12-770"), + friction_strategy="CPTFrictionStrategy", + drive_strategy="vibrate", + installation_level_offset=-20, + ) + + +def test_create_multi_cpt_impact_force_report_payload(cpt, mock_classify_response): + payload = create_multi_cpt_impact_force_payload( + [cpt], + {"S-TUN-016-PG": mock_classify_response}, + VibrationSource.from_sheet_pile_name("AZ12-770"), + friction_strategy="CPTFrictionStrategy", + drive_strategy="vibrate", + installation_level_offset=-20, + ) + create_multi_cpt_impact_force_report_payload( + payload, + project_name="Test project", + project_id="123", + author="Test User", + ) + + +def test_create_single_cpt_impact_force_payload(cpt, mock_classify_response): + payload = create_multi_cpt_impact_force_payload( + [cpt], + {"S-TUN-016-PG": mock_classify_response}, + VibrationSource.from_sheet_pile_name("AZ12-770"), + friction_strategy="CPTFrictionStrategy", + drive_strategy="vibrate", + installation_level_offset=-20, + ) + + create_single_cpt_impact_force_payload(payload, "S-TUN-016-PG") + + +def test_multi_calculation_data(mock_impact_force_response): + result = MultiCalculationData.from_api_response(mock_impact_force_response) + + assert isinstance(result.plot(), plt.Figure) diff --git a/tests/test_vibration_cur166.py b/tests/test_vibration_cur166.py new file mode 100644 index 0000000..39bcbd1 --- /dev/null +++ b/tests/test_vibration_cur166.py @@ -0,0 +1,62 @@ +import geopandas as gpd +import pytest + +from pyvibracore.input.vibration_properties import ( + BAG_WFS_URL, + create_cur166_payload, + create_single_payload, + get_buildings_geodataframe, + get_normative_building, +) + + +def test_get_buildings_geodataframe(requests_mock, mock_bag_response): + requests_mock.get(BAG_WFS_URL, json=mock_bag_response) + + gdf = get_buildings_geodataframe(1, 2, 3, 4) + + assert isinstance(gdf, gpd.GeoDataFrame) + + +def test_create_cur166_payload(requests_mock, mock_bag_response, mock_source_location): + requests_mock.get(BAG_WFS_URL, json=mock_bag_response) + gdf = get_buildings_geodataframe(1, 2, 3, 4) + + create_cur166_payload( + gdf, + location=mock_source_location, + force=500, + ) + + with pytest.raises(ValueError): + create_cur166_payload( + gdf, location=mock_source_location, force=500, reference_location="Utrecht" + ) + + +def test_get_normative_building(requests_mock, mock_bag_response, mock_source_location): + requests_mock.get(BAG_WFS_URL, json=mock_bag_response) + gdf = get_buildings_geodataframe(1, 2, 3, 4) + name = get_normative_building( + gdf, + location=mock_source_location, + category="two", + ) + + assert isinstance(name, str) + + +def test_create_single_payload(requests_mock, mock_bag_response, mock_source_location): + requests_mock.get(BAG_WFS_URL, json=mock_bag_response) + gdf = get_buildings_geodataframe(1, 2, 3, 4) + + payload = create_cur166_payload( + gdf, + location=mock_source_location, + force=500, + ) + + create_single_payload(payload, name="0") + + with pytest.raises(ValueError): + create_single_payload(payload, name="-1")