diff --git a/.github/workflows/automated-tests.yml b/.github/workflows/automated-tests.yml index dcff57e..f634553 100644 --- a/.github/workflows/automated-tests.yml +++ b/.github/workflows/automated-tests.yml @@ -18,11 +18,11 @@ jobs: API_CLIENT_SECRET: ${{ secrets.API_CLIENT_SECRET }} API_USERNAME: ${{ secrets.API_USERNAME }} API_PASSWORD: ${{ secrets.API_PASSWORD }} - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 strategy: fail-fast: false matrix: - python-version: ["3.8"] + python-version: ["3.11"] steps: - uses: actions/checkout@v2 @@ -35,9 +35,9 @@ jobs: sudo apt-add-repository ppa:ubuntugis/ubuntugis-unstable sudo apt-get update sudo apt-get install gdal-bin libgdal-dev - pip install gdal + pip install gdal==3.6.2 python -m pip install --upgrade pip - python -m pip install flake8 pytest + python -m pip install flake8 pytest pip-system-certs if [ -f requirements.txt ]; then pip install -r requirements.txt; fi if [ -f requirements-dev.txt ]; then pip install -r requirements-dev.txt; fi - name: Lint with flake8 @@ -48,4 +48,4 @@ jobs: flake8 . --count --ignore=E501 --exit-zero --max-complexity=10 --max-line-length=127 --statistics - name: Test with pytest run: | - make test \ No newline at end of file + make test diff --git a/.github/workflows/publish-package.yml b/.github/workflows/publish-package.yml index e51e1bb..15160dc 100644 --- a/.github/workflows/publish-package.yml +++ b/.github/workflows/publish-package.yml @@ -5,28 +5,28 @@ on: tags: - v** - jobs: deploy: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v3 with: - python-version: '3.8' + python-version: '3.10' - name: Install dependencies run: | sudo apt-add-repository ppa:ubuntugis/ubuntugis-unstable sudo apt-get update sudo apt-get install gdal-bin libgdal-dev - pip install gdal + pip install gdal==3.6.2 python -m pip install --upgrade pip pip install wheel pip install -r requirements.txt - pip install -r requirements-dev.txt + pip install -r requirements-dev.txt + pip install mkdocstrings-python - name: Build package run: make build - name: Publish package diff --git a/.github/workflows/test-publish-package.yml b/.github/workflows/test-publish-package.yml new file mode 100644 index 0000000..0c68d12 --- /dev/null +++ b/.github/workflows/test-publish-package.yml @@ -0,0 +1,39 @@ +name: Publish package and docs test + +on: + push: + tags: + - test-v** + +jobs: + deploy: + + runs-on: ubuntu-22.04 + + + steps: + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v3 + with: + python-version: '3.10' + - name: Install dependencies + run: | + sudo apt-add-repository ppa:ubuntugis/ubuntugis-unstable + sudo apt-get update + sudo apt-get install gdal-bin libgdal-dev + pip install gdal==3.6.2 + python -m pip install --upgrade pip + pip install wheel + pip install -r requirements.txt + pip install -r requirements-dev.txt + pip install mkdocstrings-python + - name: Build package + run: make build + - name: Publish package distributions to TestPyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + repository-url: https://test.pypi.org/legacy/ + user: __token__ + password: ${{ secrets.TEST_PYPI_API_TOKEN }} + - run: mkdocs gh-deploy --force \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 70ba153..71f16db 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.9 +FROM python:3.10 WORKDIR /app diff --git a/README.md b/README.md index 30d138b..a6d4e3e 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@

- + Logo @@ -21,11 +21,11 @@ Who we are

- Project description + Project description · - Report Bug + Report Bug · - Request Feature + Request Feature

@@ -36,7 +36,7 @@ [![Twitter][twitter-shield]][twitter-url] [![Youtube][youtube-shield]][youtube-url] [![languages][language-python-shiedl]][issues-url] -[![CITest][CITest-shield]][CITest-url] + [![Issues][issues-shield]][issues-url] [![MIT License][license-shield]][license-url] @@ -81,7 +81,9 @@ EarthDaily Agro is the agricultural analysis division of EartDaily Analytics. Le

-Throught our platform, we make geospatial analytics easily accessible for you to be browsed or analyzed, within our cloud or within your own environment. We provide developers and data scientists both flexibility and extensibility with analytic ready data and digital agriculture ready development blocks. We empower your team to enrich your systems with information at the field, regional or continent level via our API or Apps. +

+Throught our <geosys/> platform, we make geospatial analytics easily accessible for you to be browsed or analyzed, within our cloud or within your own environment. We provide developers and data scientists both flexibility and extensibility with analytic ready data and digital agriculture ready development blocks. We empower your team to enrich your systems with information at the field, regional or continent level via our API or Apps. +

We have a team of experts around the world that understand local crops and ag industry, as well as advanced analytics to support your business. @@ -100,7 +102,7 @@ The `geosyspy` python package aims to provide an easy and ready to use library a * Analytic publication: * Save and retrieve custom data in Analytics Fabrik -See [Examples](examples.ipynb) notebook for more information +See [documentation](https://earthdaily.github.io/GeosysPy/) and [Examples](examples.ipynb) notebook for more information ## Getting started @@ -108,11 +110,20 @@ See [Examples](examples.ipynb) notebook for more information Make sure you have valid credentials. If you need to get trial access, please register [here](https://earthdailyagro.com/geosys-api/#get-started). -This package has been tested on Python 3.9.7. +This package has been tested on Python 3.10.11. ### Installing +#### Conda + +If you are using Conda, there are the steps to follow to create a virtual environment: + +``` +conda create --name demo +conda activate demo +``` + #### For Linux / Mac OS ``` pip install geosyspy @@ -147,7 +158,23 @@ API_USERNAME= API_PASSWORD= ``` -3. Run the Jupyter notebook + +3. Install Jupyter notebook [Examples](examples.ipynb) dependencies + +``` +conda install --file requirements-notebook.txt +``` +or +``` +pip install -r requirements-notebook.txt +``` + +4. Set up the Jupyter Notebook kernel +``` +python -m ipykernel install --user --name demo +``` + +5. Run the Jupyter notebook ### Run the package inside a Docker container @@ -167,8 +194,8 @@ or, without .env file : Then : ```python ->>> from geosyspy.geosys import Geosys ->>> from geosyspy.constants import Collection, Region, Env +>>> from geosyspy import Geosys +>>> from geosyspy.utils.constants import * >>> import os >>> client = Geosys(os.getenv('API_CLIENT_ID'), os.getenv('API_CLIENT_SECRET'), os.getenv('API_USERNAME'), os.getenv('API_PASSWORD'), Env.PREPROD, Region.NA) @@ -181,8 +208,8 @@ Then : Initialize client: ```python -from geosyspy.geosys import Geosys -from geosyspy.constants import Collection, Region, Env +from geosyspy import Geosys +from geosyspy.utils.constants import * client = Geosys("API_CLIENT_ID", "API_CLIENT_SECRET", "API_USERNAME", "API_PASSWORD", Env.PREPROD, Region.NA) @@ -196,9 +223,19 @@ polygon = "POLYGON((...))" today = dt.date.today() year_ago = dt.date.today() + relativedelta(months=-12) -dataframe = client.get_time_series(polygon, year_ago, today, collection=Collection.MODIS, indicators=["NDVI"]) +dataframe = client.get_time_series(polygon, year_ago, today, collection=SatelliteImageryCollection.MODIS, indicators=["NDVI"]) ``` +Use Geosyspy logger + + +````python +import logging + +geosys_logger = logging.getLogger('geosyspy') +geosys_logger.setLevel(logging.DEBUG) +```` + See the Jupyter notebook [Examples](examples.ipynb) for a working example.

(back to top)

@@ -207,7 +244,7 @@ See the Jupyter notebook [Examples](examples.ipynb) for a working example. ## Resources The following links will provide access to more information: - [EarthDaily agro developer portal ](https://developer.geosys.com/) -- +- [Pypi package](https://pypi.org/project/geosyspy/)

(back to top)

@@ -246,7 +283,7 @@ For any additonal information, please [email us](mailto:sales@earthdailyagro.com [forks-url]: https://github.com/github_username/repo/network/members [stars-shield]: https://img.shields.io/github/stars/qgis-plugin/repo.svg?style=plastic&logo=appveyor [stars-url]: https://github.com/github_username/repo/stargazers -[issues-shield]: https://img.shields.io/github/issues/GEOSYS/qgis-plugin/repo.svg?style=social +[issues-shield]: https://img.shields.io/github/issues/GEOSYS/GeosysPy/repo.svg?style=social [issues-url]: https://github.com/github_username/repo/issues [license-shield]: https://img.shields.io/github/license/GEOSYS/qgis-plugin [license-url]: https://www.gnu.org/licenses/gpl-3.0.en.html @@ -260,5 +297,5 @@ For any additonal information, please [email us](mailto:sales@earthdailyagro.com [language-python-url]: https://pypi.org/ [GitStars-shield]: https://img.shields.io/github/stars/GEOSYS?style=social [GitStars-url]: https://img.shields.io/github/stars/GEOSYS?style=social -[CITest-shield]: https://img.shields.io/github/workflow/status/GEOSYS/qgis-plugin/Continous%20Integration -[CITest-url]: https://img.shields.io/github/workflow/status/GEOSYS/qgis-plugin/Continous%20Integration +[CITest-shield]: https://img.shields.io/github/workflow/status/GEOSYS/GeosysPy/Continous%20Integration +[CITest-url]: https://img.shields.io/github/workflow/status/GEOSYS/GeosysPy/Continous%20Integration diff --git a/VERSION.txt b/VERSION.txt index 8294c18..7dff5b8 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1 +1 @@ -0.1.2 \ No newline at end of file +0.2.1 \ No newline at end of file diff --git a/docs/constants-reference.md b/docs/constants-reference.md index e51416e..adf03c7 100644 --- a/docs/constants-reference.md +++ b/docs/constants-reference.md @@ -1,3 +1,3 @@ # Geosys -::: geosyspy.constants \ No newline at end of file +::: geosyspy.utils.constants \ No newline at end of file diff --git a/docs/utils.md b/docs/utils.md new file mode 100644 index 0000000..9e51d67 --- /dev/null +++ b/docs/utils.md @@ -0,0 +1,6 @@ +# Utils + +::: geosyspy.utils.constants +::: geosyspy.utils.helper +::: geosyspy.utils.http_client +::: geosyspy.utils.oauth2_client \ No newline at end of file diff --git a/examples.ipynb b/examples.ipynb index 045cd6e..89b5948 100644 --- a/examples.ipynb +++ b/examples.ipynb @@ -12,11 +12,10 @@ "import datetime as dt\n", "from dateutil.relativedelta import relativedelta\n", "import logging\n", - "from geosyspy.constants import Collection, Region, Env\n", + "from geosyspy.utils.constants import *\n", "\n", - "\n", - "logger = logging.getLogger()\n", - "logger.setLevel(logging.INFO)\n", + "logger = logging.getLogger('geosyspy')\n", + "logger.setLevel(logging.DEBUG)\n", "\n", "# read .env file\n", "load_dotenv()\n", @@ -26,11 +25,14 @@ "API_USERNAME = os.getenv('API_USERNAME')\n", "API_PASSWORD = os.getenv('API_PASSWORD')\n", "\n", - "client = Geosys(API_CLIENT_ID, API_CLIENT_SECRET, API_USERNAME, API_PASSWORD, Env.PREPROD, Region.NA)\n", + "client = Geosys(API_CLIENT_ID, API_CLIENT_SECRET, API_USERNAME, API_PASSWORD, Env.PROD, Region.NA)\n", "\n", "polygon = \"POLYGON((-91.17523978603823 40.29787117039518,-91.17577285022956 40.29199489606421,-91.167613719932 40.29199489606421,-91.1673028670095 40.29867040193312,-91.17523978603823 40.29787117039518))\"\n", "today = dt.date.today()\n", - "year_ago = dt.date.today() + relativedelta(months=-12)" + "year_ago = dt.date.today() + relativedelta(months=-12)\n", + "\n", + "# available crop codes of the connected user\n", + "crops = client.get_available_crops()\n" ] }, { @@ -40,7 +42,7 @@ "outputs": [], "source": [ "# Get aggregated NDVI time series\n", - "client.get_time_series(polygon, year_ago, today, collection=Collection.MODIS, indicators=[\"NDVI\"])" + "client.get_time_series(polygon, year_ago, today, collection=SatelliteImageryCollection.MODIS, indicators=[\"NDVI\"])" ] }, { @@ -50,7 +52,7 @@ "outputs": [], "source": [ "# Get aggregated EVI time series\n", - "client.get_time_series(polygon, year_ago, today, collection=Collection.MODIS, indicators=[\"EVI\"])" + "client.get_time_series(polygon, year_ago, today, collection=SatelliteImageryCollection.MODIS, indicators=[\"EVI\"])" ] }, { @@ -62,7 +64,7 @@ "# Get aggregated 'Forecast daily' time series\n", "indicators = ['Precipitation', 'Temperature','Date']\n", "point = \"POINT (0.0872845021171696 43.69457564315705)\"\n", - "client.get_time_series(point, dt.date.today(), dt.date.today() + relativedelta(days=+5), collection=Collection.WEATHER_FORECAST_DAILY, indicators=indicators)" + "client.get_time_series(point, dt.date.today(), dt.date.today() + relativedelta(days=+5), collection=WeatherTypeCollection.WEATHER_FORECAST_DAILY, indicators=indicators)" ] }, { @@ -74,7 +76,7 @@ "# Get aggregated 'Forecast hourly' time series\n", "indicators = ['Precipitation', 'Temperature']\n", "point = \"POINT (0.0872845021171696 43.69457564315705)\"\n", - "client.get_time_series(point, dt.date.today(), dt.date.today() + relativedelta(days=+2), collection=Collection.WEATHER_FORECAST_HOURLY, indicators=indicators)" + "client.get_time_series(point, dt.date.today(), dt.date.today() + relativedelta(days=+2), collection=WeatherTypeCollection.WEATHER_FORECAST_HOURLY, indicators=indicators)" ] }, { @@ -87,7 +89,7 @@ "indicators = ['Precipitation', 'Temperature']\n", "start_date = dt.datetime.strptime(\"2022-01-01\", \"%Y-%m-%d\")\n", "end_date = dt.datetime.strptime(\"2022-02-01\", \"%Y-%m-%d\")\n", - "client.get_time_series(polygon, start_date, end_date, collection=Collection.WEATHER_HISTORICAL_DAILY, indicators=indicators)" + "client.get_time_series(polygon, start_date, end_date, collection=WeatherTypeCollection.WEATHER_HISTORICAL_DAILY, indicators=indicators)" ] }, { @@ -97,20 +99,111 @@ "outputs": [], "source": [ "# Get satellite image time series for Modis NDVI\n", - "client.get_satellite_image_time_series(polygon, year_ago, today, collections=[Collection.MODIS], indicators=[\"NDVI\"])" + "client.get_satellite_image_time_series(polygon, year_ago, today, collections=[SatelliteImageryCollection.MODIS], indicators=[\"NDVI\"])" ] }, { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "scrolled": false + }, "outputs": [], "source": [ "# Get satellite image time series for LANDSAT_8 and SENTINEL_2 Reflectance\n", - "time_series_xarr = client.get_satellite_image_time_series(polygon, year_ago, today, collections=[Collection.SENTINEL_2, Collection.LANDSAT_8], indicators=[\"Reflectance\"])\n", + "time_series_xarr = client.get_satellite_image_time_series(polygon, year_ago, today, collections=[SatelliteImageryCollection.SENTINEL_2, SatelliteImageryCollection.LANDSAT_8], indicators=[\"Reflectance\"])\n", "time_series_xarr\n" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "\n", + "import xarray as xr\n", + "# Get satellite image time series for LANDSAT_8 and SENTINEL_2 NDVI \n", + "# list of available indicators: Reflectance, NDVI, EVI, GNDVI, NDWI, CVI, CVIn, LAI\n", + "ndvi_time_series_xarr = client.get_satellite_image_time_series(polygon, year_ago, today, collections=[SatelliteImageryCollection.SENTINEL_2, SatelliteImageryCollection.LANDSAT_8], indicators=[\"ndvi\"])\n", + "\n", + "ndvi_time_series_xarr\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "lai_time_series_xarr = client.get_satellite_image_time_series(polygon, year_ago, today, collections=[SatelliteImageryCollection.SENTINEL_2, SatelliteImageryCollection.LANDSAT_8], indicators=[\"NDWI\"])\n", + "lai_time_series_xarr" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "pip install zarr\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "if ndvi_time_series_xarr.coords == lai_time_series_xarr.coords:\n", + " print(\"Les dimensions sont identiques.\")\n", + "else:\n", + " print(\"Les dimensions ne sont pas identiques.\")\n", + " print(ndvi_time_series_xarr.coords)\n", + " print(lai_time_series_xarr.coords)\n", + "\n", + "\n", + "datacube = xr.merge([ndvi_time_series_xarr, lai_time_series_xarr])\n", + "\n", + "datacube.to_zarr(\"result.zarr\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Display cumulative NDVI from last result\n", + "\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "polygon_ndvi_ds = ndvi_time_series_xarr['ndvi'].sortby('time')\n", + "time_coords = polygon_ndvi_ds['time']\n", + "\n", + "# exclude Nan values to caluculate mean\n", + "masked_dataarray = polygon_ndvi_ds.where(~np.isnan(polygon_ndvi_ds))\n", + "\n", + "# NDVI mean calculattion\n", + "mean_ndvi = masked_dataarray.mean(dim=['x', 'y'])\n", + "\n", + "# Cumulative NDVI calculation \n", + "polygon_cumul_ndvi = mean_ndvi.cumsum(dim='time')\n", + "polygon_cumul_ndvi \n", + "\n", + "# build & display cumlative Ndvi graph\n", + "plt.plot(time_coords, polygon_cumul_ndvi)\n", + "plt.xlabel('Time')\n", + "plt.ylabel('NDVI Cumul')\n", + "plt.title('NVDI Cumul by date')\n", + "plt.show()" + ] + }, { "cell_type": "code", "execution_count": null, @@ -128,7 +221,7 @@ "outputs": [], "source": [ "# Get coverage for the polygon\n", - "coverage_info_df, images_references = client.get_satellite_coverage_image_references(polygon, year_ago, today, collections=[Collection.SENTINEL_2, Collection.LANDSAT_8, Collection.LANDSAT_9])\n", + "coverage_info_df, images_references = client.get_satellite_coverage_image_references(polygon, year_ago, today, collections=[SatelliteImageryCollection.SENTINEL_2, SatelliteImageryCollection.LANDSAT_8, SatelliteImageryCollection.LANDSAT_9])\n", "coverage_info_df" ] }, @@ -148,7 +241,7 @@ "outputs": [], "source": [ "# Download and save a specific image\n", - "client.download_image(images_references[('2021-11-11', 'LANDSAT_8')])\n" + "client.download_image(images_references[('2023-05-03', 'SENTINEL_2')])\n" ] }, { @@ -189,7 +282,7 @@ "# Get time serie\n", "start_date = dt.datetime.strptime(\"2018-12-30\", \"%Y-%m-%d\")\n", "end_date = dt.datetime.strptime(\"2019-12-31\", \"%Y-%m-%d\")\n", - "df = client.get_time_series(polygon, start_date, end_date, collection=Collection.MODIS, indicators=[\"NDVI\"])\n", + "df = client.get_time_series(polygon, start_date, end_date, collection=SatelliteImageryCollection.MODIS, indicators=[\"NDVI\"])\n", "df.head()" ] }, @@ -234,16 +327,334 @@ "end_date = dt.datetime.strptime(\"2022-04-01\", \"%Y-%m-%d\")\n", "client.get_metrics(polygon, schema_id, start_date, end_date)" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "start_date=\"2020-10-09\"\n", + "end_date=\"2022-10-09\"\n", + "sensors=[\"Sentinel_2\", \"Landsat_8\"]\n", + "denoiser=True\n", + "smoother=\"ww\"\n", + "eoc=True\n", + "aggregation=\"mean\"\n", + "index=\"ndvi\"\n", + "raw_data=True\n", + "str_polygon=\"POLYGON ((-0.49881816 46.27330504, -0.49231649 46.27320122, -0.49611449 46.26983426, -0.49821735 46.27094671, -0.49881816 46.27330504))\"\n", + "\n", + "str_s3_path = client.get_mr_time_series(str_polygon, start_date, end_date, sensors, denoiser, smoother, eoc, aggregation, index, raw_data)\n", + "str_s3_path" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "str_polygon=\"POLYGON ((-0.49881816 46.27330504, -0.49231649 46.27320122, -0.49611449 46.26983426, -0.49821735 46.27094671, -0.49881816 46.27330504))\"\n", + "\n", + "str_s3_path = client.get_mr_time_series(str_polygon)\n", + "str_s3_path" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from notebook_utils import *\n", + "\n", + "# read MRTS outputs from AWS and plot result\n", + "dict_mrts = read_mrts_from_awsS3(str_s3_path)\n", + "plot_mrts_dict(dict_mrts)\n", + "\n", + "### others useful functions\n", + "# plot_mrts_from_aws(str_s3_path) : plot MRTS outputs from AWS\n", + "# download MRTS outputs from AWS and read outputs downloaded : download_s3_files(str_s3_path), read_mrts_data(str_downloaded_path)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## AGRIQUEST COMPUTATION" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Generate a panda data frame from Agriquest Weather Data:\n", + "# on all AMU of o block\n", + "# on a specific period\n", + "# for a specific weather indicator\n", + "aq_weather_data_frame = client.get_agriquest_weather_block_data(start_date=\"2022-06-01\",\n", + " end_date=\"2023-06-10\",\n", + " block_code=AgriquestBlocks.AMU_NORTH_AMERICA,\n", + " weather_type=AgriquestWeatherType.AVERAGE_TEMPERATURE)\n", + "\n", + "aq_weather_data_frame" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Generate a panda data frame from Agriquest NDVI Data:\n", + "# on all AMU of o block\n", + "# on a specific date\n", + "# for a specific commodity (ALL_VEGETATION or ALL_CROPS)\n", + "\n", + "aq_ndvi_data_frame = client.get_agriquest_ndvi_block_data(day_of_measure=\"2022-06-01\",\n", + " commodity_code=AgriquestCommodityCode.ALL_CROPS, \n", + " block_code=AgriquestBlocks.FRA_DEPARTEMENTS)\n", + "\n", + "aq_ndvi_data_frame" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## ANALYTICS COMPUTATION" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Analytics processor - Historical Harvest\n", + "harvest_historical_analytics = client.get_harvest_analytics(\n", + " season_duration=215,\n", + " season_start_day=1,\n", + " season_start_month=4,\n", + " crop=crops._2ND_CORN,\n", + " year=2021,\n", + " geometry=\"POLYGON ((-56.785919346530768 -21.208154463301554 , -56.79078750820733 -21.206043784434833 , -56.790973809206818 -21.206069651656232 , -56.791373799079636 -21.197107091323097 , -56.785129186971687 -21.196010916846863 , -56.781397554331065 -21.19535575112814 , -56.777108478217059 -21.202038412606473 , -56.778435977920665 -21.211398619037478 , -56.785919346530768 -21.208154463301554))\",\n", + " harvest_type=Harvest.HARVEST_HISTORICAL)\n", + "harvest_historical_analytics\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Analytics processor - Inseason Harvest\n", + "harvest_in_season_analytics = client.get_harvest_analytics(\n", + " season_duration=215,\n", + " season_start_day=1,\n", + " season_start_month=4,\n", + " crop=crops._2ND_CORN,\n", + " year=2021,\n", + " geometry=\"POLYGON ((-56.785919346530768 -21.208154463301554 , -56.79078750820733 -21.206043784434833 , -56.790973809206818 -21.206069651656232 , -56.791373799079636 -21.197107091323097 , -56.785129186971687 -21.196010916846863 , -56.781397554331065 -21.19535575112814 , -56.777108478217059 -21.202038412606473 , -56.778435977920665 -21.211398619037478 , -56.785919346530768 -21.208154463301554))\",\n", + " harvest_type=Harvest.HARVEST_IN_SEASON)\n", + "\n", + "harvest_in_season_analytics\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Analytics processor - Inseason Emergence\n", + "emergence_in_season_analytics = client.get_emergence_analytics(\n", + " season_duration=215,\n", + " season_start_day=1,\n", + " season_start_month=4,\n", + " crop=crops._2ND_CORN,\n", + " year=2021,\n", + " geometry=\"POLYGON ((-56.785919346530768 -21.208154463301554 , -56.79078750820733 -21.206043784434833 , -56.790973809206818 -21.206069651656232 , -56.791373799079636 -21.197107091323097 , -56.785129186971687 -21.196010916846863 , -56.781397554331065 -21.19535575112814 , -56.777108478217059 -21.202038412606473 , -56.778435977920665 -21.211398619037478 , -56.785919346530768 -21.208154463301554))\",\n", + " emergence_type=Emergence.EMERGENCE_IN_SEASON)\n", + "\n", + "emergence_in_season_analytics\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Analytics processor - Historical Emergence\n", + "emergence_historical_analytics = client.get_emergence_analytics(\n", + " season_duration=215,\n", + " season_start_day=1,\n", + " season_start_month=4,\n", + " crop=crops._2ND_CORN,\n", + " year=2021,\n", + " geometry=\"POLYGON ((-56.785919346530768 -21.208154463301554 , -56.79078750820733 -21.206043784434833 , -56.790973809206818 -21.206069651656232 , -56.791373799079636 -21.197107091323097 , -56.785129186971687 -21.196010916846863 , -56.781397554331065 -21.19535575112814 , -56.777108478217059 -21.202038412606473 , -56.778435977920665 -21.211398619037478 , -56.785919346530768 -21.208154463301554))\",\n", + " emergence_type=Emergence.EMERGENCE_HISTORICAL)\n", + "\n", + "emergence_historical_analytics\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Analytics processor - Emergence Delay\n", + "emergence_delay_analytics = client.get_emergence_analytics(\n", + " season_duration=215,\n", + " season_start_day=1,\n", + " season_start_month=4,\n", + " crop=crops.CORN,\n", + " year=2021,\n", + " geometry=\"POLYGON ((-56.785919346530768 -21.208154463301554 , -56.79078750820733 -21.206043784434833 , -56.790973809206818 -21.206069651656232 , -56.791373799079636 -21.197107091323097 , -56.785129186971687 -21.196010916846863 , -56.781397554331065 -21.19535575112814 , -56.777108478217059 -21.202038412606473 , -56.778435977920665 -21.211398619037478 , -56.785919346530768 -21.208154463301554))\",\n", + " emergence_type=Emergence.EMERGENCE_DELAY)\n", + "\n", + "emergence_delay_analytics\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Analytics processor - Potential Score\n", + "potential_score_analytics = client.get_potential_score_analytics(\n", + " end_date = \"2022-03-06\",\n", + " nb_historical_years = 5,\n", + " season_duration = 200, \n", + " season_start_day = 1, \n", + " season_start_month = 10, \n", + " crop = crops.CORN,\n", + " sowing_date = \"2021-10-01\",\n", + " geometry=\"POLYGON ((-54.26027778 -25.38777778, -54.26027778 -25.37444444, -54.26 -25.37416667, -54.25972222 -25.37444444, -54.25944444 -25.37444444, -54.25888889 -25.37472222, -54.258611110000004 -25.37472222, -54.25888889 -25.375, -54.25888889 -25.37555555, -54.258611110000004 -25.37611111, -54.258611110000004 -25.38194444, -54.25833333 -25.38416667, -54.25694444 -25.38361111, -54.25694444 -25.38416667, -54.2575 -25.38416667, -54.2575 -25.38444444, -54.25777778 -25.38416667, -54.25807016 -25.384158120000002, -54.25805556 -25.38444444, -54.258077300000004 -25.38472206, -54.2575 -25.38527778, -54.25694444 -25.385, -54.256388890000004 -25.38361111, -54.25472222 -25.38305555, -54.25472222 -25.3825, -54.254166670000004 -25.38194444, -54.25444444 -25.38166667, -54.25472222 -25.38166667, -54.25472222 -25.37944444, -54.25277778 -25.37944444, -54.25277778 -25.38583333, -54.25419223 -25.3861539, -54.2539067 -25.38589216, -54.25388889 -25.385, -54.25444444 -25.38555555, -54.2547871 -25.385820770000002, -54.25472222 -25.38611111, -54.26027778 -25.38777778))\"\n", + ")\n", + "\n", + "potential_score_analytics" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Analytics processor - Greenness\n", + "greenness_analytics = client.get_greenness_analytics(\n", + " start_date =\"2022-01-15\",\n", + " end_date = \"2022-05-31\", \n", + " crop = crops.CORN,\n", + " sowing_date = \"2022-01-15\",\n", + " # WKT\n", + " geometry=\"POLYGON ((-54.26027778 -25.38777778, -54.26027778 -25.37444444, -54.26 -25.37416667, -54.25972222 -25.37444444, -54.25944444 -25.37444444, -54.25888889 -25.37472222, -54.258611110000004 -25.37472222, -54.25888889 -25.375, -54.25888889 -25.37555555, -54.258611110000004 -25.37611111, -54.258611110000004 -25.38194444, -54.25833333 -25.38416667, -54.25694444 -25.38361111, -54.25694444 -25.38416667, -54.2575 -25.38416667, -54.2575 -25.38444444, -54.25777778 -25.38416667, -54.25807016 -25.384158120000002, -54.25805556 -25.38444444, -54.258077300000004 -25.38472206, -54.2575 -25.38527778, -54.25694444 -25.385, -54.256388890000004 -25.38361111, -54.25472222 -25.38305555, -54.25472222 -25.3825, -54.254166670000004 -25.38194444, -54.25444444 -25.38166667, -54.25472222 -25.38166667, -54.25472222 -25.37944444, -54.25277778 -25.37944444, -54.25277778 -25.38583333, -54.25419223 -25.3861539, -54.2539067 -25.38589216, -54.25388889 -25.385, -54.25444444 -25.38555555, -54.2547871 -25.385820770000002, -54.25472222 -25.38611111, -54.26027778 -25.38777778))\"\n", + " # GeoJson\n", + " #geometry='{\"type\": \"Polygon\",\"coordinates\": [[[ -54.260277780000003, -25.387777780000000 ],[ -54.260277780000003, -25.374444440000001 ],[ -54.259999999999998, -25.374166670000001 ],[ -54.259722220000000, -25.374444440000001 ],[ -54.259444440000003, -25.374444440000001 ],[ -54.258888890000001, -25.374722219999999 ],[ -54.258611110000004, -25.374722219999999 ],[ -54.258888890000001, -25.375000000000000 ],[ -54.258888890000001, -25.375555550000001 ],[ -54.258611110000004, -25.376111110000000 ],[ -54.258611110000004, -25.381944440000002 ],[ -54.258333329999999, -25.384166669999999 ],[ -54.256944439999998, -25.383611110000000 ],[ -54.256944439999998, -25.384166669999999 ],[ -54.257500000000000, -25.384166669999999 ],[ -54.257500000000000, -25.384444439999999 ],[ -54.257777779999998, -25.384166669999999 ],[ -54.258070160000003, -25.384158120000002 ],[ -54.258055560000003, -25.384444439999999 ],[ -54.258077300000004, -25.384722060000001 ],[ -54.257500000000000, -25.385277779999999 ],[ -54.256944439999998, -25.385000000000002 ],[ -54.256388890000004, -25.383611110000000 ],[ -54.254722219999998, -25.383055550000002 ],[ -54.254722219999998, -25.382500000000000 ],[ -54.254166670000004, -25.381944440000002 ],[ -54.254444440000000, -25.381666670000001 ],[ -54.254722219999998, -25.381666670000001 ],[ -54.254722219999998, -25.379444440000000 ],[ -54.252777780000002, -25.379444440000000 ],[ -54.252777780000002, -25.385833330000001 ],[ -54.254192230000001, -25.386153900000000 ],[ -54.253906700000002, -25.385892160000001 ],[ -54.253888889999999, -25.385000000000002 ],[ -54.254444440000000, -25.385555549999999 ],[ -54.254787100000001, -25.385820770000002 ],[ -54.254722219999998, -25.386111110000002 ],[ -54.260277780000003, -25.387777780000000 ]]]}',\n", + ")\n", + "\n", + "greenness_analytics" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Analytics processor - Harvest Readiness\n", + "harvest_readiness_analytics = client.get_harvest_readiness_analytics(\n", + " start_date =\"2022-01-15\",\n", + " end_date = \"2022-05-31\", \n", + " crop = crops.CORN,\n", + " sowing_date = \"2022-01-15\",\n", + " geometry=\"POLYGON ((-54.26027778 -25.38777778, -54.26027778 -25.37444444, -54.26 -25.37416667, -54.25972222 -25.37444444, -54.25944444 -25.37444444, -54.25888889 -25.37472222, -54.258611110000004 -25.37472222, -54.25888889 -25.375, -54.25888889 -25.37555555, -54.258611110000004 -25.37611111, -54.258611110000004 -25.38194444, -54.25833333 -25.38416667, -54.25694444 -25.38361111, -54.25694444 -25.38416667, -54.2575 -25.38416667, -54.2575 -25.38444444, -54.25777778 -25.38416667, -54.25807016 -25.384158120000002, -54.25805556 -25.38444444, -54.258077300000004 -25.38472206, -54.2575 -25.38527778, -54.25694444 -25.385, -54.256388890000004 -25.38361111, -54.25472222 -25.38305555, -54.25472222 -25.3825, -54.254166670000004 -25.38194444, -54.25444444 -25.38166667, -54.25472222 -25.38166667, -54.25472222 -25.37944444, -54.25277778 -25.37944444, -54.25277778 -25.38583333, -54.25419223 -25.3861539, -54.2539067 -25.38589216, -54.25388889 -25.385, -54.25444444 -25.38555555, -54.2547871 -25.385820770000002, -54.25472222 -25.38611111, -54.26027778 -25.38777778))\"\n", + ")\n", + "\n", + "harvest_readiness_analytics" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Analytics processor - Planted area\n", + "planted_area_analytics = client.get_planted_area_analytics(\n", + " start_date =\"2022-01-15\",\n", + " end_date = \"2022-05-31\", \n", + " geometry=\"POLYGON ((-54.26027778 -25.38777778, -54.26027778 -25.37444444, -54.26 -25.37416667, -54.25972222 -25.37444444, -54.25944444 -25.37444444, -54.25888889 -25.37472222, -54.258611110000004 -25.37472222, -54.25888889 -25.375, -54.25888889 -25.37555555, -54.258611110000004 -25.37611111, -54.258611110000004 -25.38194444, -54.25833333 -25.38416667, -54.25694444 -25.38361111, -54.25694444 -25.38416667, -54.2575 -25.38416667, -54.2575 -25.38444444, -54.25777778 -25.38416667, -54.25807016 -25.384158120000002, -54.25805556 -25.38444444, -54.258077300000004 -25.38472206, -54.2575 -25.38527778, -54.25694444 -25.385, -54.256388890000004 -25.38361111, -54.25472222 -25.38305555, -54.25472222 -25.3825, -54.254166670000004 -25.38194444, -54.25444444 -25.38166667, -54.25472222 -25.38166667, -54.25472222 -25.37944444, -54.25277778 -25.37944444, -54.25277778 -25.38583333, -54.25419223 -25.3861539, -54.2539067 -25.38589216, -54.25388889 -25.385, -54.25444444 -25.38555555, -54.2547871 -25.385820770000002, -54.25472222 -25.38611111, -54.26027778 -25.38777778))\"\n", + ")\n", + "\n", + "planted_area_analytics" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Analytics processor - zarc\n", + "zarc_analytics = client.get_zarc_analytics(\n", + " start_date_emergence= \"2022-01-15\",\n", + " end_date_emergence = \"2022-05-31\",\n", + " nb_days_sowing_emergence = 20,\n", + " crop =crops.CORN, \n", + " soil_type = ZarcSoilType.NONE,\n", + " cycle = ZarcCycleType.NONE, \n", + " geometry=\"POLYGON ((-54.26027778 -25.38777778, -54.26027778 -25.37444444, -54.26 -25.37416667, -54.25972222 -25.37444444, -54.25944444 -25.37444444, -54.25888889 -25.37472222, -54.258611110000004 -25.37472222, -54.25888889 -25.375, -54.25888889 -25.37555555, -54.258611110000004 -25.37611111, -54.258611110000004 -25.38194444, -54.25833333 -25.38416667, -54.25694444 -25.38361111, -54.25694444 -25.38416667, -54.2575 -25.38416667, -54.2575 -25.38444444, -54.25777778 -25.38416667, -54.25807016 -25.384158120000002, -54.25805556 -25.38444444, -54.258077300000004 -25.38472206, -54.2575 -25.38527778, -54.25694444 -25.385, -54.256388890000004 -25.38361111, -54.25472222 -25.38305555, -54.25472222 -25.3825, -54.254166670000004 -25.38194444, -54.25444444 -25.38166667, -54.25472222 -25.38166667, -54.25472222 -25.37944444, -54.25277778 -25.37944444, -54.25277778 -25.38583333, -54.25419223 -25.3861539, -54.2539067 -25.38589216, -54.25388889 -25.385, -54.25444444 -25.38555555, -54.2547871 -25.385820770000002, -54.25472222 -25.38611111, -54.26027778 -25.38777778))\"\n", + ")\n", + "\n", + "zarc_analytics" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Analytics processor - crop id\n", + "brazil_crop_id_analytics = client.get_brazil_crop_id_analytics(\n", + " start_date =\"2020-10-01\",\n", + " end_date = \"2021-05-31\", \n", + " season = CropIdSeason.SEASON_1,\n", + " geometry=\"POLYGON ((-54.26027778 -25.38777778, -54.26027778 -25.37444444, -54.26 -25.37416667, -54.25972222 -25.37444444, -54.25944444 -25.37444444, -54.25888889 -25.37472222, -54.258611110000004 -25.37472222, -54.25888889 -25.375, -54.25888889 -25.37555555, -54.258611110000004 -25.37611111, -54.258611110000004 -25.38194444, -54.25833333 -25.38416667, -54.25694444 -25.38361111, -54.25694444 -25.38416667, -54.2575 -25.38416667, -54.2575 -25.38444444, -54.25777778 -25.38416667, -54.25807016 -25.384158120000002, -54.25805556 -25.38444444, -54.258077300000004 -25.38472206, -54.2575 -25.38527778, -54.25694444 -25.385, -54.256388890000004 -25.38361111, -54.25472222 -25.38305555, -54.25472222 -25.3825, -54.254166670000004 -25.38194444, -54.25444444 -25.38166667, -54.25472222 -25.38166667, -54.25472222 -25.37944444, -54.25277778 -25.37944444, -54.25277778 -25.38583333, -54.25419223 -25.3861539, -54.2539067 -25.38589216, -54.25388889 -25.385, -54.25444444 -25.38555555, -54.2547871 -25.385820770000002, -54.25472222 -25.38611111, -54.26027778 -25.38777778))\"\n", + ")\n", + "\n", + "brazil_crop_id_analytics" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "# Display probability by crop value from last zarc analytics result\n", + "data_dict = eval(brazil_crop_id_analytics.values[0][1])\n", + "df_new = pd.DataFrame.from_records([data_dict])\n", + "df_new\n" + ] } ], "metadata": { - "interpreter": { - "hash": "0372a3937da5da54a3bfdd53fff2df272fc2d59026be775ab1768d4a942ca61a" - }, "kernelspec": { - "display_name": "Python 3.9.7 ('agp')", + "display_name": "geosyspy_0.2.0", "language": "python", - "name": "python3" + "name": "geosyspy_0.2.0" }, "language_info": { "codemirror_mode": { @@ -255,9 +666,13 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.4" + "version": "3.11.4" }, - "orig_nbformat": 4 + "vscode": { + "interpreter": { + "hash": "343b2e8ed5eaa23bb5713879a0aa346059bcae91e4280657563d238a2165b641" + } + } }, "nbformat": 4, "nbformat_minor": 2 diff --git a/geosyspy/__init__.py b/geosyspy/__init__.py index 198f2d9..856cc83 100644 --- a/geosyspy/__init__.py +++ b/geosyspy/__init__.py @@ -1 +1,4 @@ from .geosys import Geosys +from .utils.logging_config import configure_logging + +configure_logging() diff --git a/geosyspy/constants.py b/geosyspy/constants.py deleted file mode 100644 index 991bc41..0000000 --- a/geosyspy/constants.py +++ /dev/null @@ -1,30 +0,0 @@ -from enum import Enum - - -class Collection(Enum): - """ - Available imagery and weather collections - """ - MODIS = "MODIS" - SENTINEL_2 = "SENTINEL_2" - LANDSAT_8 = "LANDSAT_8" - LANDSAT_9 = "LANDSAT_9" - WEATHER_FORECAST_DAILY = "WEATHER.FORECAST_DAILY" - WEATHER_FORECAST_HOURLY = "WEATHER.FORECAST_HOURLY" - WEATHER_HISTORICAL_DAILY = "WEATHER.HISTORICAL_DAILY" - - -class Env(Enum): - """ - Environment to target (PROD, PREPROD) - """ - PROD = "prod" - PREPROD = "preprod" - - -class Region(Enum): - """ - Region to target (NA, EU) - """ - NA = "na" - EU = "eu" diff --git a/geosyspy/geosys.py b/geosyspy/geosys.py index 052bc0a..ab15c2f 100644 --- a/geosyspy/geosys.py +++ b/geosyspy/geosys.py @@ -1,41 +1,22 @@ -from oauthlib.oauth2 import LegacyApplicationClient -from requests_oauthlib import OAuth2Session -from oauthlib.oauth2 import TokenExpiredError -import json -import re -from urllib.parse import urljoin -import pandas as pd -from . import platforms -import logging import io import zipfile -from rasterio.io import MemoryFile -from shapely import wkt from pathlib import Path -from . import image_reference -import xarray as xr -import rasterio -import numpy as np -from .constants import Collection +import numpy as np +import rasterio +import xarray as xr +from rasterio.io import MemoryFile -def renew_access_token(func): - """Decorator used to wrap the Geosys class's http methods. - - This decorator wraps the geosys http methods (get,post...) and checks - wether the used token is still valid or not. If not, it fetches a new token and - uses it to make another request. - - """ - - def wrapper(self, *args, **kwargs): - try: - return func(self, *args, **kwargs) - except TokenExpiredError: - self._Geosys__refresh_token() - return func(self, *args, **kwargs) - - return wrapper +from geosyspy import image_reference +from geosyspy.services.agriquest_service import * +from geosyspy.services.analytics_fabric_service import * +from geosyspy.services.analytics_processor_service import * +from geosyspy.services.gis_service import * +from geosyspy.services.map_product_service import * +from geosyspy.services.master_data_management_service import * +from geosyspy.services.vegetation_time_series_service import * +from geosyspy.services.weather_service import * +from geosyspy.utils.geosys_platform_urls import * class Geosys: @@ -44,212 +25,51 @@ class Geosys: `client = Geosys(api_client_id, api_client_secret, api_username, api_password, env, region)` Parameters: - str_api_client_id (str): The client id - str_api_client_secret (str): The client secret - str_api_username (str): The api username - str_api_password (str): The api user password - enum_env (enum): 'Env.PROD' or 'Env.PREPROD' - enum_region (enum): 'Region.NA' or 'Region.EU' - str_priority_queue (str): 'realtime' or 'bulk' + enum_env: 'Env.PROD' or 'Env.PREPROD' + enum_region: 'Region.NA' + priority_queue: 'realtime' or 'bulk' """ - def __init__( - self, - str_api_client_id, - str_api_client_secret, - str_api_username, - str_api_password, - enum_env, - enum_region, - str_priority_queue="realtime", - ): - """Initializes a Geosys instance with the required credentials - to connect to the GEOSYS API. - """ - self.region = enum_region - self.env = enum_env - self.str_id_server_url = platforms.IDENTITY_URLS[enum_region.value][enum_env.value] - self.base_url = platforms.GEOSYS_API_URLS[enum_region.value][enum_env.value] - self.master_data_management_endpoint = "master-data-management/v6/seasonfields" - self.vts_endpoint = "vegetation-time-series/v1/season-fields" - self.vts_by_pixel_endpoint = "vegetation-time-series/v1/season-fields/pixels" - self.flm_catalog_imagery = ( - "field-level-maps/v4/season-fields/{}/catalog-imagery" - ) - self.flm_coverage = "field-level-maps/v4/season-fields/{}/coverage" - self.weather_endpoint = "Weather/v1/weather" - self.analytics_fabric_endpoint = "analytics/metrics" - self.analytics_fabric_schema_endpoint = "analytics/schemas" - self.str_api_client_id = str_api_client_id - self.str_api_client_secret = str_api_client_secret - self.str_api_username = str_api_username - self.str_api_password = str_api_password - self.token = None - self.priority_queue = str_priority_queue - self.priority_headers = {"bulk": "Geosys_API_Bulk", "realtime": ""} - self.list_collection_lr = [Collection.MODIS] - self.list_collection_mr = [Collection.LANDSAT_8, Collection.LANDSAT_9, Collection.SENTINEL_2] - self.list_collection_weather = [ - Collection.WEATHER_FORECAST_DAILY, - Collection.WEATHER_FORECAST_HOURLY, - Collection.WEATHER_HISTORICAL_DAILY, - ] - self.__authenticate() - - def __authenticate(self): - """Authenticates the client to the API. - - This method connects the user to the API which generates a token that - will be valid for one hour. A refresh token is also generated, which - makes it possible for the http methods wrappers to get a new token - once the previous one is no more valid through the renew_access_token - decorator. This method is only run once when a Geosys object is instantiated. - - """ - - try: - oauth = OAuth2Session( - client=LegacyApplicationClient(client_id=self.str_api_client_id) - ) - self.token = oauth.fetch_token( - token_url=self.str_id_server_url, - username=self.str_api_username, - password=self.str_api_password, - client_id=self.str_api_client_id, - client_secret=self.str_api_client_secret, - ) - self.token["refresh_token"] = oauth.cookies["refresh_token"] - logging.info("Authenticated") - except Exception as e: - logging.error(e) - - def __refresh_token(self): - """Fetches a new token.""" - - client = OAuth2Session(self.str_api_client_id, token=self.token) - self.token = client.refresh_token( - self.str_id_server_url, - client_id=self.str_api_client_id, - client_secret=self.str_api_client_secret, - ) - - def __get_matched_str_from_pattern(self, pattern, text): - """Returns the first occurence of the matched pattern in text. - - Args: - pattern : A string representing the regex pattern to look for. - text : The text to look into. - - Returns: - A string representing the first occurence in text of the pattern. - - """ - p = re.compile(pattern) - return p.findall(text)[0] - - @renew_access_token - def __get(self, url_endpoint, headers={}): - """Gets the url_endpopint. - - Args: - url_endpoint : A string representing the url to get. - - Returns: - A response object. - """ - client = OAuth2Session(self.str_api_client_id, token=self.token) - return client.get(url_endpoint, headers=headers) - - @renew_access_token - def __post(self, url_endpoint, payload, headers={}): - """Posts payload to the url_endpoint. - - Args: - url_endpoint : A string representing the url to post paylaod to. - payload : A python dict representing the payload. - - Returns: - A response object. - """ - client = OAuth2Session(self.str_api_client_id, token=self.token) - return client.post(url_endpoint, json=payload, headers=headers) - - @renew_access_token - def __patch(self, url_endpoint, payload): - """Patchs payload to the url_endpoint. - - Args: - url_endpoint : A string representing the url to patch paylaod to. - payload : A python dict representing the payload. - - Returns: - A response object. - """ - client = OAuth2Session(self.str_api_client_id, token=self.token) - return client.patch(url_endpoint, json=payload) - - def __create_season_field_id(self, polygon): - """Posts the payload below to the master data management endpoint. - - This method returns a season field id. The season field id is required - to request other APIs endpoints. - - Args: - polygon : A string representing a polygon. - - Returns: - A response object. - - """ - payload = { - "Geometry": polygon, - "Crop": {"Id": "CORN"}, - "SowingDate": "2022-01-01", - } - str_mdm_url = urljoin(self.base_url, self.master_data_management_endpoint) - - return self.__post(str_mdm_url, payload) - - def __extract_season_field_id(self, polygon): - """Extracts the season field id from the response object. - - Args: - polygon : A string representing a polygon. - - Returns: - A string rerpesenting the season field id. - - Raises: - ValueError: The response status code is not as expected. - """ - - response = self.__create_season_field_id(polygon) - dict_response = response.json() - - if ( - response.status_code == 400 - and "sowingDate" in dict_response["errors"]["body"] - ): - pattern = r"\sId:\s(\w+)," - str_text = dict_response["errors"]["body"]["sowingDate"][0]["message"] - return self.__get_matched_str_from_pattern(pattern, str_text) - - elif response.status_code == 201: - return dict_response["id"] - else: - raise ValueError( - f"Cannot handle HTTP response : {str(response.status_code)} : {str(response.json())}" - ) - - def get_time_series(self, polygon, start_date, end_date, collection, indicators): + def __init__(self, + client_id: str = None, + client_secret: str = None, + username: str = None, + password: str = None, + enum_env: Env = Env.PROD, + enum_region: Region = Region.NA, + priority_queue: str = "realtime", + bearer_token: str = None + ): + self.logger = logging.getLogger(__name__) + self.region: str = enum_region.value + self.env: str = enum_env.value + self.base_url: str = GEOSYS_API_URLS[enum_region.value][enum_env.value] + self.gis_url: str = GIS_API_URLS[enum_region.value][enum_env.value] + self.priority_queue: str = priority_queue + self.http_client: HttpClient = HttpClient(client_id, client_secret, username, password, enum_env.value, + enum_region.value, bearer_token) + self.__master_data_management_service = MasterDataManagementService(self.base_url, self.http_client) + self.__analytics_fabric_service = AnalyticsFabricService(self.base_url, self.http_client) + self.__analytics_processor_service = AnalyticsProcessorService(self.base_url, self.http_client) + self.__agriquest_service = AgriquestService(self.base_url, self.http_client) + self.__weather_service = WeatherService(self.base_url, self.http_client) + self.__gis_service = GisService(self.gis_url, self.http_client) + self.__vts_service = VegetationTimeSeriesService(self.base_url, self.http_client) + self.__map_product_service = MapProductService(self.base_url, self.http_client, self.priority_queue) + + def get_time_series(self, polygon: str, + start_date: datetime, + end_date: datetime, + collection: enumerate, + indicators: [str]) -> pd.DataFrame: """Retrieve a time series of the indicator for the aggregated polygon on the collection targeted. Args: - polygon (str): The polygon - start_date (datetime): The start date of the time series - end_date (datetime): The end date of the time series - collection (enum): The collection targeted - indicators (str list): The indicators to retrieve on the collection + polygon : The polygon + start_date : The start date of the time series + end_date : The end date of the time series + collection : The collection targeted + indicators : The indicators to retrieve on the collection Returns: (dataframe): A pandas dataframe for the time series @@ -257,277 +77,134 @@ def get_time_series(self, polygon, start_date, end_date, collection, indicators) Raises: ValueError: The collection doesn't exist """ - - if collection in self.list_collection_weather: - return self.__get_weather( + if collection in WeatherTypeCollection: + return self.__weather_service.get_weather( polygon, start_date, end_date, - collection.value.split(".").pop(), + collection, indicators, ) - elif collection in self.list_collection_lr: - return self.__get_modis_time_series( - polygon, start_date, end_date, indicators[0] + elif collection in LR_SATELLITE_COLLECTION: + # extract seasonfield id from geometry + season_field_id: str = self.__master_data_management_service.extract_season_field_id(polygon) + return self.__vts_service.get_modis_time_series( + season_field_id, start_date, end_date, indicators[0] ) else: raise ValueError(f"{collection} collection doesn't exist") - def get_satellite_image_time_series( - self, polygon, start_date, end_date, collections, indicators - ): - """Retrieve a pixel-by-pxel time series of the indicator on the collection targeted. + def get_satellite_image_time_series(self, polygon: str, + start_date: datetime, + end_date: datetime, + collections: list[SatelliteImageryCollection], + indicators: [str] + ): + """Retrieve a pixel-by-pixel time series of the indicator on the collection targeted. Args: - polygon (str): The polygon - start_date (datetime): The start date of the time series - end_date (datetime): The end date of the time series - collections (enum list): The collections targeted - indicators (str list): The indicators to retrieve on the collections + polygon : The polygon + start_date : The start date of the time series + end_date : The end date of the time series + collections : The Satellite Imagery Collection targeted + indicators : The indicators to retrieve on the collections Returns: - ('dataframe or xarray'): Either a pandas dataframe or an xarray for the time series + ('dataframe or xarray'): Either a pandas dataframe or a xarray for the time series """ if not collections: raise ValueError( - "The argument collections is empty. It must be a list of constants.Collection objects" + "The argument collections is empty. It must be a list of SatelliteImageryCollection objects" ) - elif all([isinstance(elem, Collection) for elem in collections]): - if set(collections).issubset(set(self.list_collection_lr)): - return self.__get_time_series_by_pixel( - polygon, start_date, end_date, indicators[0] + elif all([isinstance(elem, SatelliteImageryCollection) for elem in collections]): + # extract seasonfield id from geometry + season_field_id: str = self.__master_data_management_service.extract_season_field_id(polygon) + + if set(collections).issubset(set(LR_SATELLITE_COLLECTION)): + return self.__vts_service.get_time_series_by_pixel( + season_field_id, start_date, end_date, indicators[0] ) - elif set(collections).issubset(set(self.list_collection_mr)): + elif set(collections).issubset(set(MR_SATELLITE_COLLECTION)): return self.__get_images_as_dataset( - polygon, start_date, end_date, collections + season_field_id, start_date, end_date, collections, indicators[0] ) else: raise TypeError( - f"Argument collections must be a list of constants.Collection objects" + f"Argument collections must be a list of SatelliteImageryCollection objects" ) - def __get_modis_time_series(self, polygon, start_date, end_date, indicator): - """Returns a pandas DataFrame. - - This method returns a time series of 'indicator' within the range - 'start_date' -> 'end_date' as a pandas DataFrame : - - | index | value | - - date | indicator | 1 | - __________________________________ - start-date | indicator | 2 | - - ... | ... | ... | - - end-date | indicator | 8 | - - Args: - polygon : A string representing a polygon. - start_date : A datetime object representing the start date of the date interval the user wants to filter on. - end_date : A datetime object representing the final date of the date interval the user wants to filter on. - indicator : A string representing the indicator whose time series the user wants. - - Returns: - df : A Pandas DataFrame containing two columns : index and value, and an index called 'date'. - - """ - logging.info("Calling APIs for aggregated time series") - str_season_field_id = self.__extract_season_field_id(polygon) - str_start_date = start_date.strftime("%Y-%m-%d") - str_end_date = end_date.strftime("%Y-%m-%d") - parameters = f"/values?$offset=0&$limit=9999&$count=false&SeasonField.Id={str_season_field_id}&index={indicator}&$filter=Date >= '{str_start_date}' and Date <= '{str_end_date}'" - str_vts_url = urljoin(self.base_url, self.vts_endpoint + parameters) - - response = self.__get(str_vts_url) - - if response.status_code == 200: - dict_response = response.json() - df = pd.read_json(json.dumps(dict_response)) - df.set_index("date", inplace=True) - return df - else: - logging.info(response.status_code) - - def __get_time_series_by_pixel(self, polygon, start_date, end_date, indicator): - """Returns a pandas DataFrame. - - This method returns a time series of 'indicator' by pixel within the range 'start_date' -> 'end_date' - as well as the pixel's coordinates X,Y in the MODIS's sinusoidal projection as a pandas DataFrame : - - - - | index | value | pixel.id | X | Y | - _______________________________________| - date | indicator | | | | | - ___________________________________________________| - - start-date | indicator | 2 | 1 | | | - - ... | ... | ... | ... | | | - - end-date | indicator | 8 | 1000 | | | - - Args: - polygon : A string representing a polygon. - start_date : A datetime object representing the start date of the date interval the user wants to filter on. - end_date : A datetime object representing the final date of the date interval the user wants to filter on. - indicator : A string representing the indicator whose time series the user wants. - - Returns: - df : A Pandas DataFrame containing five columns : index, value, pixel.id, X, Y and an index called 'date'. - - """ - - logging.info("Calling APIs for time series by the pixel") - str_season_field_id = self.__extract_season_field_id(polygon) - str_start_date = start_date.strftime("%Y-%m-%d") - str_end_date = end_date.strftime("%Y-%m-%d") - parameters = f"/values?$offset=0&$limit=9999&$count=false&SeasonField.Id={str_season_field_id}&index={indicator}&$filter=Date >= '{str_start_date}' and Date <= '{str_end_date}'" - str_vts_url = urljoin(self.base_url, self.vts_by_pixel_endpoint + parameters) - # PSX/PSY : size in meters of one pixel - # MODIS_GRID_LENGTH : theoretical length of the modis grid in meters - # MOIS_GRID_HEIGHT : theoretical height of the modis grid in meters - PSX = 231.65635826 - PSY = -231.65635826 - MODIS_GRID_LENGTH = 4800 * PSX * 36 - MODIS_GRID_HEIGHT = 4800 * PSY * 18 - - response = self.__get(str_vts_url) - - if response.status_code == 200: - df = pd.json_normalize(response.json()) - df.set_index("date", inplace=True) - - # Extracts h, v, i and j from the pixel dataframe - logging.info("Computing X and Y coordinates per pixel... ") - df["h"] = df["pixel.id"].str.extract(r"h(.*)v").astype(int) - df["v"] = df["pixel.id"].str.extract(r"v(.*)i").astype(int) - df["i"] = df["pixel.id"].str.extract(r"i(.*)j").astype(int) - df["j"] = df["pixel.id"].str.extract(r"j(.*)$").astype(int) - - # XUL/YUL : The coordinates of the top left corner of the tile h,v's top left pixel - # X/Y : the coordinates of the top left corner of the i,j pixel - df["XUL"] = (df["h"] + 1) * 4800 * PSX - MODIS_GRID_LENGTH / 2 - df["YUL"] = (df["v"] + 1) * 4800 * PSY + MODIS_GRID_HEIGHT / 2 - df["X"] = df["i"] * PSX + df["XUL"] - df["Y"] = df["j"] * PSY + df["YUL"] - logging.info("Done ! ") - return df[["index", "value", "pixel.id", "X", "Y"]] - else: - logging.info(response.status_code) - - def get_satellite_coverage_image_references( - self, polygon, start_date, end_date, collections=[Collection.SENTINEL_2, Collection.LANDSAT_8] - ): + def get_satellite_coverage_image_references(self, polygon: str, + start_date: datetime, + end_date: datetime, + collections: list[SatelliteImageryCollection] = [ + SatelliteImageryCollection.SENTINEL_2, + SatelliteImageryCollection.LANDSAT_8] + ) -> tuple: """Retrieves a list of images that covers a polygon on a specific date range. - The return is a tuple: a dataframe with all the images covering the polygon, and - an dictionary images_references. Key= a tuple (image_date, image_sensor). + The return is a tuple: a dataframe with all the images covering the polygon, and + a dictionary images_references. Key= a tuple (image_date, image_sensor). Value = an object image_reference, to use with the method `download_image()` Args: - polygon (str): The polygon - start_date (datetime): The start date of the time series - end_date (datetime): The end date of the time series - sensors (str list): The sensors to check the coverage on + polygon: The polygon + start_date: The start date of the time series + end_date: The end date of the time series + collections: The sensors to check the coverage on Returns: (tuple): images list and image references for downloading """ + # extract seasonfield id from geometry + season_field_id: str = self.__master_data_management_service.extract_season_field_id(polygon) - df = self.__get_satellite_coverage(polygon, start_date, end_date, collections) + df = self.__map_product_service.get_satellite_coverage(season_field_id, start_date, end_date, "", collections) images_references = {} - - for i, image in df.iterrows(): - images_references[ - (image["image.date"], image["image.sensor"]) - ] = image_reference.ImageReference( - image["image.id"], - image["image.date"], - image["image.sensor"], - image["seasonField.id"], - ) + if df is not None: + for i, image in df.iterrows(): + images_references[ + (image["image.date"], image["image.sensor"]) + ] = image_reference.ImageReference( + image["image.id"], + image["image.date"], + image["image.sensor"], + image["seasonField.id"], + ) return df, images_references - def __get_satellite_coverage( - self, polygon, start_date, end_date, sensors=[Collection.SENTINEL_2, Collection.LANDSAT_8] - ): - logging.info("Calling APIs for coverage") - str_season_field_id = self.__extract_season_field_id(polygon) - str_start_date = start_date.strftime("%Y-%m-%d") - str_end_date = end_date.strftime("%Y-%m-%d") - sensors = [elem.value for elem in sensors] - parameters = f"?maps.type=INSEASON_NDVI&Image.Sensor=$in:{'|'.join(sensors)}&CoverageType=CLEAR&$limit=9999&$filter=Image.Date >= '{str_start_date}' and Image.Date <= '{str_end_date}'" - - str_flm_url = urljoin( - self.base_url, - self.flm_catalog_imagery.format(str_season_field_id) + parameters, - ) - response = self.__get( - str_flm_url, - {"X-Geosys-Task-Code": self.priority_headers[self.priority_queue]}, - ) - - if response.status_code == 200: - df = pd.json_normalize(response.json()) - if df.empty: - return df - else: - return df[ - [ - "coverageType", - "image.id", - "image.availableBands", - "image.sensor", - "image.soilMaterial", - "image.spatialResolution", - "image.weather", - "image.date", - "seasonField.id", - ] - ] - else: - logging.info(response.status_code) - - def __get_zipped_tiff(self, field_id, image_id): - parameters = f"/{image_id}/reflectance-map/TOC/image.tiff.zip" - download_tiff_url = urljoin( - self.base_url, self.flm_coverage.format(field_id) + parameters - ) - - response_zipped_tiff = self.__get( - download_tiff_url, - {"X-Geosys-Task-Code": self.priority_headers[self.priority_queue]}, - ) - return response_zipped_tiff - - def download_image(self, image_reference, str_path=""): + def download_image(self, image_reference, + path: str = ""): """Downloads a satellite image locally Args: image_reference (ImageReference): An ImageReference object representing the image to download - str_path (str): the path to download the image to + path (str): the path to download the image to """ - response_zipped_tiff = self.__get_zipped_tiff( + + response_zipped_tiff = self.__map_product_service.get_zipped_tiff( image_reference.season_field_id, image_reference.image_id ) - if str_path == "": - str_path = Path.cwd() / f"image_{image_reference.image_id}_tiff.zip" - with open(str_path, "wb") as f: - logging.info(f"writing to {str_path}") + if path == "": + path = Path.cwd() / f"image_{image_reference.image_id}_tiff.zip" + with open(path, "wb") as f: + self.logger.info(f"writing to {path}") f.write(response_zipped_tiff.content) - def __get_images_as_dataset(self, polygon, start_date, end_date, collections): + def __get_images_as_dataset(self, polygon: str, + start_date: datetime, + end_date: datetime, + collections: list[SatelliteImageryCollection], + indicator: str) -> 'np.ndarray[Any , np.dtype[np.float64]]': """Returns all the 'sensors_list' images covering 'polygon' between - 'start_date' and 'end_date' as an xarray dataset. + 'start_date' and 'end_date' as a xarray dataset. Args: polygon : A string representing the polygon that the images will be covering. start_date : The date from which the method will start looking for images. - end_date : The date at which the methd will stop looking images. - sensors_list : A list of the sensors' names as strings. + end_date : The date at which the method will stop looking images. + collections : A list of Satellite Imagery Collection. + indicator : A string representing the indicator whose time series the user wants. Returns: The image's numpy array. @@ -553,8 +230,8 @@ def get_coordinates_by_pixel(raster): # Selects the covering images in the provided date range # and sorts them by resolution, from the highest to the lowest. # Keeps only the first image if two are found on the same date. - df_coverage = self.__get_satellite_coverage( - polygon, start_date, end_date, collections + df_coverage = self.__map_product_service.get_satellite_coverage( + polygon, start_date, end_date, indicator, collections ) # Return empty dataset if no coverage on the polygon between start_date, end_date @@ -572,11 +249,15 @@ def get_coordinates_by_pixel(raster): # for each image id and some additional data (bands, sensor...) dict_archives = {} for i, row in df_coverage.iterrows(): + if indicator.upper() != "REFLECTANCE": + bands = [indicator] + else: + bands = row["image.availableBands"] dict_archives[row["image.id"]] = { - "byte_archive": self.__get_zipped_tiff( - row["seasonField.id"], row["image.id"] + "byte_archive": self.__map_product_service.get_zipped_tiff( + row["seasonField.id"], row["image.id"], indicator ).content, - "bands": row["image.availableBands"], + "bands": bands, "date": row["image.date"], "sensor": row["image.sensor"], } @@ -590,42 +271,39 @@ def get_coordinates_by_pixel(raster): first_img_id = df_coverage.iloc[0]["image.id"] for img_id, dict_data in dict_archives.items(): with zipfile.ZipFile(io.BytesIO(dict_data["byte_archive"]), "r") as archive: - list_files = archive.namelist() - for file in list_files: - list_words = file.split(".") - if list_words[-1] == "tif": - img_in_bytes = archive.read(file) - with MemoryFile(img_in_bytes) as memfile: - with memfile.open() as raster: - dict_coords = get_coordinates_by_pixel(raster) - xarr = xr.DataArray( - raster.read(masked=True), - dims=["band", "y", "x"], - coords={ - "band": dict_data["bands"], - "y": dict_coords["y"], - "x": dict_coords["x"], - "time": dict_data["date"], - }, + images_in_bytes = [archive.read(file) for file in archive.namelist() if file.endswith('.tif')] + for image in images_in_bytes: + with MemoryFile(image) as memfile: + with memfile.open() as raster: + dict_coords = get_coordinates_by_pixel(raster) + xarr = xr.DataArray( + raster.read(masked=True), + dims=["band", "y", "x"], + coords={ + "band": dict_data["bands"], + "y": dict_coords["y"], + "x": dict_coords["x"], + "time": dict_data["date"], + }, + ) + + if img_id == first_img_id: + len_y = len(dict_coords["y"]) + len_x = len(dict_coords["x"]) + print( + f"The highest resolution's image grid size is {(len_x, len_y)}" ) - - if img_id == first_img_id: - len_y = len(dict_coords["y"]) - len_x = len(dict_coords["x"]) - print( - f"The highest resolution's image grid size is {(len_x, len_y)}" - ) - else: - logging.info( - f"interpolating {img_id} to {first_img_id}'s grid" - ) - xarr = xarr.interp( - x=list_xarr[0].coords["x"].data, - y=list_xarr[0].coords["y"].data, - method="linear", - ) - list_xarr.append(xarr) - list_crs.append(raster.crs.to_string()) + else: + self.logger.info( + f"interpolating {img_id} to {first_img_id}'s grid" + ) + xarr = xarr.interp( + x=list_xarr[0].coords["x"].data, + y=list_xarr[0].coords["y"].data, + method="linear", + ) + list_xarr.append(xarr) + list_crs.append(raster.crs.to_string()) # Adds the img's raster's crs to the initial dataframe df_coverage["crs"] = list_crs @@ -633,10 +311,10 @@ def get_coordinates_by_pixel(raster): # Concatenates all the DataArrays in list_xarr in order # to create one final DataArray with an additional dimension # 'time'. This final DataArray is then transformed into - # an xarray Dataset containing one data variable "reflectance". + # a xarray Dataset containing one data variable "reflectance". final_xarr = xr.concat(list_xarr, "time") - dataset = xr.Dataset(data_vars={"reflectance": final_xarr}) + dataset = xr.Dataset(data_vars={indicator.lower(): final_xarr}) # Adds additional metadata to the dataset. dataset = dataset.assign_coords( @@ -658,127 +336,48 @@ def get_coordinates_by_pixel(raster): ) return dataset - def __get_weather(self, polygon, start_date, end_date, weather_type, fields): - """Returns the weather data as a pandas dataframe. + ########################################### + # ANALYTICS FABRIC # + ########################################### - Args: - polygon : A string representing a polygon. - start_date : A datetime object representing the start date of the date interval the user wants to filter on. - end_date : A datetime object representing the final date of the date interval the user wants to filter on. - weather_type : A string representing the collection ["HISTORICAL_DAILY", "FORECAST_DAILY", "FORECAST_HOURLY"] - fields : An array of strings representings the fields to select (eg: Precipitation, Temperature) - - Returns: - The image's numpy array. - - """ - - allowed_weather_types = [ - "HISTORICAL_DAILY", - "FORECAST_DAILY", - "FORECAST_HOURLY", - ] - if weather_type not in allowed_weather_types: - raise ValueError(f"weather_type should be either {allowed_weather_types}") - - if "Date" not in fields: - fields.append("Date") - - str_start_date = start_date.strftime("%Y-%m-%d") - str_end_date = end_date.strftime("%Y-%m-%d") - polygon_wkt = wkt.loads(polygon) - str_weather_fields = ",".join(fields) - parameters = f"?%24offset=0&%24limit=9999&%24count=false&Location={polygon_wkt.centroid.wkt}&Date=%24between%3A{str_start_date}T00%3A00%3A00.0000000Z%7C{str_end_date}T00%3A00%3A00.0000000Z&Provider=GLOBAL1&WeatherType={weather_type}&$fields={str_weather_fields}" - str_weather_url = urljoin(self.base_url, self.weather_endpoint + parameters) - - response = self.__get(str_weather_url) - - if response.status_code == 200: - df = pd.json_normalize(response.json()) - if df.empty: - return df - else: - df.set_index("date", inplace=True) - df["Location"] = polygon_wkt.centroid.wkt - return df.sort_index() - else: - logging.error(response.status_code) - raise ValueError(response.content) - - def create_schema_id(self, schema_id, schema): + def create_schema_id(self, schema_id: str, + schema: dict): """Create a schema in Analytics Fabrics Args: - schema_id (str): The schema id to create - schema (dict): Dict representing the schema {'property_name': 'property_type'} + schema_id: The schema id to create + schema: Dict representing the schema {'property_name': 'property_type'} Returns: A http response object. """ - properties = [] - for prop_name, datatype in schema.items(): - prop = { - "Name": prop_name, - "Datatype": datatype, - "UnitCategory": None, - "IsPartOfKey": False, - "IsOptional": False, - } - properties.append(prop) - - payload = { - "Id": schema_id, - "Properties": properties, - "Metadata": {"OnAggregationCompleted": "Off"}, - } - str_af_url = urljoin( - self.base_url, - self.analytics_fabric_schema_endpoint, - ) - response = self.__post(str_af_url, payload) - if response.status_code == 201: - return response.content - else: - logging.info(response.status_code) + return self.__analytics_fabric_service.create_schema_id(schema_id=schema_id, schema=schema) - def get_metrics(self, polygon, schema_id, start_date, end_date): + def get_metrics(self, polygon: str, + schema_id: str, + start_date: datetime, + end_date: datetime): """Returns metrics from Analytics Fabrics in a pandas dataframe. Args: - polygon (str): A string representing a polygon. - start_date (datetime): A datetime object representing the start date of the date interval the user wants to filter on. - end_date (datetime): A datetime object representing the final date of the date interval the user wants to filter on. - schema_id (str): A string representing a schema existing in Analytics Fabrics + polygon : A string representing a polygon. + start_date : A datetime object representing the start date of the date interval the user wants to filter on. + end_date : A datetime object representing the final date of the date interval the user wants to filter on. + schema_id : A string representing a schema existing in Analytics Fabrics Returns: df : A Pandas DataFrame containing severals columns with metrics """ - season_field_id = self.__extract_season_field_id(polygon) - logging.info("Calling APIs for metrics") - str_start_date = start_date.strftime("%Y-%m-%d") - str_end_date = end_date.strftime("%Y-%m-%d") - parameters = f'?%24limit=9999&Timestamp=$between:{str_start_date}|{str_end_date}&$filter=Entity.ExternalTypedIds.Contains("SeasonField:{season_field_id}@LEGACY_ID_{self.region.value.upper()}")&$filter=Schema.Id=={schema_id}' - str_af_url = urljoin( - self.base_url, - self.analytics_fabric_endpoint + parameters, - ) - response = self.__get(str_af_url) - - if response.status_code == 200: - df = pd.json_normalize(response.json()) - df.drop("Entity.TypedId", inplace=True, axis=1) - df.rename( - columns={"Timestamp": "date"}, - inplace=True, - ) - df = df.sort_values(by="date") - df.set_index("date", inplace=True) - return df - else: - logging.info(response.status_code) - def push_metrics(self, polygon, schema_id, values): + season_field_id: str = self.__master_data_management_service.extract_season_field_id(polygon) + season_field_unique_id: str = self.__master_data_management_service.get_season_field_unique_id(season_field_id) + + return self.__analytics_fabric_service.get_metrics(season_field_unique_id, schema_id, start_date, end_date) + + def push_metrics(self, polygon: str, + schema_id: str, + values: dict): """Push metrics in Analytics Fabrics Args: @@ -789,24 +388,551 @@ def push_metrics(self, polygon, schema_id, values): Returns: A response object. """ - season_field_id = self.__extract_season_field_id(polygon) - payload = [] - for value in values: - prop = { - "Entity": { - "TypedId": f"SeasonField:{season_field_id}@LEGACY_ID_{self.region.value.upper()}" - }, - "Schema": {"Id": schema_id, "Version": 1}, - } - prop = dict(prop, **value) - payload.append(prop) + season_field_id: str = self.__master_data_management_service.extract_season_field_id(polygon) + + return self.__analytics_fabric_service.push_metrics(season_field_id, schema_id, values) + + ########################################### + # MASTER DATA MANAGEMENT # + ########################################### + + def get_available_crops(self): + """Build the list of available crop codes for the connected user in an enum + + Returns: + crop_enum: an Enum containing all available crop codes of the connected user + """ + # get crop code list + result = self.__master_data_management_service.get_available_crops_code() + + # build an enum with all available crop codes for the connected user + crop_enum = Enum('CropEnum', + {crop['code'] if not crop['code'][0].isdigit() else '_' + crop['code']: crop['code'] for crop + in result}) + + return crop_enum + + def get_available_permissions(self): + """Build the list of available permissions codes for the connected user in an enum + + Returns: + permissions: a string array containing all available permissions of the connected user + """ + # get crop code list + result = self.__master_data_management_service.get_permission_codes() + + # build a string array with all available permission codes for the connected user + permissions = result["permissions"] + + return permissions + + ########################################### + # AGRIQUEST # + ########################################### + def get_agriquest_weather_block_data(self, + start_date: str, + end_date: str, + block_code: AgriquestBlocks, + weather_type: AgriquestWeatherType + ): + """Retrieve data on all AMU of an AgriquestBlock for the specified weather indicator. + + Args: + start_date (str): The start date to retrieve data (format: 'YYYY-MM-dd') + end_date (str): The end date to retrieve data (format: 'YYYY-MM-dd') + block_code (AgriquestBlocks): The AgriquestBlock name (Enum) + weather_type (AgriquestWeatherType) : The Agriquest weather indicator to retrieve (Enum) + + Returns: + result ('dataframe'): pandas dataframe + """ + # date convert + start_datetime = datetime.strptime(start_date, "%Y-%m-%d").date() + end_datetime = datetime.strptime(end_date, "%Y-%m-%d").date() + + # check if the block is dedicated to France + isFrance = self.__agriquest_service.is_block_for_france(block_code) + + # build the weather indicator list + weather_indicators = self.__agriquest_service.weather_indicators_builder(start_datetime, end_datetime, isFrance) + + # call the weather endpoint to retrieve data + result = self.__agriquest_service.get_agriquest_block_weather_data(start_date=start_date, end_date=end_date, + block_code=block_code, + indicator_list=weather_indicators, + weather_type=weather_type) + + return result + + def get_agriquest_ndvi_block_data(self, + day_of_measure: str, + block_code: AgriquestBlocks, + commodity_code: AgriquestCommodityCode + ): + """Retrieve data on all AMU of an AgriquestBlock for NDVI index + + Args: + day_of_measure (str) : The date of measure (format: 'YYYY-MM-dd') + block_code (AgriquestBlocks) : The AgriquestBlock name (Enum) + commodity_code (AgriquestCommodityCode) : The commodity code (Enum) + Returns: + result ('dataframe'): pandas dataframe result + """ + + # call the weather endpoint to retrieve data, indicator of NDVI = 1 + result = self.__agriquest_service.get_agriquest_block_ndvi_data(date=day_of_measure, block_code=block_code, + commodity=commodity_code, indicator_list=[1]) + + return result + + ########################################### + # ANALYTICS PROCESSOR # + ########################################### + + def get_mr_time_series(self, + polygon, + start_date: str = "2010-01-01", + end_date=None, + list_sensors=["micasense", "sequoia", "m4c", "sentinel_2", + "landsat_8", "landsat_9", "cbers4", "kazstsat", + "alsat_1b", "huanjing_2", "deimos", "gaofen_1", "gaofen_6", + "resourcesat2", "dmc_2", "landsat_5", "landsat_7", + "spot", "rapideye_3a", "rapideye_1b"], + denoiser: bool = True, + smoother: str = "ww", + eoc: bool = True, + aggregation: str = "mean", + index: str = "ndvi", + raw_data: bool = False + ): + + """Retrieve mr time series on the collection targeted. + + Args: + start_date : The start date of the time series + end_date : The end date of the time series + list_sensors : The Satellite Imagery Collection targeted + denoiser : A boolean value indicating whether a denoising operation should be applied or not. + smoother : The type or name of the smoothing technique or algorithm to be used. + eoc : A boolean value indicating whether the "end of curve" detection should be performed. + func : The type or name of the function to be applied to the data. + index : The type or name of the index used for data manipulation or referencing + raw_data : A boolean value indicating whether the data is in its raw/unprocessed form. + polygon : A string representing a polygon. + + Returns: + string : s3 bucket path + """ + task_id = self.__analytics_processor_service.launch_mr_time_series_processor( + start_date=start_date, + end_date=end_date, + polygon=polygon, + raw_data=raw_data, + denoiser=denoiser, + smoother=smoother, + aggregation=aggregation, + list_sensors=list_sensors, + index=index, + eoc=eoc, + - str_af_url = urljoin( - self.base_url, - self.analytics_fabric_endpoint, ) - response = self.__patch(str_af_url, payload) - if response.status_code == 200: - return response.status_code + + # check the task status to continue or not the process + self.__analytics_processor_service.wait_and_check_task_status(task_id) + + return self.__analytics_processor_service.get_s3_path_from_task_and_processor(task_id, processor_name="mrts") + + def get_harvest_analytics(self, + season_duration: int, + season_start_day: int, + season_start_month: int, + crop: Enum, + year: int, + geometry: str, + harvest_type: Harvest): + """launch a harvest analytics processor and get the metrics in a panda dataframe object + + Args: + season_duration (int): the duration of the season in days, + season_start_day (int): the start day value (1 - 31), + season_start_month (int): the start month value (1 - 12), + crop (Enum): the geosys crop code, + year (int): the year value, + geometry (str): the geometry to calculate the analytic (WKT or GeoJSON), + harvest_type (Harvest): the type of Harvest analytics (INSEASON/HISTORICAL) + + Returns: + A Pandas DataFrame containing several columns with metrics + """ + # validate and convert the geometry to WKT + geometry = Helper.convert_to_wkt(geometry) + + if geometry is None: + raise ValueError("The geometry is not a valid WKT of GeoJson") + + # Create seasonfield from geometry and extract uniqueId + sfd_public_id = self.__master_data_management_service.extract_season_field_id(geometry) + sf_unique_id = self.__master_data_management_service.get_season_field_unique_id(sfd_public_id) + + task_id = self.__analytics_processor_service.launch_harvest_processor( + season_duration=season_duration, + season_start_day=season_start_day, + season_start_month=season_start_month, + seasonfield_id=sf_unique_id, + geometry=geometry, + crop=crop.value, + year=year, + harvest_type=harvest_type + ) + + self.logger.info(f"Task Id: {task_id}") + + # check the task status to continue or not the process + self.__analytics_processor_service.wait_and_check_task_status(task_id) + + # Analytics Schema + if harvest_type == Harvest.HARVEST_IN_SEASON: + schema = "INSEASON_HARVEST" + else: + schema = "HISTORICAL_HARVEST" + + # if task successfully completed, get metrics from analytics fabric + return self.__analytics_fabric_service.get_lastest_metrics(sf_unique_id, schema) + + def get_emergence_analytics(self, + season_duration: int, + season_start_day: int, + season_start_month: int, + crop: Enum, + year: int, + geometry: str, + emergence_type: Emergence): + """launch an emergence analytics processor and get the metrics in a panda dataframe object + + Args: + season_duration (int): the duration of the season in days, + season_start_day (int): the start day value (1 - 31), + season_start_month (int): the start month value (1 - 12), + crop (Enum): the crop code, + year (int): the year value, + geometry (str): the geometry to calculate the analytic (WKT or GeoJSON), + emergence_type (Emergence): the type of Emergence analytics (INSEASON/HISTORICAL/DELAY) + + Returns: + A Pandas DataFrame containing several columns with metrics + """ + # validate and convert the geometry to WKT + geometry = Helper.convert_to_wkt(geometry) + + if geometry is None: + raise ValueError("The geometry is not a valid WKT of GeoJson") + + # Create seasonfield from geometry and extract uniqueId + sfd_public_id = self.__master_data_management_service.extract_season_field_id(geometry) + sf_unique_id = self.__master_data_management_service.get_season_field_unique_id(sfd_public_id) + + task_id = self.__analytics_processor_service.launch_emergence_processor( + season_duration=season_duration, + season_start_day=season_start_day, + season_start_month=season_start_month, + seasonfield_id=sf_unique_id, + geometry=geometry, + crop=crop.value, + year=year, + emergence_type=emergence_type + ) + + # check the task status to continue or not the process + self.__analytics_processor_service.wait_and_check_task_status(task_id) + + # Analytics Schema + if emergence_type == Emergence.EMERGENCE_IN_SEASON: + schema = "INSEASON_EMERGENCE" + elif emergence_type == Emergence.EMERGENCE_HISTORICAL: + schema = "HISTORICAL_EMERGENCE" else: - logging.info(response.status_code) + schema = "EMERGENCE_DELAY" + + # if task successfully completed, get metrics from analytics fabric + return self.__analytics_fabric_service.get_lastest_metrics(sf_unique_id, schema) + + def get_brazil_crop_id_analytics(self, + start_date: str, + end_date: str, + season: CropIdSeason, + geometry: str): + """launch a brazil-in-season-crop-id analytics processor and get the metrics in a panda dataframe object + + Args: + start_date (str) : the start date used for the request (format YYYY-MM-dd) + end_date (str) : the end date used for the request (format YYYY-MM-dd) + season (CropIdSeason): the season name, + geometry (str): the geometry to calculate the analytic (WKT or GeoJSON) + + Returns: + A Pandas DataFrame containing several columns with metrics + """ + # validate and convert the geometry to WKT + geometry = Helper.convert_to_wkt(geometry) + + if geometry is None: + raise ValueError("The geometry is not a valid WKT of GeoJson") + + # Create seasonfield from geometry and extract uniqueId + sfd_public_id = self.__master_data_management_service.extract_season_field_id(geometry) + sf_unique_id = self.__master_data_management_service.get_season_field_unique_id(sfd_public_id) + + task_id = self.__analytics_processor_service.launch_brazil_in_season_crop_id_processor( + start_date=start_date, + end_date=end_date, + seasonfield_id=sf_unique_id, + geometry=geometry, + season=season.value + ) + + # check the task status to continue or not the process + self.__analytics_processor_service.wait_and_check_task_status(task_id) + + # Analytics Schema + schema = "CROP_IDENTIFICATION" + + # if task successfully completed, get metrics from analytics fabric + return self.__analytics_fabric_service.get_lastest_metrics(sf_unique_id, schema) + + def get_potential_score_analytics(self, + end_date: str, + nb_historical_years: int, + season_duration: int, + season_start_day: int, + season_start_month: int, + sowing_date: str, + crop: Enum, + geometry: str): + """launch a potential score analytics processor and get the metrics in a panda dataframe object + + Args: + season_duration (int): the duration of the season in days, + season_start_day (int): the start day value (1 - 31), + season_start_month (int): the start month value (1 - 12), + crop (Enum): the crop code, + end_date (str): end date used to calculate potential score + sowing_date (str): sowing date of the filed used to calculate potential score + nb_historical_years (int): number of historical years data to calculate potential score + geometry (str): the geometry to calculate the analytic (WKT or GeoJSON) + + Returns: + A Pandas DataFrame containing several columns with metrics + """ + # validate and convert the geometry to WKT + geometry = Helper.convert_to_wkt(geometry) + + if geometry is None: + raise ValueError("The geometry is not a valid WKT of GeoJson") + + # Create seasonfield from geometry and extract uniqueId + sfd_public_id = self.__master_data_management_service.extract_season_field_id(geometry) + sf_unique_id = self.__master_data_management_service.get_season_field_unique_id(sfd_public_id) + + task_id = self.__analytics_processor_service.launch_potential_score_processor( + end_date=end_date, + nb_historical_years=nb_historical_years, + sowing_date=sowing_date, + season_duration=season_duration, + season_start_day=season_start_day, + season_start_month=season_start_month, + seasonfield_id=sf_unique_id, + geometry=geometry, + crop=crop.value + ) + + # check the task status to continue or not the process + self.__analytics_processor_service.wait_and_check_task_status(task_id) + + # Analytics Schema + schema = "POTENTIAL_SCORE" + + # if task successfully completed, get metrics from analytics fabric + return self.__analytics_fabric_service.get_lastest_metrics(sf_unique_id, schema) + + def get_greenness_analytics(self, + start_date: str, + end_date: str, + sowing_date: str, + crop: Enum, + geometry: str): + """launch a greenness analytics processor and get the metrics in a panda dataframe object + + Args: + start_date (str) : the start date used for the request (format YYYY-MM-dd) + end_date (str) : the end date used for the request (format YYYY-MM-dd) + sowing_date(str): sowing date of the field used to calculate potential score + crop (Enum): the crop code, + geometry (str): the geometry to calculate the analytic (WKT or GeoJSON) + + Returns: + A Pandas DataFrame containing several columns with metrics + """ + # validate and convert the geometry to WKT + geometry = Helper.convert_to_wkt(geometry) + + if geometry is None: + raise ValueError("The geometry is not a valid WKT of GeoJson") + + # Create seasonfield from geometry and extract uniqueId + sfd_public_id = self.__master_data_management_service.extract_season_field_id(geometry) + sf_unique_id = self.__master_data_management_service.get_season_field_unique_id(sfd_public_id) + + task_id = self.__analytics_processor_service.launch_greenness_processor( + start_date=start_date, + end_date=end_date, + sowing_date=sowing_date, + seasonfield_id=sf_unique_id, + geometry=geometry, + crop=crop.value + ) + + # check the task status to continue or not the process + self.__analytics_processor_service.wait_and_check_task_status(task_id) + + # Analytics Schema + schema = "GREENNESS" + + # if task successfully completed, get metrics from analytics fabric + return self.__analytics_fabric_service.get_lastest_metrics(sf_unique_id, schema) + + def get_harvest_readiness_analytics(self, + start_date: str, + end_date: str, + sowing_date: str, + crop: Enum, + geometry: str): + """launch a harvest readiness analytics processor and get the metrics in a panda dataframe object + + Args: + start_date (str) : the start date used for the request (format YYYY-MM-dd) + end_date (str) : the end date used for the request (format YYYY-MM-dd) + sowing_date(str): sowing date of the field used to calculate potential score + crop (Enum): the crop code, + geometry (str): the geometry to calculate the analytic (WKT or GeoJSON) + + Returns: + A Pandas DataFrame containing several columns with metrics + """ + # validate and convert the geometry to WKT + geometry = Helper.convert_to_wkt(geometry) + + if geometry is None: + raise ValueError("The geometry is not a valid WKT of GeoJson") + + # Create seasonfield from geometry and extract uniqueId + sfd_public_id = self.__master_data_management_service.extract_season_field_id(geometry) + sf_unique_id = self.__master_data_management_service.get_season_field_unique_id(sfd_public_id) + + task_id = self.__analytics_processor_service.launch_harvest_readiness_processor( + start_date=start_date, + end_date=end_date, + sowing_date=sowing_date, + seasonfield_id=sf_unique_id, + geometry=geometry, + crop=crop.value + ) + + # check the task status to continue or not the process + self.__analytics_processor_service.wait_and_check_task_status(task_id) + + # Analytics Schema + schema = "HARVEST_READINESS" + + # if task successfully completed, get metrics from analytics fabric + return self.__analytics_fabric_service.get_lastest_metrics(sf_unique_id, schema) + + def get_planted_area_analytics(self, + start_date: str, + end_date: str, + geometry: str): + """launch a planted area analytics processor and get the metrics in a panda dataframe object + + Args: + start_date (str) : the start date used for the request (format YYYY-MM-dd) + end_date (str) : the end date used for the request (format YYYY-MM-dd) + geometry (str): the geometry to calculate the analytic (WKT or GeoJSON), + Returns: + A Pandas DataFrame containing several columns with metrics + """ + # validate and convert the geometry to WKT + geometry = Helper.convert_to_wkt(geometry) + + if geometry is None: + raise ValueError("The geometry is not a valid WKT of GeoJson") + + # Create seasonfield from geometry and extract uniqueId + sfd_public_id = self.__master_data_management_service.extract_season_field_id(geometry) + sf_unique_id = self.__master_data_management_service.get_season_field_unique_id(sfd_public_id) + + task_id = self.__analytics_processor_service.launch_planted_area_processor(start_date, end_date, sf_unique_id) + # check the task status to continue or not the process + self.__analytics_processor_service.wait_and_check_task_status(task_id) + + schema = "PLANTED_AREA" + + # if task successfully completed, get latests metrics from analytics fabric + return self.__analytics_fabric_service.get_lastest_metrics(sf_unique_id, schema) + + + def get_zarc_analytics(self, + start_date_emergence: str, + end_date_emergence: str, + nb_days_sowing_emergence: int, + crop: Enum, + soil_type: ZarcSoilType, + cycle: ZarcCycleType, + geometry: str): + """launch a zarc analytics processor and get the metrics in a panda dataframe object + + Args: + start_date_emergence (str) : the emergence start date used for the request (format YYYY-MM-dd) + end_date_emergence (str) : the emergence end date used for the request (format YYYY-MM-dd) + nb_days_sowing_emergence (int): the number of days for sowing emergence + crop (Enum): the zarc crop code, + soil_type (ZarcSoilType): the zarc soil type (1/2/3), + cycle (ZarcCycleType): the zarc cycle type (1/2/3), + geometry (str): the geometry to calculate the analytic (WKT or GeoJSON), + Returns: + A Pandas DataFrame containing several columns with metrics + """ + # validate and convert the geometry to WKT + geometry = Helper.convert_to_wkt(geometry) + + if geometry is None: + raise ValueError("The geometry is not a valid WKT of GeoJson") + + # get municipio id from geometry + municipio_id = self.__gis_service.get_municipio_id_from_geometry(geometry) + + if municipio_id == 0: + raise ValueError(f"No municipio id found for this geometry") + + # Create seasonfield from geometry and extract uniqueId + sfd_public_id = self.__master_data_management_service.extract_season_field_id(geometry) + sf_unique_id = self.__master_data_management_service.get_season_field_unique_id(sfd_public_id) + + task_id = self.__analytics_processor_service.launch_zarc_processor( + start_date_emergence=start_date_emergence, + end_date_emergence=end_date_emergence, + crop=crop.value, + cycle=cycle.value, + soil_type=soil_type.value, + municipio=municipio_id, + nb_days_sowing_emergence=nb_days_sowing_emergence, + seasonfield_id=sf_unique_id + ) + + # check the task status to continue or not the process + self.__analytics_processor_service.wait_and_check_task_status(task_id) + + # Analytics Schema + schema = "ZARC" + + # if task successfully completed, get metrics from analytics fabric + return self.__analytics_fabric_service.get_lastest_metrics(sf_unique_id, schema) diff --git a/geosyspy/services/__init__.py b/geosyspy/services/__init__.py new file mode 100644 index 0000000..c36f219 --- /dev/null +++ b/geosyspy/services/__init__.py @@ -0,0 +1,3 @@ +__all__ = ["agriquest_service", "analytics_processor_service", "analytics_fabric_service", + "master_data_management_service", "weather_service", "vegetation_time_series_service", + "map_product_service"] diff --git a/geosyspy/services/agriquest_service.py b/geosyspy/services/agriquest_service.py new file mode 100644 index 0000000..843cfda --- /dev/null +++ b/geosyspy/services/agriquest_service.py @@ -0,0 +1,159 @@ +import json +import logging +import pandas as pd +from datetime import datetime, timedelta +from urllib.parse import urljoin +from geosyspy.utils.constants import * +from geosyspy.utils.http_client import * + + +class AgriquestService: + + def __init__(self, base_url: str, http_client: HttpClient): + self.base_url: str = base_url + self.http_client: HttpClient = http_client + self.logger = logging.getLogger(__name__) + + def weather_indicators_builder(self, start_date, end_date, isFrance): + """build weather indicators list from 2 dates + + Args: + start_date (datetime) : the start date used for the request + end_date (datetime) : the end date used for the request + isFrance (boolean) : resuqest mad for France or not + + Returns: + A list of int (weather indicators) + - 2 : ENS observed data + - 3 : Arome Weather Observed data (Meteo France, France only) + - 4 : ECMWF Weather Forecast Data + - 5 : GFS Weather Forecast Data + + """ + + today = datetime.now().date() + result = [] + + # Forecast indicators + if end_date > today: + result.extend([4, 5]) + + if start_date < today: + if not isFrance: + result.append(2) + else: + result.append(3) + + return result + + def is_block_for_france(self, block_code: AgriquestBlocks): + """ + method to check if the services block code is dedicated to France + + Args: + block_code (AgriquestBlocks): the block code to check + Returns: + boolean + """ + if (block_code.value in [item.value for item in AgriquestFranceBlockCode]): + return True + return False + + def get_agriquest_block_weather_data(self, + start_date: str, + end_date: str, + block_code: AgriquestBlocks, + indicator_list: [int], + weather_type: AgriquestWeatherType + ): + """ + method to call Weather AgriQuest Api and build a panda DataFrame + + Args: + start_date (str), + end_date (str), + block_code (AgriquestBlocks): the AQ block to check , + indicator_list ([int]): list of weather indicator types, + weather_type(AgriquestWeatherType): type of weather data to retrieve + Returns: + Panda DataFrame representing the value corresponding to the weather_type of each AMU of the block, + on the specified period provided in parameter. + """ + + payload = { + "analyticName": weather_type.name, + "commodityId": AgriquestCommodityCode.ALL_VEGETATION.value, + "startDate": start_date, + "endDate": end_date, + "idPixelType": 1, + "idBlock": block_code.value, + "indicatorTypeIds": indicator_list + } + parameters: str = f"/{weather_type.value}/export-map/year-of-interest" + aq_url: str = urljoin(self.base_url, GeosysApiEndpoints.AGRIQUEST_ENDPOINT.value + parameters) + response = self.http_client.post(aq_url, payload) + if response.status_code == 200: + dict_response = response.json() + df = pd.read_json(json.dumps(dict_response)) + + # Ignore first line + df = df.iloc[1:] + + # first line as column header + df.columns = df.iloc[0] + + # Ignore first line after using columns header + df = df.iloc[1:] + + df = df.rename(columns={"Name": "AMU"}) + return df + else: + self.logger.info(response.status_code) + + + def get_agriquest_block_ndvi_data(self, + date: str, + block_code: AgriquestBlocks, + commodity: AgriquestCommodityCode, + indicator_list: [int] + ): + """ + method to call year-of-interest AgriQuest Api and build a panda DataFrame + + Args: + date (str), + block_code (AgriquestBlocks): the AQ block to check , + indicator_list ([int]): list of indicator types + Returns: + Panda DataFrame representing the value corresponding to NDVI index of each AMU of the block, + on the specified date (dayOfMeasure) provided in parameter. + """ + + payload = { + "analyticName": "NDVI", + "commodityId": commodity.value, + "dayOfMeasure": date, + "idPixelType": 1, + "idBlock": block_code.value, + "indicatorTypeIds": indicator_list + } + parameters: str = f"/vegetation-vigor-index/export-map/year-of-interest" + aq_url: str = urljoin(self.base_url, GeosysApiEndpoints.AGRIQUEST_ENDPOINT.value + parameters) + response = self.http_client.post(aq_url, payload) + if response.status_code == 200: + dict_response = response.json() + df = pd.read_json(json.dumps(dict_response)) + + # Ignore first line + df = df.iloc[1:] + + # first line as column header + df.columns = df.iloc[0] + + # Ignore first line after using columns header + df = df.iloc[1:] + + df = df.rename(columns={"Name": "AMU", "Value": "NDVI"}) + return df + else: + self.logger.info(response.status_code) diff --git a/geosyspy/services/analytics_fabric_service.py b/geosyspy/services/analytics_fabric_service.py new file mode 100644 index 0000000..e68a069 --- /dev/null +++ b/geosyspy/services/analytics_fabric_service.py @@ -0,0 +1,221 @@ +import logging +import pandas as pd +from datetime import datetime +from urllib.parse import urljoin +from geosyspy.utils.constants import * +from geosyspy.utils.http_client import * +from typing import Optional + + +class AnalyticsFabricService: + + def __init__(self, base_url: str, http_client: HttpClient): + self.base_url: str = base_url + self.http_client: HttpClient = http_client + self.logger = logging.getLogger(__name__) + + + @staticmethod + def build_timestamp_query_parameters(start_date: Optional[datetime] = None, + end_date: Optional[datetime] = None): + """ Build Timestamp parameter to provide in AF api calls + Args: + start_date : A datetime object representing the start date of the date interval the user wants to filter on. + end_date : A datetime object representing the final date of the date interval the user wants to filter on. + Returns: + A string query params to include in api call + """ + + if start_date is None and end_date is None: + return "" + if start_date is not None and end_date is None: + return f'&Timestamp=$gte:{start_date}' + elif start_date is None and end_date is not None: + return f'&Timestamp:$lte:{end_date}' + else: + return f'&Timestamp=$between:{start_date}|{end_date}' + + def create_schema_id(self, schema_id: str, + schema: dict): + """Create a schema in Analytics Fabrics + + Args: + schema_id: The schema id to create + schema: Dict representing the schema {'property_name': 'property_type'} + + Returns: + A http response object. + """ + properties = [] + for prop_name, datatype in schema.items(): + prop = { + "Name": prop_name, + "Datatype": datatype, + "UnitCategory": None, + "IsPartOfKey": False, + "IsOptional": False, + } + properties.append(prop) + + payload = { + "Id": schema_id, + "Properties": properties, + "Metadata": {"OnAggregationCompleted": "Off"}, + } + af_url: str = urljoin( + self.base_url, + GeosysApiEndpoints.ANALYTICS_FABRIC_SCHEMA_ENDPOINT.value, + ) + response = self.http_client.post(af_url, payload) + dict_response = response.json() + if response.status_code == 201 : + return response.content + elif response.status_code == 400 and "This schema already exists." in str(dict_response["Errors"]["Body"]["Id"]): + self.logger.info(f"The schema {schema_id} already exists.") + else: + self.logger.info(response.status_code) + + def get_metrics(self, season_field_id: str, + schema_id: str, + start_date: Optional[datetime] = None, + end_date: Optional[datetime] = None): + """Returns metrics from Analytics Fabrics in a pandas dataframe. + Filters on date: + if start_date is None: <= end_date + if end_date is None: >= start_date + if start_date & end_date not None: between start_date & end_date + if start_date & end_date both None: no filter on dates + + + Args: + season_field_id : A string representing the seasonfield id + start_date : A datetime object representing the start date of the date interval the user wants to filter on. + end_date : A datetime object representing the final date of the date interval the user wants to filter on. + schema_id : A string representing a schema existing in Analytics Fabrics + + Returns: + df : A Pandas DataFrame containing several columns with metrics + + """ + self.logger.info("Calling APIs for metrics") + if start_date is not None: + start_date: str = start_date.strftime("%Y-%m-%d") + if end_date is not None: + end_date: str = end_date.strftime("%Y-%m-%d") + + timestamp_params = self.build_timestamp_query_parameters(start_date, end_date); + parameters: str = f'?%24filter=Entity.TypedId==\'SeasonField:{season_field_id}\'' \ + f'{timestamp_params}' \ + f'&Schema.Id={schema_id}' \ + f'&%24limit=None' + + af_url: str = urljoin( + self.base_url, + GeosysApiEndpoints.ANALYTICS_FABRIC_ENDPOINT.value + parameters, + ) + response = self.http_client.get(af_url) + + if response.status_code == 200: + df = pd.json_normalize(response.json()) + if df.empty: + if start_date is not None and end_date is not None: + date_msg =f"between:{start_date} and {end_date} " + elif start_date is None and end_date is not None: + date_msg =f"<= {end_date} " + elif start_date is not None and end_date is None: + date_msg = f">= {start_date} " + self.logger.info(f"No metrics found in Analytic Fabric with " + f"SchemaId: {schema_id}, " + f"SeasonField:{season_field_id} " + f"{date_msg} ") + return df + df.drop("Entity.TypedId", inplace=True, axis=1) + df.rename( + columns={"Timestamp": "date"}, + inplace=True, + ) + df = df.sort_values(by="date") + df.set_index("date", inplace=True) + return df + else: + self.logger.error("Issue in get_metrics. Status Code: "+str(response.status_code) + + " Error:" + str(response.json())) + + def get_lastest_metrics(self, season_field_id: str, + schema_id: str): + """Returns latest metrics from Analytics Fabrics in a pandas dataframe. + + Args: + season_field_id : A string representing the seasonfield id + schema_id : A string representing a schema existing in Analytics Fabrics + + Returns: + df : A Pandas DataFrame containing several columns with metrics + + """ + self.logger.info("Calling APIs for Latest metrics") + + parameters: str = f'?%24filter=Entity.TypedId==\'SeasonField:{season_field_id}\'' \ + f'&Schema.Id={schema_id}' \ + f'&%24limit=1' \ + f'&$sort=-Timestamp' + + af_url: str = urljoin( + self.base_url, + GeosysApiEndpoints.ANALYTICS_FABRIC_LATEST_ENDPOINT.value + parameters, + ) + response = self.http_client.get(af_url) + + if response.status_code == 200: + df = pd.json_normalize(response.json()) + if df.empty: + self.logger.info(f"No Latest metrics found in Analytic Fabric with " + f"SchemaId: {schema_id}, " + f"SeasonField:{season_field_id} ") + return df + df.drop("Entity.TypedId", inplace=True, axis=1) + df.rename( + columns={"Timestamp": "date"}, + inplace=True, + ) + df = df.sort_values(by="date") + df.set_index("date", inplace=True) + return df + else: + self.logger.error("Issue in get_latests_metrics. Status Code: "+str(response.status_code) + + " Error:" + str(response.json())) + + def push_metrics(self, season_field_id: str, + schema_id: str, + values: dict): + """Push metrics in Analytics Fabrics + + Args: + season_field_id : A string representing the seasonFieldId. + schema_id : The schema on which to save + values : Dict representing values to push + + Returns: + A response object. + """ + payload = [] + for value in values: + prop = { + "Entity": { + "TypedId": f"SeasonField:{season_field_id}@LEGACY_ID_NA" + }, + "Schema": {"Id": schema_id, "Version": 1}, + } + prop = dict(prop, **value) + payload.append(prop) + + af_url: str = urljoin( + self.base_url, + GeosysApiEndpoints.ANALYTICS_FABRIC_ENDPOINT.value, + ) + response = self.http_client.patch(af_url, payload) + if response.status_code == 200: + return response.status_code + else: + self.logger.error("Issue in push_metrics. Status Code: "+str(response.status_code) + + " Error:" + str(response.json())) diff --git a/geosyspy/services/analytics_processor_service.py b/geosyspy/services/analytics_processor_service.py new file mode 100644 index 0000000..c255ab1 --- /dev/null +++ b/geosyspy/services/analytics_processor_service.py @@ -0,0 +1,563 @@ +import json +import logging +from urllib.parse import urljoin +from geosyspy.utils.constants import * +from geosyspy.services.service_constants import * +from geosyspy.utils.http_client import * +import retrying +import datetime + + +class AnalyticsProcessorService: + + def __init__(self, base_url: str, http_client: HttpClient): + self.base_url: str = base_url + self.http_client: HttpClient = http_client + self.logger = logging.getLogger(__name__) + + @retrying.retry(wait_exponential_multiplier=1000, wait_exponential_max=10000, stop_max_attempt_number=50, retry_on_exception=lambda exc: isinstance(exc, KeyError)) + def wait_and_check_task_status(self, task_id: str): + """Check task status until it is ended for a specific analytics processor run + + Args: + task_id (str) : A string representing a task id + + Returns: + task_status (str): the status of the task + + """ + + events_endpoint: str = urljoin(self.base_url, + GeosysApiEndpoints.PROCESSOR_EVENTS_ENDPOINT.value + "/" + task_id) + + while True: + response = self.http_client.get(events_endpoint) + if response.ok: + dict_resp = json.loads(response.content) + task_status = dict_resp["status"] + else: + self.logger.info(response.status_code) + return "Failed" + + if task_status == "Ended": + break # the task is completed. + elif task_status == "Running": + self.logger.info("Retry -- Task still running") + raise KeyError("Task still running") # raise exception to retry + else: + raise Exception(f"Task Status: {task_status}, Content: {response.content}" ) + + return task_status + + def get_s3_path_from_task_and_processor(self, task_id: str, + processor_name: str): + """Returns S3 path related to task_id + + Args: + task_id : A string representing a task id + processor_name: the processor name + Returns: + path : uri + + """ + + events_endpoint: str = urljoin(self.base_url, + GeosysApiEndpoints.PROCESSOR_EVENTS_ENDPOINT.value + "/" + task_id) + + response = self.http_client.get(events_endpoint) + if response.ok: + dict_resp = json.loads(response.content) + customer_code: str = dict_resp["customerCode"].lower().replace("_", "-") + user_id: str = dict_resp["userId"] + task_id = dict_resp["taskId"] + return f"s3://geosys-{customer_code}/{user_id}/{processor_name}/{task_id}" + else: + self.logger.info(response.status_code) + raise ValueError(response.content) + + def launch_mr_time_series_processor(self, polygon, + start_date: str, + end_date, + list_sensors, + denoiser: bool, + smoother: str, + eoc: bool, + aggregation: str, + index: str, + raw_data: bool): + """launch a MRTS analytics processor and get the task id in result + + Args: + start_date : The start date of the time series + end_date : The end date of the time series + list_sensors : The Satellite Imagery Collection targeted + denoiser : A boolean value indicating whether a denoising operation should be applied or not. + smoother : The type or name of the smoothing technique or algorithm to be used. + eoc : A boolean value indicating whether the "end of curve" detection should be performed. + func : The type or name of the function to be applied to the data. + index : The type or name of the index used for data manipulation or referencing + raw_data : A boolean value indicating whether the data is in its raw/unprocessed form. + polygon : A string representing a polygon. + + Returns: + taskId (str) + """ + + if end_date is None: + end_date = datetime.datetime.today().strftime("%Y-%m-%d") + payload = { + "parametersProfile": { + "code": ProcessorConfiguration.MRTS.value['profile'], + "version": 1 + }, + "parameters": { + "start_date": start_date, + "end_date": end_date, + "sensors": list_sensors, + "denoiser": denoiser, + "smoother": smoother, + "eoc": eoc, + "aggregation": aggregation, + "index": index, + "raw_data": raw_data + }, + "data": [ + {"wkt": polygon} + ] + } + + processor_endpoint: str = urljoin(self.base_url, + GeosysApiEndpoints.LAUNCH_PROCESSOR_ENDPOINT.value.format( + ProcessorConfiguration.MRTS.value['api_processor_path'])) + + response = self.http_client.post(processor_endpoint, payload) + + if response.ok: + task_id = json.loads(response.content)["taskId"] + return task_id + else: + self.logger.info(response.status_code) + raise ValueError(response.content) + + def launch_planted_area_processor(self, + start_date: str, + end_date: str, + seasonfield_id: str): + """launch a planted area analytics processor and get the task id in result + + Args: + start_date (str) : the start date used for the request (format YYYY-MM-dd) + end_date (str) : the end date used for the request (format YYYY-MM-dd) + seasonfield_id (sfd) : seasonField geosys uniqueId + + Returns: + taskId (str) + """ + + payload = { + "parametersProfileCode": ProcessorConfiguration.PLANTED_AREA.value['profile'], + "data": + [ + { + "id": seasonfield_id + "@ID", + "start_date": start_date, + "end_date": end_date + } + ] + } + + processor_endpoint: str = urljoin(self.base_url, + GeosysApiEndpoints.LAUNCH_PROCESSOR_ENDPOINT.value.format(ProcessorConfiguration.PLANTED_AREA.value['api_processor_path'])) + + response = self.http_client.post(processor_endpoint, payload) + + if response.ok: + task_id = json.loads(response.content)["taskId"] + return task_id + else: + self.logger.info(response.status_code) + raise ValueError(response.content) + + def launch_harvest_processor(self, + season_duration: int, + season_start_day: int, + season_start_month: int, + crop: str, + year: int, + seasonfield_id: str, + geometry: str, + harvest_type: Harvest): + """launch a harvest analytics processor and get the task id in result + + Args: + season_duration (int): the duration of the season in days, + season_start_day (int): the start day value (1 - 31), + season_start_month (int): the start month value (1 - 12), + crop (str): the geosys crop code, + year (int): the year value, + seasonfield_id (sfd) : seasonField geosys uniqueId + geometry (str): the geometry to calcultate the analytic (WKT or GeoJSON), + harvest_type (Harvest): the type of Harvest analytics (INSEASON/HISTORICAL) + + Returns: + taskId (str) + """ + + # build payload for api call + payload = { + "parametersProfile": ProcessorConfiguration[harvest_type.name].value['profile'], + "parameters": { + "season_duration": season_duration, + "season_start_day": season_start_day, + "season_start_month": season_start_month + }, + "data": + [ + { + "id": "SeasonField:" + seasonfield_id + "@ID", + "crop": crop, + "year": year, + "geom": geometry + } + ] + } + + processor_endpoint: str = urljoin(self.base_url, + GeosysApiEndpoints.LAUNCH_PROCESSOR_ENDPOINT.value.format(ProcessorConfiguration[harvest_type.name].value['api_processor_path'])) + + response = self.http_client.post(processor_endpoint, payload) + + if response.ok: + task_id = json.loads(response.content)["taskId"] + return task_id + else: + self.logger.info(response.status_code) + raise ValueError(response.content) + + def launch_emergence_processor(self, + season_duration: int, + season_start_day: int, + season_start_month: int, + crop: str, + year: int, + seasonfield_id: str, + geometry: str, + emergence_type: Emergence): + """launch an emergence analytics processor and get the task id in result + + Args: + season_duration (int): the duration of the season in days, + season_start_day (int): the start day value (1 - 31), + season_start_month (int): the start month value (1 - 12), + crop (str): the geosys crop code, + year (int): the year value, + seasonfield_id (sfd) : seasonField geosys uniqueId + geometry (str): the geometry to calculate the analytic (WKT or GeoJSON), + emergence_type (Emergence): the type of Emergence analytics (INSEASON/HISTORICAL/DELAY) + + Returns: + taskId (str) + """ + + # build payload for api call + payload = { + "parametersProfile": ProcessorConfiguration[emergence_type.name].value['profile'], + "parameters": { + "season_duration": season_duration, + "season_start_day": season_start_day, + "season_start_month": season_start_month + }, + "data": + [ + { + "id": "SeasonField:" + seasonfield_id + "@ID", + "crop": crop, + "year": year, + "geom": geometry + } + ] + } + + if emergence_type == Emergence.EMERGENCE_DELAY: + payload["parameters"]["emergence_delay"] = True + + processor_endpoint: str = urljoin(self.base_url, + GeosysApiEndpoints.LAUNCH_PROCESSOR_ENDPOINT.value.format( ProcessorConfiguration[emergence_type.name].value['api_processor_path'])) + + response = self.http_client.post(processor_endpoint, payload) + + if response.ok: + task_id = json.loads(response.content)["taskId"] + return task_id + else: + self.logger.info(response.status_code) + raise ValueError(response.content) + + def launch_potential_score_processor(self, + season_duration: int, + season_start_day: int, + season_start_month: int, + crop: str, + end_date: str, + sowing_date: str, + nb_historical_years: int, + seasonfield_id: str, + geometry: str): + """launch a potential score analytics processor and get the task id in result + + Args: + season_duration (int): the duration of the season in days, + season_start_day (int): the start day value (1 - 31), + season_start_month (int): the start month value (1 - 12), + crop (str): the geosys crop code, + end_date (str): end date used to calculate potential score + sowing_date (str): sowing date of the filed used to calculate potential score + nb_historical_years (int): number of historical years data to calculate potential score + seasonfield_id (sfd) : seasonField geosys uniqueId + geometry (str): the geometry to calculate the analytic (WKT or GeoJSON) + + Returns: + taskId (str) + """ + + # build payload for api call + payload = { + "parametersProfile": ProcessorConfiguration.POTENTIAL_SCORE.value['profile'], + "parameters": { + "end_date" : end_date, + "nb_historical_years" : nb_historical_years, + "season_duration": season_duration, + "season_start_day": season_start_day, + "season_start_month": season_start_month + }, + "data": + [ + { + "id": "SeasonField:" + seasonfield_id + "@ID", + "crop": crop, + "sowing_date": sowing_date, + "geom": geometry + } + ] + } + + processor_endpoint: str = urljoin(self.base_url, + GeosysApiEndpoints.LAUNCH_PROCESSOR_ENDPOINT.value.format(ProcessorConfiguration.POTENTIAL_SCORE.value['api_processor_path'])) + + response = self.http_client.post(processor_endpoint, payload) + + if response.ok: + task_id = json.loads(response.content)["taskId"] + return task_id + else: + self.logger.info(response.status_code) + raise ValueError(response.content) + + def launch_brazil_in_season_crop_id_processor(self, + start_date: str, + end_date: str, + season: str, + seasonfield_id: str, + geometry: str): + """launch a brazil-in-season-crop-id analytics processor and get the task id in result + + Args: + start_date (str) : the start date used for the request (format YYYY-MM-dd) + end_date (str) : the end date used for the request (format YYYY-MM-dd) + + season (str): the season name, + seasonfield_id (sfd) : seasonField geosys uniqueId + geometry (str): the geometry to calculate the analytic (WKT or GeoJSON), + + Returns: + taskId (str) + """ + + # build payload for api call + payload = { + "parametersProfile": ProcessorConfiguration.BRAZIL_IN_SEASON_CROP_ID.value['profile'], + "parameters": { + "start_date": start_date, + "end_date": end_date, + "season": season + }, + "data": + [ + { + "id": "SeasonField:" + seasonfield_id + "@ID", + "geom": geometry + } + ] + } + + processor_endpoint: str = urljoin(self.base_url, + GeosysApiEndpoints.LAUNCH_PROCESSOR_ENDPOINT.value.format(ProcessorConfiguration.BRAZIL_IN_SEASON_CROP_ID.value['api_processor_path'])) + + response = self.http_client.post(processor_endpoint, payload) + + if response.ok: + task_id = json.loads(response.content)["taskId"] + return task_id + else: + self.logger.info(response.status_code) + raise ValueError(response.content) + + def launch_greenness_processor(self, + start_date: str, + end_date: str, + sowing_date: str, + crop: str, + seasonfield_id: str, + geometry: str): + """launch a greenness analytics processor and get the task id in result + + Args: + start_date (str) : the start date used for the request (format YYYY-MM-dd) + end_date (str) : the end date used for the request (format YYYY-MM-dd) + sowing_date(str): sowing date of the field used to calculate potential score + crop (str): the EDA crop code, + seasonfield_id (sfd) : seasonField geosys uniqueId + geometry (str): the geometry to calculate the analytic (WKT or GeoJSON), + + Returns: + taskId (str) + """ + + # build payload for api call + payload = { + "parametersProfile": ProcessorConfiguration.GREENNESS.value['profile'], + "parameters": { + "start_date": start_date, + "end_date": end_date, + }, + "data": + [ + { + "id": "SeasonField:" + seasonfield_id + "@ID", + "crop": crop, + "sowing_date": sowing_date, + "geom": geometry + } + ] + } + + processor_endpoint: str = urljoin(self.base_url, + GeosysApiEndpoints.LAUNCH_PROCESSOR_ENDPOINT.value.format(ProcessorConfiguration.GREENNESS.value['api_processor_path'])) + + response = self.http_client.post(processor_endpoint, payload) + + if response.ok: + task_id = json.loads(response.content)["taskId"] + return task_id + else: + self.logger.info(response.status_code) + raise ValueError(response.content) + + + def launch_harvest_readiness_processor(self, + start_date: str, + end_date: str, + sowing_date: str, + crop: str, + seasonfield_id: str, + geometry: str): + """launch a harvest readiness analytics processor and get the task id in result + + Args: + start_date (str) : the start date used for the request (format YYYY-MM-dd) + end_date (str) : the end date used for the request (format YYYY-MM-dd) + sowing_date(str): sowing date of the field used to calculate potential score + crop (str): the EDA crop code, + seasonfield_id (sfd) : seasonField geosys uniqueId + geometry (str): the geometry to calculate the analytic (WKT or GeoJSON), + + Returns: + taskId (str) + """ + + # build payload for api call + payload = { + "parametersProfile": ProcessorConfiguration.HARVEST_READINESS.value['profile'], + "parameters": { + "start_date": start_date, + "end_date": end_date, + }, + "data": + [ + { + "id": "SeasonField:" + seasonfield_id + "@ID", + "crop": crop, + "sowing_date": sowing_date, + "geom": geometry + } + ] + } + + processor_endpoint: str = urljoin(self.base_url, + GeosysApiEndpoints.LAUNCH_PROCESSOR_ENDPOINT.value.format(ProcessorConfiguration.HARVEST_READINESS.value['api_processor_path'])) + + response = self.http_client.post(processor_endpoint, payload) + + if response.ok: + task_id = json.loads(response.content)["taskId"] + return task_id + else: + self.logger.info(response.status_code) + raise ValueError(response.content) + + def launch_zarc_processor(self, + start_date_emergence: str, + end_date_emergence: str, + nb_days_sowing_emergence: int, + crop: str, + municipio: int, + soil_type: str, + cycle: str, + seasonfield_id:str): + """launch a zarc analytics processor and get the task id in result + + Args: + start_date_emergence (str) : the emergence start date used for the request (format YYYY-MM-dd) + end_date_emergence (str) : the emergence end date used for the request (format YYYY-MM-dd) + nb_days_sowing_emergence (int): the number of days for sowing emergence + crop (str): the zarc crop code, + municipio (int): the municipio id, + soil_type (str): the zarc soil type, + cycle (str): the zarc cycle value, + seasonfield_id (sfd) : seasonField geosys uniqueId + + Returns: + taskId (str) + """ + + # build payload for api call + payload = { + "parametersProfile": ProcessorConfiguration.ZARC.value['profile'], + "data": + [ + { + "id": "SeasonField:" + seasonfield_id + "@ID", + "start_date_emergence": start_date_emergence, + "end_date_emergence": end_date_emergence, + "crop_zarc": crop, + "municipio_zarc": municipio, + "nb_days_sowing_emergence": nb_days_sowing_emergence, + "soil_type_zarc": soil_type, + "cycle_zarc": cycle + } + ] + } + + processor_endpoint: str = urljoin(self.base_url, + GeosysApiEndpoints.LAUNCH_PROCESSOR_ENDPOINT.value.format( + ProcessorConfiguration.ZARC.value['api_processor_path'])) + + response = self.http_client.post(processor_endpoint, payload) + + if response.ok: + task_id = json.loads(response.content)["taskId"] + return task_id + else: + self.logger.info(response.status_code) + raise ValueError(response.content) + diff --git a/geosyspy/services/gis_service.py b/geosyspy/services/gis_service.py new file mode 100644 index 0000000..2cf9a11 --- /dev/null +++ b/geosyspy/services/gis_service.py @@ -0,0 +1,50 @@ +from urllib.parse import urljoin +import logging +from geosyspy.utils.http_client import * + + +class GisService: + + def __init__(self, base_url: str, http_client: HttpClient): + self.base_url: str = base_url + self.http_client: HttpClient = http_client + self.logger = logging.getLogger(__name__) + + def get_municipio_id_from_geometry(self, + geometry:str + ): + """ + method to call Gis Api to retrieve Municipio id from a geometry + + Args: + geometry (str): the geometry (WKT or GeosJson) to retrieve the municipio Id + Returns: + the internal id of the municipio + """ + + payload = { + "properties": ["id"], + "features": [geometry] + } + parameters: str = f"/layerservices/api/v1/layers/BRAZIL_MUNICIPIOS/intersect" + gis_url: str = urljoin(self.base_url, parameters) + response = self.http_client.post(gis_url, payload) + if response.status_code == 200: + dict_response = response.json() + + try: + # extract & return municipio id from response + municipio_id = dict_response[0][0]["properties"]["id"] + if isinstance(municipio_id, int): + return municipio_id + else: + self.logger.warning("No municipio id found for this geometry") + return 0 + except: + return 0 + + else: + self.logger.info(response.status_code) + raise ValueError( + f"No municipio id found for this geometry" + ) \ No newline at end of file diff --git a/geosyspy/services/map_product_service.py b/geosyspy/services/map_product_service.py new file mode 100644 index 0000000..f7058b8 --- /dev/null +++ b/geosyspy/services/map_product_service.py @@ -0,0 +1,89 @@ +import json +import logging +import pandas as pd +from datetime import datetime +from urllib.parse import urljoin +from geosyspy.utils.constants import * +from geosyspy.utils.http_client import * +from requests import HTTPError + + +class MapProductService: + + def __init__(self, base_url: str, http_client: HttpClient, priority_queue: str): + self.base_url: str = base_url + self.http_client: HttpClient = http_client + self.priority_queue: str = priority_queue + self.logger = logging.getLogger(__name__) + + def get_satellite_coverage(self, season_field_id: str, + start_date: datetime, + end_date: datetime, + indicator, + sensors_collection: list[SatelliteImageryCollection] = [ + SatelliteImageryCollection.SENTINEL_2, + SatelliteImageryCollection.LANDSAT_8] + ): + + self.logger.info("Calling APIs for coverage") + start_date: str = start_date.strftime("%Y-%m-%d") + end_date: str = end_date.strftime("%Y-%m-%d") + sensors: list[str] = [elem.value for elem in sensors_collection] + + if indicator == "" or indicator.upper() == "REFLECTANCE" or indicator.upper() == "NDVI": + mapType = "INSEASON_NDVI" + else: + mapType = f"INSEASON_{indicator.upper()}" + + parameters = f"?maps.type={mapType}&Image.Sensor=$in:{'|'.join(sensors)}&CoverageType=CLEAR&$limit=9999&$filter=Image.Date >= '{start_date}' and Image.Date <= '{end_date}'" + + flm_url: str = urljoin( + self.base_url, + GeosysApiEndpoints.FLM_CATALOG_IMAGERY.value.format(season_field_id) + parameters, + ) + response = self.http_client.get( + flm_url, + {"X-Geosys-Task-Code": PRIORITY_HEADERS[self.priority_queue]}, + ) + + if response.status_code == 200: + df = pd.json_normalize(response.json()) + if df.empty: + return df + else: + return df[ + [ + "coverageType", + "maps", + "image.id", + "image.availableBands", + "image.sensor", + "image.soilMaterial", + "image.spatialResolution", + "image.weather", + "image.date", + "seasonField.id", + ] + ] + else: + self.logger.info(response.status_code) + + def get_zipped_tiff(self, field_id: str, + image_id: str, + indicator: str = ""): + parameters = f"/{image_id}/reflectance-map/TOC/image.tiff.zip" + + if indicator != "" and indicator.upper() != "REFLECTANCE": + parameters = f"/{image_id}/base-reference-map/INSEASON_{indicator.upper()}/image.tiff.zip?resolution=Sensor" + + download_tiff_url: str = urljoin( + self.base_url, GeosysApiEndpoints.FLM_COVERAGE.value.format(field_id) + parameters + ) + + response_zipped_tiff = self.http_client.get( + download_tiff_url, + {"X-Geosys-Task-Code": PRIORITY_HEADERS[self.priority_queue]}, + ) + if response_zipped_tiff.status_code != 200: + raise HTTPError("Unable to download tiff.zip file. Server error: " + str(response_zipped_tiff.status_code)) + return response_zipped_tiff \ No newline at end of file diff --git a/geosyspy/services/master_data_management_service.py b/geosyspy/services/master_data_management_service.py new file mode 100644 index 0000000..5a02793 --- /dev/null +++ b/geosyspy/services/master_data_management_service.py @@ -0,0 +1,145 @@ +from urllib.parse import urljoin +import logging + +from geosyspy.utils.constants import * +from geosyspy.utils.helper import Helper +from geosyspy.utils.http_client import * +from datetime import datetime + + +class MasterDataManagementService: + + def __init__(self, base_url: str, http_client: HttpClient): + self.base_url: str = base_url + self.http_client: HttpClient = http_client + self.logger = logging.getLogger(__name__) + + def create_season_field_id(self, polygon: str) -> object: + """Posts the payload below to the master data management endpoint. + + This method returns a season field id. The season field id is required + to request other APIs endpoints. + + Args: + polygon : A string representing a polygon. + + Returns: + A response object. + + """ + + year = datetime.now().year + payload = { + "Geometry": polygon, + "Crop": {"Id": "CORN"}, + "SowingDate": f"{year}-01-01", + } + mdm_url: str = urljoin(self.base_url, GeosysApiEndpoints.MASTER_DATA_MANAGEMENT_ENDPOINT.value+"/seasonfields") + return self.http_client.post(mdm_url, payload) + + def extract_season_field_id(self, polygon: str) -> str: + """Extracts the season field id from the response object. + + Args: + polygon : A string representing a polygon. + + Returns: + A string representing the season field id. + + Raises: + ValueError: The response status code is not as expected. + """ + + response = self.create_season_field_id(polygon) + dict_response = response.json() + + if response.status_code == 400 and "sowingDate" in dict_response["errors"]["body"]: + + text: str = dict_response["errors"]["body"]["sowingDate"][0]["message"] + return Helper.get_matched_str_from_pattern(SEASON_FIELD_ID_REGEX, text) + + elif response.status_code == 201: + return dict_response["id"] + else: + raise ValueError( + f"Cannot handle HTTP response : {str(response.status_code)} : {str(response.json())}" + ) + + def get_season_field_unique_id(self, season_field_id: str) -> str: + """Extracts the season field unique id from the response object. + + Args: + season_field_id : A string representing the seasonfield legacy na id + + Returns: + A string representing the season field unique id. + + Raises: + ValueError: The response status code is not as expected. + """ + + mdm_url: str = urljoin(self.base_url, GeosysApiEndpoints.MASTER_DATA_MANAGEMENT_ENDPOINT.value + f"/seasonfields/{season_field_id}?$fields=externalids") + + response = self.http_client.get(mdm_url) + + dict_response = response.json() + + # extract unique id from response: + if response.status_code == 200: + return dict_response["externalIds"]["id"] + else: + raise ValueError( + f"Cannot handle HTTP response : {str(response.status_code)} : {str(response.json())}" + ) + + + def get_available_crops_code(self) -> [str]: + """Extracts the list of available crops for the connected user + + Args: + + Returns: + A list of string representing the available crop codes + + Raises: + ValueError: The response status code is not as expected. + """ + mdm_url: str = urljoin(self.base_url, GeosysApiEndpoints.MASTER_DATA_MANAGEMENT_ENDPOINT.value + f"/crops?$fields=code&$limit=none") + + response = self.http_client.get(mdm_url) + + dict_response = response.json() + + if response.status_code == 200: + return dict_response + else: + raise ValueError( + f"Cannot handle HTTP response : {str(response.status_code)} : {str(response.json())}" + ) + + + def get_permission_codes(self) -> [str]: + """Extracts the list of available permissions for the connected user + + Args: + + Returns: + A list of string representing the available permissions codes + + Raises: + ValueError: The response status code is not as expected. + """ + mdm_url: str = urljoin(self.base_url, GeosysApiEndpoints.MASTER_DATA_MANAGEMENT_ENDPOINT.value + f"/profile?$fields=permissions&$limit=none") + + response = self.http_client.get(mdm_url) + + dict_response = response.json() + + if response.status_code == 200: + return dict_response + else: + raise ValueError( + f"Cannot handle HTTP response : {str(response.status_code)} : {str(response.json())}" + ) + + diff --git a/geosyspy/services/service_constants.py b/geosyspy/services/service_constants.py new file mode 100644 index 0000000..8e8b9c9 --- /dev/null +++ b/geosyspy/services/service_constants.py @@ -0,0 +1,20 @@ +from enum import Enum + + +class ProcessorConfiguration(Enum): + """ + Available different Geosys Api Processor key path & profile values + """ + PLANTED_AREA = {"profile":"planted_area_default", "api_processor_path":"planted_area"} + POTENTIAL_SCORE = {"profile":"potential_score_default", "api_processor_path":"potential_score"} + BRAZIL_IN_SEASON_CROP_ID = {"profile":"brazil_in_season_crop_id_default", "api_processor_path":"brazil_in_season_crop_id"} + GREENNESS = {"profile":"greenness_default", "api_processor_path":"greenness"} + HARVEST_READINESS = {"profile":"harvest_readiness_default", "api_processor_path":"harvest_readiness"} + ZARC = {"profile":"zarc_default", "api_processor_path":"zarc"} + EMERGENCE_IN_SEASON = {"profile":"inseason-emergence_default", "api_processor_path":"emergence-date"} + EMERGENCE_HISTORICAL = {"profile":"historical-emergence_default", "api_processor_path":"historical-emergence"} + EMERGENCE_DELAY = {"profile": "inseason-emergence_default", "api_processor_path": "emergence-delay"} + HARVEST_IN_SEASON = {"profile":"inseason-harvest_default", "api_processor_path":"inseason-harvest"} + HARVEST_HISTORICAL = {"profile":"historical-harvest_default", "api_processor_path":"historical-harvest"} + MRTS = {"profile":"mrts_default", "api_processor_path":"mrts"} + diff --git a/geosyspy/services/vegetation_time_series_service.py b/geosyspy/services/vegetation_time_series_service.py new file mode 100644 index 0000000..35ad06c --- /dev/null +++ b/geosyspy/services/vegetation_time_series_service.py @@ -0,0 +1,131 @@ +import json +import logging +import pandas as pd +from datetime import datetime +from urllib.parse import urljoin +from geosyspy.utils.constants import * +from geosyspy.utils.http_client import * + + +class VegetationTimeSeriesService: + + def __init__(self, base_url: str, http_client: HttpClient): + self.base_url: str = base_url + self.http_client: HttpClient = http_client + self.logger = logging.getLogger(__name__) + + def get_modis_time_series(self, season_field_id:str, + start_date:datetime, + end_date:datetime, + indicator:str): + """Returns a pandas DataFrame. + + This method returns a time series of 'indicator' within the range + 'start_date' -> 'end_date' as a pandas DataFrame : + + | index | value | + + date | indicator | 1 | + __________________________________ + start-date | indicator | 2 | + + ... | ... | ... | + + end-date | indicator | 8 | + + Args: + season_field_id : A string representing the season_field_id. + start_date : A datetime object representing the start date of the date interval the user wants to filter on. + end_date : A datetime object representing the final date of the date interval the user wants to filter on. + indicator : A string representing the indicator whose time series the user wants. + + Returns: + df : A Pandas DataFrame containing two columns : index and value, and an index called 'date'. + + """ + + self.logger.info("Calling APIs for aggregated time series") + start_date: str = start_date.strftime("%Y-%m-%d") + end_date: str = end_date.strftime("%Y-%m-%d") + parameters: str = f"/values?$offset=0&$limit=None&$count=false&SeasonField.Id={season_field_id}&index={indicator}&$filter=Date >= '{start_date}' and Date <= '{end_date}'" + vts_url: str = urljoin(self.base_url, GeosysApiEndpoints.VTS_ENDPOINT.value + parameters) + response = self.http_client.get(vts_url) + + if response.status_code == 200: + dict_response = response.json() + df = pd.read_json(json.dumps(dict_response)) + df.set_index("date", inplace=True) + return df + else: + self.logger.info(response.status_code) + + + def get_time_series_by_pixel(self, season_field_id: str, + start_date: datetime, + end_date: datetime, + indicator: str) -> pd.DataFrame: + """Returns a pandas DataFrame. + + This method returns a time series of 'indicator' by pixel within the range 'start_date' -> 'end_date' + as well as the pixel's coordinates X,Y in the MODIS's sinusoidal projection as a pandas DataFrame : + + + + | index | value | pixel.id | X | Y | + _______________________________________| + date | indicator | | | | | + ___________________________________________________| + + start-date | indicator | 2 | 1 | | | + + ... | ... | ... | ... | | | + + end-date | indicator | 8 | 1000 | | | + + Args: + polygon : A string representing a polygon. + start_date : A datetime object representing the start date of the date interval the user wants to filter on. + end_date : A datetime object representing the final date of the date interval the user wants to filter on. + indicator : A string representing the indicator whose time series the user wants. + + Returns: + df : A Pandas DataFrame containing five columns : index, value, pixel.id, X, Y and an index called 'date'. + + """ + + self.logger.info("Calling APIs for time series by the pixel") + start_date: str = start_date.strftime("%Y-%m-%d") + end_date: str = end_date.strftime("%Y-%m-%d") + parameters: str = f"/values?$offset=0&$limit=None&$count=false&SeasonField.Id={season_field_id}&index={indicator}&$filter=Date >= '{start_date}' and Date <= '{end_date}'" + vts_url: str = urljoin(self.base_url, GeosysApiEndpoints.VTS_BY_PIXEL_ENDPOINT.value + parameters) + # PSX/PSY : size in meters of one pixel + # MODIS_GRID_LENGTH : theoretical length of the modis grid in meters + # MODIS_GRID_HEIGHT : theoretical height of the modis grid in meters + PSX = 231.65635826 + PSY = -231.65635826 + MODIS_GRID_LENGTH = 4800 * PSX * 36 + MODIS_GRID_HEIGHT = 4800 * PSY * 18 + + response = self.http_client.get(vts_url) + + if response.status_code == 200: + df = pd.json_normalize(response.json()) + df.set_index("date", inplace=True) + + # Extracts h, v, i and j from the pixel dataframe + self.logger.info("Computing X and Y coordinates per pixel... ") + df["h"] = df["pixel.id"].str.extract(r"h(.*)v").astype(int) + df["v"] = df["pixel.id"].str.extract(r"v(.*)i").astype(int) + df["i"] = df["pixel.id"].str.extract(r"i(.*)j").astype(int) + df["j"] = df["pixel.id"].str.extract(r"j(.*)$").astype(int) + + # XUL/YUL : The coordinates of the top left corner of the tile h,v's top left pixel + # X/Y : the coordinates of the top left corner of the i,j pixel + df["XUL"] = (df["h"] + 1) * 4800 * PSX - MODIS_GRID_LENGTH / 2 + df["YUL"] = (df["v"] + 1) * 4800 * PSY + MODIS_GRID_HEIGHT / 2 + df["X"] = df["i"] * PSX + df["XUL"] + df["Y"] = df["j"] * PSY + df["YUL"] + self.logger.info("Done ! ") + return df[["index", "value", "pixel.id", "X", "Y"]] + else: + self.logger.info(response.status_code) \ No newline at end of file diff --git a/geosyspy/services/weather_service.py b/geosyspy/services/weather_service.py new file mode 100644 index 0000000..6ef23bb --- /dev/null +++ b/geosyspy/services/weather_service.py @@ -0,0 +1,63 @@ +import logging +import pandas as pd +from datetime import datetime +from urllib.parse import urljoin + +from shapely import wkt + +from geosyspy.utils.constants import * +from geosyspy.utils.http_client import * + + +class WeatherService: + + def __init__(self, base_url: str, http_client: HttpClient): + self.base_url: str = base_url + self.http_client: HttpClient = http_client + self.logger = logging.getLogger(__name__) + + def get_weather(self, polygon: str, + start_date: datetime, + end_date: datetime, + weather_type: WeatherTypeCollection, + fields: [str]): + """Returns the weather data as a pandas dataframe. + + Args: + polygon : A string representing a polygon. + start_date : A datetime object representing the start date of the date interval the user wants to filter on. + end_date : A datetime object representing the final date of the date interval the user wants to filter on. + weather_type : A list representing the weather type collection ["HISTORICAL_DAILY", "FORECAST_DAILY", "FORECAST_HOURLY"] + fields : A list of strings representing the fields to select (eg: Precipitation, Temperature) + + Returns: + The image's numpy array. + + """ + + if weather_type not in WeatherTypeCollection: + raise ValueError(f"weather_type should be either {[item.value for item in WeatherTypeCollection]}") + weather_type = weather_type.value + if "Date" not in fields: + fields.append("Date") + + start_date: str = start_date.strftime("%Y-%m-%d") + end_date: str = end_date.strftime("%Y-%m-%d") + polygon_wkt = wkt.loads(polygon) + weather_fields: str = ",".join(fields) + parameters: str = f"?%24offset=0&%24limit=None&%24count=false&Location={polygon_wkt.centroid.wkt}&Date=%24between%3A{start_date}T00%3A00%3A00.0000000Z%7C{end_date}T00%3A00%3A00.0000000Z&Provider=GLOBAL1&WeatherType={weather_type}&$fields={weather_fields}" + weather_url: str = urljoin(self.base_url, GeosysApiEndpoints.WEATHER_ENDPOINT.value + parameters) + + response = self.http_client.get(weather_url) + + if response.status_code == 200: + df = pd.json_normalize(response.json()) + if df.empty: + return df + else: + df.set_index("date", inplace=True) + df["Location"] = polygon_wkt.centroid.wkt + return df.sort_index() + else: + self.logger.error(response.status_code) + raise ValueError(response.content) \ No newline at end of file diff --git a/geosyspy/utils/__init__.py b/geosyspy/utils/__init__.py new file mode 100644 index 0000000..b33d820 --- /dev/null +++ b/geosyspy/utils/__init__.py @@ -0,0 +1 @@ +__all__ = ["constants", "geosys_platform_urls", "oauth2_client", "http_client", "helper", "jwt_validator"] diff --git a/geosyspy/utils/constants.py b/geosyspy/utils/constants.py new file mode 100644 index 0000000..a5f1883 --- /dev/null +++ b/geosyspy/utils/constants.py @@ -0,0 +1,166 @@ +from enum import Enum + + +class SatelliteImageryCollection(Enum): + """ + Available imagery collections + """ + MODIS = "MODIS" + SENTINEL_2 = "SENTINEL_2" + LANDSAT_8 = "LANDSAT_8" + LANDSAT_9 = "LANDSAT_9" + + +class WeatherTypeCollection(Enum): + """ + Available weather collections + """ + WEATHER_FORECAST_DAILY = "FORECAST_DAILY" + WEATHER_FORECAST_HOURLY = "FORECAST_HOURLY" + WEATHER_HISTORICAL_DAILY = "HISTORICAL_DAILY" + + +class Env(Enum): + """ + Environment to target (PROD, PREPROD) + """ + PROD = "prod" + PREPROD = "preprod" + + +class Region(Enum): + """ + Region to target (NA) + """ + NA = "na" + + +class Harvest(Enum): + """ + Type of Harvest query used for Harvest analytics processor + """ + HARVEST_IN_SEASON = "IN_SEASON" + HARVEST_HISTORICAL = "HISTORICAL" + +class Emergence(Enum): + """ + Type of Emergence query used for Emergence analytics processor + """ + EMERGENCE_IN_SEASON = "IN_SEASON" + EMERGENCE_HISTORICAL = "HISTORICAL" + EMERGENCE_DELAY = "DELAY" + + +class AgriquestCommodityCode(Enum): + """ + Available AgriQuest Commodity values + """ + ALL_VEGETATION = 33 + ALL_CROPS = 35 + + +class AgriquestFranceBlockCode(Enum): + """ + Available AgriQuest Block codes dedicated to France + """ + FRA_CANTONS = 216 + FRA_COMMUNES = 135 + FRA_DEPARTEMENTS = 226 + + +class AgriquestBlocks(Enum): + """ + Available AgriQuest Block codes + """ + FIRST_LEVEL = 129 + AMU_AUSTRALIA_LEVEL_1 = 205 + AMU_AUSTRALIA_LEVEL_2 = 206 + AMU_CHINA = 202 + AMU_EUROPE_RUSSIA = 197 + AMU_INDIA = 204 + AMU_MEXICO = 212 + AMU_NORTH_AMERICA = 207 + AMU_SOUTH_AFRICA = 213 + BM_REGIONS = 139 + CAR = 140 + COUNTY = 141 + FRA_CANTONS = 216 + FRA_COMMUNES = 135 + FRA_DEPARTEMENTS = 226 + MESOREGION = 131 + NORTH_AFRICA_AMU = 125 + RAION = 127 + SERBIA = 132 + SOUTH_AMERICA_MUNICIPIOS_2020 = 267 + SOUTH_AMERICA_AMU = 115 + SPAIN_COMARCAS = 136 + US_ASD = 130 + WESTERN_AFRICA_AMU = 122 + + +class AgriquestWeatherType(Enum): + """ + Available AgriQuest Weather types + """ + CUMULATIVE_PRECIPITATION = "cumulative-precipitation" + MIN_TEMPERATURE = "min-temperature" + AVERAGE_TEMPERATURE = "average-temperature" + MAX_TEMPERATURE = "max-temperature" + MAX_WIND_SPEED = "max-wind-speed" + RELATIVE_HUMIDITY = "relative-humidity" + SNOW_DEPTH = "snow-depth" + SOIL_MOISTURE = "soil-moisture" + SOLAR_RADIATION = "solar-radiation" + +class ZarcSoilType(Enum): + """ + Available Soil Type values for analytics processor Zarc + """ + SOIL_TYPE_1 = "1" + SOIL_TYPE_2 = "2" + SOIL_TYPE_3 = "3" + NONE = None + +class CropIdSeason(Enum): + """ + Available season values for analytics processor Zarc + """ + SEASON_1="SEASON_1" + SEASON_2="SEASON_2" + + +class ZarcCycleType(Enum): + """ + Available season values for analytics processor Zarc + """ + CYCLE_TYPE_1 = "1" + CYCLE_TYPE_2 = "2" + CYCLE_TYPE_3 = "3" + NONE = None + + +class GeosysApiEndpoints(Enum): + """ + Available Geosys APIs Endpoints + """ + MASTER_DATA_MANAGEMENT_ENDPOINT = "master-data-management/v6" + VTS_ENDPOINT = "vegetation-time-series/v1/season-fields" + VTS_BY_PIXEL_ENDPOINT = "vegetation-time-series/v1/season-fields/pixels" + FLM_CATALOG_IMAGERY = "field-level-maps/v4/season-fields/{}/catalog-imagery" + FLM_COVERAGE = "field-level-maps/v4/season-fields/{}/coverage" + WEATHER_ENDPOINT = "Weather/v1/weather" + ANALYTICS_FABRIC_ENDPOINT = "analytics/metrics" + ANALYTICS_FABRIC_LATEST_ENDPOINT = "analytics/metrics-latest" + ANALYTICS_FABRIC_SCHEMA_ENDPOINT = "analytics/schemas" + AGRIQUEST_ENDPOINT = "agriquest/Geosys.Agriquest.CropMonitoring.WebApi/v0/api" + # Analytics processor + PROCESSOR_EVENTS_ENDPOINT = "analytics-pipeline/v1/processors/events" + LAUNCH_PROCESSOR_ENDPOINT = "analytics-pipeline/v1/processors/{}/launch" + + +LR_SATELLITE_COLLECTION = [SatelliteImageryCollection.MODIS] +MR_SATELLITE_COLLECTION = [SatelliteImageryCollection.LANDSAT_8, SatelliteImageryCollection.LANDSAT_9, + SatelliteImageryCollection.SENTINEL_2] + +PRIORITY_HEADERS = {"bulk": "Geosys_API_Bulk", "realtime": ""} +SEASON_FIELD_ID_REGEX = r"\sId:\s(\w+)," diff --git a/geosyspy/platforms.py b/geosyspy/utils/geosys_platform_urls.py similarity index 52% rename from geosyspy/platforms.py rename to geosyspy/utils/geosys_platform_urls.py index 98b03c8..45db580 100644 --- a/geosyspy/platforms.py +++ b/geosyspy/utils/geosys_platform_urls.py @@ -1,7 +1,6 @@ """ This file contains python dictionaries used to store the Geosys' APIs -URLs for the preprod/prod environments for both of north america -and Europe. +URLs for the preprod/prod environments. """ @@ -9,19 +8,17 @@ 'na': { 'preprod': 'https://identity.preprod.geosys-na.com/v2.1/connect/token', 'prod': 'https://identity.geosys-na.com/v2.1/connect/token' - }, - 'eu': { - 'preprod': 'https://identity.preprod.geosys-na.com/v2.1/connect/token', - 'prod': 'https://identity.geosys-eu.com/v2.1/connect/token' } } GEOSYS_API_URLS = { 'na': { 'preprod': 'https://api-pp.geosys-na.net', 'prod': 'https://api.geosys-na.net' - }, - 'eu': { - 'preprod': 'https://api-pp.geosys-na.net', - 'prod': 'https://api.geosys-eu.net' + } +} +GIS_API_URLS = { + 'na': { + 'preprod': 'https://gis-services-pp.geosys.com', + 'prod': 'https://gis-services.geosys.com' } } diff --git a/geosyspy/utils/helper.py b/geosyspy/utils/helper.py new file mode 100644 index 0000000..0b18482 --- /dev/null +++ b/geosyspy/utils/helper.py @@ -0,0 +1,68 @@ +import re +import json +from shapely import wkt +from shapely.geometry import shape + + +class Helper: + + @staticmethod + def get_matched_str_from_pattern(pattern: str, + text: str) -> str: + """Returns the first occurence of the matched pattern in text. + + Args: + pattern : A string representing the regex pattern to look for. + text : The text to look into. + + Returns: + A string representing the first occurence in text of the pattern. + + """ + p = re.compile(pattern) + return p.findall(text)[0] + + @staticmethod + def convert_to_wkt(geometry): + """ convert a geometry (WKT or geoJson) to WKT + Args: + geometry : A string representing the geometry (WKT or geoJson) + + Returns: + a valid WKT + + """ + + try: + # check if the geometry is a valid WKT + if Helper.is_valid_wkt(geometry): + # return the wkt + return geometry + except: + try: + # check if the geometry is a valid geoJson + geojson_data = json.loads(geometry) + geom = shape(geojson_data) + geometry = geom.wkt + + return geometry + + except ValueError: + # geometry is not a valid geoJson + return None + + @staticmethod + def is_valid_wkt(geometry): + """ check if the geometry is a valid WKT + Args: + geometry : A string representing the geometry + + Returns: + boolean (True/False) + + """ + try: + wkt.loads(geometry) + return True + except ValueError: + return False \ No newline at end of file diff --git a/geosyspy/utils/http_client.py b/geosyspy/utils/http_client.py new file mode 100644 index 0000000..8cb6cc8 --- /dev/null +++ b/geosyspy/utils/http_client.py @@ -0,0 +1,89 @@ +from . import oauth2_client +from oauthlib.oauth2 import TokenExpiredError +from requests_oauthlib import OAuth2Session + + +def renew_access_token(func): + """Decorator used to wrap the Geosys class's http methods. + + This decorator wraps the geosys http methods (get,post...) and checks + whether the used token is still valid or not. If not, it fetches a new token and + uses it to make another request. + + """ + + def wrapper(self, *args, **kwargs): + try: + return func(self, *args, **kwargs) + except TokenExpiredError: + self.access_token = self.__client_oauth.get_refresh_token() + return func(self, *args, **kwargs) + + return wrapper + + +class HttpClient: + + def __init__( + self, + client_id: str, + client_secret: str, + username: str, + password: str, + enum_env: str, + enum_region: str, + bearer_token: str = None + ): + self.__client_oauth = oauth2_client.Oauth2Api( + client_id=client_id, + client_secret=client_secret, + password=password, + username=username, + enum_env=enum_env, + enum_region=enum_region, + bearer_token=bearer_token + ) + self.access_token = self.__client_oauth.token + + self.__client = OAuth2Session(self.__client_oauth.client_id, token=self.__client_oauth.token) + + @renew_access_token + def get(self, url_endpoint: str, headers={}): + """Gets the url_endpopint. + + Args: + url_endpoint : A string representing the url to get. + + Returns: + A response object. + """ + return self.__client.get(url_endpoint, headers=headers) + + @renew_access_token + def post(self, url_endpoint: str, payload: dict, headers={}): + """Posts payload to the url_endpoint. + + Args: + url_endpoint : A string representing the url to post paylaod to. + payload : A python dict representing the payload. + + Returns: + A response object. + """ + return self.__client.post(url_endpoint, json=payload, headers=headers) + + @renew_access_token + def patch(self, url_endpoint: str, payload: dict): + """Patchs payload to the url_endpoint. + + Args: + url_endpoint : A string representing the url to patch paylaod to. + payload : A python dict representing the payload. + + Returns: + A response object. + """ + return self.__client.patch(url_endpoint, json=payload) + + def get_access_token(self): + return self.access_token diff --git a/geosyspy/utils/jwt_validator.py b/geosyspy/utils/jwt_validator.py new file mode 100644 index 0000000..ca910ad --- /dev/null +++ b/geosyspy/utils/jwt_validator.py @@ -0,0 +1,80 @@ +import jwt +import base64 +import json +from datetime import datetime, timezone +from cryptography import x509 +from cryptography.hazmat.backends import default_backend +from cryptography.hazmat.primitives import serialization +import logging + + +logger = logging.getLogger(__name__) + + +def check_token_validity(token: str, certificate_key: str, algorithms=['RS256']) -> bool: + """ + Check the validity of a JWT token. + + Args: + token (str): The JWT token to check. + certificate_key (str): The certificate key in PEM format. + algorithms (list, optional): The encryption algorithms to use. + Default is ['RS256']. + + Returns: + bool: True if the token is valid, False otherwise. + """ + try: + cert_bytes = certificate_key.encode() + cert = x509.load_pem_x509_certificate(cert_bytes, default_backend()) + public_key = cert.public_key() + + # extract public key in PEM format + public_key = public_key.public_bytes( + encoding=serialization.Encoding.PEM, + format=serialization.PublicFormat.SubjectPublicKeyInfo + ).decode() + aud = __get_audience_from_token(token) + decoded_token = jwt.decode(token, public_key, algorithms=algorithms, audience=aud) + expiration_timestamp = decoded_token['exp'] + expiration_datetime = datetime.fromtimestamp(expiration_timestamp, tz=timezone.utc) + + if expiration_datetime > datetime.now(timezone.utc): + return True + else: + return False + except jwt.ExpiredSignatureError: + logger.error("Expired Token") + return False + except jwt.InvalidTokenError as e: + logger.error("Invalid Token." + str(e)) + return False + except Exception as e: + logger.error("Invalid Token." + str(e)) + return False + + +def __get_audience_from_token(token: str) -> str: + """ + Get the audience from a JWT token. + + Args: + token (str): The JWT token. + + Returns: + str: The audience value. + """ + # parse the token (header, payload, signature) + header, payload, signature = token.split('.') + + # add missing data + padding = '=' * (4 - len(payload) % 4) + payload += padding + + # payload decoding & serialization + decoded_payload = base64.urlsafe_b64decode(payload.encode('utf-8')) + payload_json = decoded_payload.decode('utf-8') + + payload_dict = json.loads(payload_json) + audience = payload_dict.get('aud') + return audience diff --git a/geosyspy/utils/logging_config.py b/geosyspy/utils/logging_config.py new file mode 100644 index 0000000..bd66ef3 --- /dev/null +++ b/geosyspy/utils/logging_config.py @@ -0,0 +1,23 @@ +# geosyspy/logging_config.py + +import logging + + +def configure_logging(level=logging.INFO, handlers=None): + """ + Configure logs for geosyspy. + Args: + level (int): log level + handlers ([logging.handler]): logger handlers + """ + logger = logging.getLogger('geosyspy') + if handlers is None: + handlers = [logging.StreamHandler()] # By default, use a console handler + + for handler in handlers: + handler.setLevel(level) + handler.setFormatter(logging.Formatter( + "%(asctime)s - %(name)s - %(levelname)s - %(message)s" + )) + logger.addHandler(handler) + diff --git a/geosyspy/utils/oauth2_client.py b/geosyspy/utils/oauth2_client.py new file mode 100644 index 0000000..25c4573 --- /dev/null +++ b/geosyspy/utils/oauth2_client.py @@ -0,0 +1,68 @@ +from oauthlib.oauth2 import LegacyApplicationClient +from requests_oauthlib import OAuth2Session +from . import geosys_platform_urls +import logging + + +class Oauth2Api: + def __init__( + self, + client_id: str, + client_secret: str, + username: str, + password: str, + enum_env: str, + enum_region: str, + bearer_token: str = None + ): + """Initializes a Geosys instance with the required credentials + to connect to the GEOSYS API. + """ + self.logger = logging.getLogger(__name__) + self.client_id = client_id + self.server_url = geosys_platform_urls.IDENTITY_URLS[enum_region][enum_env] + self.client_secret = client_secret + self.token = None + self.username = username + self.password = password + + if bearer_token: + self.token = {"access_token": bearer_token} + else: + self.__authenticate() + + def __authenticate(self): + """Authenticates the http_client to the API. + + This method connects the user to the API which generates a token that + will be valid for one hour. A refresh token is also generated, which + makes it possible for the http methods wrappers to get a new token + once the previous one is no more valid through the renew_access_token + decorator. This method is only run once when a Geosys object is instantiated. + + """ + + try: + oauth = OAuth2Session( + client=LegacyApplicationClient(client_id=self.client_id) + ) + self.token = oauth.fetch_token( + token_url=self.server_url, + username=self.username, + password=self.password, + client_id=self.client_id, + client_secret=self.client_secret, + ) + self.token["refresh_token"] = oauth.cookies["refresh_token"] + self.logger.info("Authenticated") + except Exception as e: + logging.error(e) + + def get_refresh_token(self): + """Fetches a new token.""" + client = OAuth2Session(self.client_id, token=self.token) + return client.refresh_token( + self.server_url, + client_id=self.client_id, + client_secret=self.client_secret, + ) diff --git a/install.md b/install.md index 99d992d..f13a6b9 100644 --- a/install.md +++ b/install.md @@ -6,13 +6,19 @@ Geosyspy requires **rasterio** to work and rasterio in turn requires **GDAL**. Y * [Rasterio](https://www.lfd.uci.edu/~gohlke/pythonlibs/#rasterio)
-For instance, if you have a **python 3.9 distribution** installed on a **64 bits Windows machine**, you will need to find and download the files of which the names contain **cp39** (which means CPython 3.9 which comes with the Python3.9 distribution) and **amd64** (which means a machine running on a 64 bits cpu). +For instance, if you have a **python 3.10 distribution** installed on a **64 bits Windows machine**, you will need to find and download the files of which the names contain **cp39** (which means CPython 3.9 which comes with the Python3.9 distribution) and **amd64** (which means a machine running on a 64 bits cpu).
-If you want to install GDAL 3.4.2, rasterio 1.2.10 and geosyspy on a 64 bits machine running Python3.9, below are the commands (to run in a folder with the downloaded wheels) : +If you want to install GDAL 3.4.3, rasterio 1.2.10 and geosyspy on a 64 bits machine running Python3.10, below are the commands (to run in a folder with the downloaded wheels) : pip install -U pip pip install -U setuptools - pip install GDAL-3.4.2-cp39-cp39-win_amd64 - pip install rasterio-1.2.10-cp39-cp39-win_amd64 + pip install GDAL‑3.4.3‑cp310‑cp310‑win_amd64.whl + pip install rasterio‑1.2.10‑cp310‑cp310‑win_amd64.whl pip install geosyspy + +
+If you're using Conda, there are the steps to follow : + + conda install pip + pip install geosyspy \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index b9e33db..3a194e0 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -9,4 +9,5 @@ plugins: nav: - Home: index.md - Geosys class: geosys-reference.md - - Constants: constants-reference.md \ No newline at end of file + - Constants: constants-reference.md + - Utils: utils.md \ No newline at end of file diff --git a/notebook_utils.py b/notebook_utils.py new file mode 100644 index 0000000..0605cbe --- /dev/null +++ b/notebook_utils.py @@ -0,0 +1,209 @@ +import boto3 +import os +from urllib.parse import urlparse +from io import StringIO +import glob +import json +import pandas as pd +import matplotlib.pyplot as plt + +def read_mrts_data(str_path): + """ Read MRTS outputs dowloaded from AWS + return dict containing path on files and dict containing data + + Args: + str_path (_string_): path containing MRTS files + + Returns: + data_files: data_files = { + "metadata": metadata_file path, + "raw_df" : raw data path, + "df" : df denoised path, + "timeserie" : ts path + } + data_files: dict_data = { + "metadata" : metadata in json, + "raw_df" : dataframe containing raw data, + "df" : dataframe containing data denoised if no smmother, + "ts" : dataframe containing timeserie denoised if smmother + } + + """ + path_data = os.path.join(str_path.split('/')[-3],str_path.split('/')[-2],str_path.split('/')[-1]) + + metadata_file = glob.glob(os.path.join(path_data,"*.json"))[0] + with open(metadata_file, 'r') as f: + metadata = json.load(f) + + str_index = metadata['parameters']['index'] + str_func = metadata['parameters']['aggregation'] + str_smoother = metadata['parameters']['smoother'] + raw_data = metadata['parameters']['raw_data'] + + data_files = { + "metadata": metadata_file, + "raw_df" : glob.glob(os.path.join(path_data,"MRTS-" + str_index + str_func + "-Raw-2*.csv"))[0] if raw_data else None, + "df" : glob.glob(os.path.join(path_data,"MRTS-" + str_index + str_func + "-2*.csv"))[0] if str_smoother == "false" else None, + "timeserie" : glob.glob(os.path.join(path_data,"MRTS-" + str_index + str_func + "-2*.csv"))[0] if str_smoother != "false" else None + } + dict_data = { + "metadata" : metadata, + "raw_df" : pd.read_csv(data_files['raw_df'], sep=",") if raw_data else None, + "df" : pd.read_csv(data_files['df'], sep=",") if str_smoother == "false" else None, + "ts" : pd.read_csv(data_files['timeserie'], sep=",") if str_smoother != "false" else None + } + + return data_files, dict_data + +def plot_mrts_dict(dict_data): + """ Plot MRTS outputs from the dict generated by the function read_mrts_data_from_awsS3 + or the function read_mrts_data + + Args: + dict_data (_dictionnaire_): dict_data = { + "metadata" : metadata in json, + "raw_df" : dataframe containing raw data, + "df" : dataframe containing data denoised if no smmother, + "ts" : dataframe containing timeserie denoised if smmother + } + """ + fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(10,6)) + metadata = dict_data['metadata'] + index = metadata['parameters']['index'] + + if index != 'reflectances': + if dict_data['raw_df'] is not None: + raw_df = dict_data['raw_df'] + raw_df['date'] = pd.to_datetime(raw_df['date'], format='%Y-%m-%d') + raw_df = raw_df.set_index('date') + plt.plot(raw_df[index] ,'.', markersize=12, label=index) + plt.plot(raw_df[index].loc[raw_df['denoised'] == True] ,'x', color='r', markersize=12, label='Denoised') + if dict_data['df'] is not None: + df = dict_data['df'] + df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d') + df = df.set_index('date') + plt.plot(df['vegetation_index'] ,'.', markersize=12, label=index) + if dict_data['ts'] is not None: + df_smooth = dict_data['ts'] + df_smooth['date'] = pd.to_datetime(df_smooth['date'], format='%Y-%m-%d') + df_smooth = df_smooth.set_index('date') + plt.plot(df_smooth, linewidth=2, label='Smooth ' + index) + else: + if dict_data['raw_df'] is not None: + raw_df = dict_data['raw_df'] + raw_df['date'] = pd.to_datetime(raw_df['date'], format='%Y-%m-%d') + raw_df = raw_df.set_index('date') + plt.plot(raw_df['nir'] ,'.', markersize=12, label='nir') + plt.plot(raw_df['nir'].loc[raw_df['denoised'] == True] ,'x', color='r', markersize=12, label='Denoised') + plt.plot(raw_df['red'] ,'.', markersize=12, label='red') + plt.plot(raw_df['red'].loc[raw_df['denoised'] == True] ,'x', color='r', markersize=12) + plt.plot(raw_df['green'] ,'.', markersize=12, label='green') + plt.plot(raw_df['green'].loc[raw_df['denoised'] == True] ,'x', color='r', markersize=12) + plt.plot(raw_df['blue'] ,'.', markersize=12, label='blue') + plt.plot(raw_df['blue'].loc[raw_df['denoised'] == True] ,'x', color='r', markersize=12) + if dict_data['df'] is not None: + df = dict_data['df'] + df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d') + df = df.set_index('date') + plt.plot(df['nir'] ,'.', markersize=12, label=index) + plt.plot(df['red'] ,'.', markersize=12, label=index) + plt.plot(df['green'] ,'.', markersize=12, label=index) + plt.plot(df['blue'] ,'.', markersize=12, label=index) + if dict_data['ts'] is not None: + df_smooth = dict_data['ts'] + df_smooth['date'] = pd.to_datetime(df_smooth['date'], format='%Y-%m-%d') + df_smooth = df_smooth.set_index('date') + plt.plot(df_smooth['nir'], linewidth=2, label='Smooth ' + 'nir') + plt.plot(df_smooth['red'], linewidth=2, label='Smooth ' + 'red') + plt.plot(df_smooth['green'], linewidth=2, label='Smooth ' + 'green') + plt.plot(df_smooth['blue'], linewidth=2, label='Smooth ' + 'blue') + + if index == 'ndvi': + plt.ylim((0,1)) + elif index == 'evi': + plt.ylim((0,1)) + elif index == 'cvin': + plt.ylim((0,1)) + elif index == 'gndvi': + plt.ylim((0,1)) + elif index == 'ndwi': + plt.ylim((0,1)) + elif index == 'reflectances': + plt.ylim((0,1)) + elif index == 's2rep': + plt.ylim((710,730)) + ax.set_ylabel(index) + plt.legend() + plt.grid(True) + plt.show() + +def read_mrts_from_awsS3(str_s3_path): + """ Read MRTS outputs direclty from S3 AWS + return dict containing path on files and dict containing data + + Args: + str_s3_path (_string_): URI S3 (aws) + + Returns: + data_files: dict_data = { + "metadata" : metadata in json, + "raw_df" : dataframe containing raw data, + "df" : dataframe containing data denoised if no smmother, + "ts" : dataframe containing timeserie denoised if smmother + } + + """ + s3 = boto3.resource('s3') + parsed_url = urlparse(str_s3_path) + bucket_name = parsed_url.netloc + directory_name = parsed_url.path.lstrip('/') + bucket = s3.Bucket(bucket_name) + s3 = boto3.client('s3') + for obj in bucket.objects.filter(Prefix=directory_name): + response = s3.get_object(Bucket=bucket_name, Key=obj.key) + file_content = response['Body'].read().decode('utf-8') + if obj.key.split('/')[-1].split('.')[-1] == 'json' : + # Utilisez la méthode `get_object` pour récupérer l'objet du fichier + metadata = json.load(StringIO(file_content)) + elif obj.key.split('/')[-1].split('.')[-1] == 'csv' : + if 'Raw' in obj.key.split('/')[-1] : + csv_data = StringIO(file_content) + raw_df = pd.read_csv(csv_data, sep=",") + else : + csv_data = StringIO(file_content) + df = pd.read_csv(csv_data, sep=",") + + str_smoother = metadata['parameters']['smoother'] + raw_data = metadata['parameters']['raw_data'] + + dict_data = { + "metadata" : metadata, + "raw_df" : raw_df if raw_data else None, + "df" : df if str_smoother == "false" else None, + "ts" : df if str_smoother != "false" else None + } + return dict_data + +def plot_mrts_from_aws(str_s3_path): + """ Plot MRTS outputs stored on S3 AWS + Args: + str_s3_path (_string_): URI S3 (aws) + """ + dict_data = read_mrts_from_awsS3(str_s3_path) + plot_mrts_dict(dict_data) + +def download_s3_files(str_s3_path): + """download files stored on aws S3 bucket + + Args: + str_s3_path (_string_): URI S3 (aws) + """ + s3 = boto3.resource('s3') + parsed_url = urlparse(str_s3_path) + bucket_name = parsed_url.netloc + directory_name = parsed_url.path.lstrip('/') + bucket = s3.Bucket(bucket_name) + for obj in bucket.objects.filter(Prefix=directory_name): + if not os.path.exists(os.path.dirname(obj.key)): + os.makedirs(os.path.dirname(obj.key)) + bucket.download_file(obj.key, obj.key) \ No newline at end of file diff --git a/requirements-dev.txt b/requirements-dev.txt index 37093c8..6bb5d57 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -4,4 +4,13 @@ flake8 black twine mkdocs -mkdocstrings \ No newline at end of file +mkdocstrings-python +requests-mock +pandas +shapely +xarray +requests +requests-oauthlib +oauthlib +matplotlib +boto3 \ No newline at end of file diff --git a/requirements-notebook.txt b/requirements-notebook.txt new file mode 100644 index 0000000..60377bd --- /dev/null +++ b/requirements-notebook.txt @@ -0,0 +1,4 @@ +ipykernel +python-dotenv +matplotlib +boto3 \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 15823cf..7aad9db 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,7 +2,11 @@ requests requests-oauthlib oauthlib scipy -pandas==1.3.5 +pandas shapely rasterio -xarray \ No newline at end of file +xarray +retrying +pip-system-certs +PyJWT +cryptography \ No newline at end of file diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 224a779..0000000 --- a/setup.cfg +++ /dev/null @@ -1,2 +0,0 @@ -[metadata] -description-file = README.md \ No newline at end of file diff --git a/setup.py b/setup.py index d9495bb..0a1ea51 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ import pathlib # Third party imports -from setuptools import setup +from setuptools import setup, find_packages # The directory containing this file HERE = pathlib.Path(__file__).resolve().parent @@ -22,8 +22,8 @@ long_description=README, long_description_content_type="text/markdown", author="Geosys", - packages=["geosyspy"], + packages=find_packages(), include_package_data=True, data_files=[('', ['VERSION.txt'])], - install_requires=["requests", "requests-oauthlib", "oauthlib", "scipy", "pandas==1.3.5", "shapely", "rasterio", "xarray"] -) + install_requires=["requests", "requests-oauthlib", "oauthlib", "scipy", "pandas", "shapely", "rasterio", "xarray", "retrying"] +) \ No newline at end of file diff --git a/test_geosyspy/test_geosys.py b/test_geosyspy/test_geosys.py deleted file mode 100644 index 271b67b..0000000 --- a/test_geosyspy/test_geosys.py +++ /dev/null @@ -1,188 +0,0 @@ -from datetime import datetime -from geosyspy import Geosys -from dotenv import load_dotenv -import os -import datetime as dt -import numpy as np -from geosyspy.constants import Collection, Env, Region -# read .env file -load_dotenv() - -API_CLIENT_ID = os.getenv("API_CLIENT_ID") -API_CLIENT_SECRET = os.getenv("API_CLIENT_SECRET") -API_USERNAME = os.getenv("API_USERNAME") -API_PASSWORD = os.getenv("API_PASSWORD") - - -class TestGeosys: - - # polygon with two pixels : mh11v4i225j4612, mh11v4i226j4612 - polygon = "POLYGON((-91.29152885756007 40.39177489815265,-91.28403789132507 40.391776131485386,-91.28386736508233 40.389390758655935,-91.29143832829979 40.38874592864832,-91.29152885756007 40.39177489815265))" - client = Geosys( - API_CLIENT_ID, API_CLIENT_SECRET, API_USERNAME, API_PASSWORD, Env.PREPROD, Region.NA - ) - - def test_authenticate(self): - assert set( - [ - "access_token", - "expires_in", - "token_type", - "scope", - "expires_at", - "refresh_token", - ] - ).issubset(set(self.client.token.keys())) - - def test_get_time_series_modis_ndvi(self): - - start_date = dt.datetime.strptime("2020-01-01", "%Y-%m-%d") - end_date = dt.datetime.strptime("2020-01-07", "%Y-%m-%d") - - df = self.client.get_time_series( - self.polygon, start_date, end_date, Collection.MODIS, ["NDVI"] - ) - - assert df.index.name == "date" - assert "value" in df.columns - assert "index" in df.columns - assert len(df.index) == 7 - date_range = list(map(lambda x: x.strftime("%Y-%m-%d"), df.index)) - assert set( - [ - "2020-01-01", - "2020-01-02", - "2020-01-03", - "2020-01-04", - "2020-01-05", - "2020-01-06", - "2020-01-07", - ] - ).issubset(set(date_range)) - - def test_get_satellite_image_time_series_modis_ndvi(self): - - start_date = dt.datetime.strptime("2020-01-01", "%Y-%m-%d") - end_date = dt.datetime.strptime("2020-01-07", "%Y-%m-%d") - - df = self.client.get_satellite_image_time_series( - self.polygon, start_date, end_date, [Collection.MODIS], ["NDVI"] - ) - assert df.index.name == "date" - assert set(["value", "index", "pixel.id"]).issubset(set(df.columns)) - assert np.all((df["index"].values == "NDVI")) - assert len(df.index) == 14 - - assert set( - [ - "2020-01-01", - "2020-01-02", - "2020-01-03", - "2020-01-04", - "2020-01-05", - "2020-01-06", - "2020-01-07", - ] - ).issubset(set(df.index)) - - assert set(["mh11v4i225j4612", "mh11v4i226j4612"]).issubset(set(df["pixel.id"])) - - def test_get_satellite_coverage_image_references(self): - start_date = dt.datetime.strptime("2021-01-01", "%Y-%m-%d") - end_date = dt.datetime.strptime("2022-01-01", "%Y-%m-%d") - info, images_references = self.client.get_satellite_coverage_image_references( - self.polygon, start_date, end_date, [Collection.SENTINEL_2] - ) - - assert set( - [ - "coverageType", - "image.id", - "image.availableBands", - "image.sensor", - "image.soilMaterial", - "image.spatialResolution", - "image.weather", - "image.date", - "seasonField.id", - ] - ).issubset(set(info.columns)) - - assert len(info) == len(images_references) - for i, image_info in info.iterrows(): - assert ( - image_info["image.date"], - image_info["image.sensor"], - ) in images_references - - def get_time_series_weather_historical_daily(self): - - start_date = dt.datetime.strptime("2021-01-01", "%Y-%m-%d") - end_date = dt.datetime.strptime("2022-01-01", "%Y-%m-%d") - indicators = [ - "Precipitation", - "Temperature.Ground", - "Temperature.Standard", - "Temperature.StandardMax", - "Date", - ] - - df = self.client.get_time_series( - self.polygon, - start_date, - end_date, - Collection.WEATHER_HISTORICAL_DAILY, - indicators, - ) - - assert set( - [ - "precipitation.cumulative", - "precipitation.probabilities", - "temperature.ground", - "temperature.standard", - "temperature.standardMax", - ] - ).issubset(set(df.columns)) - assert df.index.name == "date" - - # def test_get_metrics(self): - - # lai_radar_polygon = "POLYGON((-52.72591542 -18.7395779,-52.72604885 -18.73951122,-52.72603114 -18.73908689,-52.71556835 -18.72490316,-52.71391916 -18.72612966,-52.71362802 -18.72623726,-52.71086473 -18.72804231,-52.72083542 -18.74173696,-52.72118937 -18.74159174,-52.72139229 -18.7418552,-52.72600257 -18.73969719,-52.72591542 -18.7395779))" - # schema_id = "LAI_RADAR" - # start_date = dt.datetime.strptime("2022-01-24", "%Y-%m-%d") - # end_date = dt.datetime.strptime("2022-01-30", "%Y-%m-%d") - # df = self.client.get_metrics(lai_radar_polygon, schema_id, start_date, end_date) - - # assert set( - # [ - # "Values.RVI", - # "Values.LAI", - # "Schema.Id", - # ] - # ).issubset(set(df.columns)) - # assert set( - # [ - # "2022-01-24T00:00:00Z", - # "2022-01-25T00:00:00Z", - # "2022-01-26T00:00:00Z", - # "2022-01-27T00:00:00Z", - # "2022-01-28T00:00:00Z", - # "2022-01-29T00:00:00Z", - # "2022-01-30T00:00:00Z", - # ] - # ).issubset(set(df.index)) - # assert df.index.name == "date" - - def test_get_satellite_image_time_series(self): - start_date = dt.datetime.strptime("2021-03-01", "%Y-%m-%d") - end_date = dt.datetime.strptime("2021-04-30", "%Y-%m-%d") - dataset = self.client.get_satellite_image_time_series( - self.polygon, - start_date, - end_date, - collections=[Collection.SENTINEL_2, Collection.LANDSAT_8], - indicators=["Reflectance"], - ) - - assert dict(dataset.dims) == {'band': 5, 'y': 36, 'x': 66, 'time': 7} diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/resources/Refletance_map_mock.tiff.zip b/tests/resources/Refletance_map_mock.tiff.zip new file mode 100644 index 0000000..5569e48 Binary files /dev/null and b/tests/resources/Refletance_map_mock.tiff.zip differ diff --git a/tests/resources/agriquest_ndvi_data_mock_http_response b/tests/resources/agriquest_ndvi_data_mock_http_response new file mode 100644 index 0000000..4cdb3a2 --- /dev/null +++ b/tests/resources/agriquest_ndvi_data_mock_http_response @@ -0,0 +1,26474 @@ +[ + [ + "Sep=," + ], + [ + "Name", + "X", + "Y", + "Area (km2)", + "Start", + "End", + "Value" + ], + [ + "dm6zd7", + "-120.609779853754", + "50.1815140859714", + "2076206.19350909", + "06/05/23", + "06/05/23", + "0.67705584" + ], + [ + "pm71ed", + "-116.26967229539", + "49.3142983301064", + "1140818.84899762", + "06/05/23", + "06/05/23", + "0.71442443" + ], + [ + "37ndaz", + "-121.431647767903", + "50.8957142214965", + "859701.520677822", + "06/05/23", + "06/05/23", + "0.6286994" + ], + [ + "apx5rz", + "-121.101796289793", + "49.5280358248754", + "849852.287689543", + "06/05/23", + "06/05/23", + "0.73514" + ], + [ + "mp6qwd", + "-119.253577028055", + "50.1638042845403", + "1371497.13784112", + "06/05/23", + "06/05/23", + "0.72176677" + ], + [ + "jw6kve", + "-117.994674889783", + "50.5685229062013", + "1703502.26482216", + "06/05/23", + "06/05/23", + "0.7171638" + ], + [ + "vk7xgj", + "-118.803481895457", + "51.7275426784045", + "1287704.04347703", + "06/05/23", + "06/05/23", + "0.62263536" + ], + [ + "9nx4wg", + "-118.574349947713", + "49.8208601299", + "1365700.3381975", + "06/05/23", + "06/05/23", + "0.68002784" + ], + [ + "b3q5dz", + "-124.301156896202", + "53.7821689590918", + "2052197.38733744", + "06/05/23", + "06/05/23", + "0.6535695" + ], + [ + "wn7dzd", + "-118.784280860399", + "49.3328820374285", + "1861631.48948028", + "06/05/23", + "06/05/23", + "0.73274493" + ], + [ + "kn5lwv", + "-119.634993688055", + "52.2668945973016", + "1119052.06749934", + "06/05/23", + "06/05/23", + "0.6184954" + ], + [ + "n3r9eg", + "-120.305188301967", + "57.0856784113767", + "1635860.45254165", + "06/05/23", + "06/05/23", + "0.71146595" + ], + [ + "ejrdag", + "-123.696705329841", + "50.2169407628543", + "1536379.76439757", + "06/05/23", + "06/05/23", + "0.60706234" + ], + [ + "6nxaqp", + "-121.215639986075", + "52.416860388933", + "2698734.75266223", + "06/05/23", + "06/05/23", + "0.7489488" + ], + [ + "7zrmqz", + "-120.631525374175", + "51.5600137316672", + "2223878.45618404", + "06/05/23", + "06/05/23", + "0.6794009" + ], + [ + "ldgakn", + "-117.337689510684", + "50.149663350571", + "866342.82766837", + "06/05/23", + "06/05/23", + "0.5469087" + ], + [ + "1kwaq7", + "-117.573731215132", + "49.6057205829823", + "2248805.52967014", + "06/05/23", + "06/05/23", + "0.7068052" + ], + [ + "z5rjze", + "-123.825578191417", + "50.8956926192869", + "1085548.2153533", + "06/05/23", + "06/05/23", + "0.27819633" + ], + [ + "xlxaz4", + "-120.490369669896", + "55.7082529694189", + "1230574.10197199", + "06/05/23", + "06/05/23", + "0.7949561" + ], + [ + "qj5lz4", + "-122.030615149828", + "50.0159060690677", + "886383.777748016", + "06/05/23", + "06/05/23", + "0.6738593" + ], + [ + "4nx9qx", + "-126.708525396278", + "54.1892309055358", + "2714985.73089404", + "06/05/23", + "06/05/23", + "0.60611445" + ], + [ + "5zx1qj", + "-120.82053997838", + "56.206670531874", + "862925.894009649", + "06/05/23", + "06/05/23", + "0.76955503" + ], + [ + "g569jj", + "-121.143517410806", + "56.565997562322", + "785732.672005977", + "06/05/23", + "06/05/23", + "0.7375239" + ], + [ + "rx7wz9", + "-124.887045291937", + "53.1750764328143", + "822617.210416747", + "06/05/23", + "06/05/23", + "0.57955694" + ], + [ + "dm6z37", + "-119.320598033779", + "51.5136198660928", + "1138072.65027518", + "06/05/23", + "06/05/23", + "0.68287367" + ], + [ + "pm71rd", + "-122.614062348962", + "49.742024079005", + "1078856.04814501", + "06/05/23", + "06/05/23", + "0.6478866" + ], + [ + "37ndqz", + "-126.12012917335", + "53.107960977426", + "1398382.45622844", + "06/05/23", + "06/05/23", + "0.51612324" + ], + [ + "apx56z", + "-125.355210702188", + "52.3133029186477", + "2429507.32867935", + "06/05/23", + "06/05/23", + "0.5809446" + ], + [ + "mp6qrd", + "-121.333196240341", + "50.845183610085", + "1376572.02603583", + "06/05/23", + "06/05/23", + "0.5880093" + ], + [ + "jw6kbe", + "-121.380999423168", + "51.5580684251306", + "925976.179940979", + "06/05/23", + "06/05/23", + "0.6579545" + ], + [ + "vk7xzj", + "-122.391201566541", + "50.601406035751", + "1445921.57766747", + "06/05/23", + "06/05/23", + "0.6341071" + ], + [ + "9nx4pg", + "-126.225098909478", + "53.5396238908896", + "803793.67935519", + "06/05/23", + "06/05/23", + "0.5250241" + ], + [ + "b3q5vz", + "-124.02960341398", + "53.9569487599901", + "735339.811583113", + "06/05/23", + "06/05/23", + "0.6952345" + ], + [ + "wn7ded", + "-122.77921599075", + "49.6464817720935", + "3753691.55918427", + "06/05/23", + "06/05/23", + "0.79262334" + ], + [ + "kn5ldv", + "-120.911543460432", + "57.3246251381663", + "961402.725442998", + "06/05/23", + "06/05/23", + "0.6730141" + ], + [ + "n3r9ag", + "-119.576845200468", + "50.9317531416324", + "2081527.91823322", + "06/05/23", + "06/05/23", + "0.764902" + ], + [ + "ejrdwg", + "-120.056438700565", + "49.5183201881986", + "2256356.37423627", + "06/05/23", + "06/05/23", + "0.66974276" + ], + [ + "6nxagp", + "-122.070241772761", + "51.8386450546294", + "1378304.68942401", + "06/05/23", + "06/05/23", + "0.6916721" + ], + [ + "7zrmgz", + "-123.752578413325", + "52.7378292924023", + "1111817.26478379", + "06/05/23", + "06/05/23", + "0.5535695" + ], + [ + "ldgapn", + "-123.384226277059", + "51.1164443391542", + "965175.17455413", + "06/05/23", + "06/05/23", + "0.6354538" + ], + [ + "1kwag7", + "-124.010161585154", + "52.1593748822684", + "2582963.48616656", + "06/05/23", + "06/05/23", + "0.59096056" + ], + [ + "z5rjde", + "-123.196102771437", + "51.4803019415806", + "1732572.54828533", + "06/05/23", + "06/05/23", + "0.6178614" + ], + [ + "xlxa64", + "-123.139473155323", + "52.4147092576066", + "1428024.22129252", + "06/05/23", + "06/05/23", + "0.65413004" + ], + [ + "qj5lv4", + "-121.452992005775", + "49.1489200737274", + "150689.352152918", + "06/05/23", + "06/05/23", + "0.75828123" + ], + [ + "4nx9gx", + "-125.033271362466", + "53.7113008599016", + "692857.169976407", + "06/05/23", + "06/05/23", + "0.6050967" + ], + [ + "5zx1gj", + "-106.469087925907", + "50.4424610977943", + "962210.795618995", + "06/05/23", + "06/05/23", + "0.59496343" + ], + [ + "g569nj", + "-105.700812879725", + "52.2290890398728", + "1570983.4371229", + "06/05/23", + "06/05/23", + "0.4125395" + ], + [ + "rx7w99", + "-109.618477972472", + "52.3859864047267", + "1159393.32946556", + "06/05/23", + "06/05/23", + "0.4215866" + ], + [ + "dm6zb7", + "-101.981155582427", + "50.9331257641616", + "1327363.62670389", + "06/05/23", + "06/05/23", + "0.50222456" + ], + [ + "pm71jd", + "-107.743931316084", + "51.4996073972755", + "858701.522764704", + "06/05/23", + "06/05/23", + "0.3587251" + ], + [ + "37ndgz", + "-108.161427846031", + "49.3919044023069", + "1707961.64316777", + "06/05/23", + "06/05/23", + "0.46457553" + ], + [ + "apx5jz", + "-109.38331785092", + "49.8021351324465", + "1245730.32034268", + "06/05/23", + "06/05/23", + "0.5923021" + ], + [ + "dm6zbn", + "-104.576664343406", + "53.6364293033791", + "891793.49570956", + "06/05/23", + "06/05/23", + "0.71762073" + ], + [ + "pm71jx", + "-108.707515256338", + "54.0933863900622", + "1377078.85696194", + "06/05/23", + "06/05/23", + "0.6623417" + ], + [ + "37ndgm", + "-103.38319108273", + "50.3251109299013", + "2932142.66637612", + "06/05/23", + "06/05/23", + "0.4081109" + ], + [ + "apx5jk", + "-106.788020632314", + "51.9996548768831", + "1372837.21601619", + "06/05/23", + "06/05/23", + "0.53768045" + ], + [ + "mp6q95", + "-102.400608390019", + "49.3301569513771", + "1025859.1319217", + "06/05/23", + "06/05/23", + "0.41937348" + ], + [ + "jw6kmk", + "-107.93689260278", + "53.8794413117553", + "1437437.41015029", + "06/05/23", + "06/05/23", + "0.76148844" + ], + [ + "vk7xq5", + "-103.422184864748", + "49.6043164908216", + "1054491.78977992", + "06/05/23", + "06/05/23", + "0.39032182" + ], + [ + "9nx4a3", + "-105.643634258871", + "51.6146003822218", + "1150691.55106647", + "06/05/23", + "06/05/23", + "0.48292926" + ], + [ + "b3q5rg", + "-102.134383596071", + "49.9758547414915", + "1522436.22062167", + "06/05/23", + "06/05/23", + "0.5960939" + ], + [ + "wn7dq1", + "-104.08504931021", + "50.6365052605795", + "1004529.78625143", + "06/05/23", + "06/05/23", + "0.40985236" + ], + [ + "kn5ljn", + "-107.360664564263", + "52.9493755276223", + "2330736.02670669", + "06/05/23", + "06/05/23", + "0.5269701" + ], + [ + "n3r9bw", + "-107.464009473744", + "49.9859503629891", + "838810.433202276", + "06/05/23", + "06/05/23", + "0.36087215" + ], + [ + "ejrdln", + "-104.704365572559", + "52.8343740069113", + "773728.07914322", + "06/05/23", + "06/05/23", + "0.49180612" + ], + [ + "6nxad6", + "-105.446737913277", + "50.5746928138572", + "1710175.58085522", + "06/05/23", + "06/05/23", + "0.3730271" + ], + [ + "7zrmpj", + "-104.685404970628", + "50.2462243917239", + "800454.174684681", + "06/05/23", + "06/05/23", + "0.27986464" + ], + [ + "ldgav5", + "-103.732521491944", + "51.8875545314782", + "1958011.09603929", + "06/05/23", + "06/05/23", + "0.43668255" + ], + [ + "1kwanw", + "-103.339828124472", + "52.3519324224164", + "1093754.42292424", + "06/05/23", + "06/05/23", + "0.7689475" + ], + [ + "z5rjqg", + "-102.688497995522", + "53.5162427770583", + "1029148.97829503", + "06/05/23", + "06/05/23", + "0.74900997" + ], + [ + "xlxaqz", + "-106.375962549035", + "50.7708046897675", + "879095.521196646", + "06/05/23", + "06/05/23", + "0.5169521" + ], + [ + "qj5lnv", + "-107.928372661002", + "52.073944691221", + "1057786.38057655", + "06/05/23", + "06/05/23", + "0.41491672" + ], + [ + "4nx977", + "-109.505448453565", + "54.1156070786445", + "1515505.82010487", + "06/05/23", + "06/05/23", + "0.79031885" + ], + [ + "5zx1lw", + "-105.098178084954", + "49.6652449370183", + "1800361.75398295", + "06/05/23", + "06/05/23", + "0.45409676" + ], + [ + "g569pl", + "-106.292389544857", + "49.8626763597027", + "1000523.72173714", + "06/05/23", + "06/05/23", + "0.3785933" + ], + [ + "rx7wel", + "-103.358664747318", + "51.306213903484", + "1824512.63981761", + "06/05/23", + "06/05/23", + "0.5547071" + ], + [ + "dm6z7n", + "-102.396725038001", + "50.5934757623192", + "1013297.98657668", + "06/05/23", + "06/05/23", + "0.5928074" + ], + [ + "pm71kx", + "-103.883727003782", + "53.3417453884629", + "1045714.22712604", + "06/05/23", + "06/05/23", + "0.5491337" + ], + [ + "37nd6m", + "-109.521761738874", + "50.7643248149647", + "1636098.17977833", + "06/05/23", + "06/05/23", + "0.38165078" + ], + [ + "apx5nk", + "-106.382237133379", + "53.8407253390306", + "1641852.72242513", + "06/05/23", + "06/05/23", + "0.72365046" + ], + [ + "mp6q75", + "-104.795637956155", + "52.0219020388433", + "1037209.94325408", + "06/05/23", + "06/05/23", + "0.39093977" + ], + [ + "jw6knk", + "-107.094974338589", + "49.1649977417656", + "870082.698406194", + "06/05/23", + "06/05/23", + "0.5606608" + ], + [ + "vk7xr5", + "-108.875828867545", + "50.3257511477457", + "1421266.26474784", + "06/05/23", + "06/05/23", + "0.5330283" + ], + [ + "9nx463", + "-109.0318130472", + "53.3455023737185", + "1382236.74093486", + "06/05/23", + "06/05/23", + "0.5820725" + ], + [ + "b3q5ag", + "-107.269027056127", + "53.3363126009872", + "871520.448442211", + "06/05/23", + "06/05/23", + "0.7414829" + ], + [ + "wn7d91", + "-107.174382110395", + "51.1256520455435", + "810047.461850815", + "06/05/23", + "06/05/23", + "0.37355125" + ], + [ + "kn5len", + "-104.65959684863", + "51.296456892339", + "1574597.4224959", + "06/05/23", + "06/05/23", + "0.43107966" + ], + [ + "n3r9lw", + "-106.404787246134", + "53.0876343535204", + "874878.551252045", + "06/05/23", + "06/05/23", + "0.6248675" + ], + [ + "ejrdvn", + "-108.320544541527", + "50.8755842182327", + "1106875.47347732", + "06/05/23", + "06/05/23", + "0.3693726" + ], + [ + "6nxak6", + "-102.236897012732", + "51.6344873041321", + "1210932.569075", + "06/05/23", + "06/05/23", + "0.49324903" + ], + [ + "7zrmnj", + "-109.230319321094", + "51.4832354276843", + "2371760.48562771", + "06/05/23", + "06/05/23", + "0.33421597" + ], + [ + "ldga65", + "-101.678196801337", + "49.4440407021974", + "889176.471818766", + "06/05/23", + "06/05/23", + "0.47467074" + ], + [ + "1kwajw", + "-104.252891383002", + "52.9070671676378", + "935621.02317361", + "06/05/23", + "06/05/23", + "0.5110199" + ], + [ + "z5rjkg", + "-106.186494180482", + "51.2999603741158", + "1317499.52785594", + "06/05/23", + "06/05/23", + "0.37717718" + ], + [ + "xlxabz", + "-103.933159089635", + "49.2122042398017", + "1953109.15788851", + "06/05/23", + "06/05/23", + "0.56065357" + ], + [ + "qj5lpv", + "-107.653050176485", + "49.7249249151592", + "1473948.08800523", + "06/05/23", + "06/05/23", + "0.44220135" + ], + [ + "4nx9b7", + "-102.10064263615", + "52.9764640245151", + "1356472.37162526", + "06/05/23", + "06/05/23", + "0.7606383" + ], + [ + "5zx1ww", + "-108.67355671855", + "52.6748556914788", + "2976771.87485946", + "06/05/23", + "06/05/23", + "0.46592987" + ], + [ + "g569bl", + "-105.759676828749", + "49.2942199259211", + "1403855.87598013", + "06/05/23", + "06/05/23", + "0.5432372" + ], + [ + "rx7w3l", + "-105.638631394088", + "53.1852279925821", + "2451808.14246397", + "06/05/23", + "06/05/23", + "0.51107687" + ], + [ + "dm6zjn", + "-102.183725852752", + "52.3079205671128", + "1590599.0338392", + "06/05/23", + "06/05/23", + "0.7652367" + ], + [ + "pm71dx", + "-108.551821388628", + "51.8431280441193", + "868047.973401423", + "06/05/23", + "06/05/23", + "0.34747872" + ], + [ + "37nd9m", + "-103.010247453632", + "52.8494204858973", + "1222531.10256249", + "06/05/23", + "06/05/23", + "0.7030337" + ], + [ + "apx53k", + "-109.415240258986", + "49.2714874972217", + "1348677.85347858", + "06/05/23", + "06/05/23", + "0.5384984" + ], + [ + "mp6qa5", + "-107.439919174951", + "50.537388571417", + "1818214.44951992", + "06/05/23", + "06/05/23", + "0.4680339" + ], + [ + "jw6kdk", + "-62.5406418850846", + "45.5461927618229", + "1400014.41132476", + "06/05/23", + "06/05/23", + "0.76752114" + ], + [ + "vk7xe5", + "-64.412831351228", + "44.9202472012191", + "1501345.55107275", + "06/05/23", + "06/05/23", + "0.8038354" + ], + [ + "9nx453", + "-60.647935761726", + "45.9039509409669", + "1277985.31375892", + "06/05/23", + "06/05/23", + "0.7233921" + ], + [ + "b3q5kg", + "-60.8234854512892", + "46.4348905120326", + "1311937.29250013", + "06/05/23", + "06/05/23", + "0.6848217" + ], + [ + "wn7d61", + "-63.5404352524732", + "44.8822252266872", + "1329796.31393484", + "06/05/23", + "06/05/23", + "0.78625876" + ], + [ + "kn5lpn", + "-65.505477104309", + "44.0722779612766", + "2311947.60437753", + "06/05/23", + "06/05/23", + "0.79082435" + ], + [ + "n3r9mw", + "-65.0295937101085", + "44.5117015786742", + "1297992.98961651", + "06/05/23", + "06/05/23", + "0.8038266" + ], + [ + "ejrd6n", + "-61.9711967356089", + "45.2315446949348", + "1236198.45764351", + "06/05/23", + "06/05/23", + "0.7206907" + ], + [ + "6nxa56", + "-63.6961008437027", + "45.4657238668053", + "1896722.50936672", + "06/05/23", + "06/05/23", + "0.7944457" + ], + [ + "7zrm5j", + "-65.6034221667792", + "43.4667593371395", + "9563.49811835527", + "06/05/23", + "06/05/23", + "0.54625195" + ], + [ + "ldga35", + "-66.2708120236913", + "44.3283100319806", + "9595.76612730609", + "06/05/23", + "06/05/23", + "0.90110785" + ], + [ + "1kwalw", + "-61.0148228084693", + "45.5454571926772", + "28605.1164809877", + "06/05/23", + "06/05/23", + "0.80636626" + ], + [ + "z5rj1g", + "-58.0752739123226", + "51.4903951426035", + "1495198.80276671", + "06/05/23", + "06/05/23", + "0.601027" + ], + [ + "xlxa7z", + "-70.3858185094511", + "47.0945542527515", + "944513.59064822", + "06/05/23", + "06/05/23", + "0.701096" + ], + [ + "qj5l9v", + "-61.2421465563667", + "50.6780634430426", + "1561607.44454379", + "06/05/23", + "06/05/23", + "0.63839394" + ], + [ + "4nx957", + "-73.6756722487766", + "47.8954862300434", + "1492198.80902736", + "06/05/23", + "06/05/23", + "0.7792348" + ], + [ + "5zx15w", + "-67.4280319099622", + "51.507146674856", + "880067.432123844", + "06/05/23", + "06/05/23", + "0.62194645" + ], + [ + "g569ll", + "-75.7927529874583", + "49.1559756002865", + "1604556.49459011", + "06/05/23", + "06/05/23", + "0.6739083" + ], + [ + "rx7wbl", + "-62.0481469993398", + "50.7982082138523", + "1364276.25210058", + "06/05/23", + "06/05/23", + "0.68647546" + ], + [ + "dm6zen", + "-77.1434668778946", + "46.8141486651851", + "1628576.94041358", + "06/05/23", + "06/05/23", + "0.79044104" + ], + [ + "pm71vx", + "-65.0737251467868", + "50.4120438022888", + "817000.951894326", + "06/05/23", + "06/05/23", + "0.70901453" + ], + [ + "37ndzm", + "-71.1186719530494", + "45.7071608524871", + "1437206.3883652", + "06/05/23", + "06/05/23", + "0.8238602" + ], + [ + "apx5wk", + "-69.8994231310072", + "51.0254520234425", + "1315785.20957118", + "06/05/23", + "06/05/23", + "0.65805525" + ], + [ + "mp6qk5", + "-76.3491910481152", + "51.3902085182545", + "977680.588740151", + "06/05/23", + "06/05/23", + "0.63109565" + ], + [ + "jw6k9k", + "-78.9954594147682", + "51.013976393415", + "1267814.40887108", + "06/05/23", + "06/05/23", + "0.6000106" + ], + [ + "vk7xd5", + "-70.0612991028219", + "46.938826310461", + "1302477.54503508", + "06/05/23", + "06/05/23", + "0.80691093" + ], + [ + "9nx4l3", + "-70.7529285532899", + "48.3691802485473", + "2004895.61358124", + "06/05/23", + "06/05/23", + "0.71612877" + ], + [ + "b3q5xg", + "-78.3911817539876", + "50.5969392783675", + "826182.865931094", + "06/05/23", + "06/05/23", + "0.60756135" + ], + [ + "wn7dp1", + "-79.2462210158374", + "50.4883076777611", + "1012599.16465447", + "06/05/23", + "06/05/23", + "0.6104729" + ], + [ + "kn5lbn", + "-74.3501979224412", + "51.6732301621149", + "1037875.36443628", + "06/05/23", + "06/05/23", + "0.53020585" + ], + [ + "n3r9nw", + "-71.0143772288891", + "47.264383041483", + "1528025.78385567", + "06/05/23", + "06/05/23", + "0.74099934" + ], + [ + "ejrd3n", + "-67.5622040332418", + "48.5463132697938", + "1562291.40060633", + "06/05/23", + "06/05/23", + "0.7692005" + ], + [ + "6nxae6", + "-73.1725960568981", + "47.2560773650172", + "890108.782626175", + "06/05/23", + "06/05/23", + "0.816668" + ], + [ + "7zrm6j", + "-74.4505787094066", + "49.4294809136061", + "1920251.6859725", + "06/05/23", + "06/05/23", + "0.69066364" + ], + [ + "ldgar5", + "-79.2104695048972", + "48.2189621655451", + "2005942.92920938", + "06/05/23", + "06/05/23", + "0.75487137" + ], + [ + "1kwa9w", + "-73.7274831250271", + "48.8805635016228", + "1248427.55661669", + "06/05/23", + "06/05/23", + "0.7254445" + ], + [ + "z5rjmg", + "-77.6155750563803", + "46.4371819935607", + "1327302.01246", + "06/05/23", + "06/05/23", + "0.8284519" + ], + [ + "xlxa3z", + "-58.745083775779", + "51.7556053153205", + "1720998.17972718", + "06/05/23", + "06/05/23", + "0.65606856" + ], + [ + "qj5l7v", + "-79.1326751896066", + "49.562991821039", + "1180697.43480388", + "06/05/23", + "06/05/23", + "0.66417915" + ], + [ + "4nx9k7", + "-69.6855108794838", + "48.9470700162708", + "1713707.96214751", + "06/05/23", + "06/05/23", + "0.7338063" + ], + [ + "5zx1nw", + "-66.8266632539398", + "48.4862398421808", + "1205708.51621183", + "06/05/23", + "06/05/23", + "0.73691934" + ], + [ + "g569ml", + "-78.0409725409522", + "49.0367652859218", + "1756835.65554572", + "06/05/23", + "06/05/23", + "0.7015461" + ], + [ + "rx7wll", + "-70.450548825665", + "51.461867317896", + "1082739.5167613", + "06/05/23", + "06/05/23", + "0.53517425" + ], + [ + "dm6zpn", + "-78.733169078123", + "48.9664521272167", + "1038956.01754545", + "06/05/23", + "06/05/23", + "0.70219535" + ], + [ + "pm716x", + "-71.7788967206523", + "51.5048601091283", + "868400.199387015", + "06/05/23", + "06/05/23", + "0.5403099" + ], + [ + "37ndwm", + "-73.5787614912255", + "46.8766501637396", + "1878307.18848566", + "06/05/23", + "06/05/23", + "0.8504339" + ], + [ + "apx5zk", + "-65.1353252885593", + "51.0355132474692", + "892002.123816687", + "06/05/23", + "06/05/23", + "0.64634454" + ], + [ + "dm6zng", + "-75.2330656468224", + "49.0922203864582", + "1014157.23326531", + "06/05/23", + "06/05/23", + "0.69143087" + ], + [ + "pm71a1", + "-75.9327222710945", + "50.7367798078971", + "1224620.67310058", + "06/05/23", + "06/05/23", + "0.62803715" + ], + [ + "37nd3x", + "-68.0938513097842", + "51.8431516969902", + "955040.89661415", + "06/05/23", + "06/05/23", + "0.6076705" + ], + [ + "apx5bd", + "-69.44015338688", + "49.7856343232381", + "1916355.6920787", + "06/05/23", + "06/05/23", + "0.70506847" + ], + [ + "mp6qdj", + "-77.0490032691504", + "47.4407393938363", + "1091397.64646604", + "06/05/23", + "06/05/23", + "0.7677426" + ], + [ + "jw6kza", + "-70.883980426608", + "50.8023590301518", + "1495035.08853347", + "06/05/23", + "06/05/23", + "0.5979173" + ], + [ + "vk7xwk", + "-71.4035543328015", + "47.5481241095566", + "1258268.88223281", + "06/05/23", + "06/05/23", + "0.7423761" + ], + [ + "9nx4bz", + "-74.3875970941722", + "45.3558921966816", + "56608.6242731325", + "06/05/23", + "06/05/23", + "0.371451" + ], + [ + "b3q5w6", + "-68.9418020607011", + "52.434041043725", + "1796260.67448475", + "06/05/23", + "06/05/23", + "0.5180034" + ], + [ + "wn7dkr", + "-74.8243927743877", + "48.5478022327457", + "397419.274376017", + "06/05/23", + "06/05/23", + "0.7552939" + ], + [ + "kn5lxz", + "-71.7080257095", + "49.8637550354775", + "1514994.05497853", + "06/05/23", + "06/05/23", + "0.6941882" + ], + [ + "n3r9p4", + "-72.5488301993136", + "45.3339821801912", + "978678.878660882", + "06/05/23", + "06/05/23", + "0.7970061" + ], + [ + "ejrder", + "-76.9360841691583", + "50.132613329238", + "1227274.51371616", + "06/05/23", + "06/05/23", + "0.6525001" + ], + [ + "6nxajv", + "-71.3438027223349", + "51.2760332319445", + "849065.788824804", + "06/05/23", + "06/05/23", + "0.5564468" + ], + [ + "7zrmvq", + "-65.5875302698415", + "48.8487564072505", + "964116.219274171", + "06/05/23", + "06/05/23", + "0.72949135" + ], + [ + "ldgaqp", + "-62.574533143888", + "49.3935795246958", + "1115387.85449837", + "06/05/23", + "06/05/23", + "0.6402486" + ], + [ + "1kwadn", + "-70.1896105310582", + "49.1627142894823", + "1625677.27541222", + "06/05/23", + "06/05/23", + "0.6969065" + ], + [ + "z5rj6k", + "-77.5986172167002", + "50.6154878632191", + "1960432.39665433", + "06/05/23", + "06/05/23", + "0.6344791" + ], + [ + "xlxan7", + "-75.5247297992695", + "47.481611045375", + "2659874.50987251", + "06/05/23", + "06/05/23", + "0.7965514" + ], + [ + "qj5lm7", + "-64.0358103381727", + "51.1807291410377", + "909468.117225441", + "06/05/23", + "06/05/23", + "0.64132315" + ], + [ + "4nx9aa", + "-71.1320907396789", + "49.3269632809627", + "1456367.27955268", + "06/05/23", + "06/05/23", + "0.73686635" + ], + [ + "5zx1mp", + "-73.3042685010588", + "45.4532134920344", + "2091216.28364223", + "06/05/23", + "06/05/23", + "0.45509166" + ], + [ + "g5697e", + "-67.3777020682544", + "48.1173963224554", + "1269368.17587146", + "06/05/23", + "06/05/23", + "0.7959915" + ], + [ + "rx7wj5", + "-73.9012701585747", + "49.7045271735651", + "936124.817668807", + "06/05/23", + "06/05/23", + "0.6991771" + ], + [ + "dm6zvg", + "-66.2468423818138", + "51.8039262878958", + "1796895.66809886", + "06/05/23", + "06/05/23", + "0.54384553" + ], + [ + "pm71x1", + "-75.287142697936", + "50.1195615279852", + "1044777.04537738", + "06/05/23", + "06/05/23", + "0.6086666" + ], + [ + "37nd4x", + "-70.3969123611982", + "48.0540575997272", + "1210741.1474097", + "06/05/23", + "06/05/23", + "0.78430843" + ], + [ + "apx5ad", + "-63.0818671822601", + "51.6356338513045", + "1621711.44360749", + "06/05/23", + "06/05/23", + "0.58808786" + ], + [ + "mp6qlj", + "-70.9308506195354", + "46.2626410810388", + "1671821.03033001", + "06/05/23", + "06/05/23", + "0.7874444" + ], + [ + "jw6kea", + "-64.5121243756061", + "51.7957860908823", + "2552499.22787966", + "06/05/23", + "06/05/23", + "0.5533249" + ], + [ + "vk7xak", + "-73.549337708034", + "50.2325407391743", + "2769273.82610297", + "06/05/23", + "06/05/23", + "0.6048895" + ], + [ + "9nx4jz", + "-65.6685971654615", + "48.9831114668595", + "1254970.68567448", + "06/05/23", + "06/05/23", + "0.73117226" + ], + [ + "b3q5m6", + "-71.7190793665787", + "48.7140037544019", + "566066.505930408", + "06/05/23", + "06/05/23", + "0.70187795" + ], + [ + "wn7dmr", + "-65.8319925704212", + "48.3881499100562", + "1023347.68726401", + "06/05/23", + "06/05/23", + "0.7924777" + ], + [ + "kn5l6z", + "-75.5194311773557", + "46.4143252176435", + "1538703.14011575", + "06/05/23", + "06/05/23", + "0.8900859" + ], + [ + "n3r914", + "-68.795975257175", + "49.4248243983907", + "831242.508712274", + "06/05/23", + "06/05/23", + "0.7261885" + ], + [ + "ejrd9r", + "-69.8602796061575", + "50.401290266046", + "904263.674645226", + "06/05/23", + "06/05/23", + "0.6964802" + ], + [ + "6nxa3v", + "-66.3644947505611", + "51.2239481014083", + "1193586.70446414", + "06/05/23", + "06/05/23", + "0.61837614" + ], + [ + "7zrmaq", + "-66.6367811050579", + "50.4532197731723", + "1499977.0063579", + "06/05/23", + "06/05/23", + "0.6513843" + ], + [ + "ldga7p", + "-64.8113675912189", + "48.5141722457084", + "1043542.48317644", + "06/05/23", + "06/05/23", + "0.7656875" + ], + [ + "1kwaxn", + "-66.0236247528457", + "50.7904395733864", + "871073.523767604", + "06/05/23", + "06/05/23", + "0.6563772" + ], + [ + "z5rj9k", + "-72.4213110149122", + "51.0254192926323", + "2924467.83421449", + "06/05/23", + "06/05/23", + "0.5886239" + ], + [ + "xlxaj7", + "-72.2689775212933", + "49.2018596482305", + "1621980.54729691", + "06/05/23", + "06/05/23", + "0.7260229" + ], + [ + "qj5lr7", + "-75.8184138313206", + "48.3832105699834", + "2308721.14349945", + "06/05/23", + "06/05/23", + "0.6831406" + ], + [ + "4nx9da", + "-73.2022251046006", + "48.1101030243703", + "1486081.79244065", + "06/05/23", + "06/05/23", + "0.7549717" + ], + [ + "5zx1pp", + "-62.7133639205261", + "50.7993486541416", + "1332178.64701986", + "06/05/23", + "06/05/23", + "0.6679144" + ], + [ + "g569we", + "-77.1998808599206", + "47.9629370458497", + "1536074.09701927", + "06/05/23", + "06/05/23", + "0.7164528" + ], + [ + "rx7w45", + "-63.5709784120662", + "49.6096272610662", + "844717.050430492", + "06/05/23", + "06/05/23", + "0.66258574" + ], + [ + "dm6zwg", + "-60.3683296194799", + "51.5945402551911", + "1621844.16094186", + "06/05/23", + "06/05/23", + "0.6051712" + ], + [ + "pm7151", + "-71.8584217309415", + "45.5545962707068", + "1760277.19694661", + "06/05/23", + "06/05/23", + "0.7911371" + ], + [ + "37ndmx", + "-77.8817609517033", + "47.6042396590697", + "997958.506948753", + "06/05/23", + "06/05/23", + "0.75640714" + ], + [ + "apx5vd", + "-74.4469519092723", + "46.7617063941488", + "1718035.63530238", + "06/05/23", + "06/05/23", + "0.873842" + ], + [ + "mp6qxj", + "-62.383394378996", + "51.4706560494439", + "1037575.45362491", + "06/05/23", + "06/05/23", + "0.6684615" + ], + [ + "jw6kla", + "-78.6067694488472", + "48.042515672615", + "1099693.55526678", + "06/05/23", + "06/05/23", + "0.7142257" + ], + [ + "vk7xjk", + "-76.7626087098994", + "49.4239988863778", + "1608325.08490362", + "06/05/23", + "06/05/23", + "0.6990723" + ], + [ + "9nx4kz", + "-76.115892770386", + "46.8059664757644", + "1126799.52096692", + "06/05/23", + "06/05/23", + "0.8228284" + ], + [ + "b3q596", + "-59.863697315201", + "50.6270779714955", + "1272511.13489951", + "06/05/23", + "06/05/23", + "0.6412789" + ], + [ + "wn7dvr", + "-70.7851081893135", + "50.1163544714231", + "1367007.39518642", + "06/05/23", + "06/05/23", + "0.67740947" + ], + [ + "kn5l1z", + "-72.577129925363", + "50.0190641765921", + "1400798.56960734", + "06/05/23", + "06/05/23", + "0.693864" + ], + [ + "n3r9q4", + "-74.5430260918714", + "50.7837209307414", + "3693263.04156703", + "06/05/23", + "06/05/23", + "0.54405695" + ], + [ + "ejrdkr", + "-76.1990825208374", + "45.7750205021801", + "1044852.70311423", + "06/05/23", + "06/05/23", + "0.8555131" + ], + [ + "6nxa9v", + "-78.5844930299974", + "47.3552873509512", + "1661482.23611643", + "06/05/23", + "06/05/23", + "0.75547475" + ], + [ + "7zrmbq", + "-61.338203941034", + "51.5932135013602", + "1563301.14040195", + "06/05/23", + "06/05/23", + "0.61350965" + ], + [ + "ldgazp", + "-72.4160687736114", + "46.7986150187999", + "1276129.16884706", + "06/05/23", + "06/05/23", + "0.8222654" + ], + [ + "1kwa3n", + "-69.7531780273391", + "51.6562473728042", + "1014397.23782517", + "06/05/23", + "06/05/23", + "0.54879475" + ], + [ + "z5rjwk", + "-67.7517858024978", + "50.0196073205743", + "2576157.57931709", + "06/05/23", + "06/05/23", + "0.6626825" + ], + [ + "xlxa97", + "-74.95523284859", + "46.0451379240236", + "2060656.50429961", + "06/05/23", + "06/05/23", + "0.8963043" + ], + [ + "qj5ld7", + "-76.5923829970312", + "49.0713074741863", + "1139223.07803631", + "06/05/23", + "06/05/23", + "0.6880069" + ], + [ + "4nx9ja", + "-74.2931279385691", + "49.0888131171914", + "963872.545693622", + "06/05/23", + "06/05/23", + "0.6881625" + ], + [ + "5zx1vp", + "-72.1761214414631", + "46.2159451907133", + "999961.412687944", + "06/05/23", + "06/05/23", + "0.7304376" + ], + [ + "g569ee", + "-74.4180373743281", + "47.9905452023383", + "1712366.99834676", + "06/05/23", + "06/05/23", + "0.74689263" + ], + [ + "rx7wp5", + "-60.5880025097443", + "50.6426038437668", + "830476.569015157", + "06/05/23", + "06/05/23", + "0.68220156" + ], + [ + "dm6z1g", + "-68.0697134314818", + "51.1318432297905", + "2448311.18619897", + "06/05/23", + "06/05/23", + "0.6687205" + ], + [ + "pm71z1", + "-78.587355028036", + "46.8060442902797", + "1301137.59337796", + "06/05/23", + "06/05/23", + "0.7981018" + ], + [ + "37ndkx", + "-64.2026471625364", + "50.7595421898752", + "1559581.13298299", + "06/05/23", + "06/05/23", + "0.67655474" + ], + [ + "apx5kd", + "-76.9616597754625", + "50.8432634852663", + "1029525.55898688", + "06/05/23", + "06/05/23", + "0.65899605" + ], + [ + "mp6qnj", + "-69.4978884552636", + "52.0258074937717", + "1040115.74437624", + "06/05/23", + "06/05/23", + "0.55048996" + ], + [ + "jw6kja", + "-68.4941713436197", + "50.6353554087231", + "1284751.11441679", + "06/05/23", + "06/05/23", + "0.64204663" + ], + [ + "vk7xvk", + "-77.1312275393258", + "51.2042066546524", + "811735.780695906", + "06/05/23", + "06/05/23", + "0.62083894" + ], + [ + "9nx4gz", + "-59.6942755756133", + "51.2105094501584", + "1296156.70802352", + "06/05/23", + "06/05/23", + "0.65917003" + ], + [ + "b3q5e6", + "-63.4277657841114", + "50.4642733848811", + "822380.4953237", + "06/05/23", + "06/05/23", + "0.62608653" + ], + [ + "wn7dbr", + "-77.6034729865702", + "48.5888400844603", + "996517.720481827", + "06/05/23", + "06/05/23", + "0.70095783" + ], + [ + "kn5l9z", + "-72.1498723960769", + "47.734529965999", + "2030347.483543", + "06/05/23", + "06/05/23", + "0.81316984" + ], + [ + "n3r964", + "-67.151399436207", + "52.2674174712964", + "2041727.14096903", + "06/05/23", + "06/05/23", + "0.53583163" + ], + [ + "ejrdxr", + "-76.3904291795619", + "47.8597726252424", + "862384.586940915", + "06/05/23", + "06/05/23", + "0.7462508" + ], + [ + "6nxa1v", + "-77.5256395896766", + "49.731920148318", + "1314963.98152791", + "06/05/23", + "06/05/23", + "0.6704665" + ], + [ + "7zrmxq", + "-78.565750906421", + "49.9214721510417", + "963293.346497486", + "06/05/23", + "06/05/23", + "0.619643" + ], + [ + "ldgawp", + "-76.6326880592782", + "46.3371100672538", + "1456251.76866014", + "06/05/23", + "06/05/23", + "0.85600024" + ], + [ + "1kwavn", + "-68.5926016530903", + "49.986014528198", + "1821643.33912535", + "06/05/23", + "06/05/23", + "0.6878033" + ], + [ + "z5rj7k", + "-72.3932709701605", + "48.459219877512", + "1740943.10267928", + "06/05/23", + "06/05/23", + "0.75572115" + ], + [ + "xlxak7", + "-75.2517647042019", + "51.4021030821877", + "990472.882388216", + "06/05/23", + "06/05/23", + "0.5545425" + ], + [ + "qj5lq7", + "-73.6958659467151", + "45.9813374227898", + "2600737.23449987", + "06/05/23", + "06/05/23", + "0.8022229" + ], + [ + "4nx9ea", + "-73.0716107174624", + "46.1150799989319", + "13197.5543787484", + "06/05/23", + "06/05/23", + "0.5958696" + ], + [ + "5zx17p", + "-70.9641793903738", + "46.9314954372483", + "50390.8717187651", + "06/05/23", + "06/05/23", + "0.6553329" + ], + [ + "g569ge", + "-63.8907566390765", + "50.2144284869637", + "6203.16345272819", + "06/05/23", + "06/05/23", + "0.7014626" + ], + [ + "rx7w55", + "-61.819464588041", + "47.3808333537733", + "46249.5832331278", + "06/05/23", + "06/05/23", + "0.63222474" + ], + [ + "dm6agg", + "-61.7564808318211", + "47.4431343999311", + "7983.83150887999", + "06/05/23", + "06/05/23", + "0.70576227" + ], + [ + "pm7nw1", + "-59.3406969296052", + "50.586781919034", + "10992.3622449041", + "06/05/23", + "06/05/23", + "0.5672773" + ], + [ + "37nxlx", + "-68.9561971362526", + "47.7413370472335", + "1672420.34588093", + "06/05/23", + "06/05/23", + "0.8032301" + ], + [ + "apx4qd", + "-112.8076669112", + "49.4829278002382", + "1094071.98299027", + "06/05/23", + "06/05/23", + "0.5343268" + ], + [ + "dm6agk", + "-115.225889292197", + "54.6426306967416", + "2202635.83857165", + "06/05/23", + "06/05/23", + "0.7811024" + ], + [ + "pm7nw9", + "-118.851826300883", + "54.5115985418201", + "1640065.0237267", + "06/05/23", + "06/05/23", + "0.7872199" + ], + [ + "37nxl7", + "-111.085707961692", + "49.9184317713403", + "951903.061563265", + "06/05/23", + "06/05/23", + "0.40852347" + ], + [ + "apx4ql", + "-113.368217065129", + "50.7264023003501", + "900969.589920417", + "06/05/23", + "06/05/23", + "0.37572607" + ], + [ + "mp6m5g", + "-115.609986489173", + "54.3010517276492", + "928620.278674058", + "06/05/23", + "06/05/23", + "0.77201223" + ], + [ + "jw6rp1", + "-112.188087893094", + "53.8909863447384", + "1303235.76713696", + "06/05/23", + "06/05/23", + "0.46406564" + ], + [ + "vk75pb", + "-115.508533460621", + "58.3317930732183", + "1597042.71978467", + "06/05/23", + "06/05/23", + "0.72837335" + ], + [ + "9nxev1", + "-110.253060246256", + "50.8028756940163", + "845270.692999799", + "06/05/23", + "06/05/23", + "0.39959317" + ], + [ + "b3q4zq", + "-113.506224107891", + "49.7399516863348", + "819181.805136655", + "06/05/23", + "06/05/23", + "0.49185133" + ], + [ + "wn753g", + "-118.353963090195", + "57.4031503379319", + "890064.058529226", + "06/05/23", + "06/05/23", + "0.7512075" + ], + [ + "kn5v3w", + "-115.431714323205", + "52.694898670516", + "1184256.63790254", + "06/05/23", + "06/05/23", + "0.73329335" + ], + [ + "n3r7za", + "-110.620489758296", + "52.3879044710918", + "2241251.6486731", + "06/05/23", + "06/05/23", + "0.47884047" + ], + [ + "ejrz5l", + "-117.046514558882", + "55.3527369713132", + "833439.556252792", + "06/05/23", + "06/05/23", + "0.7447092" + ], + [ + "6nxw4k", + "-119.225745670569", + "55.122945599605", + "1532383.9478376", + "06/05/23", + "06/05/23", + "0.73648447" + ], + [ + "7zr4w5", + "-117.144118433772", + "58.4333298064435", + "656819.479494718", + "06/05/23", + "06/05/23", + "0.70200986" + ], + [ + "ldgmlr", + "-111.642320132591", + "54.4881953404505", + "805293.676224867", + "06/05/23", + "06/05/23", + "0.7723684" + ], + [ + "1kwm5d", + "-113.104428698084", + "50.1733773230125", + "1681656.0300484", + "06/05/23", + "06/05/23", + "0.40569863" + ], + [ + "z5rba9", + "-110.87241471716", + "55.2729920369288", + "1963139.7543647", + "06/05/23", + "06/05/23", + "0.66450197" + ], + [ + "xlxmp9", + "-116.451024602201", + "58.1849276396493", + "1017854.59397039", + "06/05/23", + "06/05/23", + "0.5896467" + ], + [ + "qj5kwq", + "-114.501391834012", + "53.8278199688754", + "879374.999358346", + "06/05/23", + "06/05/23", + "0.68161166" + ], + [ + "4nx49p", + "-119.453677339105", + "53.9231781388194", + "1942048.70526192", + "06/05/23", + "06/05/23", + "0.66592526" + ], + [ + "5zx911", + "-110.899500474745", + "51.6076709714377", + "1649485.42410788", + "06/05/23", + "06/05/23", + "0.4127019" + ], + [ + "g56v9v", + "-111.71450237315", + "52.0664457768197", + "1640793.00803744", + "06/05/23", + "06/05/23", + "0.4402252" + ], + [ + "rx7vwk", + "-114.455821138658", + "52.5416190336784", + "805645.712433527", + "06/05/23", + "06/05/23", + "0.6903205" + ], + [ + "dm6azk", + "-118.893367553073", + "57.0289559359307", + "976974.492035557", + "06/05/23", + "06/05/23", + "0.7277561" + ], + [ + "pm7n19", + "-117.744969454275", + "56.6257106952028", + "2550923.06720132", + "06/05/23", + "06/05/23", + "0.6708555" + ], + [ + "37nxd7", + "-118.611115659212", + "57.8252711646228", + "1437646.67084719", + "06/05/23", + "06/05/23", + "0.7825228" + ], + [ + "apx45l", + "-112.929409373996", + "52.2167247145816", + "1064391.12387822", + "06/05/23", + "06/05/23", + "0.51709074" + ], + [ + "mp6mqg", + "-111.345228996555", + "50.5508335332004", + "1993889.31063921", + "06/05/23", + "06/05/23", + "0.38277113" + ], + [ + "jw6rk1", + "-113.694973382258", + "51.6967615202947", + "953843.84698675", + "06/05/23", + "06/05/23", + "0.46199784" + ], + [ + "vk75xb", + "-119.72170970191", + "57.4924759699004", + "1230795.12883867", + "06/05/23", + "06/05/23", + "0.72913367" + ], + [ + "9nxe41", + "-111.51477843052", + "51.2097489284764", + "1716424.30263266", + "06/05/23", + "06/05/23", + "0.38345262" + ], + [ + "b3q45q", + "-116.170189225093", + "56.0084017194608", + "743079.737232386", + "06/05/23", + "06/05/23", + "0.79539406" + ], + [ + "wn75dg", + "-112.732358654086", + "54.5760848348982", + "3578822.7439537", + "06/05/23", + "06/05/23", + "0.6798859" + ], + [ + "kn5vlw", + "-115.280096126153", + "51.7536251455099", + "1883177.49714779", + "06/05/23", + "06/05/23", + "0.6593838" + ], + [ + "n3r79a", + "-114.143289416446", + "51.2618786778969", + "1136087.58356759", + "06/05/23", + "06/05/23", + "0.52833956" + ], + [ + "ejrzdl", + "-114.304560795968", + "50.3259000106457", + "2182287.44986234", + "06/05/23", + "06/05/23", + "0.61123174" + ], + [ + "6nxwak", + "-110.99669960457", + "53.7170177429359", + "1188426.66968599", + "06/05/23", + "06/05/23", + "0.56055856" + ], + [ + "7zr4m5", + "-119.10222683824", + "56.4885881391481", + "1433033.06711493", + "06/05/23", + "06/05/23", + "0.6482487" + ], + [ + "ldgmar", + "-112.499008344448", + "53.405780652864", + "1123750.81781504", + "06/05/23", + "06/05/23", + "0.48412383" + ], + [ + "1kwmad", + "-113.830152959109", + "52.237810373238", + "837677.781213765", + "06/05/23", + "06/05/23", + "0.5525412" + ], + [ + "z5rbj9", + "-110.5946702097", + "53.2325666729984", + "1629204.0899145", + "06/05/23", + "06/05/23", + "0.46011308" + ], + [ + "xlxma9", + "-115.778118122719", + "55.6128635947124", + "697913.839585654", + "06/05/23", + "06/05/23", + "0.7956542" + ], + [ + "qj5klq", + "-111.583933774282", + "52.9599526895447", + "1228417.98298979", + "06/05/23", + "06/05/23", + "0.40887848" + ], + [ + "4nx44p", + "-110.528875863427", + "54.4694096446421", + "2182920.54570714", + "06/05/23", + "06/05/23", + "0.73366773" + ], + [ + "5zx991", + "-113.263119796864", + "53.2814014726388", + "1089234.9485502", + "06/05/23", + "06/05/23", + "0.60505754" + ], + [ + "g56vvv", + "-116.890216014213", + "55.0445782820073", + "738521.927918106", + "06/05/23", + "06/05/23", + "0.743358" + ], + [ + "rx7vvk", + "-116.610505838349", + "53.6242711722748", + "2589699.30206919", + "06/05/23", + "06/05/23", + "0.7276489" + ], + [ + "dm6aak", + "-118.103556768893", + "54.1410321070579", + "837386.410364333", + "06/05/23", + "06/05/23", + "0.6934533" + ], + [ + "pm7nn9", + "-117.039176584887", + "57.3577687679935", + "857304.068697226", + "06/05/23", + "06/05/23", + "0.73086864" + ], + [ + "37nxx7", + "-114.095374216276", + "55.0211596257818", + "1591514.39124069", + "06/05/23", + "06/05/23", + "0.72830474" + ], + [ + "apx44l", + "-114.622301076885", + "51.9233584791877", + "921997.506563857", + "06/05/23", + "06/05/23", + "0.69587725" + ], + [ + "mp6mmg", + "-112.06881217253", + "50.03322885345", + "933338.196459878", + "06/05/23", + "06/05/23", + "0.4150148" + ], + [ + "jw6rr1", + "-117.213638029636", + "55.8940309820085", + "1545781.0605676", + "06/05/23", + "06/05/23", + "0.6144065" + ], + [ + "vk755b", + "-114.460950176525", + "53.2335054580604", + "2867742.24409234", + "06/05/23", + "06/05/23", + "0.6731973" + ], + [ + "9nxee1", + "-119.686799516915", + "56.0583658128616", + "751608.059515717", + "06/05/23", + "06/05/23", + "0.77352065" + ], + [ + "b3q44q", + "-113.897335799787", + "54.0804202371077", + "941131.322909058", + "06/05/23", + "06/05/23", + "0.5247902" + ], + [ + "wn755g", + "-115.308886388805", + "54.9003652456524", + "828861.124511913", + "06/05/23", + "06/05/23", + "0.74204385" + ], + [ + "kn5vvw", + "-116.472560173354", + "52.5676147957762", + "1227588.02520764", + "06/05/23", + "06/05/23", + "0.67941374" + ], + [ + "n3r77a", + "-110.41712066577", + "49.8968619323723", + "1059416.88071639", + "06/05/23", + "06/05/23", + "0.47822666" + ], + [ + "ejrzzl", + "-118.581820885993", + "55.685665108867", + "1514178.14068935", + "06/05/23", + "06/05/23", + "0.50375354" + ], + [ + "6nxwwk", + "-116.575847146487", + "54.5794699916322", + "1735747.01028407", + "06/05/23", + "06/05/23", + "0.75563157" + ], + [ + "7zr445", + "-113.472244550328", + "49.3344066450745", + "1829023.51097073", + "06/05/23", + "06/05/23", + "0.66474533" + ], + [ + "ldgmmr", + "-110.64795033901", + "49.2150063435335", + "1231374.45455276", + "06/05/23", + "06/05/23", + "0.49574715" + ], + [ + "1kwmmd", + "-112.320805624767", + "55.3857521850986", + "819345.898923764", + "06/05/23", + "06/05/23", + "0.6937264" + ], + [ + "z5rbb9", + "-111.900702281466", + "50.8362643825183", + "843682.892669633", + "06/05/23", + "06/05/23", + "0.40589958" + ], + [ + "xlxmm9", + "-112.636840257246", + "52.7450603970906", + "1740759.77816308", + "06/05/23", + "06/05/23", + "0.45174176" + ], + [ + "qj5kkq", + "-115.928314964153", + "53.3766517396209", + "1368416.17261083", + "06/05/23", + "06/05/23", + "0.7149981" + ], + [ + "4nx4lp", + "-119.226816611278", + "55.8051521786994", + "768317.918368834", + "06/05/23", + "06/05/23", + "0.7050359" + ], + [ + "5zx941", + "-117.304881649862", + "57.9565429390194", + "1619643.12808577", + "06/05/23", + "06/05/23", + "0.75498885" + ], + [ + "g56vzv", + "-112.849184735074", + "51.3790816717799", + "2134269.33144722", + "06/05/23", + "06/05/23", + "0.36945647" + ], + [ + "rx7vkk", + "-118.038591094365", + "54.9602273837587", + "1287712.39366204", + "06/05/23", + "06/05/23", + "0.8246423" + ], + [ + "dm6a5k", + "-118.243350782924", + "53.6336572076386", + "1141885.39535485", + "06/05/23", + "06/05/23", + "0.6874799" + ], + [ + "pm7nl9", + "-115.618712960745", + "51.4088349478649", + "1491270.7998304", + "06/05/23", + "06/05/23", + "0.4013896" + ], + [ + "37nx57", + "-117.556004004572", + "53.5538321772427", + "1085313.14499367", + "06/05/23", + "06/05/23", + "0.7118034" + ], + [ + "apx4dl", + "-111.602100208699", + "49.524260290626", + "1694878.04192925", + "06/05/23", + "06/05/23", + "0.38425437" + ], + [ + "mp6mzg", + "-56.5091934451298", + "48.2574623561423", + "2740199.49406525", + "06/05/23", + "06/05/23", + "0.5570085" + ], + [ + "jw6rq1", + "-57.9126066564441", + "48.8869303586014", + "3053394.69066485", + "06/05/23", + "06/05/23", + "0.5717681" + ], + [ + "vk75lb", + "-53.7997099705727", + "48.1420698447594", + "1163333.60464346", + "06/05/23", + "06/05/23", + "0.62945944" + ], + [ + "9nxe31", + "-56.4142849972312", + "51.967836776291", + "1199820.24408703", + "06/05/23", + "06/05/23", + "0.6159204" + ], + [ + "b3q4pq", + "-55.5506709008616", + "48.0394048073139", + "2118099.57774227", + "06/05/23", + "06/05/23", + "0.5854314" + ], + [ + "wn75lg", + "-57.748174230656", + "52.1518946616946", + "1091443.06641174", + "06/05/23", + "06/05/23", + "0.6211227" + ], + [ + "kn5vkw", + "-54.8561350260089", + "47.7226712883409", + "2038091.64754375", + "06/05/23", + "06/05/23", + "0.553579" + ], + [ + "n3r7ga", + "-59.733364461491", + "52.8308116091466", + "1625344.02711982", + "06/05/23", + "06/05/23", + "0.6231386" + ], + [ + "ejrzml", + "-56.4272010020284", + "49.5749256522418", + "1338200.90165857", + "06/05/23", + "06/05/23", + "0.5588809" + ], + [ + "6nxwlk", + "-55.9806936719025", + "49.2251609137221", + "1008767.25210468", + "06/05/23", + "06/05/23", + "0.6202064" + ], + [ + "7zr4d5", + "-60.9738751441019", + "52.7815023013068", + "2641155.16634656", + "06/05/23", + "06/05/23", + "0.64013654" + ], + [ + "ldgm9r", + "-56.9301671726375", + "52.8637881960684", + "753243.240819878", + "06/05/23", + "06/05/23", + "0.58523613" + ], + [ + "1kwm4d", + "-62.5578543101922", + "52.6464654326224", + "1699380.05682555", + "06/05/23", + "06/05/23", + "0.5626909" + ], + [ + "z5rbp9", + "-54.0804466045825", + "49.1864891066133", + "900811.189441264", + "06/05/23", + "06/05/23", + "0.65902114" + ], + [ + "xlxm59", + "-57.5990971638475", + "48.0374919553869", + "1511594.13798471", + "06/05/23", + "06/05/23", + "0.53475684" + ], + [ + "qj5k1q", + "-53.1673192471483", + "47.1112459250541", + "1161263.89742424", + "06/05/23", + "06/05/23", + "0.6202204" + ], + [ + "4nx4rp", + "-56.9048473363666", + "50.3623392220143", + "2084862.67848043", + "06/05/23", + "06/05/23", + "0.6448624" + ], + [ + "5zx9e1", + "-56.1901191381054", + "51.2143163349895", + "1137581.25453954", + "06/05/23", + "06/05/23", + "0.55274224" + ], + [ + "g56vkv", + "-58.5053163422007", + "47.9480938748525", + "1366742.34007154", + "06/05/23", + "06/05/23", + "0.55467474" + ], + [ + "rx7v1k", + "-56.7357854066215", + "48.7744320511918", + "882082.483586677", + "06/05/23", + "06/05/23", + "0.53947437" + ], + [ + "dm6akk", + "-57.4789924855692", + "52.5195105236008", + "878628.037354418", + "06/05/23", + "06/05/23", + "0.6329641" + ], + [ + "pm7nq9", + "-60.0490581053339", + "52.1801747912537", + "887486.38172231", + "06/05/23", + "06/05/23", + "0.62177896" + ], + [ + "37nxj7", + "-54.8245056849274", + "48.8677792736529", + "2430696.59745255", + "06/05/23", + "06/05/23", + "0.64184004" + ], + [ + "apx4gl", + "-57.0995373170975", + "53.0257314796106", + "1569161.32554083", + "06/05/23", + "06/05/23", + "0.61987865" + ], + [ + "dm6ak4", + "-59.065018611059", + "52.3777229027909", + "1207650.4402969", + "06/05/23", + "06/05/23", + "0.5991152" + ], + [ + "pm7nqp", + "-57.3145525123447", + "49.9489927358193", + "870417.970985871", + "06/05/23", + "06/05/23", + "0.020964172" + ], + [ + "37nxjp", + "-65.1279906333364", + "52.1411756237366", + "955366.427311322", + "06/05/23", + "06/05/23", + "0.57469004" + ], + [ + "apx4g7", + "-53.5358086960039", + "47.4214301366569", + "1060319.96587629", + "06/05/23", + "06/05/23", + "0.6286284" + ], + [ + "mp6mj6", + "-63.1194270939219", + "52.2942519129632", + "1656547.40329746", + "06/05/23", + "06/05/23", + "0.5626413" + ], + [ + "jw6r3v", + "-55.5649616655448", + "50.7482465726618", + "23170.7117035527", + "06/05/23", + "06/05/23", + "0.48891607" + ], + [ + "vk753z", + "-54.1836662164889", + "49.6607769894453", + "62949.9216101618", + "06/05/23", + "06/05/23", + "0.66893625" + ], + [ + "9nxe7r", + "-55.5905112574097", + "50.9412960306797", + "11158.7056793938", + "06/05/23", + "06/05/23", + "0.48193493" + ], + [ + "b3q4gr", + "-55.3581492586334", + "51.9392873026628", + "16349.5604289691", + "06/05/23", + "06/05/23", + "0.32946497" + ], + [ + "wn75a9", + "-54.725331189367", + "49.562186500064", + "46389.7928026214", + "06/05/23", + "06/05/23", + "0.74934566" + ], + [ + "kn5vap", + "-54.7204745809424", + "49.4425657329067", + "11869.1405660402", + "06/05/23", + "06/05/23", + "0.6875564" + ], + [ + "n3r7jn", + "-55.6338577634846", + "49.5177597765168", + "6358.39060459013", + "06/05/23", + "06/05/23", + "0.86130756" + ], + [ + "ejrzge", + "-54.2292415819774", + "47.493097352103", + "31701.4832954109", + "06/05/23", + "06/05/23", + "0.76697785" + ], + [ + "6nxw73", + "-54.0856031073351", + "47.5823954982741", + "9503.74210692568", + "06/05/23", + "06/05/23", + "0.39522493" + ], + [ + "7zr4eb", + "-55.1725937348825", + "49.309187153342", + "7365.34354573537", + "06/05/23", + "06/05/23", + "0.8330395" + ], + [ + "ldgmjw", + "-55.9029844024937", + "47.2767578012376", + "5149.94793653735", + "06/05/23", + "06/05/23", + "0.67949843" + ], + [ + "1kwmb5", + "-55.6782594300557", + "49.5933904547367", + "8848.84761392487", + "06/05/23", + "06/05/23", + "0.9045326" + ], + [ + "z5rbxj", + "-55.8142477170307", + "49.5490867709279", + "5564.8961865414", + "06/05/23", + "06/05/23", + "0.7170993" + ], + [ + "xlxm1m", + "-55.7159258079945", + "49.5286600129705", + "9157.51089785402", + "06/05/23", + "06/05/23", + "0.87140954" + ], + [ + "qj5kb1", + "-55.9403142564949", + "47.7399689500249", + "9555.20427337867", + "06/05/23", + "06/05/23", + "0.60417163" + ], + [ + "4nx4vr", + "-53.7271403766641", + "48.1359017658491", + "62328.2637792017", + "06/05/23", + "06/05/23", + "0.672535" + ], + [ + "5zx9dd", + "-59.0191261924483", + "48.5644933340546", + "90493.5326836682", + "06/05/23", + "06/05/23", + "0.6507389" + ], + [ + "g56vd5", + "-77.7454123722654", + "45.8706892485785", + "1571318.83622053", + "06/05/23", + "06/05/23", + "0.8143955" + ], + [ + "rx7vq6", + "-80.9014321409313", + "43.9872820789143", + "2439362.31823457", + "06/05/23", + "06/05/23", + "0.6295774" + ], + [ + "dm6al4", + "-80.6082870893182", + "45.9640794699134", + "1566244.96016946", + "06/05/23", + "06/05/23", + "0.78648055" + ], + [ + "pm7n9p", + "-82.9663331188789", + "49.5199358589574", + "1005699.31822371", + "06/05/23", + "06/05/23", + "0.78056896" + ], + [ + "37nxvp", + "-81.6805857842162", + "49.0462722578993", + "2361301.75239317", + "06/05/23", + "06/05/23", + "0.7478632" + ], + [ + "apx4e7", + "-81.0236199058544", + "44.5195539912706", + "1266317.82798618", + "06/05/23", + "06/05/23", + "0.741213" + ], + [ + "mp6mv6", + "-76.814282816399", + "44.6223935748368", + "1145682.83176202", + "06/05/23", + "06/05/23", + "0.8086891" + ], + [ + "jw6rav", + "-79.840850437181", + "48.6350169892928", + "855722.277969904", + "06/05/23", + "06/05/23", + "0.753249" + ], + [ + "vk751z", + "-83.474208327085", + "48.768659290063", + "1067358.47598529", + "06/05/23", + "06/05/23", + "0.7833638" + ], + [ + "9nxemr", + "-86.036783595269", + "49.3541720054184", + "4112528.8670117", + "06/05/23", + "06/05/23", + "0.74494857" + ], + [ + "b3q41r", + "-88.3209346638298", + "49.1873015088585", + "1206943.33144867", + "06/05/23", + "06/05/23", + "0.74101627" + ], + [ + "wn7519", + "-82.9033105627908", + "48.5062143837288", + "1784223.25021278", + "06/05/23", + "06/05/23", + "0.7647271" + ], + [ + "kn5vmp", + "-84.5148526987873", + "50.0673255976197", + "1047714.41272921", + "06/05/23", + "06/05/23", + "0.75280625" + ], + [ + "n3r7vn", + "-82.2304195726382", + "47.1564245832431", + "895223.713753514", + "06/05/23", + "06/05/23", + "0.7096882" + ], + [ + "ejrz1e", + "-78.3447700065307", + "44.1058909334272", + "889832.087859476", + "06/05/23", + "06/05/23", + "0.6905537" + ], + [ + "6nxwp3", + "-80.5964496490083", + "49.6373469016772", + "817163.084653139", + "06/05/23", + "06/05/23", + "0.6449587" + ], + [ + "7zr43b", + "-81.6895210382868", + "46.8675884727857", + "1024604.26358905", + "06/05/23", + "06/05/23", + "0.7197224" + ], + [ + "ldgm4w", + "-81.9846379534699", + "48.5423515595734", + "963443.7763455", + "06/05/23", + "06/05/23", + "0.7601881" + ], + [ + "1kwmk5", + "-84.3538963146201", + "47.4584145855344", + "1540945.16478912", + "06/05/23", + "06/05/23", + "0.86606216" + ], + [ + "z5rb5j", + "-83.4213485738302", + "47.9226462083036", + "1552448.05070294", + "06/05/23", + "06/05/23", + "0.7852112" + ], + [ + "xlxmlm", + "-89.6615192073767", + "48.6113356367837", + "2568759.56844011", + "06/05/23", + "06/05/23", + "0.79045707" + ], + [ + "qj5kj1", + "-85.2299498486404", + "48.3578632971509", + "2258275.65160748", + "06/05/23", + "06/05/23", + "0.7920814" + ], + [ + "4nx4nr", + "-82.7125518759007", + "49.877114495311", + "1397524.79101424", + "06/05/23", + "06/05/23", + "0.7342427" + ], + [ + "5zx9zd", + "-87.0611601444886", + "49.1973220236693", + "2604356.91318083", + "06/05/23", + "06/05/23", + "0.7418988" + ], + [ + "g56v55", + "-84.1582856874586", + "48.2779756920367", + "1569807.5792529", + "06/05/23", + "06/05/23", + "0.7996734" + ], + [ + "rx7vx6", + "-76.5809899034212", + "45.2975418595736", + "1492597.34058433", + "06/05/23", + "06/05/23", + "0.81733334" + ], + [ + "dm6am4", + "-94.0906004808978", + "48.9570020931314", + "1252180.96477566", + "06/05/23", + "06/05/23", + "0.81381834" + ], + [ + "pm7nmp", + "-89.2543313557685", + "49.5148925563036", + "2601173.2153714", + "06/05/23", + "06/05/23", + "0.7461838" + ], + [ + "37nx7p", + "-82.0794076889801", + "42.6573609562684", + "2580981.20285397", + "06/05/23", + "06/05/23", + "0.40145513" + ], + [ + "apx4p7", + "-80.997186813375", + "47.2263040624106", + "915083.932935021", + "06/05/23", + "06/05/23", + "0.728212" + ], + [ + "mp6mp6", + "-79.5221873926001", + "43.9244049917567", + "931089.782629795", + "06/05/23", + "06/05/23", + "0.6497485" + ], + [ + "jw6rwv", + "-78.7962043219677", + "44.3398466604564", + "1226018.5699809", + "06/05/23", + "06/05/23", + "0.7274441" + ], + [ + "vk75kz", + "-75.0883812239461", + "45.2763081663803", + "1730790.03682305", + "06/05/23", + "06/05/23", + "0.59529275" + ], + [ + "9nxenr", + "-80.7171747159683", + "49.1037495678284", + "1258793.0461187", + "06/05/23", + "06/05/23", + "0.70790994" + ], + [ + "b3q43r", + "-77.5606617873368", + "44.3869608558358", + "1981076.45782353", + "06/05/23", + "06/05/23", + "0.7652415" + ], + [ + "wn75n9", + "-78.9182692249934", + "45.2473523653672", + "2247848.54786159", + "06/05/23", + "06/05/23", + "0.83017653" + ], + [ + "kn5vnp", + "-81.4524556297901", + "46.4642701463354", + "1135550.26181442", + "06/05/23", + "06/05/23", + "0.7756282" + ], + [ + "n3r73n", + "-84.9127490136695", + "49.3451563491468", + "1590273.75617794", + "06/05/23", + "06/05/23", + "0.7521239" + ], + [ + "ejrzje", + "-80.1778103129063", + "43.4804150123958", + "1003156.43385431", + "06/05/23", + "06/05/23", + "0.6406001" + ], + [ + "6nxwn3", + "-79.8289458055447", + "49.3619265707385", + "975508.085682825", + "06/05/23", + "06/05/23", + "0.6696915" + ], + [ + "7zr4zb", + "-77.6153736359689", + "45.2578319773113", + "1962867.86728028", + "06/05/23", + "06/05/23", + "0.8435064" + ], + [ + "ldgmdw", + "-80.6649698403543", + "47.9091553534978", + "859084.745649172", + "06/05/23", + "06/05/23", + "0.7612138" + ], + [ + "1kwm15", + "-81.1434258053384", + "43.1855301743843", + "1381658.30084646", + "06/05/23", + "06/05/23", + "0.44460943" + ], + [ + "z5rb4j", + "-79.3765559652582", + "46.0609439697603", + "1514415.99444399", + "06/05/23", + "06/05/23", + "0.8242936" + ], + [ + "xlxmwm", + "-83.4922004777238", + "49.2358252503338", + "973465.7063418", + "06/05/23", + "06/05/23", + "0.7797956" + ], + [ + "qj5k61", + "-79.6012038896429", + "44.5784435007259", + "2116538.47270053", + "06/05/23", + "06/05/23", + "0.7875469" + ], + [ + "4nx4zr", + "-78.9361969228038", + "45.6479870140628", + "1499409.9528854", + "06/05/23", + "06/05/23", + "0.8609473" + ], + [ + "5zx9bd", + "-84.1208725096575", + "49.5922382355935", + "894317.02283191", + "06/05/23", + "06/05/23", + "0.7694635" + ], + [ + "g56vq5", + "-80.9350635655256", + "48.2083436533267", + "1156754.29145066", + "06/05/23", + "06/05/23", + "0.7704986" + ], + [ + "rx7v66", + "-82.0257114167768", + "47.7497021760911", + "2904908.41147003", + "06/05/23", + "06/05/23", + "0.7534473" + ], + [ + "dm6aq4", + "-75.9098137428273", + "44.8095434055084", + "1179897.96784879", + "06/05/23", + "06/05/23", + "0.7859309" + ], + [ + "pm7nbp", + "-80.4451281229504", + "47.3298105579065", + "907265.755930831", + "06/05/23", + "06/05/23", + "0.729363" + ], + [ + "37nxep", + "-82.7655161102039", + "46.5083789847068", + "2069634.34487562", + "06/05/23", + "06/05/23", + "0.7946046" + ], + [ + "apx4l7", + "-79.7480732330302", + "46.8439311746109", + "2112996.22300778", + "06/05/23", + "06/05/23", + "0.79330325" + ], + [ + "mp6mb6", + "-80.0345863885701", + "42.981029229133", + "1774990.47595826", + "06/05/23", + "06/05/23", + "0.53932184" + ], + [ + "jw6r4v", + "-80.0870313394184", + "48.0211771906665", + "1535789.05206757", + "06/05/23", + "06/05/23", + "0.78400874" + ], + [ + "vk756z", + "-83.4132337218077", + "47.1333825169245", + "1487284.34559907", + "06/05/23", + "06/05/23", + "0.7953306" + ], + [ + "9nxezr", + "-82.6575421206342", + "41.7773765868499", + "10136.9516201932", + "06/05/23", + "06/05/23", + "0.537153" + ], + [ + "b3q4lr", + "-76.7182905937536", + "44.1444286324793", + "16944.7868800557", + "06/05/23", + "06/05/23", + "0.8083165" + ], + [ + "wn75x9", + "-76.3428079341876", + "44.1966528034318", + "46744.5372862472", + "06/05/23", + "06/05/23", + "0.74020934" + ], + [ + "kn5vqp", + "-84.1614393013665", + "46.7046663890873", + "1212860.70270303", + "06/05/23", + "06/05/23", + "0.87874776" + ], + [ + "n3r7wn", + "-82.2481903466667", + "46.1299955833333", + "3.3297449964177", + "06/05/23", + "06/05/23", + "0.9694181" + ], + [ + "ejrzqe", + "-82.4327977255126", + "45.8580799116302", + "1084023.92703635", + "06/05/23", + "06/05/23", + "0.78801495" + ], + [ + "6nxwb3", + "-80.6025974038791", + "46.4473456592448", + "887632.826254754", + "06/05/23", + "06/05/23", + "0.7811246" + ], + [ + "7zr4lb", + "-65.248175856903", + "45.8548269025918", + "2862933.80271", + "06/05/23", + "06/05/23", + "0.83257145" + ], + [ + "ldgmnw", + "-66.957324945547", + "45.3601461096077", + "1083598.82670891", + "06/05/23", + "06/05/23", + "0.8076126" + ], + [ + "1kwm75", + "-65.4934349771349", + "46.7892299631153", + "1608540.67149825", + "06/05/23", + "06/05/23", + "0.7860767" + ], + [ + "z5rblj", + "-65.5999907280265", + "47.3356045760091", + "1387392.22106665", + "06/05/23", + "06/05/23", + "0.7947657" + ], + [ + "xlxmvm", + "-66.4233404278908", + "47.117263461177", + "2210806.11504348", + "06/05/23", + "06/05/23", + "0.80836684" + ], + [ + "qj5kx1", + "-66.9940133692337", + "47.6305869813487", + "1931778.98985155", + "06/05/23", + "06/05/23", + "0.8106028" + ], + [ + "4nx41r", + "-66.0088086766035", + "46.0515779246907", + "2640847.47468099", + "06/05/23", + "06/05/23", + "0.82096887" + ], + [ + "5zx9rd", + "-66.8105531864961", + "44.7016829774145", + "38497.7925719254", + "06/05/23", + "06/05/23", + "0.6925358" + ], + [ + "g56vx5", + "-64.5318164466794", + "47.9573867314179", + "17522.9106735769", + "06/05/23", + "06/05/23", + "0.68922746" + ], + [ + "rx7vd6", + "-64.6129799893844", + "47.8178086966965", + "37303.9335691935", + "06/05/23", + "06/05/23", + "0.72643435" + ], + [ + "dm6a44", + "-67.246809671728", + "46.1176676171018", + "1851154.53766028", + "06/05/23", + "06/05/23", + "0.82374936" + ], + [ + "pm7ngp", + "-68.0748699273295", + "47.5428185671302", + "1341410.15609483", + "06/05/23", + "06/05/23", + "0.79809594" + ], + [ + "37nxrp", + "-67.3594745691516", + "46.8448123548475", + "980854.734444004", + "06/05/23", + "06/05/23", + "0.8323305" + ], + [ + "apx417", + "-97.7337438938663", + "51.2356453165311", + "1811167.01989512", + "06/05/23", + "06/05/23", + "0.74999243" + ], + [ + "dm6a46", + "-100.221747368839", + "50.7560279872698", + "1250394.40473882", + "06/05/23", + "06/05/23", + "0.75649905" + ], + [ + "pm7nge", + "-101.064744865209", + "50.9377244498588", + "2418634.62869738", + "06/05/23", + "06/05/23", + "0.65249145" + ], + [ + "37nxrq", + "-100.517534117787", + "52.4793533494634", + "1069021.9340523", + "06/05/23", + "06/05/23", + "0.74083745" + ], + [ + "apx41j", + "-97.5425606565809", + "49.3410198772109", + "1363939.20826954", + "06/05/23", + "06/05/23", + "0.4035113" + ], + [ + "mp6mg9", + "-97.1333253066558", + "50.7077994535857", + "1390665.49358793", + "06/05/23", + "06/05/23", + "0.68502283" + ], + [ + "jw6rxn", + "-100.942312478637", + "49.4179398154193", + "1623203.46984602", + "06/05/23", + "06/05/23", + "0.4606996" + ], + [ + "vk75me", + "-95.4975739082398", + "50.0588871798659", + "1175329.15147246", + "06/05/23", + "06/05/23", + "0.7103632" + ], + [ + "9nxeql", + "-99.5912551922489", + "53.0358131769343", + "2864812.34129983", + "06/05/23", + "06/05/23", + "0.6907464" + ], + [ + "b3q46w", + "-99.9621808453861", + "50.2083287375405", + "973019.604033899", + "06/05/23", + "06/05/23", + "0.4627153" + ], + [ + "wn75jm", + "-95.9725233550837", + "50.8228439595518", + "907050.106077224", + "06/05/23", + "06/05/23", + "0.7448254" + ], + [ + "kn5v41", + "-100.562013261286", + "51.8525449834698", + "871080.861808971", + "06/05/23", + "06/05/23", + "0.7881109" + ], + [ + "n3r7x6", + "-99.3726143782709", + "52.3868161169836", + "967346.981762706", + "06/05/23", + "06/05/23", + "0.6809058" + ], + [ + "ejrzb5", + "-101.540807568248", + "54.1492889136763", + "789117.786399117", + "06/05/23", + "06/05/23", + "0.6783829" + ], + [ + "6nxw6a", + "-98.7209220568582", + "49.3151055863006", + "819378.287520141", + "06/05/23", + "06/05/23", + "0.43110007" + ], + [ + "7zr474", + "-99.9128242148478", + "51.4004939775912", + "1185298.76629454", + "06/05/23", + "06/05/23", + "0.7152561" + ], + [ + "ldgm19", + "-96.3875971234718", + "50.0920751889872", + "1874898.79478888", + "06/05/23", + "06/05/23", + "0.67699754" + ], + [ + "1kwm6z", + "-99.4966451635846", + "49.3678459659535", + "1184580.90342017", + "06/05/23", + "06/05/23", + "0.48650137" + ], + [ + "z5rbex", + "-96.2724097622587", + "49.2114317434288", + "1304932.24639013", + "06/05/23", + "06/05/23", + "0.7820432" + ], + [ + "xlxmrl", + "-97.8533402441722", + "49.7995688405747", + "2002539.09015896", + "06/05/23", + "06/05/23", + "0.37348098" + ], + [ + "qj5k36", + "-98.9896910253676", + "49.9521786154015", + "1584078.8045312", + "06/05/23", + "06/05/23", + "0.5993733" + ], + [ + "4nx461", + "-99.0106741820902", + "51.9222220733847", + "1203868.05952633", + "06/05/23", + "06/05/23", + "0.71222484" + ], + [ + "5zx966", + "-95.7293102328805", + "49.4622075414427", + "833049.88095264", + "06/05/23", + "06/05/23", + "0.77457446" + ], + [ + "g56v1r", + "-101.333488538608", + "52.4033643516545", + "1148764.05002822", + "06/05/23", + "06/05/23", + "0.72529286" + ], + [ + "rx7var", + "-100.190218539102", + "49.6277003068414", + "1252799.25801976", + "06/05/23", + "06/05/23", + "0.4908317" + ], + [ + "dm6a96", + "-100.928205657571", + "50.5377861900969", + "967392.275190451", + "06/05/23", + "06/05/23", + "0.4808938" + ], + [ + "pm7npe", + "-98.0576931736498", + "51.1565960610493", + "1991693.46501927", + "06/05/23", + "06/05/23", + "0.7178083" + ], + [ + "37nx1q", + "-99.2258902583195", + "50.8624848799782", + "1547069.89897106", + "06/05/23", + "06/05/23", + "0.72750956" + ], + [ + "apx4mj", + "-63.2438057875067", + "46.3902217855118", + "1408710.49641589", + "06/05/23", + "06/05/23", + "0.6564129" + ], + [ + "mp6m19", + "-103.165664962919", + "35.0097875148476", + "533031.023252278", + "06/05/23", + "06/05/23", + "0.4055912" + ], + [ + "jw6r1n", + "-105.783506176106", + "32.1878097846515", + "753403.602327327", + "06/05/23", + "06/05/23", + "0.16287749" + ], + [ + "vk759e", + "-107.098967651947", + "32.131674550747", + "1808012.80076912", + "06/05/23", + "06/05/23", + "0.17323992" + ], + [ + "9nxedl", + "-106.140090492452", + "34.2128830537551", + "5241431.87549171", + "06/05/23", + "06/05/23", + "0.2287063" + ], + [ + "b3q4jw", + "-103.400200166437", + "36.2784242927882", + "698537.952655671", + "06/05/23", + "06/05/23", + "0.3909924" + ], + [ + "wn75rm", + "-106.633712747345", + "32.9265062817201", + "4636199.33287532", + "06/05/23", + "06/05/23", + "0.1831383" + ], + [ + "kn5vg1", + "-108.419052074027", + "33.3994849310113", + "527668.243451888", + "06/05/23", + "06/05/23", + "0.4148692" + ], + [ + "n3r756", + "-105.058829437804", + "36.0793691225362", + "1056842.17708141", + "06/05/23", + "06/05/23", + "0.35684803" + ], + [ + "ejrz45", + "-104.205959164721", + "32.4712902695515", + "1333825.27819891", + "06/05/23", + "06/05/23", + "0.21032214" + ], + [ + "6nxwma", + "-105.321555444825", + "32.3535969708605", + "1148635.63430431", + "06/05/23", + "06/05/23", + "0.17488272" + ], + [ + "7zr4j4", + "-106.537035499307", + "36.7996603338039", + "633590.023923372", + "06/05/23", + "06/05/23", + "0.5259031" + ], + [ + "ldgme9", + "-105.756516584964", + "36.4478295792242", + "545235.957296136", + "06/05/23", + "06/05/23", + "0.32918847" + ], + [ + "1kwmez", + "-107.995479495392", + "35.7702323117742", + "11273489.6314013", + "06/05/23", + "06/05/23", + "0.253108" + ], + [ + "z5rbnx", + "-108.104660409633", + "36.7901042411684", + "999480.26490662", + "06/05/23", + "06/05/23", + "0.25355634" + ], + [ + "xlxm4l", + "-107.518468127354", + "32.6973181767857", + "639513.088485686", + "06/05/23", + "06/05/23", + "0.2036129" + ], + [ + "qj5ka6", + "-103.570139328389", + "34.826674087137", + "1284705.82098904", + "06/05/23", + "06/05/23", + "0.36624533" + ], + [ + "4nx431", + "-104.561413261125", + "34.6762243578263", + "10631093.1987304", + "06/05/23", + "06/05/23", + "0.29783252" + ], + [ + "5zx9a6", + "-106.089808182643", + "35.7049387244392", + "806082.705448698", + "06/05/23", + "06/05/23", + "0.28269213" + ], + [ + "g56vrr", + "-103.558954849741", + "36.8960346287355", + "556527.241930887", + "06/05/23", + "06/05/23", + "0.4035822" + ], + [ + "rx7vmr", + "-105.852045095068", + "36.8380565697196", + "627634.760541614", + "06/05/23", + "06/05/23", + "0.30919957" + ], + [ + "dm6ax6", + "-108.757640687071", + "32.4291368331909", + "661929.160126941", + "06/05/23", + "06/05/23", + "0.17515051" + ], + [ + "pm7n3e", + "-103.541129439791", + "35.8117039649738", + "1293626.09589571", + "06/05/23", + "06/05/23", + "0.29522112" + ], + [ + "37nxpq", + "-103.536334635601", + "35.3653285894484", + "597451.308854939", + "06/05/23", + "06/05/23", + "0.2909969" + ], + [ + "apx49j", + "-107.881364419456", + "35.2605862967284", + "1068531.93001416", + "06/05/23", + "06/05/23", + "0.2527276" + ], + [ + "mp6me9", + "-108.775258197841", + "33.7151943321658", + "1467633.70340935", + "06/05/23", + "06/05/23", + "0.36344603" + ], + [ + "jw6r5n", + "-108.067135012415", + "33.9319612471603", + "573298.588509938", + "06/05/23", + "06/05/23", + "0.27061096" + ], + [ + "vk75be", + "-105.140872917027", + "33.350884367268", + "1119261.83426806", + "06/05/23", + "06/05/23", + "0.24630392" + ], + [ + "9nxe9l", + "-103.471570143487", + "33.2715104364894", + "899029.626863637", + "06/05/23", + "06/05/23", + "0.23394293" + ], + [ + "b3q4bw", + "-103.239336215454", + "33.768238140291", + "607235.19531967", + "06/05/23", + "06/05/23", + "0.3961802" + ], + [ + "wn75wm", + "-103.509132552791", + "34.2492674745758", + "634838.692876246", + "06/05/23", + "06/05/23", + "0.34560102" + ], + [ + "kn5vz1", + "-107.869066918775", + "33.7605976620346", + "583647.693936821", + "06/05/23", + "06/05/23", + "0.26709384" + ], + [ + "n3r7d6", + "-103.25688565593", + "32.358173338467", + "703539.776731602", + "06/05/23", + "06/05/23", + "0.27477604" + ], + [ + "ejrz75", + "-105.394814068411", + "34.0608677600446", + "1137582.89927295", + "06/05/23", + "06/05/23", + "0.26443163" + ], + [ + "6nxwra", + "-107.285547187371", + "33.9297950491557", + "993853.125840104", + "06/05/23", + "06/05/23", + "0.26394093" + ], + [ + "7zr414", + "-108.66759431483", + "31.5948136408035", + "1112414.30301152", + "06/05/23", + "06/05/23", + "0.20418112" + ], + [ + "ldgm59", + "-104.876662633425", + "32.6268275505495", + "1567070.23678728", + "06/05/23", + "06/05/23", + "0.209228" + ], + [ + "1kwmrz", + "-104.15923188871", + "36.5468787888366", + "1604268.28668954", + "06/05/23", + "06/05/23", + "0.3671144" + ], + [ + "z5rb3x", + "-108.74264161105", + "32.9595786815306", + "672138.969285815", + "06/05/23", + "06/05/23", + "0.29814613" + ], + [ + "xlxmdl", + "-108.057606437277", + "33.2096481425515", + "594623.569310767", + "06/05/23", + "06/05/23", + "0.42416936" + ], + [ + "qj5k46", + "-103.274896575764", + "36.6597247052293", + "346471.063391459", + "06/05/23", + "06/05/23", + "0.36591455" + ], + [ + "4nx4w1", + "-104.908593997086", + "36.7545082740279", + "779315.934384834", + "06/05/23", + "06/05/23", + "0.45897517" + ], + [ + "5zx9k6", + "-104.233622415163", + "33.0728561849679", + "688301.637985309", + "06/05/23", + "06/05/23", + "0.205735" + ], + [ + "g56v4r", + "-105.638983719761", + "33.1114087613443", + "544779.543774935", + "06/05/23", + "06/05/23", + "0.5616565" + ], + [ + "rx7vrr", + "-105.432944902505", + "36.3695704816", + "868891.721640616", + "06/05/23", + "06/05/23", + "0.5093578" + ], + [ + "dm6ar6", + "-104.922711562884", + "35.8283177346095", + "541458.700502729", + "06/05/23", + "06/05/23", + "0.38460588" + ], + [ + "pm7n4e", + "-107.932468504662", + "32.9831493536835", + "1296447.82583704", + "06/05/23", + "06/05/23", + "0.31143743" + ], + [ + "37nxbq", + "-106.032345588148", + "36.2252992012084", + "672692.928150008", + "06/05/23", + "06/05/23", + "0.29893348" + ], + [ + "apx47j", + "-103.58915973857", + "32.5712053339724", + "1583100.18815241", + "06/05/23", + "06/05/23", + "0.25928408" + ], + [ + "mp6m49", + "-108.20887718242", + "32.1632527505485", + "2288411.46928425", + "06/05/23", + "06/05/23", + "0.16319437" + ], + [ + "jw6rgn", + "-107.043533286646", + "34.950690336985", + "4565522.35486408", + "06/05/23", + "06/05/23", + "0.21051502" + ], + [ + "vk754e", + "-112.67181092564", + "44.7413154815822", + "827448.298512952", + "06/05/23", + "06/05/23", + "0.467157" + ], + [ + "9nxe1l", + "-112.037098681567", + "46.6146193028129", + "881272.136087497", + "06/05/23", + "06/05/23", + "0.5311501" + ], + [ + "b3q47w", + "-109.581404744863", + "46.1127245015498", + "753732.612268251", + "06/05/23", + "06/05/23", + "0.5944357" + ], + [ + "wn754m", + "-105.374703214748", + "48.8596762524273", + "443649.21965038", + "06/05/23", + "06/05/23", + "0.47790745" + ], + [ + "kn5v71", + "-108.46762198806", + "48.5086534754374", + "1084132.60595934", + "06/05/23", + "06/05/23", + "0.54361075" + ], + [ + "n3r746", + "-109.85467926006", + "48.3828610684852", + "722777.021504684", + "06/05/23", + "06/05/23", + "0.4991769" + ], + [ + "ejrzr5", + "-107.239991031287", + "45.2639994934274", + "891015.030734938", + "06/05/23", + "06/05/23", + "0.7209046" + ], + [ + "6nxwxa", + "-109.243789254569", + "47.9225488139677", + "954938.417070928", + "06/05/23", + "06/05/23", + "0.5299448" + ], + [ + "7zr4r4", + "-109.37771485378", + "48.853649222764", + "483059.277841284", + "06/05/23", + "06/05/23", + "0.5106512" + ], + [ + "ldgmg9", + "-111.698401678549", + "44.8071910417082", + "895221.183394422", + "06/05/23", + "06/05/23", + "0.55695444" + ], + [ + "1kwmwz", + "-110.592269660644", + "47.9798664511323", + "647652.115022728", + "06/05/23", + "06/05/23", + "0.4905874" + ], + [ + "z5rbrx", + "-113.071606103677", + "47.6266355489573", + "1395100.32745034", + "06/05/23", + "06/05/23", + "0.5448669" + ], + [ + "xlxmxl", + "-115.234099796519", + "47.4162427826431", + "800003.39121246", + "06/05/23", + "06/05/23", + "0.6452656" + ], + [ + "qj5k56", + "-115.482598347615", + "48.5444074969122", + "832140.02708217", + "06/05/23", + "06/05/23", + "0.6812028" + ], + [ + "4nx4x1", + "-111.680561131899", + "47.3676471919135", + "893843.149832975", + "06/05/23", + "06/05/23", + "0.68886876" + ], + [ + "5zx9x6", + "-105.566637719603", + "47.2977740125202", + "588149.519056193", + "06/05/23", + "06/05/23", + "0.55995095" + ], + [ + "g56v6r", + "-107.984432687332", + "45.5490220480833", + "590269.833457248", + "06/05/23", + "06/05/23", + "0.5650183" + ], + [ + "rx7v7r", + "-104.803499531968", + "48.600817449172", + "709201.012386881", + "06/05/23", + "06/05/23", + "0.5315585" + ], + [ + "dm6a66", + "-105.963228482621", + "45.9206490670085", + "1676613.40393211", + "06/05/23", + "06/05/23", + "0.5224067" + ], + [ + "pm7n7e", + "-111.624906942039", + "45.3819164865254", + "554893.072770363", + "06/05/23", + "06/05/23", + "0.5512231" + ], + [ + "37nxnq", + "-114.330960264655", + "47.4217980196371", + "498521.638032607", + "06/05/23", + "06/05/23", + "0.6729936" + ], + [ + "apx4xj", + "-108.997345667933", + "46.4300657842134", + "651702.587339083", + "06/05/23", + "06/05/23", + "0.4977106" + ], + [ + "dm6a67", + "-112.831072042379", + "44.563075549184", + "170645.203093354", + "06/05/23", + "06/05/23", + "0.3970938" + ], + [ + "pm7n7d", + "-106.145317293504", + "48.2985151626223", + "958770.203102765", + "06/05/23", + "06/05/23", + "0.5524862" + ], + [ + "37nxnz", + "-107.168015605502", + "48.0187828347195", + "1341429.00727006", + "06/05/23", + "06/05/23", + "0.49729672" + ], + [ + "apx4xz", + "-104.858495751791", + "45.6765533770442", + "742090.619863363", + "06/05/23", + "06/05/23", + "0.5567958" + ], + [ + "mp6m6d", + "-106.048554780856", + "48.7566147142992", + "730883.596186372", + "06/05/23", + "06/05/23", + "0.54199106" + ], + [ + "jw6r6e", + "-113.547647262668", + "46.6420146182796", + "432240.210058878", + "06/05/23", + "06/05/23", + "0.6514033" + ], + [ + "vk757j", + "-108.37662096686", + "45.6068881547546", + "620439.30490994", + "06/05/23", + "06/05/23", + "0.57996714" + ], + [ + "9nxexg", + "-105.19772398667", + "47.1253921520395", + "2206131.52965711", + "06/05/23", + "06/05/23", + "0.5534278" + ], + [ + "b3q4nz", + "-112.773238771875", + "48.4609468264075", + "1053999.06560575", + "06/05/23", + "06/05/23", + "0.5458745" + ], + [ + "wn75gd", + "-104.397510006529", + "48.1531364929224", + "926840.297570862", + "06/05/23", + "06/05/23", + "0.597544" + ], + [ + "kn5vrv", + "-114.22478410842", + "45.9703333233527", + "831847.707348079", + "06/05/23", + "06/05/23", + "0.5908657" + ], + [ + "n3r7kg", + "-111.222757737256", + "46.2341262999321", + "925253.193089447", + "06/05/23", + "06/05/23", + "0.5583315" + ], + [ + "ejrzpg", + "-113.014394933615", + "45.8941663359085", + "1793517.76522914", + "06/05/23", + "06/05/23", + "0.61320794" + ], + [ + "6nxwvp", + "-109.383081110967", + "47.2270384484299", + "880358.423419412", + "06/05/23", + "06/05/23", + "0.661555" + ], + [ + "7zr49z", + "-107.901496792247", + "47.945749105881", + "696061.04739959", + "06/05/23", + "06/05/23", + "0.5415863" + ], + [ + "ldgmbn", + "-108.250697885582", + "46.136133513965", + "632685.800101883", + "06/05/23", + "06/05/23", + "0.4239422" + ], + [ + "1kwmp7", + "-106.015007374836", + "47.8399078842347", + "524054.16319042", + "06/05/23", + "06/05/23", + "0.5349032" + ], + [ + "z5rbge", + "-111.590678825279", + "48.2277547946067", + "873013.550083362", + "06/05/23", + "06/05/23", + "0.35806075" + ], + [ + "xlxmg4", + "-109.770208097134", + "48.2066968405474", + "475459.56571519", + "06/05/23", + "06/05/23", + "0.66224253" + ], + [ + "qj5kg4", + "-108.391658166414", + "47.6941692216397", + "893645.781823807", + "06/05/23", + "06/05/23", + "0.5255936" + ], + [ + "4nx4mx", + "-107.654979347502", + "47.1874489021319", + "503568.565759351", + "06/05/23", + "06/05/23", + "0.53820026" + ], + [ + "5zx9jj", + "-107.066452969145", + "45.9927441258371", + "1174050.68754128", + "06/05/23", + "06/05/23", + "0.57715875" + ], + [ + "g56vaj", + "-106.363003700874", + "45.2410211497732", + "1186820.5242524", + "06/05/23", + "06/05/23", + "0.57995653" + ], + [ + "rx7vg9", + "-115.286241838134", + "47.9568672520261", + "648990.421946433", + "06/05/23", + "06/05/23", + "0.6910648" + ], + [ + "dm6ad7", + "-112.057189675542", + "47.1433638320436", + "535591.303840437", + "06/05/23", + "06/05/23", + "0.64610094" + ], + [ + "pm7ned", + "-104.364561820835", + "48.800437466636", + "543573.827667646", + "06/05/23", + "06/05/23", + "0.42959514" + ], + [ + "37nxaz", + "-104.335818059297", + "45.940390936392", + "882803.635927867", + "06/05/23", + "06/05/23", + "0.5550264" + ], + [ + "apx4rz", + "-107.34160516945", + "45.5136649160871", + "759287.13002883", + "06/05/23", + "06/05/23", + "0.64319783" + ], + [ + "mp6mwd", + "-110.139283134902", + "46.445353562512", + "467342.584931736", + "06/05/23", + "06/05/23", + "0.6224196" + ], + [ + "jw6rve", + "-105.500042204377", + "46.2156800763399", + "421527.523659978", + "06/05/23", + "06/05/23", + "0.49038216" + ], + [ + "vk75gj", + "-111.400305119088", + "48.7556320658267", + "547061.737898895", + "06/05/23", + "06/05/23", + "0.3910019" + ], + [ + "9nxewg", + "-105.328488123307", + "48.3437076532139", + "700205.143002345", + "06/05/23", + "06/05/23", + "0.55894065" + ], + [ + "b3q4dz", + "-111.149508224747", + "47.0131226355827", + "785619.628213546", + "06/05/23", + "06/05/23", + "0.69040567" + ], + [ + "wn75zd", + "-110.096831211128", + "45.2175152356507", + "1171938.97636114", + "06/05/23", + "06/05/23", + "0.26566878" + ], + [ + "kn5vwv", + "-114.146103464579", + "48.5025840926901", + "770576.516894262", + "06/05/23", + "06/05/23", + "0.7025612" + ], + [ + "n3r7eg", + "-107.66956847697", + "46.1728647430186", + "622571.575257705", + "06/05/23", + "06/05/23", + "0.4826711" + ], + [ + "ejrzag", + "-111.080047948295", + "47.7069833212824", + "684971.052830599", + "06/05/23", + "06/05/23", + "0.5772774" + ], + [ + "6nxwqp", + "-108.713039446774", + "45.2283614698675", + "995259.309646449", + "06/05/23", + "06/05/23", + "0.42899564" + ], + [ + "7zr4qz", + "-111.910645474511", + "45.8836499924281", + "1598630.39359688", + "06/05/23", + "06/05/23", + "0.50345325" + ], + [ + "ldgmkn", + "-110.457665407134", + "46.897329324543", + "902338.387671179", + "06/05/23", + "06/05/23", + "0.6690751" + ], + [ + "1kwmq7", + "-110.634369442612", + "46.4177098658174", + "1143463.95987433", + "06/05/23", + "06/05/23", + "0.64622355" + ], + [ + "z5rbze", + "-112.378895041966", + "47.8143079852454", + "996650.564334151", + "06/05/23", + "06/05/23", + "0.56939083" + ], + [ + "xlxmz4", + "-112.147854377271", + "48.3180937172056", + "985545.703905496", + "06/05/23", + "06/05/23", + "0.46354926" + ], + [ + "qj5kz4", + "-114.423428203387", + "47.8438440840485", + "950420.081358481", + "06/05/23", + "06/05/23", + "0.67563665" + ], + [ + "4nx4qx", + "-113.393034811881", + "46.8981973255995", + "442965.421735283", + "06/05/23", + "06/05/23", + "0.7085484" + ], + [ + "5zx9qj", + "-115.660587772885", + "48.7837390319507", + "620199.300350074", + "06/05/23", + "06/05/23", + "0.7318003" + ], + [ + "g56vjj", + "-114.22479417157", + "48.7416761237397", + "418284.141005473", + "06/05/23", + "06/05/23", + "0.73013735" + ], + [ + "rx7vz9", + "-114.022860442803", + "46.5809843196456", + "468797.098596736", + "06/05/23", + "06/05/23", + "0.6509935" + ], + [ + "dm6a37", + "-112.614959788845", + "45.5691928626564", + "954783.87538939", + "06/05/23", + "06/05/23", + "0.4526721" + ], + [ + "pm7nrd", + "-105.551745783472", + "45.3173301998333", + "1117791.31608181", + "06/05/23", + "06/05/23", + "0.56173104" + ], + [ + "37nxqz", + "-104.900899117836", + "46.1974223474073", + "664583.696591273", + "06/05/23", + "06/05/23", + "0.58325064" + ], + [ + "apx46z", + "-113.60433800322", + "48.5207614819669", + "867904.818335798", + "06/05/23", + "06/05/23", + "0.5342821" + ], + [ + "mp6mrd", + "-106.860674615468", + "47.5564144753951", + "916833.486470136", + "06/05/23", + "06/05/23", + "0.4882468" + ], + [ + "jw6rbe", + "-114.441979285433", + "46.9068626451395", + "1199558.22540306", + "06/05/23", + "06/05/23", + "0.7112023" + ], + [ + "vk75zj", + "-110.174721037642", + "47.2365634825389", + "1320197.14368382", + "06/05/23", + "06/05/23", + "0.7060432" + ], + [ + "9nxepg", + "-104.322243132247", + "45.3359485593016", + "239332.085308306", + "06/05/23", + "06/05/23", + "0.46301782" + ], + [ + "b3q4vz", + "-108.415217790088", + "48.8981168994867", + "424101.025374392", + "06/05/23", + "06/05/23", + "0.54372644" + ], + [ + "wn75ed", + "-106.736147441765", + "47.2193250199585", + "1273316.4216805", + "06/05/23", + "06/05/23", + "0.51446456" + ], + [ + "kn5vdv", + "-109.495879627023", + "45.4694506777297", + "787542.131792593", + "06/05/23", + "06/05/23", + "0.6312888" + ], + [ + "n3r7ag", + "-110.640183852426", + "48.5595067332787", + "2068340.95182579", + "06/05/23", + "06/05/23", + "0.3896705" + ], + [ + "ejrzwg", + "-107.486181127828", + "46.7005265399856", + "1021177.46152987", + "06/05/23", + "06/05/23", + "0.41527796" + ], + [ + "6nxwgp", + "-112.484545029811", + "46.9383611319047", + "446518.045900307", + "06/05/23", + "06/05/23", + "0.6336817" + ], + [ + "7zr4gz", + "-108.455750746393", + "46.6854934256086", + "1389254.8183942", + "06/05/23", + "06/05/23", + "0.57657814" + ], + [ + "ldgmpn", + "-110.973788712912", + "45.8031257774582", + "495278.76144992", + "06/05/23", + "06/05/23", + "0.7022261" + ], + [ + "1kwmg7", + "-104.351420539484", + "47.7165321591126", + "239676.435551225", + "06/05/23", + "06/05/23", + "0.6008554" + ], + [ + "z5rbde", + "-104.562921679035", + "45.2931961625795", + "812150.633069022", + "06/05/23", + "06/05/23", + "0.5231656" + ], + [ + "xlxm64", + "-109.623040557904", + "46.5432404347004", + "446344.463266603", + "06/05/23", + "06/05/23", + "0.5568254" + ], + [ + "qj5kv4", + "-113.080641539933", + "46.4664172708135", + "904849.642551933", + "06/05/23", + "06/05/23", + "0.6292934" + ], + [ + "4nx4gx", + "-104.51565989839", + "46.8710384213843", + "859107.329104067", + "06/05/23", + "06/05/23", + "0.57969695" + ], + [ + "5zx9gj", + "-113.304281461457", + "48.7386174821106", + "510654.931284675", + "06/05/23", + "06/05/23", + "0.68056035" + ], + [ + "g56vnj", + "-114.80463095448", + "48.4821549351706", + "679920.645860104", + "06/05/23", + "06/05/23", + "0.71668386" + ], + [ + "rx7v99", + "-106.966597907323", + "48.6251025262202", + "1282373.84204995", + "06/05/23", + "06/05/23", + "0.53224814" + ], + [ + "dm6ab7", + "-114.761325041518", + "48.0243448222666", + "667999.238552493", + "06/05/23", + "06/05/23", + "0.7172253" + ], + [ + "pm7njd", + "-107.706815781508", + "48.6625679337504", + "786948.319772702", + "06/05/23", + "06/05/23", + "0.5572035" + ], + [ + "37nxgz", + "-108.61641920782", + "47.2742053309066", + "1303818.50883583", + "06/05/23", + "06/05/23", + "0.5508831" + ], + [ + "apx4jz", + "-112.053582342508", + "48.8505849350928", + "494358.944290526", + "06/05/23", + "06/05/23", + "0.40015188" + ], + [ + "mp6m3d", + "-112.957934017801", + "45.1244701472548", + "560561.266913145", + "06/05/23", + "06/05/23", + "0.4182621" + ], + [ + "jw6r7e", + "-104.222062841435", + "47.3035979968369", + "428668.608200665", + "06/05/23", + "06/05/23", + "0.60702795" + ], + [ + "vk75nj", + "-113.645022416801", + "45.7788101761841", + "934663.9148471", + "06/05/23", + "06/05/23", + "0.54281" + ], + [ + "9nxerg", + "-111.222732204548", + "45.219986950679", + "889889.843305749", + "06/05/23", + "06/05/23", + "0.5205318" + ], + [ + "b3q4rz", + "-106.666485759142", + "46.6459782650161", + "1081355.91640985", + "06/05/23", + "06/05/23", + "0.41128084" + ], + [ + "wn75qd", + "-104.231475923274", + "46.5124141005816", + "307441.507948999", + "06/05/23", + "06/05/23", + "0.6391206" + ], + [ + "kn5vjv", + "-110.027481143184", + "47.588579127204", + "529957.87050568", + "06/05/23", + "06/05/23", + "0.56212324" + ], + [ + "n3r7bg", + "-105.735035703624", + "46.5749328039923", + "1089178.6480604", + "06/05/23", + "06/05/23", + "0.48395208" + ], + [ + "ejrzlg", + "-112.219797336685", + "45.1155452441482", + "469515.11961855", + "06/05/23", + "06/05/23", + "0.4553527" + ], + [ + "6nxwdp", + "-110.495155545435", + "45.6576935963941", + "1096726.32967767", + "06/05/23", + "06/05/23", + "0.56136376" + ], + [ + "7zr4pz", + "-109.026015173819", + "48.3426225944827", + "729087.800338853", + "06/05/23", + "06/05/23", + "0.6155506" + ], + [ + "ldgmvn", + "-109.092202083462", + "45.8458181843412", + "1025191.24363939", + "06/05/23", + "06/05/23", + "0.5129816" + ], + [ + "1kwmn7", + "-113.477579476698", + "47.3751663483024", + "1532258.8215805", + "06/05/23", + "06/05/23", + "0.6874843" + ], + [ + "z5rbqe", + "-115.765222071007", + "48.0334893281168", + "423364.659249162", + "06/05/23", + "06/05/23", + "0.70458215" + ], + [ + "xlxmq4", + "-105.247553097922", + "47.8227529871448", + "1081593.51712858", + "06/05/23", + "06/05/23", + "0.5467322" + ], + [ + "qj5kn4", + "-80.0385911150926", + "41.8260911515963", + "1106856.24274822", + "06/05/23", + "06/05/23", + "0.79526263" + ], + [ + "4nx47x", + "-77.5424754107443", + "40.9840597215055", + "1053145.82851997", + "06/05/23", + "06/05/23", + "0.8668687" + ], + [ + "5zx9lj", + "-75.4276621065858", + "41.6881561813038", + "602269.492119776", + "06/05/23", + "06/05/23", + "0.82592374" + ], + [ + "g56vpj", + "-74.9996143822412", + "41.4047384041368", + "221966.452267035", + "06/05/23", + "06/05/23", + "0.8464144" + ], + [ + "rx7ve9", + "-76.5105072019667", + "40.0156148228734", + "307886.91440815", + "06/05/23", + "06/05/23", + "0.6019302" + ], + [ + "dm6a77", + "-78.9434087656049", + "40.1659201414784", + "494416.573218844", + "06/05/23", + "06/05/23", + "0.78855675" + ], + [ + "pm7nkd", + "-77.1745970933903", + "39.8744253669201", + "279726.484815447", + "06/05/23", + "06/05/23", + "0.640639" + ], + [ + "37nx6z", + "-75.3817476497574", + "40.9809274567906", + "807303.920005425", + "06/05/23", + "06/05/23", + "0.8328721" + ], + [ + "apx4nz", + "-78.6303405733148", + "41.8336169201866", + "1306390.61885274", + "06/05/23", + "06/05/23", + "0.8718706" + ], + [ + "dm6a7n", + "-76.561841287765", + "41.4613529175896", + "644447.351973863", + "06/05/23", + "06/05/23", + "0.8673556" + ], + [ + "pm7nkx", + "-75.546008718308", + "41.2518040533184", + "533152.164193803", + "06/05/23", + "06/05/23", + "0.8570468" + ], + [ + "37nx6m", + "-78.6380809968967", + "39.9147083233127", + "299830.946908299", + "06/05/23", + "06/05/23", + "0.8488576" + ], + [ + "apx4nk", + "-77.524631984512", + "40.4851033456027", + "575263.855157637", + "06/05/23", + "06/05/23", + "0.8159164" + ], + [ + "mp6m75", + "-78.2847777699349", + "40.1442542736725", + "801301.844980467", + "06/05/23", + "06/05/23", + "0.7924693" + ], + [ + "jw6rnk", + "-75.9862905271511", + "41.6316732780697", + "1093829.95414313", + "06/05/23", + "06/05/23", + "0.80185306" + ], + [ + "vk75r5", + "-79.3136173269245", + "40.0889845807438", + "768657.872112831", + "06/05/23", + "06/05/23", + "0.86136216" + ], + [ + "9nxe63", + "-79.6905557644662", + "41.3838700083483", + "742105.359205074", + "06/05/23", + "06/05/23", + "0.8736695" + ], + [ + "b3q4ag", + "-78.0486948399397", + "41.3392391207632", + "712834.228488982", + "06/05/23", + "06/05/23", + "0.884297" + ], + [ + "wn7591", + "-77.6426432841708", + "39.9811560600602", + "297031.547385956", + "06/05/23", + "06/05/23", + "0.5616486" + ], + [ + "kn5ven", + "-76.6896035208636", + "41.0654372585498", + "906306.939611934", + "06/05/23", + "06/05/23", + "0.6981209" + ], + [ + "n3r7lw", + "-79.9446553239097", + "40.1017387364942", + "1100798.94263608", + "06/05/23", + "06/05/23", + "0.81303173" + ], + [ + "ejrzvn", + "-75.7087561675393", + "40.3876546517106", + "1056237.04170458", + "06/05/23", + "06/05/23", + "0.72151464" + ], + [ + "6nxwk6", + "-80.1618961981883", + "41.1935757798518", + "876577.497605322", + "06/05/23", + "06/05/23", + "0.7562316" + ], + [ + "7zr4nj", + "-77.9419339718793", + "40.3128380622705", + "628658.290794287", + "06/05/23", + "06/05/23", + "0.813489" + ], + [ + "ldgm65", + "-78.841811032812", + "41.4251457710406", + "1055802.38927157", + "06/05/23", + "06/05/23", + "0.8916854" + ], + [ + "1kwmjw", + "-77.6566907028484", + "41.6085654594886", + "765973.7937061", + "06/05/23", + "06/05/23", + "0.8763106" + ], + [ + "z5rbkg", + "-79.1244797316943", + "41.0528083943917", + "1066190.96830029", + "06/05/23", + "06/05/23", + "0.8216489" + ], + [ + "xlxmbz", + "-75.9616741394473", + "40.7793719073172", + "689390.071948689", + "06/05/23", + "06/05/23", + "0.775938" + ], + [ + "qj5kpv", + "-76.8044809339904", + "39.8507742350604", + "189498.608206939", + "06/05/23", + "06/05/23", + "0.6294858" + ], + [ + "4nx4b7", + "-80.3307425426317", + "39.8583628354977", + "247625.938192284", + "06/05/23", + "06/05/23", + "0.86784" + ], + [ + "5zx9ww", + "-78.7301007262775", + "40.7056245395969", + "557491.561780809", + "06/05/23", + "06/05/23", + "0.8089195" + ], + [ + "g56vbl", + "-78.9318319147048", + "39.8282924943259", + "152168.647522274", + "06/05/23", + "06/05/23", + "0.8303344" + ], + [ + "rx7v3l", + "-76.9465455887496", + "41.7790870163838", + "1141964.46907648", + "06/05/23", + "06/05/23", + "0.81494796" + ], + [ + "dm6ajn", + "-78.3511014125743", + "39.8153841595013", + "98037.1261895264", + "06/05/23", + "06/05/23", + "0.8364382" + ], + [ + "pm7ndx", + "-76.4660823667007", + "40.5611278233203", + "534959.346657236", + "06/05/23", + "06/05/23", + "0.7861968" + ], + [ + "37nx9m", + "-79.9016349539455", + "40.623751050207", + "1747541.89963709", + "06/05/23", + "06/05/23", + "0.81618285" + ], + [ + "apx43k", + "-78.2850450153583", + "40.7534906883675", + "525168.786370401", + "06/05/23", + "06/05/23", + "0.8562271" + ], + [ + "mp6ma5", + "-77.4369234362359", + "39.9282896168588", + "260875.768208397", + "06/05/23", + "06/05/23", + "0.76476663" + ], + [ + "jw6rdk", + "-75.8293931268713", + "39.9378991764376", + "247219.831372779", + "06/05/23", + "06/05/23", + "0.7124044" + ], + [ + "vk75e5", + "-75.2254011172167", + "40.1253092577121", + "767913.946539813", + "06/05/23", + "06/05/23", + "0.7467714" + ], + [ + "9nxe53", + "-76.9180756040429", + "40.2336313097522", + "671196.030970219", + "06/05/23", + "06/05/23", + "0.667529" + ], + [ + "b3q4kg", + "-77.0623681395072", + "40.6452904304684", + "543848.371629117", + "06/05/23", + "06/05/23", + "0.65290695" + ], + [ + "wn7561", + "-76.1981670084629", + "39.9461976182306", + "504600.066643163", + "06/05/23", + "06/05/23", + "0.57742697" + ], + [ + "kn5vpn", + "-147.325504554029", + "62.621220937147", + "774346.688682212", + "06/05/23", + "06/05/23", + "0.5384352" + ], + [ + "n3r7mw", + "-156.402265209318", + "62.1622257162615", + "608825.842303814", + "06/05/23", + "06/05/23", + "0.5905167" + ], + [ + "ejrz6n", + "-148.344976489518", + "63.0153952622156", + "1047150.07939274", + "06/05/23", + "06/05/23", + "0.26248097" + ], + [ + "6nxw56", + "-156.50751255039", + "67.9416255817196", + "604206.5452636", + "06/05/23", + "06/05/23", + "0.26876435" + ], + [ + "7zr45j", + "-149.68248127932", + "69.9999540582568", + "1731741.07228773", + "06/05/23", + "06/05/23", + "0.3054153" + ], + [ + "ldgm35", + "-148.018632579472", + "64.1848066810261", + "1099421.16211054", + "06/05/23", + "06/05/23", + "0.5906521" + ], + [ + "1kwmlw", + "-153.708967443169", + "67.380989140112", + "998138.0991853", + "06/05/23", + "06/05/23", + "0.10068629" + ], + [ + "z5rb1g", + "-157.525037612284", + "67.7376141068585", + "482300.233372692", + "06/05/23", + "06/05/23", + "0" + ], + [ + "xlxm7z", + "-147.469551879653", + "61.3668890847808", + "2615450.26047562", + "06/05/23", + "06/05/23", + "0" + ], + [ + "qj5k9v", + "-151.513912240468", + "63.3875820057611", + "1967320.54017429", + "06/05/23", + "06/05/23", + "0.5958659" + ], + [ + "4nx457", + "-151.100806449612", + "65.6479401624786", + "868564.482951056", + "06/05/23", + "06/05/23", + "0.46433482" + ], + [ + "5zx95w", + "-144.236908786059", + "64.6951901548885", + "716521.594275649", + "06/05/23", + "06/05/23", + "0.573759" + ], + [ + "g56vll", + "-135.957185173271", + "58.2334262225799", + "682850.675170567", + "06/05/23", + "06/05/23", + "0.6040845" + ], + [ + "rx7vbl", + "-152.495398278985", + "66.3628241708526", + "709605.173992834", + "06/05/23", + "06/05/23", + "0.5506985" + ], + [ + "dm6aen", + "-145.230420844167", + "64.2668803010334", + "791940.781519993", + "06/05/23", + "06/05/23", + "0.6297273" + ], + [ + "pm7nvx", + "-157.662278149057", + "63.8554135392067", + "547533.713128511", + "06/05/23", + "06/05/23", + "0.45985693" + ], + [ + "37nxzm", + "-145.576978881907", + "60.8286432033043", + "1139498.63414142", + "06/05/23", + "06/05/23", + "0.24467088" + ], + [ + "apx4wk", + "-161.956602246287", + "68.0343448791646", + "1187000.05322997", + "06/05/23", + "06/05/23", + "0" + ], + [ + "mp6mk5", + "-142.284426040076", + "69.6652418764318", + "741060.384159097", + "06/05/23", + "06/05/23", + "0" + ], + [ + "jw6r9k", + "-148.466351235216", + "68.9080451689463", + "649627.566365772", + "06/05/23", + "06/05/23", + "0.20742016" + ], + [ + "vk75d5", + "-160.117989369009", + "69.7826816329991", + "543803.774050122", + "06/05/23", + "06/05/23", + "0.4855935" + ], + [ + "9nxel3", + "-158.822643695437", + "68.6448447197746", + "789942.80998103", + "06/05/23", + "06/05/23", + "0.19274943" + ], + [ + "b3q4xg", + "-149.455207878942", + "68.7687182924376", + "1223783.75683093", + "06/05/23", + "06/05/23", + "0.41561827" + ], + [ + "wn75p1", + "-146.733707151622", + "69.5577532319014", + "630049.735258921", + "06/05/23", + "06/05/23", + "0.22567439" + ], + [ + "kn5vbn", + "-151.825683339503", + "69.2047400919141", + "1206935.36081753", + "06/05/23", + "06/05/23", + "0.5252598" + ], + [ + "n3r7nw", + "-158.946558054913", + "61.2986282351249", + "886782.815376808", + "06/05/23", + "06/05/23", + "0.5453798" + ], + [ + "ejrz3n", + "-143.523686210891", + "68.6158980793194", + "602844.832518296", + "06/05/23", + "06/05/23", + "0.07008318" + ], + [ + "6nxwe6", + "-146.384587178752", + "69.9596235638769", + "708357.770219506", + "06/05/23", + "06/05/23", + "0.22506902" + ], + [ + "7zr46j", + "-149.888881280411", + "65.9251668241176", + "1157295.78829633", + "06/05/23", + "06/05/23", + "0.59812695" + ], + [ + "ldgmr5", + "-151.076562136941", + "64.4118658546631", + "1419602.93319878", + "06/05/23", + "06/05/23", + "0.6229687" + ], + [ + "1kwm9w", + "-158.296683060992", + "60.8002138630501", + "1380837.83191091", + "06/05/23", + "06/05/23", + "0.549664" + ], + [ + "z5rbmg", + "-155.625098083856", + "65.3363975313381", + "1298480.0837417", + "06/05/23", + "06/05/23", + "0.5513689" + ], + [ + "qj5k7v", + "-146.483026118951", + "64.6777982420411", + "1169767.80174233", + "06/05/23", + "06/05/23", + "0.6231876" + ], + [ + "5zx9nw", + "-155.393913131857", + "61.7415685252545", + "642474.177954001", + "06/05/23", + "06/05/23", + "0.56895906" + ], + [ + "g56vml", + "-151.859115450033", + "67.3415779900704", + "481160.148454349", + "06/05/23", + "06/05/23", + "0.5136698" + ], + [ + "rx7vll", + "-141.336873575486", + "63.7688082946604", + "931161.012238232", + "06/05/23", + "06/05/23", + "0.6042432" + ], + [ + "dm6apn", + "-153.128170539968", + "66.4720695141638", + "736946.399829536", + "06/05/23", + "06/05/23", + "0.61914796" + ], + [ + "pm7n6x", + "-143.750083888595", + "61.964412175333", + "959968.960722552", + "06/05/23", + "06/05/23", + "0" + ], + [ + "37nxwm", + "-160.242919395783", + "63.3547759651068", + "886960.067031195", + "06/05/23", + "06/05/23", + "0.5516917" + ], + [ + "apx4zk", + "-141.53374598369", + "62.2064824186185", + "729790.54431765", + "06/05/23", + "06/05/23", + "0.49036124" + ], + [ + "mp6md5", + "-157.032900320897", + "64.1059266296785", + "1018928.28859206", + "06/05/23", + "06/05/23", + "0.4056876" + ], + [ + "jw6rzk", + "-163.171294731876", + "64.8805704871773", + "1568980.78441962", + "06/05/23", + "06/05/23", + "0.40151384" + ], + [ + "vk75w5", + "-130.833314984892", + "55.6736322983673", + "2680056.14791767", + "06/05/23", + "06/05/23", + "0.44263443" + ], + [ + "9nxeb3", + "-161.67814187522", + "63.259326132917", + "800413.878716143", + "06/05/23", + "06/05/23", + "0.44675708" + ], + [ + "b3q4wg", + "-144.953054202813", + "63.3423890965469", + "774849.97710559", + "06/05/23", + "06/05/23", + "0" + ], + [ + "wn75k1", + "-156.568525774526", + "70.0847174831419", + "598829.342416387", + "06/05/23", + "06/05/23", + "0.3714645" + ], + [ + "kn5vxn", + "-141.755126010291", + "69.0735325351097", + "760280.802044218", + "06/05/23", + "06/05/23", + "0.19468172" + ], + [ + "n3r7pw", + "-148.727911297", + "64.6636127301059", + "2145164.80466103", + "06/05/23", + "06/05/23", + "0.60247916" + ], + [ + "ejrzen", + "-154.531133587895", + "70.2336198596751", + "539306.187282229", + "06/05/23", + "06/05/23", + "0.17629999" + ], + [ + "6nxwj6", + "-150.577052499101", + "62.5203809938981", + "1555987.77003659", + "06/05/23", + "06/05/23", + "0.4948263" + ], + [ + "7zr4vj", + "-154.177989334591", + "68.3350598176282", + "1470444.29977068", + "06/05/23", + "06/05/23", + "0.38360363" + ], + [ + "ldgmq5", + "-148.179474486983", + "70.072623857652", + "747974.463859752", + "06/05/23", + "06/05/23", + "0.3187532" + ], + [ + "1kwmdw", + "-147.489145294688", + "68.8119830246946", + "948950.701833816", + "06/05/23", + "06/05/23", + "0" + ], + [ + "z5rb6g", + "-147.93028950147", + "62.1100487416164", + "640886.820436677", + "06/05/23", + "06/05/23", + "0.2444918" + ], + [ + "xlxmnz", + "-160.42027113625", + "67.6705829157713", + "1058883.35450187", + "06/05/23", + "06/05/23", + "0.008229198" + ], + [ + "qj5kmv", + "-147.277022853354", + "61.9146108512168", + "595498.504225767", + "06/05/23", + "06/05/23", + "0.5239826" + ], + [ + "4nx4a7", + "-153.736099485362", + "63.1193169734227", + "2014853.96830536", + "06/05/23", + "06/05/23", + "0.5437883" + ], + [ + "5zx9mw", + "-151.482987051639", + "61.9484947107605", + "1160881.93971932", + "06/05/23", + "06/05/23", + "0.58166075" + ], + [ + "g56v7l", + "-148.021723213646", + "69.5906045325774", + "844753.171306529", + "06/05/23", + "06/05/23", + "0.390683" + ], + [ + "rx7vjl", + "-145.364045919936", + "60.8172977070304", + "642452.66990172", + "06/05/23", + "06/05/23", + "0" + ], + [ + "dm6ann", + "-155.872918687292", + "69.6139814310518", + "552885.296089919", + "06/05/23", + "06/05/23", + "0.47232774" + ], + [ + "pm7nax", + "-149.322907300799", + "67.0889526706612", + "621474.474814436", + "06/05/23", + "06/05/23", + "0.41477543" + ], + [ + "37nx3m", + "-149.135315672925", + "60.3241233570073", + "1224552.10036919", + "06/05/23", + "06/05/23", + "0" + ], + [ + "apx4bk", + "-143.229029713866", + "66.1265209499752", + "2932781.32901092", + "06/05/23", + "06/05/23", + "0.58861554" + ], + [ + "dm6avg", + "-158.376113966737", + "59.6161719786283", + "664226.726182384", + "06/05/23", + "06/05/23", + "0.5395051" + ], + [ + "pm7nx1", + "-161.735446350461", + "65.4906553566013", + "1112655.57275094", + "06/05/23", + "06/05/23", + "0.44325563" + ], + [ + "apx4ad", + "-163.803494431326", + "68.6339778468375", + "454179.593676708", + "06/05/23", + "06/05/23", + "0.4405232" + ], + [ + "mp6mlj", + "-143.541887386004", + "60.6285352563969", + "1145833.13509208", + "06/05/23", + "06/05/23", + "0" + ], + [ + "jw6rea", + "-155.871897670034", + "60.5355947415268", + "634885.378001492", + "06/05/23", + "06/05/23", + "0.4853137" + ], + [ + "vk75ak", + "-142.605745629063", + "67.4707175291838", + "811158.479269089", + "06/05/23", + "06/05/23", + "0.55783594" + ], + [ + "9nxejz", + "-149.250184782325", + "65.2441888643411", + "525107.773086797", + "06/05/23", + "06/05/23", + "0.6529126" + ], + [ + "b3q4m6", + "-144.556933104201", + "67.2690648782364", + "1179920.48804471", + "06/05/23", + "06/05/23", + "0.49458808" + ], + [ + "wn75mr", + "-154.150875177912", + "66.311105135002", + "833177.158014962", + "06/05/23", + "06/05/23", + "0.561611" + ], + [ + "kn5v6z", + "-149.630379690081", + "67.6732205788019", + "845522.337211488", + "06/05/23", + "06/05/23", + "0.17236166" + ], + [ + "n3r714", + "-150.699275403067", + "63.1797159923477", + "944570.144173924", + "06/05/23", + "06/05/23", + "0.011004496" + ], + [ + "6nxw3v", + "-153.321854793792", + "65.9297649260334", + "692596.922543805", + "06/05/23", + "06/05/23", + "0.51598006" + ], + [ + "7zr4aq", + "-152.383958486645", + "68.5868851535818", + "524933.431345366", + "06/05/23", + "06/05/23", + "0.47709814" + ], + [ + "ldgm7p", + "-165.344928782703", + "64.8024308165403", + "832437.344275468", + "06/05/23", + "06/05/23", + "0" + ], + [ + "1kwmxn", + "-165.342589510695", + "68.2220329119572", + "567621.664628289", + "06/05/23", + "06/05/23", + "0" + ], + [ + "z5rb9k", + "-159.088964568696", + "59.6088594398342", + "1345215.81616904", + "06/05/23", + "06/05/23", + "0" + ], + [ + "xlxmj7", + "-139.641608165575", + "59.9755376217074", + "1400197.86235892", + "06/05/23", + "06/05/23", + "0" + ], + [ + "qj5kr7", + "-148.774656927419", + "62.2159949003236", + "1600529.55461331", + "06/05/23", + "06/05/23", + "0.038302824" + ], + [ + "4nx4da", + "-159.992842324921", + "65.7993242107797", + "846808.581996877", + "06/05/23", + "06/05/23", + "0.43257508" + ], + [ + "5zx9pp", + "-155.916284442823", + "66.7603563890947", + "1889074.3724935", + "06/05/23", + "06/05/23", + "0.45990288" + ], + [ + "g56vwe", + "-160.606855944251", + "66.2661341572918", + "620973.46371424", + "06/05/23", + "06/05/23", + "0.35883647" + ], + [ + "dm6awg", + "-164.197845936157", + "62.9577578065953", + "664532.456819662", + "06/05/23", + "06/05/23", + "0.14808464" + ], + [ + "37nxmx", + "-146.030481999489", + "65.4559829127256", + "736572.982086549", + "06/05/23", + "06/05/23", + "0.59424" + ], + [ + "apx4vd", + "-143.195423397403", + "64.5981901884184", + "2406952.213806", + "06/05/23", + "06/05/23", + "0.5952409" + ], + [ + "mp6mxj", + "-156.477720654349", + "67.3137549530997", + "829920.775640622", + "06/05/23", + "06/05/23", + "0" + ], + [ + "jw6rla", + "-146.578218466881", + "68.6262716478027", + "1002141.19052766", + "06/05/23", + "06/05/23", + "0" + ], + [ + "b3q496", + "-143.934769655386", + "67.8202164862207", + "566111.546322244", + "06/05/23", + "06/05/23", + "0.4799324" + ], + [ + "wn75vr", + "-158.691132090809", + "64.1066792581837", + "1568899.05382095", + "06/05/23", + "06/05/23", + "0.46063086" + ], + [ + "kn5v1z", + "-157.256045721073", + "69.7294472387013", + "1119887.46555353", + "06/05/23", + "06/05/23", + "0.4491489" + ], + [ + "n3r7q4", + "-161.022837076804", + "60.5018427122265", + "2586387.82112563", + "06/05/23", + "06/05/23", + "0.45398223" + ], + [ + "ejrzkr", + "-164.87608594207", + "68.5272871235767", + "525855.209533055", + "06/05/23", + "06/05/23", + "0" + ], + [ + "6nxw9v", + "-142.052757875288", + "64.4518223811984", + "962330.797898929", + "06/05/23", + "06/05/23", + "0.6470165" + ], + [ + "1kwm3n", + "-143.954378821802", + "69.054261374173", + "1303963.37189384", + "06/05/23", + "06/05/23", + "0" + ], + [ + "z5rbwk", + "-164.676086840934", + "65.8579269948359", + "1718590.54305124", + "06/05/23", + "06/05/23", + "0.37256816" + ], + [ + "xlxm97", + "-163.239768407388", + "62.617149359715", + "1499458.66229792", + "06/05/23", + "06/05/23", + "0.28957537" + ], + [ + "qj5kd7", + "-142.818558877123", + "62.4118381518093", + "766091.392144896", + "06/05/23", + "06/05/23", + "0.4371544" + ], + [ + "4nx4ja", + "-150.332993254883", + "69.1701125539735", + "459138.243500634", + "06/05/23", + "06/05/23", + "0.5095203" + ], + [ + "5zx9vp", + "-150.772689287906", + "67.547859095586", + "1324824.15831926", + "06/05/23", + "06/05/23", + "0.54141676" + ], + [ + "g56vee", + "-145.050167911349", + "65.3108727355847", + "1103501.23962827", + "06/05/23", + "06/05/23", + "0.5626361" + ], + [ + "rx7vp5", + "-162.68721807475", + "67.556697697005", + "1520336.90820108", + "06/05/23", + "06/05/23", + "0.22466955" + ], + [ + "dm6a1g", + "-160.950958296785", + "67.1580545189795", + "552180.591082826", + "06/05/23", + "06/05/23", + "0.48404977" + ], + [ + "pm7nz1", + "-145.316942595711", + "62.9474647936591", + "863073.603721639", + "06/05/23", + "06/05/23", + "0.40995297" + ], + [ + "37nxkx", + "-155.992755091733", + "62.5685050134531", + "624752.99783083", + "06/05/23", + "06/05/23", + "0.65224075" + ], + [ + "apx4kd", + "-160.012282358242", + "66.8526314638774", + "2003554.77629844", + "06/05/23", + "06/05/23", + "0.37821457" + ], + [ + "jw6rja", + "-161.18287231107", + "70.1498941319971", + "736820.451205737", + "06/05/23", + "06/05/23", + "0.30362105" + ], + [ + "vk75vk", + "-154.413445283699", + "67.781590289577", + "759163.585246168", + "06/05/23", + "06/05/23", + "0.23673226" + ], + [ + "9nxegz", + "-153.534778816141", + "61.1329038250088", + "614446.908508509", + "06/05/23", + "06/05/23", + "0" + ], + [ + "b3q4e6", + "-155.206234805043", + "68.6062987714773", + "536889.694349467", + "06/05/23", + "06/05/23", + "0.4878533" + ], + [ + "wn75br", + "-143.486237360692", + "68.2520663002565", + "868750.337826356", + "06/05/23", + "06/05/23", + "0.36332807" + ], + [ + "kn5v9z", + "-143.591538321581", + "69.8180045707452", + "737953.862301975", + "06/05/23", + "06/05/23", + "0" + ], + [ + "n3r764", + "-138.036507166028", + "59.1000193499545", + "2231475.35328564", + "06/05/23", + "06/05/23", + "0.63576883" + ], + [ + "ejrzxr", + "-154.954735628842", + "69.3068900658565", + "565894.125217273", + "06/05/23", + "06/05/23", + "0.5228369" + ], + [ + "6nxw1v", + "-153.580572340104", + "59.6052888932418", + "2209319.02300517", + "06/05/23", + "06/05/23", + "0" + ], + [ + "7zr4xq", + "-154.336898205122", + "66.6492326603473", + "1417368.24656677", + "06/05/23", + "06/05/23", + "0.59965026" + ], + [ + "ldgmwp", + "-158.177488086293", + "67.8489079096507", + "634034.165202977", + "06/05/23", + "06/05/23", + "0.20872611" + ], + [ + "1kwmvn", + "-141.477020171116", + "65.47981563965", + "1247689.07131572", + "06/05/23", + "06/05/23", + "0.60393655" + ], + [ + "z5rb7k", + "-142.265830400688", + "63.8966548099019", + "605855.010952994", + "06/05/23", + "06/05/23", + "0.5654861" + ], + [ + "xlxmk7", + "-146.924566646856", + "65.5724714173239", + "635477.798323882", + "06/05/23", + "06/05/23", + "0.5610235" + ], + [ + "qj5kq7", + "-152.385013443551", + "61.8592471630553", + "1525482.39341445", + "06/05/23", + "06/05/23", + "0" + ], + [ + "4nx4ea", + "-163.129553997656", + "65.1905910164785", + "698013.788769784", + "06/05/23", + "06/05/23", + "0" + ], + [ + "5zx97p", + "-151.746855250745", + "66.8960016392133", + "612261.816914701", + "06/05/23", + "06/05/23", + "0.58125365" + ], + [ + "g56vge", + "-153.043176146158", + "69.4614552064419", + "503105.478416045", + "06/05/23", + "06/05/23", + "0.4781466" + ], + [ + "rx7v55", + "-143.599422818486", + "60.2597707445568", + "1351923.29204984", + "06/05/23", + "06/05/23", + "0.5891991" + ], + [ + "dm65gg", + "-149.811298503778", + "65.4492643938397", + "902192.06965669", + "06/05/23", + "06/05/23", + "0.59251934" + ], + [ + "pm7lw1", + "-153.137232733845", + "69.1777112871538", + "656037.40875839", + "06/05/23", + "06/05/23", + "0.54706556" + ], + [ + "37n5lx", + "-151.039206727552", + "66.4477607012118", + "1484305.22732223", + "06/05/23", + "06/05/23", + "0.55082476" + ], + [ + "apxdqd", + "-154.60526741356", + "61.2754075586966", + "2064494.04689838", + "06/05/23", + "06/05/23", + "0.5050647" + ], + [ + "mp6z5j", + "-158.7812365812", + "65.6488492848373", + "1398325.14359501", + "06/05/23", + "06/05/23", + "0.3924304" + ], + [ + "jw6qpa", + "-133.209715701132", + "56.4078879642532", + "1190530.6632709", + "06/05/23", + "06/05/23", + "0.7064395" + ], + [ + "vk7lpk", + "-147.887330689566", + "65.2526771574616", + "1632172.45416521", + "06/05/23", + "06/05/23", + "0.61410755" + ], + [ + "9nx3vz", + "-141.70143731272", + "61.412365560223", + "1456414.47074975", + "06/05/23", + "06/05/23", + "0.16029473" + ], + [ + "b3qpz6", + "-155.196045890921", + "62.4701661283089", + "1009798.05713974", + "06/05/23", + "06/05/23", + "0.5482306" + ], + [ + "kn5k3z", + "-147.333359571571", + "65.2772502927756", + "544004.241749178", + "06/05/23", + "06/05/23", + "0.654685" + ], + [ + "n3rgz4", + "-145.30552362617", + "66.1792716299032", + "1213507.46248692", + "06/05/23", + "06/05/23", + "0.54685444" + ], + [ + "ejrm5r", + "-135.119988868189", + "56.9809434507529", + "1199420.57386846", + "06/05/23", + "06/05/23", + "0.47051656" + ], + [ + "6nxl4v", + "-158.932372831641", + "68.0409770212763", + "526389.210189912", + "06/05/23", + "06/05/23", + "0.40411618" + ], + [ + "7zrdwq", + "-149.10505602313", + "61.3392076270521", + "1533965.29575208", + "06/05/23", + "06/05/23", + "0.58475137" + ], + [ + "ldg9lp", + "-156.923411673375", + "59.0510729738415", + "794406.679714024", + "06/05/23", + "06/05/23", + "0.44836673" + ], + [ + "1kw45n", + "-154.540627273764", + "63.7849986562111", + "1225757.56344057", + "06/05/23", + "06/05/23", + "0.52832764" + ], + [ + "z5rpak", + "-154.58786719528", + "58.9138196968105", + "1403536.03859091", + "06/05/23", + "06/05/23", + "0" + ], + [ + "xlx5p7", + "-164.305503787621", + "62.4149750035524", + "604787.136157236", + "06/05/23", + "06/05/23", + "0.20832412" + ], + [ + "qj51w7", + "-143.478694105743", + "66.8850516705845", + "795550.338764584", + "06/05/23", + "06/05/23", + "0.52232164" + ], + [ + "4nxlpa", + "-161.250177630252", + "69.2837731439916", + "1979931.47033444", + "06/05/23", + "06/05/23", + "0.45444342" + ], + [ + "5zx43p", + "-142.411563293178", + "63.0069732257087", + "570732.361577913", + "06/05/23", + "06/05/23", + "0.5594402" + ], + [ + "g56z3e", + "-156.770598518913", + "69.052064092147", + "608310.724451681", + "06/05/23", + "06/05/23", + "0.45882127" + ], + [ + "rx7kn5", + "-151.925130026939", + "68.3594702062073", + "520565.683628376", + "06/05/23", + "06/05/23", + "0.4474426" + ], + [ + "dm65zg", + "-166.369069027091", + "65.6081549286179", + "1970287.7657634", + "06/05/23", + "06/05/23", + "0.01217337" + ], + [ + "37n5dx", + "-160.593264877631", + "63.8440118444606", + "1078405.01163688", + "06/05/23", + "06/05/23", + "0.27626425" + ], + [ + "apxd5d", + "-161.944002387988", + "68.4399326095637", + "712850.169751261", + "06/05/23", + "06/05/23", + "0" + ], + [ + "dm65zk", + "-151.547250438024", + "62.7414934041937", + "1285118.64907489", + "06/05/23", + "06/05/23", + "0" + ], + [ + "pm7l19", + "-157.616830709304", + "66.7161488015782", + "869583.268780431", + "06/05/23", + "06/05/23", + "0.45880705" + ], + [ + "37n5d7", + "-164.766312670593", + "66.3446242345223", + "639124.362070193", + "06/05/23", + "06/05/23", + "0.2007519" + ], + [ + "apxd5l", + "-162.895811936764", + "61.871477630671", + "1558970.55733412", + "06/05/23", + "06/05/23", + "0.26558056" + ], + [ + "mp6zqg", + "-150.881534979127", + "68.6658371999123", + "901600.155406118", + "06/05/23", + "06/05/23", + "0.4726685" + ], + [ + "vk7lxb", + "-162.529507715289", + "65.5683559761169", + "671617.145982088", + "06/05/23", + "06/05/23", + "0.42605525" + ], + [ + "9nx341", + "-136.19308093012", + "59.0505806759538", + "705634.407987874", + "06/05/23", + "06/05/23", + "0" + ], + [ + "b3qp5q", + "-144.466797941734", + "63.3010540195552", + "1488723.10777873", + "06/05/23", + "06/05/23", + "0.48007628" + ], + [ + "wn7ldg", + "-155.662290046599", + "58.9158874391066", + "762050.535193091", + "06/05/23", + "06/05/23", + "0.45238087" + ], + [ + "kn5klw", + "-160.056106608368", + "62.900815040131", + "973879.673089235", + "06/05/23", + "06/05/23", + "0.47583607" + ], + [ + "n3rg9a", + "-156.471291536744", + "68.4784618568766", + "1494527.8780535", + "06/05/23", + "06/05/23", + "0.4483396" + ], + [ + "ejrmdl", + "-142.32950424035", + "61.9324328671385", + "1303440.34666954", + "06/05/23", + "06/05/23", + "0.4265187" + ], + [ + "6nxlak", + "-156.525106712094", + "63.292892067725", + "2057018.22747932", + "06/05/23", + "06/05/23", + "0.5536601" + ], + [ + "7zrdm5", + "-161.578905966342", + "61.0331192690096", + "1505773.17341175", + "06/05/23", + "06/05/23", + "0.40900642" + ], + [ + "ldg9ar", + "-152.296167015619", + "69.8907046862543", + "604094.513614807", + "06/05/23", + "06/05/23", + "0.33317882" + ], + [ + "1kw4ad", + "-148.741363535988", + "63.6370875389933", + "1446532.15331634", + "06/05/23", + "06/05/23", + "0.42707485" + ], + [ + "z5rpj9", + "-149.069657512113", + "68.2522872943953", + "731424.776737152", + "06/05/23", + "06/05/23", + "0" + ], + [ + "xlx5a9", + "-149.330811984062", + "62.8646729321961", + "993172.649021316", + "06/05/23", + "06/05/23", + "0.3999945" + ], + [ + "qj51lq", + "-145.803225845802", + "69.1479790362837", + "775103.455827621", + "06/05/23", + "06/05/23", + "0.022182766" + ], + [ + "4nxl4p", + "-146.971376143982", + "67.5123836975575", + "912438.695540351", + "06/05/23", + "06/05/23", + "0.5045406" + ], + [ + "5zx491", + "-142.019293444658", + "67.9547074078014", + "1973802.05498819", + "06/05/23", + "06/05/23", + "0.46015042" + ], + [ + "g56zvv", + "-164.333472489794", + "64.6046621900326", + "539424.355051821", + "06/05/23", + "06/05/23", + "0.406871" + ], + [ + "rx7kvk", + "-159.56628153124", + "69.5782988201632", + "502296.87053874", + "06/05/23", + "06/05/23", + "0.47032362" + ], + [ + "dm65ak", + "-157.546529254978", + "60.5121040040246", + "692875.515079823", + "06/05/23", + "06/05/23", + "0.56795216" + ], + [ + "pm7ln9", + "-156.950885832237", + "60.4437996649078", + "2272346.97851752", + "06/05/23", + "06/05/23", + "0.52366066" + ], + [ + "37n5x7", + "-147.038948653663", + "63.567205709471", + "822084.696345857", + "06/05/23", + "06/05/23", + "0" + ], + [ + "apxd4l", + "-147.243159179091", + "63.2288466096944", + "1013141.92667968", + "06/05/23", + "06/05/23", + "0.40968764" + ], + [ + "mp6zmg", + "-158.813963484774", + "60.4513342637585", + "980185.64424113", + "06/05/23", + "06/05/23", + "0.11404172" + ], + [ + "jw6qr1", + "-155.169773467431", + "67.0935645430152", + "554260.736033297", + "06/05/23", + "06/05/23", + "0.059636496" + ], + [ + "vk7l5b", + "-155.801112424334", + "67.6084329293333", + "1019004.5156597", + "06/05/23", + "06/05/23", + "0.0041481354" + ], + [ + "9nx3e1", + "-153.057606769977", + "60.3981122659435", + "616270.28527013", + "06/05/23", + "06/05/23", + "0" + ], + [ + "b3qp4q", + "-154.725303485593", + "66.0201993468495", + "797082.66097166", + "06/05/23", + "06/05/23", + "0.50456816" + ], + [ + "wn7l5g", + "-159.048529287509", + "62.5547037999103", + "838281.588152069", + "06/05/23", + "06/05/23", + "0.57202387" + ], + [ + "kn5kvw", + "-160.030891791441", + "65.2151639543772", + "780268.045252138", + "06/05/23", + "06/05/23", + "0.061766353" + ], + [ + "n3rg7a", + "-155.276288575519", + "58.4023497557121", + "1395507.20919232", + "06/05/23", + "06/05/23", + "0.22368021" + ], + [ + "ejrmzl", + "-158.168683852995", + "61.7642214577932", + "931870.145373736", + "06/05/23", + "06/05/23", + "0.47750902" + ], + [ + "6nxlwk", + "-150.20269127833", + "69.511485249253", + "977946.2764448", + "06/05/23", + "06/05/23", + "0.44238362" + ], + [ + "7zrd45", + "-155.811127845355", + "69.2162250677631", + "508928.245869853", + "06/05/23", + "06/05/23", + "0.45964718" + ], + [ + "1kw4md", + "-147.298085794902", + "68.1835788113488", + "1141489.90022879", + "06/05/23", + "06/05/23", + "0.18977292" + ], + [ + "z5rpb9", + "-165.088063263361", + "61.913207346485", + "1934982.42446189", + "06/05/23", + "06/05/23", + "0.21933928" + ], + [ + "xlx5m9", + "-144.665372929681", + "69.3989513155337", + "542833.191561448", + "06/05/23", + "06/05/23", + "0.32637608" + ], + [ + "qj51kq", + "-160.425441775555", + "64.5928823452879", + "1122331.28636449", + "06/05/23", + "06/05/23", + "0.30774993" + ], + [ + "5zx441", + "-157.824545372084", + "59.1634168685763", + "1570203.32741487", + "06/05/23", + "06/05/23", + "0.4755983" + ], + [ + "g56zzv", + "-159.514638333698", + "64.3261386315645", + "701329.824359716", + "06/05/23", + "06/05/23", + "0.25050288" + ], + [ + "rx7kkk", + "-134.383827316538", + "57.6840514929093", + "1088167.01049546", + "06/05/23", + "06/05/23", + "0.53459364" + ], + [ + "dm655k", + "-135.70002801726", + "59.4447884205124", + "933979.326194787", + "06/05/23", + "06/05/23", + "0.19775204" + ], + [ + "pm7ll9", + "-161.655815540598", + "67.4002135831786", + "737610.36605525", + "06/05/23", + "06/05/23", + "0.0067258505" + ], + [ + "37n557", + "-156.160735736076", + "65.7642713520977", + "954503.574860985", + "06/05/23", + "06/05/23", + "0.4135473" + ], + [ + "apxddl", + "-153.828064991254", + "64.3632029986498", + "1137942.84285377", + "06/05/23", + "06/05/23", + "0.6054146" + ], + [ + "mp6zzg", + "-154.853676594167", + "64.5426524972002", + "571664.988680209", + "06/05/23", + "06/05/23", + "0.5826419" + ], + [ + "jw6qq1", + "-153.840891206105", + "65.3539939514302", + "1563726.7468012", + "06/05/23", + "06/05/23", + "0.589162" + ], + [ + "vk7llb", + "-151.476119254603", + "70.0821539893641", + "806876.036282985", + "06/05/23", + "06/05/23", + "0.28404152" + ], + [ + "9nx331", + "-158.374704037267", + "70.1190927282741", + "428528.110012087", + "06/05/23", + "06/05/23", + "0.44472668" + ], + [ + "b3qppq", + "-148.286795352535", + "65.9791151597997", + "876503.864155748", + "06/05/23", + "06/05/23", + "0.64267945" + ], + [ + "wn7llg", + "-157.902596430158", + "69.1272101969056", + "713932.214557934", + "06/05/23", + "06/05/23", + "0.41489816" + ], + [ + "kn5kkw", + "-161.758978425466", + "61.942670633069", + "1358216.5481473", + "06/05/23", + "06/05/23", + "0.39539096" + ], + [ + "n3rgga", + "-154.219290672541", + "69.0246357581964", + "1196500.79251232", + "06/05/23", + "06/05/23", + "0.5181247" + ], + [ + "ejrmml", + "-159.724623777504", + "60.2188443500721", + "1428821.28440647", + "06/05/23", + "06/05/23", + "0" + ], + [ + "6nxllk", + "-156.877699041141", + "64.9456055358582", + "874698.326425724", + "06/05/23", + "06/05/23", + "0.46227401" + ], + [ + "7zrdd5", + "-144.603179188525", + "69.7005517126405", + "560704.991309564", + "06/05/23", + "06/05/23", + "0.34199527" + ], + [ + "ldg99r", + "-157.826121168664", + "68.59900009122", + "582745.620920559", + "06/05/23", + "06/05/23", + "0.3435042" + ], + [ + "1kw44d", + "-162.575677474957", + "69.6013677179883", + "786822.118112993", + "06/05/23", + "06/05/23", + "0.35640764" + ], + [ + "z5rpp9", + "-164.482736512465", + "61.4513086062409", + "1686874.26308567", + "06/05/23", + "06/05/23", + "0.37615013" + ], + [ + "xlx559", + "-152.9584776073", + "68.1763162530225", + "502217.417263255", + "06/05/23", + "06/05/23", + "0" + ], + [ + "qj511q", + "-157.866147303648", + "65.5577846213588", + "869921.451273063", + "06/05/23", + "06/05/23", + "0.49776554" + ], + [ + "4nxlrp", + "-159.550048169226", + "68.3768780455326", + "561751.294794064", + "06/05/23", + "06/05/23", + "0.020889388" + ], + [ + "g56zkv", + "-157.222870000254", + "66.0173849479826", + "1101568.80438979", + "06/05/23", + "06/05/23", + "0.5040424" + ], + [ + "rx7k1k", + "-146.453332235651", + "66.174719339983", + "899292.594432262", + "06/05/23", + "06/05/23", + "0.56072664" + ], + [ + "dm65kk", + "-145.981892952521", + "64.1033443492606", + "1108478.8355159", + "06/05/23", + "06/05/23", + "0.63058895" + ], + [ + "pm7lq9", + "-135.754974359605", + "57.8160860133593", + "1066283.57944305", + "06/05/23", + "06/05/23", + "0.59674877" + ], + [ + "37n5j7", + "-155.566160652714", + "64.0252230072797", + "565895.896468637", + "06/05/23", + "06/05/23", + "0.62940735" + ], + [ + "apxdgl", + "-145.658980495957", + "68.1137907814514", + "498875.540381097", + "06/05/23", + "06/05/23", + "0.33746642" + ], + [ + "mp6zjg", + "-153.253713264086", + "70.0210184565759", + "542075.349013424", + "06/05/23", + "06/05/23", + "0.29264036" + ], + [ + "jw6q31", + "-154.166831777158", + "60.0127953295073", + "993351.861703999", + "06/05/23", + "06/05/23", + "0.30386132" + ], + [ + "vk7l3b", + "-150.729986202086", + "61.6731668504261", + "800204.111947424", + "06/05/23", + "06/05/23", + "0.63304055" + ], + [ + "9nx371", + "-163.705174773287", + "67.613683639062", + "548516.504599804", + "06/05/23", + "06/05/23", + "0" + ], + [ + "b3qpgq", + "-158.853635277884", + "63.4352345594051", + "855571.405309049", + "06/05/23", + "06/05/23", + "0.55536413" + ], + [ + "wn7lag", + "-145.211002778784", + "61.3404142340105", + "1138350.86325734", + "06/05/23", + "06/05/23", + "0" + ], + [ + "kn5kaw", + "-143.397377381659", + "65.5469482490498", + "574882.909596352", + "06/05/23", + "06/05/23", + "0.62503856" + ], + [ + "n3rgja", + "-145.110404966976", + "67.9990777148707", + "757844.951864403", + "06/05/23", + "06/05/23", + "0.3786954" + ], + [ + "6nxl7k", + "-148.434737543273", + "66.8879526733649", + "1074330.75394506", + "06/05/23", + "06/05/23", + "0.5545153" + ], + [ + "7zrde5", + "-163.48390985872", + "60.8701340241246", + "1136460.30546183", + "06/05/23", + "06/05/23", + "0.4241347" + ], + [ + "ldg9jr", + "-135.563188267013", + "58.6403219416357", + "739803.428280197", + "06/05/23", + "06/05/23", + "0.3879836" + ], + [ + "1kw4zd", + "-144.913606154241", + "67.5702806333773", + "558392.622653434", + "06/05/23", + "06/05/23", + "0.5270566" + ], + [ + "z5rpv9", + "-132.81545366242", + "57.2561895064459", + "1382077.58134798", + "06/05/23", + "06/05/23", + "0.6303129" + ], + [ + "xlx5e9", + "-154.022966687828", + "61.6375809062028", + "707482.076196778", + "06/05/23", + "06/05/23", + "0" + ], + [ + "qj51eq", + "-159.699772920987", + "67.8655770593224", + "519031.779946867", + "06/05/23", + "06/05/23", + "0.08254327" + ], + [ + "4nxlvp", + "-150.098901416267", + "61.9130065006821", + "1148831.99016984", + "06/05/23", + "06/05/23", + "0.6378232" + ], + [ + "5zx4d1", + "-150.095659037564", + "59.8981871868426", + "804202.964938305", + "06/05/23", + "06/05/23", + "0" + ], + [ + "g56zdv", + "-134.570230849551", + "58.7629457835993", + "1382627.04882479", + "06/05/23", + "06/05/23", + "0.4027935" + ], + [ + "rx7kqk", + "-160.046571976308", + "61.5467697860876", + "1755763.41588053", + "06/05/23", + "06/05/23", + "0.4750809" + ], + [ + "dm65lk", + "-153.698897164104", + "62.70107371112", + "1131355.43251188", + "06/05/23", + "06/05/23", + "0.54229474" + ], + [ + "pm7l99", + "-153.024346355698", + "64.116031115367", + "1258869.84251714", + "06/05/23", + "06/05/23", + "0.56931376" + ], + [ + "37n5v7", + "-158.707536740341", + "67.4649200742771", + "612430.971419994", + "06/05/23", + "06/05/23", + "0" + ], + [ + "apxdel", + "-165.690876356805", + "65.1444545503652", + "849425.163074831", + "06/05/23", + "06/05/23", + "0.41295373" + ], + [ + "dm65l4", + "-150.912130823447", + "60.5117492776342", + "1009600.37283569", + "06/05/23", + "06/05/23", + "0.54647744" + ], + [ + "pm7l9p", + "-144.641155756179", + "66.7963570946623", + "1061630.24907305", + "06/05/23", + "06/05/23", + "0.57196486" + ], + [ + "37n5vp", + "-142.732662152025", + "61.2260704617296", + "1252471.32348145", + "06/05/23", + "06/05/23", + "0.5143433" + ], + [ + "apxde7", + "-131.385047384939", + "55.4972289931157", + "919742.830095022", + "06/05/23", + "06/05/23", + "0.7113132" + ], + [ + "mp6zv6", + "-141.449462423598", + "62.712472678495", + "820910.799504148", + "06/05/23", + "06/05/23", + "0.55321884" + ], + [ + "jw6qav", + "-146.224677864403", + "62.4154661951809", + "625232.880432608", + "06/05/23", + "06/05/23", + "0.5874473" + ], + [ + "vk7l1z", + "-142.163409435254", + "65.0948405735658", + "952356.501912533", + "06/05/23", + "06/05/23", + "0.6785906" + ], + [ + "9nx3mr", + "-149.563750275049", + "60.6790401845588", + "703954.81888165", + "06/05/23", + "06/05/23", + "0.22584718" + ], + [ + "b3qp1r", + "-145.302128944591", + "62.1944184450816", + "2589779.51445241", + "06/05/23", + "06/05/23", + "0.5633173" + ], + [ + "wn7l19", + "-160.43539950043", + "68.6251068024186", + "620589.038909203", + "06/05/23", + "06/05/23", + "0" + ], + [ + "kn5kmp", + "-162.553373417163", + "61.3142145375343", + "793294.397116203", + "06/05/23", + "06/05/23", + "0.37776023" + ], + [ + "n3rgvn", + "-156.168624965523", + "59.6333192869368", + "2106295.19954266", + "06/05/23", + "06/05/23", + "0.46624815" + ], + [ + "ejrm1e", + "-146.548670548317", + "62.6715886894455", + "728431.868003256", + "06/05/23", + "06/05/23", + "0.527525" + ], + [ + "6nxlp3", + "-142.863113988892", + "63.4912946557885", + "1568124.63742088", + "06/05/23", + "06/05/23", + "0.6049393" + ], + [ + "7zrd3b", + "-161.177149245772", + "65.5762830491578", + "1236991.85173677", + "06/05/23", + "06/05/23", + "0.4347667" + ], + [ + "ldg94w", + "-146.183209515382", + "67.4023663209402", + "748808.090662578", + "06/05/23", + "06/05/23", + "0.54848963" + ], + [ + "1kw4k5", + "-144.28316290911", + "61.8559772250652", + "1774234.1516257", + "06/05/23", + "06/05/23", + "0.49128336" + ], + [ + "z5rp5j", + "-164.23830583725", + "67.9618912721881", + "503347.697040117", + "06/05/23", + "06/05/23", + "0" + ], + [ + "xlx5lm", + "-150.959387325737", + "59.89455835644", + "1905395.94774397", + "06/05/23", + "06/05/23", + "0.38779527" + ], + [ + "qj51j1", + "-158.220723864177", + "63.2092612791377", + "1099743.90941271", + "06/05/23", + "06/05/23", + "0.48900238" + ], + [ + "4nxlnr", + "-157.152947432583", + "61.7837686934875", + "1242779.54208767", + "06/05/23", + "06/05/23", + "0.5776785" + ], + [ + "5zx4zd", + "-156.263400740519", + "61.6078442539024", + "768992.195807848", + "06/05/23", + "06/05/23", + "0.5664451" + ], + [ + "g56z55", + "-144.878819137399", + "68.6293011775849", + "512720.779706278", + "06/05/23", + "06/05/23", + "0" + ], + [ + "rx7kx6", + "-158.971845433481", + "64.8806772892273", + "1395090.33253193", + "06/05/23", + "06/05/23", + "0.2138225" + ], + [ + "dm65m4", + "-162.453972197949", + "62.7537987119599", + "784329.777666452", + "06/05/23", + "06/05/23", + "0.4408091" + ], + [ + "pm7lmp", + "-141.766127352436", + "60.4918623431211", + "2181998.73588996", + "06/05/23", + "06/05/23", + "0.31620815" + ], + [ + "37n57p", + "-162.289029588646", + "66.7857417245018", + "117692.947708013", + "06/05/23", + "06/05/23", + "0.29250118" + ], + [ + "apxdp7", + "-147.585916516237", + "66.3249274442594", + "507375.49101311", + "06/05/23", + "06/05/23", + "0.5900511" + ], + [ + "mp6zp6", + "-162.742032984458", + "68.9162916422761", + "1303777.77005445", + "06/05/23", + "06/05/23", + "0.38042665" + ], + [ + "jw6qwv", + "-146.66816147374", + "69.2502777687524", + "442769.730089013", + "06/05/23", + "06/05/23", + "0.018976532" + ], + [ + "vk7lkz", + "-150.005978584274", + "66.7286994033085", + "710427.161143837", + "06/05/23", + "06/05/23", + "0.40078267" + ], + [ + "9nx3nr", + "-152.277807491609", + "65.5870193682205", + "574181.304279146", + "06/05/23", + "06/05/23", + "0.57582366" + ], + [ + "b3qp3r", + "-147.447068967634", + "66.7851426643751", + "613170.721900511", + "06/05/23", + "06/05/23", + "0.564117" + ], + [ + "wn7ln9", + "-160.497952971386", + "62.3062063564148", + "1059062.12437171", + "06/05/23", + "06/05/23", + "0.51192075" + ], + [ + "kn5knp", + "-152.961530582009", + "67.6580327375694", + "710384.777629048", + "06/05/23", + "06/05/23", + "0.4098245" + ], + [ + "n3rg3n", + "-156.568688902918", + "63.8478068458761", + "1082390.70676048", + "06/05/23", + "06/05/23", + "0.52789825" + ], + [ + "ejrmje", + "-162.573692504061", + "60.8162318418599", + "871822.699835738", + "06/05/23", + "06/05/23", + "0.40621743" + ], + [ + "6nxln3", + "-157.307448826317", + "61.1154006582398", + "895653.305468341", + "06/05/23", + "06/05/23", + "0.54956734" + ], + [ + "ldg9dw", + "-141.803830898369", + "68.6588905188851", + "760670.097790506", + "06/05/23", + "06/05/23", + "0.33757457" + ], + [ + "1kw415", + "-160.09073997901", + "60.714566248991", + "605708.186866687", + "06/05/23", + "06/05/23", + "0.4857796" + ], + [ + "z5rp4j", + "-161.399594862595", + "62.4767856195058", + "1274729.75375128", + "06/05/23", + "06/05/23", + "0.45833427" + ], + [ + "xlx5wm", + "-156.803200341188", + "62.6255626336299", + "1229563.09699683", + "06/05/23", + "06/05/23", + "0.56978226" + ], + [ + "qj5161", + "-158.838258132272", + "66.4273176498594", + "1111370.40336816", + "06/05/23", + "06/05/23", + "0.4467757" + ], + [ + "4nxlzr", + "-158.239388989031", + "62.446932364524", + "982836.00561296", + "06/05/23", + "06/05/23", + "0.57085717" + ], + [ + "5zx4bd", + "-151.676081910529", + "66.3461716147668", + "790718.99763247", + "06/05/23", + "06/05/23", + "0.58732736" + ], + [ + "rx7k66", + "-152.075732254539", + "67.7760879245456", + "510583.227233909", + "06/05/23", + "06/05/23", + "0.41501945" + ], + [ + "dm65q4", + "-159.580097610445", + "62.3423255149411", + "670277.637137815", + "06/05/23", + "06/05/23", + "0.06311287" + ], + [ + "pm7lbp", + "-143.223538846899", + "63.7961699540285", + "1318647.04570412", + "06/05/23", + "06/05/23", + "0.5567422" + ], + [ + "37n5ep", + "-142.320281824639", + "69.3293167774832", + "612610.310620633", + "06/05/23", + "06/05/23", + "0.17376222" + ], + [ + "apxdl7", + "-152.1897233515", + "64.9997927412426", + "1692691.9381918", + "06/05/23", + "06/05/23", + "0.5642543" + ], + [ + "mp6zb6", + "-159.683724454167", + "69.0482081851218", + "788430.793905667", + "06/05/23", + "06/05/23", + "0.44573134" + ], + [ + "jw6q4v", + "-144.780559004335", + "65.0071684478183", + "776431.198502117", + "06/05/23", + "06/05/23", + "0.6168301" + ], + [ + "vk7l6z", + "-146.377909346329", + "66.7700521832839", + "857712.025841817", + "06/05/23", + "06/05/23", + "0.5238387" + ], + [ + "9nx3zr", + "-148.636808286318", + "66.3577991019867", + "692552.57800072", + "06/05/23", + "06/05/23", + "0.6077395" + ], + [ + "b3qplr", + "-146.609610321674", + "63.8397642214826", + "566066.569189386", + "06/05/23", + "06/05/23", + "0.5724714" + ], + [ + "wn7lx9", + "-154.5583811084", + "69.8874975641452", + "756425.61019078", + "06/05/23", + "06/05/23", + "0.23605265" + ], + [ + "kn5kqp", + "-153.63016028901", + "64.8541722544025", + "677779.202960631", + "06/05/23", + "06/05/23", + "0.65213233" + ], + [ + "n3rgwn", + "-142.715019740641", + "65.7802154079334", + "970816.357113606", + "06/05/23", + "06/05/23", + "0.61844844" + ], + [ + "ejrmqe", + "-153.735487436129", + "62.302127677793", + "712815.820126588", + "06/05/23", + "06/05/23", + "0.30641058" + ], + [ + "6nxlb3", + "-133.525362145234", + "58.0968156232972", + "1024335.15989962", + "06/05/23", + "06/05/23", + "0.07195028" + ], + [ + "7zrdlb", + "-165.646840345058", + "68.6389582015597", + "546444.773093313", + "06/05/23", + "06/05/23", + "0" + ], + [ + "ldg9nw", + "-150.852891579265", + "68.1810966127646", + "494619.634535969", + "06/05/23", + "06/05/23", + "0" + ], + [ + "1kw475", + "-163.622758668605", + "65.6900825348521", + "963625.076574434", + "06/05/23", + "06/05/23", + "0.40714315" + ], + [ + "z5rplj", + "-152.939236658569", + "61.0562350696689", + "777230.096126406", + "06/05/23", + "06/05/23", + "0" + ], + [ + "xlx5vm", + "-155.371952617239", + "60.8999655127144", + "1121165.04385903", + "06/05/23", + "06/05/23", + "0.52260405" + ], + [ + "qj51x1", + "-141.825770335184", + "66.8948566897245", + "1899036.52275626", + "06/05/23", + "06/05/23", + "0.51687527" + ], + [ + "4nxl1r", + "-158.23031237565", + "67.0979274548548", + "595945.681936283", + "06/05/23", + "06/05/23", + "0.35374513" + ], + [ + "5zx4rd", + "-157.336152725107", + "65.0594601639095", + "1159830.06944482", + "06/05/23", + "06/05/23", + "0.44583812" + ], + [ + "g56zx5", + "-151.619636954493", + "63.9327227844156", + "1682459.16602417", + "06/05/23", + "06/05/23", + "0.57869107" + ], + [ + "rx7kd6", + "-159.781748670199", + "70.116863634233", + "447086.680847234", + "06/05/23", + "06/05/23", + "0.4509018" + ], + [ + "dm6544", + "-149.564544941647", + "63.9636772276103", + "810788.793805763", + "06/05/23", + "06/05/23", + "0.609899" + ], + [ + "pm7lgp", + "-143.569232020756", + "61.0629719798688", + "633818.831644257", + "06/05/23", + "06/05/23", + "0.18643579" + ], + [ + "37n5rp", + "-154.627737751741", + "60.4083366736779", + "790939.26539142", + "06/05/23", + "06/05/23", + "0" + ], + [ + "apxd17", + "-152.086826303172", + "61.1356754066601", + "1366719.81987562", + "06/05/23", + "06/05/23", + "0.49125227" + ], + [ + "jw6qxv", + "-155.528405707814", + "64.7272355800185", + "1006521.74818755", + "06/05/23", + "06/05/23", + "0.5518805" + ], + [ + "vk7lmz", + "-158.499828633108", + "69.5497505374905", + "852300.852923795", + "06/05/23", + "06/05/23", + "0.46705514" + ], + [ + "9nx3qr", + "-153.362923120768", + "61.9208540337755", + "598862.237084581", + "06/05/23", + "06/05/23", + "0.29265884" + ], + [ + "b3qp6r", + "-155.014608963283", + "63.21404754721", + "809697.260152496", + "06/05/23", + "06/05/23", + "0.5303994" + ], + [ + "wn7lj9", + "-148.335841040326", + "67.6163890966061", + "1595953.02064175", + "06/05/23", + "06/05/23", + "0.46368065" + ], + [ + "kn5k4p", + "-160.586029360706", + "60.3219319012958", + "822703.938474621", + "06/05/23", + "06/05/23", + "0.4649752" + ], + [ + "n3rgxn", + "-151.069890388843", + "64.7589103571568", + "998383.544017214", + "06/05/23", + "06/05/23", + "0.5771016" + ], + [ + "ejrmne", + "-163.633554302826", + "68.3808187937245", + "485276.220330161", + "06/05/23", + "06/05/23", + "0" + ], + [ + "6nxlz3", + "-155.635924099091", + "60.0604189397195", + "1029804.84737165", + "06/05/23", + "06/05/23", + "0.4486562" + ], + [ + "7zrdkb", + "-143.789695881125", + "62.9151620720939", + "816083.696723513", + "06/05/23", + "06/05/23", + "0.46518925" + ], + [ + "ldg9xw", + "-133.430780429388", + "56.7830132947272", + "705910.090610937", + "06/05/23", + "06/05/23", + "0.6737737" + ], + [ + "1kw465", + "-131.782850984569", + "56.4796821547917", + "840795.752945778", + "06/05/23", + "06/05/23", + "0.24121515" + ], + [ + "z5rpej", + "-132.788987350434", + "55.5606984032896", + "1806896.91240959", + "06/05/23", + "06/05/23", + "0.7328901" + ], + [ + "xlx5rm", + "-165.123134339449", + "66.4645251996254", + "8012.60544775664", + "06/05/23", + "06/05/23", + "0" + ], + [ + "qj5131", + "-170.342087725292", + "63.3927757208728", + "1125496.25951663", + "06/05/23", + "06/05/23", + "0" + ], + [ + "4nxl6r", + "-162.511635113381", + "63.5832846931107", + "31058.5684712358", + "06/05/23", + "06/05/23", + "0.43421206" + ], + [ + "5zx46d", + "-164.719160918672", + "62.7152656853408", + "52399.7672923693", + "06/05/23", + "06/05/23", + "0.010145877" + ], + [ + "g56z15", + "-147.114470582536", + "61.0571530839817", + "226549.201433115", + "06/05/23", + "06/05/23", + "0.16535793" + ], + [ + "rx7ka6", + "-148.034120874187", + "60.8485863233771", + "31392.5086587028", + "06/05/23", + "06/05/23", + "0.33097807" + ], + [ + "pm7lpp", + "-148.161967992211", + "60.6972049788274", + "17884.2301371556", + "06/05/23", + "06/05/23", + "0.06339738" + ], + [ + "37n51p", + "-148.35236513323", + "60.3136859360363", + "297287.366690147", + "06/05/23", + "06/05/23", + "0.006017119" + ], + [ + "apxdm7", + "-146.078156566475", + "60.5164572326882", + "41043.6817427493", + "06/05/23", + "06/05/23", + "0.63706845" + ], + [ + "dm6596", + "-151.917793862052", + "60.4719254786384", + "9381.87566400522", + "06/05/23", + "06/05/23", + "0.41807267" + ], + [ + "pm7lpe", + "-146.466158405493", + "60.3773216615536", + "109160.663831229", + "06/05/23", + "06/05/23", + "0.50119036" + ], + [ + "37n51q", + "-147.444262848308", + "60.043040440996", + "200574.78068939", + "06/05/23", + "06/05/23", + "0.37981018" + ], + [ + "apxdmj", + "-140.367784641894", + "59.8959172281253", + "401244.955916545", + "06/05/23", + "06/05/23", + "0.6133665" + ], + [ + "mp6z19", + "-150.684832635898", + "59.3545816436307", + "15322.5054651554", + "06/05/23", + "06/05/23", + "0.1797011" + ], + [ + "vk7l9e", + "-152.491428990241", + "58.5489235854393", + "49118.8720643265", + "06/05/23", + "06/05/23", + "0.73350775" + ], + [ + "9nx3dl", + "-152.614717703802", + "58.2326776616624", + "458533.139753295", + "06/05/23", + "06/05/23", + "0.6997117" + ], + [ + "b3qpjw", + "-151.840155632869", + "58.2172545494233", + "11461.1695835478", + "06/05/23", + "06/05/23", + "0.5285154" + ], + [ + "ldg9e9", + "-134.261929556727", + "55.8843613695385", + "20035.69958453", + "06/05/23", + "06/05/23", + "0.5484112" + ], + [ + "1kw4ez", + "-133.283569378495", + "55.8447552427987", + "18833.0673523841", + "06/05/23", + "06/05/23", + "0.51642877" + ], + [ + "z5rpnx", + "-131.63427232405", + "55.8756902961291", + "5576.76614057835", + "06/05/23", + "06/05/23", + "0.36380014" + ], + [ + "xlx54l", + "-133.53679179791", + "55.7689094909199", + "45124.4590629156", + "06/05/23", + "06/05/23", + "0.49717593" + ], + [ + "qj51a6", + "-133.365762449564", + "55.5192072087178", + "21903.5948514243", + "06/05/23", + "06/05/23", + "0.7294085" + ], + [ + "4nxl31", + "-133.685238638297", + "55.5028300971106", + "25549.0021445562", + "06/05/23", + "06/05/23", + "0.81260383" + ], + [ + "5zx4a6", + "-133.51028674673", + "55.4709840174308", + "19084.8044756962", + "06/05/23", + "06/05/23", + "0.5839236" + ], + [ + "rx7kmr", + "-133.27772751644", + "55.4258775653082", + "5811.94720342588", + "06/05/23", + "06/05/23", + "0.28023246" + ], + [ + "dm65x6", + "-133.585618168389", + "55.3515954538295", + "30838.6703819347", + "06/05/23", + "06/05/23", + "0.6993655" + ], + [ + "pm7l3e", + "-133.358229322182", + "55.2698139771238", + "38841.6723262003", + "06/05/23", + "06/05/23", + "0.35156056" + ], + [ + "37n5pq", + "-132.995862811507", + "54.9535527252727", + "170599.609185467", + "06/05/23", + "06/05/23", + "0.7617229" + ], + [ + "apxd9j", + "-132.790478035592", + "55.089844803641", + "44956.1664611879", + "06/05/23", + "06/05/23", + "0.7428028" + ], + [ + "jw6q5n", + "-132.708328249503", + "54.8585868849609", + "31230.2375208767", + "06/05/23", + "06/05/23", + "0.7354193" + ], + [ + "vk7lbe", + "-88.1673849362579", + "41.1469331206447", + "1092223.17611977", + "06/05/23", + "06/05/23", + "0.42383665" + ], + [ + "9nx39l", + "-89.4865965370405", + "38.6453970917073", + "958744.203663096", + "06/05/23", + "06/05/23", + "0.46624756" + ], + [ + "b3qpbw", + "-90.6091590520739", + "40.6832011614461", + "526879.84681783", + "06/05/23", + "06/05/23", + "0.49800885" + ], + [ + "wn7lwm", + "-90.7885501401382", + "40.1254840487567", + "1413598.3910737", + "06/05/23", + "06/05/23", + "0.6509555" + ], + [ + "kn5kz1", + "-89.074617025519", + "40.3740765703454", + "512685.38630848", + "06/05/23", + "06/05/23", + "0.43681294" + ], + [ + "n3rgd6", + "-89.2274949834008", + "37.8216497324285", + "977591.646618071", + "06/05/23", + "06/05/23", + "0.6513471" + ], + [ + "ejrm75", + "-88.7735405404981", + "42.2068633308389", + "857198.046651276", + "06/05/23", + "06/05/23", + "0.4584246" + ], + [ + "6nxlra", + "-90.3630687985411", + "39.1028378200916", + "615978.028795016", + "06/05/23", + "06/05/23", + "0.66163164" + ], + [ + "7zrd14", + "-88.4321049938032", + "38.4552760404492", + "498193.418828899", + "06/05/23", + "06/05/23", + "0.46532327" + ], + [ + "ldg959", + "-90.1440578571559", + "40.6298941810335", + "643353.730774345", + "06/05/23", + "06/05/23", + "0.5956369" + ], + [ + "1kw4rz", + "-89.3383713783528", + "41.5951452711857", + "652202.333259733", + "06/05/23", + "06/05/23", + "0.42861173" + ], + [ + "z5rp3x", + "-89.7312653364481", + "42.0227352075518", + "566344.402617676", + "06/05/23", + "06/05/23", + "0.43318143" + ], + [ + "xlx5dl", + "-87.726148461318", + "41.7217049607429", + "488092.636517397", + "06/05/23", + "06/05/23", + "0.589293" + ], + [ + "qj5146", + "-88.9156940484186", + "38.360283875051", + "899827.828639176", + "06/05/23", + "06/05/23", + "0.5367378" + ], + [ + "4nxlw1", + "-91.0224994221167", + "40.4766959419273", + "689046.512442987", + "06/05/23", + "06/05/23", + "0.5274945" + ], + [ + "5zx4k6", + "-90.0392386405333", + "41.3534008095594", + "2023398.10533301", + "06/05/23", + "06/05/23", + "0.47059634" + ], + [ + "g56z4r", + "-89.813719322544", + "42.3411846490859", + "1028881.20304413", + "06/05/23", + "06/05/23", + "0.51595306" + ], + [ + "rx7krr", + "-88.5956142607325", + "37.8858116207694", + "658301.510814842", + "06/05/23", + "06/05/23", + "0.60100156" + ], + [ + "dm65r6", + "-89.1981128651644", + "39.3153492145435", + "520025.926404585", + "06/05/23", + "06/05/23", + "0.478991" + ], + [ + "pm7l4e", + "-89.7296863944781", + "39.4152140008521", + "673488.789343387", + "06/05/23", + "06/05/23", + "0.53829765" + ], + [ + "37n5bq", + "-90.9744653819681", + "39.6715009878489", + "587480.049299454", + "06/05/23", + "06/05/23", + "0.61207783" + ], + [ + "apxd7j", + "-90.5447221380961", + "41.0974874041957", + "569482.111150606", + "06/05/23", + "06/05/23", + "0.46254262" + ], + [ + "mp6z49", + "-87.7535335782797", + "39.2612165894028", + "490995.148172735", + "06/05/23", + "06/05/23", + "0.53041255" + ], + [ + "jw6qgn", + "-88.1149224522623", + "38.7888702246042", + "813496.151516139", + "06/05/23", + "06/05/23", + "0.5169229" + ], + [ + "vk7l4e", + "-89.1468053609985", + "39.0701904722368", + "759158.271492075", + "06/05/23", + "06/05/23", + "0.59639186" + ], + [ + "9nx31l", + "-89.1982195257295", + "41.0549363372797", + "821528.776453367", + "06/05/23", + "06/05/23", + "0.6125841" + ], + [ + "b3qp7w", + "-88.1292141858837", + "41.8235685477984", + "722970.783752146", + "06/05/23", + "06/05/23", + "0.63372874" + ], + [ + "wn7l4m", + "-87.9304922929321", + "39.760080279907", + "945433.755731988", + "06/05/23", + "06/05/23", + "0.4675842" + ], + [ + "kn5k71", + "-87.9857558714709", + "38.3367019368825", + "510025.88401443", + "06/05/23", + "06/05/23", + "0.4530895" + ], + [ + "n3rg46", + "-90.2112362137353", + "39.2625005901534", + "485473.208785465", + "06/05/23", + "06/05/23", + "0.59543765" + ], + [ + "ejrmr5", + "-88.0807191864711", + "39.1433485664", + "552255.046899105", + "06/05/23", + "06/05/23", + "0.45220438" + ], + [ + "6nxlxa", + "-88.5847478810809", + "39.0778202826217", + "720256.783849154", + "06/05/23", + "06/05/23", + "0.4176024" + ], + [ + "7zrdr4", + "-88.7837134329385", + "40.4402582669745", + "3329684.34687321", + "06/05/23", + "06/05/23", + "0.47945708" + ], + [ + "ldg9g9", + "-89.0083372910025", + "37.2582388934527", + "603710.278586702", + "06/05/23", + "06/05/23", + "0.68204653" + ], + [ + "1kw4wz", + "-89.8046170739604", + "40.0645383592585", + "1269552.51253131", + "06/05/23", + "06/05/23", + "0.53949046" + ], + [ + "z5rprx", + "-88.1168872610499", + "42.3018507046164", + "530791.718714927", + "06/05/23", + "06/05/23", + "0.63639665" + ], + [ + "xlx5xl", + "-88.7736369096361", + "41.7085586786132", + "1108941.25863994", + "06/05/23", + "06/05/23", + "0.41044825" + ], + [ + "qj5156", + "-90.3730634093445", + "39.6497872109115", + "514699.140962278", + "06/05/23", + "06/05/23", + "0.60194206" + ], + [ + "4nxlx1", + "-87.8245851016715", + "40.6757656567624", + "1150174.72522195", + "06/05/23", + "06/05/23", + "0.41681173" + ], + [ + "5zx4x6", + "-89.8728233292043", + "38.2226601254772", + "1396629.80300344", + "06/05/23", + "06/05/23", + "0.54989874" + ], + [ + "g56z6r", + "-88.7213680188659", + "39.7302451189102", + "1052340.98455181", + "06/05/23", + "06/05/23", + "0.5142738" + ], + [ + "rx7k7r", + "-88.4475250802186", + "37.6178009463323", + "750384.124822966", + "06/05/23", + "06/05/23", + "0.71135926" + ], + [ + "dm6566", + "-91.8083895153017", + "35.9245675222063", + "1140708.90489508", + "06/05/23", + "06/05/23", + "0.81801033" + ], + [ + "pm7l7e", + "-92.8497229289814", + "34.4672552735263", + "643099.366426632", + "06/05/23", + "06/05/23", + "0.81556165" + ], + [ + "37n5nq", + "-91.396823230106", + "33.2966422295279", + "452167.388867854", + "06/05/23", + "06/05/23", + "0.6139545" + ], + [ + "apxdxj", + "-94.0396667608167", + "33.7482698678829", + "1528281.98271372", + "06/05/23", + "06/05/23", + "0.7651951" + ], + [ + "mp6z69", + "-91.288064810168", + "34.456982138791", + "985962.517306909", + "06/05/23", + "06/05/23", + "0.7606526" + ], + [ + "jw6q6n", + "-91.6863677402397", + "34.488522931594", + "990728.448656497", + "06/05/23", + "06/05/23", + "0.46376568" + ], + [ + "vk7l7e", + "-93.7443287859113", + "35.3447840501744", + "559743.012041802", + "06/05/23", + "06/05/23", + "0.7213453" + ], + [ + "9nx3xl", + "-91.1010575832658", + "35.1329724416809", + "1011826.45624678", + "06/05/23", + "06/05/23", + "0.38817567" + ], + [ + "b3qpqw", + "-91.9671832057685", + "33.384928337681", + "749485.531050456", + "06/05/23", + "06/05/23", + "0.79486454" + ], + [ + "wn7l7m", + "-91.7413112610641", + "33.1422970162786", + "145988.735697389", + "06/05/23", + "06/05/23", + "0.80178094" + ], + [ + "kn5k51", + "-93.2289930170958", + "34.8491739280397", + "900556.761834574", + "06/05/23", + "06/05/23", + "0.81055963" + ], + [ + "n3rgr6", + "-93.966042358381", + "35.991253700385", + "1642520.23115357", + "06/05/23", + "06/05/23", + "0.8361506" + ], + [ + "ejrmp5", + "-91.6644860161472", + "33.0613268625353", + "9603.62506681377", + "06/05/23", + "06/05/23", + "0.8579373" + ], + [ + "6nxlva", + "-94.3814687950621", + "36.2199922891168", + "501025.713019437", + "06/05/23", + "06/05/23", + "0.7550465" + ], + [ + "7zrd94", + "-90.3507764788884", + "35.4907209794504", + "2172465.86104714", + "06/05/23", + "06/05/23", + "0.47723186" + ], + [ + "ldg9b9", + "-92.3723110766044", + "35.5913632643366", + "966435.925971668", + "06/05/23", + "06/05/23", + "0.8025186" + ], + [ + "1kw4pz", + "-90.5886440432628", + "35.842992963966", + "508998.336816699", + "06/05/23", + "06/05/23", + "0.7644784" + ], + [ + "z5rpgx", + "-91.5505868575188", + "35.2075892991114", + "584489.797442604", + "06/05/23", + "06/05/23", + "0.7130581" + ], + [ + "xlx5gl", + "-92.5542223301278", + "33.8792397402103", + "1457954.19425716", + "06/05/23", + "06/05/23", + "0.8070165" + ], + [ + "qj51g6", + "-91.3156349912808", + "36.2468382239267", + "982196.267575551", + "06/05/23", + "06/05/23", + "0.8165464" + ], + [ + "4nxlm1", + "-92.1967458490412", + "36.369429772401", + "524525.727236684", + "06/05/23", + "06/05/23", + "0.7936139" + ], + [ + "5zx4j6", + "-93.0602160399317", + "35.2698821875383", + "727497.785944482", + "06/05/23", + "06/05/23", + "0.75434047" + ], + [ + "g56zar", + "-92.0097910313642", + "35.3130584116667", + "560031.599496233", + "06/05/23", + "06/05/23", + "0.7683258" + ], + [ + "rx7kgr", + "-94.2100580574586", + "35.3180844139788", + "662609.636945729", + "06/05/23", + "06/05/23", + "0.74242" + ], + [ + "dm65d6", + "-92.324451926441", + "33.118662207153", + "163751.730004554", + "06/05/23", + "06/05/23", + "0.80490845" + ], + [ + "pm7lee", + "-93.2854904211599", + "34.105719168817", + "785343.56603662", + "06/05/23", + "06/05/23", + "0.8115497" + ], + [ + "37n5aq", + "-94.2608512264442", + "34.4876748773465", + "814278.728324285", + "06/05/23", + "06/05/23", + "0.81688046" + ], + [ + "apxdrj", + "-93.743985212847", + "34.577128585181", + "1379418.30046035", + "06/05/23", + "06/05/23", + "0.83124715" + ], + [ + "dm65d7", + "-92.1710178749414", + "33.1805543623487", + "107201.130028347", + "06/05/23", + "06/05/23", + "0.7893119" + ], + [ + "pm7led", + "-91.3530502156359", + "33.1128244620656", + "66413.3150340216", + "06/05/23", + "06/05/23", + "0.7403561" + ], + [ + "37n5az", + "-91.2075967810138", + "33.1229866006071", + "50553.1823934521", + "06/05/23", + "06/05/23", + "0.6621429" + ], + [ + "apxdrz", + "-90.8515127206541", + "35.9798932665261", + "1181172.00365156", + "06/05/23", + "06/05/23", + "0.45367634" + ], + [ + "mp6zwd", + "-92.8703683224185", + "36.1862660258682", + "1491011.05846962", + "06/05/23", + "06/05/23", + "0.83518964" + ], + [ + "jw6qve", + "-93.2290958977064", + "35.7960700157282", + "1204097.68961392", + "06/05/23", + "06/05/23", + "0.88034385" + ], + [ + "vk7lgj", + "-92.7380173368246", + "33.3026326009391", + "688601.675314631", + "06/05/23", + "06/05/23", + "0.80666053" + ], + [ + "9nx3wg", + "-91.9421633886175", + "33.9191413532881", + "985277.3593238", + "06/05/23", + "06/05/23", + "0.7896871" + ], + [ + "b3qpdz", + "-90.879363310453", + "34.4962007132914", + "579847.916947496", + "06/05/23", + "06/05/23", + "0.4748057" + ], + [ + "wn7lzd", + "-93.2272484579604", + "33.3688016484085", + "1081115.53229612", + "06/05/23", + "06/05/23", + "0.7994221" + ], + [ + "kn5kwv", + "-93.5685846381863", + "33.5187066894474", + "634700.472010851", + "06/05/23", + "06/05/23", + "0.75247276" + ], + [ + "n3rgeg", + "-92.3993411783662", + "34.6331118173832", + "595548.54207681", + "06/05/23", + "06/05/23", + "0.7676264" + ], + [ + "ejrmag", + "-92.4062836859479", + "34.9854721389864", + "1130279.01775418", + "06/05/23", + "06/05/23", + "0.7647688" + ], + [ + "6nxlqp", + "-91.5002561502278", + "33.8700054695069", + "560911.848165327", + "06/05/23", + "06/05/23", + "0.55177945" + ], + [ + "7zrdqz", + "-91.187559672099", + "33.0527845249", + "4582.41507960582", + "06/05/23", + "06/05/23", + "0.6261036" + ], + [ + "ldg9kn", + "-77.4780738479641", + "35.8812125276535", + "1995429.03414663", + "06/05/23", + "06/05/23", + "0.6489414" + ], + [ + "1kw4q7", + "-78.9819170943516", + "34.5055433044201", + "1014828.15797852", + "06/05/23", + "06/05/23", + "0.7409629" + ], + [ + "z5rpze", + "-81.2224954404607", + "36.0378538521893", + "2282217.90933501", + "06/05/23", + "06/05/23", + "0.8198412" + ], + [ + "xlx5z4", + "-77.9140134425592", + "35.0640414142127", + "983570.75863427", + "06/05/23", + "06/05/23", + "0.7174335" + ], + [ + "qj51z4", + "-78.3812638882249", + "34.1654508725808", + "781845.534369004", + "06/05/23", + "06/05/23", + "0.7888284" + ], + [ + "4nxlqx", + "-78.5712382323334", + "36.2833882954861", + "596867.301976529", + "06/05/23", + "06/05/23", + "0.81936955" + ], + [ + "5zx4qj", + "-82.0010248927633", + "35.4763606024421", + "944882.137449955", + "06/05/23", + "06/05/23", + "0.8540428" + ], + [ + "g56zjj", + "-81.508842653194", + "36.388133309039", + "571560.484849713", + "06/05/23", + "06/05/23", + "0.8516779" + ], + [ + "rx7kz9", + "-78.0215291688854", + "36.1425419745425", + "1488181.86396897", + "06/05/23", + "06/05/23", + "0.7345266" + ], + [ + "dm6537", + "-80.3149825762787", + "36.2967789264095", + "509389.814997704", + "06/05/23", + "06/05/23", + "0.8257944" + ], + [ + "pm7lrd", + "-79.4694544436087", + "36.1042183168541", + "1613208.04536121", + "06/05/23", + "06/05/23", + "0.7469605" + ], + [ + "37n5qz", + "-80.7246104541051", + "35.1798638656355", + "618111.184768463", + "06/05/23", + "06/05/23", + "0.75373197" + ], + [ + "apxd6z", + "-76.10597816096", + "35.7001891086371", + "652090.870941735", + "06/05/23", + "06/05/23", + "0.78241795" + ], + [ + "mp6zrd", + "-82.662723481038", + "35.3441779621793", + "815158.02810872", + "06/05/23", + "06/05/23", + "0.83314663" + ], + [ + "jw6qbe", + "-77.7472901728174", + "34.6638150025698", + "620569.744921128", + "06/05/23", + "06/05/23", + "0.8062298" + ], + [ + "vk7lzj", + "-79.9624564753299", + "35.3157715642589", + "1086751.14806559", + "06/05/23", + "06/05/23", + "0.82312894" + ], + [ + "9nx3pg", + "-82.6212117943447", + "35.7924837488295", + "1198658.9357818", + "06/05/23", + "06/05/23", + "0.85473615" + ], + [ + "b3qpvz", + "-79.3130762622226", + "35.090011289018", + "2095626.57302145", + "06/05/23", + "06/05/23", + "0.7371143" + ], + [ + "wn7led", + "-81.2367624216444", + "35.3543968676886", + "693300.868443171", + "06/05/23", + "06/05/23", + "0.79231465" + ], + [ + "kn5kdv", + "-76.9496261186691", + "35.3798385116343", + "1491449.56970025", + "06/05/23", + "06/05/23", + "0.7352625" + ], + [ + "n3rgag", + "-80.5762691027321", + "35.5951187685651", + "1097612.3349137", + "06/05/23", + "06/05/23", + "0.7726735" + ], + [ + "ejrmwg", + "-76.7990479053894", + "36.149576009841", + "1046154.3198311", + "06/05/23", + "06/05/23", + "0.75621086" + ], + [ + "6nxlgp", + "-78.9925971224557", + "36.2075081978098", + "588898.442088417", + "06/05/23", + "06/05/23", + "0.7929657" + ], + [ + "7zrdgz", + "-76.3092694391599", + "36.2831189458194", + "690377.734361234", + "06/05/23", + "06/05/23", + "0.6393084" + ], + [ + "ldg9pn", + "-78.5134823765618", + "35.5301107841029", + "1314690.07015621", + "06/05/23", + "06/05/23", + "0.68640006" + ], + [ + "1kw4g7", + "-79.9950813150358", + "35.8916334634351", + "1046663.04852653", + "06/05/23", + "06/05/23", + "0.7942186" + ], + [ + "z5rpde", + "-78.2912681283023", + "34.5746942601147", + "1101781.48107146", + "06/05/23", + "06/05/23", + "0.78671676" + ], + [ + "xlx564", + "-83.6108821417617", + "35.2589456019073", + "1506532.78721114", + "06/05/23", + "06/05/23", + "0.8614301" + ], + [ + "qj51v4", + "-77.0805629123391", + "34.8459819780349", + "952155.338364727", + "06/05/23", + "06/05/23", + "0.74397314" + ], + [ + "4nxlgx", + "-75.6597749159223", + "35.8798929611294", + "12210.3041379775", + "06/05/23", + "06/05/23", + "0.72350186" + ], + [ + "5zx4gj", + "-75.4903443938969", + "35.5583907768946", + "10241.6758686876", + "06/05/23", + "06/05/23", + "0.37543377" + ], + [ + "g56znj", + "-75.5900832021877", + "35.2424418335515", + "9597.51266813241", + "06/05/23", + "06/05/23", + "0.68758285" + ], + [ + "rx7k99", + "-76.8873943362413", + "34.6840487836568", + "7477.7300378549", + "06/05/23", + "06/05/23", + "0.5729508" + ], + [ + "dm65b7", + "-87.7732776120644", + "37.2499861456209", + "1169727.94858664", + "06/05/23", + "06/05/23", + "0.7260475" + ], + [ + "pm7ljd", + "-88.9282032483356", + "36.7785333138438", + "744303.418889228", + "06/05/23", + "06/05/23", + "0.62042695" + ], + [ + "37n5gz", + "-87.1198583953825", + "37.0844076641797", + "672957.730228975", + "06/05/23", + "06/05/23", + "0.7700513" + ], + [ + "apxdjz", + "-86.879167945918", + "37.6935897541542", + "621243.769324232", + "06/05/23", + "06/05/23", + "0.698996" + ], + [ + "mp6z3d", + "-85.3905342656587", + "38.4217562523721", + "640424.397312632", + "06/05/23", + "06/05/23", + "0.75026405" + ], + [ + "jw6q7e", + "-86.5216722255364", + "36.8121378015529", + "1480023.48018488", + "06/05/23", + "06/05/23", + "0.6872941" + ], + [ + "vk7lnj", + "-86.5275497478849", + "37.5969217331368", + "703391.434429839", + "06/05/23", + "06/05/23", + "0.7853174" + ], + [ + "9nx3rg", + "-82.9579405758283", + "37.1783194341563", + "936786.127017474", + "06/05/23", + "06/05/23", + "0.891114" + ], + [ + "b3qprz", + "-84.5608254029431", + "36.8488498129517", + "816754.178623889", + "06/05/23", + "06/05/23", + "0.8668515" + ], + [ + "wn7lqd", + "-86.3250187802381", + "37.4170119194496", + "875520.313576727", + "06/05/23", + "06/05/23", + "0.751884" + ], + [ + "kn5kjv", + "-84.0381718530671", + "38.5502594180184", + "619279.198525283", + "06/05/23", + "06/05/23", + "0.7887573" + ], + [ + "n3rgbg", + "-85.0285163532341", + "37.2422523993222", + "1688700.17020638", + "06/05/23", + "06/05/23", + "0.7544782" + ], + [ + "ejrmlg", + "-82.4112198354379", + "37.5584537883497", + "569027.785175656", + "06/05/23", + "06/05/23", + "0.89112383" + ], + [ + "6nxldp", + "-85.4516946412288", + "37.8569983416755", + "521216.77665221", + "06/05/23", + "06/05/23", + "0.7171312" + ], + [ + "7zrdpz", + "-83.5103777066262", + "37.158905089069", + "1595091.68640686", + "06/05/23", + "06/05/23", + "0.89365137" + ], + [ + "ldg9vn", + "-83.8130038589988", + "37.578348256345", + "1068489.41998141", + "06/05/23", + "06/05/23", + "0.89344525" + ], + [ + "1kw4n7", + "-84.0558703230815", + "36.8812615180536", + "561614.528885147", + "06/05/23", + "06/05/23", + "0.8318498" + ], + [ + "z5rpqe", + "-85.0485808155889", + "38.0539134219434", + "918318.743998102", + "06/05/23", + "06/05/23", + "0.781516" + ], + [ + "xlx5q4", + "-84.5795310948513", + "37.8952866135405", + "936410.495210282", + "06/05/23", + "06/05/23", + "0.7244928" + ], + [ + "qj51n4", + "-87.5903130977408", + "37.6633862935174", + "942869.426569282", + "06/05/23", + "06/05/23", + "0.52189773" + ], + [ + "4nxl7x", + "-88.026959714008", + "36.9393763444904", + "586696.523606648", + "06/05/23", + "06/05/23", + "0.7879483" + ], + [ + "5zx4lj", + "-85.7290005825566", + "37.7529694857304", + "646229.1675874", + "06/05/23", + "06/05/23", + "0.77979666" + ], + [ + "g56zpj", + "-83.1895198015459", + "38.4257308000606", + "1038824.18583676", + "06/05/23", + "06/05/23", + "0.8704168" + ], + [ + "rx7ke9", + "-84.028347675114", + "38.0554946407517", + "810590.540170913", + "06/05/23", + "06/05/23", + "0.7846249" + ], + [ + "dm6577", + "-84.5433256145642", + "38.8806116784424", + "548088.684136341", + "06/05/23", + "06/05/23", + "0.7926811" + ], + [ + "pm7lkd", + "-85.6642035354898", + "37.056129225304", + "1155817.42599689", + "06/05/23", + "06/05/23", + "0.8088239" + ], + [ + "37n56z", + "-88.4563510078305", + "36.8121964409949", + "810147.790588808", + "06/05/23", + "06/05/23", + "0.69213" + ], + [ + "apxdnz", + "-84.6304016758468", + "38.4851930822496", + "617219.296447546", + "06/05/23", + "06/05/23", + "0.83183557" + ], + [ + "mp6z9d", + "-83.0844912157595", + "37.9807372890924", + "1428086.974198", + "06/05/23", + "06/05/23", + "0.8841667" + ], + [ + "jw6qme", + "-97.9073123835533", + "38.0113053348864", + "550561.034746057", + "06/05/23", + "06/05/23", + "0.5785585" + ], + [ + "vk7lqj", + "-98.0284056625045", + "37.5605867536601", + "563916.396551046", + "06/05/23", + "06/05/23", + "0.5456952" + ], + [ + "9nx3ag", + "-98.4404350277601", + "37.3032508592904", + "786648.725256221", + "06/05/23", + "06/05/23", + "0.567549" + ], + [ + "b3qpaz", + "-99.1877048709542", + "38.3255750018571", + "2074900.02214585", + "06/05/23", + "06/05/23", + "0.47938594" + ], + [ + "wn7l9d", + "-95.6586036494917", + "39.2536295898826", + "511303.968391747", + "06/05/23", + "06/05/23", + "0.73703" + ], + [ + "kn5kev", + "-97.6898801552896", + "39.4501700681296", + "717005.651969929", + "06/05/23", + "06/05/23", + "0.52464235" + ], + [ + "n3rglg", + "-100.059199216743", + "39.8022968639774", + "1019083.0833095", + "06/05/23", + "06/05/23", + "0.5530708" + ], + [ + "ejrmvg", + "-97.3622937080128", + "38.1380550440423", + "537037.404061457", + "06/05/23", + "06/05/23", + "0.57784826" + ], + [ + "6nxlkp", + "-96.8061354995765", + "38.1644569867127", + "488206.755712442", + "06/05/23", + "06/05/23", + "0.7341524" + ], + [ + "7zrdnz", + "-95.0267304520588", + "38.2754500273081", + "651548.425211409", + "06/05/23", + "06/05/23", + "0.75303155" + ], + [ + "ldg96n", + "-100.422983845856", + "38.7898503547993", + "841374.762364982", + "06/05/23", + "06/05/23", + "0.47368988" + ], + [ + "1kw4j7", + "-100.048274511324", + "39.3306637734288", + "1172647.72994278", + "06/05/23", + "06/05/23", + "0.48200965" + ], + [ + "z5rpke", + "-101.746736858199", + "37.9747162598014", + "516461.567699273", + "06/05/23", + "06/05/23", + "0.538074" + ], + [ + "xlx5b4", + "-95.9282657079886", + "38.0296609158682", + "988453.339537995", + "06/05/23", + "06/05/23", + "0.7410564" + ], + [ + "qj51p4", + "-95.273425886131", + "37.2965782661819", + "871319.980743155", + "06/05/23", + "06/05/23", + "0.74381125" + ], + [ + "4nxlbx", + "-96.6911068493802", + "39.4024339220979", + "623168.993039302", + "06/05/23", + "06/05/23", + "0.7144273" + ], + [ + "5zx4wj", + "-97.7822066960861", + "39.7983948665375", + "826889.215671597", + "06/05/23", + "06/05/23", + "0.48506838" + ], + [ + "g56zbj", + "-99.7303818316347", + "39.1941100556478", + "655447.708572023", + "06/05/23", + "06/05/23", + "0.46771827" + ], + [ + "rx7k39", + "-96.0950624143955", + "39.4516456105081", + "811241.917860145", + "06/05/23", + "06/05/23", + "0.72620165" + ], + [ + "dm65j7", + "-101.509687404728", + "37.132344922261", + "575156.757709073", + "06/05/23", + "06/05/23", + "0.42436022" + ], + [ + "pm7ldd", + "-96.4664299171884", + "37.3760835510929", + "2062941.54507755", + "06/05/23", + "06/05/23", + "0.7530212" + ], + [ + "37n59z", + "-100.597990487343", + "38.4497030522297", + "2261377.61881823", + "06/05/23", + "06/05/23", + "0.4586234" + ], + [ + "apxd3z", + "-96.3671304054541", + "38.9212876942651", + "1048858.89414647", + "06/05/23", + "06/05/23", + "0.74963236" + ], + [ + "dm65jn", + "-99.9750518068423", + "38.2535175052018", + "694918.716787553", + "06/05/23", + "06/05/23", + "0.5088325" + ], + [ + "pm7ldx", + "-101.708847361707", + "38.9864169935708", + "761191.28850446", + "06/05/23", + "06/05/23", + "0.513124" + ], + [ + "37n59m", + "-97.8875531373725", + "38.6747262343694", + "1089064.4023474", + "06/05/23", + "06/05/23", + "0.63657415" + ], + [ + "apxd3k", + "-97.5967464641492", + "37.2229796304992", + "941801.615032501", + "06/05/23", + "06/05/23", + "0.49878505" + ], + [ + "mp6za5", + "-99.6859695305694", + "38.7165371456809", + "503173.418557662", + "06/05/23", + "06/05/23", + "0.46173483" + ], + [ + "jw6qdk", + "-95.0208802059694", + "37.7774566032552", + "1073786.22066848", + "06/05/23", + "06/05/23", + "0.7490253" + ], + [ + "vk7le5", + "-98.4479745087387", + "39.64597691508", + "615572.159196676", + "06/05/23", + "06/05/23", + "0.43189546" + ], + [ + "9nx353", + "-100.391874972142", + "37.3051616682394", + "756487.034657736", + "06/05/23", + "06/05/23", + "0.54473454" + ], + [ + "b3qpkg", + "-101.490289072221", + "39.3808281792401", + "995292.204314643", + "06/05/23", + "06/05/23", + "0.4134753" + ], + [ + "wn7l61", + "-99.1474389309459", + "39.5175837108704", + "643812.548136683", + "06/05/23", + "06/05/23", + "0.45091328" + ], + [ + "kn5kpn", + "-101.356373868027", + "38.5220986077169", + "1048555.88364522", + "06/05/23", + "06/05/23", + "0.42197296" + ], + [ + "n3rgmw", + "-100.713129851359", + "37.5979946002969", + "591731.55864566", + "06/05/23", + "06/05/23", + "0.45153657" + ], + [ + "ejrm6n", + "-101.567904391132", + "39.7698594516512", + "933229.201241994", + "06/05/23", + "06/05/23", + "0.54766476" + ], + [ + "6nxl56", + "-98.8015701231682", + "37.9742484287356", + "940501.579790062", + "06/05/23", + "06/05/23", + "0.5528199" + ], + [ + "7zrd5j", + "-94.8262090304387", + "38.7240635547053", + "778923.538948658", + "06/05/23", + "06/05/23", + "0.7444323" + ], + [ + "ldg935", + "-96.1650122018403", + "39.847909106246", + "626151.843595808", + "06/05/23", + "06/05/23", + "0.59493226" + ], + [ + "1kw4lw", + "-96.9871926491107", + "39.8429790955677", + "513456.63975969", + "06/05/23", + "06/05/23", + "0.58510274" + ], + [ + "z5rp1g", + "-99.3356271350968", + "37.3656439869486", + "560002.563625654", + "06/05/23", + "06/05/23", + "0.6040244" + ], + [ + "xlx57z", + "-100.847597547717", + "39.7592114323715", + "648017.878429462", + "06/05/23", + "06/05/23", + "0.59304184" + ], + [ + "qj519v", + "-101.756552801173", + "37.5179678204592", + "840129.952209723", + "06/05/23", + "06/05/23", + "0.38953456" + ], + [ + "4nxl57", + "-98.4582362089099", + "37.8291920213206", + "629455.480426189", + "06/05/23", + "06/05/23", + "0.56212854" + ], + [ + "5zx45w", + "-100.994137327341", + "37.9754896900223", + "758101.277240412", + "06/05/23", + "06/05/23", + "0.49620917" + ], + [ + "g56zll", + "-97.0749003027714", + "39.3871590087837", + "609566.162115126", + "06/05/23", + "06/05/23", + "0.58700585" + ], + [ + "rx7kbl", + "-97.8192914413121", + "39.0646654945512", + "720345.789230211", + "06/05/23", + "06/05/23", + "0.573425" + ], + [ + "dm65en", + "-95.5710269768735", + "37.6630349507966", + "571746.909055809", + "06/05/23", + "06/05/23", + "0.73523766" + ], + [ + "pm7lvx", + "-97.8884464410141", + "38.3546498139399", + "490385.141854656", + "06/05/23", + "06/05/23", + "0.5234107" + ], + [ + "37n5zm", + "-101.745454809119", + "38.3526386158412", + "630065.739780178", + "06/05/23", + "06/05/23", + "0.36572066" + ], + [ + "apxdwk", + "-99.5610516992623", + "37.689159883901", + "601491.596475949", + "06/05/23", + "06/05/23", + "0.55161244" + ], + [ + "mp6zk5", + "-98.4838873259838", + "39.1628400665585", + "1040264.84578573", + "06/05/23", + "06/05/23", + "0.46001762" + ], + [ + "jw6q9k", + "-98.9936346303299", + "39.8631425796465", + "577869.555691496", + "06/05/23", + "06/05/23", + "0.5321442" + ], + [ + "vk7ld5", + "-96.6211129559683", + "38.5673398143807", + "714481.745293716", + "06/05/23", + "06/05/23", + "0.7376673" + ], + [ + "9nx3l3", + "-97.2475062683895", + "38.7535314776006", + "657430.940769275", + "06/05/23", + "06/05/23", + "0.57211226" + ], + [ + "b3qpxg", + "-99.0954586622087", + "39.0014321930207", + "739288.689981928", + "06/05/23", + "06/05/23", + "0.48622885" + ], + [ + "wn7lp1", + "-97.0040013324391", + "37.6692233950941", + "575851.278020821", + "06/05/23", + "06/05/23", + "0.6711174" + ], + [ + "kn5kbn", + "-95.0439924711473", + "37.1141040535389", + "495140.635472991", + "06/05/23", + "06/05/23", + "0.7174169" + ], + [ + "n3rgnw", + "-99.4374221076629", + "37.1948186539203", + "1326523.16793151", + "06/05/23", + "06/05/23", + "0.6037076" + ], + [ + "ejrm3n", + "-96.2969346203788", + "38.1518452432368", + "609688.94779006", + "06/05/23", + "06/05/23", + "0.75497335" + ], + [ + "6nxle6", + "-95.6227871642173", + "38.597956588197", + "1147062.88961074", + "06/05/23", + "06/05/23", + "0.7302387" + ], + [ + "7zrd6j", + "-101.182934784729", + "37.4198344435941", + "711989.088552288", + "06/05/23", + "06/05/23", + "0.49983934" + ], + [ + "ldg9r5", + "-95.1493347868923", + "39.0580672540292", + "851255.435064977", + "06/05/23", + "06/05/23", + "0.7380982" + ], + [ + "1kw49w", + "-95.3588486850933", + "39.7124604731916", + "860997.823640601", + "06/05/23", + "06/05/23", + "0.6291188" + ], + [ + "z5rpmg", + "-97.3961635386808", + "37.7132148268508", + "612350.063188031", + "06/05/23", + "06/05/23", + "0.5730017" + ], + [ + "xlx53z", + "-85.1229471319511", + "43.5800083957336", + "1682404.88982165", + "06/05/23", + "06/05/23", + "0.6937872" + ], + [ + "qj517v", + "-85.0579797197858", + "42.0119199201517", + "696011.642138321", + "06/05/23", + "06/05/23", + "0.5118237" + ], + [ + "4nxlk7", + "-88.4494202787619", + "47.1578267276328", + "644072.479274398", + "06/05/23", + "06/05/23", + "0.85265684" + ], + [ + "5zx4nw", + "-84.8437195642875", + "44.9550319573141", + "440519.576637055", + "06/05/23", + "06/05/23", + "0.8265165" + ], + [ + "g56zml", + "-86.0842742240706", + "44.3285254180257", + "817858.427331593", + "06/05/23", + "06/05/23", + "0.7922937" + ], + [ + "rx7kll", + "-87.4567439041902", + "45.858378895441", + "1652818.28658577", + "06/05/23", + "06/05/23", + "0.80701613" + ], + [ + "dm65pn", + "-85.086226567659", + "42.4362813077537", + "957129.771303488", + "06/05/23", + "06/05/23", + "0.6441536" + ], + [ + "pm7l6x", + "-84.3744133933408", + "44.5422769423038", + "575909.855833798", + "06/05/23", + "06/05/23", + "0.7469623" + ], + [ + "37n5wm", + "-85.5457130228385", + "43.0389440679736", + "773779.508691763", + "06/05/23", + "06/05/23", + "0.666383" + ], + [ + "apxdzk", + "-84.3965548524507", + "43.7658720989329", + "704963.989346476", + "06/05/23", + "06/05/23", + "0.75481254" + ], + [ + "mp6zd5", + "-86.1117271368371", + "43.4847055573951", + "823796.61078948", + "06/05/23", + "06/05/23", + "0.7315618" + ], + [ + "jw6qzk", + "-85.6530078692143", + "41.9485680185083", + "508459.813142966", + "06/05/23", + "06/05/23", + "0.52946126" + ], + [ + "vk7lw5", + "-88.0122967866335", + "46.6633126259247", + "588530.274840546", + "06/05/23", + "06/05/23", + "0.86947334" + ], + [ + "9nx3b3", + "-83.9620308976542", + "45.145097168717", + "1454963.30981054", + "06/05/23", + "06/05/23", + "0.80064875" + ], + [ + "b3qpwg", + "-83.1216456413236", + "43.6038005528927", + "1117266.39308819", + "06/05/23", + "06/05/23", + "0.417383" + ], + [ + "wn7lk1", + "-84.4633075524249", + "43.1870321884296", + "1476941.37629299", + "06/05/23", + "06/05/23", + "0.45161885" + ], + [ + "kn5kxn", + "-85.6965345747226", + "42.3775258935853", + "478116.442761683", + "06/05/23", + "06/05/23", + "0.64349896" + ], + [ + "n3rgpw", + "-86.2317490586863", + "46.2240262558737", + "831083.475643349", + "06/05/23", + "06/05/23", + "0.78373665" + ], + [ + "ejrmen", + "-84.2083926755279", + "41.8628969016747", + "637082.045988145", + "06/05/23", + "06/05/23", + "0.46072364" + ], + [ + "6nxlj6", + "-85.8301291893211", + "43.9174031430756", + "900254.067628206", + "06/05/23", + "06/05/23", + "0.82777274" + ], + [ + "7zrdvj", + "-89.4242329991621", + "46.6711343145299", + "1088393.60415214", + "06/05/23", + "06/05/23", + "0.8759284" + ], + [ + "ldg9q5", + "-84.3430925032649", + "46.2213806258881", + "537476.547881856", + "06/05/23", + "06/05/23", + "0.8010904" + ], + [ + "1kw4dw", + "-83.6836092012193", + "44.4582233856898", + "1112651.52417639", + "06/05/23", + "06/05/23", + "0.790167" + ], + [ + "z5rp6g", + "-83.5628621903727", + "42.8724807767739", + "515563.226962672", + "06/05/23", + "06/05/23", + "0.70981854" + ], + [ + "xlx5nz", + "-83.3354865662108", + "43.2966860214229", + "1267046.19185078", + "06/05/23", + "06/05/23", + "0.6330629" + ], + [ + "qj51mv", + "-84.4434875570864", + "42.7572853533962", + "523267.601066704", + "06/05/23", + "06/05/23", + "0.6127869" + ], + [ + "4nxla7", + "-84.7895818723161", + "45.2949020411998", + "1188474.74650873", + "06/05/23", + "06/05/23", + "0.7710909" + ], + [ + "5zx4mw", + "-84.2956577577468", + "42.2120857519625", + "806721.810896334", + "06/05/23", + "06/05/23", + "0.64000237" + ], + [ + "g56z7l", + "-88.9932959752033", + "46.4245441207812", + "1412992.74962506", + "06/05/23", + "06/05/23", + "0.8767267" + ], + [ + "rx7kjl", + "-83.2160279491681", + "42.4529414889004", + "752100.530653977", + "06/05/23", + "06/05/23", + "0.61796206" + ], + [ + "dm65nn", + "-85.2060509462994", + "46.3245842285681", + "1443304.55377667", + "06/05/23", + "06/05/23", + "0.8045897" + ], + [ + "pm7lax", + "-86.4293886984902", + "46.4506270875447", + "582853.540735829", + "06/05/23", + "06/05/23", + "0.84427404" + ], + [ + "37n53m", + "-83.7754464512057", + "42.3422446645742", + "1276860.94869643", + "06/05/23", + "06/05/23", + "0.6236805" + ], + [ + "apxdbk", + "-85.2527098331172", + "44.2481992079965", + "696323.572155374", + "06/05/23", + "06/05/23", + "0.7838785" + ], + [ + "mp6zl5", + "-85.3044321482377", + "44.7079768049428", + "1162914.57717784", + "06/05/23", + "06/05/23", + "0.76320636" + ], + [ + "jw6qek", + "-86.1491342412068", + "42.4063974292106", + "1527094.35867394", + "06/05/23", + "06/05/23", + "0.650133" + ], + [ + "vk7la5", + "-87.9619732662573", + "46.228667522429", + "1210479.63479755", + "06/05/23", + "06/05/23", + "0.8113381" + ], + [ + "9nx3j3", + "-82.7305523647469", + "42.9750565876455", + "751513.993416476", + "06/05/23", + "06/05/23", + "0.5736688" + ], + [ + "b3qpmg", + "-84.3854978048599", + "44.1458031924688", + "708852.645198904", + "06/05/23", + "06/05/23", + "0.79121655" + ], + [ + "wn7lm1", + "-86.5144418505325", + "45.9338439228296", + "499894.674134848", + "06/05/23", + "06/05/23", + "0.7817787" + ], + [ + "kn5k6n", + "-83.0067344975888", + "33.1154303746516", + "650074.93385322", + "06/05/23", + "06/05/23", + "0.77260643" + ], + [ + "n3rg1w", + "-83.5484580138436", + "31.7112451177575", + "1083733.56833055", + "06/05/23", + "06/05/23", + "0.5960437" + ], + [ + "ejrm9n", + "-83.4394679615986", + "32.9652698688326", + "973896.816272082", + "06/05/23", + "06/05/23", + "0.8071619" + ], + [ + "6nxl36", + "-84.8980068424649", + "31.4603361234722", + "620236.749664634", + "06/05/23", + "06/05/23", + "0.6825894" + ], + [ + "7zrdaj", + "-81.7155225819989", + "32.5973203214156", + "672570.964841779", + "06/05/23", + "06/05/23", + "0.7263403" + ], + [ + "ldg975", + "-83.8041607080932", + "32.4801587345591", + "621262.30420458", + "06/05/23", + "06/05/23", + "0.7208835" + ], + [ + "1kw4xw", + "-82.7853117879833", + "30.9803712489572", + "1196111.24373012", + "06/05/23", + "06/05/23", + "0.73665804" + ], + [ + "z5rp9g", + "-83.5944086180258", + "33.8794182706127", + "3442888.31103424", + "06/05/23", + "06/05/23", + "0.78199494" + ], + [ + "xlx5jz", + "-84.8513220210393", + "33.7410049211458", + "1638381.32278695", + "06/05/23", + "06/05/23", + "0.77515554" + ], + [ + "qj51rv", + "-82.6582724583888", + "33.3125348785891", + "1022894.68972758", + "06/05/23", + "06/05/23", + "0.78454584" + ], + [ + "4nxld7", + "-82.5542082869516", + "31.8481540713467", + "1244174.9086089", + "06/05/23", + "06/05/23", + "0.7560243" + ], + [ + "5zx4pw", + "-83.6495776119524", + "34.5217766847037", + "919189.440561624", + "06/05/23", + "06/05/23", + "0.8226623" + ], + [ + "g56zwl", + "-83.808741467104", + "32.9792563524048", + "631189.788547776", + "06/05/23", + "06/05/23", + "0.76216424" + ], + [ + "rx7k4l", + "-82.5051751370073", + "33.6012286676005", + "942120.503537058", + "06/05/23", + "06/05/23", + "0.76049566" + ], + [ + "dm65vn", + "-84.1933451079426", + "34.6813713807803", + "1851324.07171944", + "06/05/23", + "06/05/23", + "0.85495156" + ], + [ + "pm7lxx", + "-83.2669926197036", + "31.9945324309887", + "667204.136466842", + "06/05/23", + "06/05/23", + "0.7495714" + ], + [ + "37n54m", + "-82.0803365780188", + "32.7032139043547", + "1763634.8569436", + "06/05/23", + "06/05/23", + "0.7668459" + ], + [ + "apxdak", + "-81.8541070160634", + "31.0859200656764", + "1395660.92850715", + "06/05/23", + "06/05/23", + "0.7598912" + ], + [ + "dm65wg", + "-82.3297895832318", + "31.1113771989643", + "601193.203880037", + "06/05/23", + "06/05/23", + "0.7414335" + ], + [ + "pm7l51", + "-84.3361808161773", + "31.5904517517634", + "616744.917376793", + "06/05/23", + "06/05/23", + "0.70202327" + ], + [ + "37n5mx", + "-81.2950876123319", + "32.2685386099752", + "592717.44980684", + "06/05/23", + "06/05/23", + "0.7534737" + ], + [ + "apxdvd", + "-84.3336186906837", + "31.2635143885244", + "1112158.98977915", + "06/05/23", + "06/05/23", + "0.6292286" + ], + [ + "mp6zxj", + "-83.3794362816612", + "30.8642614167301", + "548090.898200547", + "06/05/23", + "06/05/23", + "0.6905252" + ], + [ + "jw6qla", + "-84.5792599271942", + "33.0069665282757", + "2561963.52999109", + "06/05/23", + "06/05/23", + "0.7678713" + ], + [ + "vk7ljk", + "-82.2200488364422", + "30.5717821039279", + "234146.367385372", + "06/05/23", + "06/05/23", + "0.7841094" + ], + [ + "9nx3kz", + "-84.2197051502226", + "30.8680759287087", + "1148445.60433651", + "06/05/23", + "06/05/23", + "0.673813" + ], + [ + "b3qp96", + "-83.1620993321411", + "32.4021215283616", + "584864.733401046", + "06/05/23", + "06/05/23", + "0.72793335" + ], + [ + "wn7lvr", + "-84.6253135954455", + "32.0027595978091", + "975840.574867501", + "06/05/23", + "06/05/23", + "0.7312311" + ], + [ + "kn5k1z", + "-85.1009734750669", + "34.1704193612513", + "715746.988098642", + "06/05/23", + "06/05/23", + "0.7981066" + ], + [ + "n3rgq4", + "-81.4654309517987", + "31.5590187072231", + "637165.421320223", + "06/05/23", + "06/05/23", + "0.716077" + ], + [ + "ejrmkr", + "-82.6155869913597", + "32.5014008359648", + "1069716.01155121", + "06/05/23", + "06/05/23", + "0.772672" + ], + [ + "6nxl9v", + "-82.6958917384992", + "31.5221403358459", + "631074.087878299", + "06/05/23", + "06/05/23", + "0.632079" + ], + [ + "7zrdbq", + "-81.6329329052976", + "31.9797200650288", + "907565.666742198", + "06/05/23", + "06/05/23", + "0.7895901" + ], + [ + "ldg9zp", + "-83.4947720345024", + "31.1838623026008", + "759007.082536334", + "06/05/23", + "06/05/23", + "0.6291591" + ], + [ + "1kw43n", + "-84.3449876829202", + "32.2348103739094", + "1228584.35410008", + "06/05/23", + "06/05/23", + "0.7360821" + ], + [ + "z5rpwk", + "-85.1610187214206", + "34.6779951332429", + "1232862.5587347", + "06/05/23", + "06/05/23", + "0.8228793" + ], + [ + "xlx597", + "-81.1139577945117", + "31.7927490246276", + "26624.7329145573", + "06/05/23", + "06/05/23", + "0.51769847" + ], + [ + "qj51d7", + "-81.2504766952967", + "31.4656951880502", + "24090.2600122925", + "06/05/23", + "06/05/23", + "0.7734001" + ], + [ + "4nxlja", + "-81.4179228034107", + "31.0716150705542", + "5592.7854881574", + "06/05/23", + "06/05/23", + "0.78156036" + ], + [ + "5zx4vp", + "-116.829375057872", + "48.584540570786", + "717928.853484608", + "06/05/23", + "06/05/23", + "0.7403776" + ], + [ + "g56zee", + "-111.38207491077", + "43.8482622029658", + "482603.971352185", + "06/05/23", + "06/05/23", + "0.51757205" + ], + [ + "rx7kp5", + "-113.588084252401", + "44.2902206636254", + "474613.698300258", + "06/05/23", + "06/05/23", + "0.36580804" + ], + [ + "dm651g", + "-114.377200101335", + "44.983589146978", + "732184.896608358", + "06/05/23", + "06/05/23", + "0.36728233" + ], + [ + "pm7lz1", + "-116.226089363684", + "44.7521990917226", + "1028948.82689086", + "06/05/23", + "06/05/23", + "0.6729932" + ], + [ + "37n5kx", + "-116.870570904997", + "43.0297478043356", + "536673.34864711", + "06/05/23", + "06/05/23", + "0.47155917" + ], + [ + "apxdkd", + "-116.244878382172", + "47.7248232026334", + "989113.700002003", + "06/05/23", + "06/05/23", + "0.76714486" + ], + [ + "mp6znj", + "-113.418306941561", + "42.1699859384046", + "330927.573561751", + "06/05/23", + "06/05/23", + "0.42080486" + ], + [ + "jw6qja", + "-114.676575389338", + "43.6338957452202", + "467839.642345851", + "06/05/23", + "06/05/23", + "0.46931887" + ], + [ + "vk7lvk", + "-112.047652867029", + "42.748846244537", + "1103343.09218503", + "06/05/23", + "06/05/23", + "0.6584757" + ], + [ + "9nx3gz", + "-115.670877230144", + "43.7031685935197", + "844910.686159999", + "06/05/23", + "06/05/23", + "0.58043593" + ], + [ + "b3qpe6", + "-115.248471879397", + "42.4607374553268", + "1346097.51979461", + "06/05/23", + "06/05/23", + "0.2914807" + ], + [ + "wn7lbr", + "-115.481115751732", + "46.5122370677244", + "1233998.43693106", + "06/05/23", + "06/05/23", + "0.716584" + ], + [ + "kn5k9z", + "-114.625846444712", + "43.8906962723511", + "866027.102112679", + "06/05/23", + "06/05/23", + "0.27387726" + ], + [ + "n3rg64", + "-113.010058086772", + "43.7732774402014", + "988852.250648833", + "06/05/23", + "06/05/23", + "0.3364771" + ], + [ + "ejrmxr", + "-116.515541247981", + "46.4296580365196", + "1913942.86816663", + "06/05/23", + "06/05/23", + "0.7295444" + ], + [ + "6nxl1v", + "-114.655635519655", + "43.1463035867265", + "763727.91023511", + "06/05/23", + "06/05/23", + "0.39133066" + ], + [ + "7zrdxq", + "-116.768441312504", + "44.4898997128104", + "637665.040722918", + "06/05/23", + "06/05/23", + "0.4953511" + ], + [ + "ldg9wp", + "-116.567572003185", + "43.9583678886119", + "461464.181207395", + "06/05/23", + "06/05/23", + "0.36631587" + ], + [ + "1kw4vn", + "-115.806608060953", + "42.5177372637406", + "710916.469333233", + "06/05/23", + "06/05/23", + "0.26739287" + ], + [ + "z5rp7k", + "-114.76878074482", + "44.334531510101", + "844704.967965828", + "06/05/23", + "06/05/23", + "0.3970414" + ], + [ + "xlx5k7", + "-115.346045994075", + "45.5517694191969", + "1161112.32891464", + "06/05/23", + "06/05/23", + "0.5215711" + ], + [ + "qj51q7", + "-113.987076665508", + "44.6972007833392", + "1191098.98192294", + "06/05/23", + "06/05/23", + "0.41079798" + ], + [ + "4nxlea", + "-116.133765282981", + "46.8022729756972", + "728754.425528495", + "06/05/23", + "06/05/23", + "0.7678569" + ], + [ + "5zx47p", + "-116.569079534044", + "45.3988497438413", + "1063295.85794529", + "06/05/23", + "06/05/23", + "0.64073515" + ], + [ + "g56zge", + "-111.378024501331", + "42.2766819301709", + "687526.778772393", + "06/05/23", + "06/05/23", + "0.6026873" + ], + [ + "rx7k55", + "-111.302133296003", + "42.8787654578966", + "891027.809048352", + "06/05/23", + "06/05/23", + "0.66151047" + ], + [ + "dm6kgg", + "-112.466981823071", + "43.6782891182031", + "647046.030761241", + "06/05/23", + "06/05/23", + "0.42116004" + ], + [ + "pm7qw1", + "-114.967337388022", + "43.4131284854347", + "767832.722012963", + "06/05/23", + "06/05/23", + "0.6134277" + ], + [ + "37njlx", + "-112.755164830948", + "42.750510790133", + "1240140.88362664", + "06/05/23", + "06/05/23", + "0.5238888" + ], + [ + "apxgqd", + "-114.665668742846", + "42.2224431042134", + "655642.166668235", + "06/05/23", + "06/05/23", + "0.3687889" + ], + [ + "mp6j5j", + "-115.64609480004", + "43.0740222542359", + "729949.387609644", + "06/05/23", + "06/05/23", + "0.30216363" + ], + [ + "jw63pa", + "-115.801337523226", + "44.1402882073761", + "622279.002487705", + "06/05/23", + "06/05/23", + "0.67416686" + ], + [ + "vk73pk", + "-116.656775017599", + "47.2137279236194", + "659646.080377299", + "06/05/23", + "06/05/23", + "0.75746095" + ], + [ + "9nx7vz", + "-113.295223492845", + "42.8292341304959", + "1603728.30805933", + "06/05/23", + "06/05/23", + "0.38660035" + ], + [ + "b3qgz6", + "-114.521464800493", + "42.6244755389778", + "559602.38733527", + "06/05/23", + "06/05/23", + "0.46382838" + ], + [ + "wn7a3r", + "-111.812189412814", + "44.1452684165892", + "471006.38674936", + "06/05/23", + "06/05/23", + "0.5998703" + ], + [ + "kn5a3z", + "-114.006240322348", + "43.0044206662641", + "1156472.02989396", + "06/05/23", + "06/05/23", + "0.36352643" + ], + [ + "n3rjz4", + "-116.489059435032", + "42.3693734739928", + "1829825.50828491", + "06/05/23", + "06/05/23", + "0.3745045" + ], + [ + "ejrg5r", + "-113.772203920592", + "42.5887725021613", + "467029.674400534", + "06/05/23", + "06/05/23", + "0.48413786" + ], + [ + "6nx74v", + "-114.445180147429", + "45.651187455738", + "687929.422162891", + "06/05/23", + "06/05/23", + "0.57129467" + ], + [ + "7zrewq", + "-111.272830307641", + "43.579247484999", + "240056.511301572", + "06/05/23", + "06/05/23", + "0.6183306" + ], + [ + "ldgjlp", + "-114.123715064271", + "42.1856743618549", + "431643.2983491", + "06/05/23", + "06/05/23", + "0.465145" + ], + [ + "1kwz5n", + "-115.023269431851", + "45.0016291090915", + "551573.937490543", + "06/05/23", + "06/05/23", + "0.45159155" + ], + [ + "z5rvak", + "-115.431875939338", + "44.5759400424504", + "1464747.82886505", + "06/05/23", + "06/05/23", + "0.40566987" + ], + [ + "xlxep7", + "-116.179554401144", + "43.2776899720946", + "551258.97104258", + "06/05/23", + "06/05/23", + "0.27261978" + ], + [ + "qj5ew7", + "-111.70984770913", + "43.4437466748791", + "984338.153287865", + "06/05/23", + "06/05/23", + "0.6750715" + ], + [ + "4nxrpa", + "-111.977439795359", + "42.2462576117463", + "683453.216929325", + "06/05/23", + "06/05/23", + "0.6693794" + ], + [ + "5zxe3p", + "-116.422476061865", + "43.0392875004994", + "644068.114404965", + "06/05/23", + "06/05/23", + "0.24187893" + ], + [ + "g56k3e", + "-115.923299983761", + "45.1712965138967", + "532303.671531313", + "06/05/23", + "06/05/23", + "0.4389134" + ], + [ + "rx71n5", + "-111.424843890632", + "44.3639847245655", + "860668.054591949", + "06/05/23", + "06/05/23", + "0.6497833" + ], + [ + "dm6kzg", + "-116.315832069259", + "48.5551094692224", + "972705.839506504", + "06/05/23", + "06/05/23", + "0.7393541" + ], + [ + "pm7q11", + "-116.35876373158", + "44.219531829645", + "447845.345761962", + "06/05/23", + "06/05/23", + "0.46714738" + ], + [ + "37njdx", + "-113.834830016904", + "44.0210817612238", + "487036.875815792", + "06/05/23", + "06/05/23", + "0.32997242" + ], + [ + "apxg5d", + "-116.782864751612", + "47.9116133593359", + "649740.104086385", + "06/05/23", + "06/05/23", + "0.7299255" + ], + [ + "mp6jqj", + "-114.579838652234", + "45.1526201253143", + "790403.967925529", + "06/05/23", + "06/05/23", + "0.50976104" + ], + [ + "jw63ka", + "-115.069617023155", + "46.5958024549999", + "948086.90049882", + "06/05/23", + "06/05/23", + "0.66627973" + ], + [ + "vk73xk", + "-113.741755109033", + "43.647700048605", + "1013101.1878983", + "06/05/23", + "06/05/23", + "0.49143496" + ], + [ + "9nx74z", + "-113.688612676224", + "42.1672434134063", + "82361.0850802646", + "06/05/23", + "06/05/23", + "0.49430168" + ], + [ + "b3qg56", + "-115.816397178109", + "47.2116607539958", + "781131.783328157", + "06/05/23", + "06/05/23", + "0.69925004" + ], + [ + "wn7adr", + "-112.622438840535", + "42.2009785736542", + "607960.586012339", + "06/05/23", + "06/05/23", + "0.51393676" + ], + [ + "kn5alz", + "-112.878400273618", + "44.3772673105942", + "1769042.48735889", + "06/05/23", + "06/05/23", + "0.44174367" + ], + [ + "n3rj94", + "-116.67551715975", + "43.6954703189706", + "733542.813815025", + "06/05/23", + "06/05/23", + "0.4804937" + ], + [ + "ejrgdr", + "-115.807491219324", + "45.7657382047655", + "810206.621437695", + "06/05/23", + "06/05/23", + "0.6201947" + ], + [ + "6nx7av", + "-114.557006745688", + "46.287427655733", + "461202.953260645", + "06/05/23", + "06/05/23", + "0.4848163" + ], + [ + "7zremq", + "-112.102700106746", + "43.3313945928709", + "635000.699117105", + "06/05/23", + "06/05/23", + "0.50027984" + ], + [ + "ldgjap", + "-100.963489600506", + "31.7388299014106", + "665592.550761212", + "06/05/23", + "06/05/23", + "0.46991816" + ], + [ + "1kwzan", + "-96.5251883629433", + "32.166359913351", + "816923.080093273", + "06/05/23", + "06/05/23", + "0.6614118" + ], + [ + "z5rvjk", + "-104.796326461502", + "31.8164685357885", + "565795.061658825", + "06/05/23", + "06/05/23", + "0.20401534" + ], + [ + "xlxea7", + "-99.0222255611813", + "33.6258312418286", + "1040593.22313688", + "06/05/23", + "06/05/23", + "0.57445985" + ], + [ + "qj5el7", + "-101.578831240397", + "36.3200245654335", + "912583.811634272", + "06/05/23", + "06/05/23", + "0.5174049" + ], + [ + "4nxr9a", + "-103.214315118477", + "30.6777550823536", + "1212342.35864305", + "06/05/23", + "06/05/23", + "0.2257531" + ], + [ + "5zxe1p", + "-101.007279282673", + "33.6693686625773", + "1010742.00759897", + "06/05/23", + "06/05/23", + "0.57198834" + ], + [ + "g56k9e", + "-102.360072032075", + "32.84238834688", + "945492.839616784", + "06/05/23", + "06/05/23", + "0.2306414" + ], + [ + "rx71w5", + "-100.5222668921", + "29.7839600268412", + "583116.255268545", + "06/05/23", + "06/05/23", + "0.5029227" + ], + [ + "dm6kag", + "-101.898510314668", + "32.797817604561", + "609519.223953971", + "06/05/23", + "06/05/23", + "0.20807363" + ], + [ + "pm7qn1", + "-100.339126878435", + "32.7614491980893", + "809603.636866096", + "06/05/23", + "06/05/23", + "0.39395168" + ], + [ + "37njxx", + "-102.384424167052", + "33.9391505709097", + "1180432.25317104", + "06/05/23", + "06/05/23", + "0.2881316" + ], + [ + "apxg4d", + "-101.027413863383", + "32.4903276367117", + "723083.954062531", + "06/05/23", + "06/05/23", + "0.4211628" + ], + [ + "dm6kak", + "-100.266345505083", + "34.3787011988514", + "854130.871878032", + "06/05/23", + "06/05/23", + "0.5877674" + ], + [ + "pm7qn9", + "-101.836151097607", + "33.9824198624684", + "956632.049670112", + "06/05/23", + "06/05/23", + "0.32948196" + ], + [ + "37njx7", + "-99.2370405644419", + "27.7464986532834", + "818980.008999076", + "06/05/23", + "06/05/23", + "0.51603055" + ], + [ + "apxg4l", + "-99.6746024861498", + "33.507794296112", + "594040.954129857", + "06/05/23", + "06/05/23", + "0.45495242" + ], + [ + "mp6jmg", + "-102.759353061158", + "35.4582806291758", + "1281555.27088372", + "06/05/23", + "06/05/23", + "0.44794512" + ], + [ + "jw63r1", + "-102.790627077996", + "32.2287436486524", + "896591.309583707", + "06/05/23", + "06/05/23", + "0.28333083" + ], + [ + "vk735b", + "-100.95082280502", + "35.7189023073997", + "665289.097447117", + "06/05/23", + "06/05/23", + "0.5763529" + ], + [ + "9nx7e1", + "-97.8044696969866", + "32.7229155600731", + "1229811.32522374", + "06/05/23", + "06/05/23", + "0.6215907" + ], + [ + "b3qg4q", + "-96.6894710801049", + "30.0660234307449", + "1671303.69841368", + "06/05/23", + "06/05/23", + "0.67699414" + ], + [ + "wn7a5g", + "-94.6212129525775", + "29.9443021862", + "1532443.66431217", + "06/05/23", + "06/05/23", + "0.73021424" + ], + [ + "kn5avw", + "-100.546569765696", + "34.7714075504694", + "932520.510919331", + "06/05/23", + "06/05/23", + "0.58864003" + ], + [ + "n3rj7a", + "-95.2972631890334", + "31.2624418883097", + "1041950.50775378", + "06/05/23", + "06/05/23", + "0.77928466" + ], + [ + "ejrgzl", + "-100.259187621358", + "28.6749792099277", + "989170.063750775", + "06/05/23", + "06/05/23", + "0.5320276" + ], + [ + "6nx7wk", + "-104.251905885214", + "29.793493434466", + "582596.899064933", + "06/05/23", + "06/05/23", + "0.22593117" + ], + [ + "7zre45", + "-104.353100490098", + "31.6777573661225", + "1016180.44513621", + "06/05/23", + "06/05/23", + "0.18412624" + ], + [ + "ldgjmr", + "-99.6025315209896", + "28.8267359360288", + "666230.770583166", + "06/05/23", + "06/05/23", + "0.60939664" + ], + [ + "1kwzmd", + "-102.725065753064", + "34.8550869351491", + "528814.021678188", + "06/05/23", + "06/05/23", + "0.46240464" + ], + [ + "z5rvb9", + "-99.2397507067856", + "29.108394563017", + "1098538.95241315", + "06/05/23", + "06/05/23", + "0.70342183" + ], + [ + "xlxem9", + "-100.280037499114", + "29.1573008888713", + "1132405.65805297", + "06/05/23", + "06/05/23", + "0.6039311" + ], + [ + "qj5ekq", + "-97.6983832202935", + "27.6869395908909", + "1321723.582806", + "06/05/23", + "06/05/23", + "0.62891006" + ], + [ + "4nxrlp", + "-97.1683379836453", + "29.5076021996467", + "1061273.21540519", + "06/05/23", + "06/05/23", + "0.7014905" + ], + [ + "5zxe41", + "-101.782213635841", + "32.2504882865564", + "646748.523791012", + "06/05/23", + "06/05/23", + "0.23287345" + ], + [ + "g56kzv", + "-96.2210339848528", + "33.5392468057667", + "861402.175023486", + "06/05/23", + "06/05/23", + "0.71030325" + ], + [ + "rx71kk", + "-100.720857976527", + "35.0589741396394", + "1063268.65658506", + "06/05/23", + "06/05/23", + "0.59217983" + ], + [ + "dm6k5k", + "-102.650643373101", + "36.0444786556697", + "714168.676615071", + "06/05/23", + "06/05/23", + "0.455803" + ], + [ + "pm7ql9", + "-103.805956117297", + "31.3663040159874", + "924789.504785857", + "06/05/23", + "06/05/23", + "0.16582143" + ], + [ + "37nj57", + "-104.059383695424", + "30.5972006041055", + "534530.893604001", + "06/05/23", + "06/05/23", + "0.30262128" + ], + [ + "apxgdl", + "-105.744080449704", + "31.7410956592017", + "1901550.05496019", + "06/05/23", + "06/05/23", + "0.16317482" + ], + [ + "mp6jzg", + "-103.237627545841", + "31.2911570594143", + "924387.367467177", + "06/05/23", + "06/05/23", + "0.19664977" + ], + [ + "jw63q1", + "-101.510816633691", + "31.877800209153", + "743445.816934006", + "06/05/23", + "06/05/23", + "0.29559076" + ], + [ + "vk73lb", + "-100.247687417761", + "31.0028099468259", + "729205.272259694", + "06/05/23", + "06/05/23", + "0.541914" + ], + [ + "9nx731", + "-101.844259963688", + "31.2112066197967", + "728826.604021592", + "06/05/23", + "06/05/23", + "0.26609302" + ], + [ + "b3qgpq", + "-101.124298312713", + "34.5619882685346", + "767487.391255896", + "06/05/23", + "06/05/23", + "0.4667927" + ], + [ + "wn7alg", + "-104.335616334732", + "31.1923202961594", + "974167.944248779", + "06/05/23", + "06/05/23", + "0.1926503" + ], + [ + "kn5akw", + "-100.126954749453", + "32.4379754786474", + "978342.024606773", + "06/05/23", + "06/05/23", + "0.48672187" + ], + [ + "n3rjga", + "-102.761317905335", + "34.5021410147001", + "524856.413540506", + "06/05/23", + "06/05/23", + "0.43339223" + ], + [ + "ejrgml", + "-101.486091828714", + "33.7846741801945", + "612778.073428425", + "06/05/23", + "06/05/23", + "0.26689884" + ], + [ + "6nx7lk", + "-96.0707374904551", + "30.7644136252247", + "1327232.04803111", + "06/05/23", + "06/05/23", + "0.6833756" + ], + [ + "7zred5", + "-99.3770746531966", + "31.5294534889763", + "1211024.8006639", + "06/05/23", + "06/05/23", + "0.53095293" + ], + [ + "ldgj9r", + "-100.198054759977", + "36.2455809213845", + "534741.79903431", + "06/05/23", + "06/05/23", + "0.5756977" + ], + [ + "1kwz4d", + "-98.7476601238458", + "27.6863720681004", + "2101884.02453776", + "06/05/23", + "06/05/23", + "0.5506166" + ], + [ + "z5rvp9", + "-100.302412290106", + "35.5925748886348", + "982231.060013065", + "06/05/23", + "06/05/23", + "0.56465226" + ], + [ + "xlxe59", + "-96.7564681921448", + "33.0093014796523", + "789402.072243092", + "06/05/23", + "06/05/23", + "0.5970736" + ], + [ + "qj5e1q", + "-98.0155908731448", + "26.2943291811351", + "768250.800593922", + "06/05/23", + "06/05/23", + "0.60180753" + ], + [ + "4nxrrp", + "-101.498275521474", + "35.0283013685444", + "578534.091248005", + "06/05/23", + "06/05/23", + "0.5221979" + ], + [ + "5zxee1", + "-99.2074853121572", + "30.5118703193941", + "773971.436428883", + "06/05/23", + "06/05/23", + "0.60011035" + ], + [ + "g56kkv", + "-100.569348754296", + "33.4823647565964", + "537991.033144216", + "06/05/23", + "06/05/23", + "0.4939389" + ], + [ + "rx711k", + "-98.5982989166793", + "29.0373039892802", + "758228.617561712", + "06/05/23", + "06/05/23", + "0.65447855" + ], + [ + "dm6kkk", + "-102.459911436714", + "31.2861425933599", + "556266.108872603", + "06/05/23", + "06/05/23", + "0.24037158" + ], + [ + "pm7qq9", + "-102.089190475998", + "30.7885410835199", + "2542381.84008662", + "06/05/23", + "06/05/23", + "0.3075517" + ], + [ + "37njj7", + "-99.7711367460751", + "30.8879962642462", + "533611.993699778", + "06/05/23", + "06/05/23", + "0.5496256" + ], + [ + "apxggl", + "-99.9753917543941", + "33.2716997542581", + "898715.862336241", + "06/05/23", + "06/05/23", + "0.4729906" + ], + [ + "mp6jjg", + "-101.294192840266", + "31.8752124904537", + "689682.012128917", + "06/05/23", + "06/05/23", + "0.4349679" + ], + [ + "jw6331", + "-97.1636401139939", + "30.9397879694415", + "1386305.55835464", + "06/05/23", + "06/05/23", + "0.6290245" + ], + [ + "vk733b", + "-98.6912573062033", + "28.4435181668324", + "582567.23060458", + "06/05/23", + "06/05/23", + "0.65628105" + ], + [ + "9nx771", + "-95.6219386220286", + "29.0851274296513", + "1021752.35911555", + "06/05/23", + "06/05/23", + "0.711156" + ], + [ + "b3qggq", + "-98.0564000936794", + "30.8382775150349", + "1674918.69593031", + "06/05/23", + "06/05/23", + "0.5935697" + ], + [ + "wn7aag", + "-100.476085480644", + "31.8352255053264", + "1093984.30604774", + "06/05/23", + "06/05/23", + "0.5041691" + ], + [ + "kn5aaw", + "-96.2912171213406", + "31.6440646241225", + "898272.922977205", + "06/05/23", + "06/05/23", + "0.7141333" + ], + [ + "n3rjja", + "-102.639501070249", + "34.0984672169067", + "855826.52876449", + "06/05/23", + "06/05/23", + "0.4533026" + ], + [ + "ejrggl", + "-99.1230572752726", + "30.8942013425945", + "1074050.13712177", + "06/05/23", + "06/05/23", + "0.58698094" + ], + [ + "6nx77k", + "-98.5318521880735", + "33.8224848275705", + "700842.224162707", + "06/05/23", + "06/05/23", + "0.59313506" + ], + [ + "7zree5", + "-105.263118948141", + "31.157501119673", + "1816096.66547795", + "06/05/23", + "06/05/23", + "0.16750702" + ], + [ + "ldgjjr", + "-95.7575617701969", + "31.6773748853819", + "1378793.55480056", + "06/05/23", + "06/05/23", + "0.77601755" + ], + [ + "1kwzzd", + "-102.782540645735", + "33.377142136091", + "738052.799342468", + "06/05/23", + "06/05/23", + "0.31650645" + ], + [ + "z5rvv9", + "-102.036741354548", + "35.3956500087441", + "1354791.96015233", + "06/05/23", + "06/05/23", + "0.51904154" + ], + [ + "xlxee9", + "-94.8056323580083", + "31.6241170741308", + "1053916.32286345", + "06/05/23", + "06/05/23", + "0.8027031" + ], + [ + "qj5eeq", + "-95.3613176294782", + "29.6402356143858", + "1434115.80777035", + "06/05/23", + "06/05/23", + "0.6355462" + ], + [ + "4nxrvp", + "-101.530440484045", + "36.046852927119", + "567133.621618439", + "06/05/23", + "06/05/23", + "0.4802182" + ], + [ + "5zxed1", + "-97.6839319519938", + "29.7133221246075", + "2307168.51516066", + "06/05/23", + "06/05/23", + "0.67638993" + ], + [ + "g56kdv", + "-96.514953114996", + "33.3209642076787", + "624924.429659306", + "06/05/23", + "06/05/23", + "0.68144727" + ], + [ + "rx71qk", + "-95.0952583801163", + "33.4358442758156", + "921395.850430781", + "06/05/23", + "06/05/23", + "0.7621982" + ], + [ + "dm6klk", + "-99.675590462154", + "34.0978795655433", + "513564.844240357", + "06/05/23", + "06/05/23", + "0.52625567" + ], + [ + "pm7q99", + "-96.912965098242", + "31.8460695922983", + "1020052.96994943", + "06/05/23", + "06/05/23", + "0.6406857" + ], + [ + "37njv7", + "-102.442937324377", + "36.3085093382315", + "776729.401321097", + "06/05/23", + "06/05/23", + "0.46475893" + ], + [ + "apxgel", + "-99.5789530305066", + "31.9935632605142", + "848686.361478974", + "06/05/23", + "06/05/23", + "0.5915221" + ], + [ + "mp6jvg", + "-98.7179332402563", + "31.0395315808289", + "711490.987365048", + "06/05/23", + "06/05/23", + "0.6409271" + ], + [ + "jw63a1", + "-102.202189588514", + "34.6920895070947", + "591783.367748066", + "06/05/23", + "06/05/23", + "0.59599686" + ], + [ + "vk731b", + "-96.0340810708437", + "29.4256036295892", + "1731916.04661894", + "06/05/23", + "06/05/23", + "0.6918879" + ], + [ + "9nx7m1", + "-99.4621533775417", + "30.0064914428524", + "1446488.63113996", + "06/05/23", + "06/05/23", + "0.593156" + ], + [ + "b3qg1q", + "-95.7031580413015", + "30.3397126405113", + "536447.450839181", + "06/05/23", + "06/05/23", + "0.7022704" + ], + [ + "wn7a1g", + "-96.5464429226635", + "29.2307890641422", + "1025861.21946795", + "06/05/23", + "06/05/23", + "0.7176468" + ], + [ + "kn5amw", + "-102.741989661374", + "32.9685371954118", + "621577.650206408", + "06/05/23", + "06/05/23", + "0.23355415" + ], + [ + "n3rjva", + "-99.9895974012296", + "31.3641078209272", + "663457.243982538", + "06/05/23", + "06/05/23", + "0.41756296" + ], + [ + "ejrg1l", + "-100.054801651619", + "32.2065123477758", + "683929.177474511", + "06/05/23", + "06/05/23", + "0.43771562" + ], + [ + "6nx7pk", + "-97.2977655021829", + "31.6726490904373", + "1118112.29213261", + "06/05/23", + "06/05/23", + "0.6410019" + ], + [ + "7zre35", + "-102.072511184664", + "31.7304455351386", + "888364.795881062", + "06/05/23", + "06/05/23", + "0.2312696" + ], + [ + "ldgj4r", + "-99.6788321146636", + "33.9069681154856", + "1095113.7318284", + "06/05/23", + "06/05/23", + "0.562874" + ], + [ + "1kwzbd", + "-94.0455369821405", + "30.0952266566897", + "872101.671925619", + "06/05/23", + "06/05/23", + "0.6784606" + ], + [ + "z5rvx9", + "-95.1005812359178", + "30.4045850881117", + "984416.404642782", + "06/05/23", + "06/05/23", + "0.7432753" + ], + [ + "xlxe19", + "-100.231524783247", + "30.2813563476182", + "2494358.40791741", + "06/05/23", + "06/05/23", + "0.509074" + ], + [ + "qj5ebq", + "-101.449372634419", + "30.0866374190983", + "3859942.60263259", + "06/05/23", + "06/05/23", + "0.40686724" + ], + [ + "4nxrnp", + "-94.7127764249414", + "33.5311455690501", + "647604.860566687", + "06/05/23", + "06/05/23", + "0.79509455" + ], + [ + "5zxez1", + "-99.4077938528517", + "32.8747686344398", + "1109444.54706332", + "06/05/23", + "06/05/23", + "0.6185848" + ], + [ + "g56k5v", + "-100.814267346407", + "36.137265852115", + "1004580.20365634", + "06/05/23", + "06/05/23", + "0.47747448" + ], + [ + "rx71xk", + "-104.545169736047", + "30.6817911745194", + "820188.508501366", + "06/05/23", + "06/05/23", + "0.18191555" + ], + [ + "dm6kmk", + "-104.326842971042", + "30.2147928323355", + "1021439.60673179", + "06/05/23", + "06/05/23", + "0.23481181" + ], + [ + "pm7qm9", + "-97.1182361405021", + "33.5141975020954", + "859036.479049494", + "06/05/23", + "06/05/23", + "0.61531496" + ], + [ + "37nj77", + "-101.806009460025", + "35.7685286588546", + "596631.092955301", + "06/05/23", + "06/05/23", + "0.5630972" + ], + [ + "apxgpl", + "-102.334167621613", + "32.304575633428", + "777593.961763821", + "06/05/23", + "06/05/23", + "0.27595812" + ], + [ + "dm6km4", + "-98.182819537798", + "31.8823085777152", + "3543843.05986731", + "06/05/23", + "06/05/23", + "0.6222625" + ], + [ + "pm7qmp", + "-102.650672549537", + "31.6377564665038", + "684156.024167099", + "06/05/23", + "06/05/23", + "0.27478087" + ], + [ + "37nj7p", + "-98.0559714527446", + "28.9083332451375", + "1288975.2958848", + "06/05/23", + "06/05/23", + "0.6911599" + ], + [ + "apxgp7", + "-101.094495071354", + "31.2788118435114", + "850976.083421232", + "06/05/23", + "06/05/23", + "0.4072895" + ], + [ + "mp6jp6", + "-100.752637579561", + "31.0393772444284", + "786499.434069799", + "06/05/23", + "06/05/23", + "0.46731365" + ], + [ + "jw63wv", + "-101.505395470473", + "32.7948719044643", + "541208.194952631", + "06/05/23", + "06/05/23", + "0.39052495" + ], + [ + "vk73kz", + "-95.7361378517386", + "33.7193826801046", + "633892.148798945", + "06/05/23", + "06/05/23", + "0.73191017" + ], + [ + "9nx7nr", + "-101.928989259255", + "33.3428060579462", + "849024.797007515", + "06/05/23", + "06/05/23", + "0.22250791" + ], + [ + "b3qg3r", + "-99.7019737441952", + "28.1743059117981", + "1189536.35866574", + "06/05/23", + "06/05/23", + "0.5093837" + ], + [ + "wn7an9", + "-96.0443700526734", + "32.9522139764099", + "602740.391946778", + "06/05/23", + "06/05/23", + "0.694895" + ], + [ + "kn5anp", + "-97.1163557477314", + "32.6139293673251", + "1219454.81849651", + "06/05/23", + "06/05/23", + "0.6364117" + ], + [ + "n3rj3n", + "-103.560674934351", + "30.3932127115716", + "926045.701557029", + "06/05/23", + "06/05/23", + "0.3229609" + ], + [ + "ejrgje", + "-97.6625361666407", + "31.264973408049", + "580126.256447604", + "06/05/23", + "06/05/23", + "0.58739406" + ], + [ + "6nx7n3", + "-98.8917712006875", + "26.833356830584", + "863960.621101303", + "06/05/23", + "06/05/23", + "0.53329885" + ], + [ + "7zrezb", + "-94.5029996378498", + "32.4936768804042", + "1513313.77002356", + "06/05/23", + "06/05/23", + "0.7940571" + ], + [ + "ldgjdw", + "-96.7883765557688", + "28.7480083047857", + "837334.98081579", + "06/05/23", + "06/05/23", + "0.695587" + ], + [ + "1kwz15", + "-96.2568670430348", + "29.7720844474549", + "549996.764668564", + "06/05/23", + "06/05/23", + "0.69787556" + ], + [ + "z5rv4j", + "-94.4509041951677", + "33.056759014981", + "1320541.39903827", + "06/05/23", + "06/05/23", + "0.78250444" + ], + [ + "xlxewm", + "-95.4817468284361", + "32.437755396571", + "3002897.5794474", + "06/05/23", + "06/05/23", + "0.77122444" + ], + [ + "qj5e61", + "-102.823842544509", + "30.2263422678501", + "951542.738428579", + "06/05/23", + "06/05/23", + "0.28371996" + ], + [ + "4nxrzr", + "-98.5477681761961", + "26.7249202717626", + "1472825.36767615", + "06/05/23", + "06/05/23", + "0.5848898" + ], + [ + "5zxebd", + "-97.2818357456384", + "28.5264216100682", + "1769136.23716325", + "06/05/23", + "06/05/23", + "0.7323824" + ], + [ + "g56kq5", + "-99.9404584051155", + "29.4841359120084", + "625870.404405812", + "06/05/23", + "06/05/23", + "0.61613905" + ], + [ + "rx7166", + "-94.2982204013763", + "31.7120055366678", + "1503388.05693173", + "06/05/23", + "06/05/23", + "0.8078111" + ], + [ + "dm6kq4", + "-103.532627378962", + "29.5457240360887", + "2415942.3266236", + "06/05/23", + "06/05/23", + "0.2329079" + ], + [ + "pm7qbp", + "-98.570881297434", + "32.9674497136085", + "974949.95172613", + "06/05/23", + "06/05/23", + "0.6491579" + ], + [ + "37njep", + "-101.873667940519", + "34.8769668978721", + "557036.98276995", + "06/05/23", + "06/05/23", + "0.5920265" + ], + [ + "apxgl7", + "-94.3135866521255", + "30.7603011927904", + "626350.160489635", + "06/05/23", + "06/05/23", + "0.8075692" + ], + [ + "mp6jb6", + "-99.077549832277", + "29.7061088146991", + "701866.893076971", + "06/05/23", + "06/05/23", + "0.6387149" + ], + [ + "jw634v", + "-98.9894309017248", + "32.0789568201769", + "1005002.33081184", + "06/05/23", + "06/05/23", + "0.6316388" + ], + [ + "vk736z", + "-93.9120664557917", + "30.9414521440565", + "1469278.05726522", + "06/05/23", + "06/05/23", + "0.8022636" + ], + [ + "9nx7zr", + "-103.358588391271", + "31.7937845536709", + "924727.068175264", + "06/05/23", + "06/05/23", + "0.21997584" + ], + [ + "b3qglr", + "-95.513795744828", + "33.1765008870078", + "542968.43925491", + "06/05/23", + "06/05/23", + "0.71787465" + ], + [ + "wn7ax9", + "-98.5814937061711", + "29.685335854077", + "1090285.4271272", + "06/05/23", + "06/05/23", + "0.600207" + ], + [ + "kn5aqp", + "-96.3258440053481", + "32.6370256854359", + "542225.336048597", + "06/05/23", + "06/05/23", + "0.6754059" + ], + [ + "n3rjwn", + "-100.831453425715", + "35.3995677602294", + "687793.731656588", + "06/05/23", + "06/05/23", + "0.51596785" + ], + [ + "ejrgqe", + "-96.432647506794", + "31.0749023124309", + "640055.09140317", + "06/05/23", + "06/05/23", + "0.758639" + ], + [ + "6nx7b3", + "-97.5125887557303", + "26.16489930369", + "649117.003160005", + "06/05/23", + "06/05/23", + "0.5717506" + ], + [ + "7zrelb", + "-94.7333775706933", + "30.8403121202743", + "1091692.05374639", + "06/05/23", + "06/05/23", + "0.7998068" + ], + [ + "ldgjnw", + "-98.0220826492661", + "27.0316641982683", + "2029192.5011355", + "06/05/23", + "06/05/23", + "0.61176986" + ], + [ + "1kwz75", + "-97.5985439973851", + "33.4556382128697", + "1146852.36373429", + "06/05/23", + "06/05/23", + "0.6816569" + ], + [ + "z5rvlj", + "-98.2619258896365", + "30.2157233896565", + "1757095.27038855", + "06/05/23", + "06/05/23", + "0.604193" + ], + [ + "xlxevm", + "-101.15898787874", + "34.1166399155318", + "854651.303484258", + "06/05/23", + "06/05/23", + "0.39598718" + ], + [ + "qj5ex1", + "-99.1709579925484", + "28.3782096756786", + "1296725.91230124", + "06/05/23", + "06/05/23", + "0.54737467" + ], + [ + "4nxr1r", + "-97.894267113086", + "28.1471025402355", + "1516879.04598404", + "06/05/23", + "06/05/23", + "0.67726386" + ], + [ + "5zxerd", + "-98.1786661117829", + "33.4256676676436", + "1491972.34188863", + "06/05/23", + "06/05/23", + "0.6723348" + ], + [ + "g56kx5", + "-98.9639375495409", + "32.8338711418277", + "1023406.26507699", + "06/05/23", + "06/05/23", + "0.63171834" + ], + [ + "rx71d6", + "-100.885156665232", + "33.0623429885743", + "1351132.42831567", + "06/05/23", + "06/05/23", + "0.45433056" + ], + [ + "dm6k44", + "-96.8928434311783", + "30.5671206498684", + "704935.965619533", + "06/05/23", + "06/05/23", + "0.71469" + ], + [ + "pm7qgp", + "-102.85914258932", + "29.7941518361802", + "837559.550185196", + "06/05/23", + "06/05/23", + "0.23970667" + ], + [ + "37njrp", + "-100.307387964714", + "34.0417346962816", + "603108.242899762", + "06/05/23", + "06/05/23", + "0.58599746" + ], + [ + "apxg17", + "-95.4297005721697", + "30.6681521551314", + "603740.895931714", + "06/05/23", + "06/05/23", + "0.75273675" + ], + [ + "mp6jg6", + "-94.5990971820953", + "29.4960793674948", + "6636.01992383652", + "06/05/23", + "06/05/23", + "0.24471842" + ], + [ + "jw63xv", + "-96.6343433575738", + "28.2349882635393", + "45794.596992602", + "06/05/23", + "06/05/23", + "0.5036929" + ], + [ + "vk73mz", + "-96.9290669999981", + "28.0209979890915", + "31428.4911557268", + "06/05/23", + "06/05/23", + "0.34124604" + ], + [ + "9nx7qr", + "-97.2946949172627", + "27.2753557170715", + "84208.2234952332", + "06/05/23", + "06/05/23", + "0.3777205" + ], + [ + "b3qg6r", + "-118.505101751411", + "46.2832723838926", + "703337.031709364", + "06/05/23", + "06/05/23", + "0.3769142" + ], + [ + "wn7aj9", + "-117.637393732389", + "48.1423067169715", + "1330255.44759206", + "06/05/23", + "06/05/23", + "0.73292446" + ], + [ + "kn5a4p", + "-121.751989918076", + "45.8483029087502", + "468995.288972609", + "06/05/23", + "06/05/23", + "0.8344905" + ], + [ + "n3rjxn", + "-120.153064335755", + "48.8117844533431", + "412417.155526534", + "06/05/23", + "06/05/23", + "0.48135906" + ], + [ + "ejrgne", + "-121.296141976549", + "47.3486026729987", + "443776.939525543", + "06/05/23", + "06/05/23", + "0.760073" + ], + [ + "6nx7z3", + "-119.714012345853", + "48.4187491469406", + "1476360.91191731", + "06/05/23", + "06/05/23", + "0.5298334" + ], + [ + "7zrekb", + "-120.682109236168", + "48.4580360143129", + "927191.005340999", + "06/05/23", + "06/05/23", + "0.5384437" + ], + [ + "ldgjxw", + "-120.205394672423", + "48.4179230243661", + "538745.459707465", + "06/05/23", + "06/05/23", + "0.62394226" + ], + [ + "1kwz65", + "-119.096277598402", + "47.3408022430264", + "460874.069837675", + "06/05/23", + "06/05/23", + "0.35481948" + ], + [ + "z5rvej", + "-120.28130015376", + "46.4190332279275", + "486436.042049421", + "06/05/23", + "06/05/23", + "0.5563361" + ], + [ + "xlxerm", + "-118.882413099117", + "47.9508529775097", + "487201.918487561", + "06/05/23", + "06/05/23", + "0.46923226" + ], + [ + "qj5e31", + "-119.97784233992", + "47.5284163884716", + "1387656.26403789", + "06/05/23", + "06/05/23", + "0.41057217" + ], + [ + "4nxr6r", + "-120.28447882101", + "46.0452838319979", + "840910.378212641", + "06/05/23", + "06/05/23", + "0.3307708" + ], + [ + "5zxe6d", + "-122.231767174106", + "46.048994911086", + "676405.660786572", + "06/05/23", + "06/05/23", + "0.8302844" + ], + [ + "g56k15", + "-118.324266579924", + "48.8067546037968", + "681566.770967338", + "06/05/23", + "06/05/23", + "0.7336422" + ], + [ + "rx71a6", + "-123.686089243709", + "47.7535804816786", + "1067576.08686719", + "06/05/23", + "06/05/23", + "0.808124" + ], + [ + "dm6k94", + "-117.447790949066", + "46.202983121631", + "897497.620951447", + "06/05/23", + "06/05/23", + "0.6455383" + ], + [ + "pm7qpp", + "-119.501503523611", + "46.5298789211267", + "1128853.91951363", + "06/05/23", + "06/05/23", + "0.30173838" + ], + [ + "37nj1p", + "-122.270724155526", + "48.8290799736369", + "526930.960071487", + "06/05/23", + "06/05/23", + "0.80381656" + ], + [ + "apxgm7", + "-118.558609614075", + "48.3701203420307", + "908910.995412382", + "06/05/23", + "06/05/23", + "0.72210735" + ], + [ + "mp6j16", + "-121.666754343811", + "47.2369613623266", + "518860.095082482", + "06/05/23", + "06/05/23", + "0.82355285" + ], + [ + "jw631v", + "-121.030311237401", + "47.0047302121556", + "806617.74987868", + "06/05/23", + "06/05/23", + "0.66478735" + ], + [ + "vk739z", + "-117.693891357162", + "48.3755066434482", + "582342.53471722", + "06/05/23", + "06/05/23", + "0.77395403" + ], + [ + "9nx7dr", + "-119.033822973382", + "48.6265454965272", + "705831.83925602", + "06/05/23", + "06/05/23", + "0.70179605" + ], + [ + "b3qgjr", + "-121.969271988832", + "46.579499644471", + "742874.967922874", + "06/05/23", + "06/05/23", + "0.83405256" + ], + [ + "wn7ar9", + "-123.105332612519", + "47.188729990597", + "1348787.16499135", + "06/05/23", + "06/05/23", + "0.81779486" + ], + [ + "kn5agp", + "-122.329558639967", + "48.3221229530114", + "471081.728191321", + "06/05/23", + "06/05/23", + "0.79622734" + ], + [ + "n3rj5n", + "-118.782313166675", + "46.8403288091727", + "776647.987017315", + "06/05/23", + "06/05/23", + "0.3460425" + ], + [ + "ejrgbe", + "-118.189169923066", + "46.9048433388645", + "1209006.58625221", + "06/05/23", + "06/05/23", + "0.40457267" + ], + [ + "6nx763", + "-118.325068252339", + "47.607494141169", + "601321.682862928", + "06/05/23", + "06/05/23", + "0.48865902" + ], + [ + "7zre7b", + "-121.307025074296", + "46.4447848754232", + "856912.495627755", + "06/05/23", + "06/05/23", + "0.69795436" + ], + [ + "ldgj1w", + "-121.571758967322", + "48.8317513985716", + "477318.0828387", + "06/05/23", + "06/05/23", + "0.6691651" + ], + [ + "1kwze5", + "-117.632944070383", + "47.6156352766832", + "888432.48298677", + "06/05/23", + "06/05/23", + "0.57999134" + ], + [ + "z5rvnj", + "-123.155577949072", + "47.817716786768", + "772784.06542501", + "06/05/23", + "06/05/23", + "0.78149825" + ], + [ + "xlxe4m", + "-121.10798948405", + "48.2781805267697", + "471726.558576403", + "06/05/23", + "06/05/23", + "0.62042725" + ], + [ + "qj5ea1", + "-120.427454061788", + "46.791969712015", + "701848.990786396", + "06/05/23", + "06/05/23", + "0.33928418" + ], + [ + "4nxr3r", + "-117.28526051771", + "47.0351461080852", + "947213.420540297", + "06/05/23", + "06/05/23", + "0.6731229" + ], + [ + "5zxead", + "-122.124233005298", + "47.0488167652272", + "679329.427458282", + "06/05/23", + "06/05/23", + "0.818541" + ], + [ + "g56kr5", + "-121.214699194477", + "47.7719758247252", + "631481.981763912", + "06/05/23", + "06/05/23", + "0.63360846" + ], + [ + "rx71m6", + "-117.357603171985", + "48.7660142935818", + "645155.915778571", + "06/05/23", + "06/05/23", + "0.7601916" + ], + [ + "dm6kx4", + "-124.322360386872", + "47.9119910399179", + "905101.856094417", + "06/05/23", + "06/05/23", + "0.83777815" + ], + [ + "pm7q3p", + "-121.380647295617", + "48.6358844893953", + "519349.529789833", + "06/05/23", + "06/05/23", + "0.8263037" + ], + [ + "37njpp", + "-120.574416917075", + "47.6910618332739", + "1003157.12970306", + "06/05/23", + "06/05/23", + "0.6988369" + ], + [ + "apxg97", + "-120.020852928658", + "46.5810722260638", + "457717.257093602", + "06/05/23", + "06/05/23", + "0.2822435" + ], + [ + "dm6kx6", + "-122.243158751999", + "47.5064765050601", + "605656.630800189", + "06/05/23", + "06/05/23", + "0.72713774" + ], + [ + "pm7q3e", + "-120.910264557776", + "45.9229402212003", + "763700.076285099", + "06/05/23", + "06/05/23", + "0.58326024" + ], + [ + "37njpq", + "-123.348896926063", + "46.6890466592133", + "1183655.93065412", + "06/05/23", + "06/05/23", + "0.8387455" + ], + [ + "apxg9j", + "-119.508455427153", + "47.073891102611", + "580185.024037514", + "06/05/23", + "06/05/23", + "0.5136357" + ], + [ + "mp6je9", + "-121.804785789079", + "48.1105147532345", + "1255009.27365063", + "06/05/23", + "06/05/23", + "0.8223062" + ], + [ + "jw635n", + "-121.572971314841", + "46.1896123999109", + "434107.931363585", + "06/05/23", + "06/05/23", + "0.76885617" + ], + [ + "vk73be", + "-119.144886518464", + "47.6323376577321", + "780660.7569832", + "06/05/23", + "06/05/23", + "0.41515264" + ], + [ + "9nx79l", + "-122.728241928989", + "46.4392679660737", + "790235.256233076", + "06/05/23", + "06/05/23", + "0.84231186" + ], + [ + "b3qgbw", + "-122.827614911315", + "46.0246310716206", + "809518.300505721", + "06/05/23", + "06/05/23", + "0.82447547" + ], + [ + "wn7awm", + "-117.762230312279", + "46.6910347480027", + "943556.355803755", + "06/05/23", + "06/05/23", + "0.551587" + ], + [ + "kn5az1", + "-123.91042408904", + "47.2057998526428", + "500871.39274432", + "06/05/23", + "06/05/23", + "0.8363469" + ], + [ + "n3rjd6", + "-122.666068567496", + "48.6939101094581", + "6007.15452315056", + "06/05/23", + "06/05/23", + "0.85888" + ], + [ + "ejrg75", + "-123.083629332412", + "48.5377665926483", + "36198.9850590531", + "06/05/23", + "06/05/23", + "0.8235479" + ], + [ + "6nx7ra", + "-122.957286376744", + "48.5730140110624", + "5110.14716718054", + "06/05/23", + "06/05/23", + "0.84668124" + ], + [ + "7zre14", + "-122.566393747711", + "48.1577119210088", + "110163.018141251", + "06/05/23", + "06/05/23", + "0.80706257" + ], + [ + "ldgj59", + "-122.706478957296", + "48.0542706944176", + "6885.27561492198", + "06/05/23", + "06/05/23", + "0.83375794" + ], + [ + "1kwzrz", + "-122.538114270852", + "47.6447961018768", + "17933.9002953923", + "06/05/23", + "06/05/23", + "0.85430133" + ], + [ + "z5rv3x", + "-122.472358464383", + "47.4126609619949", + "23532.5293315775", + "06/05/23", + "06/05/23", + "0.8437865" + ], + [ + "xlxedl", + "-122.883161240067", + "47.2336036049562", + "12137.8310952681", + "06/05/23", + "06/05/23", + "0.79074264" + ], + [ + "qj5e46", + "-122.704023829479", + "47.1582514182495", + "5193.70288618601", + "06/05/23", + "06/05/23", + "0.8026262" + ], + [ + "4nxrw1", + "-119.132129389402", + "46.211563323855", + "686177.085232775", + "06/05/23", + "06/05/23", + "0.45550194" + ], + [ + "5zxek6", + "-123.169550312767", + "46.1187114098065", + "47621.4095074278", + "06/05/23", + "06/05/23", + "0.7111821" + ], + [ + "g56k4r", + "-99.0471112921683", + "45.1673377761436", + "1964661.89187643", + "06/05/23", + "06/05/23", + "0.42565575" + ], + [ + "rx71rr", + "-97.346790039551", + "45.6035431223118", + "553435.079861611", + "06/05/23", + "06/05/23", + "0.6030209" + ], + [ + "dm6kr6", + "-101.480098820268", + "43.9919836003892", + "1322122.11436298", + "06/05/23", + "06/05/23", + "0.60098827" + ], + [ + "pm7q4e", + "-97.4279099509549", + "43.5846394368007", + "1741427.16037356", + "06/05/23", + "06/05/23", + "0.43118796" + ], + [ + "37njbq", + "-101.924015051576", + "44.7855257549319", + "570350.024319127", + "06/05/23", + "06/05/23", + "0.60620093" + ], + [ + "apxg7j", + "-102.214065173036", + "44.3134165705113", + "765237.522469336", + "06/05/23", + "06/05/23", + "0.582858" + ], + [ + "mp6j49", + "-97.4408489141776", + "44.7183730917929", + "680886.926738322", + "06/05/23", + "06/05/23", + "0.40042025" + ], + [ + "jw63gn", + "-102.574297449749", + "45.3459602580125", + "1291539.30875262", + "06/05/23", + "06/05/23", + "0.5917271" + ], + [ + "vk734e", + "-102.531448316822", + "43.2323578474827", + "802194.365891156", + "06/05/23", + "06/05/23", + "0.5967835" + ], + [ + "9nx71l", + "-98.7798000979873", + "43.7658240872706", + "921153.505288755", + "06/05/23", + "06/05/23", + "0.52761996" + ], + [ + "b3qg7w", + "-103.802569440285", + "45.6708843338781", + "618045.01587821", + "06/05/23", + "06/05/23", + "0.54934126" + ], + [ + "wn7a4m", + "-102.515322363804", + "43.6441767902723", + "457705.522553313", + "06/05/23", + "06/05/23", + "0.3973574" + ], + [ + "kn5a71", + "-100.609011267621", + "45.3746938610781", + "1113506.91206741", + "06/05/23", + "06/05/23", + "0.5963628" + ], + [ + "n3rj46", + "-101.021066569847", + "45.3941438954711", + "641632.643779013", + "06/05/23", + "06/05/23", + "0.6087698" + ], + [ + "ejrgr5", + "-99.244088876415", + "43.4641281621242", + "1068606.44908941", + "06/05/23", + "06/05/23", + "0.6110005" + ], + [ + "6nx7xa", + "-96.8119477025134", + "45.5192110170899", + "843902.085025969", + "06/05/23", + "06/05/23", + "0.4285724" + ], + [ + "7zrer4", + "-101.337260274201", + "44.8362757783554", + "684653.556023544", + "06/05/23", + "06/05/23", + "0.51069224" + ], + [ + "ldgjg9", + "-103.198306775269", + "45.3788589258373", + "855588.168938033", + "06/05/23", + "06/05/23", + "0.5436055" + ], + [ + "1kwzwz", + "-101.7590603933", + "43.1921765792635", + "796234.105050192", + "06/05/23", + "06/05/23", + "0.60312694" + ], + [ + "z5rvrx", + "-101.619509622412", + "45.2540707362218", + "564426.58020295", + "06/05/23", + "06/05/23", + "0.56504756" + ], + [ + "xlxexl", + "-100.118993781224", + "44.0716692150382", + "851906.053646481", + "06/05/23", + "06/05/23", + "0.5856763" + ], + [ + "qj5e56", + "-102.4987549931", + "45.7385087000982", + "597081.054060817", + "06/05/23", + "06/05/23", + "0.61629206" + ], + [ + "4nxrx1", + "-103.14612907478", + "43.7096165531109", + "1613871.50551511", + "06/05/23", + "06/05/23", + "0.6446665" + ], + [ + "5zxex6", + "-96.8911606606505", + "44.8181343953174", + "1430872.89955818", + "06/05/23", + "06/05/23", + "0.5195787" + ], + [ + "g56k6r", + "-103.69921866565", + "44.7933517745423", + "1092236.33398705", + "06/05/23", + "06/05/23", + "0.6076082" + ], + [ + "rx717r", + "-96.688640727147", + "43.9709665581584", + "735399.528057682", + "06/05/23", + "06/05/23", + "0.44815677" + ], + [ + "dm6k66", + "-96.7489739128425", + "43.2793859223172", + "507080.229736575", + "06/05/23", + "06/05/23", + "0.43383375" + ], + [ + "pm7q7e", + "-96.9330123517544", + "42.9218717457062", + "608572.743135647", + "06/05/23", + "06/05/23", + "0.43419504" + ], + [ + "37njnq", + "-102.092482414433", + "43.9530993700828", + "868229.083853425", + "06/05/23", + "06/05/23", + "0.62209314" + ], + [ + "apxgxj", + "-103.684683350201", + "43.9275814601426", + "978509.787414566", + "06/05/23", + "06/05/23", + "0.6323292" + ], + [ + "mp6j69", + "-98.0577782481815", + "45.6969783892109", + "924412.418022187", + "06/05/23", + "06/05/23", + "0.40815806" + ], + [ + "jw636n", + "-100.011105780157", + "45.5501662986505", + "1267638.5489142", + "06/05/23", + "06/05/23", + "0.5421298" + ], + [ + "vk737e", + "-99.2815861009983", + "44.2219026629165", + "1479195.79972592", + "06/05/23", + "06/05/23", + "0.5808708" + ], + [ + "9nx7xl", + "-97.2662594919299", + "44.2160186789549", + "598669.929793597", + "06/05/23", + "06/05/23", + "0.42553928" + ], + [ + "b3qgqw", + "-97.6648237506368", + "43.07160990352", + "801928.867963439", + "06/05/23", + "06/05/23", + "0.45973855" + ], + [ + "wn7a7m", + "-96.5783149362146", + "42.5867416377901", + "57160.8277007062", + "06/05/23", + "06/05/23", + "0.4338042" + ], + [ + "kn5a51", + "-102.664734048171", + "44.717563295102", + "1104453.91982637", + "06/05/23", + "06/05/23", + "0.60403174" + ], + [ + "n3rjr6", + "-99.0834172512917", + "45.7413810698565", + "612493.34477161", + "06/05/23", + "06/05/23", + "0.5948928" + ], + [ + "ejrgp5", + "-103.53526078778", + "45.306238389898", + "525495.076175301", + "06/05/23", + "06/05/23", + "0.51767635" + ], + [ + "6nx7va", + "-99.9184835456119", + "43.2674068258636", + "1604495.89248985", + "06/05/23", + "06/05/23", + "0.69961286" + ], + [ + "7zre94", + "-97.7908478275206", + "44.7975944346024", + "1541547.51677095", + "06/05/23", + "06/05/23", + "0.43084416" + ], + [ + "ldgjb9", + "-98.327406232385", + "45.086898108056", + "925941.007949602", + "06/05/23", + "06/05/23", + "0.344789" + ], + [ + "1kwzpz", + "-100.005735647972", + "44.5997941559748", + "523561.43901625", + "06/05/23", + "06/05/23", + "0.5164823" + ], + [ + "z5rvgx", + "-103.167538409139", + "44.3785915034304", + "608737.659289461", + "06/05/23", + "06/05/23", + "0.6617717" + ], + [ + "xlxegl", + "-101.623227789748", + "45.7109867258572", + "1167032.48356399", + "06/05/23", + "06/05/23", + "0.60263133" + ], + [ + "qj5eg6", + "-98.3231752499986", + "43.4354264801092", + "1310301.79490109", + "06/05/23", + "06/05/23", + "0.4511125" + ], + [ + "4nxrm1", + "-103.785728925105", + "43.3660325794441", + "939390.688889742", + "06/05/23", + "06/05/23", + "0.54971296" + ], + [ + "5zxej6", + "-100.770018354273", + "43.9363694818692", + "1334644.60847287", + "06/05/23", + "06/05/23", + "0.672816" + ], + [ + "g56kar", + "-99.3386194989886", + "44.8473830283632", + "804277.484013561", + "06/05/23", + "06/05/23", + "0.59652555" + ], + [ + "rx71gr", + "-100.095157052422", + "44.9470462823056", + "522196.879616967", + "06/05/23", + "06/05/23", + "0.41177583" + ], + [ + "dm6kd6", + "-98.2657946672995", + "44.289010913246", + "934395.696783359", + "06/05/23", + "06/05/23", + "0.46328974" + ], + [ + "pm7qee", + "-101.124979753378", + "43.3586453863568", + "1201480.15965131", + "06/05/23", + "06/05/23", + "0.69653744" + ], + [ + "37njaq", + "-100.713398886184", + "44.3213159736359", + "862467.076647311", + "06/05/23", + "06/05/23", + "0.6039969" + ], + [ + "apxgrj", + "-72.4039646723361", + "42.3014145672954", + "872906.515893775", + "06/05/23", + "06/05/23", + "0.8643416" + ], + [ + "mp6jw9", + "-71.3759796736499", + "42.1200594335525", + "1439292.79595442", + "06/05/23", + "06/05/23", + "0.8209078" + ], + [ + "jw63vn", + "-71.1253868549723", + "42.6160112948419", + "622018.12246533", + "06/05/23", + "06/05/23", + "0.8129623" + ], + [ + "vk73ge", + "-70.591309721542", + "41.8613942322692", + "656428.665532974", + "06/05/23", + "06/05/23", + "0.8024493" + ], + [ + "9nx7wl", + "-72.1568134659377", + "42.5489612109777", + "518176.012501988", + "06/05/23", + "06/05/23", + "0.8754926" + ], + [ + "b3qgnw", + "-73.0746475640424", + "42.3699062362237", + "1013173.42965038", + "06/05/23", + "06/05/23", + "0.88549316" + ], + [ + "wn7agm", + "-70.6356234459048", + "41.3877890598008", + "61293.4773822563", + "06/05/23", + "06/05/23", + "0.81023383" + ], + [ + "kn5ar1", + "-70.0643659333701", + "41.2774672367085", + "29756.2163687527", + "06/05/23", + "06/05/23", + "0.8146734" + ], + [ + "n3rjk6", + "-93.4288137286932", + "31.7840713496203", + "1227917.60447936", + "06/05/23", + "06/05/23", + "0.79113984" + ], + [ + "ejrga5", + "-93.1152790483195", + "29.8327223096346", + "916606.57651857", + "06/05/23", + "06/05/23", + "0.5973707" + ], + [ + "6nx7qa", + "-91.6149606881321", + "32.4728463537681", + "1302422.76276074", + "06/05/23", + "06/05/23", + "0.75836855" + ], + [ + "7zreq4", + "-91.9016123343491", + "30.026284026826", + "533128.315559362", + "06/05/23", + "06/05/23", + "0.6474152" + ], + [ + "ldgjk9", + "-92.4060027146267", + "31.0967164123837", + "570092.180727663", + "06/05/23", + "06/05/23", + "0.7532413" + ], + [ + "1kwzqz", + "-92.0476332348031", + "31.4197823814577", + "1380034.8224531", + "06/05/23", + "06/05/23", + "0.7790569" + ], + [ + "z5rvzx", + "-93.2060346276358", + "31.3904263483837", + "708939.626292688", + "06/05/23", + "06/05/23", + "0.8025238" + ], + [ + "xlxezl", + "-90.6688566061243", + "29.8158258005338", + "1604886.45341569", + "06/05/23", + "06/05/23", + "0.78463984" + ], + [ + "qj5ez6", + "-92.9195027190313", + "30.5495279553571", + "2542523.28715986", + "06/05/23", + "06/05/23", + "0.78871614" + ], + [ + "4nxrq1", + "-89.8508344753323", + "29.775011074188", + "963707.692798785", + "06/05/23", + "06/05/23", + "0.63878214" + ], + [ + "5zxeq6", + "-90.5181468974285", + "30.6273254178193", + "871750.141788778", + "06/05/23", + "06/05/23", + "0.7685595" + ], + [ + "g56kjr", + "-92.7518048033564", + "31.9219636062", + "1034395.42483617", + "06/05/23", + "06/05/23", + "0.8053074" + ], + [ + "rx71zr", + "-91.1908097784154", + "29.5589645805981", + "1057535.49547259", + "06/05/23", + "06/05/23", + "0.74527216" + ], + [ + "dm6k36", + "-93.4542830269958", + "32.5584886067789", + "1641053.50850595", + "06/05/23", + "06/05/23", + "0.79662234" + ], + [ + "pm7qre", + "-92.8654837245399", + "30.0602736781923", + "678731.503604867", + "06/05/23", + "06/05/23", + "0.66223377" + ], + [ + "37njqq", + "-91.5755371876402", + "30.329132420156", + "845517.339752282", + "06/05/23", + "06/05/23", + "0.8222279" + ], + [ + "apxg6j", + "-92.9471639471037", + "32.7791486187195", + "607798.959325344", + "06/05/23", + "06/05/23", + "0.8211629" + ], + [ + "dm6k37", + "-93.1904370729313", + "30.9825528865636", + "879930.729473904", + "06/05/23", + "06/05/23", + "0.783673" + ], + [ + "pm7qrd", + "-90.000851990501", + "30.6282895657462", + "1033650.29734258", + "06/05/23", + "06/05/23", + "0.7229853" + ], + [ + "37njqz", + "-92.1264580937819", + "32.5993581765829", + "885478.541782889", + "06/05/23", + "06/05/23", + "0.7916367" + ], + [ + "apxg6z", + "-93.8430351630851", + "32.3794626730282", + "652334.228227398", + "06/05/23", + "06/05/23", + "0.76213366" + ], + [ + "mp6jrd", + "-92.3591697762587", + "30.0688786791055", + "706242.136982771", + "06/05/23", + "06/05/23", + "0.6586948" + ], + [ + "jw63be", + "-91.3264603281932", + "32.3340294169935", + "944594.182585297", + "06/05/23", + "06/05/23", + "0.72348785" + ], + [ + "vk73zj", + "-92.1296397168579", + "30.4028937230215", + "694178.65001215", + "06/05/23", + "06/05/23", + "0.7020825" + ], + [ + "9nx7pg", + "-91.667407094816", + "31.5468708843874", + "547304.336076831", + "06/05/23", + "06/05/23", + "0.71389997" + ], + [ + "b3qgvz", + "-92.5126202299166", + "32.7153453281864", + "759234.68833665", + "06/05/23", + "06/05/23", + "0.79951847" + ], + [ + "wn7aed", + "-91.128214556846", + "30.5639433536651", + "1829549.44610798", + "06/05/23", + "06/05/23", + "0.7427068" + ], + [ + "kn5adv", + "-92.31704775923", + "32.02969932829", + "1006313.94244713", + "06/05/23", + "06/05/23", + "0.7778632" + ], + [ + "n3rjag", + "-91.8715037132097", + "29.5595125451974", + "68836.5845847266", + "06/05/23", + "06/05/23", + "0.59526974" + ], + [ + "ejrgwg", + "-90.4222375240253", + "29.3178768647383", + "284056.118998615", + "06/05/23", + "06/05/23", + "0.34323153" + ], + [ + "6nx7gp", + "-89.2775143661612", + "29.2133991257115", + "192495.26503524", + "06/05/23", + "06/05/23", + "0.4897502" + ], + [ + "7zregz", + "-89.7127602130184", + "29.4156216954372", + "6687.90513470018", + "06/05/23", + "06/05/23", + "0.3075464" + ], + [ + "ldgjpn", + "-117.864897857436", + "34.6226432422036", + "906098.121727875", + "06/05/23", + "06/05/23", + "0.19180672" + ], + [ + "1kwzg7", + "-118.007822281555", + "34.0321934940532", + "1792030.67319083", + "06/05/23", + "06/05/23", + "0.53633803" + ], + [ + "z5rvde", + "-121.412944178277", + "40.392468909389", + "695959.45348205", + "06/05/23", + "06/05/23", + "0.4418359" + ], + [ + "xlxe64", + "-117.282932576633", + "33.6395190564255", + "875002.791883457", + "06/05/23", + "06/05/23", + "0.42315042" + ], + [ + "qj5ev4", + "-120.816543664374", + "39.1415008055851", + "1194435.0073497", + "06/05/23", + "06/05/23", + "0.7466228" + ], + [ + "4nxrgx", + "-119.993439008601", + "36.5567968620244", + "750129.950252185", + "06/05/23", + "06/05/23", + "0.5069796" + ], + [ + "5zxegj", + "-118.259329224933", + "36.2735259751085", + "787431.175546413", + "06/05/23", + "06/05/23", + "0.3155495" + ], + [ + "g56knj", + "-115.571156844635", + "34.360225998834", + "13700273.0285182", + "06/05/23", + "06/05/23", + "0.16311269" + ], + [ + "rx7199", + "-122.258315115751", + "38.4165578598544", + "639387.962228591", + "06/05/23", + "06/05/23", + "0.51860386" + ], + [ + "dm6kb7", + "-121.948685597614", + "40.2596883336779", + "889898.130231775", + "06/05/23", + "06/05/23", + "0.48896077" + ], + [ + "pm7qjd", + "-121.492740216619", + "36.9477329455513", + "780447.447711754", + "06/05/23", + "06/05/23", + "0.50890684" + ], + [ + "37njgz", + "-121.208374359429", + "38.97979288131", + "1234127.10569088", + "06/05/23", + "06/05/23", + "0.56418204" + ], + [ + "apxgjz", + "-122.096069714842", + "38.750473011208", + "813883.169939244", + "06/05/23", + "06/05/23", + "0.443848" + ], + [ + "mp6j3d", + "-120.018899528135", + "38.6532133618668", + "928237.941415272", + "06/05/23", + "06/05/23", + "0.37215862" + ], + [ + "jw637e", + "-120.757905621627", + "35.9630676750294", + "1230844.0912871", + "06/05/23", + "06/05/23", + "0.45991313" + ], + [ + "vk73nj", + "-123.943520797717", + "40.0983067577913", + "564800.567276732", + "06/05/23", + "06/05/23", + "0.8168793" + ], + [ + "9nx7rg", + "-121.500914669699", + "36.2621786285725", + "1127919.58441894", + "06/05/23", + "06/05/23", + "0.6510412" + ], + [ + "b3qgrz", + "-120.249437478092", + "41.4204644044945", + "1097011.75418324", + "06/05/23", + "06/05/23", + "0.4687238" + ], + [ + "wn7aqd", + "-119.079236465146", + "36.3575275326168", + "1300998.92969973", + "06/05/23", + "06/05/23", + "0.4707952" + ], + [ + "kn5ajv", + "-122.163793678851", + "40.8956978196886", + "1299378.74077318", + "06/05/23", + "06/05/23", + "0.7695326" + ], + [ + "n3rjbg", + "-120.421316450101", + "40.7612335247104", + "708698.230035321", + "06/05/23", + "06/05/23", + "0.41780633" + ], + [ + "ejrglg", + "-120.497556645708", + "36.5686916912444", + "520655.796041536", + "06/05/23", + "06/05/23", + "0.30167076" + ], + [ + "6nx7dp", + "-122.500224362349", + "40.3124173235703", + "856804.259517599", + "06/05/23", + "06/05/23", + "0.50296235" + ], + [ + "7zrepz", + "-123.127141921934", + "40.6586775659972", + "652374.018124118", + "06/05/23", + "06/05/23", + "0.7023929" + ], + [ + "ldgjvn", + "-119.151506354367", + "35.4553724475785", + "905777.968043772", + "06/05/23", + "06/05/23", + "0.5063639" + ], + [ + "1kwzn7", + "-123.441862088675", + "41.3684014422506", + "1704605.62790418", + "06/05/23", + "06/05/23", + "0.73289925" + ], + [ + "z5rvqe", + "-116.114330979778", + "33.0146955672644", + "1321377.93575405", + "06/05/23", + "06/05/23", + "0.28317028" + ], + [ + "xlxeq4", + "-117.344414348449", + "35.0759202688354", + "1244005.7541036", + "06/05/23", + "06/05/23", + "0.15682939" + ], + [ + "qj5en4", + "-119.342054189858", + "34.5129231521857", + "869052.399442951", + "06/05/23", + "06/05/23", + "0.5708614" + ], + [ + "4nxr7x", + "-121.116985819161", + "37.7087769503809", + "965131.589118773", + "06/05/23", + "06/05/23", + "0.5308945" + ], + [ + "5zxelj", + "-119.407839884634", + "37.8532834373787", + "810108.633281861", + "06/05/23", + "06/05/23", + "0.09610204" + ], + [ + "g56kpj", + "-120.699531803182", + "37.2675942585816", + "523417.398324944", + "06/05/23", + "06/05/23", + "0.49777508" + ], + [ + "rx71e9", + "-121.061492365717", + "40.9688308938635", + "871516.336608686", + "06/05/23", + "06/05/23", + "0.54202336" + ], + [ + "dm6k77", + "-120.22166430853", + "37.3998357154169", + "736640.289638394", + "06/05/23", + "06/05/23", + "0.34188378" + ], + [ + "pm7qkd", + "-123.031676043337", + "40.332624468381", + "595312.522832513", + "06/05/23", + "06/05/23", + "0.6355439" + ], + [ + "37nj6z", + "-118.683468889078", + "34.521377888008", + "1397308.19227598", + "06/05/23", + "06/05/23", + "0.50123274" + ], + [ + "apxgnz", + "-120.723979261827", + "41.6349488716674", + "1176576.87154068", + "06/05/23", + "06/05/23", + "0.40585777" + ], + [ + "mp6j9d", + "-120.441473052608", + "37.0040764767269", + "744119.778078133", + "06/05/23", + "06/05/23", + "0.45819956" + ], + [ + "jw63me", + "-123.348744141875", + "39.8370096687674", + "827143.643278287", + "06/05/23", + "06/05/23", + "0.7346296" + ], + [ + "vk73qj", + "-116.421008903902", + "33.6020236468921", + "524532.3694293", + "06/05/23", + "06/05/23", + "0.32282668" + ], + [ + "9nx7ag", + "-123.309241130274", + "38.8129406635293", + "780033.417705342", + "06/05/23", + "06/05/23", + "0.78231794" + ], + [ + "b3qgaz", + "-119.645610940119", + "35.7979241067897", + "513112.922106544", + "06/05/23", + "06/05/23", + "0.29744303" + ], + [ + "wn7a9d", + "-119.308436437765", + "37.2654089362643", + "726894.421819019", + "06/05/23", + "06/05/23", + "0.537607" + ], + [ + "kn5aev", + "-120.939076014789", + "39.7767082703524", + "1183581.032025", + "06/05/23", + "06/05/23", + "0.63701284" + ], + [ + "n3rjlg", + "-122.082177520982", + "37.2656638239326", + "967542.198966646", + "06/05/23", + "06/05/23", + "0.79336554" + ], + [ + "ejrgvg", + "-116.827298898375", + "32.8562371490532", + "539728.947027508", + "06/05/23", + "06/05/23", + "0.48059267" + ], + [ + "6nx7kp", + "-122.802082555698", + "39.7478001595874", + "483092.457174876", + "06/05/23", + "06/05/23", + "0.55164474" + ], + [ + "7zrenz", + "-122.957731846833", + "41.2897794115927", + "1011723.40737277", + "06/05/23", + "06/05/23", + "0.5958063" + ], + [ + "ldgj6n", + "-121.831922501131", + "37.9216981959014", + "818298.013964832", + "06/05/23", + "06/05/23", + "0.53821135" + ], + [ + "1kwzj7", + "-118.540651205941", + "36.2868277859191", + "905654.929332929", + "06/05/23", + "06/05/23", + "0.43980047" + ], + [ + "z5rvke", + "-120.095039651303", + "35.7528932194511", + "1417386.46515223", + "06/05/23", + "06/05/23", + "0.31465465" + ], + [ + "xlxeb4", + "-122.329894961138", + "39.7201738182487", + "959018.178293771", + "06/05/23", + "06/05/23", + "0.38988727" + ], + [ + "qj5ep4", + "-121.47693317594", + "37.3465347809853", + "521802.111969143", + "06/05/23", + "06/05/23", + "0.44980747" + ], + [ + "4nxrbx", + "-121.653666784593", + "38.519407607705", + "686671.896953195", + "06/05/23", + "06/05/23", + "0.48324537" + ], + [ + "5zxewj", + "-121.852092972915", + "39.2837344927854", + "1244355.07017624", + "06/05/23", + "06/05/23", + "0.5320413" + ], + [ + "g56kbj", + "-118.614224834334", + "37.1173914712923", + "619567.40642585", + "06/05/23", + "06/05/23", + "0.055195928" + ], + [ + "rx7139", + "-118.145390573448", + "35.4605126010688", + "600898.164009922", + "06/05/23", + "06/05/23", + "0.26693806" + ], + [ + "dm6kj7", + "-119.73398901552", + "34.8149828392253", + "509887.568260569", + "06/05/23", + "06/05/23", + "0.5390007" + ], + [ + "pm7qdd", + "-118.713392973625", + "35.6176098275519", + "1267446.87421299", + "06/05/23", + "06/05/23", + "0.36353064" + ], + [ + "37nj9z", + "-118.384715627368", + "37.3494231254121", + "489375.307170569", + "06/05/23", + "06/05/23", + "0.2375994" + ], + [ + "apxg3z", + "-122.7458380979", + "39.1211686436804", + "1091690.78856684", + "06/05/23", + "06/05/23", + "0.62399894" + ], + [ + "mp6j7d", + "-117.089611810269", + "34.6259588536771", + "729603.930334623", + "06/05/23", + "06/05/23", + "0.18757512" + ], + [ + "jw63ne", + "-121.484303394237", + "41.5061893018482", + "1587874.469687", + "06/05/23", + "06/05/23", + "0.49554962" + ], + [ + "vk73rj", + "-120.533914081477", + "39.3722696517484", + "929634.383339113", + "06/05/23", + "06/05/23", + "0.60183465" + ], + [ + "9nx76g", + "-122.977089040279", + "38.8967153553386", + "867608.196991251", + "06/05/23", + "06/05/23", + "0.6279193" + ], + [ + "b3qgkz", + "-121.163381688752", + "36.9039547957238", + "1384070.74520467", + "06/05/23", + "06/05/23", + "0.36856037" + ], + [ + "wn7a6d", + "-122.701745665353", + "38.1427114166834", + "515683.513908003", + "06/05/23", + "06/05/23", + "0.6390147" + ], + [ + "kn5apv", + "-117.021036659802", + "35.7369033433915", + "1372972.84326352", + "06/05/23", + "06/05/23", + "0.15537843" + ], + [ + "n3rjmg", + "-116.267758941491", + "35.997126267068", + "725282.646336458", + "06/05/23", + "06/05/23", + "0.15123674" + ], + [ + "ejrg6g", + "-119.608956469913", + "36.4175382050414", + "982055.706127996", + "06/05/23", + "06/05/23", + "0.45730484" + ], + [ + "6nx75p", + "-120.906002089648", + "38.1915921898455", + "1113938.21177462", + "06/05/23", + "06/05/23", + "0.4248313" + ], + [ + "7zre5z", + "-117.609803615492", + "36.1051895414076", + "1685623.6331045", + "06/05/23", + "06/05/23", + "0.20943646" + ], + [ + "ldgj3n", + "-123.916396697387", + "40.5347923317936", + "994916.635766428", + "06/05/23", + "06/05/23", + "0.81801564" + ], + [ + "1kwzl7", + "-117.141662809662", + "33.1345308047604", + "780511.086242915", + "06/05/23", + "06/05/23", + "0.4851756" + ], + [ + "z5rv1e", + "-118.900128006648", + "37.4396907195653", + "859717.335422146", + "06/05/23", + "06/05/23", + "0.2571751" + ], + [ + "xlxe74", + "-116.90981528757", + "36.5028096688019", + "1107168.99513198", + "06/05/23", + "06/05/23", + "0.14602429" + ], + [ + "qj5e94", + "-120.172346065456", + "38.1040086071702", + "964479.895134654", + "06/05/23", + "06/05/23", + "0.6895138" + ], + [ + "4nxr5x", + "-119.442641847407", + "38.26664380799", + "1021472.88095385", + "06/05/23", + "06/05/23", + "0.33887863" + ], + [ + "5zxe5j", + "-123.625244493308", + "39.442602714482", + "492526.55312464", + "06/05/23", + "06/05/23", + "0.8536016" + ], + [ + "g56klj", + "-120.264172879316", + "40.2171213037604", + "825705.576947385", + "06/05/23", + "06/05/23", + "0.3699549" + ], + [ + "rx71b9", + "-117.122299167771", + "34.1059032440333", + "643886.11832728", + "06/05/23", + "06/05/23", + "0.44859007" + ], + [ + "dm6ke7", + "-120.74771660459", + "40.1942847723365", + "1246641.50265168", + "06/05/23", + "06/05/23", + "0.51916444" + ], + [ + "pm7qvd", + "-117.970761005004", + "37.1558593319867", + "2464889.08682545", + "06/05/23", + "06/05/23", + "0.21635443" + ], + [ + "37njzz", + "-118.022882509883", + "35.1261911541284", + "1128950.70574889", + "06/05/23", + "06/05/23", + "0.21425578" + ], + [ + "apxgwz", + "-123.936150071923", + "41.5234663684479", + "935735.142368655", + "06/05/23", + "06/05/23", + "0.81012636" + ], + [ + "dm6ken", + "-119.922391499023", + "37.4889908566555", + "1126693.62543892", + "06/05/23", + "06/05/23", + "0.54290265" + ], + [ + "pm7qvx", + "-116.621128322421", + "33.4914249581568", + "1378825.94339694", + "06/05/23", + "06/05/23", + "0.44139037" + ], + [ + "37njzm", + "-122.541398900219", + "41.6640229054638", + "1261607.69105457", + "06/05/23", + "06/05/23", + "0.52666223" + ], + [ + "apxgwk", + "-121.809118578351", + "41.4031027199499", + "723044.037647856", + "06/05/23", + "06/05/23", + "0.63431644" + ], + [ + "mp6jk5", + "-120.389390442472", + "35.0216361888359", + "1880290.23090598", + "06/05/23", + "06/05/23", + "0.5464788" + ], + [ + "jw639k", + "-119.455995019477", + "35.1478240987595", + "1013992.63340638", + "06/05/23", + "06/05/23", + "0.30333656" + ], + [ + "vk73d5", + "-119.745301910328", + "34.0140238419679", + "62924.6496487315", + "06/05/23", + "06/05/23", + "0.49855837" + ], + [ + "9nx7l3", + "-120.105683816985", + "33.9667096600824", + "53883.5659101719", + "06/05/23", + "06/05/23", + "0.42328426" + ], + [ + "b3qgxg", + "-118.433521768339", + "33.3822067132572", + "48642.1405503548", + "06/05/23", + "06/05/23", + "0.5279218" + ], + [ + "wn7ap1", + "-118.485577829467", + "32.9002959519186", + "37079.2258207748", + "06/05/23", + "06/05/23", + "0.41241667" + ], + [ + "kn5abn", + "-99.8829834962", + "42.1013980382741", + "2001539.4717997", + "06/05/23", + "06/05/23", + "0.5587775" + ], + [ + "n3rjnw", + "-96.2525271551363", + "40.1759974979792", + "584060.395504709", + "06/05/23", + "06/05/23", + "0.62360805" + ], + [ + "ejrg3n", + "-96.2819112812014", + "40.9337171826818", + "904689.217785506", + "06/05/23", + "06/05/23", + "0.44931307" + ], + [ + "6nx7e6", + "-102.219404729423", + "42.1576500299821", + "1006130.42815399", + "06/05/23", + "06/05/23", + "0.5000793" + ], + [ + "7zre6j", + "-98.8132205267216", + "42.0339456877199", + "1203046.07237533", + "06/05/23", + "06/05/23", + "0.55240005" + ], + [ + "ldgjr5", + "-99.1488092955798", + "41.4552653724903", + "726396.953221552", + "06/05/23", + "06/05/23", + "0.67818606" + ], + [ + "1kwz9w", + "-97.9636918601856", + "41.8137931822659", + "815143.478543941", + "06/05/23", + "06/05/23", + "0.41271538" + ], + [ + "z5rvmg", + "-103.045080044657", + "41.5167560011459", + "598325.990734031", + "06/05/23", + "06/05/23", + "0.5565754" + ], + [ + "xlxe3z", + "-100.141125696843", + "42.8341514876971", + "1121765.75110745", + "06/05/23", + "06/05/23", + "0.62638676" + ], + [ + "qj5e7v", + "-97.5462667317034", + "40.9768558194302", + "1513751.64866441", + "06/05/23", + "06/05/23", + "0.4350247" + ], + [ + "4nxrk7", + "-98.5672859908853", + "40.9390460784349", + "772846.312258671", + "06/05/23", + "06/05/23", + "0.48409426" + ], + [ + "5zxenw", + "-103.632892151858", + "42.4753975637222", + "1647975.6853557", + "06/05/23", + "06/05/23", + "0.5392257" + ], + [ + "g56kml", + "-99.5897660377031", + "41.0920118866815", + "1191278.89045437", + "06/05/23", + "06/05/23", + "0.68779904" + ], + [ + "rx71ll", + "-99.9007083490625", + "40.1220460099192", + "1473403.68124661", + "06/05/23", + "06/05/23", + "0.57613957" + ], + [ + "dm6kpn", + "-100.024571316289", + "41.302132815686", + "872690.992558122", + "06/05/23", + "06/05/23", + "0.53444356" + ], + [ + "pm7q6x", + "-103.373830128968", + "41.9239530101024", + "876242.794356441", + "06/05/23", + "06/05/23", + "0.50295043" + ], + [ + "37njwm", + "-102.899676701958", + "42.7677138614259", + "1243064.71355733", + "06/05/23", + "06/05/23", + "0.6264765" + ], + [ + "apxgzk", + "-97.6590104276326", + "40.4346666745805", + "942638.974114988", + "06/05/23", + "06/05/23", + "0.4285843" + ], + [ + "mp6jd5", + "-103.651135149036", + "41.344257816914", + "1391887.78354727", + "06/05/23", + "06/05/23", + "0.492789" + ], + [ + "jw63zk", + "-102.693806667405", + "42.1413856389797", + "1164631.42582169", + "06/05/23", + "06/05/23", + "0.53361255" + ], + [ + "vk73w5", + "-95.8122760659747", + "40.33057007826", + "709082.465063426", + "06/05/23", + "06/05/23", + "0.5714267" + ], + [ + "9nx7b3", + "-101.70683351619", + "41.4920444519604", + "1424687.8163119", + "06/05/23", + "06/05/23", + "0.57773626" + ], + [ + "b3qgwg", + "-98.6419046174854", + "42.7807412385373", + "749855.089995828", + "06/05/23", + "06/05/23", + "0.63447523" + ], + [ + "wn7ak1", + "-98.1980615116046", + "40.1916871451026", + "494768.198244152", + "06/05/23", + "06/05/23", + "0.4306314" + ], + [ + "kn5axn", + "-101.753199914519", + "42.3131774371574", + "484487.66554866", + "06/05/23", + "06/05/23", + "0.4973167" + ], + [ + "n3rjpw", + "-97.8828368069872", + "42.6394877541918", + "528244.02666325", + "06/05/23", + "06/05/23", + "0.64964473" + ], + [ + "ejrgen", + "-102.245048526722", + "41.5452974479793", + "463636.968930118", + "06/05/23", + "06/05/23", + "0.5580128" + ], + [ + "6nx7j6", + "-101.763017273353", + "42.8608253075932", + "497950.757391986", + "06/05/23", + "06/05/23", + "0.5390317" + ], + [ + "7zrevj", + "-98.6756143519678", + "41.3602793313157", + "1253147.05587695", + "06/05/23", + "06/05/23", + "0.5730906" + ], + [ + "ldgjq5", + "-99.0388465823089", + "40.4877784232246", + "1338090.32496626", + "06/05/23", + "06/05/23", + "0.41574138" + ], + [ + "1kwzdw", + "-96.6272821891272", + "40.7109916489342", + "597744.514214713", + "06/05/23", + "06/05/23", + "0.5296327" + ], + [ + "z5rv6g", + "-102.653712624522", + "41.1960369443224", + "757890.941140898", + "06/05/23", + "06/05/23", + "0.4761904" + ], + [ + "xlxenz", + "-96.8959157446407", + "41.6716201584693", + "808464.722238833", + "06/05/23", + "06/05/23", + "0.3922768" + ], + [ + "qj5emv", + "-96.5586415543873", + "41.2852633673483", + "805432.023608216", + "06/05/23", + "06/05/23", + "0.46479836" + ], + [ + "4nxra7", + "-98.0763751488345", + "40.977512639697", + "546529.223828005", + "06/05/23", + "06/05/23", + "0.4876011" + ], + [ + "5zxemw", + "-97.59293399873", + "41.6273653444313", + "540552.515652943", + "06/05/23", + "06/05/23", + "0.37363043" + ], + [ + "g56k7l", + "-101.507166187235", + "40.2438967091485", + "949686.53025774", + "06/05/23", + "06/05/23", + "0.5872424" + ], + [ + "rx71jl", + "-97.159529075879", + "42.3394118521025", + "924011.229588167", + "06/05/23", + "06/05/23", + "0.39229268" + ], + [ + "dm6knn", + "-98.7990610520774", + "42.2927199641463", + "608809.584746648", + "06/05/23", + "06/05/23", + "0.6218491" + ], + [ + "pm7qax", + "-97.569290532008", + "42.4044207640997", + "568357.935865053", + "06/05/23", + "06/05/23", + "0.39896604" + ], + [ + "37nj3m", + "-98.0730403850845", + "42.305314628785", + "556846.44673033", + "06/05/23", + "06/05/23", + "0.44804856" + ], + [ + "apxgbk", + "-101.51683489834", + "42.6457454010909", + "577980.575196653", + "06/05/23", + "06/05/23", + "0.5372347" + ], + [ + "mp6jl5", + "-100.870599268324", + "40.6674702042576", + "1548476.52559025", + "06/05/23", + "06/05/23", + "0.6423023" + ], + [ + "jw63ek", + "-101.630496991321", + "40.8024663939405", + "1202915.88540005", + "06/05/23", + "06/05/23", + "0.4130533" + ], + [ + "vk73a5", + "-96.5072167008884", + "41.9994018319345", + "1437371.36777799", + "06/05/23", + "06/05/23", + "0.4034713" + ], + [ + "9nx7j3", + "-99.3468359219656", + "42.6549797229252", + "707770.979946095", + "06/05/23", + "06/05/23", + "0.5551065" + ], + [ + "b3qgmg", + "-97.0103430094309", + "40.3072335332082", + "1306952.86464296", + "06/05/23", + "06/05/23", + "0.4769358" + ], + [ + "wn7am1", + "-99.9600709192687", + "40.4487386981425", + "948832.913618088", + "06/05/23", + "06/05/23", + "0.56940943" + ], + [ + "kn5a6n", + "-100.842011285224", + "41.6570706784512", + "3012692.09342031", + "06/05/23", + "06/05/23", + "0.5646662" + ], + [ + "n3rj1w", + "-100.905312515676", + "42.5334604714058", + "1038036.29527452", + "06/05/23", + "06/05/23", + "0.5619794" + ], + [ + "ejrg9n", + "-99.8611625650309", + "48.5788375189754", + "1214237.59760288", + "06/05/23", + "06/05/23", + "0.4894222" + ], + [ + "6nx736", + "-102.071991471234", + "46.9676123160324", + "626242.240674366", + "06/05/23", + "06/05/23", + "0.6558133" + ], + [ + "7zreaj", + "-99.1776849391618", + "47.5879939692204", + "1167342.57907071", + "06/05/23", + "06/05/23", + "0.43660673" + ], + [ + "ldgj75", + "-98.8790557883349", + "46.8698559147098", + "1050577.45078271", + "06/05/23", + "06/05/23", + "0.38872394" + ], + [ + "1kwzxw", + "-102.521470877419", + "46.0586828226276", + "761928.698402816", + "06/05/23", + "06/05/23", + "0.6323236" + ], + [ + "z5rv9g", + "-98.4637780091401", + "46.1395920264621", + "595386.78887186", + "06/05/23", + "06/05/23", + "0.40510184" + ], + [ + "xlxejz", + "-103.688172819702", + "46.1054614441147", + "441819.991433358", + "06/05/23", + "06/05/23", + "0.57976925" + ], + [ + "qj5erv", + "-99.4798160320278", + "47.0756902608923", + "597780.318795863", + "06/05/23", + "06/05/23", + "0.5399845" + ], + [ + "4nxrd7", + "-100.461893701107", + "48.309754104013", + "803133.508668114", + "06/05/23", + "06/05/23", + "0.57290614" + ], + [ + "5zxepw", + "-102.565706581106", + "47.2836199841798", + "950591.829481844", + "06/05/23", + "06/05/23", + "0.6362378" + ], + [ + "g56kwl", + "-96.9002975464682", + "46.3195164290717", + "819410.739375494", + "06/05/23", + "06/05/23", + "0.3754812" + ], + [ + "rx714l", + "-102.352479736431", + "46.4130909455461", + "739542.674775777", + "06/05/23", + "06/05/23", + "0.5606547" + ], + [ + "dm6kvn", + "-103.833691906061", + "48.2364460120767", + "481343.85252442", + "06/05/23", + "06/05/23", + "0.53646463" + ], + [ + "pm7qxx", + "-102.519014976769", + "48.5685839672342", + "647230.430680063", + "06/05/23", + "06/05/23", + "0.61126035" + ], + [ + "37nj4m", + "-97.1672491073878", + "47.6075051770841", + "437959.454196339", + "06/05/23", + "06/05/23", + "0.40807906" + ], + [ + "apxgak", + "-100.092652569047", + "47.0822834562239", + "728789.597519873", + "06/05/23", + "06/05/23", + "0.62306726" + ], + [ + "mp6jx5", + "-99.4739725473385", + "48.7335667692731", + "571786.256139688", + "06/05/23", + "06/05/23", + "0.37526175" + ], + [ + "jw63lk", + "-103.408200994182", + "46.7633658283627", + "837519.823547454", + "06/05/23", + "06/05/23", + "0.5786049" + ], + [ + "vk73j5", + "-98.5832613101139", + "47.8140035226842", + "816440.73039138", + "06/05/23", + "06/05/23", + "0.47675002" + ], + [ + "9nx7k3", + "-101.145302026465", + "48.1576088998987", + "1202702.95568247", + "06/05/23", + "06/05/23", + "0.44102454" + ], + [ + "b3qg9g", + "-100.989436819581", + "48.7989730636046", + "1001904.41217564", + "06/05/23", + "06/05/23", + "0.4063982" + ], + [ + "wn7av1", + "-103.632935053009", + "47.3359513782211", + "1528358.52607625", + "06/05/23", + "06/05/23", + "0.62251997" + ], + [ + "kn5a1n", + "-100.387316026232", + "47.4005558768116", + "540620.329276606", + "06/05/23", + "06/05/23", + "0.5153422" + ], + [ + "n3rjqw", + "-100.778463128592", + "47.607792374937", + "925732.316583498", + "06/05/23", + "06/05/23", + "0.5434716" + ], + [ + "ejrgkn", + "-103.517302145066", + "47.9601858017988", + "585276.61260223", + "06/05/23", + "06/05/23", + "0.59510314" + ], + [ + "6nx796", + "-99.1948465846668", + "46.0717171939285", + "431701.33846077", + "06/05/23", + "06/05/23", + "0.54303247" + ], + [ + "7zrebj", + "-102.560394708066", + "48.200614585575", + "746602.503160125", + "06/05/23", + "06/05/23", + "0.57247365" + ], + [ + "ldgjz5", + "-101.648824625069", + "47.8460018721474", + "498731.05687695", + "06/05/23", + "06/05/23", + "0.5547321" + ], + [ + "1kwz3w", + "-99.5080350357893", + "46.5522019355676", + "1041558.55513044", + "06/05/23", + "06/05/23", + "0.55992573" + ], + [ + "z5rvwg", + "-97.5284342607737", + "46.208339247614", + "879370.950783799", + "06/05/23", + "06/05/23", + "0.3836472" + ], + [ + "xlxe9z", + "-97.488080709801", + "46.9619308921236", + "1426345.454553", + "06/05/23", + "06/05/23", + "0.39684072" + ], + [ + "qj5edv", + "-97.4543928650997", + "48.56025404329", + "930906.584631542", + "06/05/23", + "06/05/23", + "0.37510338" + ], + [ + "4nxrj7", + "-101.738674438464", + "48.524528613824", + "865246.359814874", + "06/05/23", + "06/05/23", + "0.41042697" + ], + [ + "5zxevw", + "-101.994728002544", + "47.9243906158928", + "518616.073577557", + "06/05/23", + "06/05/23", + "0.46015298" + ], + [ + "g56kel", + "-98.2053910094729", + "47.0748495875349", + "704949.945853516", + "06/05/23", + "06/05/23", + "0.4255698" + ], + [ + "rx71pl", + "-97.8853542291696", + "47.9132715468939", + "1930736.48190568", + "06/05/23", + "06/05/23", + "0.3949806" + ], + [ + "dm6kwn", + "-102.655387181642", + "47.7311020588314", + "550938.627581545", + "06/05/23", + "06/05/23", + "0.6740249" + ], + [ + "pm7q5x", + "-102.54946315692", + "48.8208606347141", + "572145.50387176", + "06/05/23", + "06/05/23", + "0.4256028" + ], + [ + "37njmm", + "-101.446442525246", + "46.7201483050641", + "994861.347420271", + "06/05/23", + "06/05/23", + "0.61559445" + ], + [ + "apxgvk", + "-99.7455285606333", + "47.8933475174927", + "1235328.64670567", + "06/05/23", + "06/05/23", + "0.42053196" + ], + [ + "dm6k1g", + "-103.686995282756", + "48.7778926440036", + "700372.020184455", + "06/05/23", + "06/05/23", + "0.47294497" + ], + [ + "pm7qz1", + "-103.228578114675", + "48.4494990661673", + "599590.727467138", + "06/05/23", + "06/05/23", + "0.45107436" + ], + [ + "37njkx", + "-101.644046010395", + "46.2813386741353", + "744924.052715493", + "06/05/23", + "06/05/23", + "0.6284793" + ], + [ + "apxgkd", + "-98.1433625522269", + "46.3685124644047", + "488520.899793701", + "06/05/23", + "06/05/23", + "0.40793473" + ], + [ + "mp6jnj", + "-100.902878168183", + "46.2973065428823", + "918015.100907075", + "06/05/23", + "06/05/23", + "0.66224027" + ], + [ + "jw63ja", + "-102.647200953322", + "46.9299377836996", + "436210.533250997", + "06/05/23", + "06/05/23", + "0.5973264" + ], + [ + "vk73vk", + "-100.518234856701", + "46.6003312442176", + "935349.452384072", + "06/05/23", + "06/05/23", + "0.6585957" + ], + [ + "9nx7gz", + "-101.337572842601", + "47.2093218124817", + "868226.300458424", + "06/05/23", + "06/05/23", + "0.6030128" + ], + [ + "b3qge6", + "-98.8161326704306", + "48.4582336491862", + "471380.91152445", + "06/05/23", + "06/05/23", + "0.33399898" + ], + [ + "wn7abr", + "-99.9889308789215", + "46.2485543634682", + "831994.91098825", + "06/05/23", + "06/05/23", + "0.47066975" + ], + [ + "kn5a9z", + "-102.929826413122", + "46.4350296994542", + "686417.216310596", + "06/05/23", + "06/05/23", + "0.5252348" + ], + [ + "n3rj64", + "-103.054988225501", + "47.8052473200822", + "391668.305861441", + "06/05/23", + "06/05/23", + "0.6378741" + ], + [ + "ejrgxr", + "-98.538425850359", + "46.7510481072759", + "669027.703005395", + "06/05/23", + "06/05/23", + "0.38105783" + ], + [ + "6nx71v", + "-97.1910525685496", + "47.0323243992523", + "630975.783427579", + "06/05/23", + "06/05/23", + "0.34780598" + ], + [ + "7zrexq", + "-103.747256076362", + "46.4248326716307", + "511026.419628854", + "06/05/23", + "06/05/23", + "0.5587224" + ], + [ + "ldgjwp", + "-97.8827309681129", + "48.6873564303804", + "562323.535502697", + "06/05/23", + "06/05/23", + "0.48903504" + ], + [ + "1kwzvn", + "-98.5198110095004", + "48.7095541449138", + "1047347.00458907", + "06/05/23", + "06/05/23", + "0.3329183" + ], + [ + "z5rv7k", + "-93.8201132096754", + "41.0712581298997", + "2106703.21994623", + "06/05/23", + "06/05/23", + "0.6990593" + ], + [ + "xlxek7", + "-93.0431015840286", + "41.9683713078799", + "888405.724439374", + "06/05/23", + "06/05/23", + "0.4962847" + ], + [ + "qj5eq7", + "-94.7279024437786", + "42.930510326287", + "1469135.85108426", + "06/05/23", + "06/05/23", + "0.43873253" + ], + [ + "4nxrea", + "-94.394929481633", + "42.0331222239786", + "1327346.42026206", + "06/05/23", + "06/05/23", + "0.5081536" + ], + [ + "5zxe7p", + "-93.4445045006364", + "41.8127736739685", + "600200.480749308", + "06/05/23", + "06/05/23", + "0.5462038" + ], + [ + "g56kge", + "-93.0591505338015", + "43.3161745908522", + "823598.104118721", + "06/05/23", + "06/05/23", + "0.43394506" + ], + [ + "rx7155", + "-91.4762704799215", + "42.0571833838547", + "646981.886158262", + "06/05/23", + "06/05/23", + "0.5177524" + ], + [ + "dm6lgg", + "-92.2147440021725", + "43.1462384507319", + "866051.583336893", + "06/05/23", + "06/05/23", + "0.44317436" + ], + [ + "pm79w1", + "-92.5670637622516", + "40.8693631360117", + "565109.018050035", + "06/05/23", + "06/05/23", + "0.6863857" + ], + [ + "37nvlx", + "-95.4384214218281", + "41.2566629780873", + "2879802.69463205", + "06/05/23", + "06/05/23", + "0.51885384" + ], + [ + "apxeqd", + "-95.6131384576623", + "42.4010903581619", + "1123919.33973056", + "06/05/23", + "06/05/23", + "0.4383595" + ], + [ + "mp6v5j", + "-93.7138668398037", + "42.4671817489853", + "980390.033996777", + "06/05/23", + "06/05/23", + "0.4893251" + ], + [ + "jw6apa", + "-94.5631445206935", + "41.3757826127191", + "488870.563790712", + "06/05/23", + "06/05/23", + "0.51788104" + ], + [ + "vk71pk", + "-95.0855876902994", + "42.0361447085588", + "1056446.04936557", + "06/05/23", + "06/05/23", + "0.43541253" + ], + [ + "9nxmvz", + "-90.4837769747901", + "41.9188872974676", + "502533.142818946", + "06/05/23", + "06/05/23", + "0.41454312" + ], + [ + "b3q1z6", + "-91.8543668370801", + "41.0311794688606", + "1270470.90636371", + "06/05/23", + "06/05/23", + "0.5701666" + ], + [ + "wn713r", + "-92.5812920265461", + "42.3576366069978", + "1417326.3691238", + "06/05/23", + "06/05/23", + "0.46242487" + ], + [ + "kn5m3z", + "-94.3267424891413", + "42.6032544902597", + "525522.056129118", + "06/05/23", + "06/05/23", + "0.46117285" + ], + [ + "n3rvz4", + "-91.5984078872598", + "41.6299910957855", + "819956.790867526", + "06/05/23", + "06/05/23", + "0.5757359" + ], + [ + "ejr15r", + "-94.1500495276879", + "41.3366840163355", + "826811.407129521", + "06/05/23", + "06/05/23", + "0.70456123" + ], + [ + "6nxp4v", + "-91.8363280495323", + "42.5258219530956", + "928408.044805225", + "06/05/23", + "06/05/23", + "0.4572927" + ], + [ + "7zr3wq", + "-93.2585433827053", + "42.8869165792896", + "937421.816480336", + "06/05/23", + "06/05/23", + "0.46417922" + ], + [ + "ldg4lp", + "-91.7345546109317", + "41.8202261744425", + "594934.676961115", + "06/05/23", + "06/05/23", + "0.4450563" + ], + [ + "1kwb5n", + "-93.0277129494359", + "40.9820938825059", + "824182.427292017", + "06/05/23", + "06/05/23", + "0.6940866" + ], + [ + "z5rxak", + "-95.9187875809684", + "42.958182477246", + "2103302.67036263", + "06/05/23", + "06/05/23", + "0.42838532" + ], + [ + "xlx1p7", + "-90.9032154522643", + "41.7193270657413", + "626707.95326523", + "06/05/23", + "06/05/23", + "0.41871867" + ], + [ + "qj5bw7", + "-92.6847892417942", + "41.506926570397", + "1086359.82803203", + "06/05/23", + "06/05/23", + "0.55887294" + ], + [ + "4nxvpa", + "-94.5679193308744", + "41.0189225337951", + "770062.094890879", + "06/05/23", + "06/05/23", + "0.5788378" + ], + [ + "5zxd3p", + "-91.612043854976", + "41.3004738845362", + "882328.244713477", + "06/05/23", + "06/05/23", + "0.47083315" + ], + [ + "g56d3e", + "-91.8917450884792", + "40.7119682302898", + "628459.341310687", + "06/05/23", + "06/05/23", + "0.6505245" + ], + [ + "rx7qn5", + "-92.6236160849484", + "42.9254894976587", + "472037.729485729", + "06/05/23", + "06/05/23", + "0.45016035" + ], + [ + "dm6lzg", + "-93.9569125311525", + "43.1521269497832", + "1086895.88460565", + "06/05/23", + "06/05/23", + "0.42625394" + ], + [ + "pm7911", + "-96.1110467511007", + "42.128970133413", + "555697.094371813", + "06/05/23", + "06/05/23", + "0.5371266" + ], + [ + "37nvdx", + "-91.2177261317415", + "42.7123241836312", + "1550550.28138401", + "06/05/23", + "06/05/23", + "0.56687707" + ], + [ + "apxe5d", + "-95.2503619297", + "43.3571654128284", + "628609.518122791", + "06/05/23", + "06/05/23", + "0.42081332" + ], + [ + "mp6vqj", + "-91.4207684329869", + "43.2870330221904", + "517036.465284952", + "06/05/23", + "06/05/23", + "0.6878683" + ], + [ + "jw6aka", + "-96.3818276089432", + "43.3657864151906", + "228309.904362979", + "06/05/23", + "06/05/23", + "0.45933777" + ], + [ + "vk71xk", + "-91.1489575221421", + "42.4464055115852", + "467690.857231247", + "06/05/23", + "06/05/23", + "0.4606869" + ], + [ + "9nxm4z", + "-86.8013848110148", + "31.6784777003844", + "1615275.34873929", + "06/05/23", + "06/05/23", + "0.8013766" + ], + [ + "b3q156", + "-88.2781799329969", + "32.1733703773289", + "655810.751842733", + "06/05/23", + "06/05/23", + "0.8442972" + ], + [ + "wn71dr", + "-85.5902822285978", + "32.2174856252222", + "916375.30169757", + "06/05/23", + "06/05/23", + "0.78191334" + ], + [ + "kn5mlz", + "-87.7475657732671", + "33.4499593615731", + "1932856.16371697", + "06/05/23", + "06/05/23", + "0.8409005" + ], + [ + "n3rv94", + "-87.6544317257286", + "30.4976873922361", + "496396.231283879", + "06/05/23", + "06/05/23", + "0.7203055" + ], + [ + "ejr1dr", + "-87.7510414234265", + "34.3598710103162", + "1511226.85636252", + "06/05/23", + "06/05/23", + "0.8405529" + ], + [ + "6nxpav", + "-88.0344870056686", + "31.5194645500715", + "1319485.10063536", + "06/05/23", + "06/05/23", + "0.8081922" + ], + [ + "7zr3mq", + "-86.6037872712144", + "34.2063156749142", + "1816994.31036581", + "06/05/23", + "06/05/23", + "0.78080827" + ], + [ + "ldg4ap", + "-87.205436772945", + "33.8411342199217", + "513889.615829802", + "06/05/23", + "06/05/23", + "0.825503" + ], + [ + "1kwban", + "-88.1342350661521", + "30.8626730962484", + "1007121.56981029", + "06/05/23", + "06/05/23", + "0.79010206" + ], + [ + "z5rxjk", + "-86.1939483566758", + "34.7585803339724", + "518920.380887847", + "06/05/23", + "06/05/23", + "0.8604036" + ], + [ + "xlx1a7", + "-86.2450051992506", + "32.1445479948777", + "1045521.91983506", + "06/05/23", + "06/05/23", + "0.7663481" + ], + [ + "qj5bl7", + "-85.8462177380085", + "34.5001845141394", + "1038969.8080025", + "06/05/23", + "06/05/23", + "0.7855746" + ], + [ + "4nxv9a", + "-85.6653140110568", + "31.6890712844573", + "735985.749000297", + "06/05/23", + "06/05/23", + "0.74979734" + ], + [ + "5zxd1p", + "-87.1987363612111", + "32.9698818741328", + "1343811.8464269", + "06/05/23", + "06/05/23", + "0.8239712" + ], + [ + "g56d9e", + "-85.2536546073865", + "32.4699988110427", + "845397.274213371", + "06/05/23", + "06/05/23", + "0.7506547" + ], + [ + "rx7qw5", + "-85.4790318140265", + "31.4772269899925", + "833877.751188531", + "06/05/23", + "06/05/23", + "0.73677975" + ], + [ + "dm6lag", + "-87.7742020177808", + "31.9687174239092", + "541569.909784818", + "06/05/23", + "06/05/23", + "0.8224872" + ], + [ + "pm79n1", + "-87.6769829492748", + "31.060696384732", + "664676.813805855", + "06/05/23", + "06/05/23", + "0.76538146" + ], + [ + "37nvxx", + "-87.8554993843197", + "32.7347656210134", + "1258342.38916443", + "06/05/23", + "06/05/23", + "0.8260555" + ], + [ + "apxe4d", + "-86.7710751340833", + "31.2301096565758", + "1494124.41229629", + "06/05/23", + "06/05/23", + "0.75615114" + ], + [ + "mp6vmj", + "-85.5938157936972", + "33.0422980458192", + "1214470.51715729", + "06/05/23", + "06/05/23", + "0.8063389" + ], + [ + "jw6ara", + "-85.6327452589315", + "31.1475022860497", + "845159.104163846", + "06/05/23", + "06/05/23", + "0.6419274" + ], + [ + "vk715k", + "-87.2457351550226", + "32.20115806303", + "2024750.20271377", + "06/05/23", + "06/05/23", + "0.8000621" + ], + [ + "9nxmez", + "-87.6297704702093", + "33.835070246511", + "524211.9310798", + "06/05/23", + "06/05/23", + "0.8401932" + ], + [ + "b3q146", + "-86.0622446430708", + "33.3985340953252", + "2365560.85281665", + "06/05/23", + "06/05/23", + "0.8160681" + ], + [ + "wn715r", + "-86.7322583778923", + "34.8154432341798", + "541311.939675399", + "06/05/23", + "06/05/23", + "0.6619747" + ], + [ + "kn5mvz", + "-86.6171209260609", + "33.7498851506357", + "632442.44281622", + "06/05/23", + "06/05/23", + "0.83187175" + ], + [ + "n3rv74", + "-86.4519228905809", + "32.7182277160146", + "1151460.02112268", + "06/05/23", + "06/05/23", + "0.78970313" + ], + [ + "ejr1zr", + "-85.8778188967714", + "34.047595864966", + "593007.175922863", + "06/05/23", + "06/05/23", + "0.79877275" + ], + [ + "6nxpwv", + "-87.4536046517688", + "34.7735804055975", + "1003215.07492626", + "06/05/23", + "06/05/23", + "0.73410255" + ], + [ + "7zr34q", + "-86.2355730752569", + "39.1427561663391", + "863861.810578765", + "06/05/23", + "06/05/23", + "0.7872708" + ], + [ + "ldg4mp", + "-87.1388314060337", + "41.0965162851378", + "785904.546647294", + "06/05/23", + "06/05/23", + "0.45017996" + ], + [ + "1kwbmn", + "-85.8031677491119", + "41.6597427986526", + "434994.69570734", + "06/05/23", + "06/05/23", + "0.5689418" + ], + [ + "z5rxbk", + "-85.0159743292094", + "40.6173523143709", + "1038451.27416559", + "06/05/23", + "06/05/23", + "0.33897316" + ], + [ + "xlx1m7", + "-84.9267739186877", + "41.6466042744299", + "133849.353768755", + "06/05/23", + "06/05/23", + "0.5487254" + ], + [ + "qj5bk7", + "-86.5327515639397", + "39.6273562985473", + "1153271.88475044", + "06/05/23", + "06/05/23", + "0.6168843" + ], + [ + "4nxv4a", + "-85.4533801146673", + "41.2297400276915", + "1478484.89533905", + "06/05/23", + "06/05/23", + "0.5033789" + ], + [ + "5zxd9p", + "-85.6413816427477", + "38.8531508332218", + "1121960.84179343", + "06/05/23", + "06/05/23", + "0.6707416" + ], + [ + "g56dve", + "-87.117375025121", + "41.5547039278649", + "508276.20396136", + "06/05/23", + "06/05/23", + "0.6480358" + ], + [ + "rx7qv5", + "-87.4039420082809", + "38.8352907217961", + "717785.129088188", + "06/05/23", + "06/05/23", + "0.48746094" + ], + [ + "dm6l5g", + "-86.7116537298341", + "38.5924806641196", + "593443.662866215", + "06/05/23", + "06/05/23", + "0.7355839" + ], + [ + "pm79l1", + "-85.709241554167", + "39.4428899148106", + "920141.867723814", + "06/05/23", + "06/05/23", + "0.3853243" + ], + [ + "37nv5x", + "-85.0824477259166", + "39.2637560070211", + "688153.23242457", + "06/05/23", + "06/05/23", + "0.69099313" + ], + [ + "apxedd", + "-85.8341386501227", + "40.3814229553561", + "539402.15115079", + "06/05/23", + "06/05/23", + "0.31278735" + ], + [ + "dm6l5k", + "-86.4175402248783", + "40.4568940274339", + "631988.053582292", + "06/05/23", + "06/05/23", + "0.38115567" + ], + [ + "pm79l9", + "-87.7630843654303", + "38.1233010556045", + "463565.169990886", + "06/05/23", + "06/05/23", + "0.4741563" + ], + [ + "37nv57", + "-85.8208448335385", + "38.4890020780345", + "689517.095975102", + "06/05/23", + "06/05/23", + "0.7190179" + ], + [ + "apxedl", + "-87.2794627897612", + "38.2452559103893", + "989706.816173144", + "06/05/23", + "06/05/23", + "0.5913771" + ], + [ + "mp6vzg", + "-85.36073982478", + "39.7801822283554", + "824486.323418954", + "06/05/23", + "06/05/23", + "0.38033107" + ], + [ + "jw6aq1", + "-86.0429747552955", + "41.3308780916492", + "674824.945461864", + "06/05/23", + "06/05/23", + "0.4332472" + ], + [ + "vk71lb", + "-86.5194144145079", + "40.8497187450009", + "471433.163439697", + "06/05/23", + "06/05/23", + "0.41418406" + ], + [ + "9nxm31", + "-87.2696946293187", + "40.6031653044962", + "768167.551779798", + "06/05/23", + "06/05/23", + "0.42233476" + ], + [ + "b3q1pq", + "-85.5517660845347", + "40.6967246419061", + "928881.91780416", + "06/05/23", + "06/05/23", + "0.36728403" + ], + [ + "wn71lg", + "-85.3180395963095", + "40.0868597831016", + "622985.035933321", + "06/05/23", + "06/05/23", + "0.41132456" + ], + [ + "kn5mkw", + "-86.7141087579597", + "40.0227616706506", + "1368206.1528062", + "06/05/23", + "06/05/23", + "0.40070724" + ], + [ + "n3rvga", + "-86.5129853607833", + "38.207956139514", + "1027214.39225132", + "06/05/23", + "06/05/23", + "0.77783316" + ], + [ + "ejr1ml", + "-87.263136589919", + "39.3779439939269", + "739120.800656181", + "06/05/23", + "06/05/23", + "0.5645413" + ], + [ + "6nxplk", + "-86.6384978271111", + "41.3033162083686", + "933507.097929262", + "06/05/23", + "06/05/23", + "0.49949884" + ], + [ + "7zr3d5", + "-87.2374100979224", + "40.0758865593381", + "503105.763081443", + "06/05/23", + "06/05/23", + "0.5880341" + ], + [ + "ldg49r", + "-86.7690599643048", + "39.0015465811913", + "548085.394669522", + "06/05/23", + "06/05/23", + "0.79082376" + ], + [ + "1kwb4d", + "-112.827589153008", + "33.346592715114", + "589098.593492586", + "06/05/23", + "06/05/23", + "0.16711274" + ], + [ + "z5rxp9", + "-114.376643688114", + "35.7804461383438", + "940956.791390694", + "06/05/23", + "06/05/23", + "0.16914411" + ], + [ + "xlx159", + "-110.935083417306", + "32.1779123216951", + "887935.836756008", + "06/05/23", + "06/05/23", + "0.23829733" + ], + [ + "qj5b1q", + "-114.08440080451", + "32.5744700315003", + "1295568.77908851", + "06/05/23", + "06/05/23", + "0.28779805" + ], + [ + "4nxvrp", + "-111.56966904838", + "34.1885151417363", + "1395199.77056265", + "06/05/23", + "06/05/23", + "0.40666792" + ], + [ + "5zxde1", + "-111.316603861555", + "32.8153384299126", + "631407.14639377", + "06/05/23", + "06/05/23", + "0.2304333" + ], + [ + "g56dkv", + "-109.160497332475", + "35.9720341639247", + "221467.149159226", + "06/05/23", + "06/05/23", + "0.43873912" + ], + [ + "rx7q1k", + "-112.693652540165", + "33.8827527106871", + "783408.726957001", + "06/05/23", + "06/05/23", + "0.20498016" + ], + [ + "dm6lkk", + "-109.305701682534", + "31.6235118646189", + "630110.906689968", + "06/05/23", + "06/05/23", + "0.24525212" + ], + [ + "pm79q9", + "-109.267295996966", + "35.6495342626812", + "316924.12353435", + "06/05/23", + "06/05/23", + "0.38980278" + ], + [ + "37nvj7", + "-112.037114659358", + "32.3581054460135", + "1288939.87085752", + "06/05/23", + "06/05/23", + "0.19392894" + ], + [ + "apxegl", + "-110.292582776366", + "34.0392905548029", + "1502558.3521855", + "06/05/23", + "06/05/23", + "0.5156592" + ], + [ + "mp6vjg", + "-109.356541540578", + "34.177624857388", + "510007.064468684", + "06/05/23", + "06/05/23", + "0.26121095" + ], + [ + "jw6a31", + "-112.17414317058", + "33.4851810996683", + "935346.352694185", + "06/05/23", + "06/05/23", + "0.19727841" + ], + [ + "vk713b", + "-109.118426503379", + "36.6447922399709", + "110121.385826817", + "06/05/23", + "06/05/23", + "0.25005317" + ], + [ + "9nxm71", + "-109.357902749179", + "33.8218699636478", + "489766.121132312", + "06/05/23", + "06/05/23", + "0.52056676" + ], + [ + "b3q1gq", + "-109.961077537684", + "33.6013145236771", + "1252424.51183825", + "06/05/23", + "06/05/23", + "0.427734" + ], + [ + "wn71ag", + "-113.829097027562", + "33.8456387501208", + "7619179.44376676", + "06/05/23", + "06/05/23", + "0.16728517" + ], + [ + "kn5maw", + "-109.118895047399", + "33.7050223564178", + "96879.6292376823", + "06/05/23", + "06/05/23", + "0.46512187" + ], + [ + "n3rvja", + "-111.855127304607", + "34.7979960118814", + "757014.361492487", + "06/05/23", + "06/05/23", + "0.39162835" + ], + [ + "ejr1gl", + "-110.244476205193", + "32.084705789456", + "737877.888270241", + "06/05/23", + "06/05/23", + "0.25870535" + ], + [ + "6nxp7k", + "-112.955357793561", + "32.7762303965014", + "778106.612515839", + "06/05/23", + "06/05/23", + "0.15157324" + ], + [ + "7zr3e5", + "-112.217776553695", + "32.9755215966297", + "1643173.19031723", + "06/05/23", + "06/05/23", + "0.18956695" + ], + [ + "ldg4jr", + "-111.447405423088", + "33.3784572794021", + "649211.44881311", + "06/05/23", + "06/05/23", + "0.24136172" + ], + [ + "1kwbzd", + "-109.145683246661", + "32.7065455331333", + "55386.8799224707", + "06/05/23", + "06/05/23", + "0.18851806" + ], + [ + "z5rxv9", + "-111.422052306557", + "32.1627319030418", + "1426556.1069474", + "06/05/23", + "06/05/23", + "0.20673995" + ], + [ + "xlx1e9", + "-111.48815990308", + "34.9068697398765", + "902293.66357423", + "06/05/23", + "06/05/23", + "0.48624524" + ], + [ + "qj5beq", + "-109.129968963122", + "32.6073852258965", + "39256.576097236", + "06/05/23", + "06/05/23", + "0.18305819" + ], + [ + "4nxvvp", + "-109.742173088087", + "31.5369040244434", + "633129.43530967", + "06/05/23", + "06/05/23", + "0.24062708" + ], + [ + "5zxdd1", + "-112.793124665718", + "35.4214360028279", + "790026.817902881", + "06/05/23", + "06/05/23", + "0.31746846" + ], + [ + "g56ddv", + "-110.638895591666", + "31.5684354506196", + "778798.412691564", + "06/05/23", + "06/05/23", + "0.3120124" + ], + [ + "rx7qqk", + "-111.999702576497", + "36.6565169896598", + "1117533.97856216", + "06/05/23", + "06/05/23", + "0.2483622" + ], + [ + "dm6llk", + "-109.833150551936", + "31.9494768157079", + "1334313.38446774", + "06/05/23", + "06/05/23", + "0.24995449" + ], + [ + "pm7999", + "-114.198701078891", + "35.3158420775421", + "715046.205148141", + "06/05/23", + "06/05/23", + "0.21723917" + ], + [ + "37nvv7", + "-109.15851278615", + "32.0375802260382", + "146485.808926248", + "06/05/23", + "06/05/23", + "0.2171027" + ], + [ + "apxeel", + "-112.578869351565", + "36.860225118491", + "540390.38289413", + "06/05/23", + "06/05/23", + "0.27475235" + ], + [ + "mp6vvg", + "-111.3213201356", + "31.5696004140714", + "563054.93579821", + "06/05/23", + "06/05/23", + "0.3023707" + ], + [ + "jw6aa1", + "-111.96710854792", + "33.9051020911184", + "742263.886202181", + "06/05/23", + "06/05/23", + "0.29109836" + ], + [ + "vk711b", + "-110.376144021645", + "35.715920770348", + "16088751.849702", + "06/05/23", + "06/05/23", + "0.209" + ], + [ + "9nxmm1", + "-111.888823688454", + "31.8182642474573", + "585397.310730913", + "06/05/23", + "06/05/23", + "0.19877234" + ], + [ + "b3q11q", + "-109.514532638714", + "32.6711727533573", + "1100200.51271084", + "06/05/23", + "06/05/23", + "0.20163062" + ], + [ + "wn711g", + "-110.54708101718", + "32.9929710530357", + "1399397.00370634", + "06/05/23", + "06/05/23", + "0.30131644" + ], + [ + "kn5mmw", + "-111.036606732545", + "34.0947432335833", + "513332.367498789", + "06/05/23", + "06/05/23", + "0.49372295" + ], + [ + "n3rvva", + "-112.408022868585", + "34.2557332820017", + "653104.343017017", + "06/05/23", + "06/05/23", + "0.37296224" + ], + [ + "ejr11l", + "-113.037477536723", + "32.2793214641527", + "2323773.49062942", + "06/05/23", + "06/05/23", + "0.17987198" + ], + [ + "6nxppk", + "-109.321631224455", + "33.3151965334578", + "629263.679207023", + "06/05/23", + "06/05/23", + "0.36741143" + ], + [ + "7zr335", + "-112.501133993318", + "34.9830777982681", + "852678.066205419", + "06/05/23", + "06/05/23", + "0.33610037" + ], + [ + "ldg44r", + "-109.213946365189", + "32.3086608848388", + "308594.940511552", + "06/05/23", + "06/05/23", + "0.18225384" + ], + [ + "1kwbbd", + "-110.202430737866", + "32.6707466214885", + "1514445.97919923", + "06/05/23", + "06/05/23", + "0.2836324" + ], + [ + "z5rxx9", + "-109.117662136088", + "36.4026838976311", + "70563.2779069209", + "06/05/23", + "06/05/23", + "0.5406179" + ], + [ + "xlx119", + "-110.930546000778", + "33.4209019714064", + "1338681.03729626", + "06/05/23", + "06/05/23", + "0.32932192" + ], + [ + "qj5bbq", + "-109.15232603375", + "32.9461457385581", + "175130.011547833", + "06/05/23", + "06/05/23", + "0.2315872" + ], + [ + "4nxvnp", + "-112.655303878971", + "34.6079372032652", + "812493.37020802", + "06/05/23", + "06/05/23", + "0.39717442" + ], + [ + "5zxdz1", + "-113.123847330758", + "35.9062181504296", + "8780320.74529299", + "06/05/23", + "06/05/23", + "0.27472824" + ], + [ + "g56d5v", + "-96.0733446781828", + "47.7401996202316", + "872014.437795926", + "06/05/23", + "06/05/23", + "0.56056476" + ], + [ + "rx7qxk", + "-96.4462068341279", + "45.6881374488206", + "708482.959735578", + "06/05/23", + "06/05/23", + "0.36086735" + ], + [ + "dm6lmk", + "-95.6216309806517", + "44.5202315718727", + "581126.886950495", + "06/05/23", + "06/05/23", + "0.41118497" + ], + [ + "pm79m9", + "-92.4815975413978", + "44.2886365962647", + "568868.562329798", + "06/05/23", + "06/05/23", + "0.5552696" + ], + [ + "37nv77", + "-93.2254890927104", + "44.8896898101266", + "1173131.15504728", + "06/05/23", + "06/05/23", + "0.6824711" + ], + [ + "apxepl", + "-93.172125279113", + "43.5895168951711", + "153940.610550097", + "06/05/23", + "06/05/23", + "0.45418444" + ], + [ + "mp6vpg", + "-92.9995492448935", + "48.3151079495434", + "846851.155288598", + "06/05/23", + "06/05/23", + "0.8304743" + ], + [ + "jw6aw1", + "-90.3104096796308", + "47.9464889419338", + "628486.289635015", + "06/05/23", + "06/05/23", + "0.7694697" + ], + [ + "vk71kb", + "-96.6628954300576", + "48.4969960887833", + "1925075.43602734", + "06/05/23", + "06/05/23", + "0.5501085" + ], + [ + "9nxmn1", + "-96.3010036168575", + "43.8578575207443", + "442446.919527865", + "06/05/23", + "06/05/23", + "0.43524578" + ], + [ + "b3q13q", + "-94.2287110299905", + "47.7342234656011", + "1132616.56348328", + "06/05/23", + "06/05/23", + "0.8139938" + ], + [ + "wn71ng", + "-94.5847775242062", + "43.5978571461653", + "79629.5070889562", + "06/05/23", + "06/05/23", + "0.43115917" + ], + [ + "kn5mnw", + "-95.1476937893511", + "46.8549306035871", + "1032658.96590935", + "06/05/23", + "06/05/23", + "0.7797766" + ], + [ + "n3rv3a", + "-95.3276088171067", + "47.5413320906885", + "857227.019262878", + "06/05/23", + "06/05/23", + "0.772442" + ], + [ + "ejr1jl", + "-91.8957681819863", + "47.9897297979219", + "633767.402095714", + "06/05/23", + "06/05/23", + "0.67705905" + ], + [ + "6nxpnk", + "-94.9709222845342", + "49.0951484315644", + "385237.746153759", + "06/05/23", + "06/05/23", + "0.8223716" + ], + [ + "7zr3z5", + "-96.1702755739782", + "43.5633205165912", + "15169.2714652891", + "06/05/23", + "06/05/23", + "0.45709804" + ], + [ + "ldg4dr", + "-93.8479714611373", + "46.504938338561", + "596301.007611763", + "06/05/23", + "06/05/23", + "0.83164096" + ], + [ + "1kwbkd", + "-93.8066689870674", + "48.232570044593", + "789737.5345997", + "06/05/23", + "06/05/23", + "0.81428295" + ], + [ + "z5rx59", + "-94.6700379046896", + "48.6008751320928", + "455187.783627386", + "06/05/23", + "06/05/23", + "0.7980838" + ], + [ + "xlx1l9", + "-93.9755887184066", + "46.1124274853876", + "512198.608478176", + "06/05/23", + "06/05/23", + "0.8089507" + ], + [ + "qj5bjq", + "-94.3295056854615", + "48.3783733019828", + "740959.928903149", + "06/05/23", + "06/05/23", + "0.74419713" + ], + [ + "4nxvzp", + "-94.2904206623387", + "43.6055555135282", + "146709.271263551", + "06/05/23", + "06/05/23", + "0.4037347" + ], + [ + "5zxdb1", + "-93.0331152340578", + "46.1226028662898", + "1525347.77831076", + "06/05/23", + "06/05/23", + "0.8312828" + ], + [ + "g56dqv", + "-92.1118524543437", + "43.8077965473105", + "487067.58804927", + "06/05/23", + "06/05/23", + "0.6133336" + ], + [ + "rx7q6k", + "-94.3757466722464", + "45.672280674099", + "1022678.72357909", + "06/05/23", + "06/05/23", + "0.6550969" + ], + [ + "dm6lqk", + "-96.4998595958952", + "47.4698176866274", + "1107582.20277168", + "06/05/23", + "06/05/23", + "0.44586375" + ], + [ + "pm79b9", + "-95.3764755414753", + "43.9240969369216", + "679679.945451487", + "06/05/23", + "06/05/23", + "0.4104964" + ], + [ + "37nve7", + "-95.5616057465595", + "45.1191830673216", + "828315.389314768", + "06/05/23", + "06/05/23", + "0.4194983" + ], + [ + "apxell", + "-96.0098932959722", + "45.8152738014871", + "1610671.48688954", + "06/05/23", + "06/05/23", + "0.43364435" + ], + [ + "dm6lq4", + "-93.480599794407", + "43.7935224892101", + "631974.073348309", + "06/05/23", + "06/05/23", + "0.4267429" + ], + [ + "pm79bp", + "-96.0092531108637", + "43.6458697762373", + "207837.528058164", + "06/05/23", + "06/05/23", + "0.43616733" + ], + [ + "37nvep", + "-93.1865112559388", + "47.0891865656111", + "678135.224484861", + "06/05/23", + "06/05/23", + "0.8169784" + ], + [ + "apxel7", + "-91.7315903955645", + "43.9081963665581", + "966646.262071182", + "06/05/23", + "06/05/23", + "0.6941924" + ], + [ + "mp6vb6", + "-93.402942005228", + "43.5685441858586", + "19866.1833169602", + "06/05/23", + "06/05/23", + "0.5256462" + ], + [ + "jw6a4v", + "-92.8824633826394", + "44.1115418104332", + "929485.661483487", + "06/05/23", + "06/05/23", + "0.4460715" + ], + [ + "vk716z", + "-94.8863199443665", + "43.6838281447288", + "292995.276710004", + "06/05/23", + "06/05/23", + "0.40243632" + ], + [ + "9nxmzr", + "-94.7266487550751", + "46.049484018503", + "634893.791445472", + "06/05/23", + "06/05/23", + "0.71747774" + ], + [ + "b3q1lr", + "-95.112896267007", + "45.4818731244591", + "529194.081613791", + "06/05/23", + "06/05/23", + "0.5722857" + ], + [ + "wn71x9", + "-92.9179764238486", + "46.7253385212075", + "787903.783365802", + "06/05/23", + "06/05/23", + "0.82109886" + ], + [ + "kn5mqp", + "-94.6078988924379", + "43.9387535018195", + "712579.041774564", + "06/05/23", + "06/05/23", + "0.3928609" + ], + [ + "n3rvwn", + "-93.9533726850984", + "44.1131999055937", + "823744.991464005", + "06/05/23", + "06/05/23", + "0.4257376" + ], + [ + "ejr1qe", + "-95.8127426030218", + "46.5154905150719", + "607761.256974875", + "06/05/23", + "06/05/23", + "0.6429791" + ], + [ + "6nxpb3", + "-93.9439721876521", + "43.697221786788", + "287014.077147554", + "06/05/23", + "06/05/23", + "0.39784104" + ], + [ + "7zr3lb", + "-92.5383350034208", + "43.6570711521255", + "548821.855683219", + "06/05/23", + "06/05/23", + "0.43168175" + ], + [ + "ldg4nw", + "-95.0156916139853", + "44.3524973530715", + "489160.100129803", + "06/05/23", + "06/05/23", + "0.38527617" + ], + [ + "1kwb75", + "-91.6905232842002", + "47.3044686456604", + "800874.151034959", + "06/05/23", + "06/05/23", + "0.8357421" + ], + [ + "z5rxlj", + "-94.6932781676748", + "44.7144663154708", + "1567693.21119571", + "06/05/23", + "06/05/23", + "0.39764094" + ], + [ + "xlx1vm", + "-95.7380903240947", + "48.8146898022969", + "808331.119278781", + "06/05/23", + "06/05/23", + "0.7058902" + ], + [ + "qj5bx1", + "-94.4508680767495", + "45.0988515813084", + "840373.056459477", + "06/05/23", + "06/05/23", + "0.51392233" + ], + [ + "4nxv1r", + "-92.4406508807136", + "46.6786300583716", + "673373.531486752", + "06/05/23", + "06/05/23", + "0.83602047" + ], + [ + "5zxdrd", + "-91.3459496347683", + "47.6307492912374", + "754069.213286451", + "06/05/23", + "06/05/23", + "0.7417756" + ], + [ + "g56dx5", + "-95.056215175879", + "46.513137399603", + "1136009.26895369", + "06/05/23", + "06/05/23", + "0.7187301" + ], + [ + "rx7qd6", + "-93.5496407921379", + "47.4693643822268", + "872205.35338941", + "06/05/23", + "06/05/23", + "0.8133357" + ], + [ + "dm6l44", + "-93.498678683622", + "44.4450766840201", + "740789.2561824", + "06/05/23", + "06/05/23", + "0.5270315" + ], + [ + "pm79gp", + "-94.626764410124", + "47.2884679321974", + "769376.620612884", + "06/05/23", + "06/05/23", + "0.7935087" + ], + [ + "37nvrp", + "-95.3717995723013", + "48.5428797444688", + "763501.253319453", + "06/05/23", + "06/05/23", + "0.810421" + ], + [ + "apxe17", + "-95.2715534319469", + "47.1854097776136", + "548366.644082586", + "06/05/23", + "06/05/23", + "0.81403154" + ], + [ + "mp6vg6", + "-93.6976299641274", + "45.1806742693551", + "444014.919798136", + "06/05/23", + "06/05/23", + "0.6820614" + ], + [ + "jw6axv", + "-96.1707514019136", + "44.4321851569445", + "626799.046192538", + "06/05/23", + "06/05/23", + "0.47772372" + ], + [ + "vk71mz", + "-92.3933664194227", + "48.1506323880166", + "421628.864541609", + "06/05/23", + "06/05/23", + "0.7416603" + ], + [ + "9nxmqr", + "-93.923033854234", + "46.9737178379286", + "1026172.20060034", + "06/05/23", + "06/05/23", + "0.84027827" + ], + [ + "b3q16r", + "-95.501303452256", + "48.1725475660797", + "683331.38013905", + "06/05/23", + "06/05/23", + "0.7280228" + ], + [ + "wn71j9", + "-95.1524964271808", + "43.6955912754638", + "146099.454722403", + "06/05/23", + "06/05/23", + "0.40913612" + ], + [ + "kn5m4p", + "-96.4190650481703", + "46.8261140802881", + "1026354.13341905", + "06/05/23", + "06/05/23", + "0.40951294" + ], + [ + "n3rvxn", + "-91.0648899672682", + "47.9327180184281", + "548090.961459524", + "06/05/23", + "06/05/23", + "0.6795058" + ], + [ + "ejr1ne", + "-95.802860315294", + "43.912061225355", + "692972.554350997", + "06/05/23", + "06/05/23", + "0.43237236" + ], + [ + "6nxpz3", + "-95.5390182822381", + "46.0569335268435", + "796374.033907974", + "06/05/23", + "06/05/23", + "0.5757752" + ], + [ + "7zr3kb", + "-96.0286768566832", + "47.9923537076983", + "441779.094504536", + "06/05/23", + "06/05/23", + "0.53733826" + ], + [ + "ldg4xw", + "-92.4784513971487", + "47.4847358091065", + "1648384.464867", + "06/05/23", + "06/05/23", + "0.8083107" + ], + [ + "1kwb65", + "-93.1637757677574", + "45.4954452149767", + "878536.438355292", + "06/05/23", + "06/05/23", + "0.7034786" + ], + [ + "z5rxej", + "-96.0686177542555", + "44.9161690627261", + "749086.936234505", + "06/05/23", + "06/05/23", + "0.42538473" + ], + [ + "xlx1rm", + "-93.3196125408817", + "47.8862247666864", + "503758.058025845", + "06/05/23", + "06/05/23", + "0.82772076" + ], + [ + "qj5b31", + "-93.9162390954628", + "45.3483757932824", + "923869.719255952", + "06/05/23", + "06/05/23", + "0.635975" + ], + [ + "4nxv6r", + "-80.3037734398665", + "33.7363933141766", + "539737.107435579", + "06/05/23", + "06/05/23", + "0.80631787" + ], + [ + "5zxd6d", + "-80.1048938449663", + "33.7846202588559", + "622921.334143183", + "06/05/23", + "06/05/23", + "0.75935715" + ], + [ + "g56d15", + "-79.2211693038047", + "34.1884763378917", + "967620.703357472", + "06/05/23", + "06/05/23", + "0.74799037" + ], + [ + "rx7qa6", + "-79.8985958933827", + "34.4066976164988", + "1389028.35125547", + "06/05/23", + "06/05/23", + "0.7612883" + ], + [ + "dm6l94", + "-80.6156681576142", + "34.2700542441849", + "1115079.78327893", + "06/05/23", + "06/05/23", + "0.7911103" + ], + [ + "pm79pp", + "-80.8640015721733", + "32.5052827530418", + "824669.141863344", + "06/05/23", + "06/05/23", + "0.8120242" + ], + [ + "37nv1p", + "-79.5734461303321", + "33.2412249678565", + "1096710.38841539", + "06/05/23", + "06/05/23", + "0.7979696" + ], + [ + "apxem7", + "-80.6184186570317", + "33.046022471175", + "1470890.02252472", + "06/05/23", + "06/05/23", + "0.79134727" + ], + [ + "mp6v16", + "-81.6693391187562", + "34.937665045994", + "1011895.28201408", + "06/05/23", + "06/05/23", + "0.8189893" + ], + [ + "jw6a1v", + "-80.9217854499494", + "34.7012413886293", + "891798.366650812", + "06/05/23", + "06/05/23", + "0.8142607" + ], + [ + "vk719z", + "-81.4926220478091", + "34.1128347111543", + "586868.588024897", + "06/05/23", + "06/05/23", + "0.70436066" + ], + [ + "9nxmdr", + "-81.8272269208233", + "33.6482695512534", + "1666389.36150335", + "06/05/23", + "06/05/23", + "0.79253" + ], + [ + "b3q1jr", + "-81.5810321482914", + "34.5311596999164", + "769922.925140825", + "06/05/23", + "06/05/23", + "0.84974366" + ], + [ + "wn71r9", + "-80.8197131875592", + "33.5598695564984", + "2105903.24691933", + "06/05/23", + "06/05/23", + "0.7799031" + ], + [ + "kn5mgp", + "-82.6728373421245", + "34.8745859905033", + "1393829.58111439", + "06/05/23", + "06/05/23", + "0.7858342" + ], + [ + "n3rv5n", + "-79.4431301400101", + "33.7105627262563", + "1132630.48045828", + "06/05/23", + "06/05/23", + "0.7801459" + ], + [ + "ejr1be", + "-82.4648781399452", + "34.2828132504899", + "862037.548191461", + "06/05/23", + "06/05/23", + "0.7451648" + ], + [ + "6nxp63", + "-82.1867720238936", + "34.514461807862", + "580057.936752123", + "06/05/23", + "06/05/23", + "0.78311366" + ], + [ + "7zr37b", + "-81.2118906868461", + "32.8621369632874", + "588156.161248809", + "06/05/23", + "06/05/23", + "0.7699783" + ], + [ + "ldg41w", + "-80.5928735813587", + "32.3927460637608", + "68887.0336191213", + "06/05/23", + "06/05/23", + "0.60945415" + ], + [ + "1kwbe5", + "-80.455531701459", + "32.3736797782008", + "5915.19475016898", + "06/05/23", + "06/05/23", + "0.68905914" + ], + [ + "z5rxnj", + "-80.5174547451552", + "32.3133621878576", + "8680.42058687045", + "06/05/23", + "06/05/23", + "0.5323783" + ], + [ + "xlx14m", + "-80.7436037034283", + "32.1926067282585", + "26711.8919242149", + "06/05/23", + "06/05/23", + "0.8189525" + ], + [ + "qj5ba1", + "-80.8293206804279", + "32.180442326806", + "5313.79560668835", + "06/05/23", + "06/05/23", + "0.86520845" + ], + [ + "4nxv3r", + "-80.8678983601215", + "32.116563239827", + "6219.85047904418", + "06/05/23", + "06/05/23", + "0.63918495" + ], + [ + "5zxdad", + "-80.7306483126823", + "32.4309173878836", + "51506.376570742", + "06/05/23", + "06/05/23", + "0.6045447" + ], + [ + "g56dr5", + "-89.5916764572913", + "44.9333592406112", + "1214017.45636189", + "06/05/23", + "06/05/23", + "0.769701" + ], + [ + "rx7qm6", + "-91.423825487719", + "45.6550274150235", + "1346263.89090491", + "06/05/23", + "06/05/23", + "0.82027847" + ], + [ + "dm6lx4", + "-88.7108402079083", + "43.7438744676705", + "468489.533449116", + "06/05/23", + "06/05/23", + "0.4814252" + ], + [ + "pm793p", + "-88.5901448189882", + "44.6018069725043", + "496553.809396327", + "06/05/23", + "06/05/23", + "0.6290673" + ], + [ + "37nvpp", + "-90.8310210700128", + "43.18199802655", + "844512.470897912", + "06/05/23", + "06/05/23", + "0.7268841" + ], + [ + "apxe97", + "-90.5915222973166", + "44.6123555816436", + "665764.615179462", + "06/05/23", + "06/05/23", + "0.81254" + ], + [ + "mp6ve6", + "-88.7982108858242", + "42.9465006836628", + "647359.225957841", + "06/05/23", + "06/05/23", + "0.5363782" + ], + [ + "jw6a5v", + "-88.513818626847", + "45.8163655910236", + "890028.949796826", + "06/05/23", + "06/05/23", + "0.8501052" + ], + [ + "vk71bz", + "-88.0066526693917", + "43.6738722081997", + "812717.686541516", + "06/05/23", + "06/05/23", + "0.585374" + ], + [ + "9nxm9r", + "-90.3668119755706", + "44.148038080795", + "947199.503565291", + "06/05/23", + "06/05/23", + "0.7695326" + ], + [ + "b3q1br", + "-89.063512565535", + "44.618296939453", + "462980.562152191", + "06/05/23", + "06/05/23", + "0.74513906" + ], + [ + "wn71w9", + "-89.2257770357443", + "42.7327742814342", + "459847.155229717", + "06/05/23", + "06/05/23", + "0.4970566" + ], + [ + "kn5mzp", + "-89.2978215240169", + "44.0569662695222", + "1101504.53326885", + "06/05/23", + "06/05/23", + "0.664044" + ], + [ + "n3rvdn", + "-91.9898549478494", + "46.4459643758248", + "674022.315557914", + "06/05/23", + "06/05/23", + "0.8317352" + ], + [ + "ejr14e", + "-91.8696260651172", + "44.4508364419405", + "887343.289915663", + "06/05/23", + "06/05/23", + "0.7063223" + ], + [ + "6nxpm3", + "-91.9965252037611", + "45.5697657270911", + "617385.098227043", + "06/05/23", + "06/05/23", + "0.78945756" + ], + [ + "7zr3jb", + "-88.2198210053206", + "43.0487785055206", + "691420.179048118", + "06/05/23", + "06/05/23", + "0.659203" + ], + [ + "ldg4ew", + "-90.0068445317158", + "43.0866132382834", + "1059387.84484581", + "06/05/23", + "06/05/23", + "0.65354437" + ], + [ + "1kwbr5", + "-89.8437817105713", + "43.8373206262373", + "581668.447055139", + "06/05/23", + "06/05/23", + "0.722243" + ], + [ + "z5rx3j", + "-88.6290740068337", + "45.3391582067979", + "756609.440778807", + "06/05/23", + "06/05/23", + "0.8435822" + ], + [ + "xlx1dm", + "-90.3733039415043", + "43.6195809004935", + "872298.97667581", + "06/05/23", + "06/05/23", + "0.75472534" + ], + [ + "qj5b41", + "-88.8317173693152", + "42.631166599533", + "190131.055647215", + "06/05/23", + "06/05/23", + "0.4047431" + ], + [ + "4nxvwr", + "-89.659844147564", + "42.8103333794244", + "799575.001418201", + "06/05/23", + "06/05/23", + "0.5854546" + ], + [ + "5zxdkd", + "-90.4403606821393", + "44.8709408733436", + "464120.836847466", + "06/05/23", + "06/05/23", + "0.61492103" + ], + [ + "g56d45", + "-90.2694653279733", + "45.4461044813281", + "1028987.79442087", + "06/05/23", + "06/05/23", + "0.8775978" + ], + [ + "rx7qr6", + "-89.6648757382904", + "45.8711221199248", + "1373816.71802067", + "06/05/23", + "06/05/23", + "0.7985306" + ], + [ + "dm6lr4", + "-92.4041141648203", + "45.7873858707802", + "703089.625849153", + "06/05/23", + "06/05/23", + "0.7767402" + ], + [ + "pm794p", + "-87.6267553444376", + "44.5186433047416", + "965732.865697985", + "06/05/23", + "06/05/23", + "0.5802477" + ], + [ + "37nvbp", + "-90.879294472074", + "45.9011473894038", + "744881.922236613", + "06/05/23", + "06/05/23", + "0.8641882" + ], + [ + "apxe77", + "-91.8399371772256", + "45.0328045972345", + "1986797.72624826", + "06/05/23", + "06/05/23", + "0.6553157" + ], + [ + "dm6lr6", + "-89.6746393556369", + "44.4883569338126", + "483346.884781566", + "06/05/23", + "06/05/23", + "0.71563447" + ], + [ + "pm794e", + "-90.551791232389", + "42.7053495960675", + "575723.431627703", + "06/05/23", + "06/05/23", + "0.52968174" + ], + [ + "37nvbq", + "-88.7308121039076", + "44.2595104120452", + "358091.927297929", + "06/05/23", + "06/05/23", + "0.62322384" + ], + [ + "apxe7j", + "-89.4431655293509", + "43.5632190032711", + "537002.991177807", + "06/05/23", + "06/05/23", + "0.67432445" + ], + [ + "mp6v49", + "-91.2760707357267", + "46.3813533658197", + "1307278.774894", + "06/05/23", + "06/05/23", + "0.8417864" + ], + [ + "jw6agn", + "-88.3558790882169", + "42.6433977995005", + "196046.639835463", + "06/05/23", + "06/05/23", + "0.58345383" + ], + [ + "vk714e", + "-89.0009541513281", + "43.389204511094", + "470835.081438839", + "06/05/23", + "06/05/23", + "0.4619686" + ], + [ + "9nxm1l", + "-90.5491740400682", + "46.3763340628785", + "703306.793918215", + "06/05/23", + "06/05/23", + "0.8595502" + ], + [ + "b3q17w", + "-90.4078765478335", + "45.8716401416192", + "487365.727609272", + "06/05/23", + "06/05/23", + "0.85054576" + ], + [ + "wn714m", + "-88.3454661573311", + "43.8341681503704", + "779887.85879858", + "06/05/23", + "06/05/23", + "0.5308642" + ], + [ + "kn5m71", + "-89.1673729357151", + "45.4742005789522", + "772177.032278864", + "06/05/23", + "06/05/23", + "0.8387585" + ], + [ + "n3rv46", + "-87.9554939459636", + "44.9429852945797", + "552024.151631969", + "06/05/23", + "06/05/23", + "0.74866897" + ], + [ + "ejr1r5", + "-88.0005945412813", + "42.6756171673626", + "328855.304353953", + "06/05/23", + "06/05/23", + "0.54150206" + ], + [ + "6nxpxa", + "-91.0050108203339", + "43.7794038021175", + "780051.003701031", + "06/05/23", + "06/05/23", + "0.73824286" + ], + [ + "7zr3r4", + "-88.2852992292156", + "45.1030638514016", + "944606.138532006", + "06/05/23", + "06/05/23", + "0.77602446" + ], + [ + "ldg4g9", + "-90.5633090773099", + "45.1424940557668", + "468166.216816149", + "06/05/23", + "06/05/23", + "0.7997662" + ], + [ + "1kwbwz", + "-91.1582410129609", + "44.3351371757685", + "734185.651542321", + "06/05/23", + "06/05/23", + "0.7051391" + ], + [ + "z5rxrx", + "-92.5306009714968", + "44.9042113910196", + "485381.546527361", + "06/05/23", + "06/05/23", + "0.658199" + ], + [ + "xlx1xl", + "-94.8191277574685", + "33.9444278494861", + "665381.582071926", + "06/05/23", + "06/05/23", + "0.7761877" + ], + [ + "qj5b56", + "-94.8167383764447", + "35.1338653667311", + "775675.886313185", + "06/05/23", + "06/05/23", + "0.74223906" + ], + [ + "4nxvx1", + "-98.3552181803492", + "36.5327101417013", + "836644.25604268", + "06/05/23", + "06/05/23", + "0.61021197" + ], + [ + "5zxdx6", + "-99.6839468969706", + "34.7141431566515", + "702575.330363725", + "06/05/23", + "06/05/23", + "0.47775668" + ], + [ + "g56d6r", + "-95.4168004554485", + "36.3765979411518", + "516738.642019836", + "06/05/23", + "06/05/23", + "0.73789847" + ], + [ + "rx7q7r", + "-99.426196187661", + "35.8954997921131", + "1006163.44934014", + "06/05/23", + "06/05/23", + "0.61686903" + ], + [ + "dm6l66", + "-97.4706130391615", + "36.1562794498589", + "1164011.74088009", + "06/05/23", + "06/05/23", + "0.62112063" + ], + [ + "pm797e", + "-97.0644039698472", + "34.1412155281905", + "564973.707097595", + "06/05/23", + "06/05/23", + "0.7158837" + ], + [ + "37nvnq", + "-99.5051669081079", + "34.894759538678", + "866614.018904044", + "06/05/23", + "06/05/23", + "0.5639449" + ], + [ + "apxexj", + "-99.6943461993008", + "36.7792990870643", + "1273092.86445474", + "06/05/23", + "06/05/23", + "0.5795099" + ], + [ + "mp6v69", + "-97.4496492151382", + "34.2481623252211", + "603366.402786113", + "06/05/23", + "06/05/23", + "0.728094" + ], + [ + "jw6a6n", + "-98.2635268726527", + "35.2668816678033", + "1202010.01684515", + "06/05/23", + "06/05/23", + "0.6498429" + ], + [ + "vk717e", + "-97.0291299600134", + "35.8347800524573", + "1405796.91443952", + "06/05/23", + "06/05/23", + "0.72598463" + ], + [ + "9nxmxl", + "-99.5273925712578", + "36.3802408540554", + "1215769.35047916", + "06/05/23", + "06/05/23", + "0.5962845" + ], + [ + "b3q1qw", + "-96.2063973534234", + "36.5370032681521", + "570678.528188233", + "06/05/23", + "06/05/23", + "0.7507156" + ], + [ + "wn717m", + "-96.6623563541291", + "36.7555660089374", + "1205152.84935525", + "06/05/23", + "06/05/23", + "0.71888864" + ], + [ + "kn5m51", + "-97.9247018387669", + "36.7032608318236", + "623860.793215027", + "06/05/23", + "06/05/23", + "0.56280065" + ], + [ + "n3rvr6", + "-100.786702429906", + "36.7700636389991", + "1132977.77224365", + "06/05/23", + "06/05/23", + "0.56806463" + ], + [ + "ejr1p5", + "-95.3277447697025", + "35.5754342762546", + "812776.137836539", + "06/05/23", + "06/05/23", + "0.7414517" + ], + [ + "6nxpva", + "-98.9990949675032", + "34.8970732889535", + "1256820.75772452", + "06/05/23", + "06/05/23", + "0.5667715" + ], + [ + "7zr394", + "-96.03707523173", + "34.1106550377631", + "2071974.80051767", + "06/05/23", + "06/05/23", + "0.7521368" + ], + [ + "ldg4b9", + "-102.760620500123", + "36.7695009209914", + "567669.298638194", + "06/05/23", + "06/05/23", + "0.39457187" + ], + [ + "1kwbpz", + "-95.8578411359086", + "35.5482854740454", + "939914.34670381", + "06/05/23", + "06/05/23", + "0.7575597" + ], + [ + "z5rxgx", + "-94.7279081501871", + "34.3288843252771", + "658803.723835606", + "06/05/23", + "06/05/23", + "0.80131257" + ], + [ + "xlx1gl", + "-97.5965760395716", + "36.5723288372296", + "980909.010646526", + "06/05/23", + "06/05/23", + "0.56766" + ], + [ + "qj5bg6", + "-98.7441318989018", + "36.0070141565573", + "1352240.2195261", + "06/05/23", + "06/05/23", + "0.5940006" + ], + [ + "4nxvm1", + "-102.193410194423", + "36.7871048268042", + "657445.427075076", + "06/05/23", + "06/05/23", + "0.45032358" + ], + [ + "5zxdj6", + "-94.9387884594473", + "36.7059215622833", + "923845.048254806", + "06/05/23", + "06/05/23", + "0.73990095" + ], + [ + "g56dar", + "-95.2701529435589", + "34.79502832171", + "735431.790136103", + "06/05/23", + "06/05/23", + "0.821804" + ], + [ + "rx7qgr", + "-95.7480325684514", + "36.2064830863115", + "537246.158686538", + "06/05/23", + "06/05/23", + "0.70686156" + ], + [ + "dm6ld6", + "-98.7396816188192", + "35.0525251124857", + "540556.311191581", + "06/05/23", + "06/05/23", + "0.56722814" + ], + [ + "pm79ee", + "-97.9316065638383", + "35.6759376657405", + "1089512.02287076", + "06/05/23", + "06/05/23", + "0.5719676" + ], + [ + "37nvaq", + "-94.8598680960602", + "35.5590264814009", + "716521.910570536", + "06/05/23", + "06/05/23", + "0.77936983" + ], + [ + "apxerj", + "-97.8691254801358", + "34.3151580166979", + "751796.318232154", + "06/05/23", + "06/05/23", + "0.69472843" + ], + [ + "mp6vw9", + "-94.8606442046433", + "36.0738302768286", + "1045982.25541285", + "06/05/23", + "06/05/23", + "0.8168417" + ], + [ + "jw6avn", + "-95.6526100799057", + "36.7903101540524", + "700648.904728086", + "06/05/23", + "06/05/23", + "0.76147115" + ], + [ + "vk71ge", + "-96.5335308927385", + "35.7702549330302", + "2290098.2066549", + "06/05/23", + "06/05/23", + "0.7418802" + ], + [ + "9nxmwl", + "-98.6278417690534", + "36.8320396177517", + "559122.188438605", + "06/05/23", + "06/05/23", + "0.5293873" + ], + [ + "b3q1nw", + "-95.1567652422824", + "34.5527237286421", + "999632.972077816", + "06/05/23", + "06/05/23", + "0.82139087" + ], + [ + "wn71gm", + "-98.4248225856499", + "34.3681803179388", + "1194026.98694613", + "06/05/23", + "06/05/23", + "0.6246746" + ], + [ + "kn5mr1", + "-99.5069617046791", + "35.5560519270007", + "1194876.55501123", + "06/05/23", + "06/05/23", + "0.61526746" + ], + [ + "n3rvk6", + "-97.6558568644788", + "34.6969045988349", + "782554.794022463", + "06/05/23", + "06/05/23", + "0.70199984" + ], + [ + "ejr1a5", + "-97.630575233045", + "35.1083405234339", + "561069.046723911", + "06/05/23", + "06/05/23", + "0.68954766" + ], + [ + "6nxpqa", + "-101.651410937062", + "36.6928295376804", + "893816.454544555", + "06/05/23", + "06/05/23", + "0.46282402" + ], + [ + "7zr3q4", + "-96.3790286709736", + "34.8593768765659", + "3570211.67892806", + "06/05/23", + "06/05/23", + "0.76296824" + ], + [ + "ldg4k9", + "-69.3726619789687", + "44.6239318267286", + "2673533.13521466", + "06/05/23", + "06/05/23", + "0.8473512" + ], + [ + "1kwbqz", + "-68.6917444178804", + "45.4807133221452", + "759087.674473411", + "06/05/23", + "06/05/23", + "0.84117216" + ], + [ + "z5rxzx", + "-69.9556478852656", + "46.1100935499781", + "907356.722340185", + "06/05/23", + "06/05/23", + "0.8722314" + ], + [ + "xlx1zl", + "-69.5652082446136", + "46.6637230739892", + "863751.613440313", + "06/05/23", + "06/05/23", + "0.83653903" + ], + [ + "qj5bz6", + "-70.1315256517908", + "44.3272153576406", + "1283430.89956059", + "06/05/23", + "06/05/23", + "0.85825485" + ], + [ + "4nxvq1", + "-69.3386006776727", + "46.0544291545583", + "735772.43972885", + "06/05/23", + "06/05/23", + "0.7532274" + ], + [ + "5zxdq6", + "-70.6021231794853", + "43.6166390538766", + "1103182.03482883", + "06/05/23", + "06/05/23", + "0.8269966" + ], + [ + "g56djr", + "-68.8569716963732", + "46.5620894976811", + "1251352.39869102", + "06/05/23", + "06/05/23", + "0.86252683" + ], + [ + "rx7qzr", + "-69.1569245782552", + "45.1784117404616", + "436151.291218758", + "06/05/23", + "06/05/23", + "0.87235" + ], + [ + "dm6l36", + "-68.1754740288215", + "46.9015900789217", + "1226310.06734828", + "06/05/23", + "06/05/23", + "0.78965604" + ], + [ + "pm79re", + "-70.8554995597095", + "44.8857054960052", + "691096.356343333", + "06/05/23", + "06/05/23", + "0.86065054" + ], + [ + "37nvqq", + "-68.5584238661517", + "44.5666106848244", + "470417.097746346", + "06/05/23", + "06/05/23", + "0.8072861" + ], + [ + "apxe6j", + "-67.8596576155549", + "44.9289070947892", + "2062954.57642687", + "06/05/23", + "06/05/23", + "0.837876" + ], + [ + "mp6vr9", + "-69.9021504531496", + "45.4564115067865", + "494477.554872959", + "06/05/23", + "06/05/23", + "0.85412836" + ], + [ + "jw6abn", + "-69.2656487365102", + "47.1145969815028", + "509445.546156703", + "06/05/23", + "06/05/23", + "0.8559201" + ], + [ + "vk71ze", + "-69.2641833755612", + "45.6223202878258", + "678541.916449907", + "06/05/23", + "06/05/23", + "0.8732024" + ], + [ + "9nxmpl", + "-68.2677096438027", + "46.1791981820302", + "1419343.4448739", + "06/05/23", + "06/05/23", + "0.8477324" + ], + [ + "b3q1dw", + "-67.742965678803", + "45.3733086259842", + "459930.056119466", + "06/05/23", + "06/05/23", + "0.828027" + ], + [ + "wn71zm", + "-70.3779908679163", + "45.3990798193413", + "883499.674455071", + "06/05/23", + "06/05/23", + "0.8659747" + ], + [ + "kn5mw1", + "-68.0293574252391", + "45.58591813245", + "459974.716957438", + "06/05/23", + "06/05/23", + "0.8390681" + ], + [ + "n3rve6", + "-70.4967964865301", + "44.5721481167746", + "1250947.79427222", + "06/05/23", + "06/05/23", + "0.87014705" + ], + [ + "ejr1w5", + "-68.3076131394586", + "44.3383583500212", + "70177.5879223384", + "06/05/23", + "06/05/23", + "0.6929064" + ], + [ + "6nxpga", + "-68.9014531357064", + "44.3230206722277", + "7840.4668978936", + "06/05/23", + "06/05/23", + "0.9051177" + ], + [ + "7zr3g4", + "-68.6714723404968", + "44.2118645790505", + "17423.2738306474", + "06/05/23", + "06/05/23", + "0.62689614" + ], + [ + "ldg4p9", + "-68.4364272297869", + "44.1576156838335", + "7364.86613814108", + "06/05/23", + "06/05/23", + "0.82279503" + ], + [ + "1kwbgz", + "-68.8656340200178", + "44.1532948456389", + "7393.38209900094", + "06/05/23", + "06/05/23", + "0.88084716" + ], + [ + "z5rxdx", + "-68.8445619362604", + "44.0773429395719", + "11868.86084275", + "06/05/23", + "06/05/23", + "0.7320446" + ], + [ + "xlx16l", + "-68.6275022392886", + "44.0488518499381", + "7205.42188586289", + "06/05/23", + "06/05/23", + "0.72290885" + ], + [ + "qj5bv6", + "-110.127726310445", + "40.7320763763266", + "927363.25953618", + "06/05/23", + "06/05/23", + "0.47884172" + ], + [ + "4nxvg1", + "-112.366936308244", + "37.700362178209", + "807805.943249257", + "06/05/23", + "06/05/23", + "0.36494526" + ], + [ + "5zxdg6", + "-111.569155359845", + "41.5677825832778", + "581330.960411257", + "06/05/23", + "06/05/23", + "0.62751245" + ], + [ + "g56dnr", + "-111.247020029334", + "40.2666826924111", + "1103664.95386152", + "06/05/23", + "06/05/23", + "0.6150659" + ], + [ + "rx7q9r", + "-113.353810321101", + "38.2990013410016", + "1497192.85224908", + "06/05/23", + "06/05/23", + "0.30266562" + ], + [ + "dm6lb6", + "-110.634070735774", + "39.8921873308166", + "1357536.76717726", + "06/05/23", + "06/05/23", + "0.38722458" + ], + [ + "pm79je", + "-113.905108242459", + "37.4934706271574", + "608944.073332383", + "06/05/23", + "06/05/23", + "0.35426682" + ], + [ + "37nvgq", + "-113.788156920406", + "41.7410060610151", + "635685.287769418", + "06/05/23", + "06/05/23", + "0.37679636" + ], + [ + "apxejj", + "-113.607427624846", + "39.6376801981683", + "1651795.64195878", + "06/05/23", + "06/05/23", + "0.17832397" + ], + [ + "dm6lb7", + "-109.986757704969", + "40.0450554281508", + "1138380.2154228", + "06/05/23", + "06/05/23", + "0.255326" + ], + [ + "pm79jd", + "-112.136537212874", + "37.254146999587", + "292188.724749462", + "06/05/23", + "06/05/23", + "0.29334483" + ], + [ + "37nvgz", + "-113.517470836611", + "41.1659161106275", + "1237428.46519808", + "06/05/23", + "06/05/23", + "0.2506652" + ], + [ + "apxejz", + "-113.497116025696", + "38.8350166029342", + "1859428.30581897", + "06/05/23", + "06/05/23", + "0.19983369" + ], + [ + "mp6v3d", + "-113.236191157126", + "37.8955838490016", + "1158072.60853754", + "06/05/23", + "06/05/23", + "0.29255283" + ], + [ + "jw6a7e", + "-112.29867816577", + "40.1898349905292", + "882861.770928004", + "06/05/23", + "06/05/23", + "0.3091972" + ], + [ + "vk71nj", + "-111.721503953515", + "39.342610149607", + "720880.327588375", + "06/05/23", + "06/05/23", + "0.40220353" + ], + [ + "9nxmrg", + "-112.502615273425", + "37.2130967299366", + "501939.394058033", + "06/05/23", + "06/05/23", + "0.32481307" + ], + [ + "b3q1rz", + "-111.42706392463", + "39.2371853198199", + "735580.322214798", + "06/05/23", + "06/05/23", + "0.49014118" + ], + [ + "wn71qd", + "-110.850715390907", + "40.7396052715822", + "741521.542103596", + "06/05/23", + "06/05/23", + "0.31102392" + ], + [ + "kn5mjv", + "-112.527474610232", + "39.6624742701669", + "512510.570124718", + "06/05/23", + "06/05/23", + "0.22190867" + ], + [ + "n3rvbg", + "-112.681359758005", + "38.8424278580785", + "975141.626427341", + "06/05/23", + "06/05/23", + "0.24587908" + ], + [ + "ejr1lg", + "-111.700545986341", + "38.3221550374576", + "967263.353394719", + "06/05/23", + "06/05/23", + "0.36653298" + ], + [ + "6nxpdp", + "-113.699376268295", + "37.2266281352918", + "317271.067395338", + "06/05/23", + "06/05/23", + "0.298761" + ], + [ + "7zr3pz", + "-110.371378009684", + "38.0680812757871", + "10591286.6016403", + "06/05/23", + "06/05/23", + "0.18794906" + ], + [ + "ldg4vn", + "-109.220921149083", + "39.0478251719106", + "623490.791456814", + "06/05/23", + "06/05/23", + "0.28726184" + ], + [ + "1kwbn7", + "-113.512099567404", + "40.3982481744547", + "1931351.99175479", + "06/05/23", + "06/05/23", + "0.18696034" + ], + [ + "z5rxqe", + "-112.126655026239", + "39.55010648173", + "1096182.93506268", + "06/05/23", + "06/05/23", + "0.34037086" + ], + [ + "xlx1q4", + "-112.220136646176", + "40.9253237521771", + "771059.815480814", + "06/05/23", + "06/05/23", + "0.3758287" + ], + [ + "qj5bn4", + "-112.635064850721", + "41.6520312609645", + "698956.410790493", + "06/05/23", + "06/05/23", + "0.32701385" + ], + [ + "4nxv7x", + "-109.311202839697", + "38.0621014404793", + "736213.987390386", + "06/05/23", + "06/05/23", + "0.38804486" + ], + [ + "5zxdlj", + "-113.401197882403", + "41.6002870678352", + "726659.288200404", + "06/05/23", + "06/05/23", + "0.28615758" + ], + [ + "g56dpj", + "-111.773685296884", + "40.1940765924055", + "1059928.39280682", + "06/05/23", + "06/05/23", + "0.57240766" + ], + [ + "rx7qe9", + "-112.920000682836", + "39.389570602356", + "699378.411428045", + "06/05/23", + "06/05/23", + "0.20121971" + ], + [ + "dm6l77", + "-113.171556786264", + "37.1625603953423", + "617860.80573632", + "06/05/23", + "06/05/23", + "0.2862848" + ], + [ + "pm79kd", + "-112.168415542599", + "41.8112599957949", + "755511.138414969", + "06/05/23", + "06/05/23", + "0.55263436" + ], + [ + "37nv6z", + "-111.657102261143", + "37.3554049745328", + "1448385.76786911", + "06/05/23", + "06/05/23", + "0.21265386" + ], + [ + "apxenz", + "-113.163372655758", + "37.5066989612501", + "718691.060902065", + "06/05/23", + "06/05/23", + "0.5082297" + ], + [ + "mp6v9d", + "-109.355181633013", + "40.7143515763916", + "782284.551671448", + "06/05/23", + "06/05/23", + "0.39556125" + ], + [ + "jw6ame", + "-110.239359564372", + "39.3669791717761", + "1149327.18144412", + "06/05/23", + "06/05/23", + "0.25125277" + ], + [ + "vk71qj", + "-111.750317312924", + "41.1992416618659", + "514612.507792869", + "06/05/23", + "06/05/23", + "0.6965528" + ], + [ + "9nxmag", + "-109.443481393701", + "39.8401177924172", + "1744717.00674689", + "06/05/23", + "06/05/23", + "0.2497061" + ], + [ + "b3q1az", + "-109.494572631727", + "38.274526971333", + "550741.828903173", + "06/05/23", + "06/05/23", + "0.24369329" + ], + [ + "wn719d", + "-112.195409372448", + "38.4559433295532", + "1558465.49765938", + "06/05/23", + "06/05/23", + "0.42450914" + ], + [ + "kn5mev", + "-110.681026047862", + "40.1604123435168", + "537863.186751098", + "06/05/23", + "06/05/23", + "0.36291683" + ], + [ + "n3rvlg", + "-111.445086382705", + "40.8476607755632", + "535371.099340465", + "06/05/23", + "06/05/23", + "0.6438727" + ], + [ + "ejr1vg", + "-112.891115592929", + "40.6124667461254", + "1584586.14152912", + "06/05/23", + "06/05/23", + "0.21035308" + ], + [ + "6nxpkp", + "-111.238105422266", + "41.4596952751608", + "832827.335870507", + "06/05/23", + "06/05/23", + "0.52936864" + ], + [ + "7zr3nz", + "-104.143318190465", + "41.537386525867", + "127867.276487995", + "06/05/23", + "06/05/23", + "0.5773812" + ], + [ + "ldg46n", + "-104.14539809471", + "43.8993379479845", + "87067.1892520743", + "06/05/23", + "06/05/23", + "0.5624049" + ], + [ + "1kwbj7", + "-107.787755284628", + "44.4434601117975", + "487525.994228255", + "06/05/23", + "06/05/23", + "0.22695205" + ], + [ + "z5rxke", + "-110.715757848281", + "44.7808858964368", + "695302.951815657", + "06/05/23", + "06/05/23", + "0.5382547" + ], + [ + "xlx1b4", + "-105.386020266463", + "44.5639175505862", + "673672.493413459", + "06/05/23", + "06/05/23", + "0.5332759" + ], + [ + "qj5bp4", + "-104.164539839651", + "41.8136163962493", + "90359.5738918687", + "06/05/23", + "06/05/23", + "0.58758736" + ], + [ + "4nxvbx", + "-105.488132467306", + "41.8942445555925", + "1018919.2425583", + "06/05/23", + "06/05/23", + "0.45890036" + ], + [ + "5zxdwj", + "-107.475317494172", + "43.8655008213601", + "737535.340908175", + "06/05/23", + "06/05/23", + "0.3697058" + ], + [ + "g56dbj", + "-104.895392619368", + "41.5177780836398", + "1150541.12121846", + "06/05/23", + "06/05/23", + "0.5373453" + ], + [ + "rx7q39", + "-110.615771027587", + "43.9868627536456", + "1617968.4099208", + "06/05/23", + "06/05/23", + "0.5343132" + ], + [ + "dm6lj7", + "-106.866090948476", + "44.770466764444", + "975866.194753306", + "06/05/23", + "06/05/23", + "0.64154524" + ], + [ + "pm79dd", + "-104.108628586441", + "44.2552008274756", + "60053.4511871555", + "06/05/23", + "06/05/23", + "0.7479062" + ], + [ + "37nv9z", + "-105.893799911256", + "44.2318827568936", + "1986892.74123216", + "06/05/23", + "06/05/23", + "0.49557313" + ], + [ + "apxe3z", + "-104.145990100953", + "43.1884896285002", + "159083.897514009", + "06/05/23", + "06/05/23", + "0.52302456" + ], + [ + "mp6v7d", + "-104.929276368219", + "44.1016876161069", + "978272.313213791", + "06/05/23", + "06/05/23", + "0.51164514" + ], + [ + "jw6ane", + "-109.828674274257", + "44.0446693967497", + "610795.284044015", + "06/05/23", + "06/05/23", + "0.097586885" + ], + [ + "vk71rj", + "-110.189067273079", + "43.0237899066492", + "455589.035320384", + "06/05/23", + "06/05/23", + "0.5045503" + ], + [ + "9nxm6g", + "-104.469955785675", + "41.5443616773026", + "1330387.91189052", + "06/05/23", + "06/05/23", + "0.5313762" + ], + [ + "b3q1kz", + "-109.760817822354", + "42.0453142074521", + "5109248.44689008", + "06/05/23", + "06/05/23", + "0.27500537" + ], + [ + "wn716d", + "-108.990524035504", + "41.3696821158889", + "467730.678757456", + "06/05/23", + "06/05/23", + "0.295204" + ], + [ + "kn5mpv", + "-107.88699644171", + "43.8088001995353", + "469055.827813882", + "06/05/23", + "06/05/23", + "0.33487138" + ], + [ + "n3rvmg", + "-106.415365824817", + "44.360360035856", + "887016.430779967", + "06/05/23", + "06/05/23", + "0.50342715" + ], + [ + "ejr16g", + "-104.17338719946", + "42.5716953555831", + "86933.2699971356", + "06/05/23", + "06/05/23", + "0.50936896" + ], + [ + "6nxp5p", + "-108.952090407761", + "43.3377748903554", + "1526092.71602741", + "06/05/23", + "06/05/23", + "0.2948426" + ], + [ + "7zr35z", + "-106.946283718613", + "41.6784610461879", + "2823155.79867765", + "06/05/23", + "06/05/23", + "0.35386688" + ], + [ + "ldg43n", + "-108.663352787653", + "43.9231185161899", + "784582.307503823", + "06/05/23", + "06/05/23", + "0.33700612" + ], + [ + "1kwbl7", + "-108.747330975273", + "41.2186671621761", + "350666.841578666", + "06/05/23", + "06/05/23", + "0.2433254" + ], + [ + "z5rx1e", + "-108.244739788504", + "44.1842882511979", + "734671.353970011", + "06/05/23", + "06/05/23", + "0.21815364" + ], + [ + "xlx174", + "-108.111760188468", + "41.840149287462", + "4038164.39669583", + "06/05/23", + "06/05/23", + "0.26349008" + ], + [ + "qj5b94", + "-109.356129843832", + "43.8914413277282", + "816751.395228887", + "06/05/23", + "06/05/23", + "0.3510834" + ], + [ + "4nxv5x", + "-107.432745507943", + "42.4548180450164", + "1111901.52574155", + "06/05/23", + "06/05/23", + "0.33705693" + ], + [ + "5zxd5j", + "-107.396447756856", + "44.5835905947936", + "951668.940088287", + "06/05/23", + "06/05/23", + "0.61257946" + ], + [ + "g56dlj", + "-107.102112920555", + "43.8623323937456", + "623104.342364504", + "06/05/23", + "06/05/23", + "0.62382865" + ], + [ + "rx7qb9", + "-105.617482676064", + "42.6072823429802", + "1049869.51956778", + "06/05/23", + "06/05/23", + "0.51769114" + ], + [ + "dm6le7", + "-104.913318797033", + "44.7498947773046", + "1121990.57351276", + "06/05/23", + "06/05/23", + "0.5972882" + ], + [ + "pm79vd", + "-104.747687071692", + "42.2749524245228", + "885598.227767936", + "06/05/23", + "06/05/23", + "0.49459285" + ], + [ + "37nvzz", + "-104.342303396892", + "44.3342496034543", + "476716.489964602", + "06/05/23", + "06/05/23", + "0.6671795" + ], + [ + "apxewz", + "-107.928111409957", + "43.1147133721476", + "2616679.50892246", + "06/05/23", + "06/05/23", + "0.35510743" + ], + [ + "mp6vad", + "-106.300168614672", + "41.3041070372415", + "417831.712799841", + "06/05/23", + "06/05/23", + "0.4302155" + ], + [ + "jw6ade", + "-104.339089631506", + "42.9841309989187", + "276235.72793022", + "06/05/23", + "06/05/23", + "0.5293402" + ], + [ + "vk71ej", + "-108.393561533284", + "44.7482840352538", + "989690.115803137", + "06/05/23", + "06/05/23", + "0.18750586" + ], + [ + "9nxm5g", + "-110.121002650684", + "41.2675820886835", + "468134.618956988", + "06/05/23", + "06/05/23", + "0.27158114" + ], + [ + "b3q1xz", + "-109.777726156523", + "44.7424773956174", + "801410.334126532", + "06/05/23", + "06/05/23", + "0.41154757" + ], + [ + "wn71pd", + "-104.160508505035", + "42.1771303410085", + "255740.6574673", + "06/05/23", + "06/05/23", + "0.5118201" + ], + [ + "kn5mbv", + "-106.818085144648", + "42.6426041835711", + "827762.252817279", + "06/05/23", + "06/05/23", + "0.36662504" + ], + [ + "n3rvng", + "-110.687071531749", + "41.5704807761158", + "703119.484086438", + "06/05/23", + "06/05/23", + "0.46065605" + ], + [ + "ejr13g", + "-109.456269665193", + "41.8676219276111", + "615880.79974691", + "06/05/23", + "06/05/23", + "0.23175278" + ], + [ + "6nxpep", + "-104.726112935479", + "42.6741403989723", + "709185.703714375", + "06/05/23", + "06/05/23", + "0.4860843" + ], + [ + "7zr36z", + "-104.173378109039", + "44.5796452532304", + "168836.866153585", + "06/05/23", + "06/05/23", + "0.6713045" + ], + [ + "ldg4rn", + "-105.580523488042", + "41.2213322995737", + "770045.963851668", + "06/05/23", + "06/05/23", + "0.353057" + ], + [ + "1kwb97", + "-106.03079911254", + "42.1610733583817", + "906045.680035695", + "06/05/23", + "06/05/23", + "0.33407503" + ], + [ + "z5rxme", + "-109.397276889497", + "41.2789309946188", + "407380.918566953", + "06/05/23", + "06/05/23", + "0.29115888" + ], + [ + "xlx134", + "-109.161978317318", + "44.5239519330265", + "1402271.61815269", + "06/05/23", + "06/05/23", + "0.35366878" + ], + [ + "qj5b74", + "-110.222141809378", + "43.4151347368496", + "799794.82636431", + "06/05/23", + "06/05/23", + "0.50804013" + ], + [ + "4nxvkx", + "-106.758472973546", + "41.2074809896568", + "680342.330202769", + "06/05/23", + "06/05/23", + "0.4809832" + ], + [ + "5zxdnj", + "-105.844550145796", + "41.5162551020593", + "547889.228580923", + "06/05/23", + "06/05/23", + "0.3704524" + ], + [ + "g56dmj", + "-106.654510108991", + "43.7403487623816", + "676877.952311075", + "06/05/23", + "06/05/23", + "0.44304636" + ], + [ + "rx7ql9", + "-105.548007302922", + "43.3044641252321", + "5540714.14566042", + "06/05/23", + "06/05/23", + "0.46747437" + ], + [ + "dm6lp7", + "-104.166098419997", + "42.7674673787058", + "123515.367237446", + "06/05/23", + "06/05/23", + "0.57374674" + ], + [ + "pm796d", + "-110.284989024742", + "44.4785808841231", + "636070.028869341", + "06/05/23", + "06/05/23", + "0.5364516" + ], + [ + "37nvwz", + "-110.958704856678", + "41.6765627376964", + "466965.213502668", + "06/05/23", + "06/05/23", + "0.50939953" + ], + [ + "apxezz", + "-109.36406380377", + "42.9591867192519", + "1216699.51048135", + "06/05/23", + "06/05/23", + "0.3196978" + ], + [ + "dm6lpn", + "-104.227701102671", + "44.8707865534686", + "193300.520186748", + "06/05/23", + "06/05/23", + "0.588323" + ], + [ + "pm796x", + "-110.696478796668", + "42.9987198998104", + "1241756.89746068", + "06/05/23", + "06/05/23", + "0.53629977" + ], + [ + "37nvwm", + "-110.841034859517", + "42.4742850123459", + "561876.041497295", + "06/05/23", + "06/05/23", + "0.61307704" + ], + [ + "apxezk", + "-72.8378580035492", + "43.8366546148854", + "658409.493889089", + "06/05/23", + "06/05/23", + "0.8695197" + ], + [ + "mp6vd5", + "-73.0660818424285", + "43.1656206359184", + "737667.425652772", + "06/05/23", + "06/05/23", + "0.8720416" + ], + [ + "jw6azk", + "-72.5235529177309", + "43.9622743418365", + "493180.935615294", + "06/05/23", + "06/05/23", + "0.795993" + ], + [ + "vk71w5", + "-72.3132866782014", + "44.7638236006151", + "446312.201188181", + "06/05/23", + "06/05/23", + "0.8433799" + ], + [ + "9nxmb3", + "-72.8497101917534", + "44.7743397654731", + "739113.209578905", + "06/05/23", + "06/05/23", + "0.7921106" + ], + [ + "b3q1wg", + "-72.2680556829612", + "44.4115570493001", + "1773248.95631327", + "06/05/23", + "06/05/23", + "0.8401825" + ], + [ + "wn71k1", + "-72.6596268802992", + "43.0878246584089", + "633705.408297963", + "06/05/23", + "06/05/23", + "0.866011" + ], + [ + "kn5mxn", + "-73.2142523003058", + "43.8537968981047", + "444679.613502089", + "06/05/23", + "06/05/23", + "0.7387441" + ], + [ + "n3rvpw", + "-73.3010068204681", + "44.8383795692575", + "114664.21067085", + "06/05/23", + "06/05/23", + "0.7021217" + ], + [ + "ejr1en", + "-88.7271010896123", + "32.0695311463588", + "553535.598376537", + "06/05/23", + "06/05/23", + "0.7868462" + ], + [ + "6nxpj6", + "-89.8647943738911", + "31.5311981355841", + "580222.030539233", + "06/05/23", + "06/05/23", + "0.74935734" + ], + [ + "7zr3vj", + "-90.1521035764439", + "33.0190842527945", + "998346.284479586", + "06/05/23", + "06/05/23", + "0.7888688" + ], + [ + "ldg4q5", + "-89.6355770414601", + "34.6911214620392", + "1704607.5256735", + "06/05/23", + "06/05/23", + "0.81152326" + ], + [ + "1kwbdw", + "-88.7771173421827", + "34.6583179881455", + "687765.012080895", + "06/05/23", + "06/05/23", + "0.7878262" + ], + [ + "z5rx6g", + "-90.7717533820641", + "32.3706351037133", + "1109091.43545204", + "06/05/23", + "06/05/23", + "0.83445024" + ], + [ + "xlx1nz", + "-89.566975759614", + "31.7264805832646", + "988154.946942083", + "06/05/23", + "06/05/23", + "0.7585353" + ], + [ + "qj5bmv", + "-89.2891600693222", + "30.5412644190352", + "705986.950268353", + "06/05/23", + "06/05/23", + "0.71150255" + ], + [ + "4nxva7", + "-88.7204941463647", + "31.5064532422491", + "774813.476675689", + "06/05/23", + "06/05/23", + "0.79336244" + ], + [ + "5zxdmw", + "-91.2484076205762", + "31.5149177790912", + "965413.344603655", + "06/05/23", + "06/05/23", + "0.7948275" + ], + [ + "g56d7l", + "-90.7978804169419", + "33.1571203862616", + "1114458.32708596", + "06/05/23", + "06/05/23", + "0.65732867" + ], + [ + "rx7qjl", + "-90.5654027280567", + "33.6276397282951", + "1480861.91466998", + "06/05/23", + "06/05/23", + "0.6036718" + ], + [ + "dm6lnn", + "-90.9875040902167", + "31.3089437736044", + "682789.187444634", + "06/05/23", + "06/05/23", + "0.7942306" + ], + [ + "pm79ax", + "-89.0972160108526", + "33.4359870136423", + "991246.85597545", + "06/05/23", + "06/05/23", + "0.7751509" + ], + [ + "37nv3m", + "-89.8398222752312", + "32.7721277745587", + "522725.534890242", + "06/05/23", + "06/05/23", + "0.8150568" + ], + [ + "apxebk", + "-89.4224867469936", + "32.1138413835889", + "651822.210065152", + "06/05/23", + "06/05/23", + "0.80901104" + ], + [ + "mp6vl5", + "-90.4560124491865", + "31.6136237269639", + "608280.423401555", + "06/05/23", + "06/05/23", + "0.76835537" + ], + [ + "jw6aek", + "-88.9453028089801", + "32.9391916152019", + "1135139.58453381", + "06/05/23", + "06/05/23", + "0.8248556" + ], + [ + "vk71a5", + "-89.8802215094753", + "34.1082024786513", + "968391.893549705", + "06/05/23", + "06/05/23", + "0.7895092" + ], + [ + "9nxmj3", + "-89.069810191012", + "32.5170571476936", + "1712319.55411379", + "06/05/23", + "06/05/23", + "0.8251368" + ], + [ + "b3q1mg", + "-89.3698256782257", + "34.0355385307966", + "810592.880753073", + "06/05/23", + "06/05/23", + "0.79072756" + ], + [ + "wn71m1", + "-88.7566751001116", + "30.8339118725943", + "1548582.04156438", + "06/05/23", + "06/05/23", + "0.7679442" + ], + [ + "kn5m6n", + "-89.1666313092954", + "31.7518373580043", + "611846.648246698", + "06/05/23", + "06/05/23", + "0.77806914" + ], + [ + "n3rv1w", + "-89.5413129459018", + "30.8998523020609", + "1021835.22837581", + "06/05/23", + "06/05/23", + "0.74193656" + ], + [ + "ejr19n", + "-90.3370310248015", + "32.3341073485572", + "632687.191799383", + "06/05/23", + "06/05/23", + "0.7815912" + ], + [ + "6nxp36", + "-88.4991108257251", + "33.8965079053252", + "1554593.79521286", + "06/05/23", + "06/05/23", + "0.8013737" + ], + [ + "7zr3aj", + "-88.3523429662425", + "34.7522086196043", + "594294.243074956", + "06/05/23", + "06/05/23", + "0.820055" + ], + [ + "ldg475", + "-90.3335045325852", + "31.1901256101953", + "1066929.0740474", + "06/05/23", + "06/05/23", + "0.7761002" + ], + [ + "1kwbxw", + "-90.1674008189709", + "32.06070162268", + "740755.412629546", + "06/05/23", + "06/05/23", + "0.78263104" + ], + [ + "z5rx9g", + "-88.9575292295124", + "34.1514414558745", + "683928.165330874", + "06/05/23", + "06/05/23", + "0.75846124" + ], + [ + "xlx1jz", + "-89.0135735566088", + "33.2293570041343", + "566817.263472974", + "06/05/23", + "06/05/23", + "0.8226186" + ], + [ + "qj5brv", + "-89.8787037740309", + "33.5785099136053", + "538458.516986444", + "06/05/23", + "06/05/23", + "0.80719846" + ], + [ + "4nxvd7", + "-90.4516563123695", + "34.3483610749253", + "1017137.86975761", + "06/05/23", + "06/05/23", + "0.5045948" + ], + [ + "5zxdpw", + "-91.1381298831978", + "32.7197412380199", + "316081.766992658", + "06/05/23", + "06/05/23", + "0.7113946" + ], + [ + "g56dwl", + "-75.619367160411", + "39.3557737872935", + "564964.597804864", + "06/05/23", + "06/05/23", + "0.6268137" + ], + [ + "rx7q4l", + "-75.4130846040679", + "38.6978738926898", + "709712.334700376", + "06/05/23", + "06/05/23", + "0.62315565" + ], + [ + "dm6lvn", + "-83.6747148103244", + "36.0688065910477", + "2499107.13282517", + "06/05/23", + "06/05/23", + "0.8167952" + ], + [ + "pm79xx", + "-85.6774289372362", + "35.7548096945339", + "507862.237213925", + "06/05/23", + "06/05/23", + "0.7789918" + ], + [ + "37nv4m", + "-85.1453340382917", + "36.2961363354995", + "666381.959538907", + "06/05/23", + "06/05/23", + "0.8609433" + ], + [ + "apxeak", + "-84.4696271324609", + "35.9015966492765", + "567484.645683462", + "06/05/23", + "06/05/23", + "0.8409916" + ], + [ + "mp6vx5", + "-84.9475145132607", + "36.0196918056748", + "1032649.3505448", + "06/05/23", + "06/05/23", + "0.868207" + ], + [ + "jw6alk", + "-88.6705521648174", + "35.7282192023539", + "659078.331056055", + "06/05/23", + "06/05/23", + "0.7776117" + ], + [ + "vk71j5", + "-84.6486720177217", + "35.5088398622158", + "692446.745731701", + "06/05/23", + "06/05/23", + "0.79511493" + ], + [ + "9nxmk3", + "-88.3875954242035", + "35.3019950619062", + "697076.986574987", + "06/05/23", + "06/05/23", + "0.8056793" + ], + [ + "b3q19g", + "-87.3893795421548", + "36.2630490695788", + "2285208.54074572", + "06/05/23", + "06/05/23", + "0.849606" + ], + [ + "wn71v1", + "-89.2415278647094", + "36.2211318832674", + "835142.93073448", + "06/05/23", + "06/05/23", + "0.5477338" + ], + [ + "kn5m1n", + "-86.4124608831871", + "35.4774191731222", + "1983609.09423861", + "06/05/23", + "06/05/23", + "0.7809132" + ], + [ + "n3rvqw", + "-89.2917963411309", + "35.2293190957511", + "1531312.59379809", + "06/05/23", + "06/05/23", + "0.8004149" + ], + [ + "ejr1kn", + "-82.5903668311155", + "36.2942863874277", + "1963172.26947903", + "06/05/23", + "06/05/23", + "0.78371114" + ], + [ + "6nxp96", + "-88.4804669863088", + "36.1157494804026", + "1697873.22798633", + "06/05/23", + "06/05/23", + "0.76080984" + ], + [ + "7zr3bj", + "-85.2334339122588", + "35.2583407091828", + "1271953.82330952", + "06/05/23", + "06/05/23", + "0.8262925" + ], + [ + "ldg4z5", + "-85.8428019340859", + "35.2488360755795", + "463501.62634819", + "06/05/23", + "06/05/23", + "0.8871415" + ], + [ + "1kwb3w", + "-85.6521717547798", + "36.3342536782951", + "1016350.991339", + "06/05/23", + "06/05/23", + "0.83916134" + ], + [ + "z5rxwg", + "-84.3235334426505", + "36.4056680465484", + "513138.953175702", + "06/05/23", + "06/05/23", + "0.89144427" + ], + [ + "xlx19z", + "-86.9318013025935", + "35.5630289604635", + "1136883.88757381", + "06/05/23", + "06/05/23", + "0.8060197" + ], + [ + "qj5bdv", + "-89.5302992898719", + "35.6239423663354", + "1111862.81124745", + "06/05/23", + "06/05/23", + "0.57035035" + ], + [ + "4nxvj7", + "-84.3453314868369", + "35.2667326971467", + "530917.730597703", + "06/05/23", + "06/05/23", + "0.8853482" + ], + [ + "5zxdvw", + "-86.3528174080651", + "36.2502573867712", + "1322067.33208864", + "06/05/23", + "06/05/23", + "0.7887686" + ], + [ + "g56del", + "-87.6842505295625", + "35.2951907208344", + "1242380.37794092", + "06/05/23", + "06/05/23", + "0.8536174" + ], + [ + "rx7qpl", + "-89.9732841968875", + "35.5647348764982", + "349413.839385847", + "06/05/23", + "06/05/23", + "0.6547954" + ], + [ + "dm6lwn", + "-87.7816390388712", + "35.6871119728296", + "545352.227296409", + "06/05/23", + "06/05/23", + "0.8902371" + ], + [ + "pm795x", + "-81.3089096217532", + "39.2298742345607", + "705804.637895782", + "06/05/23", + "06/05/23", + "0.86898714" + ], + [ + "37nvmm", + "-80.1795727943594", + "37.9899872870043", + "595467.127773028", + "06/05/23", + "06/05/23", + "0.8933492" + ], + [ + "apxevk", + "-80.0177491446197", + "39.0314034629727", + "897480.351250645", + "06/05/23", + "06/05/23", + "0.8259146" + ], + [ + "mp6vn5", + "-81.3208090934943", + "37.5977859432728", + "545489.562536122", + "06/05/23", + "06/05/23", + "0.87220186" + ], + [ + "jw6ajk", + "-80.9062297694805", + "37.9772669805932", + "820774.982479891", + "06/05/23", + "06/05/23", + "0.7812013" + ], + [ + "vk71v5", + "-80.3233670225894", + "38.3872213945149", + "510380.165916784", + "06/05/23", + "06/05/23", + "0.865722" + ], + [ + "9nxmg3", + "-77.9036346720229", + "39.3445972787954", + "210931.113454429", + "06/05/23", + "06/05/23", + "0.6804506" + ], + [ + "b3q1eg", + "-80.7156689110546", + "37.6366933563405", + "690087.185878507", + "06/05/23", + "06/05/23", + "0.8640278" + ], + [ + "wn71b1", + "-80.6140786199184", + "39.7015618075657", + "1004614.74305794", + "06/05/23", + "06/05/23", + "0.82930523" + ], + [ + "kn5m9n", + "-79.0391843414039", + "38.8968571478393", + "898443.658956931", + "06/05/23", + "06/05/23", + "0.86668295" + ], + [ + "n3rv6w", + "-81.6918166068507", + "37.4575262398772", + "492951.052491795", + "06/05/23", + "06/05/23", + "0.90776086" + ], + [ + "ejr1xn", + "-78.6217005962326", + "39.3889038911757", + "940794.21581904", + "06/05/23", + "06/05/23", + "0.83332294" + ], + [ + "6nxp16", + "-79.8683729945168", + "39.4732938884583", + "950146.233245761", + "06/05/23", + "06/05/23", + "0.83286303" + ], + [ + "7zr3xj", + "-79.6600321084666", + "38.7559170564618", + "789599.693288169", + "06/05/23", + "06/05/23", + "0.85376126" + ], + [ + "ldg4w5", + "-82.1227047068707", + "38.1555822460349", + "1564669.81163475", + "06/05/23", + "06/05/23", + "0.88344574" + ], + [ + "1kwbvw", + "-81.1856669520192", + "38.5932951339327", + "3879149.04028373", + "06/05/23", + "06/05/23", + "0.8770531" + ], + [ + "z5rx7g", + "-102.603968269998", + "39.8775756073738", + "2056226.47811947", + "06/05/23", + "06/05/23", + "0.5201902" + ], + [ + "xlx1kz", + "-105.58033524502", + "37.1665754731303", + "505444.700508038", + "06/05/23", + "06/05/23", + "0.25965264" + ], + [ + "qj5bqv", + "-107.440976535679", + "38.4498102418521", + "512961.480114894", + "06/05/23", + "06/05/23", + "0.5726605" + ], + [ + "4nxve7", + "-106.159140315511", + "40.7986402987503", + "843427.642696238", + "06/05/23", + "06/05/23", + "0.44865847" + ], + [ + "5zxd7w", + "-105.700972851734", + "37.5011296471818", + "524416.763648289", + "06/05/23", + "06/05/23", + "0.2509986" + ], + [ + "g56dgl", + "-106.294245396698", + "38.7327571781091", + "683523.054840261", + "06/05/23", + "06/05/23", + "0.37765574" + ], + [ + "rx7q5l", + "-108.706820794699", + "37.671566902357", + "662281.828925374", + "06/05/23", + "06/05/23", + "0.53178424" + ], + [ + "dm6l1n", + "-104.934224625371", + "37.2574082474541", + "1040851.25650528", + "06/05/23", + "06/05/23", + "0.5097875" + ], + [ + "pm79zx", + "-102.673590595028", + "37.2603526008796", + "685648.872772341", + "06/05/23", + "06/05/23", + "0.3210733" + ], + [ + "37nvkm", + "-103.173017895814", + "40.4672040372607", + "1610857.34176484", + "06/05/23", + "06/05/23", + "0.55833316" + ], + [ + "apxekk", + "-104.064571252998", + "37.3436967623521", + "1067033.19832403", + "06/05/23", + "06/05/23", + "0.28579015" + ], + [ + "dm6mgg", + "-102.266701211266", + "37.8550764936468", + "425497.214262324", + "06/05/23", + "06/05/23", + "0.36177427" + ], + [ + "pm7mw1", + "-103.369689185965", + "39.1227747743578", + "637922.378242564", + "06/05/23", + "06/05/23", + "0.47142518" + ], + [ + "37n7lx", + "-102.551040015666", + "40.5421261887298", + "857983.470113401", + "06/05/23", + "06/05/23", + "0.48024386" + ], + [ + "apxpqd", + "-104.519506905463", + "40.0309178877233", + "504595.132442934", + "06/05/23", + "06/05/23", + "0.48285475" + ], + [ + "mp6p5j", + "-103.561516956603", + "37.2216648974712", + "585122.260697624", + "06/05/23", + "06/05/23", + "0.3252891" + ], + [ + "jw6wpa", + "-102.267997901584", + "37.1573755290696", + "389024.080610408", + "06/05/23", + "06/05/23", + "0.3618413" + ], + [ + "vk7kpk", + "-108.34345582199", + "39.2577154010628", + "1890000.10436727", + "06/05/23", + "06/05/23", + "0.37523282" + ], + [ + "9nxnvz", + "-105.039383324343", + "39.8948517843827", + "631835.662705982", + "06/05/23", + "06/05/23", + "0.45980608" + ], + [ + "b3q3z6", + "-105.916780711649", + "39.9334001508829", + "1224566.39689806", + "06/05/23", + "06/05/23", + "0.20215738" + ], + [ + "wn7n3r", + "-102.365506608481", + "38.9067608896788", + "567736.163377197", + "06/05/23", + "06/05/23", + "0.40712747" + ], + [ + "kn5n3z", + "-102.156740282406", + "38.2318891774047", + "170129.737316846", + "06/05/23", + "06/05/23", + "0.3901646" + ], + [ + "n3r3z4", + "-104.073279464214", + "38.0164944888393", + "1903591.67519349", + "06/05/23", + "06/05/23", + "0.32479313" + ], + [ + "ejrj5r", + "-108.411049468652", + "39.5956112890262", + "607559.650614228", + "06/05/23", + "06/05/23", + "0.6175839" + ], + [ + "6nxn4v", + "-102.369881043573", + "39.4102034963772", + "872321.560130705", + "06/05/23", + "06/05/23", + "0.50026315" + ], + [ + "7zrzwq", + "-106.224364101995", + "39.7094732535436", + "509482.584287911", + "06/05/23", + "06/05/23", + "0.54153377" + ], + [ + "ldgdlp", + "-103.945024061346", + "39.2933494684499", + "604864.05907363", + "06/05/23", + "06/05/23", + "0.5102267" + ], + [ + "1kwk5n", + "-105.473740407411", + "40.0588086164315", + "624178.226763105", + "06/05/23", + "06/05/23", + "0.5177993" + ], + [ + "z5r5ak", + "-104.652099779387", + "39.4638517863484", + "1258379.20588922", + "06/05/23", + "06/05/23", + "0.52168304" + ], + [ + "xlxlp7", + "-105.344875362774", + "40.7587300708982", + "472848.488168261", + "06/05/23", + "06/05/23", + "0.52300024" + ], + [ + "qj5jw7", + "-107.390586557718", + "39.9317347933824", + "801091.192586066", + "06/05/23", + "06/05/23", + "0.4594099" + ], + [ + "4nxnpa", + "-107.960502960355", + "38.6172870234624", + "1133603.02397525", + "06/05/23", + "06/05/23", + "0.40906549" + ], + [ + "5zxz3p", + "-102.11334443332", + "38.536166396223", + "31989.3333873876", + "06/05/23", + "06/05/23", + "0.30681643" + ], + [ + "g5653e", + "-106.619036985091", + "40.5725951716931", + "1323423.98411576", + "06/05/23", + "06/05/23", + "0.5863806" + ], + [ + "rx7xn5", + "-108.213337528776", + "39.9343074138027", + "671124.105513032", + "06/05/23", + "06/05/23", + "0.5029949" + ], + [ + "dm6mzg", + "-107.042141070953", + "38.9378664507861", + "692343.886634615", + "06/05/23", + "06/05/23", + "0.321064" + ], + [ + "pm7m11", + "-106.358591519372", + "37.9917517954404", + "870601.548537988", + "06/05/23", + "06/05/23", + "0.34339803" + ], + [ + "37n7dx", + "-105.435274251941", + "38.0630712837532", + "493436.185588689", + "06/05/23", + "06/05/23", + "0.42345256" + ], + [ + "apxp5d", + "-106.505947620442", + "39.0916279855919", + "698615.571420815", + "06/05/23", + "06/05/23", + "0.15065072" + ], + [ + "mp6pqj", + "-104.747681813006", + "37.974743731612", + "1251657.05392568", + "06/05/23", + "06/05/23", + "0.3359165" + ], + [ + "jw6wka", + "-105.52668306799", + "38.4116818513113", + "637846.530728785", + "06/05/23", + "06/05/23", + "0.44876522" + ], + [ + "vk7kxk", + "-108.857124290241", + "39.9666288416083", + "603373.551050548", + "06/05/23", + "06/05/23", + "0.33395514" + ], + [ + "9nxn4z", + "-108.419252317382", + "40.325935908546", + "652157.482644829", + "06/05/23", + "06/05/23", + "0.37568387" + ], + [ + "b3q356", + "-104.405949641411", + "38.7042930644478", + "1759818.18980734", + "06/05/23", + "06/05/23", + "0.41146746" + ], + [ + "wn7ndr", + "-106.152595991037", + "37.3253942766587", + "681785.457251855", + "06/05/23", + "06/05/23", + "0.46595865" + ], + [ + "kn5nlz", + "-108.147276313299", + "37.6236179322794", + "572706.864036297", + "06/05/23", + "06/05/23", + "0.6156662" + ], + [ + "n3r394", + "-104.449023319925", + "40.3792361975989", + "762283.960819318", + "06/05/23", + "06/05/23", + "0.4988222" + ], + [ + "ejrjdr", + "-107.657075176814", + "40.1915233876656", + "544991.904161723", + "06/05/23", + "06/05/23", + "0.6842854" + ], + [ + "6nxnav", + "-107.32131852747", + "37.2734678531698", + "1208139.05263755", + "06/05/23", + "06/05/23", + "0.61109656" + ], + [ + "7zrzmq", + "-103.423246993666", + "39.7539067635452", + "1090330.21448313", + "06/05/23", + "06/05/23", + "0.5039774" + ], + [ + "ldgdap", + "-108.836595438206", + "40.6372840025264", + "596688.2158118", + "06/05/23", + "06/05/23", + "0.39753842" + ], + [ + "1kwkan", + "-102.92007185523", + "37.6701613232062", + "1631846.41739622", + "06/05/23", + "06/05/23", + "0.405619" + ], + [ + "z5r5jk", + "-105.505857023754", + "37.7796363386119", + "1157716.71353126", + "06/05/23", + "06/05/23", + "0.2645836" + ], + [ + "xlxla7", + "-102.138194572145", + "38.6632800844058", + "79593.2517875927", + "06/05/23", + "06/05/23", + "0.30915928" + ], + [ + "qj5jl7", + "-105.800354420593", + "39.0313681864994", + "1023219.90412987", + "06/05/23", + "06/05/23", + "0.32301664" + ], + [ + "4nxn9a", + "-107.617529735895", + "39.0796263565096", + "829113.527831329", + "06/05/23", + "06/05/23", + "0.66337645" + ], + [ + "5zxz1p", + "-104.016768793299", + "39.813025808559", + "761414.529435343", + "06/05/23", + "06/05/23", + "0.4585329" + ], + [ + "g5659e", + "-102.170447244057", + "37.5437518942518", + "207468.206333958", + "06/05/23", + "06/05/23", + "0.26392964" + ], + [ + "rx7xw5", + "-105.40034423838", + "38.7919626282301", + "551116.511825706", + "06/05/23", + "06/05/23", + "0.40548676" + ], + [ + "dm6mag", + "-103.194277912162", + "38.2789336737667", + "1024456.11106422", + "06/05/23", + "06/05/23", + "0.422763" + ], + [ + "pm7mn1", + "-107.108827131238", + "40.5608688510588", + "578598.741922803", + "06/05/23", + "06/05/23", + "0.6894054" + ], + [ + "37n7xx", + "-108.854727113829", + "37.2695581789683", + "521615.84591049", + "06/05/23", + "06/05/23", + "0.28099716" + ], + [ + "apxp4d", + "-106.952974771719", + "37.9564824679084", + "740057.476333024", + "06/05/23", + "06/05/23", + "0.34487996" + ], + [ + "mp6pmj", + "-105.127209463839", + "40.3763549365479", + "485754.616345973", + "06/05/23", + "06/05/23", + "0.5840298" + ], + [ + "jw6wra", + "-106.07041325882", + "40.0856798909777", + "537779.242088224", + "06/05/23", + "06/05/23", + "0.44480363" + ], + [ + "vk7k5k", + "-103.723029498555", + "38.7968059235223", + "581345.699752967", + "06/05/23", + "06/05/23", + "0.4201072" + ], + [ + "9nxnez", + "-107.555532422339", + "37.7856037384216", + "1005017.44970742", + "06/05/23", + "06/05/23", + "0.122504905" + ], + [ + "b3q346", + "-108.828024250849", + "38.4887918390168", + "488064.70767892", + "06/05/23", + "06/05/23", + "0.32693985" + ], + [ + "wn7n5r", + "-108.301866949794", + "38.3376192932324", + "950574.433263087", + "06/05/23", + "06/05/23", + "0.62645805" + ], + [ + "kn5nvz", + "-107.763997034181", + "40.6371834805455", + "1030289.79069161", + "06/05/23", + "06/05/23", + "0.45757717" + ], + [ + "n3r374", + "-102.110996080867", + "39.029152253266", + "108279.798387107", + "06/05/23", + "06/05/23", + "0.4518794" + ], + [ + "ejrjzr", + "-108.389043763779", + "40.824267212107", + "593311.641380595", + "06/05/23", + "06/05/23", + "0.2691544" + ], + [ + "6nxnwv", + "-103.597779638008", + "38.4807194187288", + "485393.312697138", + "06/05/23", + "06/05/23", + "0.35845962" + ], + [ + "7zrz4q", + "-102.275775556413", + "38.4598692684346", + "163783.691602833", + "06/05/23", + "06/05/23", + "0.32348514" + ], + [ + "ldgdmp", + "-104.596090041815", + "40.7880126615728", + "915395.989470029", + "06/05/23", + "06/05/23", + "0.5369404" + ], + [ + "1kwkmn", + "-106.998808365449", + "39.6877014082775", + "1614204.12121774", + "06/05/23", + "06/05/23", + "0.64591765" + ], + [ + "z5r5bk", + "-105.274063110311", + "39.3049316474911", + "743724.156434115", + "06/05/23", + "06/05/23", + "0.47451192" + ], + [ + "xlxlm7", + "-108.161028714573", + "37.1633289072888", + "865130.34285051", + "06/05/23", + "06/05/23", + "0.44711056" + ], + [ + "qj5jk7", + "-102.769919563069", + "38.6522258371087", + "1126095.4485496", + "06/05/23", + "06/05/23", + "0.47730502" + ], + [ + "4nxn4a", + "-103.581249242352", + "40.7681556507533", + "1260168.04324923", + "06/05/23", + "06/05/23", + "0.5232959" + ], + [ + "5zxz9p", + "-108.658173860584", + "38.1044211957261", + "657833.520900796", + "06/05/23", + "06/05/23", + "0.34427664" + ], + [ + "g565ve", + "-106.856274585516", + "38.3983336714774", + "1157330.32769793", + "06/05/23", + "06/05/23", + "0.42730996" + ], + [ + "rx7xv5", + "-106.623852877979", + "37.3633329257075", + "776674.745564712", + "06/05/23", + "06/05/23", + "0.4113769" + ], + [ + "dm6m5g", + "-123.733085010742", + "44.3039615923728", + "612669.58428236", + "06/05/23", + "06/05/23", + "0.8577525" + ], + [ + "pm7ml1", + "-121.621114152163", + "42.6220608590188", + "770534.19663845", + "06/05/23", + "06/05/23", + "0.58633244" + ], + [ + "37n75x", + "-121.917491235919", + "44.5992359863175", + "610392.071322721", + "06/05/23", + "06/05/23", + "0.73414254" + ], + [ + "apxpdd", + "-122.336348866544", + "44.1423969182499", + "582077.289825412", + "06/05/23", + "06/05/23", + "0.78519493" + ], + [ + "mp6pzj", + "-124.093389245768", + "43.4302635103512", + "470525.871557809", + "06/05/23", + "06/05/23", + "0.8512534" + ], + [ + "jw6wqa", + "-124.10909742988", + "42.5594236166321", + "605778.973662283", + "06/05/23", + "06/05/23", + "0.81472087" + ], + [ + "vk7klk", + "-121.654492423156", + "43.4766064202915", + "489994.422781379", + "06/05/23", + "06/05/23", + "0.57135314" + ], + [ + "9nxn3z", + "-121.610437227033", + "42.9780123884592", + "966528.979927273", + "06/05/23", + "06/05/23", + "0.58207214" + ], + [ + "b3q3p6", + "-120.594964297798", + "43.8602670424635", + "499406.726013464", + "06/05/23", + "06/05/23", + "0.3072909" + ], + [ + "wn7nlr", + "-119.45255485966", + "42.8788907267966", + "2860192.91774166", + "06/05/23", + "06/05/23", + "0.3274253" + ], + [ + "kn5nkz", + "-121.570499063365", + "44.902499219052", + "900439.226654755", + "06/05/23", + "06/05/23", + "0.68031114" + ], + [ + "n3r3g4", + "-124.105165066708", + "43.0282279654133", + "608075.780609998", + "06/05/23", + "06/05/23", + "0.84614384" + ], + [ + "ejrjmr", + "-123.658454125221", + "45.8331824067233", + "901172.967532428", + "06/05/23", + "06/05/23", + "0.85157436" + ], + [ + "6nxnlv", + "-118.781948447987", + "42.4758924869663", + "428677.401198509", + "06/05/23", + "06/05/23", + "0.45037404" + ], + [ + "7zrzdq", + "-117.28833742961", + "42.9359065081563", + "991698.967886194", + "06/05/23", + "06/05/23", + "0.3872325" + ], + [ + "ldgd9p", + "-119.308640789421", + "44.4756564240277", + "505487.400317714", + "06/05/23", + "06/05/23", + "0.43097618" + ], + [ + "1kwk4n", + "-120.325494484899", + "43.1623496909012", + "2180651.06663761", + "06/05/23", + "06/05/23", + "0.30974" + ], + [ + "z5r5pk", + "-120.886302558835", + "45.5105591409646", + "482621.65223634", + "06/05/23", + "06/05/23", + "0.4308187" + ], + [ + "xlxl57", + "-118.191561585397", + "42.3736297377301", + "1596767.66975138", + "06/05/23", + "06/05/23", + "0.27342358" + ], + [ + "qj5j17", + "-117.464355515598", + "44.1187940795346", + "616826.458198529", + "06/05/23", + "06/05/23", + "0.35461754" + ], + [ + "4nxnla", + "-120.914610024394", + "44.1276365376154", + "576195.217080387", + "06/05/23", + "06/05/23", + "0.32420042" + ], + [ + "5zxz4p", + "-120.925241375149", + "44.5990823715644", + "439470.806052441", + "06/05/23", + "06/05/23", + "0.35674757" + ], + [ + "g565ze", + "-117.351278675722", + "42.2732532335515", + "801332.968397297", + "06/05/23", + "06/05/23", + "0.33745912" + ], + [ + "rx7xk5", + "-119.032344132289", + "43.4686025469236", + "510784.011227851", + "06/05/23", + "06/05/23", + "0.40005556" + ], + [ + "dm6mkg", + "-120.384525565664", + "45.2353777045019", + "838694.732532799", + "06/05/23", + "06/05/23", + "0.34998563" + ], + [ + "pm7mq1", + "-119.619854578147", + "45.4512318501702", + "2028866.71740242", + "06/05/23", + "06/05/23", + "0.37061694" + ], + [ + "37n7jx", + "-118.15777716462", + "43.5663575582826", + "1085935.23377641", + "06/05/23", + "06/05/23", + "0.39999938" + ], + [ + "apxpgd", + "-123.645888360583", + "44.7244644804922", + "907044.222992335", + "06/05/23", + "06/05/23", + "0.84004813" + ], + [ + "dm6mkk", + "-120.803436381355", + "42.6083312897164", + "780285.694506804", + "06/05/23", + "06/05/23", + "0.52264" + ], + [ + "pm7mq9", + "-119.268636444601", + "42.132046300769", + "524550.461496807", + "06/05/23", + "06/05/23", + "0.3395346" + ], + [ + "37n7j7", + "-119.84531244046", + "42.2312303447341", + "467561.492622674", + "06/05/23", + "06/05/23", + "0.3933188" + ], + [ + "apxpgl", + "-123.746070091567", + "45.19200584158", + "458831.911903071", + "06/05/23", + "06/05/23", + "0.8364753" + ], + [ + "mp6pjg", + "-117.272602507264", + "45.1424738726559", + "722241.344484929", + "06/05/23", + "06/05/23", + "0.6095206" + ], + [ + "jw6w31", + "-116.578598282531", + "45.5057194846", + "48432.6663544065", + "06/05/23", + "06/05/23", + "0.5114518" + ], + [ + "vk7k3b", + "-123.602759219325", + "42.208132765573", + "1300620.38797958", + "06/05/23", + "06/05/23", + "0.73997027" + ], + [ + "9nxn71", + "-118.184691644425", + "45.5307734800659", + "614129.854514294", + "06/05/23", + "06/05/23", + "0.65635204" + ], + [ + "b3q3gq", + "-117.6209856848", + "43.3337157546804", + "948354.992044606", + "06/05/23", + "06/05/23", + "0.32095695" + ], + [ + "wn7nag", + "-120.262872429848", + "44.7095518123279", + "443188.978961052", + "06/05/23", + "06/05/23", + "0.36154717" + ], + [ + "kn5naw", + "-119.119115919603", + "45.4045722154444", + "505270.833208936", + "06/05/23", + "06/05/23", + "0.40185863" + ], + [ + "n3r3ja", + "-122.938817981951", + "44.1957756261376", + "717437.900561803", + "06/05/23", + "06/05/23", + "0.8196968" + ], + [ + "ejrjgl", + "-122.723445287941", + "42.8894524931817", + "907365.325561097", + "06/05/23", + "06/05/23", + "0.7933441" + ], + [ + "6nxn7k", + "-117.534190914413", + "44.8184045550486", + "1265768.86658119", + "06/05/23", + "06/05/23", + "0.50077623" + ], + [ + "7zrze5", + "-123.003868786315", + "45.4107767543186", + "456756.448116919", + "06/05/23", + "06/05/23", + "0.7219584" + ], + [ + "ldgdjr", + "-118.582528094855", + "43.0094930967062", + "605643.97900473", + "06/05/23", + "06/05/23", + "0.40375176" + ], + [ + "1kwkzd", + "-117.382641387745", + "43.8348462373984", + "551181.984867209", + "06/05/23", + "06/05/23", + "0.36866277" + ], + [ + "z5r5v9", + "-121.062037679262", + "45.0795431002296", + "954336.634419897", + "06/05/23", + "06/05/23", + "0.37400222" + ], + [ + "xlxle9", + "-120.947714221096", + "43.3172504316203", + "530057.345247481", + "06/05/23", + "06/05/23", + "0.3381736" + ], + [ + "qj5jeq", + "-119.241629284797", + "44.8198960525291", + "457165.195998727", + "06/05/23", + "06/05/23", + "0.49020115" + ], + [ + "4nxnvp", + "-121.77134654457", + "44.1203758977815", + "501347.353289506", + "06/05/23", + "06/05/23", + "0.56083864" + ], + [ + "5zxzd1", + "-122.812555111316", + "43.5563499416042", + "1353108.00617667", + "06/05/23", + "06/05/23", + "0.81099683" + ], + [ + "g565dv", + "-122.484401845626", + "42.3233089299723", + "901674.358186488", + "06/05/23", + "06/05/23", + "0.67630714" + ], + [ + "rx7xqk", + "-117.946233289269", + "44.2721864438626", + "718351.423452955", + "06/05/23", + "06/05/23", + "0.50702715" + ], + [ + "dm6mlk", + "-121.264030881123", + "43.6650425786676", + "726389.994734049", + "06/05/23", + "06/05/23", + "0.56047726" + ], + [ + "pm7m99", + "-122.753334723506", + "43.4211587763809", + "509810.803491618", + "06/05/23", + "06/05/23", + "0.77373064" + ], + [ + "37n7v7", + "-118.641014971186", + "44.9278725926633", + "1165489.59710771", + "06/05/23", + "06/05/23", + "0.6964722" + ], + [ + "apxpel", + "-123.187675768359", + "45.7336508038606", + "838535.889240805", + "06/05/23", + "06/05/23", + "0.85053784" + ], + [ + "mp6pvg", + "-117.782735684383", + "42.8405736330092", + "493958.736370654", + "06/05/23", + "06/05/23", + "0.27833387" + ], + [ + "jw6wa1", + "-122.190069678511", + "42.9653802927691", + "950795.0805759", + "06/05/23", + "06/05/23", + "0.6483301" + ], + [ + "vk7k1b", + "-123.015562461181", + "44.7518306716536", + "1221578.04281052", + "06/05/23", + "06/05/23", + "0.73223865" + ], + [ + "9nxnm1", + "-123.486501493893", + "42.867883825326", + "1163629.27710335", + "06/05/23", + "06/05/23", + "0.79488695" + ], + [ + "b3q31q", + "-123.62508378705", + "43.7935433286052", + "1134868.58307507", + "06/05/23", + "06/05/23", + "0.8479917" + ], + [ + "wn7n1g", + "-118.270284945798", + "44.6439137832636", + "611212.350481337", + "06/05/23", + "06/05/23", + "0.680947" + ], + [ + "kn5nmw", + "-122.322085341312", + "44.5692792319529", + "716074.353306157", + "06/05/23", + "06/05/23", + "0.8138481" + ], + [ + "n3r3va", + "-119.22564546366", + "45.0583921097992", + "555338.605747468", + "06/05/23", + "06/05/23", + "0.6632574" + ], + [ + "ejrj1l", + "-120.052006787637", + "44.0263437351239", + "654413.677329119", + "06/05/23", + "06/05/23", + "0.40901643" + ], + [ + "6nxnpk", + "-120.715931516322", + "42.2486093983111", + "861779.325046133", + "06/05/23", + "06/05/23", + "0.5445565" + ], + [ + "7zrz35", + "-118.679666863946", + "43.8619163237786", + "561819.930784432", + "06/05/23", + "06/05/23", + "0.51490605" + ], + [ + "ldgd4r", + "-121.521585969587", + "42.1904682178396", + "698192.179085763", + "06/05/23", + "06/05/23", + "0.51644576" + ], + [ + "1kwkbd", + "-121.334404979187", + "44.3643922232682", + "500963.877369129", + "06/05/23", + "06/05/23", + "0.3976828" + ], + [ + "z5r5x9", + "-118.83070850437", + "44.1761713499351", + "856235.561311695", + "06/05/23", + "06/05/23", + "0.6138967" + ], + [ + "xlxl19", + "-122.494901290464", + "45.3594278029715", + "538787.653445322", + "06/05/23", + "06/05/23", + "0.7464407" + ], + [ + "qj5jbq", + "-121.962046539718", + "45.2938219319043", + "964441.054122594", + "06/05/23", + "06/05/23", + "0.7912658" + ], + [ + "4nxnnp", + "-117.668718147582", + "45.7076779977583", + "1144558.08714567", + "06/05/23", + "06/05/23", + "0.7179486" + ], + [ + "5zxzz1", + "-116.981788921944", + "45.595545110007", + "899941.188726493", + "06/05/23", + "06/05/23", + "0.5844661" + ], + [ + "g5655v", + "-123.191568370402", + "42.504385752218", + "472681.674245128", + "06/05/23", + "06/05/23", + "0.7571247" + ], + [ + "rx7xxk", + "-119.731448758836", + "44.0863061918657", + "1710830.05823434", + "06/05/23", + "06/05/23", + "0.55300677" + ], + [ + "dm6mmk", + "-118.604311510444", + "45.7243812978127", + "431788.224666088", + "06/05/23", + "06/05/23", + "0.54197174" + ], + [ + "pm7mm9", + "-82.6076907127109", + "29.8957882057277", + "811853.695429588", + "06/05/23", + "06/05/23", + "0.7193549" + ], + [ + "37n777", + "-80.6435423619153", + "26.6374375202302", + "474813.217114654", + "06/05/23", + "06/05/23", + "0.6983636" + ], + [ + "apxppl", + "-82.1995837080113", + "27.8094363907735", + "880949.768339189", + "06/05/23", + "06/05/23", + "0.6068148" + ], + [ + "mp6ppg", + "-83.6621322984133", + "30.4236523700472", + "690601.481363935", + "06/05/23", + "06/05/23", + "0.7488501" + ], + [ + "jw6ww1", + "-84.4781182854898", + "30.4802331752225", + "897651.466784235", + "06/05/23", + "06/05/23", + "0.728754" + ], + [ + "vk7kkb", + "-82.0243981383991", + "28.3985402418234", + "1199677.6583522", + "06/05/23", + "06/05/23", + "0.70539653" + ], + [ + "9nxnn1", + "-81.2454239363175", + "26.450417474611", + "826003.969543297", + "06/05/23", + "06/05/23", + "0.6550698" + ], + [ + "b3q33q", + "-84.7178653528429", + "30.1063026203617", + "1789616.5840992", + "06/05/23", + "06/05/23", + "0.70873183" + ], + [ + "wn7nng", + "-83.4720618633099", + "30.1016159902449", + "575746.20485953", + "06/05/23", + "06/05/23", + "0.7343871" + ], + [ + "kn5nnw", + "-82.5672963504159", + "28.6348855482112", + "1475592.4418611", + "06/05/23", + "06/05/23", + "0.6247142" + ], + [ + "n3r33a", + "-81.5216121782197", + "26.1278458510208", + "990534.053819262", + "06/05/23", + "06/05/23", + "0.66135997" + ], + [ + "ejrjjl", + "-83.0108957752644", + "30.3826993193117", + "606599.126302944", + "06/05/23", + "06/05/23", + "0.7335746" + ], + [ + "6nxnnk", + "-81.7223176968338", + "27.2066163600357", + "1252599.48616946", + "06/05/23", + "06/05/23", + "0.6768798" + ], + [ + "7zrzz5", + "-80.3041523813562", + "26.7626841241851", + "1084180.68278209", + "06/05/23", + "06/05/23", + "0.5857836" + ], + [ + "ldgddr", + "-80.7959763901928", + "25.457617897979", + "1027605.45924897", + "06/05/23", + "06/05/23", + "0.48000917" + ], + [ + "1kwkkd", + "-81.3772534363053", + "28.8212678228617", + "894513.252179486", + "06/05/23", + "06/05/23", + "0.66791093" + ], + [ + "z5r559", + "-82.172475149428", + "29.1677207854102", + "1068004.85621532", + "06/05/23", + "06/05/23", + "0.6597072" + ], + [ + "xlxll9", + "-80.9936580887752", + "27.68957816271", + "3534219.3451331", + "06/05/23", + "06/05/23", + "0.6796439" + ], + [ + "qj5jjq", + "-85.5681013011117", + "30.3234298421533", + "828265.224945771", + "06/05/23", + "06/05/23", + "0.63948065" + ], + [ + "4nxnzp", + "-86.986279123299", + "30.7368701470493", + "1575328.19020164", + "06/05/23", + "06/05/23", + "0.746281" + ], + [ + "5zxzb1", + "-82.1530924586999", + "27.0630835930369", + "1114404.93650912", + "06/05/23", + "06/05/23", + "0.6039012" + ], + [ + "g565qv", + "-85.8135607339735", + "30.7964283513298", + "661025.758672156", + "06/05/23", + "06/05/23", + "0.7423761" + ], + [ + "rx7x6k", + "-81.217277469644", + "29.3599093709213", + "1590577.52578692", + "06/05/23", + "06/05/23", + "0.7075262" + ], + [ + "dm6mqk", + "-81.7540294938466", + "30.4621763404805", + "820280.929867198", + "06/05/23", + "06/05/23", + "0.71741307" + ], + [ + "pm7mb9", + "-80.3528439483158", + "25.9372084584667", + "939761.9558275", + "06/05/23", + "06/05/23", + "0.44601282" + ], + [ + "37n7e7", + "-81.1256991212336", + "26.8636364050655", + "734346.772157498", + "06/05/23", + "06/05/23", + "0.6699306" + ], + [ + "apxpll", + "-80.9117564359123", + "25.982170814079", + "869660.06517887", + "06/05/23", + "06/05/23", + "0.55773586" + ], + [ + "mp6pbg", + "-81.8341711174835", + "29.5715858754376", + "661026.13822602", + "06/05/23", + "06/05/23", + "0.6992157" + ], + [ + "jw6w41", + "-83.0514265064109", + "29.6231238503901", + "1368804.83576735", + "06/05/23", + "06/05/23", + "0.73239535" + ], + [ + "vk7k6b", + "-85.30180075215", + "30.6886236970004", + "918107.775308815", + "06/05/23", + "06/05/23", + "0.6682464" + ], + [ + "9nxnz1", + "-81.6815558610387", + "28.9717714412122", + "830505.351849827", + "06/05/23", + "06/05/23", + "0.62875485" + ], + [ + "b3q3lq", + "-86.279741116228", + "30.6593316204387", + "539087.184702826", + "06/05/23", + "06/05/23", + "0.6873736" + ], + [ + "wn7nxg", + "-81.5895984602623", + "28.00347304936", + "572401.57621186", + "06/05/23", + "06/05/23", + "0.59083486" + ], + [ + "kn5nqw", + "-82.2098803305304", + "30.1312865099232", + "1520585.64249981", + "06/05/23", + "06/05/23", + "0.7384336" + ], + [ + "n3r3wa", + "-80.6343279209805", + "28.419738330263", + "162256.588261384", + "06/05/23", + "06/05/23", + "0.591982" + ], + [ + "ejrjql", + "-80.2362002973467", + "27.3321289766497", + "7871.01406497761", + "06/05/23", + "06/05/23", + "0.46142432" + ], + [ + "6nxnbk", + "-82.1115512660391", + "26.6063495587951", + "28347.3124263842", + "06/05/23", + "06/05/23", + "0.51587796" + ], + [ + "7zrzl5", + "-82.1105995648651", + "26.4584122364654", + "13704.6877618406", + "06/05/23", + "06/05/23", + "0.47450453" + ], + [ + "ldgdnr", + "-80.4218012642719", + "25.1354574595652", + "28917.2105760137", + "06/05/23", + "06/05/23", + "0.73779225" + ], + [ + "1kwk1d", + "-76.4382373949251", + "43.270385234457", + "816828.001850395", + "06/05/23", + "06/05/23", + "0.7743761" + ], + [ + "z5r549", + "-73.902108830019", + "42.3274158210351", + "1309980.43929642", + "06/05/23", + "06/05/23", + "0.8274786" + ], + [ + "xlxlw9", + "-77.7811663433633", + "42.5915382461734", + "560846.628159733", + "06/05/23", + "06/05/23", + "0.79372394" + ], + [ + "qj5j6q", + "-73.8672294431769", + "41.2613569388304", + "808994.01010188", + "06/05/23", + "06/05/23", + "0.8322209" + ], + [ + "4nxn1p", + "-74.7931064096126", + "42.4853129534667", + "1118476.66384185", + "06/05/23", + "06/05/23", + "0.84134704" + ], + [ + "5zxzr1", + "-78.3273079257049", + "42.2142323118272", + "861055.64234585", + "06/05/23", + "06/05/23", + "0.8491204" + ], + [ + "g565xv", + "-74.5281467857933", + "44.4782005910085", + "1398638.02249672", + "06/05/23", + "06/05/23", + "0.85299945" + ], + [ + "rx7xdk", + "-73.8272253849564", + "43.4141267224329", + "521486.038489076", + "06/05/23", + "06/05/23", + "0.8107125" + ], + [ + "dm6m4k", + "-74.4428451464007", + "43.9956771330156", + "677961.388815248", + "06/05/23", + "06/05/23", + "0.8095283" + ], + [ + "pm7mg9", + "-77.6830328870615", + "43.0950025942566", + "685744.457087038", + "06/05/23", + "06/05/23", + "0.6853696" + ], + [ + "37n7r7", + "-75.6658648023788", + "42.8690536914026", + "710002.440370262", + "06/05/23", + "06/05/23", + "0.79788494" + ], + [ + "apxp1l", + "-74.6595786974309", + "41.6343857576641", + "794509.349034177", + "06/05/23", + "06/05/23", + "0.8124362" + ], + [ + "dm6m44", + "-76.8663129830656", + "42.7905729223337", + "1263842.50420453", + "06/05/23", + "06/05/23", + "0.6801048" + ], + [ + "pm7mgp", + "-75.0051111935398", + "43.7616771690123", + "872202.823030318", + "06/05/23", + "06/05/23", + "0.90028495" + ], + [ + "37n7rp", + "-74.1650477652723", + "41.6019975416361", + "474796.611633113", + "06/05/23", + "06/05/23", + "0.8085966" + ], + [ + "apxp17", + "-75.4860278602869", + "44.2902619268523", + "738167.930681149", + "06/05/23", + "06/05/23", + "0.84475046" + ], + [ + "mp6pg6", + "-73.7248662928856", + "41.898379823648", + "638932.434333073", + "06/05/23", + "06/05/23", + "0.81359434" + ], + [ + "jw6wxv", + "-75.8953125484253", + "43.8419995739297", + "972135.117013326", + "06/05/23", + "06/05/23", + "0.84403354" + ], + [ + "vk7kmz", + "-73.6746157538599", + "44.8370554302809", + "445531.996591683", + "06/05/23", + "06/05/23", + "0.814264" + ], + [ + "9nxnqr", + "-78.4328893907464", + "42.7918834683047", + "1406863.84035062", + "06/05/23", + "06/05/23", + "0.7298183" + ], + [ + "b3q36r", + "-74.8527093400924", + "44.7884618578662", + "828333.860936138", + "06/05/23", + "06/05/23", + "0.81487083" + ], + [ + "wn7nj9", + "-79.2030492154869", + "42.2358236907885", + "1041867.70175249", + "06/05/23", + "06/05/23", + "0.81528413" + ], + [ + "kn5n4p", + "-73.6128013933737", + "44.3164128461804", + "541513.293000137", + "06/05/23", + "06/05/23", + "0.8055928" + ], + [ + "n3r3xn", + "-78.5897648071287", + "43.1670915640811", + "580768.082031264", + "06/05/23", + "06/05/23", + "0.6485889" + ], + [ + "ejrjne", + "-76.1650068190448", + "42.2839602376261", + "1578920.03493259", + "06/05/23", + "06/05/23", + "0.82547027" + ], + [ + "6nxnz3", + "-75.1354767070819", + "42.0445003786706", + "593987.563553018", + "06/05/23", + "06/05/23", + "0.8525126" + ], + [ + "7zrzkb", + "-73.1492258652725", + "40.8242639446405", + "856599.806502974", + "06/05/23", + "06/05/23", + "0.72776574" + ], + [ + "ldgdxw", + "-77.3334617526331", + "42.3261490183567", + "1209961.29073758", + "06/05/23", + "06/05/23", + "0.8136014" + ], + [ + "1kwk65", + "-73.6739339461776", + "43.9074994325043", + "825354.363105429", + "06/05/23", + "06/05/23", + "0.81936914" + ], + [ + "z5r5ej", + "-73.9248599348085", + "42.7965380521567", + "1471217.57750916", + "06/05/23", + "06/05/23", + "0.8042314" + ], + [ + "xlxlrm", + "-75.1293706472733", + "43.0732794500735", + "1779525.38552276", + "06/05/23", + "06/05/23", + "0.8198395" + ], + [ + "qj5j31", + "-76.0204187292108", + "43.0553042732644", + "938391.95615617", + "06/05/23", + "06/05/23", + "0.7776772" + ], + [ + "4nxn6r", + "-74.3595395646619", + "43.4763958528907", + "1495898.95312744", + "06/05/23", + "06/05/23", + "0.8543825" + ], + [ + "5zxz6d", + "-72.3287517316796", + "41.066367010136", + "7648.94194254269", + "06/05/23", + "06/05/23", + "0.92599183" + ], + [ + "g56515", + "-73.0254507356774", + "40.686428707288", + "6480.77053249038", + "06/05/23", + "06/05/23", + "0.5211634" + ], + [ + "rx7xa6", + "-74.1532047470094", + "40.5807642449309", + "37140.7333151383", + "06/05/23", + "06/05/23", + "0.740652" + ], + [ + "dm6m94", + "-73.4342834895747", + "40.6122447588984", + "6181.00106540064", + "06/05/23", + "06/05/23", + "0.49794346" + ], + [ + "pm7mpp", + "-94.4815501042394", + "39.1698641819181", + "583097.40409331", + "06/05/23", + "06/05/23", + "0.730533" + ], + [ + "37n71p", + "-89.9563699371866", + "36.0867761716868", + "88390.8675372788", + "06/05/23", + "06/05/23", + "0.4522006" + ], + [ + "apxpm7", + "-93.564987065384", + "40.3674223414328", + "609054.903060608", + "06/05/23", + "06/05/23", + "0.7193124" + ], + [ + "mp6p16", + "-92.334138948811", + "39.3633949628369", + "1114757.54204858", + "06/05/23", + "06/05/23", + "0.6873637" + ], + [ + "jw6w1v", + "-94.1381310360818", + "38.3787899893794", + "586543.373622611", + "06/05/23", + "06/05/23", + "0.73733634" + ], + [ + "vk7k9z", + "-94.3395653070108", + "40.3703710217945", + "746431.640662445", + "06/05/23", + "06/05/23", + "0.7289786" + ], + [ + "9nxndr", + "-92.0753233967818", + "37.0172386003498", + "490539.651906705", + "06/05/23", + "06/05/23", + "0.8041444" + ], + [ + "b3q3jr", + "-90.554155460368", + "38.3563137910805", + "1487867.08729794", + "06/05/23", + "06/05/23", + "0.77111536" + ], + [ + "wn7nr9", + "-93.669431437461", + "38.579195994914", + "614523.135576152", + "06/05/23", + "06/05/23", + "0.69179225" + ], + [ + "kn5ngp", + "-94.7581061826085", + "39.834180717639", + "1134154.8952932", + "06/05/23", + "06/05/23", + "0.6561311" + ], + [ + "n3r35n", + "-91.8060977437242", + "39.7119366370338", + "1208592.36646886", + "06/05/23", + "06/05/23", + "0.5867419" + ], + [ + "ejrjbe", + "-93.3461718172787", + "39.219433681221", + "1216907.5059987", + "06/05/23", + "06/05/23", + "0.6015889" + ], + [ + "6nxn63", + "-94.3579935297259", + "36.7640669160667", + "758413.966365193", + "06/05/23", + "06/05/23", + "0.8020613" + ], + [ + "7zrz7b", + "-94.0816869184743", + "37.1256745415426", + "1176309.28606671", + "06/05/23", + "06/05/23", + "0.7451216" + ], + [ + "ldgd1w", + "-94.1965208454058", + "39.4676658492788", + "495903.348962266", + "06/05/23", + "06/05/23", + "0.76150906" + ], + [ + "1kwke5", + "-93.6222752890563", + "39.7833910608207", + "1409417.22571025", + "06/05/23", + "06/05/23", + "0.6780626" + ], + [ + "z5r5nj", + "-89.8312222958869", + "36.6826920330992", + "1422272.58855868", + "06/05/23", + "06/05/23", + "0.4370116" + ], + [ + "xlxl4m", + "-91.0267731909555", + "37.4924252732251", + "998233.873276929", + "06/05/23", + "06/05/23", + "0.8774002" + ], + [ + "qj5ja1", + "-91.6606405308516", + "38.2550934447531", + "2120436.61739955", + "06/05/23", + "06/05/23", + "0.79623383" + ], + [ + "4nxn3r", + "-92.9846666398688", + "38.1306823530784", + "778039.811035813", + "06/05/23", + "06/05/23", + "0.83492655" + ], + [ + "5zxzad", + "-93.1757059603929", + "36.7005983920232", + "783050.238332656", + "06/05/23", + "06/05/23", + "0.8165712" + ], + [ + "g565r5", + "-91.9540621491818", + "40.2926745847108", + "1069214.74741511", + "06/05/23", + "06/05/23", + "0.62606275" + ], + [ + "rx7xm6", + "-91.8250075440146", + "38.9877831442608", + "666538.841802605", + "06/05/23", + "06/05/23", + "0.67181337" + ], + [ + "dm6mx4", + "-92.4830230460541", + "38.5689958829131", + "597201.30937666", + "06/05/23", + "06/05/23", + "0.7262858" + ], + [ + "pm7m3p", + "-90.8915836041011", + "39.0465595499077", + "631602.300338732", + "06/05/23", + "06/05/23", + "0.62704825" + ], + [ + "37n7pp", + "-90.1112157431256", + "36.2405134019637", + "231414.11726743", + "06/05/23", + "06/05/23", + "0.3595777" + ], + [ + "apxp97", + "-94.0256443996873", + "37.6762999954303", + "687010.395740714", + "06/05/23", + "06/05/23", + "0.7405844" + ], + [ + "mp6pe6", + "-90.2623267700313", + "37.1305322545759", + "1671067.10983858", + "06/05/23", + "06/05/23", + "0.8238705" + ], + [ + "jw6w5v", + "-89.5804501361639", + "37.3070348573218", + "728951.540501754", + "06/05/23", + "06/05/23", + "0.61448085" + ], + [ + "vk7kbz", + "-95.2684488573491", + "40.3109987221184", + "838069.164506304", + "06/05/23", + "06/05/23", + "0.5829229" + ], + [ + "9nxn9r", + "-90.1793397965316", + "37.7513843999625", + "636980.325552651", + "06/05/23", + "06/05/23", + "0.7863851" + ], + [ + "b3q3br", + "-91.4828730660444", + "37.2336498510015", + "1267620.07729283", + "06/05/23", + "06/05/23", + "0.84533006" + ], + [ + "wn7nw9", + "-94.2632541365781", + "39.9674073422132", + "607694.708530758", + "06/05/23", + "06/05/23", + "0.7106456" + ], + [ + "kn5nzp", + "-92.6483696420776", + "38.9287587623137", + "738144.524859549", + "06/05/23", + "06/05/23", + "0.7034977" + ], + [ + "n3r3dn", + "-92.8056014097853", + "37.4812772058598", + "5275914.59705245", + "06/05/23", + "06/05/23", + "0.8050825" + ], + [ + "ejrj4e", + "-93.6242447309392", + "38.018739397067", + "768354.102503848", + "06/05/23", + "06/05/23", + "0.7768427" + ], + [ + "6nxnm3", + "-92.0796501077138", + "36.6861154416384", + "755465.591951314", + "06/05/23", + "06/05/23", + "0.784098" + ], + [ + "7zrzjb", + "-93.2144852530993", + "38.570873971364", + "728723.049075756", + "06/05/23", + "06/05/23", + "0.6848774" + ], + [ + "ldgdew", + "-91.0970621547034", + "36.7886278235773", + "1133266.99228785", + "06/05/23", + "06/05/23", + "0.86329246" + ], + [ + "1kwkr5", + "-94.1783970511665", + "38.8267894383202", + "764681.223022982", + "06/05/23", + "06/05/23", + "0.72431517" + ], + [ + "z5r53j", + "-91.0612230824554", + "38.076916971097", + "733767.446443408", + "06/05/23", + "06/05/23", + "0.8538552" + ], + [ + "xlxldm", + "-93.0898629773111", + "40.1328145167042", + "736571.08431723", + "06/05/23", + "06/05/23", + "0.7362314" + ], + [ + "qj5j41", + "-94.4500267434118", + "37.9589635932825", + "784084.902165333", + "06/05/23", + "06/05/23", + "0.7352286" + ], + [ + "4nxnwr", + "-92.6773287364426", + "40.0669070651523", + "1464001.7524868", + "06/05/23", + "06/05/23", + "0.73133516" + ], + [ + "5zxzkd", + "-89.7915712697752", + "36.1897802463124", + "202406.365303316", + "06/05/23", + "06/05/23", + "0.45433134" + ], + [ + "g56545", + "-91.2405942674674", + "39.1371639623386", + "1097398.39305248", + "06/05/23", + "06/05/23", + "0.66513735" + ], + [ + "rx7xr6", + "-115.84534199654", + "41.221732262632", + "889396.17024692", + "06/05/23", + "06/05/23", + "0.425012" + ], + [ + "dm6mr4", + "-116.655932529362", + "37.5285904712728", + "10401865.9443081", + "06/05/23", + "06/05/23", + "0.1986183" + ], + [ + "pm7m4p", + "-114.484674340643", + "41.3977878515929", + "1484120.0050367", + "06/05/23", + "06/05/23", + "0.3288176" + ], + [ + "37n7bp", + "-119.11851849007", + "39.686730645988", + "835374.521850366", + "06/05/23", + "06/05/23", + "0.20121783" + ], + [ + "apxp77", + "-116.655570629478", + "40.5105873226017", + "574349.952712621", + "06/05/23", + "06/05/23", + "0.26209232" + ], + [ + "mp6p46", + "-114.297573491834", + "39.8083635477582", + "1252946.271883", + "06/05/23", + "06/05/23", + "0.23966278" + ], + [ + "jw6wgv", + "-116.713366207012", + "39.2535087906408", + "708051.786546319", + "06/05/23", + "06/05/23", + "0.27082565" + ], + [ + "vk7k4z", + "-116.344681296665", + "40.1659717679054", + "596787.216111271", + "06/05/23", + "06/05/23", + "0.27707797" + ], + [ + "9nxn1r", + "-115.345703275169", + "39.5700470891912", + "1736792.30162494", + "06/05/23", + "06/05/23", + "0.29937023" + ], + [ + "b3q37r", + "-116.401731409813", + "40.7749208439059", + "873525.694763562", + "06/05/23", + "06/05/23", + "0.3242982" + ], + [ + "wn7n49", + "-118.906445366132", + "40.6679695335649", + "565621.099471257", + "06/05/23", + "06/05/23", + "0.21574152" + ], + [ + "kn5n7p", + "-119.686376770949", + "39.6480271951556", + "806013.879681398", + "06/05/23", + "06/05/23", + "0.3171471" + ], + [ + "n3r34n", + "-115.189567863287", + "41.7501453495173", + "490395.642844888", + "06/05/23", + "06/05/23", + "0.4151156" + ], + [ + "ejrj7e", + "-117.105250734517", + "40.3130297888271", + "1228764.51566742", + "06/05/23", + "06/05/23", + "0.2625198" + ], + [ + "6nxnr3", + "-117.436193409549", + "39.481956037282", + "972565.784130767", + "06/05/23", + "06/05/23", + "0.28670463" + ], + [ + "7zrz1b", + "-119.804983491483", + "40.8049270972466", + "642201.97457469", + "06/05/23", + "06/05/23", + "0.31475806" + ], + [ + "ldgd5w", + "-116.731473718618", + "39.8176027662871", + "529437.53378792", + "06/05/23", + "06/05/23", + "0.30985147" + ], + [ + "1kwkw5", + "-118.238723792092", + "39.8495390539263", + "611172.876879503", + "06/05/23", + "06/05/23", + "0.24362542" + ], + [ + "z5r5rj", + "-119.684845482245", + "39.0826578058031", + "776053.415889696", + "06/05/23", + "06/05/23", + "0.38356778" + ], + [ + "xlxlxm", + "-114.34850823767", + "38.3571621863697", + "1839487.93751323", + "06/05/23", + "06/05/23", + "0.32176653" + ], + [ + "qj5j51", + "-118.126414868039", + "40.9108060691147", + "1654150.64716561", + "06/05/23", + "06/05/23", + "0.24759212" + ], + [ + "4nxnxr", + "-119.537901142945", + "41.3462026542447", + "1496167.80378095", + "06/05/23", + "06/05/23", + "0.32487938" + ], + [ + "5zxzxd", + "-119.076160325704", + "38.8477888160402", + "751411.513873254", + "06/05/23", + "06/05/23", + "0.24943723" + ], + [ + "g56565", + "-114.469985529034", + "38.9930764690911", + "551811.095396432", + "06/05/23", + "06/05/23", + "0.27060905" + ], + [ + "rx7x76", + "-119.087153056611", + "40.9581443692598", + "976267.889259145", + "06/05/23", + "06/05/23", + "0.22918515" + ], + [ + "dm6m64", + "-115.798485511547", + "40.3313831770234", + "533893.749184661", + "06/05/23", + "06/05/23", + "0.37475285" + ], + [ + "pm7m7p", + "-118.046838484627", + "39.4648277642504", + "1376261.29793935", + "06/05/23", + "06/05/23", + "0.21979189" + ], + [ + "37n7np", + "-115.638740213329", + "41.7356773124224", + "934033.159584467", + "06/05/23", + "06/05/23", + "0.4812499" + ], + [ + "apxpx7", + "-114.755595430906", + "39.6668906303202", + "480229.956822679", + "06/05/23", + "06/05/23", + "0.27892986" + ], + [ + "dm6m66", + "-114.463971490301", + "37.2408854461132", + "627114.581971298", + "06/05/23", + "06/05/23", + "0.24859035" + ], + [ + "pm7m7e", + "-118.353787663281", + "38.6420962192888", + "2348041.9116439", + "06/05/23", + "06/05/23", + "0.2561085" + ], + [ + "37n7nq", + "-116.989597684683", + "38.8649129147866", + "781925.936529149", + "06/05/23", + "06/05/23", + "0.27553862" + ], + [ + "apxpxj", + "-115.069931199417", + "39.865224873146", + "561348.967698452", + "06/05/23", + "06/05/23", + "0.2948447" + ], + [ + "mp6p69", + "-115.082860607274", + "37.922492609887", + "1852423.89229873", + "06/05/23", + "06/05/23", + "0.2224983" + ], + [ + "jw6w6n", + "-115.931155006827", + "38.490666985968", + "3815427.51334429", + "06/05/23", + "06/05/23", + "0.2436313" + ], + [ + "vk7k7e", + "-115.892851206853", + "36.1775415924104", + "507637.446438099", + "06/05/23", + "06/05/23", + "0.16597548" + ], + [ + "9nxnxl", + "-119.390411774751", + "41.7152907698321", + "692270.822515837", + "06/05/23", + "06/05/23", + "0.37755978" + ], + [ + "b3q3qw", + "-116.841254527222", + "41.6678902457005", + "1975764.98105373", + "06/05/23", + "06/05/23", + "0.36139864" + ], + [ + "wn7n7m", + "-116.077717880272", + "39.2324255903034", + "702576.84857918", + "06/05/23", + "06/05/23", + "0.26361957" + ], + [ + "kn5n51", + "-116.46906499216", + "41.2620727506969", + "666178.708444851", + "06/05/23", + "06/05/23", + "0.39140052" + ], + [ + "n3r3r6", + "-116.05119399538", + "39.7989845294635", + "869371.034911598", + "06/05/23", + "06/05/23", + "0.28772163" + ], + [ + "ejrjp5", + "-118.425371254936", + "41.8132233186855", + "1217886.62844931", + "06/05/23", + "06/05/23", + "0.32825404" + ], + [ + "6nxnva", + "-117.260511467212", + "40.8379008847598", + "555296.412009611", + "06/05/23", + "06/05/23", + "0.2606462" + ], + [ + "7zrz94", + "-115.147619470457", + "38.9473182444428", + "793511.059113447", + "06/05/23", + "06/05/23", + "0.29779533" + ], + [ + "ldgdb9", + "-114.865113934452", + "40.337747246604", + "1025608.49985364", + "06/05/23", + "06/05/23", + "0.26309788" + ], + [ + "1kwkpz", + "-117.444430335675", + "39.0337910683465", + "508158.542263587", + "06/05/23", + "06/05/23", + "0.33143577" + ], + [ + "z5r5gx", + "-117.539020148202", + "40.8230149129864", + "1389638.04127866", + "06/05/23", + "06/05/23", + "0.30816826" + ], + [ + "xlxlgl", + "-118.746373703636", + "39.4275722024042", + "742155.903127934", + "06/05/23", + "06/05/23", + "0.23830464" + ], + [ + "qj5jg6", + "-114.496462212916", + "36.6400871110627", + "1997506.20592517", + "06/05/23", + "06/05/23", + "0.15916157" + ], + [ + "4nxnm1", + "-116.374099659589", + "36.6773242253117", + "623373.129759041", + "06/05/23", + "06/05/23", + "0.17570947" + ], + [ + "5zxzj6", + "-114.945265569513", + "35.860952674219", + "1672534.08552211", + "06/05/23", + "06/05/23", + "0.14195669" + ], + [ + "g565ar", + "-118.408770742837", + "40.2759551612176", + "1322965.98912012", + "06/05/23", + "06/05/23", + "0.20473596" + ], + [ + "rx7xgr", + "-114.335063800272", + "41.8213076096503", + "404567.570440115", + "06/05/23", + "06/05/23", + "0.44389662" + ], + [ + "dm6md6", + "-115.385340321189", + "41.0381189284013", + "1116975.27527467", + "06/05/23", + "06/05/23", + "0.38154015" + ], + [ + "pm7mee", + "-115.133427528701", + "40.7627909813347", + "660041.322467453", + "06/05/23", + "06/05/23", + "0.35129017" + ], + [ + "37n7aq", + "-114.626121534667", + "40.7616926993296", + "594396.596100223", + "06/05/23", + "06/05/23", + "0.26384342" + ], + [ + "apxprj", + "-115.410713601619", + "36.0110858665368", + "826537.116203959", + "06/05/23", + "06/05/23", + "0.17145988" + ], + [ + "mp6pw9", + "-114.476709133284", + "37.8843671006393", + "628402.344972142", + "06/05/23", + "06/05/23", + "0.26382902" + ], + [ + "jw6wvn", + "-118.37929743097", + "41.5017834619687", + "585292.111051667", + "06/05/23", + "06/05/23", + "0.26292813" + ], + [ + "vk7kge", + "-119.240143689096", + "40.068439353651", + "1089126.39614516", + "06/05/23", + "06/05/23", + "0.19544595" + ], + [ + "9nxnwl", + "-114.167122909359", + "40.7438470367949", + "372884.280031207", + "06/05/23", + "06/05/23", + "0.25441432" + ], + [ + "b3q3nw", + "-119.840466215543", + "40.1612146238603", + "263108.557071087", + "06/05/23", + "06/05/23", + "0.23653269" + ], + [ + "wn7ngm", + "-117.582572798167", + "41.8335289559816", + "193132.836452677", + "06/05/23", + "06/05/23", + "0.42960447" + ], + [ + "kn5nr1", + "-71.6733090091969", + "43.7317697293966", + "2405801.1534551", + "06/05/23", + "06/05/23", + "0.8540586" + ], + [ + "n3r3k6", + "-71.2682520102976", + "44.7406363335021", + "1009730.43329301", + "06/05/23", + "06/05/23", + "0.8840734" + ], + [ + "ejrja5", + "-71.1478667724689", + "42.9921810980872", + "555685.45471999", + "06/05/23", + "06/05/23", + "0.82225853" + ], + [ + "6nxnqa", + "-71.5593180127046", + "42.9785695954291", + "304518.943197857", + "06/05/23", + "06/05/23", + "0.8129863" + ], + [ + "7zrzq4", + "-72.0886288652188", + "43.0149535476795", + "1070969.67796329", + "06/05/23", + "06/05/23", + "0.86645013" + ], + [ + "ldgdk9", + "-71.2143768369893", + "43.9042249173471", + "586167.362261555", + "06/05/23", + "06/05/23", + "0.7939892" + ], + [ + "1kwkqz", + "-80.6222782625139", + "37.2014486716982", + "863246.110952729", + "06/05/23", + "06/05/23", + "0.862803" + ], + [ + "z5r5zx", + "-78.2672502583185", + "37.3608741972059", + "628164.870771367", + "06/05/23", + "06/05/23", + "0.8495875" + ], + [ + "xlxlzl", + "-78.7092111852913", + "37.2402385226662", + "601419.101687966", + "06/05/23", + "06/05/23", + "0.8269011" + ], + [ + "qj5jz6", + "-76.9487671164627", + "38.0375259188679", + "957156.909404749", + "06/05/23", + "06/05/23", + "0.7628368" + ], + [ + "4nxnq1", + "-82.001555175182", + "36.7853807946345", + "676183.874812167", + "06/05/23", + "06/05/23", + "0.832925" + ], + [ + "5zxzq6", + "-77.6024934915746", + "38.3785842125492", + "642724.683504099", + "06/05/23", + "06/05/23", + "0.82538956" + ], + [ + "g565jr", + "-77.3886208586906", + "37.4096414000184", + "1168453.15367614", + "06/05/23", + "06/05/23", + "0.81106454" + ], + [ + "rx7xzr", + "-78.1983272976562", + "37.965207189193", + "814685.989620126", + "06/05/23", + "06/05/23", + "0.8371842" + ], + [ + "dm6m36", + "-79.0581300493834", + "38.1973722123572", + "659098.067856971", + "06/05/23", + "06/05/23", + "0.72186905" + ], + [ + "pm7mre", + "-80.7544377297953", + "36.8637085343349", + "1050661.45870456", + "06/05/23", + "06/05/23", + "0.79069716" + ], + [ + "37n7qq", + "-78.2163082811434", + "36.8532855484347", + "1200761.66418717", + "06/05/23", + "06/05/23", + "0.81274915" + ], + [ + "apxp6j", + "-78.0727121441424", + "38.5456015001874", + "594449.733641153", + "06/05/23", + "06/05/23", + "0.8245895" + ], + [ + "mp6pr9", + "-78.6243953655868", + "38.1542844641363", + "1141587.69860769", + "06/05/23", + "06/05/23", + "0.86569756" + ], + [ + "jw6wbn", + "-78.9413726776562", + "36.7753164276903", + "598406.51941213", + "06/05/23", + "06/05/23", + "0.8436446" + ], + [ + "vk7kze", + "-79.3343506013302", + "37.5315601687365", + "1551681.47841605", + "06/05/23", + "06/05/23", + "0.85289645" + ], + [ + "9nxnpl", + "-77.5175007059126", + "38.920080691854", + "912427.941514211", + "06/05/23", + "06/05/23", + "0.79602814" + ], + [ + "b3q3dw", + "-77.3010736173193", + "36.8087955197515", + "1403475.68952657", + "06/05/23", + "06/05/23", + "0.7728692" + ], + [ + "wn7nzm", + "-78.3208852304533", + "38.979749105324", + "971729.437191918", + "06/05/23", + "06/05/23", + "0.8239682" + ], + [ + "kn5nw1", + "-76.7679377047096", + "37.5560524701089", + "1127651.99894498", + "06/05/23", + "06/05/23", + "0.7607588" + ], + [ + "n3r3e6", + "-77.8390646368234", + "37.7292487604072", + "695305.102620886", + "06/05/23", + "06/05/23", + "0.84392077" + ], + [ + "ejrjw5", + "-79.9732023636803", + "36.9228919114575", + "1371010.29675184", + "06/05/23", + "06/05/23", + "0.8687372" + ], + [ + "6nxnga", + "-81.4250586296073", + "36.9281574614194", + "691764.244625639", + "06/05/23", + "06/05/23", + "0.87032187" + ], + [ + "7zrzg4", + "-79.4211134023542", + "36.8322974373864", + "658424.67604364", + "06/05/23", + "06/05/23", + "0.8412726" + ], + [ + "ldgdp9", + "-76.5028230212224", + "36.8358977680064", + "1047959.60452521", + "06/05/23", + "06/05/23", + "0.7407444" + ], + [ + "1kwkgz", + "-79.4271707628217", + "38.290089587754", + "1098878.52660328", + "06/05/23", + "06/05/23", + "0.80713224" + ], + [ + "z5r5dx", + "-82.4600772008924", + "36.9723786491971", + "1606599.00044909", + "06/05/23", + "06/05/23", + "0.88098145" + ], + [ + "xlxl6l", + "-80.0749351326025", + "37.6604985522988", + "502371.579390929", + "06/05/23", + "06/05/23", + "0.8765969" + ], + [ + "qj5jv6", + "-75.7323910565721", + "37.6473688648984", + "398904.405386029", + "06/05/23", + "06/05/23", + "0.59312433" + ], + [ + "4nxng1", + "-75.3697087170773", + "37.9338370633291", + "6418.73176155972", + "06/05/23", + "06/05/23", + "0.45711836" + ], + [ + "5zxzg6", + "-76.5761522795523", + "39.477626290606", + "852261.695616848", + "06/05/23", + "06/05/23", + "0.73095316" + ], + [ + "g565nr", + "-78.9558305077849", + "39.5772719415465", + "775354.593967492", + "06/05/23", + "06/05/23", + "0.83934885" + ], + [ + "rx7x9r", + "-77.3836700906648", + "39.4904088995976", + "993834.337923847", + "06/05/23", + "06/05/23", + "0.66385305" + ], + [ + "dm6mb6", + "-76.8160671143838", + "38.7587955423351", + "1553554.32369791", + "06/05/23", + "06/05/23", + "0.78079945" + ], + [ + "pm7mje", + "-75.963583611786", + "38.9096263778485", + "1502855.03678902", + "06/05/23", + "06/05/23", + "0.63053" + ], + [ + "37n7gq", + "-75.4972087741233", + "38.225470381981", + "601996.086819896", + "06/05/23", + "06/05/23", + "0.7171634" + ], + [ + "apxpjj", + "-76.3178425641911", + "38.9439800927043", + "20922.9284863999", + "06/05/23", + "06/05/23", + "0.7406693" + ], + [ + "mp6p39", + "-75.2637604319866", + "38.0255743575376", + "15373.5099924445", + "06/05/23", + "06/05/23", + "0.54032713" + ], + [ + "jw6w7n", + "-84.1108437804794", + "39.6125948082582", + "916478.919902384", + "06/05/23", + "06/05/23", + "0.5965615" + ], + [ + "vk7kne", + "-84.1817363406133", + "40.2821311016863", + "1363139.86783241", + "06/05/23", + "06/05/23", + "0.3769152" + ], + [ + "9nxnrl", + "-82.0560154658777", + "40.4149745509433", + "571413.34446852", + "06/05/23", + "06/05/23", + "0.75979203" + ], + [ + "b3q3vw", + "-83.8710085831783", + "40.7882199324101", + "636592.421503863", + "06/05/23", + "06/05/23", + "0.35788682" + ], + [ + "wn7nem", + "-81.6098783610577", + "41.0950620704523", + "1898885.08076461", + "06/05/23", + "06/05/23", + "0.6890983" + ], + [ + "kn5nd1", + "-82.6620095857711", + "39.4097195500684", + "506867.046983082", + "06/05/23", + "06/05/23", + "0.83017856" + ], + [ + "n3r3a6", + "-80.9169072088019", + "41.5046087115854", + "1093628.79059532", + "06/05/23", + "06/05/23", + "0.7629556" + ], + [ + "ejrjl5", + "-82.6972228478682", + "40.1508688195944", + "1315981.18588285", + "06/05/23", + "06/05/23", + "0.5862006" + ], + [ + "6nxnda", + "-83.7036189035933", + "39.4871855459309", + "565308.473605453", + "06/05/23", + "06/05/23", + "0.37377077" + ], + [ + "7zrzp4", + "-80.8209860930609", + "40.8298576961502", + "1205008.74540496", + "06/05/23", + "06/05/23", + "0.73296726" + ], + [ + "ldgdv9", + "-83.1324043099797", + "39.763492672684", + "1103200.63296815", + "06/05/23", + "06/05/23", + "0.37949604" + ], + [ + "1kwknz", + "-83.2345649333591", + "40.6305623388755", + "1727217.92889301", + "06/05/23", + "06/05/23", + "0.3871184" + ], + [ + "z5r5qx", + "-84.4710302502391", + "40.8657338589483", + "767152.055417242", + "06/05/23", + "06/05/23", + "0.3167927" + ], + [ + "xlxlql", + "-83.6896184280311", + "39.0727162044787", + "566166.897927379", + "06/05/23", + "06/05/23", + "0.5741147" + ], + [ + "qj5jn6", + "-84.4934048749655", + "41.3647089503785", + "759523.592085968", + "06/05/23", + "06/05/23", + "0.41557622" + ], + [ + "4nxn71", + "-82.5622037072251", + "38.6896870640198", + "636031.567411144", + "06/05/23", + "06/05/23", + "0.8643665" + ], + [ + "5zxzl6", + "-81.6037277000392", + "39.9157384946625", + "1492365.0536197", + "06/05/23", + "06/05/23", + "0.82675576" + ], + [ + "g565pr", + "-83.4693473987775", + "38.9376010819752", + "1127913.00548531", + "06/05/23", + "06/05/23", + "0.81959665" + ], + [ + "rx7xer", + "-82.2746612283084", + "39.2661070730708", + "1959587.50975354", + "06/05/23", + "06/05/23", + "0.8426508" + ], + [ + "dm6m76", + "-81.201538561475", + "40.3147438231571", + "945046.231237064", + "06/05/23", + "06/05/23", + "0.80753607" + ], + [ + "pm7mke", + "-84.5686282417271", + "39.884787915589", + "625841.495053187", + "06/05/23", + "06/05/23", + "0.39281526" + ], + [ + "37n76q", + "-83.0972854541785", + "41.3224352277947", + "1744175.00382941", + "06/05/23", + "06/05/23", + "0.39173782" + ], + [ + "apxpnj", + "-81.1836995718061", + "39.6249429458769", + "501430.412326697", + "06/05/23", + "06/05/23", + "0.8590152" + ], + [ + "dm6m77", + "-83.9972157708938", + "41.3833719850342", + "824116.005365855", + "06/05/23", + "06/05/23", + "0.3514578" + ], + [ + "pm7mkd", + "-82.303537394617", + "40.8404725995246", + "940066.737580119", + "06/05/23", + "06/05/23", + "0.54583985" + ], + [ + "37n76z", + "-84.5138212085807", + "39.330315558202", + "624449.671034689", + "06/05/23", + "06/05/23", + "0.6713215" + ], + [ + "apxpnz", + "-75.1027602170133", + "39.6625902520369", + "1005331.08771686", + "06/05/23", + "06/05/23", + "0.67251694" + ], + [ + "mp6p9d", + "-74.5362577623794", + "40.6273261028975", + "1266071.87708245", + "06/05/23", + "06/05/23", + "0.7466188" + ], + [ + "jw6wme", + "-74.7058105611634", + "41.006689195613", + "839351.423976123", + "06/05/23", + "06/05/23", + "0.822869" + ], + [ + "vk7kqj", + "-74.8312308846377", + "39.287737909492", + "373904.584076037", + "06/05/23", + "06/05/23", + "0.79494166" + ], + [ + "9nxnag", + "-74.4932436482309", + "39.7553181355138", + "790340.96198414", + "06/05/23", + "06/05/23", + "0.75339675" + ], + [ + "b3q3az", + "-74.2567600672109", + "40.229170090805", + "518230.794776327", + "06/05/23", + "06/05/23", + "0.75867265" + ], + [ + "wn7n9d", + "-74.1824601124592", + "39.6480165004197", + "6034.02673902221", + "06/05/23", + "06/05/23", + "0.20656723" + ], + [ + "kn5nev", + "-73.0495901702591", + "41.8739099106571", + "541870.010373117", + "06/05/23", + "06/05/23", + "0.8659971" + ], + [ + "n3r3lg", + "-73.1017219281285", + "41.512450305001", + "1334321.35509888", + "06/05/23", + "06/05/23", + "0.79731524" + ], + [ + "ejrjvg", + "-72.2969707613807", + "41.7689771910458", + "488654.439494776", + "06/05/23", + "06/05/23", + "0.87257236" + ], + [ + "6nxnkp", + "-72.1631801449461", + "41.5467181134078", + "820912.444237558", + "06/05/23", + "06/05/23", + "0.86660564" + ], + [ + "7zrznz", + "-77.0172633740488", + "38.9080077311573", + "42925.0353570637", + "06/05/23", + "06/05/23", + "0.7773169" + ], + [ + "ldgd6n", + "-71.5907951395792", + "41.6946227800715", + "620540.139719753", + "06/05/23", + "06/05/23", + "0.84210086" + ], + [ + "1kwkj7", + "-71.2771619559509", + "41.5393927681328", + "25993.6751949394", + "06/05/23", + "06/05/23", + "0.76746964" + ], + [ + "z5r5ke", + "-71.37775593944", + "41.514830063034", + "6405.03372192102", + "06/05/23", + "06/05/23", + "0.8330011" + ], + [ + "xlxlb4", + "-71.5785472344162", + "41.1767522042168", + "6353.96791249767", + "06/05/23", + "06/05/23", + "0.54147947" + ] +] \ No newline at end of file diff --git a/tests/resources/agriquest_weather_data_mock_http_response b/tests/resources/agriquest_weather_data_mock_http_response new file mode 100644 index 0000000..3898118 --- /dev/null +++ b/tests/resources/agriquest_weather_data_mock_http_response @@ -0,0 +1,887 @@ +[ + [ + "Sep=," + ], + [ + "Name", + "X", + "Y", + "Area (km2)", + "Start", + "End", + "Value(in)" + ], + [ + "Aude", + "2.41362224200849", + "43.1032535837836", + "1567533.41901905", + "05/01/22", + "04/28/23", + "14.8260373218944" + ], + [ + "Haute-Loire", + "3.80629821371942", + "45.128115177836", + "1236418.34584859", + "05/01/22", + "04/28/23", + "17.5335221797025" + ], + [ + "Bouches-du-Rhône", + "5.08604203461634", + "43.5432739455779", + "1295740.4639529", + "05/01/22", + "04/28/23", + "10.6461321619883" + ], + [ + "Lot-et-Garonne", + "0.460747437025639", + "44.3679636789425", + "1330771.26129295", + "05/01/22", + "04/28/23", + "22.0917387046966" + ], + [ + "Creuse", + "2.01822963286571", + "46.0906204404038", + "1383585.42233085", + "05/01/22", + "04/28/23", + "28.7123868653235" + ], + [ + "Corrèze", + "1.87777333324337", + "45.3573418133343", + "1457591.5937993", + "05/01/22", + "04/28/23", + "33.3907856098108" + ], + [ + "Cantal", + "2.66904524950526", + "45.051247132004", + "1426866.32897207", + "05/01/22", + "04/28/23", + "34.4446914053799" + ], + [ + "Essonne", + "2.24340943994597", + "48.5226147782784", + "449652.812890793", + "05/01/22", + "04/28/23", + "20.6777531463171" + ], + [ + "Seine-Maritime", + "1.02578581174933", + "49.6542796599904", + "1563937.01964174", + "05/01/22", + "04/28/23", + "37.0931308608816" + ], + [ + "Isère", + "5.57398514156804", + "45.2640865666908", + "1946747.20254171", + "05/01/22", + "04/28/23", + "25.7024054070663" + ], + [ + "Corse-du-Sud", + "8.98770702225786", + "41.8642535900258", + "991907.216439458", + "05/01/22", + "04/28/23", + "30.3897461123921" + ], + [ + "Haute-Corse", + "9.20638263848185", + "42.3947570306471", + "1162505.9241845", + "05/01/22", + "04/28/23", + "17.9648749344409" + ], + [ + "Puy-de-Dôme", + "3.14016256253422", + "45.725887281938", + "1980656.29169632", + "05/01/22", + "04/28/23", + "24.2982711263726" + ], + [ + "Tarn", + "2.16571579291409", + "43.7857366108406", + "1428863.79443921", + "05/01/22", + "04/28/23", + "21.9421724717295" + ], + [ + "Haute-Savoie", + "6.43298327756599", + "46.0527009929207", + "1196053.42502487", + "05/01/22", + "04/28/23", + "36.9692525119614" + ], + [ + "Savoie", + "6.44283293022912", + "45.4775693759399", + "1549195.78016212", + "05/01/22", + "04/28/23", + "20.7073252859825" + ], + [ + "Alpes-Maritimes", + "7.11656645512726", + "43.9381522364526", + "1060709.38814053", + "05/01/22", + "04/28/23", + "13.6756197933817" + ], + [ + "Hérault", + "3.36866092335104", + "43.5794169260507", + "1540042.33266514", + "05/01/22", + "04/28/23", + "12.6812915121878" + ], + [ + "Pas-de-Calais", + "2.28636992842592", + "50.4937906757647", + "1653674.93965634", + "05/01/22", + "04/28/23", + "35.3628857092277" + ], + [ + "Somme", + "2.27653635857444", + "49.9577504099042", + "1529851.05838661", + "05/01/22", + "04/28/23", + "30.4247686917633" + ], + [ + "Hautes-Pyrénées", + "0.16377587514728", + "43.0537851159464", + "1116722.61891934", + "05/01/22", + "04/28/23", + "24.5900967956617" + ], + [ + "Aveyron", + "2.6785773705976", + "44.2811033674277", + "2167954.4838222", + "05/01/22", + "04/28/23", + "25.4748589051116" + ], + [ + "Landes", + "-0.78379267446174", + "43.9658552622637", + "2311739.35582427", + "05/01/22", + "04/28/23", + "28.7919722069581" + ], + [ + "Pyrénées-Atlantiques", + "-0.761274630410662", + "43.256270738711", + "1898573.34052449", + "05/01/22", + "04/28/23", + "37.3201126196802" + ], + [ + "Pyrénées-Orientales", + "2.5223086101437", + "42.5998478059642", + "1022491.66678322", + "05/01/22", + "04/28/23", + "8.73741756590433" + ], + [ + "Haute-Vienne", + "1.23486662864233", + "45.8922941461014", + "1373394.78064209", + "05/01/22", + "04/28/23", + "32.1155266452551" + ], + [ + "Gironde", + "-0.575559506204276", + "44.8233385325807", + "2489733.67060515", + "05/01/22", + "04/28/23", + "25.3666759025595" + ], + [ + "Indre", + "1.57590549688304", + "46.7782430815127", + "1704743.7855106", + "05/01/22", + "04/28/23", + "23.7816360501725" + ], + [ + "Vendée", + "-1.29893645577929", + "46.6742398720872", + "1678831.64323002", + "05/01/22", + "04/28/23", + "26.7309493112918" + ], + [ + "Dordogne", + "0.741202956853523", + "45.1049475042312", + "2278973.9889792", + "05/01/22", + "04/28/23", + "26.6331504178507" + ], + [ + "Vienne", + "0.459457406370278", + "46.5649741945675", + "1739326.32973752", + "05/01/22", + "04/28/23", + "24.0822331905135" + ], + [ + "Ariège", + "1.50362134609357", + "42.9210531549012", + "1213199.01171362", + "05/01/22", + "04/28/23", + "25.6146550585155" + ], + [ + "Paris", + "2.34287330785244", + "48.8566244108783", + "26039.5814440269", + "05/01/22", + "04/28/23", + "19.6600382548042" + ], + [ + "Hauts-de-Seine", + "2.24605387669042", + "48.847554839537", + "43400.0826007648", + "05/01/22", + "04/28/23", + "20.0464110434529" + ], + [ + "Allier", + "3.18764372465761", + "46.3936373212834", + "1823551.6094345", + "05/01/22", + "04/28/23", + "22.3782008602317" + ], + [ + "Meurthe-et-Moselle", + "6.16249320102568", + "48.7883010169816", + "1305064.33113472", + "05/01/22", + "04/28/23", + "27.3229914031819" + ], + [ + "Moselle", + "6.66129387089164", + "49.0375355216923", + "1544855.45521179", + "05/01/22", + "04/28/23", + "27.5909363824213" + ], + [ + "Loiret", + "2.34394539209396", + "47.9118903451222", + "1683405.26728863", + "05/01/22", + "04/28/23", + "23.3191530903401" + ], + [ + "Bas-Rhin", + "7.55206823672111", + "48.6714249887638", + "1185524.47432553", + "05/01/22", + "04/28/23", + "23.6357476018233" + ], + [ + "Saône-et-Loire", + "4.54279625014984", + "46.644766743351", + "2128469.7484086", + "05/01/22", + "04/28/23", + "24.9446347080495" + ], + [ + "Yonne", + "3.56328763527447", + "47.8405430542891", + "1843803.97101628", + "05/01/22", + "04/28/23", + "26.3304780149192" + ], + [ + "Cher", + "2.49114296954139", + "47.0657954227809", + "1805763.31153642", + "05/01/22", + "04/28/23", + "23.4557053744905" + ], + [ + "Marne", + "4.23845509828558", + "48.949902224834", + "2025277.27651261", + "05/01/22", + "04/28/23", + "26.7880468872757" + ], + [ + "Aisne", + "3.55930543555333", + "49.5611533539301", + "1831299.94852776", + "05/01/22", + "04/28/23", + "28.405370309897" + ], + [ + "Ardennes", + "4.64075100562769", + "49.6162262229966", + "1296444.66288817", + "05/01/22", + "04/28/23", + "34.7056995449031" + ], + [ + "Seine-et-Marne", + "2.93408514524275", + "48.6274969574748", + "1464686.46765707", + "05/01/22", + "04/28/23", + "26.2124637378555" + ], + [ + "Nièvre", + "3.50429473860019", + "47.1157771507726", + "1698925.98388651", + "05/01/22", + "04/28/23", + "28.3312252035125" + ], + [ + "Nord", + "3.21558932926818", + "50.4475520875932", + "1420887.46999178", + "05/01/22", + "04/28/23", + "28.8843274671133" + ], + [ + "Côtes d'Armor", + "-2.86418954264254", + "48.4403747039351", + "1724585.46981176", + "05/01/22", + "04/28/23", + "31.9298360953402" + ], + [ + "Var", + "6.24456656636676", + "43.4417862204623", + "1489557.49368928", + "05/01/22", + "04/28/23", + "15.0478229190463" + ], + [ + "Ain", + "5.34876372436463", + "46.0997989672832", + "1429389.47654055", + "05/01/22", + "04/28/23", + "32.9024663735269" + ], + [ + "Ille-et-Vilaine", + "-1.63828897470572", + "48.1552700482126", + "1690586.29987348", + "05/01/22", + "04/28/23", + "28.0408321435049" + ], + [ + "Oise", + "2.42497481550133", + "49.4099819767518", + "1455355.26243388", + "05/01/22", + "04/28/23", + "25.4301406311219" + ], + [ + "Gers", + "0.452947535196817", + "43.6929404829086", + "1556848.72471761", + "05/01/22", + "04/28/23", + "20.7029167025728" + ], + [ + "Haute-Garonne", + "1.17478092962497", + "43.3587828409525", + "1571548.84586199", + "05/01/22", + "04/28/23", + "17.9604704278327" + ], + [ + "Tarn-et-Garonne", + "1.28230612695646", + "44.0858231197786", + "922021.924529094", + "05/01/22", + "04/28/23", + "20.6298396726824" + ], + [ + "Lot", + "1.60547449331357", + "44.624626068649", + "1291393.18051507", + "05/01/22", + "04/28/23", + "25.4359357399574" + ], + [ + "Haut-Rhin", + "7.27394045341853", + "47.8594778604968", + "872607.364190135", + "05/01/22", + "04/28/23", + "22.8742587071456" + ], + [ + "Seine-Saint-Denis", + "2.47853890021685", + "48.9175754169145", + "58555.0357919112", + "05/01/22", + "04/28/23", + "22.286360451843" + ], + [ + "Val-de-Marne", + "2.46926119719311", + "48.7774511321217", + "60516.7678442541", + "05/01/22", + "04/28/23", + "21.4759405078177" + ], + [ + "Loire-Atlantique", + "-1.67884443754644", + "47.3630606520944", + "1730878.34635535", + "05/01/22", + "04/28/23", + "26.9352742122908" + ], + [ + "Rhône", + "4.59876912091669", + "45.8923117726773", + "672260.995853022", + "05/01/22", + "04/28/23", + "22.1224996881827" + ], + [ + "Métropole de Lyon", + "4.85386439860273", + "45.7632508689894", + "133055.912231258", + "05/01/22", + "04/28/23", + "23.1332645898146" + ], + [ + "Deux-Sèvres", + "-0.31775769189659", + "46.5569625068664", + "1492565.07850591", + "05/01/22", + "04/28/23", + "27.3738358329183" + ], + [ + "Val-d'Oise", + "2.13087285795409", + "49.0827583479696", + "309636.942385595", + "05/01/22", + "04/28/23", + "23.8000097738917" + ], + [ + "Orne", + "0.127804879260183", + "48.623088217807", + "1518699.00676089", + "05/01/22", + "04/28/23", + "28.6195500306417" + ], + [ + "Calvados", + "-0.361575988579905", + "49.0998452955655", + "1381848.07777835", + "05/01/22", + "04/28/23", + "30.8335744807405" + ], + [ + "Loire", + "4.16452404716728", + "45.7280006122976", + "1187255.23994439", + "05/01/22", + "04/28/23", + "20.5768867350876" + ], + [ + "Sarthe", + "0.222553240334542", + "47.9949302069537", + "1543286.88561072", + "05/01/22", + "04/28/23", + "24.5098354922825" + ], + [ + "Manche", + "-1.32956694660733", + "49.0814673440533", + "1492272.18944102", + "05/01/22", + "04/28/23", + "34.8128479838253" + ], + [ + "Yvelines", + "1.84126489253136", + "48.8153577847569", + "570071.558301064", + "05/01/22", + "04/28/23", + "20.6113023760514" + ], + [ + "Eure", + "0.996547777287479", + "49.1135823774549", + "1490347.72483368", + "05/01/22", + "04/28/23", + "25.0666016085418" + ], + [ + "Eure-et-Loir", + "1.36998629682035", + "48.3880306431404", + "1465781.9866259", + "05/01/22", + "04/28/23", + "21.105122599476" + ], + [ + "Finistère", + "-4.06033000956026", + "48.261617194819", + "1676446.14719614", + "05/01/22", + "04/28/23", + "38.976694417985" + ], + [ + "Haute-Saône", + "6.08723834369807", + "47.6412091349175", + "1331940.79326522", + "05/01/22", + "04/28/23", + "32.3800877451751" + ], + [ + "Côte-d'Or", + "4.77166234042626", + "47.4256125476177", + "2175143.7400741", + "05/01/22", + "04/28/23", + "24.7421998862483" + ], + [ + "Mayenne", + "-0.65741180289381", + "48.1472867808652", + "1288319.80636205", + "05/01/22", + "04/28/23", + "28.480545367237" + ], + [ + "Maine-et-Loire", + "-0.559412642564423", + "47.3898599691857", + "1772274.89458084", + "05/01/22", + "04/28/23", + "22.9959174979676" + ], + [ + "Loir-et-Cher", + "1.42787764424347", + "47.6168806402028", + "1586911.92108844", + "05/01/22", + "04/28/23", + "23.0566039814967" + ], + [ + "Charente", + "0.203012527946113", + "45.718715082273", + "1476165.18864155", + "05/01/22", + "04/28/23", + "29.3524490262803" + ], + [ + "Indre-et-Loire", + "0.691065517308515", + "47.2585727533426", + "1521610.81748589", + "05/01/22", + "04/28/23", + "23.065008256469" + ], + [ + "Charente-Maritime", + "-0.675656466720599", + "45.7821549899467", + "1706214.93628663", + "05/01/22", + "04/28/23", + "26.9427166321046" + ], + [ + "Territoire-de-Belfort", + "6.92867477478497", + "47.6318195690125", + "150982.763104368", + "05/01/22", + "04/28/23", + "37.5780827562508" + ], + [ + "Drôme", + "5.16736438459354", + "44.6852390736926", + "1620699.42648868", + "05/01/22", + "04/28/23", + "20.5253372036335" + ], + [ + "Hautes-Alpes", + "6.26531761138939", + "44.6639654244265", + "1407954.93119105", + "05/01/22", + "04/28/23", + "17.3042443986164" + ], + [ + "Meuse", + "5.38134997371891", + "48.9911117523966", + "1540727.55390722", + "05/01/22", + "04/28/23", + "33.9526682594784" + ], + [ + "Aube", + "4.16144800827812", + "48.3046341121795", + "1489469.56371084", + "05/01/22", + "04/28/23", + "27.5259841359792" + ], + [ + "Haute-Marne", + "5.22556487495728", + "48.1104685218163", + "1545931.99648744", + "05/01/22", + "04/28/23", + "30.5967082711895" + ], + [ + "Vosges", + "6.38013942569127", + "48.1962735724646", + "1457357.5355833", + "05/01/22", + "04/28/23", + "33.9888824139515" + ], + [ + "Vaucluse", + "5.17732891514692", + "44.0071764888125", + "883917.120446257", + "05/01/22", + "04/28/23", + "15.3068505115942" + ], + [ + "Lozère", + "3.49970355907195", + "44.5175366438888", + "1278784.5276781", + "05/01/22", + "04/28/23", + "19.1396941214673" + ], + [ + "Alpes-de-Haute-Provence", + "6.24465390599831", + "44.1061172758651", + "1728081.03437926", + "05/01/22", + "04/28/23", + "17.9122390952382" + ], + [ + "Morbihan", + "-2.81218268011372", + "47.8475865265542", + "1693893.7322425", + "05/01/22", + "04/28/23", + "35.1499926342328" + ], + [ + "Doubs", + "6.36272222421339", + "47.1659635940096", + "1298913.913808", + "05/01/22", + "04/28/23", + "42.6370720934297" + ], + [ + "Jura", + "5.69737730693424", + "46.7293599950923", + "1247558.25175067", + "05/01/22", + "04/28/23", + "43.8595728381763" + ], + [ + "Ardèche", + "4.42558206099433", + "44.7527714532297", + "1375537.99479293", + "05/01/22", + "04/28/23", + "21.5507470271628" + ], + [ + "Gard", + "4.17986125357777", + "43.9936012526349", + "1451959.77356846", + "05/01/22", + "04/28/23", + "16.4377360612547" + ] +] \ No newline at end of file diff --git a/tests/resources/create_schema_mock_http_response b/tests/resources/create_schema_mock_http_response new file mode 100644 index 0000000..0a428f4 --- /dev/null +++ b/tests/resources/create_schema_mock_http_response @@ -0,0 +1,3 @@ +{ + "Id": "NEW_SCHEMA" +} \ No newline at end of file diff --git a/tests/resources/gis_layer_municipio_data_mock_http_response b/tests/resources/gis_layer_municipio_data_mock_http_response new file mode 100644 index 0000000..ac4beee --- /dev/null +++ b/tests/resources/gis_layer_municipio_data_mock_http_response @@ -0,0 +1,13 @@ +[ + [ + { + "layer": "BRAZIL_MUNICIPIOS", + "geometry_acreage": 21.99, + "status_overlap": true, + "intersection_percent": 100, + "properties": { + "id": 121935 + } + } + ] +] \ No newline at end of file diff --git a/tests/resources/launch_processor_data_mock_http_response b/tests/resources/launch_processor_data_mock_http_response new file mode 100644 index 0000000..644ff2a --- /dev/null +++ b/tests/resources/launch_processor_data_mock_http_response @@ -0,0 +1 @@ +{"taskId":"cb58faaf8a5640e4913d16bfde3f5bbf"} \ No newline at end of file diff --git a/tests/resources/master_data_management_get_unique_id_mock_http_response b/tests/resources/master_data_management_get_unique_id_mock_http_response new file mode 100644 index 0000000..7a1b09e --- /dev/null +++ b/tests/resources/master_data_management_get_unique_id_mock_http_response @@ -0,0 +1,6 @@ +{ + "externalIds": { + "id": "4XcGhZvA1OjpO3gUwYM61e", + "legacY_ID_NA": "y3v9pw1" + } +} \ No newline at end of file diff --git a/tests/resources/master_data_management_post_extract_id_mock_http_response b/tests/resources/master_data_management_post_extract_id_mock_http_response new file mode 100644 index 0000000..be897c9 --- /dev/null +++ b/tests/resources/master_data_management_post_extract_id_mock_http_response @@ -0,0 +1,3 @@ +{ + "id":"ajqxm3v" +} \ No newline at end of file diff --git a/tests/resources/metrics_harvest_mock_http_response b/tests/resources/metrics_harvest_mock_http_response new file mode 100644 index 0000000..b6ebca5 --- /dev/null +++ b/tests/resources/metrics_harvest_mock_http_response @@ -0,0 +1,20 @@ +[ + { + "KeyValues": {}, + "Timestamp": "2023-06-15T12:24:03.137Z", + "Values": { + "harvest_year_1": "2020-10-02", + "harvest_year_2": "2019-07-05", + "harvest_year_3": "2018-07-19", + "harvest_year_4": "2017-07-26", + "harvest_year_5": "2016-09-22", + "historical_harvest_average": "08-14" + }, + "Entity": { + "TypedId": "SeasonField:4VRIYlBhJvPqy1kPAx9q6R" + }, + "Schema": { + "Id": "HISTORICAL_HARVEST" + } + } +] \ No newline at end of file diff --git a/tests/resources/metrics_lai_radar_mock_http_response b/tests/resources/metrics_lai_radar_mock_http_response new file mode 100644 index 0000000..1867fe5 --- /dev/null +++ b/tests/resources/metrics_lai_radar_mock_http_response @@ -0,0 +1,1696 @@ +[ + { + "KeyValues": {}, + "Timestamp": "2023-05-02T00:00:00Z", + "Values": { + "RVI": 0.15941725764057468, + "LAI": 1.3936802459822675 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-05-01T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.4742092909729507 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-04-30T00:00:00Z", + "Values": { + "RVI": 0.20025300425178277, + "LAI": 1.547938092300813 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-04-29T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.6148850281900256 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-04-28T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.675105233313104 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-04-27T00:00:00Z", + "Values": { + "RVI": 0.163803978582527, + "LAI": 1.728670248614269 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-04-26T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.775647671132812 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-04-25T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.8160808038264487 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-04-24T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.8500123909300485 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-04-23T00:00:00Z", + "Values": { + "RVI": 0.23978602348356506, + "LAI": 1.877508353314367 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-04-22T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.8986815238447778 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-04-21T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.9137153827399933 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-04-20T00:00:00Z", + "Values": { + "RVI": 0.16276198115867938, + "LAI": 1.9228118030494594 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-04-19T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.9261387961307512 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-04-18T00:00:00Z", + "Values": { + "RVI": 0.15181116915616638, + "LAI": 1.9237782571269597 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-04-17T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.9157390609296034 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-04-16T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.9019701581415422 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-04-15T00:00:00Z", + "Values": { + "RVI": 0.2525996103580754, + "LAI": 1.8824585689914337 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-04-14T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.857327377248192 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-04-13T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.8269337241354457 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-04-12T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.7918685479068601 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-04-11T00:00:00Z", + "Values": { + "RVI": 0.2532434886205629, + "LAI": 1.7529563234214616 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-04-10T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.7112548017189537 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-04-09T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.668054749595026 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-04-08T00:00:00Z", + "Values": { + "RVI": 0.14711324003080628, + "LAI": 1.6247673409571053 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-04-07T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.5828115481801042 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-04-06T00:00:00Z", + "Values": { + "RVI": 0.16351938263014243, + "LAI": 1.5435015334621693 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-04-05T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.5079973814970633 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-04-04T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.4772558321465492 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-04-03T00:00:00Z", + "Values": { + "RVI": 0.14195900986996599, + "LAI": 1.4520070872756565 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-04-02T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.4327316175879485 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-04-01T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.4196369694607964 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-31T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.412689792010038 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-30T00:00:00Z", + "Values": { + "RVI": 0.18293121351492994, + "LAI": 1.4116478641546342 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-29T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.41609212168133 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-28T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.4254586843093153 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-27T00:00:00Z", + "Values": { + "RVI": 0.15163322908121504, + "LAI": 1.4390492922775127 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-26T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.456041742931861 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-25T00:00:00Z", + "Values": { + "RVI": 0.1529705641946942, + "LAI": 1.4755003273126013 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-24T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.4964230078535876 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-23T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.5177885960816027 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-22T00:00:00Z", + "Values": { + "RVI": 0.24122822077074632, + "LAI": 1.5386419411579988 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-21T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.5581791184203384 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-20T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.5758326179240376 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-19T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.5912440948321767 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-18T00:00:00Z", + "Values": { + "RVI": 0.24156447273755596, + "LAI": 1.6042371198053007 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-17T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.6147899293912182 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-16T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.623008176414798 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-15T00:00:00Z", + "Values": { + "RVI": 0.0777079031177587, + "LAI": 1.6289912044834172 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-14T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.6326983224924037 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-13T00:00:00Z", + "Values": { + "RVI": 0.18285786377684413, + "LAI": 1.6338150791304762 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-12T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.6318065787736153 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-11T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.625970797378938 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-10T00:00:00Z", + "Values": { + "RVI": 0.16394566777511824, + "LAI": 1.615492654906415 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-09T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.5994980877405733 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-08T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.5771081211122029 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-07T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.5475254576278672 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-06T00:00:00Z", + "Values": { + "RVI": 0.2501017742276924, + "LAI": 1.5101210657994215 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-05T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.464520768573524 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-04T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.4106918318611386 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-03T00:00:00Z", + "Values": { + "RVI": 0.11670389835277946, + "LAI": 1.3488985016314805 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-02T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.2796575410059585 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-03-01T00:00:00Z", + "Values": { + "RVI": 0.23776552877255885, + "LAI": 1.203693767352113 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-02-28T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.1219853568505416 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-02-27T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.035809149061821 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-02-26T00:00:00Z", + "Values": { + "RVI": 0.10859604309508138, + "LAI": 0.9466461689540548 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-02-25T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 0.8560871489304018 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-02-24T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 0.7657380508566048 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-02-23T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 0.6771895314920983 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-02-22T00:00:00Z", + "Values": { + "RVI": 0.12938257970165357, + "LAI": 0.5919864079211127 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-02-21T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 0.5115971229837836 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-02-20T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 0.43738321070725505 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-02-19T00:00:00Z", + "Values": { + "RVI": 0.07892499413951577, + "LAI": 0.3705603181400947 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-02-18T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 0.3121592271867085 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-02-17T00:00:00Z", + "Values": { + "RVI": 0.10988114601603494, + "LAI": 0.26298687644175406 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-02-16T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 0.22364641952858838 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-02-15T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 0.19455728343771223 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-02-14T00:00:00Z", + "Values": { + "RVI": 0.1092307614049111, + "LAI": 0.17596852174110733 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-02-13T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 0.1679721678065612 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-02-12T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 0.1705165880119974 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-02-11T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 0.18340558321268316 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-02-10T00:00:00Z", + "Values": { + "RVI": 0.11286640338740125, + "LAI": 0.20629749020843574 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-02-09T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 0.2387042832108325 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-02-08T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 0.27999067531042166 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-02-07T00:00:00Z", + "Values": { + "RVI": 0.06487043386375242, + "LAI": 0.3293555434702407 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-02-06T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 0.38581335351933815 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-02-05T00:00:00Z", + "Values": { + "RVI": 0.11569674684281936, + "LAI": 0.44817558514629585 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-02-04T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 0.5151120366143024 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-02-03T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 0.5852121294762268 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-02-02T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 0.6570476973724619 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-02-01T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 0.7292357748287617 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-01-31T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 0.8005013860540766 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-01-30T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 0.8697403337383897 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-01-29T00:00:00Z", + "Values": { + "RVI": 0.1821032770240647, + "LAI": 0.9360819878505495 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-01-28T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 0.9989520744361065 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-01-27T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.0581354644151495 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-01-26T00:00:00Z", + "Values": { + "RVI": 0.196424543032484, + "LAI": 1.1137712858950608 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-01-25T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.1663480364832681 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-01-24T00:00:00Z", + "Values": { + "RVI": 0.2143285398870297, + "LAI": 1.2166986955999906 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-01-23T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.2659204918182694 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-01-22T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.3152946702040018 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-01-21T00:00:00Z", + "Values": { + "RVI": 0.06996453939158805, + "LAI": 1.3661094063640977 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-01-20T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.4194827204946447 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-01-19T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.4761853914290735 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-01-18T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.536638377649354 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-01-17T00:00:00Z", + "Values": { + "RVI": 0.11484998713872413, + "LAI": 1.6009102382971887 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-01-16T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.6687145541852055 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-01-15T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.7394073488081565 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-01-14T00:00:00Z", + "Values": { + "RVI": 0.22317766112460322, + "LAI": 1.812102770915893 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-01-13T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 1.885788777086339 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-01-12T00:00:00Z", + "Values": { + "RVI": 0.2337436356909932, + "LAI": 1.9594428142984663 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-01-11T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 2.032094471821218 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-01-10T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 2.102888133102426 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-01-09T00:00:00Z", + "Values": { + "RVI": 0.22392022544714843, + "LAI": 2.171088563705252 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-01-08T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 2.2360864992446263 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-01-07T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 2.2974042333236806 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-01-06T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 2.3546827544234534 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-01-05T00:00:00Z", + "Values": { + "RVI": 0.23464296799883064, + "LAI": 2.407668882792595 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-01-04T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 2.456202407337068 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-01-03T00:00:00Z", + "Values": { + "RVI": "NaN", + "LAI": 2.500203222509851 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + }, + { + "KeyValues": {}, + "Timestamp": "2023-01-02T00:00:00Z", + "Values": { + "RVI": 0.21924885147869452, + "LAI": 2.5396446264619383 + }, + "Entity": { + "TypedId": "SeasonField:7Yo8NgtnijnFTztESJEEfm" + }, + "Schema": { + "Id": "LAI_RADAR" + } + } +] \ No newline at end of file diff --git a/tests/resources/processor_event_data_mock_http_response b/tests/resources/processor_event_data_mock_http_response new file mode 100644 index 0000000..274a3c5 --- /dev/null +++ b/tests/resources/processor_event_data_mock_http_response @@ -0,0 +1,72 @@ +{ + "events": [ + { + "level": "Information", + "date": "2023-06-15T12:24:00.678Z", + "source": "Analytics.geosys-analyticsprocessors-webapi", + "message": "Processor called", + "eventData": { + "TaskId": "4d0980e07b7245d49419ff5ec87fff09", + "Error": null + } + }, + { + "level": "Information", + "date": "2023-06-15T12:24:00.731Z", + "source": "AnalyticsProcessor.Inseason Harvest", + "message": "Processor started" + }, + { + "level": "Information", + "date": "2023-06-15T12:24:03.087Z", + "source": "AnalyticsProcessor.Inseason Harvest", + "message": "Computation finished" + }, + { + "level": "Information", + "date": "2023-06-15T12:24:03.124Z", + "source": "AnalyticsProcessor.Inseason Harvest", + "message": "Format results for the callback" + }, + { + "level": "Information", + "date": "2023-06-15T12:24:03.153Z", + "source": "AnalyticsProcessor.Inseason Harvest", + "message": "Callback called" + }, + { + "level": "Information", + "date": "2023-06-15T12:24:03.446Z", + "source": "AnalyticsProcessor.Inseason Harvest", + "message": "Results succesfully sent to Analytics Fabric", + "eventData": { + "error": "" + } + }, + { + "level": "Information", + "date": "2023-06-15T12:24:03.473Z", + "source": "AnalyticsProcessor.Inseason Harvest", + "message": "Processor ended" + } + ], + "id": "4d0980e07b7245d49419ff5ec87fff09", + "taskId": "4d0980e07b7245d49419ff5ec87fff09", + "processorId": "historical-harvest", + "userId": "2tKecZgMyEP6EkddLxa1gV", + "userLogin": "ETotain_US", + "customerCode": "GEOSYS_US", + "parametersProfile": { + "code": "historical_harvest_default" + }, + "parameters": { + "season_duration": 215, + "season_start_day": 1, + "season_start_month": 4, + "historical": true + }, + "status": "Ended", + "createdAt": "2023-06-15T12:24:00.439Z", + "modifiedAt": "2023-06-15T12:24:03.474Z", + "duration": 3 +} \ No newline at end of file diff --git a/tests/resources/satellite_coverage_image_references_mock_http_response b/tests/resources/satellite_coverage_image_references_mock_http_response new file mode 100644 index 0000000..e98cd04 --- /dev/null +++ b/tests/resources/satellite_coverage_image_references_mock_http_response @@ -0,0 +1,64 @@ +[ + { + "coverageType": "CLEAR", + "image": { + "id": "IKc73hpUQ6w8nSGtmog9A7iGsm9eKYT2SN42mZg0JWO", + "availableBands": [ + "Nir", + "Red", + "Blue", + "Green" + ], + "sensor": "LANDSAT_8", + "soilMaterial": "BARE", + "spatialResolution": 15.0, + "weather": "COLD", + "zenithAngleInDegree": 0.0, + "date": "2022-11-30" + }, + "maps": [ + { + "type": "INSEASON_NDVI" + } + ], + "seasonField": { + "id": "d1l2nqm", + "customerExternalId": null, + "externalIds": { + "id": "3Ec2mBmZRLcrLfChu9ZlJz", + "legacY_ID_NA": "d1l2nqm" + } + } + }, + { + "coverageType": "CLEAR", + "image": { + "id": "IKc73hpUQ6uPitMqTFtBQGpp6rcDKT21cEHm34LPQc0", + "availableBands": [ + "Nir", + "Red", + "Blue", + "Green" + ], + "sensor": "LANDSAT_9", + "soilMaterial": "VEGETATION", + "spatialResolution": 15.0, + "weather": "WET", + "zenithAngleInDegree": 0.0, + "date": "2022-05-11" + }, + "maps": [ + { + "type": "INSEASON_NDVI" + } + ], + "seasonField": { + "id": "d1l2nqm", + "customerExternalId": null, + "externalIds": { + "id": "3Ec2mBmZRLcrLfChu9ZlJz", + "legacY_ID_NA": "d1l2nqm" + } + } + } +] \ No newline at end of file diff --git a/tests/resources/satellite_image_time_series_landsat8_mock_http_response b/tests/resources/satellite_image_time_series_landsat8_mock_http_response new file mode 100644 index 0000000..e98cd04 --- /dev/null +++ b/tests/resources/satellite_image_time_series_landsat8_mock_http_response @@ -0,0 +1,64 @@ +[ + { + "coverageType": "CLEAR", + "image": { + "id": "IKc73hpUQ6w8nSGtmog9A7iGsm9eKYT2SN42mZg0JWO", + "availableBands": [ + "Nir", + "Red", + "Blue", + "Green" + ], + "sensor": "LANDSAT_8", + "soilMaterial": "BARE", + "spatialResolution": 15.0, + "weather": "COLD", + "zenithAngleInDegree": 0.0, + "date": "2022-11-30" + }, + "maps": [ + { + "type": "INSEASON_NDVI" + } + ], + "seasonField": { + "id": "d1l2nqm", + "customerExternalId": null, + "externalIds": { + "id": "3Ec2mBmZRLcrLfChu9ZlJz", + "legacY_ID_NA": "d1l2nqm" + } + } + }, + { + "coverageType": "CLEAR", + "image": { + "id": "IKc73hpUQ6uPitMqTFtBQGpp6rcDKT21cEHm34LPQc0", + "availableBands": [ + "Nir", + "Red", + "Blue", + "Green" + ], + "sensor": "LANDSAT_9", + "soilMaterial": "VEGETATION", + "spatialResolution": 15.0, + "weather": "WET", + "zenithAngleInDegree": 0.0, + "date": "2022-05-11" + }, + "maps": [ + { + "type": "INSEASON_NDVI" + } + ], + "seasonField": { + "id": "d1l2nqm", + "customerExternalId": null, + "externalIds": { + "id": "3Ec2mBmZRLcrLfChu9ZlJz", + "legacY_ID_NA": "d1l2nqm" + } + } + } +] \ No newline at end of file diff --git a/tests/resources/satellite_image_time_series_modis_ndvi_mock_http_response b/tests/resources/satellite_image_time_series_modis_ndvi_mock_http_response new file mode 100644 index 0000000..afbf8c3 --- /dev/null +++ b/tests/resources/satellite_image_time_series_modis_ndvi_mock_http_response @@ -0,0 +1,128 @@ +[ + { + "index": "NDVI", + "value": 0.18119788, + "date": "2020-01-01", + "pixel": { + "id": "mh11v4i225j4612", + "coverageRatio": 0.95 + } + }, + { + "index": "NDVI", + "value": 0.19871489, + "date": "2020-01-01", + "pixel": { + "id": "mh11v4i226j4612", + "coverageRatio": 1.0 + } + }, + { + "index": "NDVI", + "value": 0.19149646, + "date": "2020-01-02", + "pixel": { + "id": "mh11v4i225j4612", + "coverageRatio": 0.95 + } + }, + { + "index": "NDVI", + "value": 0.20834241, + "date": "2020-01-02", + "pixel": { + "id": "mh11v4i226j4612", + "coverageRatio": 1.0 + } + }, + { + "index": "NDVI", + "value": 0.20124013, + "date": "2020-01-03", + "pixel": { + "id": "mh11v4i225j4612", + "coverageRatio": 0.95 + } + }, + { + "index": "NDVI", + "value": 0.2174293, + "date": "2020-01-03", + "pixel": { + "id": "mh11v4i226j4612", + "coverageRatio": 1.0 + } + }, + { + "index": "NDVI", + "value": 0.21034396, + "date": "2020-01-04", + "pixel": { + "id": "mh11v4i225j4612", + "coverageRatio": 0.95 + } + }, + { + "index": "NDVI", + "value": 0.22589585, + "date": "2020-01-04", + "pixel": { + "id": "mh11v4i226j4612", + "coverageRatio": 1.0 + } + }, + { + "index": "NDVI", + "value": 0.21874636, + "date": "2020-01-05", + "pixel": { + "id": "mh11v4i225j4612", + "coverageRatio": 0.95 + } + }, + { + "index": "NDVI", + "value": 0.23368648, + "date": "2020-01-05", + "pixel": { + "id": "mh11v4i226j4612", + "coverageRatio": 1.0 + } + }, + { + "index": "NDVI", + "value": 0.22640644, + "date": "2020-01-06", + "pixel": { + "id": "mh11v4i225j4612", + "coverageRatio": 0.95 + } + }, + { + "index": "NDVI", + "value": 0.24076674, + "date": "2020-01-06", + "pixel": { + "id": "mh11v4i226j4612", + "coverageRatio": 1.0 + } + }, + { + "index": "NDVI", + "value": 0.23330155, + "date": "2020-01-07", + "pixel": { + "id": "mh11v4i225j4612", + "coverageRatio": 0.95 + } + }, + { + "index": "NDVI", + "value": 0.24712055, + "date": "2020-01-07", + "pixel": { + "id": "mh11v4i226j4612", + "coverageRatio": 1.0 + } + } +] \ No newline at end of file diff --git a/tests/resources/time_series_modis_ndvi_mock_http_response b/tests/resources/time_series_modis_ndvi_mock_http_response new file mode 100644 index 0000000..36688b1 --- /dev/null +++ b/tests/resources/time_series_modis_ndvi_mock_http_response @@ -0,0 +1,37 @@ +[ + { + "index": "NDVI", + "value": 0.19018096, + "date": "2020-01-01" + }, + { + "index": "NDVI", + "value": 0.20013541, + "date": "2020-01-02" + }, + { + "index": "NDVI", + "value": 0.20954226, + "date": "2020-01-03" + }, + { + "index": "NDVI", + "value": 0.21831929, + "date": "2020-01-04" + }, + { + "index": "NDVI", + "value": 0.22640796, + "date": "2020-01-05" + }, + { + "index": "NDVI", + "value": 0.2337707, + "date": "2020-01-06" + }, + { + "index": "NDVI", + "value": 0.24038822, + "date": "2020-01-07" + } + ] \ No newline at end of file diff --git a/tests/resources/time_series_weather_forecast_daily_mock_http_response b/tests/resources/time_series_weather_forecast_daily_mock_http_response new file mode 100644 index 0000000..3a11f13 --- /dev/null +++ b/tests/resources/time_series_weather_forecast_daily_mock_http_response @@ -0,0 +1,80 @@ +[ + { + "precipitation": { + "cumulative": 0.0, + "probabilities": 10.0 + }, + "temperature": { + "standard": 67.20799998623355, + "standardMax": 78.97999997681599 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2023-04-28T00:00:00Z", + "weatherType": "FORECAST_DAILY" + }, + { + "precipitation": { + "cumulative": 0.610236220472441, + "probabilities": 79.0 + }, + "temperature": { + "standard": 62.455999990035174, + "standardMax": 68.35999998531203 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2023-04-29T00:00:00Z", + "weatherType": "FORECAST_DAILY" + }, + { + "precipitation": { + "cumulative": 0.30708661417322836, + "probabilities": 70.0 + }, + "temperature": { + "standard": 58.927999992857615, + "standardMax": 65.11999998790401 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2023-04-30T00:00:00Z", + "weatherType": "FORECAST_DAILY" + }, + { + "precipitation": { + "cumulative": 0.11811023622047245, + "probabilities": 70.0 + }, + "temperature": { + "standard": 57.18199999425436, + "standardMax": 64.30999998855202 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2023-05-01T00:00:00Z", + "weatherType": "FORECAST_DAILY" + }, + { + "precipitation": { + "cumulative": 0.007874015748031496, + "probabilities": 13.9 + }, + "temperature": { + "standard": 57.361999994110406, + "standardMax": 67.54999998595994 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2023-05-02T00:00:00Z", + "weatherType": "FORECAST_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0, + "probabilities": 0.0 + }, + "temperature": { + "standard": 60.583999991532735, + "standardMax": 71.68999998264796 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2023-05-03T00:00:00Z", + "weatherType": "FORECAST_DAILY" + } +] \ No newline at end of file diff --git a/tests/resources/time_series_weather_historical_daily_mock_http_response b/tests/resources/time_series_weather_historical_daily_mock_http_response new file mode 100644 index 0000000..7eb9fd1 --- /dev/null +++ b/tests/resources/time_series_weather_historical_daily_mock_http_response @@ -0,0 +1,4394 @@ +[ + { + "precipitation": { + "cumulative": 0.027559055118110236 + }, + "temperature": { + "standard": 39.12800000869761, + "standardMax": 43.394000005284816 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-01T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.011811023622047244 + }, + "temperature": { + "standard": 34.934000012052735, + "standardMax": 38.89400000888482 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-02T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.05905511811023623 + }, + "temperature": { + "standard": 37.220000010224005, + "standardMax": 46.580000002735986 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-03T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.027559055118110236 + }, + "temperature": { + "standard": 36.57200001074238, + "standardMax": 40.42400000766076 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-04T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.003937007874015748 + }, + "temperature": { + "standard": 35.7620000113904, + "standardMax": 37.004000010396794 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-05T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 36.248000011001565, + "standardMax": 42.0620000063504 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-06T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 30.326000015739233, + "standardMax": 39.47000000842401 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-07T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 29.426000016459234, + "standardMax": 38.534000009172736 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-08T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.003937007874015748 + }, + "temperature": { + "standard": 31.08200001513436, + "standardMax": 36.15800001107355 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-09T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 32.360000014112025, + "standardMax": 38.10200000951842 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-10T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 27.626000017899234, + "standardMax": 34.23200001261436 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-11T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 34.646000012283196, + "standardMax": 46.1120000031104 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-12T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.015748031496062992 + }, + "temperature": { + "standard": 46.50800000279355, + "standardMax": 51.745999998603196 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-13T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.043307086614173235 + }, + "temperature": { + "standard": 46.40000000287994, + "standardMax": 49.712000000230404 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-14T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.03937007874015748 + }, + "temperature": { + "standard": 45.80600000335517, + "standardMax": 49.58600000033122 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-15T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 37.9040000096768, + "standardMax": 45.626000003499236 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-16T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.1889763779527559 + }, + "temperature": { + "standard": 45.158000003873546, + "standardMax": 49.74800000020157 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-17T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.003937007874015748 + }, + "temperature": { + "standard": 36.770000010584006, + "standardMax": 49.568000000345634 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-18T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 40.13600000789121, + "standardMax": 60.36799999170563 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-19T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 43.16000000547203, + "standardMax": 51.09799999912157 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-20T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.011811023622047244 + }, + "temperature": { + "standard": 52.789999997767964, + "standardMax": 58.83799999292959 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-21T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.40551181102362205 + }, + "temperature": { + "standard": 47.4620000020304, + "standardMax": 54.625999996299235 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-22T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.5118110236220472 + }, + "temperature": { + "standard": 44.99600000400319, + "standardMax": 50.14399999988482 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-23T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.2362204724409449 + }, + "temperature": { + "standard": 43.88000000489598, + "standardMax": 49.85600000011517 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-24T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.3818897637795276 + }, + "temperature": { + "standard": 45.19400000384482, + "standardMax": 48.506000001195176 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-25T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.011811023622047244 + }, + "temperature": { + "standard": 39.020000008784, + "standardMax": 48.23600000141121 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-26T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.3307086614173228 + }, + "temperature": { + "standard": 52.195999998243195, + "standardMax": 55.48999999560797 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-27T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.003937007874015748 + }, + "temperature": { + "standard": 56.22799999501761, + "standardMax": 63.80599998895517 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-28T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.3937007874015748 + }, + "temperature": { + "standard": 54.49999999639994, + "standardMax": 58.819999992944005 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-29T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.5433070866141733 + }, + "temperature": { + "standard": 51.13399999909274, + "standardMax": 53.97799999681761 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-30T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.9921259842519685 + }, + "temperature": { + "standard": 51.583999998732736, + "standardMax": 55.14799999588157 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-01-31T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.26377952755905515 + }, + "temperature": { + "standard": 52.789999997767964, + "standardMax": 54.84199999612634 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-02-01T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.01968503937007874 + }, + "temperature": { + "standard": 56.947999994441574, + "standardMax": 67.85599998571517 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-02-02T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 51.78199999857436, + "standardMax": 58.54999999315994 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-02-03T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 52.77199999778238, + "standardMax": 61.84399999052482 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-02-04T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 50.773999999380756, + "standardMax": 56.87599999449924 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-02-05T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.4724409448818898 + }, + "temperature": { + "standard": 49.98200000001436, + "standardMax": 52.699999997839946 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-02-06T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.05905511811023623 + }, + "temperature": { + "standard": 44.99600000400319, + "standardMax": 49.622000000302386 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-02-07T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.15748031496062992 + }, + "temperature": { + "standard": 46.74200000260634, + "standardMax": 52.82599999773924 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-02-08T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.15748031496062992 + }, + "temperature": { + "standard": 46.95800000243355, + "standardMax": 49.85600000011517 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-02-09T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.1968503937007874 + }, + "temperature": { + "standard": 45.320000003744006, + "standardMax": 49.04600000076319 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-02-10T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.051181102362204724 + }, + "temperature": { + "standard": 49.676000000259236, + "standardMax": 57.54199999396634 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-02-11T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.06692913385826771 + }, + "temperature": { + "standard": 49.514000000388776, + "standardMax": 56.191999995046345 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-02-12T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 47.82200000174238, + "standardMax": 52.35799999811355 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-02-13T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 43.700000005039946, + "standardMax": 53.905999996875174 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-02-14T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 44.456000004435175, + "standardMax": 56.15599999507518 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-02-15T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 46.832000002534365, + "standardMax": 61.98799999040959 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-02-16T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 51.583999998732736, + "standardMax": 64.50799998839355 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-02-17T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 52.80799999775355, + "standardMax": 66.34399998692481 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-02-18T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 51.87199999850238, + "standardMax": 63.823999988940756 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-02-19T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 49.964000000028776, + "standardMax": 57.451999994038424 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-02-20T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.003937007874015748 + }, + "temperature": { + "standard": 51.70999999863203, + "standardMax": 58.20799999343355 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-02-21T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.047244094488188976 + }, + "temperature": { + "standard": 50.75599999939517, + "standardMax": 52.42999999805598 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-02-22T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 50.35999999971203, + "standardMax": 63.30199998935842 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-02-23T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 53.58199999713436, + "standardMax": 67.33399998613274 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-02-24T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 50.881999999294365, + "standardMax": 62.059999990352026 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-02-25T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 47.87600000169923, + "standardMax": 50.521999999582384 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-02-26T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 47.120000002304, + "standardMax": 56.65999999467203 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-02-27T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 44.25800000459355, + "standardMax": 58.06399999354878 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-02-28T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 48.56000000115203, + "standardMax": 61.82599999053924 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-01T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 50.03599999997122, + "standardMax": 61.57399999074076 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-02T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 49.316000000547156, + "standardMax": 58.49599999320319 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-03T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 51.385999998891215, + "standardMax": 64.23799998860959 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-04T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 49.87400000010076, + "standardMax": 60.745999991403195 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-05T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 44.906000004075175, + "standardMax": 49.22600000061924 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-06T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.003937007874015748 + }, + "temperature": { + "standard": 48.434000001252734, + "standardMax": 53.85199999691842 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-07T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.047244094488188976 + }, + "temperature": { + "standard": 47.06600000234715, + "standardMax": 50.6119999995104 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-08T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 44.600000004319945, + "standardMax": 51.637999998689594 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-09T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 44.07800000473761, + "standardMax": 58.96399999282878 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-10T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.015748031496062992 + }, + "temperature": { + "standard": 55.219999995824004, + "standardMax": 67.56799998594563 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-11T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.03543307086614173 + }, + "temperature": { + "standard": 49.92800000005761, + "standardMax": 54.19399999664482 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-12T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.031496062992125984 + }, + "temperature": { + "standard": 49.98200000001436, + "standardMax": 59.6119999923104 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-13T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.05511811023622047 + }, + "temperature": { + "standard": 48.2540000013968, + "standardMax": 53.707999997033546 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-14T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.011811023622047244 + }, + "temperature": { + "standard": 47.40800000207355, + "standardMax": 52.861999997710406 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-15T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 51.13399999909274, + "standardMax": 56.137999995089594 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-16T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.011811023622047244 + }, + "temperature": { + "standard": 51.13399999909274, + "standardMax": 55.99399999520482 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-17T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 43.89800000488157, + "standardMax": 49.19000000064796 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-18T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.1220472440944882 + }, + "temperature": { + "standard": 42.24200000620634, + "standardMax": 47.4620000020304 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-19T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 40.11800000790563, + "standardMax": 51.439999998847966 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-20T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 41.720000006624005, + "standardMax": 54.931999996054365 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-21T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 46.670000002664004, + "standardMax": 58.981999992814366 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-22T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 45.17600000385924, + "standardMax": 60.889999991287965 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-23T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 48.344000001324815, + "standardMax": 65.82199998734238 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-24T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 51.439999998847966, + "standardMax": 58.99999999279994 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-25T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 49.154000000676795, + "standardMax": 59.59399999232482 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-26T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.003937007874015748 + }, + "temperature": { + "standard": 50.19799999984157, + "standardMax": 59.14399999268482 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-27T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 52.08799999832959, + "standardMax": 69.02599998477923 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-28T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 55.29199999576634, + "standardMax": 70.21399998382878 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-29T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 57.667999993865635, + "standardMax": 74.29999998055995 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-30T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 59.1619999926704, + "standardMax": 73.61599998110715 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-03-31T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 57.253999994196796, + "standardMax": 70.50199998359842 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-04-01T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 57.18199999425436, + "standardMax": 70.77199998338239 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-04-02T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 55.09399999592482, + "standardMax": 64.72399998822075 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-04-03T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 48.506000001195176, + "standardMax": 63.40999998927203 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-04-04T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 52.051999998358426, + "standardMax": 66.4879999868096 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-04-05T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 48.21800000142563, + "standardMax": 55.633999995492736 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-04-06T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 41.25200000699842, + "standardMax": 53.68999999704796 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-04-07T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 47.984000001612735, + "standardMax": 65.33599998773121 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-04-08T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.06692913385826771 + }, + "temperature": { + "standard": 52.57399999794076, + "standardMax": 62.599999989919944 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-04-09T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.003937007874015748 + }, + "temperature": { + "standard": 55.03999999596797, + "standardMax": 65.55199998755842 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-04-10T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.08661417322834647 + }, + "temperature": { + "standard": 50.98999999920797, + "standardMax": 54.53599999637122 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-04-11T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 44.33000000453598, + "standardMax": 53.94199999684634 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-04-12T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 45.626000003499236, + "standardMax": 58.117999993505634 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-04-13T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 47.9120000016704, + "standardMax": 61.033999991172735 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-04-14T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 46.70600000263517, + "standardMax": 59.82799999213761 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-04-15T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 44.43800000444959, + "standardMax": 56.245999995003196 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-04-16T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 43.394000005284816, + "standardMax": 52.32199999814238 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-04-17T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 49.35200000051842, + "standardMax": 60.835999991331214 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-04-18T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 51.18799999904959, + "standardMax": 64.95799998803355 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-04-19T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 56.26399999498878, + "standardMax": 66.9379999864496 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-04-20T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 57.84799999372157, + "standardMax": 69.72799998421762 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-04-21T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 56.911999994470406, + "standardMax": 68.12599998549923 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-04-22T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 59.89999999207995, + "standardMax": 75.63199997949437 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-04-23T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 62.221999990222386, + "standardMax": 76.9459999784432 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-04-24T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 59.08999999272797, + "standardMax": 67.42399998606076 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-04-25T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.33858267716535434 + }, + "temperature": { + "standard": 53.88799999688959, + "standardMax": 58.78399999297274 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-04-26T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.06692913385826771 + }, + "temperature": { + "standard": 54.96799999602563, + "standardMax": 59.66599999226715 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-04-27T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.027559055118110236 + }, + "temperature": { + "standard": 56.443999994844816, + "standardMax": 63.28399998937274 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-04-28T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.22834645669291337 + }, + "temperature": { + "standard": 51.15199999907842, + "standardMax": 54.30199999655842 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-04-29T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.07086614173228346 + }, + "temperature": { + "standard": 52.195999998243195, + "standardMax": 56.71399999462878 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-04-30T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.2952755905511811 + }, + "temperature": { + "standard": 50.19799999984157, + "standardMax": 55.95799999523355 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-01T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 50.28799999976959, + "standardMax": 61.717999990625636 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-02T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 52.591999997926344, + "standardMax": 65.78599998737121 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-03T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 55.579999995535985, + "standardMax": 67.54999998595994 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-04T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.05511811023622047 + }, + "temperature": { + "standard": 55.92199999526238, + "standardMax": 62.725999989819236 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-05T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.031496062992125984 + }, + "temperature": { + "standard": 57.57799999393761, + "standardMax": 67.96399998562877 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-06T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.15354330708661418 + }, + "temperature": { + "standard": 58.819999992944005, + "standardMax": 68.07199998554239 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-07T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 66.32599998693924, + "standardMax": 81.53599997477122 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-08T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.31102362204724415 + }, + "temperature": { + "standard": 64.79599998816319, + "standardMax": 70.7539999833968 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-09T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.3346456692913386 + }, + "temperature": { + "standard": 56.73199999461436, + "standardMax": 70.80799998335355 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-10T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.40157480314960636 + }, + "temperature": { + "standard": 50.269999999784005, + "standardMax": 57.79399999376482 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-11T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.06692913385826771 + }, + "temperature": { + "standard": 53.815999996947156, + "standardMax": 67.62199998590238 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-12T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.14173228346456693 + }, + "temperature": { + "standard": 52.53799999796959, + "standardMax": 60.78199999137436 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-13T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.16929133858267717 + }, + "temperature": { + "standard": 53.79799999696157, + "standardMax": 61.46599999082716 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-14T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.45275590551181105 + }, + "temperature": { + "standard": 55.50799999559355, + "standardMax": 59.70199999223843 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-15T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.6299212598425197 + }, + "temperature": { + "standard": 56.443999994844816, + "standardMax": 59.73799999220959 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-16T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.07874015748031496 + }, + "temperature": { + "standard": 54.80599999615517, + "standardMax": 60.76399999138878 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-17T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.13385826771653542 + }, + "temperature": { + "standard": 51.529999998775985, + "standardMax": 59.86399999210878 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-18T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.015748031496062992 + }, + "temperature": { + "standard": 53.99599999680319, + "standardMax": 62.059999990352026 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-19T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 55.939999995247966, + "standardMax": 71.97799998241761 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-20T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.3346456692913386 + }, + "temperature": { + "standard": 53.04199999756634, + "standardMax": 61.411999990870406 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-21T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.007874015748031496 + }, + "temperature": { + "standard": 52.051999998358426, + "standardMax": 58.513999993188776 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-22T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 54.78799999616959, + "standardMax": 62.815999989747155 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-23T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.051181102362204724 + }, + "temperature": { + "standard": 52.645999997883195, + "standardMax": 60.09799999192157 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-24T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 54.91399999606878, + "standardMax": 61.89799999048157 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-25T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 53.56399999714878, + "standardMax": 65.94799998724157 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-26T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 60.385999991691214, + "standardMax": 74.06599998074715 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-27T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 65.53399998757274, + "standardMax": 75.86599997930716 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-28T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.01968503937007874 + }, + "temperature": { + "standard": 65.51599998758715, + "standardMax": 75.63199997949437 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-29T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.4488188976377953 + }, + "temperature": { + "standard": 65.64199998748634, + "standardMax": 75.52399997958076 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-30T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 69.43999998444797, + "standardMax": 81.62599997469924 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-05-31T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.20078740157480318 + }, + "temperature": { + "standard": 66.8119999865504, + "standardMax": 75.7039999794368 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-06-01T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.003937007874015748 + }, + "temperature": { + "standard": 67.00999998639203, + "standardMax": 74.83999998012797 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-06-02T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.03543307086614173 + }, + "temperature": { + "standard": 64.68799998824959, + "standardMax": 73.9039999808768 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-06-03T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.84251968503937 + }, + "temperature": { + "standard": 58.44199999324634, + "standardMax": 66.79399998656483 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-06-04T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 60.691999991446345, + "standardMax": 68.48599998521122 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-06-05T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 62.563999989948776, + "standardMax": 73.05799998155355 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-06-06T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 64.66999998826401, + "standardMax": 75.97399997922076 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-06-07T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 66.19999998703994, + "standardMax": 79.48399997641273 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-06-08T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 68.3959999852832, + "standardMax": 81.21199997503041 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-06-09T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 68.79199998496634, + "standardMax": 81.24799997500158 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-06-10T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 68.0539999855568, + "standardMax": 79.78999997616796 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-06-11T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 68.59399998512482, + "standardMax": 77.82799997773762 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-06-12T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 74.73199998021437, + "standardMax": 88.19599996944319 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-06-13T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 72.93199998165436, + "standardMax": 86.48599997081122 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-06-14T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 75.18199997985437, + "standardMax": 86.75599997059518 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-06-15T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 75.75799997939355, + "standardMax": 89.76199996819041 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-06-16T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.25984251968503935 + }, + "temperature": { + "standard": 68.44999998523994, + "standardMax": 75.95599997923517 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-06-17T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 69.169999984664, + "standardMax": 79.35799997651355 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-06-18T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.17322834645669294 + }, + "temperature": { + "standard": 71.11399998310878, + "standardMax": 79.33999997652796 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-06-19T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.14960629921259844 + }, + "temperature": { + "standard": 70.3039999837568, + "standardMax": 77.64799997788157 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-06-20T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.15354330708661418 + }, + "temperature": { + "standard": 64.63399998829274, + "standardMax": 73.07599998153924 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-06-21T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.031496062992125984 + }, + "temperature": { + "standard": 62.617999989905634, + "standardMax": 69.72799998421762 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-06-22T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.15748031496062992 + }, + "temperature": { + "standard": 59.75599999219517, + "standardMax": 64.09399998872482 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-06-23T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 62.005999990395175, + "standardMax": 70.32199998374239 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-06-24T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 65.2459999878032, + "standardMax": 74.53399998037274 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-06-25T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.1377952755905512 + }, + "temperature": { + "standard": 68.19799998544157, + "standardMax": 83.89399997288483 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-06-26T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0984251968503937 + }, + "temperature": { + "standard": 61.105999991115176, + "standardMax": 64.18399998865274 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-06-27T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.09448818897637795 + }, + "temperature": { + "standard": 61.77199999058238, + "standardMax": 69.56599998434716 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-06-28T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.03543307086614173 + }, + "temperature": { + "standard": 61.3039999909568, + "standardMax": 66.2539999869968 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-06-29T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 64.36399998850878, + "standardMax": 72.48199998201436 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-06-30T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 67.54999998595994, + "standardMax": 79.73599997621122 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-01T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 71.77999998257599, + "standardMax": 85.819999971344 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-02T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.8503937007874016 + }, + "temperature": { + "standard": 69.83599998413122, + "standardMax": 76.42399997886076 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-03T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.07086614173228346 + }, + "temperature": { + "standard": 67.2619999861904, + "standardMax": 73.92199998086238 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-04T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 71.67199998266238, + "standardMax": 81.75199997459842 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-05T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.031496062992125984 + }, + "temperature": { + "standard": 65.73199998741437, + "standardMax": 74.08399998073274 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-06T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.11811023622047245 + }, + "temperature": { + "standard": 62.02399999038076, + "standardMax": 71.52799998277762 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-07T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 61.91599999046716, + "standardMax": 68.719999985024 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-08T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 65.85799998731355, + "standardMax": 76.09999997911994 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-09T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 64.70599998823518, + "standardMax": 74.28199998057437 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-10T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.007874015748031496 + }, + "temperature": { + "standard": 67.8379999857296, + "standardMax": 79.77199997618239 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-11T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.12992125984251968 + }, + "temperature": { + "standard": 61.17799999105761, + "standardMax": 66.18199998705437 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-12T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.531496062992126 + }, + "temperature": { + "standard": 59.125999992699235, + "standardMax": 64.77799998817761 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-13T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.3582677165354331 + }, + "temperature": { + "standard": 60.09799999192157, + "standardMax": 64.61599998830715 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-14T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 63.39199998928634, + "standardMax": 70.89799998328157 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-15T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 66.57799998673761, + "standardMax": 77.46799997802563 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-16T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 69.1879999846496, + "standardMax": 79.32199997654239 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-17T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 70.44799998364157, + "standardMax": 83.1379999734896 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-18T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 72.57199998194238, + "standardMax": 86.5039999707968 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-19T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 75.28999997976797, + "standardMax": 88.66399996906878 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-20T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 74.1379999806896, + "standardMax": 83.8039999729568 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-21T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 76.09999997911994, + "standardMax": 89.29399996856482 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-22T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 71.27599998297924, + "standardMax": 78.8539999769168 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-23T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 67.18999998624797, + "standardMax": 75.2539999797968 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-24T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 65.53399998757274, + "standardMax": 73.18399998145274 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-25T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 67.06399998634878, + "standardMax": 76.62199997870239 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-26T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.4173228346456693 + }, + "temperature": { + "standard": 65.73199998741437, + "standardMax": 74.10199998071843 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-27T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.027559055118110236 + }, + "temperature": { + "standard": 66.45199998683843, + "standardMax": 71.86999998250401 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-28T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 69.20599998463517, + "standardMax": 77.55799997795356 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-29T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.08661417322834647 + }, + "temperature": { + "standard": 66.45199998683843, + "standardMax": 71.38399998289275 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-30T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.17716535433070865 + }, + "temperature": { + "standard": 58.315999993347155, + "standardMax": 63.03199998957436 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-07-31T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.003937007874015748 + }, + "temperature": { + "standard": 61.44799999084157, + "standardMax": 67.45999998603203 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-01T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 65.08399998793274, + "standardMax": 76.11799997910563 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-02T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.027559055118110236 + }, + "temperature": { + "standard": 64.63399998829274, + "standardMax": 71.90599998247518 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-03T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.2874015748031496 + }, + "temperature": { + "standard": 66.43399998685274, + "standardMax": 73.54399998116482 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-04T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.003937007874015748 + }, + "temperature": { + "standard": 69.02599998477923, + "standardMax": 79.32199997654239 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-05T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 66.8119999865504, + "standardMax": 70.24999998379995 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-06T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.26771653543307083 + }, + "temperature": { + "standard": 64.68799998824959, + "standardMax": 71.38399998289275 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-07T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 64.52599998837924, + "standardMax": 72.71599998182715 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-08T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 69.42199998446239, + "standardMax": 81.12199997510238 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-09T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 73.68799998104959, + "standardMax": 84.09199997272634 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-10T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 75.54199997956634, + "standardMax": 87.51199996999041 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-11T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.007874015748031496 + }, + "temperature": { + "standard": 76.62199997870239, + "standardMax": 91.32799996693761 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-12T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 74.31799998054564, + "standardMax": 84.77599997217924 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-13T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 79.17799997665762, + "standardMax": 92.96599996562716 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-14T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.003937007874015748 + }, + "temperature": { + "standard": 72.03199998237436, + "standardMax": 77.98999997760797 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-15T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.027559055118110236 + }, + "temperature": { + "standard": 67.00999998639203, + "standardMax": 73.07599998153924 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-16T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 66.16399998706878, + "standardMax": 73.4539999812368 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-17T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 64.9039999880768, + "standardMax": 74.15599998067518 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-18T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 67.69399998584483, + "standardMax": 76.96399997842877 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-19T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 71.40199998287842, + "standardMax": 84.12799997269761 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-20T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 73.25599998139518, + "standardMax": 84.34399997252483 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-21T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 69.33199998453436, + "standardMax": 76.80199997855843 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-22T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 70.05199998395842, + "standardMax": 79.05199997675842 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-23T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 69.45799998443356, + "standardMax": 79.32199997654239 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-24T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 70.93399998325273, + "standardMax": 82.6879999738496 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-25T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 73.0039999815968, + "standardMax": 85.3879999716896 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-26T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 68.70199998503843, + "standardMax": 79.68199997625436 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-27T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 66.27199998698238, + "standardMax": 76.98199997841436 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-28T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 66.00199998719843, + "standardMax": 78.13399997749273 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-29T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 66.43399998685274, + "standardMax": 78.7459999770032 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-30T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 67.89199998568634, + "standardMax": 80.50999997559202 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-08-31T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 69.11599998470716, + "standardMax": 80.41999997566401 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-09-01T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.3228346456692914 + }, + "temperature": { + "standard": 67.20799998623355, + "standardMax": 74.15599998067518 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-09-02T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.07086614173228346 + }, + "temperature": { + "standard": 67.18999998624797, + "standardMax": 76.62199997870239 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-09-03T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 69.07999998473599, + "standardMax": 80.14999997587995 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-09-04T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 73.83199998093437, + "standardMax": 87.27799997017762 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-09-05T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 77.93599997765122, + "standardMax": 91.77799996657761 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-09-06T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 79.28599997657122, + "standardMax": 92.4619999660304 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-09-07T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 1.3070866141732285 + }, + "temperature": { + "standard": 72.94999998163995, + "standardMax": 83.26399997338878 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-09-08T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.07480314960629922 + }, + "temperature": { + "standard": 68.7379999850096, + "standardMax": 75.3619999797104 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-09-09T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.023622047244094488 + }, + "temperature": { + "standard": 67.2619999861904, + "standardMax": 74.10199998071843 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-09-10T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 68.46799998522563, + "standardMax": 77.75599997779517 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-09-11T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 71.67199998266238, + "standardMax": 81.76999997458401 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-09-12T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.011811023622047244 + }, + "temperature": { + "standard": 74.17399998066075, + "standardMax": 88.71799996902564 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-09-13T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.1220472440944882 + }, + "temperature": { + "standard": 73.99399998080482, + "standardMax": 84.34399997252483 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-09-14T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.36220472440944884 + }, + "temperature": { + "standard": 70.33999998372796, + "standardMax": 79.41199997647041 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-09-15T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.031496062992125984 + }, + "temperature": { + "standard": 65.9119999872704, + "standardMax": 71.88799998248959 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-09-16T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 64.65199998827842, + "standardMax": 75.63199997949437 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-09-17T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.9960629921259843 + }, + "temperature": { + "standard": 60.385999991691214, + "standardMax": 62.38399999009274 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-09-18T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.12598425196850394 + }, + "temperature": { + "standard": 61.37599999089924, + "standardMax": 69.13399998469274 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-09-19T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.1889763779527559 + }, + "temperature": { + "standard": 59.80999999215203, + "standardMax": 66.82999998653598 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-09-20T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.01968503937007874 + }, + "temperature": { + "standard": 58.927999992857615, + "standardMax": 65.47999998761598 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-09-21T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 62.18599999025122, + "standardMax": 72.60799998191355 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-09-22T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 66.28999998696797, + "standardMax": 75.27199997978238 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-09-23T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 66.63199998669437, + "standardMax": 76.69399997864483 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-09-24T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 1.1023622047244095 + }, + "temperature": { + "standard": 68.3779999852976, + "standardMax": 79.57399997634076 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-09-25T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.007874015748031496 + }, + "temperature": { + "standard": 65.78599998737121, + "standardMax": 75.12799997989761 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-09-26T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 65.85799998731355, + "standardMax": 74.38999998048797 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-09-27T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.2795275590551181 + }, + "temperature": { + "standard": 62.617999989905634, + "standardMax": 69.67399998426076 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-09-28T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.003937007874015748 + }, + "temperature": { + "standard": 61.42999999085599, + "standardMax": 66.34399998692481 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-09-29T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.003937007874015748 + }, + "temperature": { + "standard": 59.0539999927568, + "standardMax": 67.80199998575843 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-09-30T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 60.0619999919504, + "standardMax": 71.77999998257599 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-01T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 66.82999998653598, + "standardMax": 80.11399997590878 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-02T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.5708661417322836 + }, + "temperature": { + "standard": 61.39399999088482, + "standardMax": 70.42999998365599 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-03T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 57.01999999438401, + "standardMax": 64.0039999887968 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-04T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.7519685039370079 + }, + "temperature": { + "standard": 57.649999993879945, + "standardMax": 65.58799998752959 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-05T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.007874015748031496 + }, + "temperature": { + "standard": 57.10999999431203, + "standardMax": 64.27399998858075 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-06T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 55.48999999560797, + "standardMax": 64.23799998860959 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-07T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 55.41799999566563, + "standardMax": 65.58799998752959 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-08T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 55.92199999526238, + "standardMax": 64.0039999887968 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-09T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 57.57799999393761, + "standardMax": 64.72399998822075 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-10T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 53.905999996875174, + "standardMax": 66.469999986824 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-11T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 52.44799999804157, + "standardMax": 64.70599998823518 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-12T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 52.3039999981568, + "standardMax": 62.29399999016482 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-13T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 52.645999997883195, + "standardMax": 65.10199998791842 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-14T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 55.97599999521923, + "standardMax": 68.3779999852976 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-15T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 55.84999999531995, + "standardMax": 65.13799998788959 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-16T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 58.65799999307355, + "standardMax": 72.06799998234564 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-17T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 60.079999991935985, + "standardMax": 72.64399998188482 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-18T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 62.49199999000634, + "standardMax": 74.26399998058878 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-19T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 65.92999998725598, + "standardMax": 76.65799997867356 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-20T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.003937007874015748 + }, + "temperature": { + "standard": 60.27799999177761, + "standardMax": 64.0039999887968 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-21T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.03543307086614173 + }, + "temperature": { + "standard": 54.64399999628482, + "standardMax": 61.141999991086344 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-22T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 51.45799999883355, + "standardMax": 61.98799999040959 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-23T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 52.141999998286344, + "standardMax": 66.18199998705437 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-24T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 53.13199999749436, + "standardMax": 65.3539999877168 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-25T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 56.083999995132736, + "standardMax": 63.22999998941599 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-26T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 53.94199999684634, + "standardMax": 63.30199998935842 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-27T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 55.65199999547843, + "standardMax": 67.99999998559994 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-28T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.03937007874015748 + }, + "temperature": { + "standard": 55.75999999539203, + "standardMax": 62.11399999030878 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-29T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.09055118110236221 + }, + "temperature": { + "standard": 58.89199999288634, + "standardMax": 64.29199998856635 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-30T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.6456692913385828 + }, + "temperature": { + "standard": 60.65599999147518, + "standardMax": 72.94999998163995 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-10-31T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.17716535433070865 + }, + "temperature": { + "standard": 54.463999996428775, + "standardMax": 58.44199999324634 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-11-01T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.7283464566929134 + }, + "temperature": { + "standard": 53.959999996832025, + "standardMax": 63.03199998957436 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-11-02T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0826771653543307 + }, + "temperature": { + "standard": 48.47000000122401, + "standardMax": 53.79799999696157 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-11-03T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 46.34600000292319, + "standardMax": 52.71799999782563 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-11-04T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 43.700000005039946, + "standardMax": 49.910000000072024 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-11-05T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 41.37800000689761, + "standardMax": 48.57800000113761 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-11-06T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.011811023622047244 + }, + "temperature": { + "standard": 44.456000004435175, + "standardMax": 50.86399999930878 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-11-07T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.01968503937007874 + }, + "temperature": { + "standard": 49.69400000024482, + "standardMax": 54.067999996745634 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-11-08T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 43.700000005039946, + "standardMax": 50.08999999992797 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-11-09T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.003937007874015748 + }, + "temperature": { + "standard": 44.348000004521566, + "standardMax": 53.13199999749436 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-11-10T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 48.16400000146878, + "standardMax": 56.8039999945568 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-11-11T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 50.34199999972634, + "standardMax": 59.53999999236797 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-11-12T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.007874015748031496 + }, + "temperature": { + "standard": 52.60999999791203, + "standardMax": 57.055999994355176 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-11-13T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.11023622047244094 + }, + "temperature": { + "standard": 51.09799999912157, + "standardMax": 53.869999996904006 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-11-14T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 48.146000001483195, + "standardMax": 50.34199999972634 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-11-15T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.003937007874015748 + }, + "temperature": { + "standard": 47.246000002203196, + "standardMax": 51.09799999912157 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-11-16T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 45.95000000323994, + "standardMax": 48.97400000082076 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-11-17T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 47.3540000021168, + "standardMax": 54.78799999616959 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-11-18T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 44.85200000411842, + "standardMax": 55.4539999956368 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-11-19T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 44.52800000437761, + "standardMax": 53.40199999727842 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-11-20T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.027559055118110236 + }, + "temperature": { + "standard": 46.364000002908774, + "standardMax": 54.265999996587155 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-11-21T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.28346456692913385 + }, + "temperature": { + "standard": 43.62800000509761, + "standardMax": 49.38800000048959 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-11-22T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.007874015748031496 + }, + "temperature": { + "standard": 42.620000005904004, + "standardMax": 49.38800000048959 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-11-23T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.1377952755905512 + }, + "temperature": { + "standard": 45.572000003542385, + "standardMax": 48.84800000092157 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-11-24T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.17322834645669294 + }, + "temperature": { + "standard": 46.724000002620755, + "standardMax": 51.00799999919355 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-11-25T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.13385826771653542 + }, + "temperature": { + "standard": 42.29600000616319, + "standardMax": 45.14000000388796 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-11-26T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.5078740157480315 + }, + "temperature": { + "standard": 42.29600000616319, + "standardMax": 45.19400000384482 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-11-27T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0984251968503937 + }, + "temperature": { + "standard": 39.47000000842401, + "standardMax": 44.150000004679946 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-11-28T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.03937007874015748 + }, + "temperature": { + "standard": 38.28200000937436, + "standardMax": 46.166000003067154 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-11-29T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 39.99200000800634, + "standardMax": 47.8040000017568 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-11-30T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.18503937007874016 + }, + "temperature": { + "standard": 47.60600000191518, + "standardMax": 50.97199999922238 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-01T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.1062992125984252 + }, + "temperature": { + "standard": 43.14200000548634, + "standardMax": 45.608000003513546 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-02T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.01968503937007874 + }, + "temperature": { + "standard": 43.21400000542878, + "standardMax": 51.36799999890563 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-03T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.3188976377952756 + }, + "temperature": { + "standard": 49.47800000041761, + "standardMax": 52.789999997767964 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-04T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.5984251968503937 + }, + "temperature": { + "standard": 41.9540000064368, + "standardMax": 43.71800000502563 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-05T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.027559055118110236 + }, + "temperature": { + "standard": 45.212000003830404, + "standardMax": 51.25999999899203 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-06T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.2874015748031496 + }, + "temperature": { + "standard": 47.40800000207355, + "standardMax": 50.9539999992368 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-07T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.688976377952756 + }, + "temperature": { + "standard": 41.32400000694076, + "standardMax": 46.76000000259203 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-08T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.5157480314960631 + }, + "temperature": { + "standard": 40.65800000747355, + "standardMax": 49.568000000345634 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-09T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.6456692913385828 + }, + "temperature": { + "standard": 48.02000000158401, + "standardMax": 53.6539999970768 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-10T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.043307086614173235 + }, + "temperature": { + "standard": 45.39200000368634, + "standardMax": 48.52400000118076 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-11T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.003937007874015748 + }, + "temperature": { + "standard": 47.21000000223203, + "standardMax": 53.85199999691842 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-12T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 45.69800000344157, + "standardMax": 56.101999995118426 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-13T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 41.30600000695517, + "standardMax": 51.889999998487966 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-14T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 40.964000007228776, + "standardMax": 47.624000001900754 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-15T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 43.57400000514075, + "standardMax": 53.203999997436796 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-16T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 41.45000000683994, + "standardMax": 52.10599999831518 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-17T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 43.10600000551517, + "standardMax": 52.89799999768157 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-18T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 38.786000008971214, + "standardMax": 49.766000000187155 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-19T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 37.38200001009436, + "standardMax": 46.670000002664004 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-20T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 39.05600000875517, + "standardMax": 46.0040000031968 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-21T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 43.57400000514075, + "standardMax": 55.16599999586715 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-22T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 46.166000003067154, + "standardMax": 55.97599999521923 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-23T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 47.840000001727965, + "standardMax": 55.219999995824004 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-24T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.003937007874015748 + }, + "temperature": { + "standard": 47.85800000171355, + "standardMax": 57.451999994038424 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-25T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.007874015748031496 + }, + "temperature": { + "standard": 49.17200000066238, + "standardMax": 55.525999995579234 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-26T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.5157480314960631 + }, + "temperature": { + "standard": 52.68199999785436, + "standardMax": 57.12799999429761 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-27T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.28346456692913385 + }, + "temperature": { + "standard": 56.8039999945568, + "standardMax": 60.20599999183518 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-28T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.01968503937007874 + }, + "temperature": { + "standard": 57.97399999362076, + "standardMax": 63.64399998908482 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-29T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 54.1039999967168, + "standardMax": 59.179999992655986 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-30T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 52.35799999811355, + "standardMax": 62.77999998977599 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2021-12-31T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + }, + { + "precipitation": { + "cumulative": 0.0 + }, + "temperature": { + "standard": 51.15199999907842, + "standardMax": 63.28399998937274 + }, + "location": "POINT (0.0872845021171696 43.69457564315705)", + "date": "2022-01-01T00:00:00Z", + "weatherType": "HISTORICAL_DAILY" + } +] \ No newline at end of file diff --git a/tests/resources/weather_data_mock_http_response b/tests/resources/weather_data_mock_http_response new file mode 100644 index 0000000..8679d99 --- /dev/null +++ b/tests/resources/weather_data_mock_http_response @@ -0,0 +1,62 @@ +[ + { + "precipitation": { + "cumulative": 0.22834645669291338, + "probabilities": 72.0 + }, + "temperature": { + "standard": 71.47399998282076 + }, + "date": "2023-06-19T00:00:00Z" + }, + { + "precipitation": { + "cumulative": 0.3937007874015748, + "probabilities": 70.0 + }, + "temperature": { + "standard": 70.1959999838432 + }, + "date": "2023-06-20T00:00:00Z" + }, + { + "precipitation": { + "cumulative": 0.9645669291338583, + "probabilities": 70.0 + }, + "temperature": { + "standard": 68.25199998539843 + }, + "date": "2023-06-21T00:00:00Z" + }, + { + "precipitation": { + "cumulative": 0.37401574803149609, + "probabilities": 70.0 + }, + "temperature": { + "standard": 67.02799998637761 + }, + "date": "2023-06-22T00:00:00Z" + }, + { + "precipitation": { + "cumulative": 0.0, + "probabilities": 10.0 + }, + "temperature": { + "standard": 67.54999998595994 + }, + "date": "2023-06-23T00:00:00Z" + }, + { + "precipitation": { + "cumulative": 0.0, + "probabilities": 0.0 + }, + "temperature": { + "standard": 70.8619999833104 + }, + "date": "2023-06-24T00:00:00Z" + } +] \ No newline at end of file diff --git a/tests/test_helper.py b/tests/test_helper.py new file mode 100644 index 0000000..56b7c2a --- /dev/null +++ b/tests/test_helper.py @@ -0,0 +1,46 @@ +import logging +import requests_mock +import requests +import os + + +def load_data_from_textfile(file_name): + # valid path for all os system + file_path = os.path.join(os.path.dirname(__file__), f"resources/{file_name}").replace("\\", "/") + if os.path.isfile(file_path): + with open(file_path, 'r') as data: + return data.read() + else: + logging.error(f"Unable to read file: {file_name}") + + +def load_binary_data_from_zipfile(file_name): + # valid path for all os system + file_path = os.path.join(os.path.dirname(__file__), f"resources/{file_name}").replace("\\", "/") + if os.path.isfile(file_path): + with open(file_path, 'rb') as data: + return data.read() + else: + logging.error(f"Unable to read zip file: {file_name}") + + +def mock_http_response_text_content(method, content=None, status_code=200): + if method == "GET": + with requests_mock.Mocker() as m: + m.get('http://geosys.com', text=content) + return requests.get('http://geosys.com') + if method == "POST": + with requests_mock.Mocker() as m: + m.post('http://geosys.com', text=content, status_code= status_code) + return requests.post('http://geosys.com' ) + if method == "PATCH": + with requests_mock.Mocker() as m: + m.patch('http://geosys.com', text=content) + return requests.patch('http://geosys.com') + + +def mock_http_response_binary_content(method, binary_content=None): + if method == "GET": + with requests_mock.Mocker() as m: + m.get(url='http://geosys.com', content=binary_content) + return requests.get(url='http://geosys.com') diff --git a/tests/test_int_geosys.py b/tests/test_int_geosys.py new file mode 100644 index 0000000..35dc0a7 --- /dev/null +++ b/tests/test_int_geosys.py @@ -0,0 +1,307 @@ +from datetime import datetime +import pytest +from dateutil.relativedelta import relativedelta + +from geosyspy import Geosys +from dotenv import load_dotenv +import os +import datetime as dt +import numpy as np +from geosyspy.utils.constants import * + +# read .env file +load_dotenv() + +API_CLIENT_ID = os.getenv("API_CLIENT_ID") +API_CLIENT_SECRET = os.getenv("API_CLIENT_SECRET") +API_USERNAME = os.getenv("API_USERNAME") +API_PASSWORD = os.getenv("API_PASSWORD") + +POLYGON = "POLYGON((-91.17523978603823 40.29787117039518,-91.17577285022956 40.29199489606421,-91.167613719932 40.29199489606421,-91.1673028670095 40.29867040193312,-91.17523978603823 40.29787117039518))" + + +class TestGeosys: + client = Geosys(API_CLIENT_ID, + API_CLIENT_SECRET, + API_USERNAME, + API_PASSWORD, + Env.PREPROD, + Region.NA + ) + + prod_client = Geosys(API_CLIENT_ID, + API_CLIENT_SECRET, + API_USERNAME, + API_PASSWORD, + Env.PROD, + Region.NA + ) + # get list of available crops + crops = prod_client.get_available_crops() + + def test_authenticate(self): + credentials = self.client.http_client.get_access_token(); + assert {"access_token", "expires_in", "token_type", "scope", "expires_at", + "refresh_token"}.issubset(set(credentials.keys())) + assert credentials['access_token'] is not None + assert credentials['refresh_token'] is not None + assert credentials['expires_at'] > datetime.today().timestamp() + + def test_get_time_series_modis_ndvi(self): + start_date = dt.datetime.strptime("2020-01-01", "%Y-%m-%d") + end_date = dt.datetime.strptime("2020-01-07", "%Y-%m-%d") + + df = self.client.get_time_series( + POLYGON, start_date, end_date, SatelliteImageryCollection.MODIS, ["NDVI"] + ) + + assert df.index.name == "date" + assert "value" in df.columns + assert "index" in df.columns + assert len(df.index) == 7 + date_range = list(map(lambda x: x.strftime("%Y-%m-%d"), df.index)) + assert {"2020-01-01", "2020-01-02", "2020-01-03", "2020-01-04", "2020-01-05", "2020-01-06", + "2020-01-07"}.issubset(set(date_range)) + + def test_get_satellite_image_time_series_modis_ndvi(self): + start_date = dt.datetime.strptime("2020-01-01", "%Y-%m-%d") + end_date = dt.datetime.strptime("2020-01-07", "%Y-%m-%d") + POLYGON = "POLYGON((-91.29152885756007 40.39177489815265,-91.28403789132507 40.391776131485386,-91.28386736508233 40.389390758655935,-91.29143832829979 40.38874592864832,-91.29152885756007 40.39177489815265))" + df = self.client.get_satellite_image_time_series( + POLYGON, start_date, end_date, [SatelliteImageryCollection.MODIS], ["NDVI"] + ) + assert df.index.name == "date" + assert {"value", "index", "pixel.id"}.issubset(set(df.columns)) + assert np.all((df["index"].values == "NDVI")) + assert len(df.index) == 14 + + assert {"2020-01-01", "2020-01-02", "2020-01-03", "2020-01-04", "2020-01-05", "2020-01-06", + "2020-01-07"}.issubset(set(df.index)) + + assert {"mh11v4i225j4612", "mh11v4i226j4612"}.issubset(set(df["pixel.id"])) + + def test_get_satellite_coverage_image_references(self): + end_date = dt.date.today() + start_date = dt.date.today() + relativedelta(months=-12) + info, images_references = self.client.get_satellite_coverage_image_references( + POLYGON, start_date, end_date, + collections=[SatelliteImageryCollection.SENTINEL_2, SatelliteImageryCollection.LANDSAT_8, + SatelliteImageryCollection.LANDSAT_9]) + + assert {"coverageType", "image.id", "image.availableBands", "image.sensor", "image.soilMaterial", + "image.spatialResolution", "image.weather", "image.date", "seasonField.id"}.issubset(set(info.columns)) + + assert len(info) == len(images_references) + for i, image_info in info.iterrows(): + assert ( + image_info["image.date"], + image_info["image.sensor"], + ) in images_references + + def get_time_series_weather_historical_daily(self): + start_date = dt.datetime.strptime("2021-01-01", "%Y-%m-%d") + end_date = dt.datetime.strptime("2022-01-01", "%Y-%m-%d") + indicators = [ + "Precipitation", + "Temperature.Ground", + "Temperature.Standard", + "Temperature.StandardMax", + "Date", + ] + + df = self.client.get_time_series( + POLYGON, + start_date, + end_date, + WeatherTypeCollection.WEATHER_HISTORICAL_DAILY, + indicators, + ) + + assert {"precipitation.cumulative", "precipitation.probabilities", "temperature.ground", "temperature.standard", + "temperature.standardMax"}.issubset(set(df.columns)) + assert df.index.name == "date" + + # def test_get_metrics(self): + # + # lai_radar_polygon = "POLYGON((-52.72591542 -18.7395779,-52.72604885 -18.73951122,-52.72603114 -18.73908689,-52.71556835 -18.72490316,-52.71391916 -18.72612966,-52.71362802 -18.72623726,-52.71086473 -18.72804231,-52.72083542 -18.74173696,-52.72118937 -18.74159174,-52.72139229 -18.7418552,-52.72600257 -18.73969719,-52.72591542 -18.7395779))" + # schema_id = "LAI_RADAR" + # start_date = dt.datetime.strptime("2022-01-24", "%Y-%m-%d") + # end_date = dt.datetime.strptime("2022-01-30", "%Y-%m-%d") + # df = self.client.get_metrics(lai_radar_polygon, schema_id, start_date, end_date) + # + # assert set( + # [ + # "Values.RVI", + # "Values.LAI", + # "Schema.Id", + # ] + # ).issubset(set(df.columns)) + # assert set( + # [ + # "2022-01-24T00:00:00Z", + # "2022-01-25T00:00:00Z", + # "2022-01-26T00:00:00Z", + # "2022-01-27T00:00:00Z", + # "2022-01-28T00:00:00Z", + # "2022-01-29T00:00:00Z", + # "2022-01-30T00:00:00Z", + # ] + # ).issubset(set(df.index)) + # assert df.index.name == "date" + + def test_get_satellite_image_time_series(self): + start_date = dt.datetime.strptime("2022-05-01", "%Y-%m-%d") + end_date = dt.datetime.strptime("2023-04-28", "%Y-%m-%d") + dataset = self.client.get_satellite_image_time_series( + POLYGON, + start_date, + end_date, + collections=[SatelliteImageryCollection.SENTINEL_2, SatelliteImageryCollection.LANDSAT_8], + indicators=["Reflectance"], + ) + assert dict(dataset.dims) == {'band': 4, 'y': 51, 'x': 48, 'time': 1} + + def test_get_agriquest_weather_time_series(self): + start_date = "2022-05-01" + end_date = "2023-04-28" + dataset = self.client.get_agriquest_weather_block_data( + start_date=start_date, + end_date=end_date, + block_code=AgriquestBlocks.FRA_DEPARTEMENTS, + weather_type=AgriquestWeatherType.CUMULATIVE_PRECIPITATION + ) + assert dataset.keys()[0] == "AMU" + assert len(dataset["AMU"]) == 97 + + def test_get_agriquest_ndvi_time_series(self): + date = "2023-06-05" + dataset = self.client.get_agriquest_ndvi_block_data( + day_of_measure=date, + commodity_code=AgriquestCommodityCode.ALL_VEGETATION, + block_code=AgriquestBlocks.AMU_NORTH_AMERICA, + ) + assert dataset.keys()[0] == "AMU" + assert dataset.keys()[-1] == "NDVI" + + def test_get_harvest_analytics(self): + dataset = self.prod_client.get_harvest_analytics( + season_duration=215, + season_start_day=1, + season_start_month=4, + crop=self.crops._2ND_CORN, + year=2021, + geometry="POLYGON ((-56.785919346530768 -21.208154463301554 , -56.79078750820733 -21.206043784434833 , -56.790973809206818 -21.206069651656232 , -56.791373799079636 -21.197107091323097 , -56.785129186971687 -21.196010916846863 , -56.781397554331065 -21.19535575112814 , -56.777108478217059 -21.202038412606473 , -56.778435977920665 -21.211398619037478 , -56.785919346530768 -21.208154463301554))", + harvest_type=Harvest.HARVEST_HISTORICAL) + + assert dataset.keys()[0] == 'Values.harvest_year_1' + assert dataset.keys()[-1] == 'Schema.Id' + assert dataset.values[0][-1] == 'HISTORICAL_HARVEST' + + def test_get_emergence_analytics(self): + dataset = self.prod_client.get_emergence_analytics( + season_duration=215, + season_start_day=1, + season_start_month=4, + crop=self.crops._2ND_CORN, + year=2021, + geometry="POLYGON ((-56.785919346530768 -21.208154463301554 , -56.79078750820733 -21.206043784434833 , -56.790973809206818 -21.206069651656232 , -56.791373799079636 -21.197107091323097 , -56.785129186971687 -21.196010916846863 , -56.781397554331065 -21.19535575112814 , -56.777108478217059 -21.202038412606473 , -56.778435977920665 -21.211398619037478 , -56.785919346530768 -21.208154463301554))", + emergence_type=Emergence.EMERGENCE_IN_SEASON) + + assert dataset.keys()[0] == 'Values.EmergenceDate' + assert dataset.keys()[-1] == 'Schema.Id' + assert dataset.values[0][-1] == 'INSEASON_EMERGENCE' + + def test_get_potential_score_analytics(self): + dataset = self.prod_client.get_potential_score_analytics( + end_date="2022-03-06", + nb_historical_years=5, + season_duration=200, + season_start_day=1, + season_start_month=10, + crop=self.crops.CORN, + sowing_date="2021-10-01", + geometry="POLYGON ((-54.26027778 -25.38777778, -54.26027778 -25.37444444, -54.26 -25.37416667, -54.25972222 -25.37444444, -54.25944444 -25.37444444, -54.25888889 -25.37472222, -54.258611110000004 -25.37472222, -54.25888889 -25.375, -54.25888889 -25.37555555, -54.258611110000004 -25.37611111, -54.258611110000004 -25.38194444, -54.25833333 -25.38416667, -54.25694444 -25.38361111, -54.25694444 -25.38416667, -54.2575 -25.38416667, -54.2575 -25.38444444, -54.25777778 -25.38416667, -54.25807016 -25.384158120000002, -54.25805556 -25.38444444, -54.258077300000004 -25.38472206, -54.2575 -25.38527778, -54.25694444 -25.385, -54.256388890000004 -25.38361111, -54.25472222 -25.38305555, -54.25472222 -25.3825, -54.254166670000004 -25.38194444, -54.25444444 -25.38166667, -54.25472222 -25.38166667, -54.25472222 -25.37944444, -54.25277778 -25.37944444, -54.25277778 -25.38583333, -54.25419223 -25.3861539, -54.2539067 -25.38589216, -54.25388889 -25.385, -54.25444444 -25.38555555, -54.2547871 -25.385820770000002, -54.25472222 -25.38611111, -54.26027778 -25.38777778))" + ) + assert dataset.keys()[0] == 'Values.historical_potential_score' + assert dataset.keys()[-1] == 'Schema.Id' + assert dataset.values[0][-1] == 'POTENTIAL_SCORE' + + def test_get_greenness_analytics(self): + dataset = self.prod_client.get_greenness_analytics( + start_date="2022-01-15", + end_date="2022-05-31", + crop=self.crops.CORN, + sowing_date="2022-01-15", + geometry="POLYGON ((-54.26027778 -25.38777778, -54.26027778 -25.37444444, -54.26 -25.37416667, -54.25972222 -25.37444444, -54.25944444 -25.37444444, -54.25888889 -25.37472222, -54.258611110000004 -25.37472222, -54.25888889 -25.375, -54.25888889 -25.37555555, -54.258611110000004 -25.37611111, -54.258611110000004 -25.38194444, -54.25833333 -25.38416667, -54.25694444 -25.38361111, -54.25694444 -25.38416667, -54.2575 -25.38416667, -54.2575 -25.38444444, -54.25777778 -25.38416667, -54.25807016 -25.384158120000002, -54.25805556 -25.38444444, -54.258077300000004 -25.38472206, -54.2575 -25.38527778, -54.25694444 -25.385, -54.256388890000004 -25.38361111, -54.25472222 -25.38305555, -54.25472222 -25.3825, -54.254166670000004 -25.38194444, -54.25444444 -25.38166667, -54.25472222 -25.38166667, -54.25472222 -25.37944444, -54.25277778 -25.37944444, -54.25277778 -25.38583333, -54.25419223 -25.3861539, -54.2539067 -25.38589216, -54.25388889 -25.385, -54.25444444 -25.38555555, -54.2547871 -25.385820770000002, -54.25472222 -25.38611111, -54.26027778 -25.38777778))" + ) + assert dataset.keys()[0] == "Values.peak_found" + assert dataset.keys()[-1] == 'Schema.Id' + assert dataset.values[0][-1] == 'GREENNESS' + + def test_get_harvest_readinesss_analytics(self): + dataset = self.prod_client.get_harvest_readiness_analytics( + start_date="2022-01-15", + end_date="2022-05-31", + crop=self.crops.CORN, + sowing_date="2022-01-15", + geometry="POLYGON ((-54.26027778 -25.38777778, -54.26027778 -25.37444444, -54.26 -25.37416667, -54.25972222 -25.37444444, -54.25944444 -25.37444444, -54.25888889 -25.37472222, -54.258611110000004 -25.37472222, -54.25888889 -25.375, -54.25888889 -25.37555555, -54.258611110000004 -25.37611111, -54.258611110000004 -25.38194444, -54.25833333 -25.38416667, -54.25694444 -25.38361111, -54.25694444 -25.38416667, -54.2575 -25.38416667, -54.2575 -25.38444444, -54.25777778 -25.38416667, -54.25807016 -25.384158120000002, -54.25805556 -25.38444444, -54.258077300000004 -25.38472206, -54.2575 -25.38527778, -54.25694444 -25.385, -54.256388890000004 -25.38361111, -54.25472222 -25.38305555, -54.25472222 -25.3825, -54.254166670000004 -25.38194444, -54.25444444 -25.38166667, -54.25472222 -25.38166667, -54.25472222 -25.37944444, -54.25277778 -25.37944444, -54.25277778 -25.38583333, -54.25419223 -25.3861539, -54.2539067 -25.38589216, -54.25388889 -25.385, -54.25444444 -25.38555555, -54.2547871 -25.385820770000002, -54.25472222 -25.38611111, -54.26027778 -25.38777778))" + ) + assert dataset.keys()[0] == "Values.date" + assert dataset.keys()[-1] == 'Schema.Id' + assert dataset.values[0][-1] == 'HARVEST_READINESS' + + def test_get_planted_area_analytics(self): + dataset = self.prod_client.get_planted_area_analytics( + start_date="2022-01-15", + end_date="2022-05-31", + geometry="POLYGON ((-54.26027778 -25.38777778, -54.26027778 -25.37444444, -54.26 -25.37416667, -54.25972222 -25.37444444, -54.25944444 -25.37444444, -54.25888889 -25.37472222, -54.258611110000004 -25.37472222, -54.25888889 -25.375, -54.25888889 -25.37555555, -54.258611110000004 -25.37611111, -54.258611110000004 -25.38194444, -54.25833333 -25.38416667, -54.25694444 -25.38361111, -54.25694444 -25.38416667, -54.2575 -25.38416667, -54.2575 -25.38444444, -54.25777778 -25.38416667, -54.25807016 -25.384158120000002, -54.25805556 -25.38444444, -54.258077300000004 -25.38472206, -54.2575 -25.38527778, -54.25694444 -25.385, -54.256388890000004 -25.38361111, -54.25472222 -25.38305555, -54.25472222 -25.3825, -54.254166670000004 -25.38194444, -54.25444444 -25.38166667, -54.25472222 -25.38166667, -54.25472222 -25.37944444, -54.25277778 -25.37944444, -54.25277778 -25.38583333, -54.25419223 -25.3861539, -54.2539067 -25.38589216, -54.25388889 -25.385, -54.25444444 -25.38555555, -54.2547871 -25.385820770000002, -54.25472222 -25.38611111, -54.26027778 -25.38777778))" + ) + assert dataset.keys()[0] == "Values.planted_area" + assert dataset.keys()[-1] == 'Schema.Id' + assert dataset.values[0][-1] == 'PLANTED_AREA' + + def test_get_brazil_crop_id_analytics(self): + dataset = self.prod_client.get_brazil_crop_id_analytics( + start_date="2020-10-01", + end_date="2021-05-31", + season=CropIdSeason.SEASON_1, + geometry="POLYGON ((-54.26027778 -25.38777778, -54.26027778 -25.37444444, -54.26 -25.37416667, -54.25972222 -25.37444444, -54.25944444 -25.37444444, -54.25888889 -25.37472222, -54.258611110000004 -25.37472222, -54.25888889 -25.375, -54.25888889 -25.37555555, -54.258611110000004 -25.37611111, -54.258611110000004 -25.38194444, -54.25833333 -25.38416667, -54.25694444 -25.38361111, -54.25694444 -25.38416667, -54.2575 -25.38416667, -54.2575 -25.38444444, -54.25777778 -25.38416667, -54.25807016 -25.384158120000002, -54.25805556 -25.38444444, -54.258077300000004 -25.38472206, -54.2575 -25.38527778, -54.25694444 -25.385, -54.256388890000004 -25.38361111, -54.25472222 -25.38305555, -54.25472222 -25.3825, -54.254166670000004 -25.38194444, -54.25444444 -25.38166667, -54.25472222 -25.38166667, -54.25472222 -25.37944444, -54.25277778 -25.37944444, -54.25277778 -25.38583333, -54.25419223 -25.3861539, -54.2539067 -25.38589216, -54.25388889 -25.385, -54.25444444 -25.38555555, -54.2547871 -25.385820770000002, -54.25472222 -25.38611111, -54.26027778 -25.38777778))" + ) + + assert dataset.keys()[0] == "Values.crop_code" + assert dataset.keys()[-1] == 'Schema.Id' + assert dataset.values[0][-1] == 'CROP_IDENTIFICATION' + + @pytest.mark.skip(reason="soucis SSL dans github") + def test_get_zarc_analytics(self): + dataset = self.client.get_zarc_analytics( + start_date_emergence="2022-01-15", + end_date_emergence="2022-05-31", + nb_days_sowing_emergence=20, + crop=self.crops.CORN, + soil_type=ZarcSoilType.NONE, + cycle=ZarcCycleType.NONE, + geometry="POLYGON ((-54.26027778 -25.38777778, -54.26027778 -25.37444444, -54.26 -25.37416667, -54.25972222 -25.37444444, -54.25944444 -25.37444444, -54.25888889 -25.37472222, -54.258611110000004 -25.37472222, -54.25888889 -25.375, -54.25888889 -25.37555555, -54.258611110000004 -25.37611111, -54.258611110000004 -25.38194444, -54.25833333 -25.38416667, -54.25694444 -25.38361111, -54.25694444 -25.38416667, -54.2575 -25.38416667, -54.2575 -25.38444444, -54.25777778 -25.38416667, -54.25807016 -25.384158120000002, -54.25805556 -25.38444444, -54.258077300000004 -25.38472206, -54.2575 -25.38527778, -54.25694444 -25.385, -54.256388890000004 -25.38361111, -54.25472222 -25.38305555, -54.25472222 -25.3825, -54.254166670000004 -25.38194444, -54.25444444 -25.38166667, -54.25472222 -25.38166667, -54.25472222 -25.37944444, -54.25277778 -25.37944444, -54.25277778 -25.38583333, -54.25419223 -25.3861539, -54.2539067 -25.38589216, -54.25388889 -25.385, -54.25444444 -25.38555555, -54.2547871 -25.385820770000002, -54.25472222 -25.38611111, -54.26027778 -25.38777778))" + ) + + assert dataset.keys()[0] == "Values.emergence_date" + assert dataset.keys()[-1] == 'Schema.Id' + assert dataset.values[0][-1] == 'ZARC' + + + def test_get_mr_time_series(self): + result:str = self.client.get_mr_time_series( + start_date="2020-10-09", + end_date="2022-10-09", + list_sensors=["Sentinel_2", "Landsat_8"], + denoiser=True, + smoother="ww", + eoc=True, + aggregation="mean", + index="ndvi", + raw_data=True, + polygon="POLYGON ((-0.49881816 46.27330504, -0.49231649 46.27320122, -0.49611449 46.26983426, -0.49821735 46.27094671, -0.49881816 46.27330504))" + ) + + assert result.startswith('s3://geosys-geosys-us/2tKecZgMyEP6EkddLxa1gV') + assert '/mrts/' in result \ No newline at end of file diff --git a/tests/test_unit_agriquest_service.py b/tests/test_unit_agriquest_service.py new file mode 100644 index 0000000..ad6e839 --- /dev/null +++ b/tests/test_unit_agriquest_service.py @@ -0,0 +1,70 @@ +import datetime +import json +from unittest.mock import patch + +from geosyspy.services.agriquest_service import AgriquestService +from geosyspy.utils.http_client import * +from tests.test_helper import * +from geosyspy.utils.constants import * + +geometry = "POLYGON((-91.17523978603823 40.29787117039518,-91.17577285022956 40.29199489606421,-91.167613719932 40.29199489606421,-91.1673028670095 40.29867040193312,-91.17523978603823 40.29787117039518))" + + +class TestAgriquestService: + url = "https://testurl.com" + http_client = HttpClient("client_id_123", + "client_secret_123456", + "username_123", + "password_123", + "preprod", + "na") + service = AgriquestService(base_url=url, http_client=http_client) + + def test_is_block_for_france(self): + is_france_block = self.service.is_block_for_france(block_code=AgriquestBlocks.FRA_DEPARTEMENTS) + assert is_france_block == True + + is_france_block = self.service.is_block_for_france(block_code=AgriquestBlocks.AMU_NORTH_AMERICA) + assert is_france_block == False + + def test_weather_indicators_builder(self): + start_date = datetime.datetime.now() - datetime.timedelta(days=1) + end_date = start_date + datetime.timedelta(days=7, hours=3, minutes=30) + + indicators = self.service.weather_indicators_builder(start_date=start_date.date(), end_date = end_date.date(), isFrance = True) + assert set(indicators) == set([3,4,5]) + + indicators = self.service.weather_indicators_builder(start_date=start_date.date(), end_date=end_date.date(), + isFrance=False) + assert set(indicators) == set([2, 4, 5]) + + @patch('geosyspy.utils.http_client.HttpClient.post') + def test_get_agriquest_weather_block_data(self, get_response): + get_response.return_value = mock_http_response_text_content("POST", load_data_from_textfile( + "agriquest_weather_data_mock_http_response")) + start_date = "2022-05-01" + end_date = "2023-04-28" + + dataset = self.service.get_agriquest_block_weather_data( + start_date=start_date, + end_date=end_date, + block_code=AgriquestBlocks.FRA_DEPARTEMENTS, + weather_type=AgriquestWeatherType.CUMULATIVE_PRECIPITATION, + indicator_list=[3,4,5] + ) + assert dataset.keys()[0] == "AMU" + assert len(dataset["AMU"]) == 97 + + @patch('geosyspy.utils.http_client.HttpClient.post') + def test_get_agriquest_ndvi_block_data(self, get_response): + get_response.return_value = mock_http_response_text_content("POST", load_data_from_textfile( + "agriquest_ndvi_data_mock_http_response")) + date = "2023-06-05" + dataset = self.service.get_agriquest_block_ndvi_data( + date=date, + commodity=AgriquestCommodityCode.ALL_VEGETATION, + block_code=AgriquestBlocks.AMU_NORTH_AMERICA, + indicator_list=[1] + ) + assert dataset.keys()[0] == "AMU" + assert dataset.keys()[-1] == "NDVI" diff --git a/tests/test_unit_analytics_fabric_service.py b/tests/test_unit_analytics_fabric_service.py new file mode 100644 index 0000000..50e0fc6 --- /dev/null +++ b/tests/test_unit_analytics_fabric_service.py @@ -0,0 +1,88 @@ +import datetime +import json +from unittest.mock import patch + +from geosyspy.services.analytics_fabric_service import AnalyticsFabricService +from geosyspy.utils.http_client import * +from tests.test_helper import * + +geometry = "POLYGON((-91.17523978603823 40.29787117039518,-91.17577285022956 40.29199489606421,-91.167613719932 40.29199489606421,-91.1673028670095 40.29867040193312,-91.17523978603823 40.29787117039518))" + + +class TestAnalyticsFabricService: + url = "https://testurl.com" + http_client = HttpClient("client_id_123", + "client_secret_123456", + "username_123", + "password_123", + "preprod", + "na") + service = AnalyticsFabricService(base_url=url, http_client=http_client) + + def test_get_build_timestamp_query_parameters(self): + start_date = datetime.datetime.now() + end_date = start_date + datetime.timedelta(days=7, hours=3, minutes=30) + + timestamp = self.service.build_timestamp_query_parameters(end_date=end_date) + assert timestamp == f'&Timestamp:$lte:{end_date}' + + timestamp = self.service.build_timestamp_query_parameters(start_date=start_date) + assert timestamp == f'&Timestamp=$gte:{start_date}' + + timestamp = self.service.build_timestamp_query_parameters(start_date=start_date, end_date=end_date) + assert timestamp == f'&Timestamp=$between:{start_date}|{end_date}' + + timestamp = self.service.build_timestamp_query_parameters() + assert timestamp == '' + + @patch('geosyspy.utils.http_client.HttpClient.get') + def test_get_metrics(self, get_response): + get_response.return_value = mock_http_response_text_content("GET", load_data_from_textfile( + "metrics_harvest_mock_http_response")) + start_date = datetime.datetime.now() + end_date = start_date + datetime.timedelta(days=7, hours=3, minutes=30) + + metrics = self.service.get_metrics(start_date=start_date, end_date=end_date, season_field_id= 'seasonfieldFakeId', schema_id='HISTORICAL_HARVEST') + + assert metrics['Schema.Id'][0] == 'HISTORICAL_HARVEST' + assert metrics['Values.harvest_year_1'][0] == '2020-10-02' + + @patch('geosyspy.utils.http_client.HttpClient.get') + def test_get_latest_metrics(self, get_response): + get_response.return_value = mock_http_response_text_content("GET", load_data_from_textfile( + "metrics_harvest_mock_http_response")) + + metrics = self.service.get_lastest_metrics(season_field_id= 'seasonfieldFakeId', schema_id='HISTORICAL_HARVEST') + + assert metrics['Schema.Id'][0] == 'HISTORICAL_HARVEST' + assert metrics['Values.harvest_year_1'][0] == '2020-10-02' + + @patch('geosyspy.utils.http_client.HttpClient.patch') + def test_push_metrics(self, patch_response): + patch_response.return_value = mock_http_response_text_content("PATCH", load_data_from_textfile( + "metrics_harvest_mock_http_response")) + data = [{ + "Timestamp": "2022-01-01", + "Values": { + "NDVI": 0.5 + } + }] + + result = self.service.push_metrics(season_field_id='seasonfieldFakeId', schema_id='HISTORICAL_HARVEST', values=data) + + assert result == 200 + + @patch('geosyspy.utils.http_client.HttpClient.post') + def test_create_schema(self, get_response): + get_response.return_value = mock_http_response_text_content("POST", load_data_from_textfile( + "create_schema_mock_http_response"), status_code=201) + schema ={ + "Timestamp": '2021-01-01', + "Values": { + "NDVI": 0.5 + } + } + response = self.service.create_schema_id(schema_id='NEW_SCHEMA', schema = schema) + data = json.loads(response.decode('utf-8')) + assert data['Id'] == "NEW_SCHEMA" + diff --git a/tests/test_unit_analytics_processor_service.py b/tests/test_unit_analytics_processor_service.py new file mode 100644 index 0000000..5a46bb6 --- /dev/null +++ b/tests/test_unit_analytics_processor_service.py @@ -0,0 +1,162 @@ +from unittest.mock import patch + +from geosyspy.services.analytics_processor_service import AnalyticsProcessorService +from geosyspy.utils.constants import * +from geosyspy.utils.http_client import * +from tests.test_helper import * + +geometry = "POLYGON((-91.17523978603823 40.29787117039518,-91.17577285022956 40.29199489606421,-91.167613719932 40.29199489606421,-91.1673028670095 40.29867040193312,-91.17523978603823 40.29787117039518))" + + +class TestAnalyticsProcessorService: + url = "https://testurl.com" + http_client = HttpClient("client_id_123", + "client_secret_123456", + "username_123", + "password_123", + "preprod", + "na") + service = AnalyticsProcessorService(base_url=url, http_client=http_client) + + @patch('geosyspy.utils.http_client.HttpClient.get') + def test_get_task_status(self, get_response): + get_response.return_value = mock_http_response_text_content("GET", load_data_from_textfile( + "processor_event_data_mock_http_response")) + + task_status = self.service.wait_and_check_task_status("task_id") + assert task_status == "Ended" + + @patch('geosyspy.utils.http_client.HttpClient.post') + def test_get_launch_planted_area_processor(self, post_response): + post_response.return_value = mock_http_response_text_content("POST", load_data_from_textfile( + "launch_processor_data_mock_http_response")) + + task_id = self.service.launch_planted_area_processor(start_date='2020-01-01', end_date='2021-01-01', seasonfield_id= 'seasonfieldFakeId') + assert task_id == "cb58faaf8a5640e4913d16bfde3f5bbf" + + @patch('geosyspy.utils.http_client.HttpClient.post') + def test_get_launch_zarc_processor(self, post_response): + post_response.return_value = mock_http_response_text_content("POST", load_data_from_textfile( + "launch_processor_data_mock_http_response")) + + task_id = self.service.launch_zarc_processor(start_date_emergence ='2020-01-01', + municipio=123, + soil_type=ZarcSoilType.SOIL_TYPE_1.value, + nb_days_sowing_emergence=50, + crop="Corn", + end_date_emergence='2021-01-01', + cycle= ZarcCycleType.CYCLE_TYPE_1.value, + seasonfield_id='seasonFieldFakeId') + assert task_id == "cb58faaf8a5640e4913d16bfde3f5bbf" + + @patch('geosyspy.utils.http_client.HttpClient.post') + def test_get_launch_greenness_processor(self, post_response): + post_response.return_value = mock_http_response_text_content("POST", load_data_from_textfile( + "launch_processor_data_mock_http_response")) + + task_id = self.service.launch_greenness_processor(start_date='2020-01-01', + crop="Corn", + end_date='2021-01-01', + sowing_date='2020-01-01', + geometry=geometry, + seasonfield_id='seasonFieldFakeId') + assert task_id == "cb58faaf8a5640e4913d16bfde3f5bbf" + + @patch('geosyspy.utils.http_client.HttpClient.post') + def test_get_launch_emergence_processor(self, post_response): + post_response.return_value = mock_http_response_text_content("POST", load_data_from_textfile( + "launch_processor_data_mock_http_response")) + + task_id = self.service.launch_emergence_processor(season_start_day='2020-01-01', + crop="Corn", + year=2021, + emergence_type=Emergence.EMERGENCE_IN_SEASON, + season_duration=110, + season_start_month=10, + geometry=geometry, + seasonfield_id='seasonFieldFakeId') + assert task_id == "cb58faaf8a5640e4913d16bfde3f5bbf" + + @patch('geosyspy.utils.http_client.HttpClient.post') + def test_get_launch_harvest_processor(self, post_response): + post_response.return_value = mock_http_response_text_content("POST", load_data_from_textfile( + "launch_processor_data_mock_http_response")) + + task_id = self.service.launch_harvest_processor(season_start_day='2020-01-01', + year=2021, + crop ='Corn', + season_duration=110, + season_start_month=10, + harvest_type=Harvest.HARVEST_HISTORICAL, + geometry=geometry, + seasonfield_id='seasonFieldFakeId') + assert task_id == "cb58faaf8a5640e4913d16bfde3f5bbf" + + @patch('geosyspy.utils.http_client.HttpClient.post') + def test_get_launch_harvest_readiness_processor(self, post_response): + post_response.return_value = mock_http_response_text_content("POST", load_data_from_textfile( + "launch_processor_data_mock_http_response")) + + task_id = self.service.launch_harvest_readiness_processor(start_date='2020-01-01', + end_date='2020-01-01', + sowing_date='2020-01-01', + crop ='Corn', + geometry=geometry, + seasonfield_id='seasonFieldFakeId') + assert task_id == "cb58faaf8a5640e4913d16bfde3f5bbf" + + @patch('geosyspy.utils.http_client.HttpClient.post') + def test_get_launch_brazil_in_season_crop_processor(self, post_response): + post_response.return_value = mock_http_response_text_content("POST", load_data_from_textfile( + "launch_processor_data_mock_http_response")) + + task_id = self.service.launch_brazil_in_season_crop_id_processor(start_date='2020-01-01', + end_date='2020-01-01', + geometry=geometry, + season=2021, + seasonfield_id='seasonFieldFakeId') + assert task_id == "cb58faaf8a5640e4913d16bfde3f5bbf" + + @patch('geosyspy.utils.http_client.HttpClient.post') + def test_get_launch_potential_score_processor(self, post_response): + post_response.return_value = mock_http_response_text_content("POST", load_data_from_textfile( + "launch_processor_data_mock_http_response")) + + task_id = self.service.launch_potential_score_processor(end_date='2021-01-01', + season_start_month=10, + season_duration=120, + season_start_day=30, + sowing_date='2020-01-01', + crop='Corn', + nb_historical_years=5, + geometry=geometry, + seasonfield_id='seasonFieldFakeId') + assert task_id == "cb58faaf8a5640e4913d16bfde3f5bbf" + + @patch('geosyspy.utils.http_client.HttpClient.post') + def test_get_mr_time_series_processor(self, post_response): + post_response.return_value = mock_http_response_text_content("POST", load_data_from_textfile( + "launch_processor_data_mock_http_response")) + + task_id = self.service.launch_mr_time_series_processor(start_date="2020-10-09", + end_date="2022-10-09", + list_sensors=["Sentinel_2", "Landsat_8"], + denoiser=True, + smoother="ww", + eoc=True, + aggregation="mean", + index="ndvi", + raw_data=True, + polygon="POLYGON ((-0.49881816 46.27330504, -0.49231649 46.27320122, -0.49611449 46.26983426, -0.49821735 46.27094671, -0.49881816 46.27330504))") + + assert task_id == "cb58faaf8a5640e4913d16bfde3f5bbf" + + @patch('geosyspy.utils.http_client.HttpClient.get') + def test_get_s3_path_from_task_and_processor(self, get_response): + get_response.return_value = mock_http_response_text_content("GET", load_data_from_textfile( + "processor_event_data_mock_http_response")) + + s3_path = self.service.get_s3_path_from_task_and_processor(task_id="4d0980e07b7245d49419ff5ec87fff09", + processor_name="mrts") + + assert s3_path == "s3://geosys-geosys-us/2tKecZgMyEP6EkddLxa1gV/mrts/4d0980e07b7245d49419ff5ec87fff09" \ No newline at end of file diff --git a/tests/test_unit_geosys.py b/tests/test_unit_geosys.py new file mode 100644 index 0000000..2ab2f87 --- /dev/null +++ b/tests/test_unit_geosys.py @@ -0,0 +1,163 @@ +from datetime import datetime +from unittest.mock import patch +from geosyspy import Geosys +from dotenv import load_dotenv +import datetime as dt +import numpy as np +from geosyspy.utils.constants import * +from tests.test_helper import * + +# read .env file +load_dotenv() + +API_CLIENT_ID = os.getenv("API_CLIENT_ID") +API_CLIENT_SECRET = os.getenv("API_CLIENT_SECRET") +API_USERNAME = os.getenv("API_USERNAME") +API_PASSWORD = os.getenv("API_PASSWORD") + +# polygon with two pixels : mh11v4i225j4612, mh11v4i226j4612 +POLYGON = "POLYGON((-91.29152885756007 40.39177489815265,-91.28403789132507 40.391776131485386,-91.28386736508233 " \ + "40.389390758655935,-91.29143832829979 40.38874592864832,-91.29152885756007 40.39177489815265))" + +class TestGeosys: + client = Geosys(API_CLIENT_ID, + API_CLIENT_SECRET, + API_USERNAME, + API_PASSWORD, + Env.PREPROD, + Region.NA + ) + + def test_authenticate(self): + credentials = self.client.http_client.get_access_token(); + assert {"access_token", "expires_in", "token_type", "scope", "expires_at", + "refresh_token"}.issubset(set(credentials.keys())) + assert credentials['access_token'] is not None + assert credentials['refresh_token'] is not None + assert credentials['expires_at'] > datetime.today().timestamp() + + + @patch('geosyspy.utils.http_client.HttpClient.get') + def test_get_time_series_weather_historical_daily(self, get_response): + get_response.return_value = mock_http_response_text_content("GET", load_data_from_textfile( + "time_series_weather_historical_daily_mock_http_response")) + start_date = dt.datetime.strptime("2021-01-01", "%Y-%m-%d") + end_date = dt.datetime.strptime("2022-01-01", "%Y-%m-%d") + indicators = [ + + "Precipitation", + "Temperature", + "Temperature.Ground", + "Temperature.Standard", + "Temperature.StandardMax", + "Location", + "Date", + ] + + df = self.client.get_time_series( + POLYGON, + start_date, + end_date, + WeatherTypeCollection.WEATHER_HISTORICAL_DAILY, + indicators, + ) + + assert {"precipitation.cumulative", "temperature.standard", "temperature.standardMax", + "Location"}.issubset(set(df.columns)) + assert df.index.name == "date" + assert df["weatherType"].iloc[1] == "HISTORICAL_DAILY" + + @patch('geosyspy.utils.http_client.HttpClient.get') + def test_get_metrics(self, get_response): + + fake_master_data_management_response = mock_http_response_text_content("GET", load_data_from_textfile( + "master_data_management_get_unique_id_mock_http_response")) + fake_analytics_fabric_response = mock_http_response_text_content("GET", load_data_from_textfile( + "metrics_lai_radar_mock_http_response")) + get_response.side_effect= [fake_master_data_management_response, fake_analytics_fabric_response] + + + lai_radar_polygon = "POLYGON((-52.72591542 -18.7395779,-52.72604885 -18.73951122,-52.72603114 -18.73908689,-52.71556835 -18.72490316,-52.71391916 -18.72612966,-52.71362802 -18.72623726,-52.71086473 -18.72804231,-52.72083542 -18.74173696,-52.72118937 -18.74159174,-52.72139229 -18.7418552,-52.72600257 -18.73969719,-52.72591542 -18.7395779))" + schema_id = "LAI_RADAR" + start_date = dt.datetime.strptime("2023-01-02", "%Y-%m-%d") + end_date = dt.datetime.strptime("2023-05-02", "%Y-%m-%d") + df = self.client.get_metrics(lai_radar_polygon, schema_id, start_date, end_date) + + assert {"Values.RVI", "Values.LAI", "Schema.Id"}.issubset(set(df.columns)) + assert {"2023-01-02T00:00:00Z", "2023-01-03T00:00:00Z", "2023-01-14T00:00:00Z", "2023-02-25T00:00:00Z", + "2023-03-26T00:00:00Z", "2023-04-27T00:00:00Z", "2023-05-02T00:00:00Z"}.issubset(set(df.index)) + assert df.index.name == "date" + + @patch('geosyspy.utils.http_client.HttpClient.get') + def test_get_time_series_weather_forecast_daily(self, get_response): + get_response.return_value = mock_http_response_text_content("GET", load_data_from_textfile( + "time_series_weather_forecast_daily_mock_http_response")) + start_date = dt.datetime.strptime("2021-01-01", "%Y-%m-%d") + end_date = dt.datetime.strptime("2022-01-01", "%Y-%m-%d") + indicators = [ + "Precipitation", + "Temperature.Standard", + "Temperature.StandardMax", + "Date", + "Location", + "WeatherType" + ] + + df = self.client.get_time_series( + POLYGON, + start_date, + end_date, + WeatherTypeCollection.WEATHER_HISTORICAL_DAILY, + indicators, + ) + + assert {'weatherType', 'precipitation.cumulative', 'precipitation.probabilities', 'temperature.standard', + 'temperature.standardMax', 'Location'}.issubset(set(df.columns)) + assert df.index.name == "date" + assert df["weatherType"].iloc[1] == "FORECAST_DAILY" + + @patch('geosyspy.utils.http_client.HttpClient.get') + def test_get_satellite_image_time_series(self, get_response): + fake_get_tiff_zip_response = mock_http_response_binary_content("GET", load_binary_data_from_zipfile("Refletance_map_mock.tiff.zip")) + fake_image_time_series_response = mock_http_response_text_content("GET", load_data_from_textfile( + "satellite_image_time_series_landsat8_mock_http_response")) + get_response.side_effect= [fake_image_time_series_response, fake_get_tiff_zip_response, fake_get_tiff_zip_response] + start_date = dt.datetime.strptime("2022-05-01", "%Y-%m-%d") + end_date = dt.datetime.strptime("2023-04-28", "%Y-%m-%d") + dataset = self.client.get_satellite_image_time_series( + POLYGON, + start_date, + end_date, + collections=[SatelliteImageryCollection.SENTINEL_2, SatelliteImageryCollection.LANDSAT_8], + indicators=["Reflectance"], + ) + assert dict(dataset.dims) == {'band': 4, 'y': 80, 'x': 81, 'time': 2} + + + @patch('geosyspy.utils.http_client.HttpClient.post') + def test_get_agriquest_weather_block_data(self, get_response): + get_response.return_value = mock_http_response_text_content("POST", load_data_from_textfile( + "agriquest_weather_data_mock_http_response")) + start_date = "2022-05-01" + end_date = "2023-04-28" + dataset = self.client.get_agriquest_weather_block_data( + start_date=start_date, + end_date=end_date, + block_code=AgriquestBlocks.FRA_DEPARTEMENTS, + weather_type=AgriquestWeatherType.CUMULATIVE_PRECIPITATION + ) + assert dataset.keys()[0] == "AMU" + assert len(dataset["AMU"]) == 97 + + @patch('geosyspy.utils.http_client.HttpClient.post') + def test_get_agriquest_ndvi_block_data(self, get_response): + get_response.return_value = mock_http_response_text_content("POST", load_data_from_textfile( + "agriquest_ndvi_data_mock_http_response")) + date = "2023-06-05" + dataset = self.client.get_agriquest_ndvi_block_data( + day_of_measure=date, + commodity_code=AgriquestCommodityCode.ALL_VEGETATION, + block_code=AgriquestBlocks.AMU_NORTH_AMERICA, + ) + assert dataset.keys()[0] == "AMU" + assert dataset.keys()[-1] == "NDVI" diff --git a/tests/test_unit_gis_service.py b/tests/test_unit_gis_service.py new file mode 100644 index 0000000..22217a2 --- /dev/null +++ b/tests/test_unit_gis_service.py @@ -0,0 +1,32 @@ +from datetime import datetime +from unittest.mock import patch +from geosyspy import Geosys +from dotenv import load_dotenv +import datetime as dt +import numpy as np + +from geosyspy.services.gis_service import GisService +from geosyspy.utils.constants import * +from geosyspy.utils.http_client import * +from tests.test_helper import * + +geometry = "POLYGON((-91.17523978603823 40.29787117039518,-91.17577285022956 40.29199489606421,-91.167613719932 40.29199489606421,-91.1673028670095 40.29867040193312,-91.17523978603823 40.29787117039518))" + + +class TestGisService: + url = "https://testurl.com" + http_client = HttpClient("client_id_123", + "client_secret_123456", + "username_123", + "password_123", + "preprod", + "na") + service = GisService(base_url=url, http_client=http_client) + + @patch('geosyspy.utils.http_client.HttpClient.post') + def test_get_municipio_id_from_geometry(self, post_response): + post_response.return_value = mock_http_response_text_content("POST", load_data_from_textfile( + "gis_layer_municipio_data_mock_http_response")) + + municipio_id = self.service.get_municipio_id_from_geometry(geometry=geometry) + assert municipio_id == 121935 \ No newline at end of file diff --git a/tests/test_unit_http_client.py b/tests/test_unit_http_client.py new file mode 100644 index 0000000..6a77880 --- /dev/null +++ b/tests/test_unit_http_client.py @@ -0,0 +1,56 @@ +from unittest.mock import patch +from geosyspy.utils.http_client import * + + + +@patch('geosyspy.utils.http_client.HttpClient.get') +def test_get_request_from_api_should_success(get_response): + get_response.return_value = "HTTP 200 OK" + client = HttpClient("client_id_123", + "client_secret_123456", + "username_123", + "password_123", + "preprod", + "na") + + response = client.get(url_endpoint="http://geosys.com", headers={}) + assert client.get.call_count == 1 + assert response == "HTTP 200 OK" + + +@patch('geosyspy.utils.http_client.HttpClient.post') +def test_post_request_should_success(post_response): + post_response.return_value = "HTTP 201 OK" + client = HttpClient("client_id_123", + "client_secret_123456", + "username_123", + "password_123", + "preprod", + "na") + payload = { + "Geometry": "polygon", + "Crop": {"Id": "CORN"}, + "SowingDate": "2022-01-01", + } + response = client.post(url_endpoint="http://geosys.com", payload=payload, headers={}) + assert client.post.call_count == 1 + assert response == "HTTP 201 OK" + + +@patch('geosyspy.utils.http_client.HttpClient.patch') +def test_patch_request_should_success(patch_response): + patch_response.return_value = "HTTP 200 OK" + client = HttpClient("client_id_123", + "client_secret_123456", + "username_123", + "password_123", + "preprod", + "na") + payload = { + "Geometry": "new polygon", + "Crop": {"Id": "CORN"}, + "SowingDate": "2022-01-01", + } + response = client.patch(url_endpoint="http://geosys.com", payload=payload) + assert client.patch.call_count == 1 + assert response == "HTTP 200 OK" diff --git a/tests/test_unit_map_product_service.py b/tests/test_unit_map_product_service.py new file mode 100644 index 0000000..357d3bd --- /dev/null +++ b/tests/test_unit_map_product_service.py @@ -0,0 +1,37 @@ +import datetime as dt +import numpy as np +from unittest.mock import patch + +from geosyspy.services.map_product_service import MapProductService +from geosyspy.utils.http_client import * +from tests.test_helper import * +from geosyspy.utils.constants import * + + +class TestMapProductService: + url = "https://testurl.com" + http_client = HttpClient("client_id_123", + "client_secret_123456", + "username_123", + "password_123", + "preprod", + "na") + priority_queue = "realtime" + + service = MapProductService(base_url=url, http_client=http_client,priority_queue=priority_queue) + + @patch('geosyspy.utils.http_client.HttpClient.get') + def test_get_satellite_coverage(self, get_response): + get_response.return_value = mock_http_response_text_content("GET", load_data_from_textfile( + "satellite_coverage_image_references_mock_http_response")) + start_date = dt.datetime.strptime("2022-01-01", "%Y-%m-%d") + end_date = dt.datetime.strptime("2023-01-01", "%Y-%m-%d") + info = self.service.get_satellite_coverage( + "fakeSeasonFieldId", start_date, end_date, "NDVI", [SatelliteImageryCollection.SENTINEL_2] + ) + + assert {"coverageType", "image.id", "image.availableBands", "image.sensor", "image.soilMaterial", + "image.spatialResolution", "image.weather", "image.date", "seasonField.id"}.issubset(set(info.columns)) + + + diff --git a/tests/test_unit_master_data_management_service.py b/tests/test_unit_master_data_management_service.py new file mode 100644 index 0000000..43e5c3b --- /dev/null +++ b/tests/test_unit_master_data_management_service.py @@ -0,0 +1,42 @@ +from unittest.mock import patch + +from geosyspy.services.master_data_management_service import MasterDataManagementService +from geosyspy.utils.http_client import * +from tests.test_helper import * + +geometry = "POLYGON((-91.17523978603823 40.29787117039518,-91.17577285022956 40.29199489606421,-91.167613719932 40.29199489606421,-91.1673028670095 40.29867040193312,-91.17523978603823 40.29787117039518))" + + +class TestMasterDataManagementService: + url = "https://testurl.com" + http_client = HttpClient("client_id_123", + "client_secret_123456", + "username_123", + "password_123", + "preprod", + "na") + service = MasterDataManagementService(base_url=url, http_client=http_client) + + @patch('geosyspy.utils.http_client.HttpClient.post') + def test_create_season_field_id(self, post_response): + post_response.return_value = mock_http_response_text_content("POST", load_data_from_textfile( + "master_data_management_post_extract_id_mock_http_response")) + + response = self.service.create_season_field_id(polygon=geometry) + assert response.status_code == 200 + + @patch('geosyspy.utils.http_client.HttpClient.post') + def test_extract_season_field_id(self, post_response): + post_response.return_value = mock_http_response_text_content("POST", load_data_from_textfile( + "master_data_management_post_extract_id_mock_http_response"),status_code=201) + + response = self.service.extract_season_field_id(polygon=geometry) + assert response == "ajqxm3v" + + @patch('geosyspy.utils.http_client.HttpClient.get') + def test_extract_season_field_id(self, get_response): + get_response.return_value = mock_http_response_text_content("GET", load_data_from_textfile( + "master_data_management_get_unique_id_mock_http_response"), status_code=201) + + response = self.service.get_season_field_unique_id(season_field_id="fakeSeasonFieldId") + assert response == "4XcGhZvA1OjpO3gUwYM61e" \ No newline at end of file diff --git a/tests/test_unit_oauth2_client.py b/tests/test_unit_oauth2_client.py new file mode 100644 index 0000000..4530a5b --- /dev/null +++ b/tests/test_unit_oauth2_client.py @@ -0,0 +1,42 @@ +from unittest.mock import patch, call +from geosyspy.utils.oauth2_client import Oauth2Api + + +def get_oauth(): + return Oauth2Api("client_id_123", + "client_secret_123456", + "username_123", + "password_123", + "preprod", + "na") + + +def test_oauth2_should_initialize(): + oauth = get_oauth() + assert oauth.client_id == "client_id_123" + assert oauth.client_secret == "client_secret_123456" + assert oauth.username == "username_123" + assert oauth.password == "password_123" + assert oauth.server_url != "" + assert oauth.token is None + +@patch("geosyspy.utils.oauth2_client.OAuth2Session") +def test_oauth2_get_token_should_work(OAuth2Session): + OAuth2Session.return_value = OAuth2Session + oauth = get_oauth() + OAuth2Session.refresh_token.return_value = "628x9x0xx447xx4x421x517x4x474x33x2065x4x1xx523xxxxx6x7x20" + oauth.get_refresh_token() + assert OAuth2Session.refresh_token.call_count == 1 + OAuth2Session.refresh_token.assert_has_calls( + [ + call( + oauth.server_url, + client_id=oauth.client_id, + client_secret=oauth.client_secret + ) + ] + ) + + + + diff --git a/tests/test_unit_vegetation_time_series_service.py b/tests/test_unit_vegetation_time_series_service.py new file mode 100644 index 0000000..7dd276f --- /dev/null +++ b/tests/test_unit_vegetation_time_series_service.py @@ -0,0 +1,58 @@ +import datetime as dt +import numpy as np +from unittest.mock import patch + +from geosyspy.services.vegetation_time_series_service import VegetationTimeSeriesService +from geosyspy.utils.http_client import * +from tests.test_helper import * + + +class TestVegetationTimeSeriesService: + url = "https://testurl.com" + http_client = HttpClient("client_id_123", + "client_secret_123456", + "username_123", + "password_123", + "preprod", + "na") + service = VegetationTimeSeriesService(base_url=url, http_client=http_client) + + @patch('geosyspy.utils.http_client.HttpClient.get') + def test_get_time_series_modis_ndvi(self, get_response): + get_response.return_value = mock_http_response_text_content("GET", load_data_from_textfile( + "time_series_modis_ndvi_mock_http_response")) + start_date = dt.datetime.strptime("2020-01-01", "%Y-%m-%d") + end_date = dt.datetime.strptime("2020-01-07", "%Y-%m-%d") + df = self.service.get_modis_time_series( + "fakeSeasonFieldId", start_date, end_date, ["NDVI"] + ) + + assert df.index.name == "date" + assert "value" in df.columns + assert "index" in df.columns + assert len(df.index) == 7 + date_range = list(map(lambda x: x.strftime("%Y-%m-%d"), df.index)) + assert {"2020-01-01", "2020-01-02", "2020-01-03", "2020-01-04", "2020-01-05", "2020-01-06", + "2020-01-07"}.issubset(set(date_range)) + + @patch('geosyspy.utils.http_client.HttpClient.get') + def test_get_satellite_image_time_series_modis_ndvi(self, get_response): + get_response.return_value = mock_http_response_text_content("GET", load_data_from_textfile( + "satellite_image_time_series_modis_ndvi_mock_http_response")) + start_date = dt.datetime.strptime("2020-01-01", "%Y-%m-%d") + end_date = dt.datetime.strptime("2020-01-07", "%Y-%m-%d") + + df = self.service.get_time_series_by_pixel( + "fakeSeasonFieldId", start_date, end_date, ["NDVI"] + ) + assert df.index.name == "date" + assert {"value", "index", "pixel.id"}.issubset(set(df.columns)) + assert np.all((df["index"].values == "NDVI")) + assert len(df.index) == 14 + + assert {"2020-01-01", "2020-01-02", "2020-01-03", "2020-01-04", "2020-01-05", "2020-01-06", + "2020-01-07"}.issubset(set(df.index)) + + assert {"mh11v4i225j4612", "mh11v4i226j4612"}.issubset(set(df["pixel.id"])) + + diff --git a/tests/test_unit_weather_service.py b/tests/test_unit_weather_service.py new file mode 100644 index 0000000..5240d3e --- /dev/null +++ b/tests/test_unit_weather_service.py @@ -0,0 +1,35 @@ +from unittest.mock import patch +import datetime +from geosyspy.services.weather_service import WeatherService +from geosyspy.utils.http_client import * +from tests.test_helper import * +from geosyspy.utils.constants import * + +geometry = "POLYGON((-91.17523978603823 40.29787117039518,-91.17577285022956 40.29199489606421,-91.167613719932 40.29199489606421,-91.1673028670095 40.29867040193312,-91.17523978603823 40.29787117039518))" + +class TestWeatherService: + url = "https://testurl.com" + http_client = HttpClient("client_id_123", + "client_secret_123456", + "username_123", + "password_123", + "preprod", + "na") + service = WeatherService(base_url=url, http_client=http_client) + + @patch('geosyspy.utils.http_client.HttpClient.get') + def test_get_weather(self, get_response): + get_response.return_value = mock_http_response_text_content("GET", load_data_from_textfile( + "weather_data_mock_http_response")) + start_date = datetime.datetime.now() + end_date = start_date + datetime.timedelta(days=7, hours=3, minutes=30) + + data = self.service.get_weather(polygon=geometry, start_date=start_date, end_date=end_date, + weather_type=WeatherTypeCollection.WEATHER_FORECAST_DAILY, + fields=['precipitation','temperature']) + + assert data.index.__len__() == 6 + assert data['precipitation.cumulative'][0] == 0.22834645669291338 + assert data['temperature.standard'][0] == 71.47399998282076 + +