diff --git a/v0.3.x/.buildinfo b/v0.3.x/.buildinfo deleted file mode 100644 index eca5336b3..000000000 --- a/v0.3.x/.buildinfo +++ /dev/null @@ -1,4 +0,0 @@ -# Sphinx build info version 1 -# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: 12d09dd8b859a30bc6097bd0f77e88ab -tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/v0.3.x/.github/ISSUE_TEMPLATE/bug_report.md b/v0.3.x/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 891c61775..000000000 --- a/v0.3.x/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: '' -labels: '' -assignees: '' - ---- - -**Describe the bug** -A clear and concise description of what the bug is. - -**To Reproduce** -Steps to reproduce the behavior: -1. Go to '...' -2. Click on '....' -3. Scroll down to '....' -4. See error - -**Expected behavior** -A clear and concise description of what you expected to happen. - -**Screenshots** -If applicable, add screenshots to help explain your problem. - -**Additional context** -Add any other context about the problem here. diff --git a/v0.3.x/.github/ISSUE_TEMPLATE/feature_request.md b/v0.3.x/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index bbcbbe7d6..000000000 --- a/v0.3.x/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: '' -labels: '' -assignees: '' - ---- - -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** -A clear and concise description of any alternative solutions or features you've considered. - -**Additional context** -Add any other context or screenshots about the feature request here. diff --git a/v0.3.x/.github/workflows/build.yml b/v0.3.x/.github/workflows/build.yml deleted file mode 100644 index 4cc316d93..000000000 --- a/v0.3.x/.github/workflows/build.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: Build mosaic project -on: - push: - branches: - - main - pull_request: - branches: - - '*' -jobs: - build: - runs-on: ubuntu-20.04 - strategy: - matrix: - dbr: [9.1LTS] - python: [3.8.8, 3.8.10] - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-java@v1 - with: - java-version: '8' - - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python }} - - env: - DBR_VERSION: ${{ matrix.dbr }} - run: mvn -q -Druntime=${DBR_VERSION} clean install - - run: mkdir staging - - run: cp target/mosaic*.jar staging - - run: cp target/mosaic-*-jar-with-dependencies.jar python/mosaic - - run: (cd python;pip install -e .[dev];python -m build) - - run: cp python/dist/*.whl staging - - uses: actions/upload-artifact@v2 - with: - name: artefacts - path: staging \ No newline at end of file diff --git a/v0.3.x/.github/workflows/docs.yml b/v0.3.x/.github/workflows/docs.yml deleted file mode 100644 index 98f259311..000000000 --- a/v0.3.x/.github/workflows/docs.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: Pages -on: - push: - branches: - - documentation -jobs: - build: - runs-on: ubuntu-latest - steps: - - name: install pandoc - run: sudo apt-get install pandoc - - uses: actions/setup-python@v2 - - uses: actions/checkout@v2 - with: - ref: documentation - fetch-depth: 0 # otherwise, you will failed to push refs to dest repo - - name: Build and Commit - uses: sphinx-notes/pages@v2 - with: - documentation_path: docs/python/source - requirements_path: docs/python/requirements.txt - - name: Push changes - uses: ad-m/github-push-action@master - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - branch: gh-pages \ No newline at end of file diff --git a/v0.3.x/.gitignore b/v0.3.x/.gitignore deleted file mode 100644 index 0413a886a..000000000 --- a/v0.3.x/.gitignore +++ /dev/null @@ -1,156 +0,0 @@ -#IntelliJ files -.idea -*.iml - -#VSCode files -.vscode -.scalafmt.conf - -#jenv def -.java-version - -target - -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -pip-wheel-metadata/ -share/python-wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST -python/mosaic/*.jar - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.nox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -*.py,cover -.hypothesis/ -.pytest_cache/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py -db.sqlite3 -db.sqlite3-journal - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# IPython -profile_default/ -ipython_config.py - -# pyenv -.python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. -#Pipfile.lock - -# PEP 582; used by e.g. github.com/David-OConnor/pyflow -__pypackages__/ - -# Celery stuff -celerybeat-schedule -celerybeat.pid - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# sphinx documentation -/docs/python/_build - -# mypy -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - -# Metals -.metals -.bloop - -# spark -spark-warehouse - -# MacOS -.DS_Store \ No newline at end of file diff --git a/v0.3.x/.nojekyll b/v0.3.x/.nojekyll deleted file mode 100644 index e69de29bb..000000000 diff --git a/v0.3.x/_images/OS_BNG_definition.png b/v0.3.x/_images/OS_BNG_definition.png deleted file mode 100644 index e33e9215f..000000000 Binary files a/v0.3.x/_images/OS_BNG_definition.png and /dev/null differ diff --git a/v0.3.x/_images/bng.png b/v0.3.x/_images/bng.png deleted file mode 100644 index d9e2da9d1..000000000 Binary files a/v0.3.x/_images/bng.png and /dev/null differ diff --git a/v0.3.x/_images/bng1.png b/v0.3.x/_images/bng1.png deleted file mode 100644 index c5b9cfdac..000000000 Binary files a/v0.3.x/_images/bng1.png and /dev/null differ diff --git a/v0.3.x/_images/bng2.png b/v0.3.x/_images/bng2.png deleted file mode 100644 index f1f15ee93..000000000 Binary files a/v0.3.x/_images/bng2.png and /dev/null differ diff --git a/v0.3.x/_images/bng3.png b/v0.3.x/_images/bng3.png deleted file mode 100644 index b0bf67be8..000000000 Binary files a/v0.3.x/_images/bng3.png and /dev/null differ diff --git a/v0.3.x/_images/bng4.png b/v0.3.x/_images/bng4.png deleted file mode 100644 index edec485d7..000000000 Binary files a/v0.3.x/_images/bng4.png and /dev/null differ diff --git a/v0.3.x/_images/bng5.png b/v0.3.x/_images/bng5.png deleted file mode 100644 index 60e9ec0ce..000000000 Binary files a/v0.3.x/_images/bng5.png and /dev/null differ diff --git a/v0.3.x/_images/bng6.png b/v0.3.x/_images/bng6.png deleted file mode 100644 index 6a533bd0a..000000000 Binary files a/v0.3.x/_images/bng6.png and /dev/null differ diff --git a/v0.3.x/_images/geom.png b/v0.3.x/_images/geom.png deleted file mode 100644 index 0f40f0a65..000000000 Binary files a/v0.3.x/_images/geom.png and /dev/null differ diff --git a/v0.3.x/_images/h3.png b/v0.3.x/_images/h3.png deleted file mode 100644 index 4aa19113e..000000000 Binary files a/v0.3.x/_images/h3.png and /dev/null differ diff --git a/v0.3.x/_images/h31.png b/v0.3.x/_images/h31.png deleted file mode 100644 index 887385b0d..000000000 Binary files a/v0.3.x/_images/h31.png and /dev/null differ diff --git a/v0.3.x/_images/h32.png b/v0.3.x/_images/h32.png deleted file mode 100644 index b0971c8de..000000000 Binary files a/v0.3.x/_images/h32.png and /dev/null differ diff --git a/v0.3.x/_images/h33.png b/v0.3.x/_images/h33.png deleted file mode 100644 index ccfc8b281..000000000 Binary files a/v0.3.x/_images/h33.png and /dev/null differ diff --git a/v0.3.x/_images/h34.png b/v0.3.x/_images/h34.png deleted file mode 100644 index 7e66cb723..000000000 Binary files a/v0.3.x/_images/h34.png and /dev/null differ diff --git a/v0.3.x/_images/h35.png b/v0.3.x/_images/h35.png deleted file mode 100644 index 16cd5ef2d..000000000 Binary files a/v0.3.x/_images/h35.png and /dev/null differ diff --git a/v0.3.x/_images/h36.png b/v0.3.x/_images/h36.png deleted file mode 100644 index 65db6e427..000000000 Binary files a/v0.3.x/_images/h36.png and /dev/null differ diff --git a/v0.3.x/_images/h37.png b/v0.3.x/_images/h37.png deleted file mode 100644 index c7de5792c..000000000 Binary files a/v0.3.x/_images/h37.png and /dev/null differ diff --git a/v0.3.x/_images/init_script.png b/v0.3.x/_images/init_script.png deleted file mode 100644 index 335f19904..000000000 Binary files a/v0.3.x/_images/init_script.png and /dev/null differ diff --git a/v0.3.x/_images/kepler-1.png b/v0.3.x/_images/kepler-1.png deleted file mode 100644 index 2a6e33cdb..000000000 Binary files a/v0.3.x/_images/kepler-1.png and /dev/null differ diff --git a/v0.3.x/_images/kepler-2.png b/v0.3.x/_images/kepler-2.png deleted file mode 100644 index 66be1b6cc..000000000 Binary files a/v0.3.x/_images/kepler-2.png and /dev/null differ diff --git a/v0.3.x/_images/kepler-3.png b/v0.3.x/_images/kepler-3.png deleted file mode 100644 index 40eb10653..000000000 Binary files a/v0.3.x/_images/kepler-3.png and /dev/null differ diff --git a/v0.3.x/_images/kepler-example.png b/v0.3.x/_images/kepler-example.png deleted file mode 100644 index 4f58f04fe..000000000 Binary files a/v0.3.x/_images/kepler-example.png and /dev/null differ diff --git a/v0.3.x/_images/knn_line_hexrings.png b/v0.3.x/_images/knn_line_hexrings.png deleted file mode 100644 index e157a96f0..000000000 Binary files a/v0.3.x/_images/knn_line_hexrings.png and /dev/null differ diff --git a/v0.3.x/_images/knn_mlflow_metrics.png b/v0.3.x/_images/knn_mlflow_metrics.png deleted file mode 100644 index cbe18bd6e..000000000 Binary files a/v0.3.x/_images/knn_mlflow_metrics.png and /dev/null differ diff --git a/v0.3.x/_images/knn_mlflow_notebook.png b/v0.3.x/_images/knn_mlflow_notebook.png deleted file mode 100644 index cd13ba101..000000000 Binary files a/v0.3.x/_images/knn_mlflow_notebook.png and /dev/null differ diff --git a/v0.3.x/_images/knn_mlflow_params.png b/v0.3.x/_images/knn_mlflow_params.png deleted file mode 100644 index f6577a4d9..000000000 Binary files a/v0.3.x/_images/knn_mlflow_params.png and /dev/null differ diff --git a/v0.3.x/_images/knn_result_visualisation.png b/v0.3.x/_images/knn_result_visualisation.png deleted file mode 100644 index 0e8c642b0..000000000 Binary files a/v0.3.x/_images/knn_result_visualisation.png and /dev/null differ diff --git a/v0.3.x/_images/mosaic_logo.png b/v0.3.x/_images/mosaic_logo.png deleted file mode 100644 index 82a2c53e4..000000000 Binary files a/v0.3.x/_images/mosaic_logo.png and /dev/null differ diff --git a/v0.3.x/_images/nearest_neighbour.png b/v0.3.x/_images/nearest_neighbour.png deleted file mode 100644 index 19871ecd6..000000000 Binary files a/v0.3.x/_images/nearest_neighbour.png and /dev/null differ diff --git a/v0.3.x/_images/plot_raster.png b/v0.3.x/_images/plot_raster.png deleted file mode 100644 index d2ef078c3..000000000 Binary files a/v0.3.x/_images/plot_raster.png and /dev/null differ diff --git a/v0.3.x/_images/spatial_knn_iterations.png b/v0.3.x/_images/spatial_knn_iterations.png deleted file mode 100644 index 858be9bc9..000000000 Binary files a/v0.3.x/_images/spatial_knn_iterations.png and /dev/null differ diff --git a/v0.3.x/_sources/api/api.rst.txt b/v0.3.x/_sources/api/api.rst.txt deleted file mode 100644 index 5d4401fac..000000000 --- a/v0.3.x/_sources/api/api.rst.txt +++ /dev/null @@ -1,16 +0,0 @@ -API Documentation -================= - -.. toctree:: - :maxdepth: 2 - - vector-format-readers - raster-format-readers - geometry-constructors - geometry-accessors - spatial-functions - spatial-indexing - spatial-predicates - spatial-aggregations - raster-functions - rasterio-udfs \ No newline at end of file diff --git a/v0.3.x/_sources/api/geometry-accessors.rst.txt b/v0.3.x/_sources/api/geometry-accessors.rst.txt deleted file mode 100644 index 120008490..000000000 --- a/v0.3.x/_sources/api/geometry-accessors.rst.txt +++ /dev/null @@ -1,280 +0,0 @@ -================== -Geometry accessors -================== - -st_asbinary -*********** - -.. function:: st_asbinary(col) - - Translate a geometry into its Well-known Binary (WKB) representation. - - :param col: Geometry column - :type col: Column: StringType, HexType, JSONType or InternalGeometryType - :rtype: Column: BinaryType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'POINT (30 10)'}]) - df.select(st_asbinary('wkt').alias('wkb')).show() - +--------------------+ - | wkb| - +--------------------+ - |[01 01 00 00 00 0...| - +--------------------+ - - .. code-tab:: scala - - val df = List(("POINT (30 10)")).toDF("wkt") - df.select(st_asbinary($"wkt").alias("wkb")).show() - +--------------------+ - | wkb| - +--------------------+ - |[01 01 00 00 00 0...| - +--------------------+ - - .. code-tab:: sql - - SELECT st_asbinary("POINT (30 10)") AS wkb - +--------------------+ - | wkb| - +--------------------+ - |[01 01 00 00 00 0...| - +--------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame('wkt'= "POINT (30 10)")) - showDF(select(df, alias(st_asbinary(column("wkt")), "wkb"))) - +--------------------+ - | wkb| - +--------------------+ - |[01 01 00 00 00 0...| - +--------------------+ - - -.. note:: Alias for :ref:`st_aswkb`. - -st_asgeojson -************ - -.. function:: st_asgeojson(col) - - Translate a geometry into its GeoJSON representation. - - :param col: Geometry column - :type col: Column: BinaryType, StringType, HexType or InternalGeometryType - :rtype: Column: JSONType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'POINT (30 10)'}]) - df.select(st_asgeojson('wkt').cast('string').alias('json')).show(truncate=False) - +------------------------------------------------------------------------------------------------+ - |json | - +------------------------------------------------------------------------------------------------+ - |{{"type":"Point","coordinates":[30,10],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}}}| - +------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = List(("POINT (30 10)")).toDF("wkt") - df.select(st_asgeojson($"wkt").cast("string").alias("json")).show(false) - +------------------------------------------------------------------------------------------------+ - |json | - +------------------------------------------------------------------------------------------------+ - |{{"type":"Point","coordinates":[30,10],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}}}| - +------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - SELECT cast(st_asgeojson("POINT (30 10)") AS string) AS json - +------------------------------------------------------------------------------------------------+ - |json | - +------------------------------------------------------------------------------------------------+ - |{{"type":"Point","coordinates":[30,10],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}}}| - +------------------------------------------------------------------------------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame('wkt'= "POINT (30 10)")) - showDF(select(df, alias(st_asgeojson(column("wkt")), "json")), truncate=F) - +------------------------------------------------------------------------------------------------+ - |json | - +------------------------------------------------------------------------------------------------+ - |{{"type":"Point","coordinates":[30,10],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}}}| - +------------------------------------------------------------------------------------------------+ - - -st_astext -********* - -.. function:: st_astext(col) - - Translate a geometry into its Well-known Text (WKT) representation. - - :param col: Geometry column - :type col: Column: BinaryType, HexType, JSONType or InternalGeometryType - :rtype: Column: StringType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'lon': 30., 'lat': 10.}]) - df.select(st_astext(st_point('lon', 'lat')).alias('wkt')).show() - +-------------+ - | wkt| - +-------------+ - |POINT (30 10)| - +-------------+ - - .. code-tab:: scala - - val df = List((30.0, 10.0)).toDF("lon", "lat") - df.select(st_astext(st_point($"lon", $"lat")).alias("wkt")).show() - +-------------+ - | wkt| - +-------------+ - |POINT (30 10)| - +-------------+ - - .. code-tab:: sql - - SELECT st_astext(st_point(30.0D, 10.0D)) AS wkt - +-------------+ - | wkt| - +-------------+ - |POINT (30 10)| - +-------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(lon = 30.0, lat = 10.0)) - showDF(select(df, alias(st_astext(st_point(column("lon"), column("lat"))), "wkt")), truncate=F) - +-------------+ - | wkt| - +-------------+ - |POINT (30 10)| - +-------------+ - -.. note:: Alias for :ref:`st_aswkt`. - - -st_aswkb -******** - -.. function:: st_aswkb(col) - - Translate a geometry into its Well-known Binary (WKB) representation. - - :param col: Geometry column - :type col: Column: StringType, HexType, JSONType or InternalGeometryType - :rtype: Column: BinaryType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'POINT (30 10)'}]) - df.select(st_aswkb('wkt').alias('wkb')).show() - +--------------------+ - | wkb| - +--------------------+ - |[01 01 00 00 00 0...| - +--------------------+ - - .. code-tab:: scala - - val df = List(("POINT (30 10)")).toDF("wkt") - df.select(st_aswkb($"wkt").alias("wkb")).show() - +--------------------+ - | wkb| - +--------------------+ - |[01 01 00 00 00 0...| - +--------------------+ - - .. code-tab:: sql - - SELECT st_aswkb("POINT (30 10)") AS wkb - +--------------------+ - | wkb| - +--------------------+ - |[01 01 00 00 00 0...| - +--------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame('wkt'= "POINT (30 10)")) - showDF(select(df, alias(st_aswkb(column("wkt")), "wkb"))) - +--------------------+ - | wkb| - +--------------------+ - |[01 01 00 00 00 0...| - +--------------------+ - -.. note:: Alias for :ref:`st_asbinary`. - -st_aswkt -******** - -.. function:: st_aswkt(col) - - Translate a geometry into its Well-known Text (WKT) representation. - - :param col: Geometry column - :type col: Column: BinaryType, HexType, JSONType or InternalGeometryType - :rtype: Column: StringType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'lon': 30., 'lat': 10.}]) - df.select(st_aswkt(st_point('lon', 'lat')).alias('wkt')).show() - +-------------+ - | wkt| - +-------------+ - |POINT (30 10)| - +-------------+ - - .. code-tab:: scala - - val df = List((30.0, 10.0)).toDF("lon", "lat") - df.select(st_aswkt(st_point($"lon", $"lat")).alias("wkt")).show() - +-------------+ - | wkt| - +-------------+ - |POINT (30 10)| - +-------------+ - - .. code-tab:: sql - - SELECT st_aswkt(st_point(30.0D, 10.0D)) AS wkt - +-------------+ - | wkt| - +-------------+ - |POINT (30 10)| - +-------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(lon = 30.0, lat = 10.0)) - showDF(select(df, alias(st_aswkt(st_point(column("lon"), column("lat"))), "wkt")), truncate=F) - +-------------+ - | wkt| - +-------------+ - |POINT (30 10)| - +-------------+ - - -.. note:: Alias for :ref:`st_astext`. diff --git a/v0.3.x/_sources/api/geometry-constructors.rst.txt b/v0.3.x/_sources/api/geometry-constructors.rst.txt deleted file mode 100644 index 009fbc951..000000000 --- a/v0.3.x/_sources/api/geometry-constructors.rst.txt +++ /dev/null @@ -1,400 +0,0 @@ - - - -===================== -Geometry constructors -===================== - -st_point -******** - -.. function:: st_point(x, y) - - Create a new Mosaic Point geometry from two DoubleType values. - - :param x: x coordinate (DoubleType) - :type x: Column: DoubleType - :param y: y coordinate (DoubleType) - :type y: Column: DoubleType - :rtype: Column: InternalGeometryType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'lon': 30., 'lat': 10.}]) - df.select(st_point('lon', 'lat').alias('point_geom')).show(1, False) - +---------------------------+ - |point_geom | - +---------------------------+ - |{1, [[[30.0, 10.0]]], [[]]}| - +---------------------------+ - - .. code-tab:: scala - - val df = List((30.0, 10.0)).toDF("lon", "lat") - df.select(st_point($"lon", $"lat")).alias("point_geom").show() - +---------------------------+ - |point_geom | - +---------------------------+ - |{1, [[[30.0, 10.0]]], [[]]}| - +---------------------------+ - - .. code-tab:: sql - - SELECT st_point(30D, 10D) AS point_geom - +---------------------------+ - |point_geom | - +---------------------------+ - |{1, [[[30.0, 10.0]]], [[]]}| - +---------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(lon = 30.0, lat = 10.0)) - showDF(select(df, alias(st_point(column("lon"), column("lat")), "point_geom")), truncate=F) - +---------------------------+ - |point_geom | - +---------------------------+ - |{1, [[[30.0, 10.0]]], [[]]}| - +---------------------------+ - -st_makeline -*********** - -.. function:: st_makeline(col) - - Create a new Mosaic LineString geometry from an Array of Mosaic Points. - - :param col: Point array - :type col: Column: ArrayType[InternalGeometryType] - :rtype: Column: InternalGeometryType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([ - {'lon': 30., 'lat': 10.}, - {'lon': 10., 'lat': 30.}, - {'lon': 40., 'lat': 40.} - ]) - ( - df.select(st_point('lon', 'lat').alias('point_geom')) - .groupBy() - .agg(collect_list('point_geom').alias('point_array')) - .select(st_makeline('point_array').alias('line_geom')) - ).show(1, False) - +-------------------------------------------------------+ - |line_geom | - +-------------------------------------------------------+ - |{3, [[[40.0, 40.0], [30.0, 10.0], [10.0, 30.0]]], [[]]}| - +-------------------------------------------------------+ - - .. code-tab:: scala - - val df = List( - (30.0, 10.0), - (10.0, 30.0), - (40.0, 40.0) - ).toDF("lon", "lat") - df.select(st_point($"lon", $"lat").alias("point_geom")) - .groupBy() - .agg(collect_list($"point_geom").alias("point_array")) - .select(st_makeline($"point_array").alias("line_geom")) - .show(false) - +-------------------------------------------------------+ - |line_geom | - +-------------------------------------------------------+ - |{3, [[[40.0, 40.0], [30.0, 10.0], [10.0, 30.0]]], [[]]}| - +-------------------------------------------------------+ - - .. code-tab:: sql - - WITH points ( - SELECT st_point(30D, 10D) AS point_geom - UNION SELECT st_point(10D, 30D) AS point_geom - UNION SELECT st_point(40D, 40D) AS point_geom) - SELECT st_makeline(collect_list(point_geom)) - FROM points - +-------------------------------------------------------+ - |line_geom | - +-------------------------------------------------------+ - |{3, [[[40.0, 40.0], [30.0, 10.0], [10.0, 30.0]]], [[]]}| - +-------------------------------------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(lon = c(30.0, 10.0, 40.0), lat = c(10.0, 30.0, 40.0))) - df <- select(df, alias(st_point(column("lon"), column("lat")), "point_geom")) - df <- groupBy(df) - df <- agg(df, alias(collect_list(column("point_geom")), "point_array")) - df <- select(df, alias(st_makeline(column("point_array")), "line_geom")) - showDF(df, truncate=F) - +---------------------------------------------------------------+ - |line_geom | - +---------------------------------------------------------------+ - |{3, 4326, [[[30.0, 10.0], [10.0, 30.0], [40.0, 40.0]]], [[[]]]}| - +---------------------------------------------------------------+ - - -st_makepolygon -************** - -.. function:: st_makepolygon(col) - - Create a new Mosaic Polygon geometry from a closed LineString. - - :param col: closed LineString - :type col: Column: InternalGeometryType - :rtype: Column: InternalGeometryType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'LINESTRING (30 10, 40 40, 20 40, 10 20, 30 10)'}]) - df.select(st_makepolygon(st_geomfromwkt('wkt')).alias('polygon_geom')).show(1, False) - +-----------------------------------------------------------------------------------+ - |polygon_geom | - +-----------------------------------------------------------------------------------+ - |{5, [[[30.0, 10.0], [40.0, 40.0], [20.0, 40.0], [10.0, 20.0], [30.0, 10.0]]], [[]]}| - +-----------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = List(("LINESTRING (30 10, 40 40, 20 40, 10 20, 30 10)")).toDF("wkt") - df.select(st_makepolygon(st_geomfromwkt($"wkt")).alias("polygon_geom")).show(false) - +-----------------------------------------------------------------------------------+ - |polygon_geom | - +-----------------------------------------------------------------------------------+ - |{5, [[[30.0, 10.0], [40.0, 40.0], [20.0, 40.0], [10.0, 20.0], [30.0, 10.0]]], [[]]}| - +-----------------------------------------------------------------------------------+ - - .. code-tab:: sql - - SELECT st_makepolygon(st_geomfromwkt("LINESTRING (30 10, 40 40, 20 40, 10 20, 30 10)")) AS polygon_geom - +-----------------------------------------------------------------------------------+ - |polygon_geom | - +-----------------------------------------------------------------------------------+ - |{5, [[[30.0, 10.0], [40.0, 40.0], [20.0, 40.0], [10.0, 20.0], [30.0, 10.0]]], [[]]}| - +-----------------------------------------------------------------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame('wkt' = 'LINESTRING (30 10, 40 40, 20 40, 10 20, 30 10)')) - showDF(select(df, alias(st_makepolygon(st_geomfromwkt(column('wkt'))), 'polygon_geom')), truncate=F) - +-----------------------------------------------------------------------------------+ - |polygon_geom | - +-----------------------------------------------------------------------------------+ - |{5, [[[30.0, 10.0], [40.0, 40.0], [20.0, 40.0], [10.0, 20.0], [30.0, 10.0]]], [[]]}| - +-----------------------------------------------------------------------------------+ - -st_geomfromwkt -************** - -.. function:: st_geomfromwkt(col) - - Create a new Mosaic geometry from Well-known Text. - - :param col: Well-known Text Geometry - :type col: Column: StringType - :rtype: Column: InternalGeometryType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'LINESTRING (30 10, 40 40, 20 40, 10 20, 30 10)'}]) - df.select(st_geomfromwkt('wkt')).show(1, False) - +-------------------------------------------------------------------------------------+ - |convert_to(wkt) | - +-------------------------------------------------------------------------------------+ - |{3, [[[30.0, 10.0], [40.0, 40.0], [20.0, 40.0], [10.0, 20.0], [30.0, 10.0]]], [[[]]]}| - +-------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = List(("LINESTRING (30 10, 40 40, 20 40, 10 20, 30 10)")).toDF("wkt") - df.select(st_geomfromwkt($"wkt")).show(false) - +-------------------------------------------------------------------------------------+ - |convert_to(wkt) | - +-------------------------------------------------------------------------------------+ - |{3, [[[30.0, 10.0], [40.0, 40.0], [20.0, 40.0], [10.0, 20.0], [30.0, 10.0]]], [[[]]]}| - +-------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - SELECT st_geomfromwkt("LINESTRING (30 10, 40 40, 20 40, 10 20, 30 10)") AS linestring - +-------------------------------------------------------------------------------------+ - | linestring | - +-------------------------------------------------------------------------------------+ - |{3, [[[30.0, 10.0], [40.0, 40.0], [20.0, 40.0], [10.0, 20.0], [30.0, 10.0]]], [[[]]]}| - +-------------------------------------------------------------------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame('wkt' = 'LINESTRING (30 10, 40 40, 20 40, 10 20, 30 10)')) - showDF(select(df, alias(st_geomfromwkt(column('wkt')), 'linestring')), truncate=F) - +-------------------------------------------------------------------------------------+ - | linestring | - +-------------------------------------------------------------------------------------+ - |{3, [[[30.0, 10.0], [40.0, 40.0], [20.0, 40.0], [10.0, 20.0], [30.0, 10.0]]], [[[]]]}| - +-------------------------------------------------------------------------------------+ - -st_geomfromwkb -************** - -.. function:: st_geomfromwkb(col) - - Create a new Mosaic geometry from Well-known Binary. - - :param col: Well-known Binary Geometry - :type col: Column: BinaryType - :rtype: Column: InternalGeometryType - - :example: - -.. tabs:: - .. code-tab:: py - - import binascii - - hex = '0000000001C052F1F0ED3D859D4041983D46B26BF8' - binary = binascii.unhexlify(hex) - df = spark.createDataFrame([{'wkb': binary}]) - df.select(st_geomfromwkb('wkb')).show(1, False) - +--------------------------------------+ - |convert_to(wkb) | - +--------------------------------------+ - |{1, [[[-75.78033, 35.18937]]], [[[]]]}| - +--------------------------------------+ - - .. code-tab:: scala - - val df = List(("POINT (-75.78033 35.18937)")).toDF("wkt") - df.select(st_geomfromwkb(st_aswkb($"wkt"))).show(false) - +--------------------------------------+ - |convert_to(convert_to(wkt)) | - +--------------------------------------+ - |{1, [[[-75.78033, 35.18937]]], [[[]]]}| - +--------------------------------------+ - - .. code-tab:: sql - - SELECT st_geomfromwkb(st_aswkb("POINT (-75.78033 35.18937)")) - +--------------------------------------+ - |convert_to(convert_to(wkt)) | - +--------------------------------------+ - |{1, [[[-75.78033, 35.18937]]], [[[]]]}| - +--------------------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame('wkt'= "POINT (-75.78033 35.18937)")) - showDF(select(df, st_geomfromwkb(st_aswkb(column("wkt")))), truncate=F) - +--------------------------------------+ - |convert_to(wkb) | - +--------------------------------------+ - |{1, [[[-75.78033, 35.18937]]], [[[]]]}| - +--------------------------------------+ - -st_geomfromgeojson -****************** - -.. function:: st_geomfromgeojson(col) - - Create a new Mosaic geometry from GeoJSON. - - :param col: GeoJSON Geometry - :type col: Column: StringType - :rtype: Column: InternalGeometryType - - :example: - -.. tabs:: - .. code-tab:: py - - import json - - geojson_dict = { - "type":"Point", - "coordinates":[ - -75.78033, - 35.18937 - ], - "crs":{ - "type":"name", - "properties":{ - "name":"EPSG:4326" - } - } - } - df = spark.createDataFrame([{'json': json.dumps(geojson_dict)}]) - df.select(st_geomfromgeojson('json')).show(1, False) - +--------------------------------------+ - |convert_to(as_json(json)) | - +--------------------------------------+ - |{1, [[[-75.78033, 35.18937]]], [[[]]]}| - +--------------------------------------+ - - .. code-tab:: scala - - val df = List( - ("""{ - | "type":"Point", - | "coordinates":[ - | -75.78033, - | 35.18937 - | ], - | "crs":{ - | "type":"name", - | "properties":{ - | "name":"EPSG:4326" - | } - | } - |}""".stripMargin) - ) - .toDF("json") - df.select(st_geomfromgeojson($"json")).show(false) - +--------------------------------------+ - |convert_to(as_json(json)) | - +--------------------------------------+ - |{1, [[[-75.78033, 35.18937]]], [[[]]]}| - +--------------------------------------+ - - .. code-tab:: sql - - SELECT st_geomfromgeojson("{\"type\":\"Point\",\"coordinates\":[-75.78033,35.18937],\"crs\":{\"type\":\"name\",\"properties\":{\"name\":\"EPSG:4326\"}}}") - +--------------------------------------+ - |convert_to(as_json(json)) | - +--------------------------------------+ - |{1, [[[-75.78033, 35.18937]]], [[[]]]}| - +--------------------------------------+ - - .. code-tab:: r R - - geojson <- '{ - "type":"Point", - "coordinates":[ - -75.78033, - 35.18937 - ], - "crs":{ - "type":"name", - "properties":{ - "name":"EPSG:4326" - } - } - }' - df <- createDataFrame(data.frame('json' = geojson)) - showDF(select(df, st_geomfromgeojson(column('json'))), truncate=F) - +--------------------------------------+ - |convert_to(as_json(json)) | - +--------------------------------------+ - |{1, [[[-75.78033, 35.18937]]], [[[]]]}| - +--------------------------------------+ diff --git a/v0.3.x/_sources/api/raster-format-readers.rst.txt b/v0.3.x/_sources/api/raster-format-readers.rst.txt deleted file mode 100644 index 3e0c6443e..000000000 --- a/v0.3.x/_sources/api/raster-format-readers.rst.txt +++ /dev/null @@ -1,167 +0,0 @@ -===================== -Raster Format Readers -===================== - - -Intro -##### -Mosaic provides spark readers for the following raster formats: - - * GTiff (GeoTiff) using .tif file extension - https://gdal.org/drivers/raster/gtiff.html - * COG (Cloud Optimized GeoTiff) using .tif file extension - https://gdal.org/drivers/raster/cog.html - * HDF4 using .hdf file extension - https://gdal.org/drivers/raster/hdf4.html - * HDF5 using .h5 file extension - https://gdal.org/drivers/raster/hdf5.html - * NetCDF using .nc file extension - https://gdal.org/drivers/raster/netcdf.html - * JP2ECW using .jp2 file extension - https://gdal.org/drivers/raster/jp2ecw.html - * JP2KAK using .jp2 file extension - https://gdal.org/drivers/raster/jp2kak.html - * JP2OpenJPEG using .jp2 file extension - https://gdal.org/drivers/raster/jp2openjpeg.html - * PDF using .pdf file extension - https://gdal.org/drivers/raster/pdf.html - * PNG using .png file extension - https://gdal.org/drivers/raster/png.html - * VRT using .vrt file extension - https://gdal.org/drivers/raster/vrt.html - * XPM using .xpm file extension - https://gdal.org/drivers/raster/xpm.html - * GRIB using .grb file extension - https://gdal.org/drivers/raster/grib.html - * Zarr using .zarr file extension - https://gdal.org/drivers/raster/zarr.html - -Other formats are supported if supported by GDAL available drivers. - -Mosaic provides two flavors of the readers: - * spark.read.format("gdal") for reading 1 file per spark task - * mos.read().format("raster_to_grid") reader that automatically converts raster to grid. - - -spark.read.format("gdal") -************************* -A base Spark SQL data source for reading GDAL raster data sources. -It reads metadata of the raster and exposes the direct paths for the raster files. -The output of the reader is a DataFrame with the following columns: - - * tile - loaded raster tile (RasterTileType) - * ySize - height of the raster in pixels (IntegerType) - * xSize - width of the raster in pixels (IntegerType) - * bandCount - number of bands in the raster (IntegerType) - * metadata - raster metadata (MapType(StringType, StringType)) - * subdatasets - raster subdatasets (MapType(StringType, StringType)) - * srid - raster spatial reference system identifier (IntegerType) - * proj4Str - raster spatial reference system proj4 string (StringType) - -.. function:: spark.read.format("gdal").load(path) - - Loads a GDAL raster file and returns the result as a DataFrame. - It uses standard spark.read.format(*).option(*).load(*) pattern. - - :param path: path to the raster file on dbfs - :type path: *StringType - :rtype: DataFrame - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("gdal")\ - .option("driverName", "GTiff")\ - .load("dbfs:/path/to/raster.tif") - df.show() - +---------------------------------------------------------------------------------------------------------------+------+------+----------+---------------------+--------------------+-----+----------------------+ - | tile| ySize| xSize| bandCount| metadata| subdatasets| srid| proj4Str| - +---------------------------------------------------------------------------------------------------------------+------+------+----------+---------------------+--------------------+-----+----------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | 100 | 100 | 1 | {AREA_OR_POINT=Po...| null| 4326| +proj=longlat +da...| - +---------------------------------------------------------------------------------------------------------------+------+------+----------+---------------------+--------------------+-----+----------------------+ - - .. code-tab:: scala - - val df = spark.read.format("gdal") - .option("driverName", "GTiff") - .load("dbfs:/path/to/raster.tif") - df.show() - +---------------------------------------------------------------------------------------------------------------+------+------+----------+---------------------+--------------------+-----+----------------------+ - | tile| ySize| xSize| bandCount| metadata| subdatasets| srid| proj4Str| - +---------------------------------------------------------------------------------------------------------------+------+------+----------+---------------------+--------------------+-----+----------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | 100 | 100 | 1 | {AREA_OR_POINT=Po...| null| 4326| +proj=longlat +da...| - +---------------------------------------------------------------------------------------------------------------+------+------+----------+---------------------+--------------------+-----+----------------------+ - -.. warning:: - Issue 350: https://github.com/databrickslabs/mosaic/issues/350 - The raster reader 'driverName' option has to match the names provided in the above list. - For example, if you want to read a GeoTiff file, you have to use the following option: - .option("driverName", "GTiff") instead of .option("driverName", "tif"). - - -mos.read().format("raster_to_grid") -*********************************** -Reads a GDAL raster file and converts it to a grid. -It uses a pattern similar to standard spark.read.format(*).option(*).load(*) pattern. -The only difference is that it uses mos.read() instead of spark.read(). -The raster pixels are converted to grid cells using specified combiner operation (default is mean). -If the raster pixels are larger than the grid cells, the cell values can be calculated using interpolation. -The interpolation method used is Inverse Distance Weighting (IDW) where the distance function is a k_ring -distance of the grid. -The reader supports the following options: - - * fileExtension - file extension of the raster file (StringType) - default is *.* - * vsizip - if the rasters are zipped files, set this to true (BooleanType) - * resolution - resolution of the output grid (IntegerType) - * combiner - combiner operation to use when converting raster to grid (StringType) - default is mean - * retile - if the rasters are too large they can be re-tiled to smaller tiles (BooleanType) - * tileSize - size of the re-tiled tiles, tiles are always squares of tileSize x tileSize (IntegerType) - * readSubdatasets - if the raster has subdatasets set this to true (BooleanType) - * subdatasetNumber - if the raster has subdatasets, select a specific subdataset by index (IntegerType) - * subdatasetName - if the raster has subdatasets, select a specific subdataset by name (StringType) - * kRingInterpolate - if the raster pixels are larger than the grid cells, use k_ring interpolation with n = kRingInterpolate (IntegerType) - -.. function:: mos.read().format("raster_to_grid").load(path) - - Loads a GDAL raster file and returns the result as a DataFrame. - It uses standard mos.read().format(*).option(*).load(*) pattern. - - :param path: path to the raster file on dbfs - :type path: *StringType - :rtype: DataFrame - - :example: - -.. tabs:: - .. code-tab:: py - - df = mos.read().format("raster_to_grid")\ - .option("fileExtension", "*.tif")\ - .option("resolution", "8")\ - .option("combiner", "mean")\ - .option("retile", "true")\ - .option("tileSize", "1000")\ - .option("kRingInterpolate", "2")\ - .load("dbfs:/path/to/raster.tif") - df.show() - +--------+--------+------------------+ - |band_id |cell_id |cell_value | - +--------+--------+------------------+ - | 1| 1|0.1400000000000000| - | 1| 2|0.1400000000000000| - | 1| 3|0.2464000000000000| - | 1| 4|0.2464000000000000| - +--------+--------+------------------+ - - .. code-tab:: scala - - val df = MosaicContext.read.format("raster_to_grid") - .option("fileExtension", "*.tif") - .option("resolution", "8") - .option("combiner", "mean") - .option("retile", "true") - .option("tileSize", "1000") - .option("kRingInterpolate", "2") - .load("dbfs:/path/to/raster.tif") - df.show() - +--------+--------+------------------+ - |band_id |cell_id |cell_value | - +--------+--------+------------------+ - | 1| 1|0.1400000000000000| - | 1| 2|0.1400000000000000| - | 1| 3|0.2464000000000000| - | 1| 4|0.2464000000000000| - +--------+--------+------------------+ - -.. warning:: - Issue 350: https://github.com/databrickslabs/mosaic/issues/350 - The option 'fileExtension' expects a wild card mask. Please use the following format: '*.tif' or equivalent for other formats. - If you use 'tif' without the wildcard the reader wont pick up any files and you will have empty table as a result. \ No newline at end of file diff --git a/v0.3.x/_sources/api/raster-functions.rst.txt b/v0.3.x/_sources/api/raster-functions.rst.txt deleted file mode 100644 index 19a8cc42c..000000000 --- a/v0.3.x/_sources/api/raster-functions.rst.txt +++ /dev/null @@ -1,2865 +0,0 @@ -================= -Raster functions -================= - -Intro -################ -Raster functions are available in mosaic if you have installed the optional dependency `GDAL`. -Please see :doc:`Install and Enable GDAL with Mosaic ` for installation instructions. -Mosaic provides several unique raster functions that are not available in other Spark packages. -Mainly raster to grid functions, which are useful for reprojecting the raster data into a standard grid index system. -This is useful for performing spatial joins between raster data and vector data. -Mosaic also provides a scalable retiling function that can be used to retile raster data in case of bottlenecking due to large files. -All raster functions respect the \"rst\_\" prefix naming convention. -In versions <= 0.3.11 mosaic was operating using either string paths or byte arrays. -In versions > 0.3.11 mosaic is operating using tile objects only. Tile objects are created using rst_fromfile(path_to_raster) function. -If you use spark.read.format("gdal") tiles are automatically generated for you. - -.. note:: For mosaic versions > 0.3.11 please do not use setup_gdal call. There is no longer a need for shared objects to be copied around. - Please use the updated init_script.sh script to install GDAL on your cluster. See :doc:`Install and Enable GDAL with Mosaic ` for more details. - -rst_bandmetadata -**************** - -.. function:: rst_bandmetadata(tile, band) - - Extract the metadata describing the raster band. - Metadata is return as a map of key value pairs. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array. - :type col: Column (RasterTileType) - :param band: The band number to extract metadata for. - :type band: Column (IntegerType) - :rtype: Column: MapType(StringType, StringType) - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("gdal").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/gdal-netcdf-coral") - df.select(mos.rst_bandmetadata("tile", F.lit(1))).limit(1).display() - +--------------------------------------------------------------------------------------+ - | rst_bandmetadata(tile, 1) | - +--------------------------------------------------------------------------------------+ - | {"_FillValue": "251", "NETCDF_DIM_time": "1294315200", "long_name": "bleaching alert | - | area 7-day maximum composite", "grid_mapping": "crs", "NETCDF_VARNAME": | - | "bleaching_alert_area", "coverage_content_type": "thematicClassification", | - | "standard_name": "N/A", "comment": "Bleaching Alert Area (BAA) values are coral | - | bleaching heat stress levels: 0 - No Stress; 1 - Bleaching Watch; 2 - Bleaching | - | Warning; 3 - Bleaching Alert Level 1; 4 - Bleaching Alert Level 2. Product | - | description is provided at https://coralreefwatch.noaa.gov/product/5km/index.php.", | - | "valid_min": "0", "units": "stress_level", "valid_max": "4", "scale_factor": "1"} | - +--------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("gdal").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_bandmetadata(col("tile"), lit(1))).limit(1).show(false) - +--------------------------------------------------------------------------------------+ - | rst_bandmetadata(tile, 1) | - +--------------------------------------------------------------------------------------+ - | {"_FillValue": "251", "NETCDF_DIM_time": "1294315200", "long_name": "bleaching alert | - | area 7-day maximum composite", "grid_mapping": "crs", "NETCDF_VARNAME": | - | "bleaching_alert_area", "coverage_content_type": "thematicClassification", | - | "standard_name": "N/A", "comment": "Bleaching Alert Area (BAA) values are coral | - | bleaching heat stress levels: 0 - No Stress; 1 - Bleaching Watch; 2 - Bleaching | - | Warning; 3 - Bleaching Alert Level 1; 4 - Bleaching Alert Level 2. Product | - | description is provided at https://coralreefwatch.noaa.gov/product/5km/index.php.", | - | "valid_min": "0", "units": "stress_level", "valid_max": "4", "scale_factor": "1"} | - +--------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extension "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_bandmetadata(tile, 1) FROM coral_netcdf LIMIT 1 - +--------------------------------------------------------------------------------------+ - | rst_bandmetadata(tile, 1) | - +--------------------------------------------------------------------------------------+ - | {"_FillValue": "251", "NETCDF_DIM_time": "1294315200", "long_name": "bleaching alert | - | area 7-day maximum composite", "grid_mapping": "crs", "NETCDF_VARNAME": | - | "bleaching_alert_area", "coverage_content_type": "thematicClassification", | - | "standard_name": "N/A", "comment": "Bleaching Alert Area (BAA) values are coral | - | bleaching heat stress levels: 0 - No Stress; 1 - Bleaching Watch; 2 - Bleaching | - | Warning; 3 - Bleaching Alert Level 1; 4 - Bleaching Alert Level 2. Product | - | description is provided at https://coralreefwatch.noaa.gov/product/5km/index.php.", | - | "valid_min": "0", "units": "stress_level", "valid_max": "4", "scale_factor": "1"} | - +--------------------------------------------------------------------------------------+ - -rst_boundingbox -*************** - -.. function:: rst_boundingbox(raster) - - Returns the bounding box of the raster as a polygon geometry. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array. - :type col: Column (RasterTileType) - :rtype: Column: StructType(DoubleType, DoubleType, DoubleType, DoubleType) - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("gdal").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/gdal-netcdf-coral") - df.select(mos.rst_boundingbox("tile")).limit(1).display() - +------------------------------------------------------------------+ - | rst_boundingbox(tile) | - +------------------------------------------------------------------+ - | [00 00 ... 00] // WKB representation of the polygon bounding box | - +------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("gdal").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_boundingbox(col("tile"))).limit(1).show(false) - +------------------------------------------------------------------+ - | rst_boundingbox(tile) | - +------------------------------------------------------------------+ - | [00 00 ... 00] // WKB representation of the polygon bounding box | - +------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extension "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_boundingbox(tile) FROM coral_netcdf LIMIT 1 - +------------------------------------------------------------------+ - | rst_boundingbox(tile) | - +------------------------------------------------------------------+ - | [00 00 ... 00] // WKB representation of the polygon bounding box | - +------------------------------------------------------------------+ - -rst_clip -******** - -.. function:: rst_clip(raster, geometry) - - Clips the raster to the geometry. - The geometry is expected to be in the same coordinate reference system as the raster. - The geometry is expected to be a polygon or a multipolygon. - The output raster will have the same extent as the input geometry. - The output raster will have the same number of bands as the input raster. - The output raster will have the same pixel type as the input raster. - The output raster will have the same pixel size as the input raster. - The output raster will have the same coordinate reference system as the input raster. - - :param tile: A column containing the raster tile. - :type col: Column (RasterTileType) - :param geometry: A column containing the geometry to clip the raster to. - :type col: Column (GeometryType) - :rtype: Column: RasterTileType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("gdal").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/gdal-netcdf-coral") - df.select(mos.rst_clip("tile", F.lit("POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))"))).limit(1).display() - +----------------------------------------------------------------------------------------------------------------+ - | rst_clip(tile, POLYGON ((0 0, 0 10, 10 10, 10 0, 0 0))) | - +----------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +----------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("gdal").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_clip(col("tile"), lit("POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))"))).limit(1).show(false) - +----------------------------------------------------------------------------------------------------------------+ - | rst_clip(tile, POLYGON ((0 0, 0 10, 10 10, 10 0, 0 0))) | - +-----------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +-----------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extension "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_clip(tile, "POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))") FROM coral_netcdf LIMIT 1 - +----------------------------------------------------------------------------------------------------------------+ - | rst_clip(tile, POLYGON ((0 0, 0 10, 10 10, 10 0, 0 0))) | - +----------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +----------------------------------------------------------------------------------------------------------------+ - -rst_combineavg -************** - -.. function:: rst_combineavg(rasters) - - Combines a collection of rasters by averaging the pixel values. - The rasters must have the same extent, number of bands, and pixel type. - The rasters must have the same pixel size and coordinate reference system. - The output raster will have the same extent as the input rasters. - The output raster will have the same number of bands as the input rasters. - The output raster will have the same pixel type as the input rasters. - The output raster will have the same pixel size as the input rasters. - The output raster will have the same coordinate reference system as the input rasters. - - :param tile: A column containing an array of raster tiles. - :type col: Column (ArrayType(RasterTileType)) - :rtype: Column: RasterTileType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("gdal").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/gdal-netcdf-coral")\ - .groupBy().agg(F.collect_list("tile").alias("tile")) - df.select(mos.rst_combineavg("tile")).limit(1).display() - +----------------------------------------------------------------------------------------------------------------+ - | rst_combineavg(tile) | - +----------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +----------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("gdal").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - .groupBy().agg(collect_list(col("tile")).as("tile")) - df.select(rst_combineavg(col("tile"))).limit(1).show(false) - +----------------------------------------------------------------------------------------------------------------+ - | rst_combineavg(tile) | - +----------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +----------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extension "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - WITH grouped as ( - SELECT collect_list(tile) as tile FROM coral_netcdf - ) - SELECT rst_combineavg(tile) FROM grouped LIMIT 1 - +----------------------------------------------------------------------------------------------------------------+ - | rst_combineavg(tile) | - +----------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +----------------------------------------------------------------------------------------------------------------+ - -rst_combineavgagg -***************** - -.. function:: rst_combineavgagg(rasters) - - Combines a group by statement over rasters by averaging the pixel values. - The rasters must have the same extent, number of bands, and pixel type. - The rasters must have the same pixel size and coordinate reference system. - The output raster will have the same extent as the input rasters. - The output raster will have the same number of bands as the input rasters. - The output raster will have the same pixel type as the input rasters. - The output raster will have the same pixel size as the input rasters. - The output raster will have the same coordinate reference system as the input rasters. - - :param tile: A column containing raster tiles. - :type col: Column (ArrayType(RasterTileType)) - :rtype: Column: RasterTileType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("gdal").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/gdal-netcdf-coral")\ - df.groupBy().agg(mos.rst_combineavgagg("tile")).limit(1).display() - +----------------------------------------------------------------------------------------------------------------+ - | rst_combineavgagg(tile) | - +----------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +----------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("gdal").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.groupBy().agg(rst_combineavgagg(col("tile"))).limit(1).show(false) - +----------------------------------------------------------------------------------------------------------------+ - | rst_combineavgagg(tile) | - +----------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +----------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extension "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_combineavgagg(tile) - FROM coral_netcdf - GROUP BY 1 - +----------------------------------------------------------------------------------------------------------------+ - | rst_combineavgagg(tile) | - +----------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +----------------------------------------------------------------------------------------------------------------+ - -rst_frombands -************** - -.. function:: rst_frombands(rasters) - - Combines a collection of rasters into a single raster. - The rasters must have the same extent. - The rasters must have the same pixel coordinate reference system. - The output raster will have the same extent as the input rasters. - The output raster will have the same number of bands as all the input raster bands. - The output raster will have the same pixel type as the input raster bands. - The output raster will have the same pixel size as the highest resolution input rasters. - The output raster will have the same coordinate reference system as the input rasters. - - :param tile: A column containing an array of raster tiles. - :type col: Column (ArrayType(RasterTileType)) - :rtype: Column: RasterTileType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("gdal").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/gdal-netcdf-coral")\ - .groupBy().agg(F.collect_list("tile").alias("tile")) - df.select(mos.rst_frombands("tile")).limit(1).display() - +----------------------------------------------------------------------------------------------------------------+ - | rst_frombands(tile) | - +----------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +----------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("gdal").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - .groupBy().agg(collect_list(col("tile")).as("tile")) - df.select(rst_frombands(col("tile"))).limit(1).show(false) - +----------------------------------------------------------------------------------------------------------------+ - | rst_frombands(tile) | - +----------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +----------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extension "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - WITH grouped as ( - SELECT collect_list(tile) as tile FROM coral_netcdf - ) - SELECT rst_frombands(tile) FROM grouped LIMIT 1 - +----------------------------------------------------------------------------------------------------------------+ - | rst_frombands(tile) | - +----------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +----------------------------------------------------------------------------------------------------------------+ - -rst_fromfile -************ - -.. function:: rst_fromfile(path, ) - - Returns a raster tile from a file path. - The file path must be a string. - The file path must be a valid path to a raster file. - The file path must be a path to a file that GDAL can read. - If the size_in_MB parameter is specified, the raster will be split into tiles of the specified size. - If the size_in_MB parameter is not specified, the raster will not be split into tiles. - If the size_in_Mb < 0 the raster wont be split into tiles. - - :param path: A column containing the path to a raster file. - :type col: Column (StringType) - :param size_in_MB: Optional parameter to specify the size of the raster tile in MB. Default is not to split the input. - :type col: Column (IntegerType) - :rtype: Column: RasterTileType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_fromfile("path")).limit(1).display() - +----------------------------------------------------------------------------------------------------------------+ - | rst_fromfile(path) | - +----------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +----------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_fromfile(col("path"))).limit(1).show(false) - +----------------------------------------------------------------------------------------------------------------+ - | rst_fromfile(path) | - +----------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +----------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING binaryFile - OPTIONS (path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_fromfile(path) FROM coral_netcdf LIMIT 1 - +----------------------------------------------------------------------------------------------------------------+ - | rst_fromfile(path) | - +----------------------------------------------------------------------------------------------------------------+ - -rst_georeference -**************** - -.. function:: rst_georeference(raster) - - Returns GeoTransform of the raster as a GT array of doubles. - GT(0) x-coordinate of the upper-left corner of the upper-left pixel. - GT(1) w-e pixel resolution / pixel width. - GT(2) row rotation (typically zero). - GT(3) y-coordinate of the upper-left corner of the upper-left pixel. - GT(4) column rotation (typically zero). - GT(5) n-s pixel resolution / pixel height (negative value for a north-up image). - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array. - :type col: Column (RasterTileType) - :rtype: Column: MapType(StringType, DoubleType) - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_georeference("path")).limit(1).display() - +--------------------------------------------------------------------------------------------+ - | rst_georeference(path) | - +--------------------------------------------------------------------------------------------+ - | {"scaleY": -0.049999999152053956, "skewX": 0, "skewY": 0, "upperLeftY": 89.99999847369712, | - | "upperLeftX": -180.00000610436345, "scaleX": 0.050000001695656514} | - +--------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_georeference(col("path"))).limit(1).show() - +--------------------------------------------------------------------------------------------+ - | rst_georeference(path) | - +--------------------------------------------------------------------------------------------+ - | {"scaleY": -0.049999999152053956, "skewX": 0, "skewY": 0, "upperLeftY": 89.99999847369712, | - | "upperLeftX": -180.00000610436345, "scaleX": 0.050000001695656514} | - +--------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_georeference(path) FROM coral_netcdf LIMIT 1 - +--------------------------------------------------------------------------------------------+ - | rst_georeference(path) | - +--------------------------------------------------------------------------------------------+ - | {"scaleY": -0.049999999152053956, "skewX": 0, "skewY": 0, "upperLeftY": 89.99999847369712, | - | "upperLeftX": -180.00000610436345, "scaleX": 0.050000001695656514} | - +--------------------------------------------------------------------------------------------+ - -rest_getnodata -************** - -.. function:: rst_getnodata(raster) - - Returns the nodata value of the raster bands. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array. - :type col: Column (RasterTileType) - :rtype: Column: ArrayType(DoubleType) - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_getnodata("path")).limit(1).display() - +---------------------+ - | rst_getnodata(path) | - +---------------------+ - | [0.0, -9999.0, ...] | - +---------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_getnodata(col("path"))).limit(1).show() - +---------------------+ - | rst_getnodata(path) | - +---------------------+ - | [0.0, -9999.0, ...] | - +---------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_getnodata(path) FROM coral_netcdf LIMIT 1 - +---------------------+ - | rst_getnodata(path) | - +---------------------+ - | [0.0, -9999.0, ...] | - +---------------------+ - -rst_getsubdataset -***************** - -.. function:: rst_getsubdataset(raster, name) - - Returns the subdataset of the raster with a given name. - The subdataset name must be a string. The name is not a full path. - The name is the last identifier in the subdataset path (FORMAT:PATH:NAME). - The subdataset name must be a valid subdataset name for the raster. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array. - :type col: Column (RasterTileType) - :param name: A column containing the name of the subdataset to return. - :type col: Column (StringType) - :rtype: Column: RasterTileType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_getsubdataset("path", "sst")).limit(1).display() - +----------------------------------------------------------------------------------------------------------------+ - | rst_getsubdataset(path, sst) | - +----------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +----------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_getsubdataset(col("path"), lit("sst"))).limit(1).show(false) - +----------------------------------------------------------------------------------------------------------------+ - | rst_getsubdataset(path, sst) | - +----------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +----------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_getsubdataset(path, "sst") FROM coral_netcdf LIMIT 1 - +----------------------------------------------------------------------------------------------------------------+ - | rst_getsubdataset(path, sst) | - +----------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +----------------------------------------------------------------------------------------------------------------+ - -rst_height -********** - -.. function:: rst_height(raster) - - Returns the height of the raster in pixels. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array. - :type col: Column (RasterTileType) - :rtype: Column: IntegerType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_height('path')).show() - +--------------------+ - | rst_height(path) | - +--------------------+ - | 3600 | - | 3600 | - +--------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_height(col("path"))).show() - +--------------------+ - | rst_height(path) | - +--------------------+ - |3600 | - |3600 | - +--------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_height(path) FROM coral_netcdf - +--------------------+ - | rst_height(path) | - +--------------------+ - |3600 | - |3600 | - +--------------------+ - -rst_initnodata -************** - -.. function:: rst_initnodata(raster) - - Initializes the nodata value of the raster bands. - The nodata value will be set to default values for the pixel type of the raster bands. - The output raster will have the same extent as the input raster. - The default nodata value for ByteType is 0. - The default nodata value for UnsignedShortType is UShort.MaxValue (65535). - The default nodata value for ShortType is Short.MinValue (-32768). - The default nodata value for UnsignedIntegerType is Int.MaxValue (4.294967294E9). - The default nodata value for IntegerType is Int.MinValue (-2147483648). - The default nodata value for FloatType is Float.MinValue (-3.4028234663852886E38). - The default nodata value for DoubleType is Double.MinValue (-1.7976931348623157E308). - - :param tile: A column containing the raster tile. - :type col: Column (RasterTileType) - :rtype: Column: RasterTileType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_initnodata("path")).limit(1).display() - +----------------------------------------------------------------------------------------------------------------+ - | rst_initnodata(path) | - +----------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +----------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_initnodata(col("path"))).limit(1).show(false) - +----------------------------------------------------------------------------------------------------------------+ - | rst_initnodata(path) | - +----------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +----------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_initnodata(path) FROM coral_netcdf LIMIT 1 - +----------------------------------------------------------------------------------------------------------------+ - | rst_initnodata(path) | - +----------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +----------------------------------------------------------------------------------------------------------------+ - -rst_isempty -************* - -.. function:: rst_isempty(raster) - - Returns true if the raster is empty. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array. - :type col: Column (RasterTileType) - :rtype: Column: BooleanType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_isempty('path')).show() - +--------------------+ - | rst_height(path) | - +--------------------+ - |false | - |false | - +--------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_isempty(col("path"))).show() - +--------------------+ - | rst_height(path) | - +--------------------+ - |false | - |false | - +--------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_isempty(path) FROM coral_netcdf - +--------------------+ - | rst_height(path) | - +--------------------+ - |false | - |false | - +--------------------+ - -rst_memsize -************* - -.. function:: rst_memsize(raster) - - Returns size of the raster in bytes. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array. - :type col: Column (RasterTileType) - :rtype: Column: LongType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_memsize('path')).show() - +--------------------+ - | rst_height(path) | - +--------------------+ - |730260 | - |730260 | - +--------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_memsize(col("path"))).show() - +--------------------+ - | rst_height(path) | - +--------------------+ - |730260 | - |730260 | - +--------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_memsize(path) FROM coral_netcdf - +--------------------+ - | rst_height(path) | - +--------------------+ - |730260 | - |730260 | - +--------------------+ - -rst_merge -********* - -.. function:: rst_merge(rasters) - - Combines a collection of rasters into a single raster. - The rasters do not need to have the same extent. - The rasters must have the same coordinate reference system. - The rasters are combined using gdalwarp. - The noData value needs to be initialised; if not, the non valid pixels may introduce artifacts in the output raster. - The rasters are stacked in the order they are provided. - The output raster will have the extent covering all input rasters. - The output raster will have the same number of bands as the input rasters. - The output raster will have the same pixel type as the input rasters. - The output raster will have the same pixel size as the highest resolution input rasters. - The output raster will have the same coordinate reference system as the input rasters. - - :param tile: A column containing an array of raster tiles. - :type col: Column (ArrayType(RasterTileType)) - :rtype: Column: RasterTileType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("gdal").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/gdal-netcdf-coral")\ - .groupBy().agg(F.collect_list("tile").alias("tile")) - df.select(mos.rst_merge("tile")).limit(1).display() - +----------------------------------------------------------------------------------------------------------------+ - | rst_merge(tile) | - +----------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +----------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("gdal").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - .groupBy().agg(collect_list(col("tile")).as("tile")) - df.select(rst_merge(col("tile"))).limit(1).show(false) - +----------------------------------------------------------------------------------------------------------------+ - | rst_merge(tile) | - +----------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +----------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extension "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - WITH grouped as ( - SELECT collect_list(tile) as tile FROM coral_netcdf - ) - SELECT rst_merge(tile) FROM grouped LIMIT 1 - +----------------------------------------------------------------------------------------------------------------+ - | rst_merge(tile) | - +----------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +----------------------------------------------------------------------------------------------------------------+ - -rst_mergeagg -************ - -.. function:: rst_mergeagg(rasters) - - Combines a collection of rasters into a single raster. - The rasters do not need to have the same extent. - The rasters must have the same coordinate reference system. - The rasters are combined using gdalwarp. - The noData value needs to be initialised; if not, the non valid pixels may introduce artifacts in the output raster. - The rasters are stacked in the order they are provided. - This order is randomized since this is an aggregation function. - If the order of rasters is important please first collect rasters and sort them by metadata information and then use - rst_merge function. - The output raster will have the extent covering all input rasters. - The output raster will have the same number of bands as the input rasters. - The output raster will have the same pixel type as the input rasters. - The output raster will have the same pixel size as the highest resolution input rasters. - The output raster will have the same coordinate reference system as the input rasters. - - :param tile: A column containing raster tiles. - :type col: Column (RasterTileType) - :rtype: Column: RasterTileType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("gdal").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/gdal-netcdf-coral") - df.select(mos.rst_mergeagg("tile")).limit(1).display() - +----------------------------------------------------------------------------------------------------------------+ - | rst_mergeagg(tile) | - +----------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +----------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("gdal").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_mergeagg(col("tile"))).limit(1).show(false) - +----------------------------------------------------------------------------------------------------------------+ - | rst_mergeagg(tile) | - +----------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +----------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extension "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_mergeagg(tile) FROM coral_netcdf LIMIT 1 - +----------------------------------------------------------------------------------------------------------------+ - | rst_mergeagg(tile) | - +----------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +----------------------------------------------------------------------------------------------------------------+ - -rst_metadata -************* - -.. function:: rst_metadata(raster) - - Extract the metadata describing the raster. - Metadata is return as a map of key value pairs. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array. - :type col: Column (RasterTileType) - :rtype: Column: MapType(StringType, StringType) - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_metadata('path')).show() - +--------------------------------------------------------------------------------------------------------------------+ - | rst_metadata(path) | - +--------------------------------------------------------------------------------------------------------------------+ - | {"NC_GLOBAL#publisher_url": "https://coralreefwatch.noaa.gov", "NC_GLOBAL#geospatial_lat_units": "degrees_north", | - | "NC_GLOBAL#platform_vocabulary": "NOAA NODC Ocean Archive System Platforms", "NC_GLOBAL#creator_type": "group", | - | "NC_GLOBAL#geospatial_lon_units": "degrees_east", "NC_GLOBAL#geospatial_bounds": "POLYGON((-90.0 180.0, 90.0 | - | 180.0, 90.0 -180.0, -90.0 -180.0, -90.0 180.0))", "NC_GLOBAL#keywords": "Oceans > Ocean Temperature > Sea Surface | - | Temperature, Oceans > Ocean Temperature > Water Temperature, Spectral/Engineering > Infrared Wavelengths > Thermal | - | Infrared, Oceans > Ocean Temperature > Bleaching Alert Area", "NC_GLOBAL#geospatial_lat_max": "89.974998", | - | .... (truncated).... "NC_GLOBAL#history": "This is a product data file of the NOAA Coral Reef Watch Daily Global | - | 5km Satellite Coral Bleaching Heat Stress Monitoring Product Suite Version 3.1 (v3.1) in its NetCDF Version 1.0 | - | (v1.0).", "NC_GLOBAL#publisher_institution": "NOAA/NESDIS/STAR Coral Reef Watch Program", | - | "NC_GLOBAL#cdm_data_type": "Grid"} | - +--------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_metadata(col("path"))).show() - +--------------------------------------------------------------------------------------------------------------------+ - | rst_metadata(path) | - +--------------------------------------------------------------------------------------------------------------------+ - | {"NC_GLOBAL#publisher_url": "https://coralreefwatch.noaa.gov", "NC_GLOBAL#geospatial_lat_units": "degrees_north", | - | "NC_GLOBAL#platform_vocabulary": "NOAA NODC Ocean Archive System Platforms", "NC_GLOBAL#creator_type": "group", | - | "NC_GLOBAL#geospatial_lon_units": "degrees_east", "NC_GLOBAL#geospatial_bounds": "POLYGON((-90.0 180.0, 90.0 | - | 180.0, 90.0 -180.0, -90.0 -180.0, -90.0 180.0))", "NC_GLOBAL#keywords": "Oceans > Ocean Temperature > Sea Surface | - | Temperature, Oceans > Ocean Temperature > Water Temperature, Spectral/Engineering > Infrared Wavelengths > Thermal | - | Infrared, Oceans > Ocean Temperature > Bleaching Alert Area", "NC_GLOBAL#geospatial_lat_max": "89.974998", | - | .... (truncated).... "NC_GLOBAL#history": "This is a product data file of the NOAA Coral Reef Watch Daily Global | - | 5km Satellite Coral Bleaching Heat Stress Monitoring Product Suite Version 3.1 (v3.1) in its NetCDF Version 1.0 | - | (v1.0).", "NC_GLOBAL#publisher_institution": "NOAA/NESDIS/STAR Coral Reef Watch Program", | - | "NC_GLOBAL#cdm_data_type": "Grid"} | - +--------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_metadata(path) FROM coral_netcdf LIMIT 1 - +--------------------------------------------------------------------------------------------------------------------+ - | rst_metadata(path) | - +--------------------------------------------------------------------------------------------------------------------+ - | {"NC_GLOBAL#publisher_url": "https://coralreefwatch.noaa.gov", "NC_GLOBAL#geospatial_lat_units": "degrees_north", | - | "NC_GLOBAL#platform_vocabulary": "NOAA NODC Ocean Archive System Platforms", "NC_GLOBAL#creator_type": "group", | - | "NC_GLOBAL#geospatial_lon_units": "degrees_east", "NC_GLOBAL#geospatial_bounds": "POLYGON((-90.0 180.0, 90.0 | - | 180.0, 90.0 -180.0, -90.0 -180.0, -90.0 180.0))", "NC_GLOBAL#keywords": "Oceans > Ocean Temperature > Sea Surface | - | Temperature, Oceans > Ocean Temperature > Water Temperature, Spectral/Engineering > Infrared Wavelengths > Thermal | - | Infrared, Oceans > Ocean Temperature > Bleaching Alert Area", "NC_GLOBAL#geospatial_lat_max": "89.974998", | - | .... (truncated).... "NC_GLOBAL#history": "This is a product data file of the NOAA Coral Reef Watch Daily Global | - | 5km Satellite Coral Bleaching Heat Stress Monitoring Product Suite Version 3.1 (v3.1) in its NetCDF Version 1.0 | - | (v1.0).", "NC_GLOBAL#publisher_institution": "NOAA/NESDIS/STAR Coral Reef Watch Program", | - | "NC_GLOBAL#cdm_data_type": "Grid"} | - +--------------------------------------------------------------------------------------------------------------------+ - -rst_ndvi -******** - -.. function:: rst_ndvi(raster, red_band, nir_band) - - Calculates the Normalized Difference Vegetation Index (NDVI) for a raster. - The NDVI is calculated using the formula: (NIR - RED) / (NIR + RED). - The output raster will have the same extent as the input raster. - The output raster will have a single band. - The output raster will have a pixel type of float64. - The output raster will have the same coordinate reference system as the input raster. - - :param tile: A column containing the raster tile. - :type col: Column (RasterTileType) - :param red_band: A column containing the band number of the red band. - :type col: Column (IntegerType) - :param nir_band: A column containing the band number of the near infrared band. - :type col: Column (IntegerType) - :rtype: Column: RasterTileType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_ndvi("path", 1, 2)).limit(1).display() - +----------------------------------------------------------------------------------------------------------------+ - | rst_ndvi(path, 1, 2) | - +----------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +----------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_ndvi(col("path"), lit(1), lit(2))).limit(1).show(false) - +----------------------------------------------------------------------------------------------------------------+ - | rst_ndvi(path, 1, 2) | - +----------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +----------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_ndvi(path, 1, 2) FROM coral_netcdf LIMIT 1 - +----------------------------------------------------------------------------------------------------------------+ - | rst_ndvi(path, 1, 2) | - +----------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +----------------------------------------------------------------------------------------------------------------+ - -rst_numbands -************* - -.. function:: rst_numbands(raster) - - Returns number of bands in the raster. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array. - :type col: Column (RasterTileType) - :rtype: Column: IntegerType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_numbands('path')).show() - +---------------------+ - | rst_numbands(path) | - +---------------------+ - | 1 | - | 1 | - +---------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_metadata(col("path"))).show() - +---------------------+ - | rst_numbands(path) | - +---------------------+ - | 1 | - | 1 | - +---------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_metadata(path) - +---------------------+ - | rst_numbands(path) | - +---------------------+ - | 1 | - | 1 | - +---------------------+ - -rst_pixelheight -*************** - -.. function:: rst_pixelheight(raster) - - Returns the height of the pixel in the raster derived via GeoTransform. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array. - :type col: Column (RasterTileType) - :rtype: Column: DoubleType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_pixelheight('path')).show() - +-----------------------+ - | rst_pixelheight(path) | - +-----------------------+ - | 1 | - | 1 | - +-----------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_pixelheight(col("path"))).show() - +-----------------------+ - | rst_pixelheight(path) | - +-----------------------+ - | 1 | - | 1 | - +-----------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_pixelheight(path) - +-----------------------+ - | rst_pixelheight(path) | - +-----------------------+ - | 1 | - | 1 | - +-----------------------+ - -rst_pixelwidth -************** - -.. function:: rst_pixelwidth(raster) - - Returns the width of the pixel in the raster derived via GeoTransform. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array. - :type col: Column (RasterTileType) - :rtype: Column: DoubleType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_pixelwidth('path')).show() - +---------------------+ - | rst_pixelwidth(path)| - +---------------------+ - | 1 | - | 1 | - +---------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_pixelwidth(col("path"))).show() - +---------------------+ - | rst_pixelwidth(path)| - +---------------------+ - | 1 | - | 1 | - +---------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_pixelwidth(path) - +---------------------+ - | rst_pixelwidth(path)| - +---------------------+ - | 1 | - | 1 | - +---------------------+ - -rst_rastertogridavg -******************* - -.. function:: rst_rastertogridavg(raster, resolution) - - The result is a 2D array of cells, where each cell is a struct of (cellID, value). - For getting the output of cellID->value pairs, please use explode() function twice. - CellID can be LongType or StringType depending on the configuration of MosaicContext. - The value/measure for each cell is the average of the pixel values in the cell. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array. - :type col: Column (RasterTileType) - :param resolution: A resolution of the grid index system. - :type col: Column (IntegerType) - :rtype: Column: ArrayType(ArrayType(StructType(LongType|StringType, DoubleType))) - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_rastertogridavg('path', F.lit(3))).show() - +--------------------------------------------------------------------------------------------------------------------+ - | rst_rastertogridavg(path, 3) | - +--------------------------------------------------------------------------------------------------------------------+ - | [[{"cellID": "593176490141548543", "measure": 0}, {"cellID": "593386771740360703", "measure": 1.2037735849056603}, | - | {"cellID": "593308294097928191", "measure": 0}, {"cellID": "593825202001936383", "measure": 0}, | - | {"cellID": "593163914477305855", "measure": 2}, {"cellID": "592998781574709247", "measure": 1.1283185840707965}, | - | {"cellID": "593262526926422015", "measure": 2}, {"cellID": "592370479398911999", "measure": 0}, | - | {"cellID": "593472602366803967", "measure": 0.3963963963963964}, | - | {"cellID": "593785619583336447", "measure": 0.6590909090909091}, {"cellID": "591988330388783103", "measure": 1}, | - | {"cellID": "592336738135834623", "measure": 1}, ....]] | - +--------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_rastertogridavg(col("path"), lit(3))).show() - +--------------------------------------------------------------------------------------------------------------------+ - | rst_rastertogridavg(path, 3) | - +--------------------------------------------------------------------------------------------------------------------+ - | [[{"cellID": "593176490141548543", "measure": 0}, {"cellID": "593386771740360703", "measure": 1.2037735849056603}, | - | {"cellID": "593308294097928191", "measure": 0}, {"cellID": "593825202001936383", "measure": 0}, | - | {"cellID": "593163914477305855", "measure": 2}, {"cellID": "592998781574709247", "measure": 1.1283185840707965}, | - | {"cellID": "593262526926422015", "measure": 2}, {"cellID": "592370479398911999", "measure": 0}, | - | {"cellID": "593472602366803967", "measure": 0.3963963963963964}, | - | {"cellID": "593785619583336447", "measure": 0.6590909090909091}, {"cellID": "591988330388783103", "measure": 1}, | - | {"cellID": "592336738135834623", "measure": 1}, ....]] | - +--------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_rastertogridavg(path, 3) - +--------------------------------------------------------------------------------------------------------------------+ - | rst_rastertogridavg(path, 3) | - +--------------------------------------------------------------------------------------------------------------------+ - | [[{"cellID": "593176490141548543", "measure": 0}, {"cellID": "593386771740360703", "measure": 1.2037735849056603}, | - | {"cellID": "593308294097928191", "measure": 0}, {"cellID": "593825202001936383", "measure": 0}, | - | {"cellID": "593163914477305855", "measure": 2}, {"cellID": "592998781574709247", "measure": 1.1283185840707965}, | - | {"cellID": "593262526926422015", "measure": 2}, {"cellID": "592370479398911999", "measure": 0}, | - | {"cellID": "593472602366803967", "measure": 0.3963963963963964}, | - | {"cellID": "593785619583336447", "measure": 0.6590909090909091}, {"cellID": "591988330388783103", "measure": 1}, | - | {"cellID": "592336738135834623", "measure": 1}, ....]] | - +--------------------------------------------------------------------------------------------------------------------+ - -.. figure:: ../images/rst_rastertogridavg/h3.png - :figclass: doc-figure - - Fig 1. RST_RasterToGridAvg(raster, 3) - -rst_rastertogridcount -********************* - -.. function:: rst_rastertogridcount(raster, resolution) - - The result is a 2D array of cells, where each cell is a struct of (cellID, value). - For getting the output of cellID->value pairs, please use explode() function twice. - CellID can be LongType or StringType depending on the configuration of MosaicContext. - The value/measure for each cell is the average of the pixel values in the cell. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array. - :type col: Column (RasterTileType) - :param resolution: A resolution of the grid index system. - :type col: Column (IntegerType) - :rtype: Column: ArrayType(ArrayType(StructType(LongType|StringType, DoubleType))) - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_rastertogridcount('path', F.lit(3))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_rastertogridcount(path, 3) | - +------------------------------------------------------------------------------------------------------------------+ - | [[{"cellID": "593176490141548543", "measure": 0}, {"cellID": "593386771740360703", "measure": 1}, | - | {"cellID": "593308294097928191", "measure": 0}, {"cellID": "593825202001936383", "measure": 0}, | - | {"cellID": "593163914477305855", "measure": 2}, {"cellID": "592998781574709247", "measure": 1}, | - | {"cellID": "593262526926422015", "measure": 2}, {"cellID": "592370479398911999", "measure": 0}, | - | {"cellID": "593472602366803967", "measure": 3}, | - | {"cellID": "593785619583336447", "measure": 3}, {"cellID": "591988330388783103", "measure": 1}, | - | {"cellID": "592336738135834623", "measure": 1}, ....]] | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_rastertogridcount(col("path"), lit(3))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_rastertogridcount(path, 3) | - +------------------------------------------------------------------------------------------------------------------+ - | [[{"cellID": "593176490141548543", "measure": 0}, {"cellID": "593386771740360703", "measure": 1}, | - | {"cellID": "593308294097928191", "measure": 0}, {"cellID": "593825202001936383", "measure": 0}, | - | {"cellID": "593163914477305855", "measure": 2}, {"cellID": "592998781574709247", "measure": 1}, | - | {"cellID": "593262526926422015", "measure": 2}, {"cellID": "592370479398911999", "measure": 0}, | - | {"cellID": "593472602366803967", "measure": 3}, | - | {"cellID": "593785619583336447", "measure": 3}, {"cellID": "591988330388783103", "measure": 1}, | - | {"cellID": "592336738135834623", "measure": 1}, ....]] | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_rastertogridcount(path, 3) - +------------------------------------------------------------------------------------------------------------------+ - | rst_rastertogridcount(path, 3) | - +------------------------------------------------------------------------------------------------------------------+ - | [[{"cellID": "593176490141548543", "measure": 0}, {"cellID": "593386771740360703", "measure": 1}, | - | {"cellID": "593308294097928191", "measure": 0}, {"cellID": "593825202001936383", "measure": 0}, | - | {"cellID": "593163914477305855", "measure": 2}, {"cellID": "592998781574709247", "measure": 1}, | - | {"cellID": "593262526926422015", "measure": 2}, {"cellID": "592370479398911999", "measure": 0}, | - | {"cellID": "593472602366803967", "measure": 3}, | - | {"cellID": "593785619583336447", "measure": 3}, {"cellID": "591988330388783103", "measure": 1}, | - | {"cellID": "592336738135834623", "measure": 1}, ....]] | - +------------------------------------------------------------------------------------------------------------------+ - -.. figure:: ../images/rst_rastertogridavg/h3.png - :figclass: doc-figure - - Fig 2. RST_RasterToGridCount(raster, 3) - -rst_rastertogridmax -******************* - -.. function:: rst_rastertogridmax(raster, resolution) - - The result is a 2D array of cells, where each cell is a struct of (cellID, value). - For getting the output of cellID->value pairs, please use explode() function twice. - CellID can be LongType or StringType depending on the configuration of MosaicContext. - The value/measure for each cell is the maximum pixel value. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array. - :type col: Column (RasterTileType) - :param resolution: A resolution of the grid index system. - :type col: Column (IntegerType) - :rtype: Column: ArrayType(ArrayType(StructType(LongType|StringType, DoubleType))) - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_rastertogridmax('path', F.lit(3))).show() - +--------------------------------------------------------------------------------------------------------------------+ - | rst_rastertogridmax(path, 3) | - +--------------------------------------------------------------------------------------------------------------------+ - | [[{"cellID": "593176490141548543", "measure": 0}, {"cellID": "593386771740360703", "measure": 1.2037735849056603}, | - | {"cellID": "593308294097928191", "measure": 0}, {"cellID": "593825202001936383", "measure": 0}, | - | {"cellID": "593163914477305855", "measure": 2}, {"cellID": "592998781574709247", "measure": 1.1283185840707965}, | - | {"cellID": "593262526926422015", "measure": 2}, {"cellID": "592370479398911999", "measure": 0}, | - | {"cellID": "593472602366803967", "measure": 0.3963963963963964}, | - | {"cellID": "593785619583336447", "measure": 0.6590909090909091}, {"cellID": "591988330388783103", "measure": 1}, | - | {"cellID": "592336738135834623", "measure": 1}, ....]] | - +--------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_rastertogridmax(col("path"), lit(3))).show() - +--------------------------------------------------------------------------------------------------------------------+ - | rst_rastertogridmax(path, 3) | - +--------------------------------------------------------------------------------------------------------------------+ - | [[{"cellID": "593176490141548543", "measure": 0}, {"cellID": "593386771740360703", "measure": 1.2037735849056603}, | - | {"cellID": "593308294097928191", "measure": 0}, {"cellID": "593825202001936383", "measure": 0}, | - | {"cellID": "593163914477305855", "measure": 2}, {"cellID": "592998781574709247", "measure": 1.1283185840707965}, | - | {"cellID": "593262526926422015", "measure": 2}, {"cellID": "592370479398911999", "measure": 0}, | - | {"cellID": "593472602366803967", "measure": 0.3963963963963964}, | - | {"cellID": "593785619583336447", "measure": 0.6590909090909091}, {"cellID": "591988330388783103", "measure": 1}, | - | {"cellID": "592336738135834623", "measure": 1}, ....]] | - +--------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_rastertogridmax(path, 3) - +--------------------------------------------------------------------------------------------------------------------+ - | rst_rastertogridmax(path, 3) | - +--------------------------------------------------------------------------------------------------------------------+ - | [[{"cellID": "593176490141548543", "measure": 0}, {"cellID": "593386771740360703", "measure": 1.2037735849056603}, | - | {"cellID": "593308294097928191", "measure": 0}, {"cellID": "593825202001936383", "measure": 0}, | - | {"cellID": "593163914477305855", "measure": 2}, {"cellID": "592998781574709247", "measure": 1.1283185840707965}, | - | {"cellID": "593262526926422015", "measure": 2}, {"cellID": "592370479398911999", "measure": 0}, | - | {"cellID": "593472602366803967", "measure": 0.3963963963963964}, | - | {"cellID": "593785619583336447", "measure": 0.6590909090909091}, {"cellID": "591988330388783103", "measure": 1}, | - | {"cellID": "592336738135834623", "measure": 1}, ....]] | - +--------------------------------------------------------------------------------------------------------------------+ - -.. figure:: ../images/rst_rastertogridavg/h3.png - :figclass: doc-figure - - Fig 3. RST_RasterToGridMax(raster, 3) - -rst_rastertogridmedian -********************** - -.. function:: rst_rastertogridmedian(raster, resolution) - - The result is a 2D array of cells, where each cell is a struct of (cellID, value). - For getting the output of cellID->value pairs, please use explode() function twice. - CellID can be LongType or StringType depending on the configuration of MosaicContext. - The value/measure for each cell is the median pixel value. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array. - :type col: Column (RasterTileType) - :param resolution: A resolution of the grid index system. - :type col: Column (IntegerType) - :rtype: Column: ArrayType(ArrayType(StructType(LongType|StringType, DoubleType))) - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_rastertogridmedian('path', F.lit(3))).show() - +--------------------------------------------------------------------------------------------------------------------+ - | rst_rastertogridmedian(path, 3) | - +--------------------------------------------------------------------------------------------------------------------+ - | [[{"cellID": "593176490141548543", "measure": 0}, {"cellID": "593386771740360703", "measure": 1.2037735849056603}, | - | {"cellID": "593308294097928191", "measure": 0}, {"cellID": "593825202001936383", "measure": 0}, | - | {"cellID": "593163914477305855", "measure": 2}, {"cellID": "592998781574709247", "measure": 1.1283185840707965}, | - | {"cellID": "593262526926422015", "measure": 2}, {"cellID": "592370479398911999", "measure": 0}, | - | {"cellID": "593472602366803967", "measure": 0.3963963963963964}, | - | {"cellID": "593785619583336447", "measure": 0.6590909090909091}, {"cellID": "591988330388783103", "measure": 1}, | - | {"cellID": "592336738135834623", "measure": 1}, ....]] | - +--------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_rastertogridmedian(col("path"), lit(3))).show() - +--------------------------------------------------------------------------------------------------------------------+ - | rst_rastertogridmedian(path, 3) | - +--------------------------------------------------------------------------------------------------------------------+ - | [[{"cellID": "593176490141548543", "measure": 0}, {"cellID": "593386771740360703", "measure": 1.2037735849056603}, | - | {"cellID": "593308294097928191", "measure": 0}, {"cellID": "593825202001936383", "measure": 0}, | - | {"cellID": "593163914477305855", "measure": 2}, {"cellID": "592998781574709247", "measure": 1.1283185840707965}, | - | {"cellID": "593262526926422015", "measure": 2}, {"cellID": "592370479398911999", "measure": 0}, | - | {"cellID": "593472602366803967", "measure": 0.3963963963963964}, | - | {"cellID": "593785619583336447", "measure": 0.6590909090909091}, {"cellID": "591988330388783103", "measure": 1}, | - | {"cellID": "592336738135834623", "measure": 1}, ....]] | - +--------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_rastertogridmax(path, 3) - +--------------------------------------------------------------------------------------------------------------------+ - | rst_rastertogridmedian(path, 3) | - +--------------------------------------------------------------------------------------------------------------------+ - | [[{"cellID": "593176490141548543", "measure": 0}, {"cellID": "593386771740360703", "measure": 1.2037735849056603}, | - | {"cellID": "593308294097928191", "measure": 0}, {"cellID": "593825202001936383", "measure": 0}, | - | {"cellID": "593163914477305855", "measure": 2}, {"cellID": "592998781574709247", "measure": 1.1283185840707965}, | - | {"cellID": "593262526926422015", "measure": 2}, {"cellID": "592370479398911999", "measure": 0}, | - | {"cellID": "593472602366803967", "measure": 0.3963963963963964}, | - | {"cellID": "593785619583336447", "measure": 0.6590909090909091}, {"cellID": "591988330388783103", "measure": 1}, | - | {"cellID": "592336738135834623", "measure": 1}, ....]] | - +--------------------------------------------------------------------------------------------------------------------+ - -.. figure:: ../images/rst_rastertogridavg/h3.png - :figclass: doc-figure - - Fig 4. RST_RasterToGridMedian(raster, 3) - -rst_rastertogridmin -******************* - -.. function:: rst_rastertogridmin(raster, resolution) - - The result is a 2D array of cells, where each cell is a struct of (cellID, value). - For getting the output of cellID->value pairs, please use explode() function twice. - CellID can be LongType or StringType depending on the configuration of MosaicContext. - The value/measure for each cell is the median pixel value. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array. - :type col: Column (RasterTileType) - :param resolution: A resolution of the grid index system. - :type col: Column (IntegerType) - :rtype: Column: ArrayType(ArrayType(StructType(LongType|StringType, DoubleType))) - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_rastertogridmin('path', F.lit(3))).show() - +--------------------------------------------------------------------------------------------------------------------+ - | rst_rastertogridmin(path, 3) | - +--------------------------------------------------------------------------------------------------------------------+ - | [[{"cellID": "593176490141548543", "measure": 0}, {"cellID": "593386771740360703", "measure": 1.2037735849056603}, | - | {"cellID": "593308294097928191", "measure": 0}, {"cellID": "593825202001936383", "measure": 0}, | - | {"cellID": "593163914477305855", "measure": 2}, {"cellID": "592998781574709247", "measure": 1.1283185840707965}, | - | {"cellID": "593262526926422015", "measure": 2}, {"cellID": "592370479398911999", "measure": 0}, | - | {"cellID": "593472602366803967", "measure": 0.3963963963963964}, | - | {"cellID": "593785619583336447", "measure": 0.6590909090909091}, {"cellID": "591988330388783103", "measure": 1}, | - | {"cellID": "592336738135834623", "measure": 1}, ....]] | - +--------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_rastertogridmin(col("path"), lit(3))).show() - +--------------------------------------------------------------------------------------------------------------------+ - | rst_rastertogridmin(path, 3) | - +--------------------------------------------------------------------------------------------------------------------+ - | [[{"cellID": "593176490141548543", "measure": 0}, {"cellID": "593386771740360703", "measure": 1.2037735849056603}, | - | {"cellID": "593308294097928191", "measure": 0}, {"cellID": "593825202001936383", "measure": 0}, | - | {"cellID": "593163914477305855", "measure": 2}, {"cellID": "592998781574709247", "measure": 1.1283185840707965}, | - | {"cellID": "593262526926422015", "measure": 2}, {"cellID": "592370479398911999", "measure": 0}, | - | {"cellID": "593472602366803967", "measure": 0.3963963963963964}, | - | {"cellID": "593785619583336447", "measure": 0.6590909090909091}, {"cellID": "591988330388783103", "measure": 1}, | - | {"cellID": "592336738135834623", "measure": 1}, ....]] | - +--------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_rastertogridmin(path, 3) - +--------------------------------------------------------------------------------------------------------------------+ - | rst_rastertogridmin(path, 3) | - +--------------------------------------------------------------------------------------------------------------------+ - | [[{"cellID": "593176490141548543", "measure": 0}, {"cellID": "593386771740360703", "measure": 1.2037735849056603}, | - | {"cellID": "593308294097928191", "measure": 0}, {"cellID": "593825202001936383", "measure": 0}, | - | {"cellID": "593163914477305855", "measure": 2}, {"cellID": "592998781574709247", "measure": 1.1283185840707965}, | - | {"cellID": "593262526926422015", "measure": 2}, {"cellID": "592370479398911999", "measure": 0}, | - | {"cellID": "593472602366803967", "measure": 0.3963963963963964}, | - | {"cellID": "593785619583336447", "measure": 0.6590909090909091}, {"cellID": "591988330388783103", "measure": 1}, | - | {"cellID": "592336738135834623", "measure": 1}, ....]] | - +--------------------------------------------------------------------------------------------------------------------+ - -.. figure:: ../images/rst_rastertogridavg/h3.png - :figclass: doc-figure - - Fig 4. RST_RasterToGridMin(raster, 3) - -rst_rastertoworldcoord -********************** - -.. function:: rst_rastertoworldcoord(raster, x, y) - - Computes the world coordinates of the raster pixel at the given x and y coordinates. - The result is a WKT point geometry. - The coordinates are computed using the GeoTransform of the raster to respect the projection. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array. - :type col: Column (RasterTileType) - :param x: x coordinate of the pixel. - :type col: Column (IntegerType) - :param y: y coordinate of the pixel. - :type col: Column (IntegerType) - :rtype: Column: StringType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_rastertoworldcoord('path', F.lit(3), F.lit(3))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_rastertoworldcoord(path, 3, 3) | - +------------------------------------------------------------------------------------------------------------------+ - |POINT (-179.85000609927647 89.84999847624096) | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_rastertoworldcoord(col("path"), lit(3), lit(3))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_rastertoworldcoord(path, 3, 3) | - +------------------------------------------------------------------------------------------------------------------+ - |POINT (-179.85000609927647 89.84999847624096) | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_rastertoworldcoord(path, 3, 3) - +------------------------------------------------------------------------------------------------------------------+ - | rst_rastertoworldcoord(path, 3, 3) | - +------------------------------------------------------------------------------------------------------------------+ - |POINT (-179.85000609927647 89.84999847624096) | - +------------------------------------------------------------------------------------------------------------------+ - -rst_rastertoworldcoordx -********************** - -.. function:: rst_rastertoworldcoord(raster, x, y) - - Computes the world coordinates of the raster pixel at the given x and y coordinates. - The result is the X coordinate of the point after applying the GeoTransform of the raster. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array. - :type col: Column (RasterTileType) - :param x: x coordinate of the pixel. - :type col: Column (IntegerType) - :param y: y coordinate of the pixel. - :type col: Column (IntegerType) - :rtype: Column: StringType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_rastertoworldcoordx('path', F.lit(3), F.lit(3))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_rastertoworldcoordx(path, 3, 3) | - +------------------------------------------------------------------------------------------------------------------+ - | -179.85000609927647 | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_rastertoworldcoordx(col("path"), lit(3), lit(3))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_rastertoworldcoordx(path, 3, 3) | - +------------------------------------------------------------------------------------------------------------------+ - | -179.85000609927647 | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_rastertoworldcoordx(path, 3, 3) - +------------------------------------------------------------------------------------------------------------------+ - | rst_rastertoworldcoordx(path, 3, 3) | - +------------------------------------------------------------------------------------------------------------------+ - | -179.85000609927647 | - +------------------------------------------------------------------------------------------------------------------+ - -rst_rastertoworldcoordy -********************** - -.. function:: rst_rastertoworldcoordy(raster, x, y) - - Computes the world coordinates of the raster pixel at the given x and y coordinates. - The result is the X coordinate of the point after applying the GeoTransform of the raster. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array. - :type col: Column (RasterTileType) - :param x: x coordinate of the pixel. - :type col: Column (IntegerType) - :param y: y coordinate of the pixel. - :type col: Column (IntegerType) - :rtype: Column: StringType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_rastertoworldcoordy('path', F.lit(3), F.lit(3))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_rastertoworldcoordy(path, 3, 3) | - +------------------------------------------------------------------------------------------------------------------+ - | 89.84999847624096 | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_rastertoworldcoordy(col("path"), lit(3), lit(3))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_rastertoworldcoordy(path, 3, 3) | - +------------------------------------------------------------------------------------------------------------------+ - | 89.84999847624096 | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_rastertoworldcoordy(path, 3, 3) - +------------------------------------------------------------------------------------------------------------------+ - | rst_rastertoworldcoordy(path, 3, 3) | - +------------------------------------------------------------------------------------------------------------------+ - | 89.84999847624096 | - +------------------------------------------------------------------------------------------------------------------+ - -rst_retile -********************** - -.. function:: rst_retile(raster, width, height) - - Retiles the raster to the given tile size. The result is a collection of new raster files. - The new rasters are stored in the checkpoint directory. - The results are the paths to the new rasters. - The result set is automatically exploded. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array. - :type col: Column (RasterTileType) - :param width: The width of the tiles. - :type col: Column (IntegerType) - :param height: The height of the tiles. - :type col: Column (IntegerType) - :rtype: Column: StringType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_retile('path', F.lit(300), F.lit(300))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_retile(path, 300, 300) | - +------------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - | {index_id: 593308294097928192, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_retile(col("path"), lit(300), lit(300))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_retile(path, 300, 300) | - +------------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - | {index_id: 593308294097928192, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_retile(path, 300, 300) - +------------------------------------------------------------------------------------------------------------------+ - | rst_retile(path, 300, 300) | - +------------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - | {index_id: 593308294097928192, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } | - +------------------------------------------------------------------------------------------------------------------+ - -rst_rotation -********************** - -.. function:: rst_rotation(raster) - - Computes the rotation of the raster in degrees. - The rotation is the angle between the X axis and the North axis. - The rotation is computed using the GeoTransform of the raster. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array. - :type col: Column (RasterTileType) - :rtype: Column: DoubleType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_rotation('path').show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_rotation(path) | - +------------------------------------------------------------------------------------------------------------------+ - | 1.2 | - | 21.2 | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_rotation(col("path"))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_rotation(path) | - +------------------------------------------------------------------------------------------------------------------+ - | 1.2 | - | 21.2 | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_rotation(path) - +------------------------------------------------------------------------------------------------------------------+ - | rst_rotation(path) | - +------------------------------------------------------------------------------------------------------------------+ - | 1.2 | - | 21.2 | - +------------------------------------------------------------------------------------------------------------------+ - -rst_scalex -********************** - -.. function:: rst_scalex(raster) - - Computes the scale of the raster in the X direction. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array. - :type col: Column (RasterTileType) - :rtype: Column: DoubleType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_scalex('path')).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_scalex(path) | - +------------------------------------------------------------------------------------------------------------------+ - | 1.2 | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_scalex(col("path"))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_scalex(path) | - +------------------------------------------------------------------------------------------------------------------+ - | 1.2 | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_scalex(path) - +------------------------------------------------------------------------------------------------------------------+ - | rst_scalex(path) | - +------------------------------------------------------------------------------------------------------------------+ - | 1.2 | - +------------------------------------------------------------------------------------------------------------------+ - -rst_scaley -********************** - -.. function:: rst_scaley(raster) - - Computes the scale of the raster in the Y direction. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array. - :type col: Column (RasterTileType) - :rtype: Column: DoubleType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_scaley('path')).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_scaley(path) | - +------------------------------------------------------------------------------------------------------------------+ - | 1.2 | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_scaley(col("path"))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_scaley(path) | - +------------------------------------------------------------------------------------------------------------------+ - | 1.2 | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_scaley(path) - +------------------------------------------------------------------------------------------------------------------+ - | rst_scaley(path) | - +------------------------------------------------------------------------------------------------------------------+ - | 1.2 | - +------------------------------------------------------------------------------------------------------------------+ - -rst_setnodata -********************** - -.. function:: rst_setnodata(raster, nodata) - - Sets the nodata value of the raster. - The result is a new raster with the nodata value set. - The same nodata value is set for all bands of the raster if a single value is passed. - If an array of values is passed, the nodata value is set for each band of the raster. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.A column containing the path to a raster file. - :type col: Column (RasterTileType) - :param nodata: The nodata value to set. - :type col: Column (DoubleType) / ArrayType(DoubleType) - :rtype: Column: StringType - - :example: - -.. tabs:: - - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "tif")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/tif") - df.select(mos.rst_setnodata('path', F.lit(0))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_setnodata(path, 0) | - +------------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - | {index_id: 593308294097928192, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "tif") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/tif") - df.select(rst_setnodata(col("path"), lit(0))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_setnodata(path, 0) | - +------------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - | {index_id: 593308294097928192, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_tif - USING gdal - OPTIONS (extensions "tif", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/tif") - SELECT rst_setnodata(path, 0) - +------------------------------------------------------------------------------------------------------------------+ - | rst_setnodata(path, 0) | - +------------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - | {index_id: 593308294097928192, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - +------------------------------------------------------------------------------------------------------------------+ - -rst_skewx -********************** - -.. function:: rst_skewx(raster) - - Computes the skew of the raster in the X direction. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.A column containing the path to a raster file. - :type col: Column (RasterTileType) - :rtype: Column: DoubleType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_skewx('path')).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_skewx(path) | - +------------------------------------------------------------------------------------------------------------------+ - | 1.2 | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_skewx(col("path"))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_skewx(path) | - +------------------------------------------------------------------------------------------------------------------+ - | 1.2 | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_skewx(path) - +------------------------------------------------------------------------------------------------------------------+ - | rst_skewx(path) | - +------------------------------------------------------------------------------------------------------------------+ - | 1.2 | - +------------------------------------------------------------------------------------------------------------------+ - -rst_skewy -********************** - -.. function:: rst_skewx(raster) - - Computes the skew of the raster in the Y direction. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.A column containing the path to a raster file. - :type col: Column (RasterTileType) - :rtype: Column: DoubleType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_skewy('path')).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_skewy(path) | - +------------------------------------------------------------------------------------------------------------------+ - | 1.2 | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_skewy(col("path"))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_skewy(path) | - +------------------------------------------------------------------------------------------------------------------+ - | 1.2 | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_skewy(path) - +------------------------------------------------------------------------------------------------------------------+ - | rst_skewy(path) | - +------------------------------------------------------------------------------------------------------------------+ - | 1.2 | - +------------------------------------------------------------------------------------------------------------------+ - -rst_srid -********************** - -.. function:: rst_srid(raster) - - Computes the SRID of the raster. - The SRID is the EPSG code of the raster. - - .. note:: For complex CRS definition the EPSG code may default to 0. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.A column containing the path to a raster file. - :type col: Column (RasterTileType) - :rtype: Column: DoubleType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_srid('path')).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_srid(path) | - +------------------------------------------------------------------------------------------------------------------+ - | 9122 | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_srid(col("path"))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_srid(path) | - +------------------------------------------------------------------------------------------------------------------+ - | 9122 | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_srid(path) - +------------------------------------------------------------------------------------------------------------------+ - | rst_srid(path) | - +------------------------------------------------------------------------------------------------------------------+ - | 9122 | - +------------------------------------------------------------------------------------------------------------------+ - -rst_subdatasets -********************** - -.. function:: rst_subdatasets(raster) - - Computes the subdatasets of the raster. - The subdatasets are the paths to the subdatasets of the raster. - The result is a map of the subdataset path to the subdatasets and the description of the subdatasets. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.A column containing the path to a raster file. - :type col: Column (RasterTileType) - :rtype: Column: MapType(StringType, StringType) - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_subdatasets('path')).show() - +--------------------------------------------------------------------------------------------------------------------+ - | rst_subdatasets(path) | - +--------------------------------------------------------------------------------------------------------------------+ - | {"NETCDF:\"/dbfs/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral/ct5km_baa_max_7d_v3_1_2022010 | - | 6-1.nc\":bleaching_alert_area": "[1x3600x7200] N/A (8-bit unsigned integer)", "NETCDF:\"/dbfs/FileStore/geospatial | - | /mosaic/sample_raster_data/binary/netcdf-coral/ct5km_baa_max_7d_v3_1_20220106-1.nc\":mask": "[1x3600x7200] mask (8 | - | -bit unsigned integer)"} | - +--------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_subdatasets(col("path"))).show() - +--------------------------------------------------------------------------------------------------------------------+ - | rst_subdatasets(path) | - +--------------------------------------------------------------------------------------------------------------------+ - | {"NETCDF:\"/dbfs/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral/ct5km_baa_max_7d_v3_1_2022010 | - | 6-1.nc\":bleaching_alert_area": "[1x3600x7200] N/A (8-bit unsigned integer)", "NETCDF:\"/dbfs/FileStore/geospatial | - | /mosaic/sample_raster_data/binary/netcdf-coral/ct5km_baa_max_7d_v3_1_20220106-1.nc\":mask": "[1x3600x7200] mask (8 | - | -bit unsigned integer)"} | - +--------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_subdatasets(path) - +--------------------------------------------------------------------------------------------------------------------+ - | rst_subdatasets(path) | - +--------------------------------------------------------------------------------------------------------------------+ - | {"NETCDF:\"/dbfs/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral/ct5km_baa_max_7d_v3_1_2022010 | - | 6-1.nc\":bleaching_alert_area": "[1x3600x7200] N/A (8-bit unsigned integer)", "NETCDF:\"/dbfs/FileStore/geospatial | - | /mosaic/sample_raster_data/binary/netcdf-coral/ct5km_baa_max_7d_v3_1_20220106-1.nc\":mask": "[1x3600x7200] mask (8 | - | -bit unsigned integer)"} | - +--------------------------------------------------------------------------------------------------------------------+ - -rst_subdivide -********************** - -.. function:: rst_subdivide(raster, sizeInMB) - - Subdivides the raster to the given tile size in MB. The result is a collection of new raster files. - The tiles are split until the expected size of a tile is < sizeInMB. - The tile is always split in 4 tiles. This ensures that the tiles are always split in the same way. - The aspect ratio of the tiles is preserved. - The result set is automatically exploded. - - .. note:: The size of the tiles is approximate. Due to compressions and other effects we cannot guarantee the size of the tiles in MB. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.A column containing the path to a raster file. - :type col: Column (RasterTileType) - :param sizeInMB: The size of the tiles in MB. - - :example: - -.. tabs:: - - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "tif")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/tif") - df.select(mos.rst_subdivide('path', F.lit(10))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_subdivide(path, 10) | - +------------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - | {index_id: 593308294097928192, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "tif") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/tif") - df.select(rst_subdivide(col("path"), lit(10))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_subdivide(path, 10) | - +------------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - | {index_id: 593308294097928192, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_tif - USING gdal - OPTIONS (extensions "tif", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/tif") - SELECT rst_subdivide(path, 10) - +------------------------------------------------------------------------------------------------------------------+ - | rst_subdivide(path, 10) | - +------------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - | {index_id: 593308294097928192, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - +------------------------------------------------------------------------------------------------------------------+ - -rst_summary -********************** - -.. function:: rst_summary(raster) - - Computes the summary of the raster. - The summary is a map of the statistics of the raster. - The logic is produced by gdalinfo procedure. - The result is stored as JSON. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.A column containing the path to a raster file. - :type col: Column (RasterTileType) - :rtype: Column: MapType(StringType, StringType) - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_summary('path')).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_summary(path) | - +------------------------------------------------------------------------------------------------------------------+ - | { "description":"/dbfs/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral/ct5km_baa_max_7d_v3_1| - |_20220106-1.nc", "driverShortName":"netCDF", "driverLongName":"Network Common Data Format", "files":[ | - |"/dbfs/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral/ct5km_baa_max_7d_v3_1_20220106-1.nc" | - |], "size":[ 512, 512 ], "metadata":{ "":{ "NC_GLOBAL#acknowledgement":"NOAA Coral Reef | - |Watch Program", "NC_GLOBAL#cdm_data_type":"Gr... | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_summary(col("path"))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_summary(path) | - +------------------------------------------------------------------------------------------------------------------+ - | { "description":"/dbfs/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral/ct5km_baa_max_7d_v3_1| - |_20220106-1.nc", "driverShortName":"netCDF", "driverLongName":"Network Common Data Format", "files":[ | - |"/dbfs/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral/ct5km_baa_max_7d_v3_1_20220106-1.nc" | - |], "size":[ 512, 512 ], "metadata":{ "":{ "NC_GLOBAL#acknowledgement":"NOAA Coral Reef | - |Watch Program", "NC_GLOBAL#cdm_data_type":"Gr... | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_summary(path) - +------------------------------------------------------------------------------------------------------------------+ - | rst_summary(path) | - +------------------------------------------------------------------------------------------------------------------+ - | { "description":"/dbfs/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral/ct5km_baa_max_7d_v3_1| - |_20220106-1.nc", "driverShortName":"netCDF", "driverLongName":"Network Common Data Format", "files":[ | - |"/dbfs/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral/ct5km_baa_max_7d_v3_1_20220106-1.nc" | - |], "size":[ 512, 512 ], "metadata":{ "":{ "NC_GLOBAL#acknowledgement":"NOAA Coral Reef | - |Watch Program", "NC_GLOBAL#cdm_data_type":"Gr... | - +------------------------------------------------------------------------------------------------------------------+ - -rst_tessellate -********************** - -.. function:: rst_tessellate(raster, resolution) - - Tessellates the raster to the given resolution of the supported grid (H3, BNG, Custom). The result is a collection of new raster files. - Each tile in the tile set corresponds to a cell that is a part of the tesselation of the bounding box of the raster. - The result set is automatically exploded. - If rst_merge is called on the tile set the original raster will be reconstructed. - The output tiles have same number of bands as the input rasters. - - :param tile: A column containing the raster tile. - :type col: Column (RasterTileType) - :param sizeInMB: The size of the tiles in MB. - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "tif")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/tif") - df.select(mos.rst_tessellate('path', F.lit(10))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_tessellate(path, 10) | - +------------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - | {index_id: 593308294097928192, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "tif") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/tif") - df.select(rst_tessellate(col("path"), lit(10))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_tessellate(path, 10) | - +------------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - | {index_id: 593308294097928192, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_tif - USING gdal - OPTIONS (extensions "tif", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/tif") - SELECT rst_tessellate(path, 10) - +------------------------------------------------------------------------------------------------------------------+ - | rst_tessellate(path, 10) | - +------------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - | {index_id: 593308294097928192, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - +------------------------------------------------------------------------------------------------------------------+ - -rst_tooverlappingtiles -********************** - -.. function:: rst_tooverlappingtiles(raster, width, height, overlap) - - Splits the raster into overlapping tiles of the given width and height. - The overlap is the the percentage of the tile size that the tiles overlap. - The result is a collection of new raster files. - The result set is automatically exploded. - If rst_merge is called on the tile set the original raster will be reconstructed. - The output tiles have same number of bands as the input rasters. - - :param tile: A column containing the raster tile. - :type col: Column (RasterTileType) - :param width: The width of the tiles in pixels. - :type col: Column (IntegerType) - :param height: The height of the tiles in pixels. - :type col: Column (IntegerType) - :param overlap: The overlap of the tiles in percentage. - :type col: Column (IntegerType) - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "tif")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/tif") - df.select(mos.rst_tooverlappingtiles('path', F.lit(10), F.lit(10), F.lit(10))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_tooverlappingtiles(path, 10, 10, 10) | - +------------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - | {index_id: 593308294097928192, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "tif") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/tif - df.select(rst_tooverlappingtiles(col("path"), lit(10), lit(10), lit(10))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_tooverlappingtiles(path, 10, 10, 10) | - +------------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - | {index_id: 593308294097928192, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_tif - USING gdal - OPTIONS (extensions "tif", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/tif") - SELECT rst_tooverlappingtiles(path, 10, 10, 10) - +------------------------------------------------------------------------------------------------------------------+ - | rst_tooverlappingtiles(path, 10, 10, 10) | - +------------------------------------------------------------------------------------------------------------------+ - | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - | {index_id: 593308294097928192, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - +------------------------------------------------------------------------------------------------------------------+ - -rst_tryopen -********************** - -.. function:: rst_tryopen(raster) - - Tries to open the raster. If the raster cannot be opened the result is false and if the raster can be opened the result is true. - - :param tile: A column containing the raster tile. - :type col: Column (RasterTileType) - :rtype: Column: BooleanType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "tif")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/tif") - df.select(mos.rst_tryopen('path')).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_tryopen(path) | - +------------------------------------------------------------------------------------------------------------------+ - | true | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "tif") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/tif - df.select(rst_tryopen(col("path"))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_tryopen(path) | - +------------------------------------------------------------------------------------------------------------------+ - | true | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_tif - USING gdal - OPTIONS (extensions "tif", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/tif") - SELECT rst_tryopen(path) - +------------------------------------------------------------------------------------------------------------------+ - | rst_tryopen(path) | - +------------------------------------------------------------------------------------------------------------------+ - | true | - +------------------------------------------------------------------------------------------------------------------+ - -rst_upperleftx -********************** - -.. function:: rst_upperleftx(raster) - - Computes the upper left X coordinate of the raster. - The value is computed based on GeoTransform. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.A column containing the path to a raster file. - :type col: Column (RasterTileType) - :rtype: Column: DoubleType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_upperleftx('path')).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_upperleftx(path) | - +------------------------------------------------------------------------------------------------------------------+ - | -180.00000610436345 | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_upperleftx(col("path"))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_upperleftx(path) | - +------------------------------------------------------------------------------------------------------------------+ - | -180.00000610436345 | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_upperleftx(path) - +------------------------------------------------------------------------------------------------------------------+ - | rst_upperleftx(path) | - +------------------------------------------------------------------------------------------------------------------+ - | -180.00000610436345 | - +------------------------------------------------------------------------------------------------------------------+ - -rst_upperlefty -********************** - -.. function:: rst_upperlefty(raster) - - Computes the upper left Y coordinate of the raster. - The value is computed based on GeoTransform. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.A column containing the path to a raster file. - :type col: Column (RasterTileType) - :rtype: Column: DoubleType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_upperlefty('path')).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_upperlefty(path) | - +------------------------------------------------------------------------------------------------------------------+ - | 89.99999847369712 | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_upperlefty(col("path"))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_upperlefty(path) | - +------------------------------------------------------------------------------------------------------------------+ - | 89.99999847369712 | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_upperlefty(path) - +------------------------------------------------------------------------------------------------------------------+ - | rst_upperlefty(path) | - +------------------------------------------------------------------------------------------------------------------+ - | 89.99999847369712 | - +------------------------------------------------------------------------------------------------------------------+ - -rst_width -********************** - -.. function:: rst_width(raster) - - Computes the width of the raster in pixels. - - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.A column containing the path to a raster file. - :type col: Column (RasterTileType) - :rtype: Column: IntegerType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_width('path')).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_width(path) | - +------------------------------------------------------------------------------------------------------------------+ - | 600 | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_width(col("path"))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_width(path) | - +------------------------------------------------------------------------------------------------------------------+ - | 600 | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_width(path) - +------------------------------------------------------------------------------------------------------------------+ - | rst_width(path) | - +------------------------------------------------------------------------------------------------------------------+ - | 600 | - +------------------------------------------------------------------------------------------------------------------+ - -rst_worldtorastercoord -********************** - -.. function:: rst_worldtorastercoord(raster, xworld, yworld) - - Computes the raster coordinates of the world coordinates. - The raster coordinates are the pixel coordinates of the raster. - The world coordinates are the coordinates in the CRS of the raster. - The coordinates are resolved using GeoTransform. - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.A column containing the path to a raster file. - :type col: Column (RasterTileType) - :param x: X world coordinate. - :type col: Column (StringType) - :param y: Y world coordinate. - :type col: Column (StringType) - :rtype: Column: StructType(IntegerType, IntegerType) - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_worldtorastercoord('path', F.lit(-160.1), F.lit(40.0))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_worldtorastercoord(path) | - +------------------------------------------------------------------------------------------------------------------+ - | {"x": 398, "y": 997} | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_worldtorastercoord(col("path"), lit(-160.1), lit(40.0))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_worldtorastercoord(path) | - +------------------------------------------------------------------------------------------------------------------+ - | {"x": 398, "y": 997} | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_worldtorastercoord(path, -160.1, 40.0) - +------------------------------------------------------------------------------------------------------------------+ - | rst_worldtorastercoord(path) | - +------------------------------------------------------------------------------------------------------------------+ - | {"x": 398, "y": 997} | - +------------------------------------------------------------------------------------------------------------------+ - -rst_worldtorastercoordx -*********************** - -.. function:: rst_worldtorastercoordx(raster, xworld, yworld) - - Computes the raster coordinates of the world coordinates. - The raster coordinates are the pixel coordinates of the raster. - The world coordinates are the coordinates in the CRS of the raster. - The coordinates are resolved using GeoTransform. - This method returns the X coordinate. - - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.A column containing the path to a raster file. - :type col: Column (RasterTileType) - :param x: X world coordinate. - :type col: Column (StringType) - :param y: Y world coordinate. - :type col: Column (StringType) - :rtype: Column: IntegerType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_worldtorastercoord('path', F.lit(-160.1), F.lit(40.0))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_worldtorastercoordx(path, -160.1, 40.0) | - +------------------------------------------------------------------------------------------------------------------+ - | 398 | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_worldtorastercoordx(col("path"), lit(-160.1), lit(40.0))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_worldtorastercoordx(path, -160.1, 40.0) | - +------------------------------------------------------------------------------------------------------------------+ - | 398 | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_worldtorastercoordx(path, -160.1, 40.0) - +------------------------------------------------------------------------------------------------------------------+ - | rst_worldtorastercoordx(path, -160.1, 40.0) | - +------------------------------------------------------------------------------------------------------------------+ - | 398 | - +------------------------------------------------------------------------------------------------------------------+ - -rst_worldtorastercoordy -*********************** - -.. function:: rst_worldtorastercoordy(raster, xworld, yworld) - - Computes the raster coordinates of the world coordinates. - The raster coordinates are the pixel coordinates of the raster. - The world coordinates are the coordinates in the CRS of the raster. - The coordinates are resolved using GeoTransform. - This method returns the Y coordinate. - - - :param tile: A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.A column containing the path to a raster file. - :type col: Column (RasterTileType) - :param x: X world coordinate. - :type col: Column (StringType) - :param y: Y world coordinate. - :type col: Column (StringType) - :rtype: Column: IntegerType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("binaryFile").option("extensions", "nc")\ - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(mos.rst_worldtorastercoordy('path', F.lit(-160.1), F.lit(40.0))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_worldtorastercoordy(path, -160.1, 40.0) | - +------------------------------------------------------------------------------------------------------------------+ - | 997 | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = spark.read - .format("binaryFile").option("extensions", "nc") - .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - df.select(rst_worldtorastercoordy(col("path"), lit(-160.1), lit(40.0))).show() - +------------------------------------------------------------------------------------------------------------------+ - | rst_worldtorastercoordy(path, -160.1, 40.0) | - +------------------------------------------------------------------------------------------------------------------+ - | 997 | - +------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - CREATE TABLE IF NOT EXISTS TABLE coral_netcdf - USING gdal - OPTIONS (extensions "nc", path "dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral") - SELECT rst_worldtorastercoordy(path, -160.1, 40.0) - +------------------------------------------------------------------------------------------------------------------+ - | rst_worldtorastercoordy(path, -160.1, 40.0) | - +------------------------------------------------------------------------------------------------------------------+ - | 997 | - +------------------------------------------------------------------------------------------------------------------+ diff --git a/v0.3.x/_sources/api/rasterio-udfs.rst.txt b/v0.3.x/_sources/api/rasterio-udfs.rst.txt deleted file mode 100644 index 2d5c0bb5e..000000000 --- a/v0.3.x/_sources/api/rasterio-udfs.rst.txt +++ /dev/null @@ -1,276 +0,0 @@ -===================== -Rasterio UDFs -===================== - - -Intro -################ - -Rasterio (https://rasterio.readthedocs.io/en/latest/) is a Python library for reading and writing geospatial raster datasets. -It uses GDAL (https://gdal.org/) for file I/O and raster formatting and provides a Python API for GDAL functions. -It is a great library for working with raster data in Python and it is a popular choice for many geospatial data scientists. -Rasterio UDFs provide a way to use Rasterio Python API in Spark for distributed processing of raster data. -The data structures used by Mosaic are compatible with Rasterio and can be used interchangeably. -In this section we will show how to use Rasterio UDFs to process raster data in Mosaic + Spark. -We assume that you have a basic understanding of Rasterio and GDAL. - -Please note that we advise the users to set these configuration to ensure proper distribution. - -.. code-block:: python - - spark.conf.set("spark.sql.execution.arrow.enabled", "true") - spark.conf.set("spark.sql.execution.arrow.maxRecordsPerBatch", "1024") - spark.conf.set("spark.sql.execution.arrow.fallback.enabled", "true") - spark.conf.set("spark.sql.adaptive.coalescePartitions.enabled", "false") - spark.conf.set("spark.sql.shuffle.partitions", "400") - - -Rasterio raster plotting -############################################# - -In this example we will show how to plot a raster file using Rasterio Python API. - -Firstly we will create a spark DataFrame from a directory of raster files. - -.. code-block:: python - - df = spark.read.format("gdal").load("dbfs:/path/to/raster/files").repartition(400) - df.show() - +-----------------------------------------------------------+------------------------------+-----------+---------------------+-------+-------+-----------+----------------------+-------------+-------+---------------------------------------------------------------------------------------------------------------+ - | path | modificationTime | length | uuid | ySize | xSize | bandCount | metadata | subdatasets | srid | tile | - +-----------------------------------------------------------+------------------------------+-----------+---------------------+-------+-------+-----------+----------------------+-------------+-------+---------------------------------------------------------------------------------------------------------------+ - | dbfs:/FileStore/geospatial/odin/alaska/B02/-424495268.tif | 1970-01-20T15:49:53.135+0000 | 211660514 | 7836235824828840960 | 10980 | 10980 | 1 | {AREA_OR_POINT=Po... | {} | 32602 | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - | dbfs:/FileStore/geospatial/odin/alaska/B02/-524425268.tif | 1970-01-20T15:49:53.135+0000 | 212060218 | 7836235824828840961 | 10980 | 10980 | 1 | {AREA_OR_POINT=Po... | {} | 32602 | {index_id: 593308294097927192, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - | dbfs:/FileStore/geospatial/odin/alaska/B02/1241323268.tif | 1970-01-20T15:49:53.135+0000 | 211660897 | 7836235824828840962 | 10980 | 10980 | 1 | {AREA_OR_POINT=Po... | {} | 32602 | {index_id: 593308294097929991, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | - +-----------------------------------------------------------+------------------------------+-----------+---------------------+-------+-------+-----------+----------------------+-------------+-------+---------------------------------------------------------------------------------------------------------------+ - -Next we will define a function that will plot a given raster file. - -.. code-block:: python - - import numpy as np - import rasterio - from rasterio.io import MemoryFile - from io import BytesIO - from pyspark.sql.functions import udf - - def plot_raster(raster): - fig, ax = pyplot.subplots(1, figsize=(12, 12)) - - with MemoryFile(BytesIO(raster)) as memfile: - with memfile.open() as src: - show(src, ax=ax) - pyplot.show() - - -Finally we will apply the function to the DataFrame collected results. -Note that in order to plot the raster we need to collect the results to the driver. -Please apply reasonable filters to the DataFrame before collecting the results. - -.. code-block:: python - - plot_raster(df.select("tile").limit(1).collect()[0]["tile"]["raster"]) - -.. figure:: ../images/rasterio/plot_raster.png - :figclass: doc-figure - - Fig 1. Plot raster using Rasterio Python API - - -UDF example for computing band statistics -############################################# - -In this example we will show how to compute band statistics for a raster file. - -Firstly we will create a spark DataFrame from a directory of raster files. - -.. code-block:: python - - df = spark.read.format("gdal").load("dbfs:/path/to/raster/files").repartition(400) - df.show() - +-----------------------------------------------------------+------------------------------+-----------+---------------------+-------+-------+-----------+----------------------+-------------+-------+---------------------------------------------------------------------------------------------------------------+ - | path | modificationTime | length | uuid | ySize | xSize | bandCount | metadata | subdatasets | srid | tile | - +-----------------------------------------------------------+------------------------------+-----------+---------------------+-------+-------+-----------+----------------------+-------------+-------+---------------------------------------------------------------------------------------------------------------+ - | dbfs:/FileStore/geospatial/odin/alaska/B02/-424495268.tif | 1970-01-20T15:49:53.135+0000 | 211660514 | 7836235824828840960 | 10980 | 10980 | 1 | {AREA_OR_POINT=Po... | {} | 32602 | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - | dbfs:/FileStore/geospatial/odin/alaska/B02/-524425268.tif | 1970-01-20T15:49:53.135+0000 | 212060218 | 7836235824828840961 | 10980 | 10980 | 1 | {AREA_OR_POINT=Po... | {} | 32602 | {index_id: 593308294097927192, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - | dbfs:/FileStore/geospatial/odin/alaska/B02/1241323268.tif | 1970-01-20T15:49:53.135+0000 | 211660897 | 7836235824828840962 | 10980 | 10980 | 1 | {AREA_OR_POINT=Po... | {} | 32602 | {index_id: 593308294097929991, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | - +-----------------------------------------------------------+------------------------------+-----------+---------------------+-------+-------+-----------+----------------------+-------------+-------+---------------------------------------------------------------------------------------------------------------+ - -Next we will define a function that will compute band statistics for a given raster file. - -.. code-block:: python - - import numpy as np - import rasterio - from rasterio.io import MemoryFile - from io import BytesIO - from pyspark.sql.functions import udf - - @udf("double") - def compute_band_mean(raster): - with MemoryFile(BytesIO(raster)) as memfile: - with memfile.open() as dataset: - return dataset.statistics(bidx = 1).mean - -Finally we will apply the function to the DataFrame. - -.. code-block:: python - - df.select(compute_band_mean("tile.raster")).show() - +---------------------------+ - | compute_band_mean(raster) | - +---------------------------+ - | 0.0111000000000000| - | 0.0021000000000000| - | 0.3001000000000000| - | ... | - +---------------------------+ - - -UDF example for computing NDVI -############################################# - -In this example we will show how to compute NDVI for a raster file. -NDVI is a common index used to assess vegetation health. -It is computed as follows: ndvi = (nir - red) / (nir + red). -NDVI output is a single band raster file with values in the range [-1, 1]. -We will show how to return a raster object as a result of a UDF. - -Firstly we will create a spark DataFrame from a directory of raster files. - -.. code-block:: python - - df = spark.read.format("gdal").load("dbfs:/path/to/raster/files").repartition(400) - df.show() - +-----------------------------------------------------------+------------------------------+-----------+---------------------+-------+-------+-----------+----------------------+-------------+-------+---------------------------------------------------------------------------------------------------------------+ - | path | modificationTime | length | uuid | ySize | xSize | bandCount | metadata | subdatasets | srid | tile | - +-----------------------------------------------------------+------------------------------+-----------+---------------------+-------+-------+-----------+----------------------+-------------+-------+---------------------------------------------------------------------------------------------------------------+ - | dbfs:/FileStore/geospatial/odin/alaska/B02/-424495268.tif | 1970-01-20T15:49:53.135+0000 | 211660514 | 7836235824828840960 | 10980 | 10980 | 1 | {AREA_OR_POINT=Po... | {} | 32602 | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - | dbfs:/FileStore/geospatial/odin/alaska/B02/-524425268.tif | 1970-01-20T15:49:53.135+0000 | 212060218 | 7836235824828840961 | 10980 | 10980 | 1 | {AREA_OR_POINT=Po... | {} | 32602 | {index_id: 593308294097927192, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - | dbfs:/FileStore/geospatial/odin/alaska/B02/1241323268.tif | 1970-01-20T15:49:53.135+0000 | 211660897 | 7836235824828840962 | 10980 | 10980 | 1 | {AREA_OR_POINT=Po... | {} | 32602 | {index_id: 593308294097929991, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | - +-----------------------------------------------------------+------------------------------+-----------+---------------------+-------+-------+-----------+----------------------+-------------+-------+---------------------------------------------------------------------------------------------------------------+ - - -Next we will define a function that will compute NDVI for a given raster file. - -.. code-block:: python - - import numpy as np - import rasterio - from rasterio.io import MemoryFile - from io import BytesIO - from pyspark.sql.functions import udf - - @udf("binary") - def compute_ndvi(raster, nir_band, red_band): - with MemoryFile(BytesIO(raster)) as memfile: - with memfile.open() as dataset: - red = dataset.read(red_band) - nir = dataset.read(nir_band) - ndvi = (nir - red) / (nir + red) - profile = dataset.profile - profile.update(count = 1, dtype = rasterio.float32) - # Write the NDVI to a tmp file and return it as binary - # This is a workaround an issue occurring when using - # MemoryFile for writing using an updated profile - with tempfile.NamedTemporaryFile() as tmp: - with rasterio.open(tmp.name, "w", **profile) as dst: - dst.write(ndvi.astype(rasterio.float32)) - with open(tmp.name, "rb") as f: - return f.read() - -Finally we will apply the function to the DataFrame. - -.. code-block:: python - - df.select(compute_ndvi("tile.raster", lit(1), lit(2))).show() - # The output is a binary column containing the NDVI raster - +------------------------------+ - | compute_ndvi(raster, 1, 2) | - +------------------------------+ - | 000000 ... 00000000000000000 | - | 000000 ... 00000000000000000 | - | 000000 ... 00000000000000000 | - | ... | - +------------------------------+ - - # We can update the tile column with the NDVI raster in place as well - # This will overwrite the existing raster field in the tile column - df.select(col("tile").withField("raster", compute_ndvi("tile.raster", lit(1), lit(2)))).show() - +-----------------------------------------------------------+------------------------------+-----------+---------------------+-------+-------+-----------+----------------------+-------------+-------+---------------------------------------------------------------------------------------------------------------+ - | path | modificationTime | length | uuid | ySize | xSize | bandCount | metadata | subdatasets | srid | tile | - +-----------------------------------------------------------+------------------------------+-----------+---------------------+-------+-------+-----------+----------------------+-------------+-------+---------------------------------------------------------------------------------------------------------------+ - | dbfs:/FileStore/geospatial/odin/alaska/B02/-424495268.tif | 1970-01-20T15:49:53.135+0000 | 211660514 | 7836235824828840960 | 10980 | 10980 | 1 | {AREA_OR_POINT=Po... | {} | 32602 | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - | dbfs:/FileStore/geospatial/odin/alaska/B02/-524425268.tif | 1970-01-20T15:49:53.135+0000 | 212060218 | 7836235824828840961 | 10980 | 10980 | 1 | {AREA_OR_POINT=Po... | {} | 32602 | {index_id: 593308294097927192, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - | dbfs:/FileStore/geospatial/odin/alaska/B02/1241323268.tif | 1970-01-20T15:49:53.135+0000 | 211660897 | 7836235824828840962 | 10980 | 10980 | 1 | {AREA_OR_POINT=Po... | {} | 32602 | {index_id: 593308294097929991, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | - +-----------------------------------------------------------+------------------------------+-----------+---------------------+-------+-------+-----------+----------------------+-------------+-------+---------------------------------------------------------------------------------------------------------------+ - - - -UDF example for writing raster files to disk -############################################# - -In this example we will show how to write a raster file to disk using Rasterio Python API. -This is an examples showing how to materialize a raster binary object as a raster file on disk. -The format of the output file should match the driver format of the binary object. - -Firstly we will create a spark DataFrame from a directory of raster files. - -.. code-block:: python - - df = spark.read.format("gdal").load("dbfs:/path/to/raster/files").repartition(400) - df.show() - +-----------------------------------------------------------+------------------------------+-----------+---------------------+-------+-------+-----------+----------------------+-------------+-------+---------------------------------------------------------------------------------------------------------------+ - | path | modificationTime | length | uuid | ySize | xSize | bandCount | metadata | subdatasets | srid | tile | - +-----------------------------------------------------------+------------------------------+-----------+---------------------+-------+-------+-----------+----------------------+-------------+-------+---------------------------------------------------------------------------------------------------------------+ - | dbfs:/FileStore/geospatial/odin/alaska/B02/-424495268.tif | 1970-01-20T15:49:53.135+0000 | 211660514 | 7836235824828840960 | 10980 | 10980 | 1 | {AREA_OR_POINT=Po... | {} | 32602 | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - | dbfs:/FileStore/geospatial/odin/alaska/B02/-524425268.tif | 1970-01-20T15:49:53.135+0000 | 212060218 | 7836235824828840961 | 10980 | 10980 | 1 | {AREA_OR_POINT=Po... | {} | 32602 | {index_id: 593308294097927192, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - | dbfs:/FileStore/geospatial/odin/alaska/B02/1241323268.tif | 1970-01-20T15:49:53.135+0000 | 211660897 | 7836235824828840962 | 10980 | 10980 | 1 | {AREA_OR_POINT=Po... | {} | 32602 | {index_id: 593308294097929991, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } | - | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | - +-----------------------------------------------------------+------------------------------+-----------+---------------------+-------+-------+-----------+----------------------+-------------+-------+---------------------------------------------------------------------------------------------------------------+ - - -Next we will define a function that will write a given raster file to disk. - -.. code-block:: python - - import numpy as np - import rasterio - from rasterio.io import MemoryFile - from io import BytesIO - from pyspark.sql.functions import udf - from pathlib import Path - - @udf("string") - def write_raster(raster, file_id, parent_dir): - with MemoryFile(BytesIO(raster)) as memfile: - with memfile.open() as dataset: - Path(outputpath).mkdir(parents=True, exist_ok=True) - extensions_map = rasterio.drivers.raster_driver_extensions() - driver_map = {v: k for k, v in extensions_map.items()} - extension = driver_map[dataset.driver] - path = f"{parent_dir}/{file_id}.{extension}" - # If you want to write the raster to a different format - # you can update the profile here. Note that the extension - # should match the driver format - with rasterio.open(path, "w", **dataset.profile) as dst: - dst.write(dataset.read()) - return path - -Finally we will apply the function to the DataFrame. - -.. code-block:: python - - df.select(write_raster("tile.raster", "uuid", lit("dbfs:/path/to/output/dir"))).show() - +-------------------------------------+ - | write_raster(raster, output, output)| - +-------------------------------------+ - | dbfs:/path/to/output/dir/1234.tif | - | dbfs:/path/to/output/dir/4545.tif | - | dbfs:/path/to/output/dir/3215.tif | - | ... | - +-------------------------------------+ diff --git a/v0.3.x/_sources/api/spatial-aggregations.rst.txt b/v0.3.x/_sources/api/spatial-aggregations.rst.txt deleted file mode 100644 index 4f8d3a0ca..000000000 --- a/v0.3.x/_sources/api/spatial-aggregations.rst.txt +++ /dev/null @@ -1,346 +0,0 @@ -============================= -Spatial aggregation functions -============================= - - -st_intersects_aggregate -*********************** - -.. function:: st_intersects_aggregate(leftIndex, rightIndex) - - Returns `true` if any of the `leftIndex` and `rightIndex` pairs intersect. - - :param leftIndex: Geometry - :type leftIndex: Column - :param rightIndex: Geometry - :type rightIndex: Column - :rtype: Column - - :example: - -.. tabs:: - .. code-tab:: py - - left_df = ( - spark.createDataFrame([{'geom': 'POLYGON ((0 0, 0 3, 3 3, 3 0))'}]) - .select(grid_tessellateexplode(col("geom"), lit(1)).alias("left_index")) - ) - right_df = ( - spark.createDataFrame([{'geom': 'POLYGON ((2 2, 2 4, 4 4, 4 2))'}]) - .select(grid_tessellateexplode(col("geom"), lit(1)).alias("right_index")) - ) - ( - left_df - .join(right_df, col("left_index.index_id") == col("right_index.index_id")) - .groupBy() - .agg(st_intersects_aggregate(col("left_index"), col("right_index"))) - ).show(1, False) - +------------------------------------------------+ - |st_intersects_aggregate(left_index, right_index)| - +------------------------------------------------+ - |true | - +------------------------------------------------+ - - .. code-tab:: scala - - val leftDf = List("POLYGON ((0 0, 0 3, 3 3, 3 0))").toDF("geom") - .select(grid_tessellateexplode($"geom", lit(1)).alias("left_index")) - val rightDf = List("POLYGON ((2 2, 2 4, 4 4, 4 2))").toDF("geom") - .select(grid_tessellateexplode($"geom", lit(1)).alias("right_index")) - leftDf - .join(rightDf, $"left_index.index_id" === $"right_index.index_id") - .groupBy() - .agg(st_intersects_aggregate($"left_index", $"right_index")) - .show(false) - +------------------------------------------------+ - |st_intersects_aggregate(left_index, right_index)| - +------------------------------------------------+ - |true | - +------------------------------------------------+ - - .. code-tab:: sql - - WITH l AS (SELECT grid_tessellateexplode("POLYGON ((0 0, 0 3, 3 3, 3 0))", 1) AS left_index), - r AS (SELECT grid_tessellateexplode("POLYGON ((2 2, 2 4, 4 4, 4 2))", 1) AS right_index) - SELECT st_intersects_aggregate(l.left_index, r.right_index) - FROM l INNER JOIN r on l.left_index.index_id = r.right_index.index_id - +------------------------------------------------+ - |st_intersects_aggregate(left_index, right_index)| - +------------------------------------------------+ - |true | - +------------------------------------------------+ - - .. code-tab:: r R - - df.l <- select( - createDataFrame(data.frame(geom = "POLYGON ((0 0, 0 3, 3 3, 3 0))")), - alias(grid_tessellateexplode(column("geom"), lit(1L)), "left_index") - ) - df.r <- select( - createDataFrame(data.frame(geom = "POLYGON ((2 2, 2 4, 4 4, 4 2))")), - alias(grid_tessellateexplode(column("geom"), lit(1L)), "right_index") - ) - showDF( - select( - join(df.l, df.r, df.l$left_index.index_id == df.r$right_index.index_id), - st_intersects_aggregate(column("left_index"), column("right_index")) - ), truncate=F - ) - +------------------------------------------------+ - |st_intersects_aggregate(left_index, right_index)| - +------------------------------------------------+ - |true | - +------------------------------------------------+ - - -st_intersection_aggregate -************************* - -.. function:: st_intersection_aggregate(leftIndex, rightIndex) - - Computes the intersections of `leftIndex` and `rightIndex` and returns the union of these intersections. - - :param leftIndex: Geometry - :type leftIndex: Column - :param rightIndex: Geometry - :type rightIndex: Column - :rtype: Column - - :example: - -.. tabs:: - .. code-tab:: py - - left_df = ( - spark.createDataFrame([{'geom': 'POLYGON ((0 0, 0 3, 3 3, 3 0))'}]) - .select(grid_tessellateexplode(col("geom"), lit(1)).alias("left_index")) - ) - right_df = ( - spark.createDataFrame([{'geom': 'POLYGON ((2 2, 2 4, 4 4, 4 2))'}]) - .select(grid_tessellateexplode(col("geom"), lit(1)).alias("right_index")) - ) - ( - left_df - .join(right_df, col("left_index.index_id") == col("right_index.index_id")) - .groupBy() - .agg(st_astext(st_intersection_aggregate(col("left_index"), col("right_index")))) - ).show(1, False) - +--------------------------------------------------------------+ - |convert_to(st_intersection_aggregate(left_index, right_index))| - +--------------------------------------------------------------+ - |POLYGON ((2 2, 3 2, 3 3, 2 3, 2 2)) | - +--------------------------------------------------------------+ - - .. code-tab:: scala - - val leftDf = List("POLYGON ((0 0, 0 3, 3 3, 3 0))").toDF("geom") - .select(grid_tessellateexplode($"geom", lit(1)).alias("left_index")) - val rightDf = List("POLYGON ((2 2, 2 4, 4 4, 4 2))").toDF("geom") - .select(grid_tessellateexplode($"geom", lit(1)).alias("right_index")) - leftDf - .join(rightDf, $"left_index.index_id" === $"right_index.index_id") - .groupBy() - .agg(st_astext(st_intersection_aggregate($"left_index", $"right_index"))) - .show(false) - +--------------------------------------------------------------+ - |convert_to(st_intersection_aggregate(left_index, right_index))| - +--------------------------------------------------------------+ - |POLYGON ((2 2, 3 2, 3 3, 2 3, 2 2)) | - +--------------------------------------------------------------+ - - .. code-tab:: sql - - WITH l AS (SELECT grid_tessellateexplode("POLYGON ((0 0, 0 3, 3 3, 3 0))", 1) AS left_index), - r AS (SELECT grid_tessellateexplode("POLYGON ((2 2, 2 4, 4 4, 4 2))", 1) AS right_index) - SELECT st_astext(st_intersection_aggregate(l.left_index, r.right_index)) - FROM l INNER JOIN r on l.left_index.index_id = r.right_index.index_id - +--------------------------------------------------------------+ - |convert_to(st_intersection_aggregate(left_index, right_index))| - +--------------------------------------------------------------+ - |POLYGON ((2 2, 3 2, 3 3, 2 3, 2 2)) | - +--------------------------------------------------------------+ - - .. code-tab:: r R - - df.l <- select( - createDataFrame(data.frame(geom = "POLYGON ((0 0, 0 3, 3 3, 3 0))")), - alias(grid_tessellateexplode(column("geom"), lit(1L)), "left_index") - ) - df.r <- select( - createDataFrame(data.frame(geom = "POLYGON ((2 2, 2 4, 4 4, 4 2))")), - alias(grid_tessellateexplode(column("geom"), lit(1L)), "right_index") - ) - showDF( - select( - join(df.l, df.r, df.l$left_index.index_id == df.r$right_index.index_id), - st_astext(st_intersection_aggregate(column("left_index"), column("right_index"))) - ), truncate=F - ) - +--------------------------------------------------------------+ - |convert_to(st_intersection_aggregate(left_index, right_index))| - +--------------------------------------------------------------+ - |POLYGON ((2 2, 3 2, 3 3, 2 3, 2 2)) | - +--------------------------------------------------------------+ - -st_union_agg -************ - -.. function:: st_union_agg(geom) - - Computes the union of the input geometries. - - :param geom: Geometry - :type geom: Column - :rtype: Column - - :example: - -.. tabs:: - .. code-tab:: py - - - df = spark.createDataFrame([{'geom': 'POLYGON ((10 10, 20 10, 20 20, 10 20, 10 10))'}, {'geom': 'POLYGON ((15 15, 25 15, 25 25, 15 25, 15 15))'}]) - df.select(st_astext(st_union_agg(col('geom')))).show() - +-------------------------------------------------------------------------+ - | st_union_agg(geom) | - +-------------------------------------------------------------------------+ - |POLYGON ((20 15, 20 10, 10 10, 10 20, 15 20, 15 25, 25 25, 25 15, 20 15))| - +-------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = List("POLYGON ((10 10, 20 10, 20 20, 10 20, 10 10))", "POLYGON ((10 10, 20 10, 20 20, 10 20, 10 10))").toDF("geom") - df.select(st_astext(st_union_agg(col('geom')))).show() - +-------------------------------------------------------------------------+ - | st_union_agg(geom) | - +-------------------------------------------------------------------------+ - |POLYGON ((20 15, 20 10, 10 10, 10 20, 15 20, 15 25, 25 25, 25 15, 20 15))| - +-------------------------------------------------------------------------+ - - .. code-tab:: sql - - WITH geoms ('geom') AS (VALUES ('POLYGON ((10 10, 20 10, 20 20, 10 20, 10 10))'), ('POLYGON ((10 10, 20 10, 20 20, 10 20, 10 10))')) - SELECT st_astext(st_union_agg(geoms)); - +-------------------------------------------------------------------------+ - | st_union_agg(geom) | - +-------------------------------------------------------------------------+ - |POLYGON ((20 15, 20 10, 10 10, 10 20, 15 20, 15 25, 25 25, 25 15, 20 15))| - +-------------------------------------------------------------------------+ - - .. code-tab:: r R - - df.geom <- select(createDataFrame(data.frame(geom = c('POLYGON ((10 10, 20 10, 20 20, 10 20, 10 10))'), ('POLYGON ((10 10, 20 10, 20 20, 10 20, 10 10))')))) - showDF(select(st_astext(st_union_agg(column("geom")))), truncate=F) - +-------------------------------------------------------------------------+ - | st_union_agg(geom) | - +-------------------------------------------------------------------------+ - |POLYGON ((20 15, 20 10, 10 10, 10 20, 15 20, 15 25, 25 25, 25 15, 20 15))| - +-------------------------------------------------------------------------+ - -grid_cell_intersection_agg -************ - -.. function:: grid_cell_intersection_agg(chips) - - Computes the chip representing the intersection of the input chips. - - :param chips: Chips - :type chips: Column - :rtype: Column - - :example: - -.. tabs:: - .. code-tab:: py - - - df = df.withColumn("chip", grid_tessellateexplode(...)) - df.groupBy("chip.index_id").agg(grid_cell_intersection_agg("chip").alias("agg_chip")).limit(1).show() - +--------------------------------------------------------+ - | agg_chip | - +--------------------------------------------------------+ - |{is_core: false, index_id: 590418571381702655, wkb: ...}| - +--------------------------------------------------------+ - - .. code-tab:: scala - - val df = other_df.withColumn("chip", grid_tessellateexplode(...)) - df.groupBy("chip.index_id").agg(grid_cell_intersection_agg("chip").alias("agg_chip")).limit(1).show() - +--------------------------------------------------------+ - | agg_chip | - +--------------------------------------------------------+ - |{is_core: false, index_id: 590418571381702655, wkb: ...}| - +--------------------------------------------------------+ - - .. code-tab:: sql - - WITH chips AS (SELECT grid_tessellateexplode(wkt) AS "chip" FROM ...) - SELECT grid_cell_intersection_agg(chips) AS agg_chip FROM chips GROUP BY chips.index_id; - +--------------------------------------------------------+ - | agg_chip | - +--------------------------------------------------------+ - |{is_core: false, index_id: 590418571381702655, wkb: ...}| - +--------------------------------------------------------+ - - .. code-tab:: r R - - showDF(select(grid_cell_intersection_agg(column("chip"))), truncate=F) - +--------------------------------------------------------+ - | agg_chip | - +--------------------------------------------------------+ - |{is_core: false, index_id: 590418571381702655, wkb: ...}| - +--------------------------------------------------------+ - -grid_cell_union_agg -************ - -.. function:: grid_cell_union_agg(chips) - - Computes the chip representing the union of the input chips. - - :param chips: Chips - :type chips: Column - :rtype: Column - - :example: - -.. tabs:: - .. code-tab:: py - - - df = df.withColumn("chip", grid_tessellateexplode(...)) - df.groupBy("chip.index_id").agg(grid_cell_union_agg("chip").alias("agg_chip")).limit(1).show() - +--------------------------------------------------------+ - | agg_chip | - +--------------------------------------------------------+ - |{is_core: false, index_id: 590418571381702655, wkb: ...}| - +--------------------------------------------------------+ - - .. code-tab:: scala - - val df = other_df.withColumn("chip", grid_tessellateexplode(...)) - df.groupBy("chip.index_id").agg(grid_cell_union_agg("chip").alias("agg_chip")).limit(1).show() - +--------------------------------------------------------+ - | agg_chip | - +--------------------------------------------------------+ - |{is_core: false, index_id: 590418571381702655, wkb: ...}| - +--------------------------------------------------------+ - - .. code-tab:: sql - - WITH chips AS (SELECT grid_tessellateexplode(wkt) AS "chip" FROM ...) - SELECT grid_cell_union_agg(chips) AS agg_chip FROM chips GROUP BY chips.index_id; - +--------------------------------------------------------+ - | agg_chip | - +--------------------------------------------------------+ - |{is_core: false, index_id: 590418571381702655, wkb: ...}| - +--------------------------------------------------------+ - - .. code-tab:: r R - - showDF(select(grid_cell_union_agg(column("chip"))), truncate=F) - +--------------------------------------------------------+ - | agg_chip | - +--------------------------------------------------------+ - |{is_core: false, index_id: 590418571381702655, wkb: ...}| - +--------------------------------------------------------+ \ No newline at end of file diff --git a/v0.3.x/_sources/api/spatial-functions.rst.txt b/v0.3.x/_sources/api/spatial-functions.rst.txt deleted file mode 100644 index e2ccc9464..000000000 --- a/v0.3.x/_sources/api/spatial-functions.rst.txt +++ /dev/null @@ -1,2136 +0,0 @@ -================= -Spatial functions -================= - - -flatten_polygons -**************** - -.. function:: flatten_polygons(col) - - Explodes a MultiPolygon geometry into one row per constituent Polygon. - - :param col: MultiPolygon Geometry - :type col: Column - :rtype: Column: StringType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([ - {'wkt': 'MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))'} - ]) - df.select(flatten_polygons('wkt')).show(2, False) - +------------------------------------------+ - |element | - +------------------------------------------+ - |POLYGON ((30 20, 45 40, 10 40, 30 20)) | - |POLYGON ((15 5, 40 10, 10 20, 5 10, 15 5))| - +------------------------------------------+ - - .. code-tab:: scala - - val df = List(("MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))")).toDF("wkt") - df.select(flatten_polygons(col("wkt"))).show(false) - +------------------------------------------+ - |element | - +------------------------------------------+ - |POLYGON ((30 20, 45 40, 10 40, 30 20)) | - |POLYGON ((15 5, 40 10, 10 20, 5 10, 15 5))| - +------------------------------------------+ - - .. code-tab:: sql - - SELECT flatten_polygons("'MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))'") - +------------------------------------------+ - |element | - +------------------------------------------+ - |POLYGON ((30 20, 45 40, 10 40, 30 20)) | - |POLYGON ((15 5, 40 10, 10 20, 5 10, 15 5))| - +------------------------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = 'MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))')) - showDF(select(df, flatten_polygons(column("wkt"))), truncate=F) - +------------------------------------------+ - |element | - +------------------------------------------+ - |POLYGON ((30 20, 45 40, 10 40, 30 20)) | - |POLYGON ((15 5, 40 10, 10 20, 5 10, 15 5))| - +------------------------------------------+ - - -st_area -******* - -.. function:: st_area(col) - - Compute the area of a geometry. - - :param col: Geometry - :type col: Column - :rtype: Column: DoubleType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}]) - df.select(st_area('wkt')).show() - +------------+ - |st_area(wkt)| - +------------+ - | 550.0| - +------------+ - - .. code-tab:: scala - - val df = List(("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")).toDF("wkt") - df.select(st_area(col("wkt"))).show() - +------------+ - |st_area(wkt)| - +------------+ - | 550.0| - +------------+ - - .. code-tab:: sql - - SELECT st_area("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))") - +------------+ - |st_area(wkt)| - +------------+ - | 550.0| - +------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")) - showDF(select(df, st_area(column("wkt")))) - +------------+ - |st_area(wkt)| - +------------+ - | 550.0| - +------------+ - -.. note:: Results of this function are always expressed in the original units of the input geometry. - - -st_buffer -********* - -.. function:: st_buffer(col, radius) - - Buffer the input geometry by radius `radius` and return a new, buffered geometry. - - :param col: Geometry - :type col: Column - :param radius: Double - :type radius: Column (DoubleType) - :rtype: Column: Geometry - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}]) - df.select(st_buffer('wkt', lit(2.))).show() - +--------------------+ - | st_buffer(wkt, 2.0)| - +--------------------+ - |POLYGON ((29.1055...| - +--------------------+ - - .. code-tab:: scala - - val df = List(("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")).toDF("wkt") - df.select(st_buffer(col("wkt"), 2d)).show() - +--------------------+ - | st_buffer(wkt, 2.0)| - +--------------------+ - |POLYGON ((29.1055...| - +--------------------+ - - .. code-tab:: sql - - SELECT st_buffer("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))", 2d) - +--------------------+ - | st_buffer(wkt, 2.0)| - +--------------------+ - |POLYGON ((29.1055...| - +--------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")) - showDF(select(df, st_buffer(column("wkt"), lit(2)))) - +--------------------+ - | st_buffer(wkt, 2.0)| - +--------------------+ - |POLYGON ((29.1055...| - +--------------------+ - -st_bufferloop -************* - -.. function:: st_bufferloop(col, innerRadius, outerRadius) - - Returns a difference between st_buffer(col, outerRadius) and st_buffer(col, innerRadius). - The resulting geometry is a loop with a width of outerRadius - innerRadius. - - :param col: Geometry - :type col: Column - :param innerRadius: Radius of the resulting geometry hole. - :type innerRadius: Column (DoubleType) - :param outerRadius: Radius of the resulting geometry. - :type outerRadius: Column (DoubleType) - :rtype: Column: Geometry - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}]) - df.select(st_bufferloop('wkt', lit(2.), lit(2.1)).show() - +-------------------------+ - | st_buffer(wkt, 2.0, 2.1)| - +-------------------------+ - | POLYGON ((29.1055...| - +-------------------------+ - - .. code-tab:: scala - - val df = List(("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")).toDF("wkt") - df.select(st_bufferloop('wkt', lit(2.), lit(2.1))).show() - +-------------------------+ - | st_buffer(wkt, 2.0, 2.1)| - +-------------------------+ - | POLYGON ((29.1055...| - +-------------------------+ - - .. code-tab:: sql - - SELECT st_bufferloop("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))", 2d, 2.1d) - +-------------------------+ - | st_buffer(wkt, 2.0, 2.1)| - +-------------------------+ - | POLYGON ((29.1055...| - +-------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")) - showDF(select(df, st_bufferloop('wkt', lit(2.), lit(2.1)))) - +-------------------------+ - | st_buffer(wkt, 2.0, 2.1)| - +-------------------------+ - | POLYGON ((29.1055...| - +-------------------------+ - - -.. figure:: ../images/st_bufferloop/geom.png - :figclass: doc-figure - - Fig 1. ST_BufferLoop(geom, 0.02, 0.04) - -st_centroid2D [Deprecated] -************************** - -.. function:: st_centroid2D(col) - - Returns the x and y coordinates representing the centroid of the input geometry. - - :param col: Geometry - :type col: Column - :rtype: Column: StructType[x: DoubleType, y: DoubleType] - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}]) - df.select(st_centroid2D('wkt')).show() - +---------------------------------------+ - |st_centroid(wkt) | - +---------------------------------------+ - |{25.454545454545453, 26.96969696969697}| - +---------------------------------------+ - - .. code-tab:: scala - - val df = List(("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")).toDF("wkt") - df.select(st_centroid2D(col("wkt"))).show() - +---------------------------------------+ - |st_centroid(wkt) | - +---------------------------------------+ - |{25.454545454545453, 26.96969696969697}| - +---------------------------------------+ - - .. code-tab:: sql - - SELECT st_centroid2D("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))") - +---------------------------------------+ - |st_centroid(wkt) | - +---------------------------------------+ - |{25.454545454545453, 26.96969696969697}| - +---------------------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")) - showDF(select(df, st_centroid2D(column("wkt"))), truncate=F) - +---------------------------------------+ - |st_centroid(wkt) | - +---------------------------------------+ - |{25.454545454545453, 26.96969696969697}| - +---------------------------------------+ - -st_centroid -************* - -.. function:: st_centroid(col) - - Returns the POINT geometry representing the centroid of the input geometry. - - :param col: Geometry - :type col: Column - :rtype: Column: Geometry - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}]) - df.select(st_centroid('wkt')).show() - +---------------------------------------------+ - |st_centroid(wkt) | - +---------------------------------------------+ - |POINT (25.454545454545453, 26.96969696969697)| - +---------------------------------------------+ - - .. code-tab:: scala - - val df = List(("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")).toDF("wkt") - df.select(st_centroid(col("wkt"))).show() - +---------------------------------------------+ - |st_centroid(wkt) | - +---------------------------------------------+ - |POINT (25.454545454545453, 26.96969696969697)| - +---------------------------------------------+ - - .. code-tab:: sql - - SELECT st_centroid("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))") - +---------------------------------------------+ - |st_centroid(wkt) | - +---------------------------------------------+ - |POINT (25.454545454545453, 26.96969696969697)| - +---------------------------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")) - showDF(select(df, st_centroid(column("wkt"))), truncate=F) - +---------------------------------------------+ - |st_centroid(wkt) | - +---------------------------------------------+ - |POINT (25.454545454545453, 26.96969696969697)| - +---------------------------------------------+ - -st_convexhull -************* - -.. function:: st_convexhull(col) - - Compute the convex hull of a geometry or multi-geometry object. - - :param col: Geometry - :type col: Column - :rtype: Column - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'MULTIPOINT ((10 40), (40 30), (20 20), (30 10))'}]) - df.select(st_convexhull('wkt')).show(1, False) - +---------------------------------------------+ - |st_convexhull(wkt) | - +---------------------------------------------+ - |POLYGON ((10 40, 20 20, 30 10, 40 30, 10 40))| - +---------------------------------------------+ - - .. code-tab:: scala - - val df = List(("MULTIPOINT ((10 40), (40 30), (20 20), (30 10))")).toDF("wkt") - df.select(st_convexhull(col("wkt"))).show(false) - +---------------------------------------------+ - |st_convexhull(wkt) | - +---------------------------------------------+ - |POLYGON ((10 40, 20 20, 30 10, 40 30, 10 40))| - +---------------------------------------------+ - - .. code-tab:: sql - - SELECT st_convexhull("MULTIPOINT ((10 40), (40 30), (20 20), (30 10))") - +---------------------------------------------+ - |st_convexhull(wkt) | - +---------------------------------------------+ - |POLYGON ((10 40, 20 20, 30 10, 40 30, 10 40))| - +---------------------------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "MULTIPOINT ((10 40), (40 30), (20 20), (30 10))")) - showDF(select(df, st_convexhull(column("wkt")))) - +---------------------------------------------+ - |st_convexhull(wkt) | - +---------------------------------------------+ - |POLYGON ((10 40, 20 20, 30 10, 40 30, 10 40))| - +---------------------------------------------+ - - -st_difference -************* - -.. function:: st_difference(left_geom, right_geom) - - Returns the point set difference of the left and right geometry. - - :param left_geom: Geometry - :type left_geom: Column - :param right_geom: Geometry - :type right_geom: Column - :rtype Column: Geometry - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'left': 'POLYGON ((10 10, 20 10, 20 20, 10 20, 10 10))', 'right': 'POLYGON ((15 15, 25 15, 25 25, 15 25, 15 15))'}]) - df.select(st_difference(col('left'), col('right'))).show() - +-----------------------------------------------------------+ - | st_difference(left, right) | - +-----------------------------------------------------------+ - |POLYGON ((10 10, 20 10, 20 15, 15 15, 15 20, 10 20, 10 10))| - +-----------------------------------------------------------+ - - .. code-tab:: scala - - val df = List(("POLYGON ((10 10, 20 10, 20 20, 10 20, 10 10))", "POLYGON ((15 15, 25 15, 25 25, 15 25, 15 15))")).toDF("left", "right") - df.select(st_difference(col('left'), col('right'))).show() - +-----------------------------------------------------------+ - | st_difference(left, right) | - +-----------------------------------------------------------+ - |POLYGON ((10 10, 20 10, 20 15, 15 15, 15 20, 10 20, 10 10))| - +-----------------------------------------------------------+ - - .. code-tab:: sql - - SELECT st_difference("POLYGON ((10 10, 20 10, 20 20, 10 20, 10 10))", "POLYGON ((15 15, 25 15, 25 25, 15 25, 15 15))") - +-----------------------------------------------------------+ - | st_difference(left, right) | - +-----------------------------------------------------------+ - |POLYGON ((10 10, 20 10, 20 15, 15 15, 15 20, 10 20, 10 10))| - +-----------------------------------------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(p1 = "POLYGON ((10 10, 20 10, 20 20, 10 20, 10 10))", p2 = "POLYGON ((15 15, 25 15, 25 25, 15 25, 15 15))")) - showDF(select(df, st_difference(column("p1"), column("p2"))), truncate=F) - +-----------------------------------------------------------+ - | st_difference(left, right) | - +-----------------------------------------------------------+ - |POLYGON ((10 10, 20 10, 20 15, 15 15, 15 20, 10 20, 10 10))| - +-----------------------------------------------------------+ - - -st_dimension -************ - -.. function:: st_dimension(col) - - Compute the dimension of the geometry. - - :param col: Geometry - :type col: Column - :rtype: Column: IntegerType - - :example: - -.. tabs:: - .. code-tab:: py - - >>> df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}]) - >>> df.select(st_dimension('wkt')).show() - +-----------------+ - |st_dimension(wkt)| - +-----------------+ - | 2| - +-----------------+ - - .. code-tab:: scala - - >>> val df = List("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))").toDF("wkt") - >>> df.select(st_dimension(col("wkt"))).show() - +-----------------+ - |st_dimension(wkt)| - +-----------------+ - | 2| - +-----------------+ - - .. code-tab:: sql - - >>> SELECT st_dimension("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))") - +-----------------+ - |st_dimension(wkt)| - +-----------------+ - | 2| - +-----------------+ - - .. code-tab:: r R - - >>> df <- createDataFrame(data.frame(wkt = "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")) - >>> showDF(select(df, st_dimension(column("wkt")))) - +-----------------+ - |st_dimension(wkt)| - +-----------------+ - | 2| - +-----------------+ - - -st_distance -*********** - -.. function:: st_distance(geom1, geom2) - - Compute the euclidean distance between `geom1` and `geom2`. - - :param geom1: Geometry - :type geom1: Column - :param geom2: Geometry - :type geom2: Column - :rtype: Column: DoubleType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'point': 'POINT (5 5)', 'poly': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}]) - df.select(st_distance('poly', 'point')).show() - +------------------------+ - |st_distance(poly, point)| - +------------------------+ - | 15.652475842498529| - +------------------------+ - - .. code-tab:: scala - - val df = List(("POINT (5 5)", "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")).toDF("point", "poly") - df.select(st_distance(col("poly"), col("point"))).show() - +------------------------+ - |st_distance(poly, point)| - +------------------------+ - | 15.652475842498529| - +------------------------+ - - .. code-tab:: sql - - SELECT st_distance("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))", "POINT (5 5)") - +------------------------+ - |st_distance(poly, point)| - +------------------------+ - | 15.652475842498529| - +------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(point = c( "POINT (5 5)"), poly = "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")) - showDF(select(df, st_distance(column("poly"), column("point")))) - +------------------------+ - |st_distance(poly, point)| - +------------------------+ - | 15.652475842498529| - +------------------------+ - -.. note:: Results of this euclidean distance function are always expressed in the original units of the input geometries, e.g. for WGS84 (SRID 4326) units are degrees. - -st_dump -******* - -.. function:: st_dump(col) - - Explodes a multi-geometry into one row per constituent geometry. - - :param col: The input multi-geometry - :type col: Column - :rtype: Column - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'MULTIPOINT ((10 40), (40 30), (20 20), (30 10))'}]) - df.select(st_dump('wkt')).show(5, False) - +-------------+ - |element | - +-------------+ - |POINT (10 40)| - |POINT (40 30)| - |POINT (20 20)| - |POINT (30 10)| - +-------------+ - - .. code-tab:: scala - - val df = List(("MULTIPOINT ((10 40), (40 30), (20 20), (30 10))")).toDF("wkt") - df.select(st_dump(col("wkt"))).show(false) - +-------------+ - |element | - +-------------+ - |POINT (10 40)| - |POINT (40 30)| - |POINT (20 20)| - |POINT (30 10)| - +-------------+ - - .. code-tab:: sql - - SELECT st_dump("MULTIPOINT ((10 40), (40 30), (20 20), (30 10))") - +-------------+ - |element | - +-------------+ - |POINT (10 40)| - |POINT (40 30)| - |POINT (20 20)| - |POINT (30 10)| - +-------------+ - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "MULTIPOINT ((10 40), (40 30), (20 20), (30 10))")) - showDF(select(df, st_dump(column("wkt")))) - +-------------+ - |element | - +-------------+ - |POINT (10 40)| - |POINT (40 30)| - |POINT (20 20)| - |POINT (30 10)| - +-------------+ - - -st_envelope -*********** - -.. function:: st_envelope(col) - - Returns the minimum bounding box of the input geometry, as a geometry. - This bounding box is defined by the rectangular polygon with corner points `(x_min, y_min)`, `(x_max, y_min)`, `(x_min, y_max)`, `(x_max, y_max)`. - - :param col: Geometry - :type col: Column - :rtype: Column - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'POLYGON ((10 10, 20 10, 15 20, 10 10))'}]) - df.select(st_envelope('wkt')).show() - +-----------------------------------------------+ - | st_envelope(wkt) | - +-----------------------------------------------+ - | POLYGON ((10 10, 20 10, 20 20, 10 20, 10 10)) | - +-----------------------------------------------+ - - .. code-tab:: scala - - df = List(("POLYGON ((10 10, 20 10, 15 20, 10 10))")).toDF("wkt") - df.select(st_envelope('wkt')).show() - +-----------------------------------------------+ - | st_envelope(wkt) | - +-----------------------------------------------+ - | POLYGON ((10 10, 20 10, 20 20, 10 20, 10 10)) | - +-----------------------------------------------+ - - .. code-tab:: sql - - SELECT st_envelope("POLYGON ((10 10, 20 10, 15 20, 10 10))") - +-----------------------------------------------+ - | st_envelope(wkt) | - +-----------------------------------------------+ - | POLYGON ((10 10, 20 10, 20 20, 10 20, 10 10)) | - +-----------------------------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "POLYGON ((10 10, 20 10, 15 20, 10 10))") - showDF(select(df, st_envelope(column("wkt"))), truncate=F) - +-----------------------------------------------+ - | st_envelope(wkt) | - +-----------------------------------------------+ - | POLYGON ((10 10, 20 10, 20 20, 10 20, 10 10)) | - +-----------------------------------------------+ - - -st_geometrytype -*************** - -.. function:: st_geometrytype(col) - - Returns the type of the input geometry ("POINT", "LINESTRING", "POLYGON" etc.). - - :param col: Geometry - :type col: Column - :rtype: Column: StringType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}]) - df.select(st_geometrytype('wkt')).show() - +--------------------+ - |st_geometrytype(wkt)| - +--------------------+ - | POLYGON| - +--------------------+ - - .. code-tab:: scala - - val df = List(("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")).toDF("wkt") - df.select(st_geometrytype(col("wkt"))).show() - +--------------------+ - |st_geometrytype(wkt)| - +--------------------+ - | POLYGON| - +--------------------+ - - .. code-tab:: sql - - SELECT st_geometrytype("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0), (15 15, 15 20, 20 20, 20 15, 15 15))") - +--------------------+ - |st_geometrytype(wkt)| - +--------------------+ - | POLYGON| - +--------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")) - showDF(select(df, st_geometrytype(column("wkt"))), truncate=F) - +--------------------+ - |st_geometrytype(wkt)| - +--------------------+ - | POLYGON| - +--------------------+ - - -st_haversine -*********** - -.. function:: st_haversine(lat1, lng1, lat2, lng2) - - Compute the haversine distance between lat1/lng1 and lat2/lng2. - - :param lat1: DoubleType - :type lat1: Column - :param lng1: DoubleType - :type lng1: Column - :param lat2: DoubleType - :type lat2: Column - :param lng2: DoubleType - :type lng2: Column - :rtype: Column: DoubleType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'lat1': 0.0, 'lng1': 90.0, 'lat2': 0.0, 'lng2': 0.0}]) - df.select(st_distance('lat1', 'lng1', 'lat2', 'lng2')).show() - +------------------------------------+ - |st_haversine(lat1, lng1, lat2, lng2)| - +------------------------------------+ - | 10007.55722101796| - +------------------------------------+ - - .. code-tab:: scala - - val df = List((0.0, 90.0, 0.0, 0.0)).toDF("lat1", "lng1", "lat2", "lng2") - df.select(st_haversine(col("lat1"), col("lng1"), col("lat2"), col("lng2"))).show() - +------------------------------------+ - |st_haversine(lat1, lng1, lat2, lng2)| - +------------------------------------+ - | 10007.55722101796| - +------------------------------------+ - - .. code-tab:: sql - - SELECT st_haversine(0.0, 90.0, 0.0, 0.0) - +------------------------------------+ - |st_haversine(lat1, lng1, lat2, lng2)| - +------------------------------------+ - | 10007.55722101796| - +------------------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(lat1 = c(0.0), lng1 = c(90.0), lat2 = c(0.0), lng2 = c(0.0))) - showDF(select(df, st_haversine(column("lat1"), column("lng1"), column("lat2"), column("lng2")))) - +------------------------------------+ - |st_haversine(lat1, lng1, lat2, lng2)| - +------------------------------------+ - | 10007.55722101796| - +------------------------------------+ - -.. note:: Results of this function are always expressed in km, while the input lat/lng pairs are expected to be in degrees. The radius used (in km) is 6371.0088. - - -st_hasvalidcoordinates -********************** - -.. function:: st_hasvalidcoordinates(geom, crs, which) - - Checks if all points in `geom` are valid with respect to crs bounds. - CRS bounds can be provided either as bounds or as reprojected_bounds. - - :param geom: Geometry - :type geom: Column - :param crs: CRS name (EPSG ID), e.g. "EPSG:2192" - :type crs: Column - :param which: Check against geographic `"bounds"` or geometric `"reprojected_bounds"` bounds. - :type which: Column - :rtype: Column: IntegerType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'POLYGON((5.84 45.64, 5.92 45.64, 5.89 45.81, 5.79 45.81, 5.84 45.64))'}]) - df.select(st_hasvalidcoordinates(col('wkt'), lit('EPSG:2192'), lit('bounds'))).show() - +----------------------------------------------+ - |st_hasvalidcoordinates(wkt, EPSG:2192, bounds)| - +----------------------------------------------+ - | true| - +----------------------------------------------+ - - .. code-tab:: scala - - val df = List(("POLYGON((5.84 45.64, 5.92 45.64, 5.89 45.81, 5.79 45.81, 5.84 45.64))")).toDF("wkt") - df.select(st_hasvalidcoordinates(col("wkt"), lit("EPSG:2192"), lit("bounds"))).show() - +----------------------------------------------+ - |st_hasvalidcoordinates(wkt, EPSG:2192, bounds)| - +----------------------------------------------+ - | true| - +----------------------------------------------+ - - .. code-tab:: sql - - SELECT st_hasvalidcoordinates("POLYGON((5.84 45.64, 5.92 45.64, 5.89 45.81, 5.79 45.81, 5.84 45.64))", "EPSG:2192", "bounds") - +----------------------------------------------+ - |st_hasvalidcoordinates(wkt, EPSG:2192, bounds)| - +----------------------------------------------+ - | true| - +----------------------------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "POLYGON((5.84 45.64, 5.92 45.64, 5.89 45.81, 5.79 45.81, 5.84 45.64))")) - showDF(select(df, st_hasvalidcoordinates(column("wkt"), lit("EPSG:2192"), lit("bounds"))), truncate=F) - +----------------------------------------------+ - |st_hasvalidcoordinates(wkt, EPSG:2192, bounds)| - +----------------------------------------------+ - |true | - +----------------------------------------------+ - - -st_intersection -*************** - -.. function:: st_intersection(geom1, geom2) - - Returns a geometry representing the intersection of `left_geom` and `right_geom`. - - :param geom1: Geometry - :type geom1: Column - :param geom2: Geometry - :type geom2: Column - :rtype: Column - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'p1': 'POLYGON ((0 0, 0 3, 3 3, 3 0))', 'p2': 'POLYGON ((2 2, 2 4, 4 4, 4 2))'}]) - df.select(st_intersection(col('p1'), col('p2'))).show(1, False) - +-----------------------------------+ - |st_intersection(p1, p2) | - +-----------------------------------+ - |POLYGON ((2 2, 3 2, 3 3, 2 3, 2 2))| - +-----------------------------------+ - - .. code-tab:: scala - - val df = List(("POLYGON ((0 0, 0 3, 3 3, 3 0))", "POLYGON ((2 2, 2 4, 4 4, 4 2))")).toDF("p1", "p2") - df.select(st_intersection(col("p1"), col("p2"))).show(false) - +-----------------------------------+ - |st_intersection(p1, p2) | - +-----------------------------------+ - |POLYGON ((2 2, 3 2, 3 3, 2 3, 2 2))| - +-----------------------------------+ - - .. code-tab:: sql - - SELECT st_intersection("POLYGON ((0 0, 0 3, 3 3, 3 0))", "POLYGON ((2 2, 2 4, 4 4, 4 2))") - +-----------------------------------+ - |st_intersection(p1, p2) | - +-----------------------------------+ - |POLYGON ((2 2, 3 2, 3 3, 2 3, 2 2))| - +-----------------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(p1 = "POLYGON ((0 0, 0 3, 3 3, 3 0))", p2 = "POLYGON ((2 2, 2 4, 4 4, 4 2))")) - showDF(select(df, st_intersection(column("p1"), column("p2"))), truncate=F) - +-----------------------------------+ - |st_intersection(p1, p2) | - +-----------------------------------+ - |POLYGON ((2 2, 3 2, 3 3, 2 3, 2 2))| - +-----------------------------------+ - - -st_isvalid -********** - -.. function:: st_isvalid(col) - - Returns `true` if the geometry is valid. - - :param col: Geometry - :type col: Column - :rtype: Column: BooleanType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}]) - df.select(st_isvalid('wkt')).show() - +---------------+ - |st_isvalid(wkt)| - +---------------+ - | true| - +---------------+ - - df = spark.createDataFrame([{ - 'wkt': 'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0), (15 15, 15 20, 20 20, 20 15, 15 15))' - }]) - df.select(st_isvalid('wkt')).show() - +---------------+ - |st_isvalid(wkt)| - +---------------+ - | false| - +---------------+ - - .. code-tab:: scala - - val df = List(("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")).toDF("wkt") - df.select(st_isvalid(col("wkt"))).show() - +---------------+ - |st_isvalid(wkt)| - +---------------+ - | true| - +---------------+ - - val df = List(("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0), (15 15, 15 20, 20 20, 20 15, 15 15))")).toDF("wkt") - df.select(st_isvalid(col("wkt"))).show() - +---------------+ - |st_isvalid(wkt)| - +---------------+ - | false| - +---------------+ - - .. code-tab:: sql - - SELECT st_isvalid("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))") - +---------------+ - |st_isvalid(wkt)| - +---------------+ - | true| - +---------------+ - - SELECT st_isvalid("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0), (15 15, 15 20, 20 20, 20 15, 15 15))") - +---------------+ - |st_isvalid(wkt)| - +---------------+ - | false| - +---------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")) - showDF(select(df, st_isvalid(column("wkt"))), truncate=F) - +---------------+ - |st_isvalid(wkt)| - +---------------+ - | true| - +---------------+ - - df <- createDataFrame(data.frame(wkt = "POLYGON((0 0, 10 0, 10 10, 0 10, 0 0), (15 15, 15 20, 20 20, 20 15, 15 15))")) - showDF(select(df, st_isvalid(column("wkt"))), truncate=F) - +---------------+ - |st_isvalid(wkt)| - +---------------+ - | false| - +---------------+ - -.. note:: Validity assertions will be dependent on the chosen geometry API. - The assertions used in the ESRI geometry API (JTS is the default) follow the definitions in the - "Simple feature access - Part 1" document (OGC 06-103r4) for each geometry type. - - -st_length -************ - -.. function:: st_length(col) - - Compute the length of a geometry. - - :param col: Geometry - :type col: Column - :rtype: Column: DoubleType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}]) - df.select(st_length('wkt')).show() - +-----------------+ - | st_length(wkt)| - +-----------------+ - |96.34413615167959| - +-----------------+ - - .. code-tab:: scala - - val df = List(("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")).toDF("wkt") - df.select(st_length(col("wkt"))).show() - +-----------------+ - | st_length(wkt)| - +-----------------+ - |96.34413615167959| - +-----------------+ - - .. code-tab:: sql - - SELECT st_length("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))") - +-----------------+ - | st_length(wkt)| - +-----------------+ - |96.34413615167959| - +-----------------+ - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")) - showDF(select(df, st_length(column("wkt")))) - +-----------------+ - | st_length(wkt)| - +-----------------+ - |96.34413615167959| - +-----------------+ - - -.. note:: Results of this function are always expressed in the original units of the input geometry. - -.. note:: Alias for :ref:`st_perimeter`. - - - -st_numpoints -************ - -.. function:: st_numpoints(col) - - Returns the number of points in `geom`. - - :param col: Geometry - :type col: Column - :rtype: Column: IntegerType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}]) - df.select(st_numpoints('wkt')).show() - +-----------------+ - |st_numpoints(wkt)| - +-----------------+ - | 5| - +-----------------+ - - .. code-tab:: scala - - val df = List(("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")).toDF("wkt") - df.select(st_numpoints(col("wkt"))).show() - +-----------------+ - |st_numpoints(wkt)| - +-----------------+ - | 5| - +-----------------+ - - .. code-tab:: sql - - SELECT st_numpoints("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))") - +-----------------+ - |st_numpoints(wkt)| - +-----------------+ - | 5| - +-----------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")) - showDF(select(df, st_numpoints(column("wkt")))) - +-----------------+ - |st_numpoints(wkt)| - +-----------------+ - | 5| - +-----------------+ - -st_perimeter -************ - -.. function:: st_perimeter(col) - - Compute the perimeter length of a geometry. - - :param col: Geometry - :type col: Column - :rtype: Column: DoubleType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}]) - df.select(st_perimeter('wkt')).show() - +-----------------+ - |st_perimeter(wkt)| - +-----------------+ - |96.34413615167959| - +-----------------+ - - .. code-tab:: scala - - val df = List(("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")).toDF("wkt") - df.select(st_perimeter(col("wkt"))).show() - +-----------------+ - |st_perimeter(wkt)| - +-----------------+ - |96.34413615167959| - +-----------------+ - - .. code-tab:: sql - - SELECT st_perimeter("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))") - +-----------------+ - |st_perimeter(wkt)| - +-----------------+ - |96.34413615167959| - +-----------------+ - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")) - showDF(select(df, st_perimeter(column("wkt")))) - +-----------------+ - |st_perimeter(wkt)| - +-----------------+ - |96.34413615167959| - +-----------------+ - - -.. note:: Results of this function are always expressed in the original units of the input geometry. - -.. note:: Alias for :ref:`st_length`. - - -st_rotate -********* - -.. function:: st_rotate(geom, td) - - Rotates `geom` using the rotational factor `td`. - - :param geom: Geometry - :type geom: Column - :param td: Rotation (in radians) - :type td: Column (DoubleType) - :rtype: Column - - :example: - -.. tabs:: - .. code-tab:: py - - from math import pi - df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}]) - df.select(st_rotate('wkt', lit(pi))).show(1, False) - +-------------------------------------------------------+ - |st_rotate(wkt, 3.141592653589793) | - +-------------------------------------------------------+ - |POLYGON ((-30 -10, -40 -40, -20 -40, -10 -20, -30 -10))| - +-------------------------------------------------------+ - - .. code-tab:: scala - - import math.Pi - val df = List(("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")).toDF("wkt") - df.select(st_rotate(col("wkt"), lit(Pi))).show(false) - +-------------------------------------------------------+ - |st_rotate(wkt, 3.141592653589793) | - +-------------------------------------------------------+ - |POLYGON ((-30 -10, -40 -40, -20 -40, -10 -20, -30 -10))| - +-------------------------------------------------------+ - - .. code-tab:: sql - - SELECT st_rotate("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))", pi()) - +-------------------------------------------------------+ - |st_rotate(wkt, 3.141592653589793) | - +-------------------------------------------------------+ - |POLYGON ((-30 -10, -40 -40, -20 -40, -10 -20, -30 -10))| - +-------------------------------------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")) - showDF(select(df, st_rotate(column("wkt"), lit(pi))), truncate=F) - +-------------------------------------------------------+ - |st_rotate(wkt, 3.141592653589793) | - +-------------------------------------------------------+ - |POLYGON ((-30 -10, -40 -40, -20 -40, -10 -20, -30 -10))| - +-------------------------------------------------------+ - - - -st_scale -******** - -.. function:: st_scale(geom, xd, yd) - - Scales `geom` using the scaling factors `xd` and `yd`. - - :param geom: Geometry - :type geom: Column - :param xd: Scale factor in the x-direction - :type xd: Column (DoubleType) - :param yd: Scale factor in the y-direction - :type yd: Column (DoubleType) - :rtype: Column - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}]) - df.select(st_scale('wkt', lit(0.5), lit(2))).show(1, False) - +--------------------------------------------+ - |st_scale(wkt, 0.5, 2) | - +--------------------------------------------+ - |POLYGON ((15 20, 20 80, 10 80, 5 40, 15 20))| - +--------------------------------------------+ - - .. code-tab:: scala - - val df = List(("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")).toDF("wkt") - df.select(st_scale(col("wkt"), lit(0.5), lit(2.0))).show(false) - +--------------------------------------------+ - |st_scale(wkt, 0.5, 2) | - +--------------------------------------------+ - |POLYGON ((15 20, 20 80, 10 80, 5 40, 15 20))| - +--------------------------------------------+ - - .. code-tab:: sql - - SELECT st_scale("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))", 0.5d, 2.0d) - +--------------------------------------------+ - |st_scale(wkt, 0.5, 2) | - +--------------------------------------------+ - |POLYGON ((15 20, 20 80, 10 80, 5 40, 15 20))| - +--------------------------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")) - showDF(select(df, st_scale(column('wkt'), lit(0.5), lit(2))), truncate=F) - +--------------------------------------------+ - |st_scale(wkt, 0.5, 2) | - +--------------------------------------------+ - |POLYGON ((15 20, 20 80, 10 80, 5 40, 15 20))| - +--------------------------------------------+ - - -st_setsrid -********** - -.. function:: st_setsrid(geom, srid) - - Sets the Coordinate Reference System well-known identifier (SRID) for `geom`. - - :param geom: Geometry - :type geom: Column - :param srid: The spatial reference identifier of `geom`, expressed as an integer, e.g. `4326` for EPSG:4326 / WGS84 - :type srid: Column (IntegerType) - :rtype: Column - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'MULTIPOINT ((10 40), (40 30), (20 20), (30 10))'}]) - df.select(st_setsrid(st_geomfromwkt('wkt'), lit(4326))).show(1) - +---------------------------------+ - |st_setsrid(convert_to(wkt), 4326)| - +---------------------------------+ - | {2, 4326, [[[10.0...| - +---------------------------------+ - - .. code-tab:: scala - - val df = List("MULTIPOINT ((10 40), (40 30), (20 20), (30 10))").toDF("wkt") - df.select(st_setsrid(st_geomfromwkt(col("wkt")), lit(4326))).show - +---------------------------------+ - |st_setsrid(convert_to(wkt), 4326)| - +---------------------------------+ - | {2, 4326, [[[10.0...| - +---------------------------------+ - - .. code-tab:: sql - - select st_setsrid(st_geomfromwkt("MULTIPOINT ((10 40), (40 30), (20 20), (30 10))"), 4326) - +---------------------------------+ - |st_setsrid(convert_to(wkt), 4326)| - +---------------------------------+ - | {2, 4326, [[[10.0...| - +---------------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "MULTIPOINT ((10 40), (40 30), (20 20), (30 10))")) - showDF(select(df, st_setsrid(st_geomfromwkt(column("wkt")), lit(4326L)))) - +---------------------------------+ - |st_setsrid(convert_to(wkt), 4326)| - +---------------------------------+ - | {2, 4326, [[[10.0...| - +---------------------------------+ - -.. note:: - ST_SetSRID does not transform the coordinates of `geom`, - rather it tells Mosaic the SRID in which the current coordinates are expressed. - ST_SetSRID can only operate on geometries encoded in GeoJSON or the Mosaic internal format. - -st_simplify -*********** - -.. function:: st_simplify(geom, tol) - - Returns the simplified geometry. - - :param geom: Geometry - :type geom: Column - :param tol: Tolerance - :type tol: Column - :rtype: Column: Geometry - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'LINESTRING (0 1, 1 2, 2 1, 3 0)'}]) - df.select(st_simplify('wkt', 1.0)).show() - +----------------------------+ - | st_simplify(wkt, 1.0) | - +----------------------------+ - | LINESTRING (0 1, 1 2, 3 0) | - +----------------------------+ - - .. code-tab:: scala - - df = List(("LINESTRING (0 1, 1 2, 2 1, 3 0)")).toDF("wkt") - df.select(st_simplify('wkt', 1.0)).show() - +----------------------------+ - | st_simplify(wkt, 1.0) | - +----------------------------+ - | LINESTRING (0 1, 1 2, 3 0) | - +----------------------------+ - - .. code-tab:: sql - - SELECT st_simplify("LINESTRING (0 1, 1 2, 2 1, 3 0)", 1.0) - +----------------------------+ - | st_simplify(wkt, 1.0) | - +----------------------------+ - | LINESTRING (0 1, 1 2, 3 0) | - +----------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "LINESTRING (0 1, 1 2, 2 1, 3 0)") - showDF(select(df, st_simplify(column("wkt"), 1.0)), truncate=F) - +----------------------------+ - | st_simplify(wkt, 1.0) | - +----------------------------+ - | LINESTRING (0 1, 1 2, 3 0) | - +----------------------------+ - -.. note:: - The specified tolerance will be ignored by the ESRI geometry API. - -st_srid -******* - -.. function:: st_srid(geom) - - Looks up the Coordinate Reference System well-known identifier (SRID) for `geom`. - - :param geom: Geometry - :type geom: Column - :rtype: Column - - :example: - -.. tabs:: - .. code-tab:: py - - json_geom = '{"type":"MultiPoint","coordinates":[[10,40],[40,30],[20,20],[30,10]],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}}' - df = spark.createDataFrame([{'json': json_geom}]) - df.select(st_srid(as_json('json'))).show(1) - +----------------------+ - |st_srid(as_json(json))| - +----------------------+ - | 4326| - +----------------------+ - - .. code-tab:: scala - - val df = - List("""{"type":"MultiPoint","coordinates":[[10,40],[40,30],[20,20],[30,10]],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}}""") - .toDF("json") - df.select(st_srid(as_json(col("json")))).show(1) - +----------------------+ - |st_srid(as_json(json))| - +----------------------+ - | 4326| - +----------------------+ - - .. code-tab:: sql - - select st_srid(as_json('{"type":"MultiPoint","coordinates":[[10,40],[40,30],[20,20],[30,10]],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}}')) - +------------+ - |st_srid(...)| - +------------+ - |4326 | - +------------+ - - .. code-tab:: r R - - json_geom <- '{"type":"MultiPoint","coordinates":[[10,40],[40,30],[20,20],[30,10]],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}}' - df <- createDataFrame(data.frame(json=json_geom)) - showDF(select(df, st_srid(as_json(column('json'))))) - +------------+ - |st_srid(...)| - +------------+ - |4326 | - +------------+ - -.. note:: - ST_SRID can only operate on geometries encoded in GeoJSON or the Mosaic internal format. - - -st_transform -************ - -.. function:: st_transform(geom, srid) - - Transforms the horizontal (XY) coordinates of `geom` from the current reference system to that described by `srid`. - - :param geom: Geometry - :type geom: Column - :param srid: Target spatial reference system for `geom`, expressed as an integer, e.g. `3857` for EPSG:3857 / Pseudo-Mercator - :type srid: Column (IntegerType) - :rtype: Column - - :example: - -.. tabs:: - .. code-tab:: py - - df = ( - spark.createDataFrame([{'wkt': 'MULTIPOINT ((10 40), (40 30), (20 20), (30 10))'}]) - .withColumn('geom', st_setsrid(st_geomfromwkt('wkt'), lit(4326))) - ) - df.select(st_astext(st_transform('geom', lit(3857)))).show(1, False) - +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |convert_to(st_transform(geom, 3857)) | - +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |MULTIPOINT ((1113194.9079327357 4865942.279503176), (4452779.631730943 3503549.843504374), (2226389.8158654715 2273030.926987689), (3339584.723798207 1118889.9748579597))| - +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = List("MULTIPOINT ((10 40), (40 30), (20 20), (30 10))").toDF("wkt") - .withColumn("geom", st_setsrid(st_geomfromwkt(col("wkt")), lit(4326))) - df.select(st_astext(st_transform(col("geom"), lit(3857)))).show(1, false) - +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |convert_to(st_transform(geom, 3857)) | - +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |MULTIPOINT ((1113194.9079327357 4865942.279503176), (4452779.631730943 3503549.843504374), (2226389.8158654715 2273030.926987689), (3339584.723798207 1118889.9748579597))| - +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: sql - - select st_astext(st_transform(st_setsrid(st_geomfromwkt("MULTIPOINT ((10 40), (40 30), (20 20), (30 10))"), 4326), 3857)) - +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |convert_to(st_transform(geom, 3857)) | - +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |MULTIPOINT ((1113194.9079327357 4865942.279503176), (4452779.631730943 3503549.843504374), (2226389.8158654715 2273030.926987689), (3339584.723798207 1118889.9748579597))| - +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "MULTIPOINT ((10 40), (40 30), (20 20), (30 10))")) - df <- withColumn(df, 'geom', st_setsrid(st_geomfromwkt(column('wkt')), lit(4326L))) - >>> - showDF(select(df, st_astext(st_transform(column('geom'), lit(3857L)))), truncate=F) - +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |convert_to(st_transform(geom, 3857)) | - +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - |MULTIPOINT ((1113194.9079327357 4865942.279503176), (4452779.631730943 3503549.843504374), (2226389.8158654715 2273030.926987689), (3339584.723798207 1118889.9748579597))| - +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - -.. note:: - If `geom` does not have an associated SRID, use ST_SetSRID to set this before calling ST_Transform. - - - -st_translate -************ - -.. function:: st_translate(geom, xd, yd) - - Translates `geom` to a new location using the distance parameters `xd` and `yd`. - - :param geom: Geometry - :type geom: Column - :param xd: Offset in the x-direction - :type xd: Column (DoubleType) - :param yd: Offset in the y-direction - :type yd: Column (DoubleType) - :rtype: Column - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'MULTIPOINT ((10 40), (40 30), (20 20), (30 10))'}]) - df.select(st_translate('wkt', lit(10), lit(-5))).show(1, False) - +----------------------------------------------+ - |st_translate(wkt, 10, -5) | - +----------------------------------------------+ - |MULTIPOINT ((20 35), (50 25), (30 15), (40 5))| - +----------------------------------------------+ - - .. code-tab:: scala - - val df = List(("MULTIPOINT ((10 40), (40 30), (20 20), (30 10))")).toDF("wkt") - df.select(st_translate(col("wkt"), lit(10d), lit(-5d))).show(false) - +----------------------------------------------+ - |st_translate(wkt, 10, -5) | - +----------------------------------------------+ - |MULTIPOINT ((20 35), (50 25), (30 15), (40 5))| - +----------------------------------------------+ - - .. code-tab:: sql - - SELECT st_translate("MULTIPOINT ((10 40), (40 30), (20 20), (30 10))", 10d, -5d) - +----------------------------------------------+ - |st_translate(wkt, 10, -5) | - +----------------------------------------------+ - |MULTIPOINT ((20 35), (50 25), (30 15), (40 5))| - +----------------------------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "MULTIPOINT ((10 40), (40 30), (20 20), (30 10))")) - showDF(select(df, st_translate(column('wkt'), lit(10), lit(-5)))) - +----------------------------------------------+ - |st_translate(wkt, 10, -5) | - +----------------------------------------------+ - |MULTIPOINT ((20 35), (50 25), (30 15), (40 5))| - +----------------------------------------------+ - -st_union -******** - -.. function:: st_union(left_geom, right_geom) - - Returns the point set union of the input geometries. - - :param left_geom: Geometry - :type left_geom: Column - :param right_geom: Geometry - :type right_geom: Column - :rtype: Column: Geometry - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'left': 'POLYGON ((10 10, 20 10, 20 20, 10 20, 10 10))', 'right': 'POLYGON ((15 15, 25 15, 25 25, 15 25, 15 15))'}]) - df.select(st_union(col('left'), col('right'))).show() - +-------------------------------------------------------------------------+ - | st_union(left, right) | - +-------------------------------------------------------------------------+ - |POLYGON ((20 15, 20 10, 10 10, 10 20, 15 20, 15 25, 25 25, 25 15, 20 15))| - +-------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = List(("POLYGON ((10 10, 20 10, 20 20, 10 20, 10 10))", "POLYGON ((15 15, 25 15, 25 25, 15 25, 15 15))")).toDF("left", "right") - df.select(st_union(col('left'), col('right'))).show() - +-------------------------------------------------------------------------+ - | st_union(left, right) | - +-------------------------------------------------------------------------+ - |POLYGON ((20 15, 20 10, 10 10, 10 20, 15 20, 15 25, 25 25, 25 15, 20 15))| - +-------------------------------------------------------------------------+ - - .. code-tab:: sql - - SELECT st_union("POLYGON ((10 10, 20 10, 20 20, 10 20, 10 10))", "POLYGON ((15 15, 25 15, 25 25, 15 25, 15 15))") - +-------------------------------------------------------------------------+ - | st_union(left, right) | - +-------------------------------------------------------------------------+ - |POLYGON ((20 15, 20 10, 10 10, 10 20, 15 20, 15 25, 25 25, 25 15, 20 15))| - +-------------------------------------------------------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(p1 = "POLYGON ((10 10, 20 10, 20 20, 10 20, 10 10))", p2 = "POLYGON ((15 15, 25 15, 25 25, 15 25, 15 15))")) - showDF(select(df, st_union(column("p1"), column("p2"))), truncate=F) - +-------------------------------------------------------------------------+ - | st_union(left, right) | - +-------------------------------------------------------------------------+ - |POLYGON ((20 15, 20 10, 10 10, 10 20, 15 20, 15 25, 25 25, 25 15, 20 15))| - +-------------------------------------------------------------------------+ - -st_unaryunion -************* - -.. function:: st_unaryunion(col) - - Returns a geometry that represents the point set union of the given geometry - - :param col: Geometry - :type col: Column - :rtype: Column: Geometry - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'MULTIPOLYGON (((10 10, 20 10, 20 20, 10 20, 10 10)), ((15 15, 25 15, 25 25, 15 25, 15 15)))'}]) - df.select(st_unaryunion('wkt')).show() - +-------------------------------------------------------------------------+ - | st_unaryunion(wkt, 2.0) | - +-------------------------------------------------------------------------+ - |POLYGON ((20 15, 20 10, 10 10, 10 20, 15 20, 15 25, 25 25, 25 15, 20 15))| - +-------------------------------------------------------------------------+ - - .. code-tab:: scala - - val df = List(("MULTIPOLYGON (((10 10, 20 10, 20 20, 10 20, 10 10)), ((15 15, 25 15, 25 25, 15 25, 15 15)))")).toDF("wkt") - df.select(st_unaryunion(col("wkt"))).show() - +-------------------------------------------------------------------------+ - | st_unaryunion(wkt, 2.0) | - +-------------------------------------------------------------------------+ - |POLYGON ((20 15, 20 10, 10 10, 10 20, 15 20, 15 25, 25 25, 25 15, 20 15))| - +-------------------------------------------------------------------------+ - - .. code-tab:: sql - - SELECT st_unaryunion("MULTIPOLYGON (((10 10, 20 10, 20 20, 10 20, 10 10)), ((15 15, 25 15, 25 25, 15 25, 15 15)))") - +-------------------------------------------------------------------------+ - | st_unaryunion(wkt, 2.0) | - +-------------------------------------------------------------------------+ - |POLYGON ((20 15, 20 10, 10 10, 10 20, 15 20, 15 25, 25 25, 25 15, 20 15))| - +-------------------------------------------------------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "MULTIPOLYGON (((10 10, 20 10, 20 20, 10 20, 10 10)), ((15 15, 25 15, 25 25, 15 25, 15 15)))") - showDF(select(df, st_unaryunion(column("wkt"))), truncate=F) - +-------------------------------------------------------------------------+ - | st_unaryunion(wkt, 2.0) | - +-------------------------------------------------------------------------+ - |POLYGON ((20 15, 20 10, 10 10, 10 20, 15 20, 15 25, 25 25, 25 15, 20 15))| - +-------------------------------------------------------------------------+ - -st_x -**** - -.. function:: st_x(col) - - Returns the x coordinate of the input geometry. - - :param col: Geometry - :type col: Column - :rtype: Column: DoubleType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'POINT (30 10)'}]) - df.select(st_x('wkt')).show() - +-----------------+ - |st_x(wkt) | - +-----------------+ - | 30.0| - +-----------------+ - - .. code-tab:: scala - - val df = List(("POINT (30 10)")).toDF("wkt") - df.select(st_x(col("wkt"))).show() - +-----------------+ - |st_x(wkt) | - +-----------------+ - | 30.0| - +-----------------+ - - .. code-tab:: sql - - SELECT st_x("POINT (30 10)") - +-----------------+ - |st_x(wkt) | - +-----------------+ - | 30.0| - +-----------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "POINT (30 10)")) - showDF(select(df, st_x(column("wkt"))), truncate=F) - +-----------------+ - |st_x(wkt) | - +-----------------+ - | 30.0| - +-----------------+ - -st_xmax -******* - -.. function:: st_xmax(col) - - Returns the largest x coordinate in the input geometry. - - :param col: Geometry - :type col: Column - :rtype: Column: DoubleType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}]) - df.select(st_xmax('wkt')).show() - +-----------------+ - |st_minmaxxyz(wkt)| - +-----------------+ - | 40.0| - +-----------------+ - - .. code-tab:: scala - - val df = List(("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")).toDF("wkt") - df.select(st_xmax(col("wkt"))).show() - +-----------------+ - |st_minmaxxyz(wkt)| - +-----------------+ - | 40.0| - +-----------------+ - - .. code-tab:: sql - - SELECT st_xmax("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))") - +-----------------+ - |st_minmaxxyz(wkt)| - +-----------------+ - | 40.0| - +-----------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")) - showDF(select(df, st_xmax(column("wkt"))), truncate=F) - +-----------------+ - |st_minmaxxyz(wkt)| - +-----------------+ - | 40.0| - +-----------------+ - - -st_xmin -******* - -.. function:: st_xmin(col) - - Returns the smallest x coordinate in the input geometry. - - :param col: Geometry - :type col: Column - :rtype: Column: DoubleType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}]) - df.select(st_xmin('wkt')).show() - +-----------------+ - |st_minmaxxyz(wkt)| - +-----------------+ - | 10.0| - +-----------------+ - - .. code-tab:: scala - - val df = List(("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")).toDF("wkt") - df.select(st_xmin(col("wkt"))).show() - +-----------------+ - |st_minmaxxyz(wkt)| - +-----------------+ - | 10.0| - +-----------------+ - - .. code-tab:: sql - - SELECT st_xmin("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))") - +-----------------+ - |st_minmaxxyz(wkt)| - +-----------------+ - | 10.0| - +-----------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")) - showDF(select(df, st_xmin(column("wkt"))), truncate=F) - +-----------------+ - |st_minmaxxyz(wkt)| - +-----------------+ - | 10.0| - +-----------------+ - -st_y -**** -.. function:: st_y(col) - - Returns the y coordinate of the input geometry. - - :param col: Geometry - :type col: Column - :rtype: Column: DoubleType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'POINT (30 10)'}]) - df.select(st_y('wkt')).show() - +-----------------+ - |st_y(wkt) | - +-----------------+ - | 10.0| - +-----------------+ - - .. code-tab:: scala - - val df = List(("POINT (30 10)")).toDF("wkt") - df.select(st_y(col("wkt"))).show() - +-----------------+ - |st_y(wkt) | - +-----------------+ - | 10.0| - +-----------------+ - - .. code-tab:: sql - - SELECT st_y("POINT (30 10)") - +-----------------+ - |st_y(wkt) | - +-----------------+ - | 10.0| - +-----------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "POINT (30 10)")) - showDF(select(df, st_y(column("wkt"))), truncate=F) - +-----------------+ - |st_y(wkt) | - +-----------------+ - | 10.0| - +-----------------+ - -st_ymax -******* - -.. function:: st_ymax(col) - - Returns the largest y coordinate in the input geometry. - - :param col: Geometry - :type col: Column - :rtype: Column: DoubleType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}]) - df.select(st_ymax('wkt')).show() - +-----------------+ - |st_minmaxxyz(wkt)| - +-----------------+ - | 40.0| - +-----------------+ - - .. code-tab:: scala - - val df = List(("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")).toDF("wkt") - df.select(st_ymax(col("wkt"))).show() - +-----------------+ - |st_minmaxxyz(wkt)| - +-----------------+ - | 40.0| - +-----------------+ - - .. code-tab:: sql - - SELECT st_ymax("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))") - +-----------------+ - |st_minmaxxyz(wkt)| - +-----------------+ - | 40.0| - +-----------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")) - showDF(select(df, st_ymax(column("wkt"))), truncate=F) - +-----------------+ - |st_minmaxxyz(wkt)| - +-----------------+ - | 40.0| - +-----------------+ - - -st_ymin -******* - -.. function:: st_ymin(col) - - Returns the smallest y coordinate in the input geometry. - - :param col: Geometry - :type col: Column - :rtype: Column: DoubleType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}]) - df.select(st_ymin('wkt')).show() - +-----------------+ - |st_minmaxxyz(wkt)| - +-----------------+ - | 10.0| - +-----------------+ - - .. code-tab:: scala - - val df = List(("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")).toDF("wkt") - df.select(st_ymin(col("wkt"))).show() - +-----------------+ - |st_minmaxxyz(wkt)| - +-----------------+ - | 10.0| - +-----------------+ - - .. code-tab:: sql - - SELECT st_ymin("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))") - +-----------------+ - |st_minmaxxyz(wkt)| - +-----------------+ - | 10.0| - +-----------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")) - showDF(select(df, st_ymin(column("wkt"))), truncate=F) - +-----------------+ - |st_minmaxxyz(wkt)| - +-----------------+ - | 10.0| - +-----------------+ - - -st_zmax -******* - -.. function:: st_zmax(col) - - Returns the largest z coordinate in the input geometry. - - :param col: Geometry - :type col: Column - :rtype: Column: DoubleType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'POINT (30 10 20)'}]) - df.select(st_zmax('wkt')).show() - +-----------------+ - |st_minmaxxyz(wkt)| - +-----------------+ - | 20.0| - +-----------------+ - - .. code-tab:: scala - - val df = List(("POINT (30 10 20)")).toDF("wkt") - df.select(st_zmax(col("wkt"))).show() - +-----------------+ - |st_minmaxxyz(wkt)| - +-----------------+ - | 20.0| - +-----------------+ - - .. code-tab:: sql - - SELECT st_zmax("POINT (30 10 20)") - +-----------------+ - |st_minmaxxyz(wkt)| - +-----------------+ - | 20.0| - +-----------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "POINT (30 10 20)")) - showDF(select(df, st_zmax(column("wkt"))), truncate=F) - +-----------------+ - |st_minmaxxyz(wkt)| - +-----------------+ - | 20.0| - +-----------------+ - - - -st_zmin -******* - -.. function:: st_zmin(col) - - Returns the smallest z coordinate in the input geometry. - - :param col: Geometry - :type col: Column - :rtype: Column: DoubleType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'POINT (30 10 20)'}]) - df.select(st_zmin('wkt')).show() - +-----------------+ - |st_minmaxxyz(wkt)| - +-----------------+ - | 20.0| - +-----------------+ - - .. code-tab:: scala - - val df = List(("POINT (30 10 20)")).toDF("wkt") - df.select(st_zmin(col("wkt"))).show() - +-----------------+ - |st_minmaxxyz(wkt)| - +-----------------+ - | 20.0| - +-----------------+ - - .. code-tab:: sql - - SELECT st_zmin("POINT (30 10 20)") - +-----------------+ - |st_minmaxxyz(wkt)| - +-----------------+ - | 20.0| - +-----------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "POINT (30 10 20)")) - showDF(select(df, st_zmin(column("wkt"))), truncate=F) - +-----------------+ - |st_minmaxxyz(wkt)| - +-----------------+ - | 20.0| - +-----------------+ - - - diff --git a/v0.3.x/_sources/api/spatial-indexing.rst.txt b/v0.3.x/_sources/api/spatial-indexing.rst.txt deleted file mode 100644 index 3074668c5..000000000 --- a/v0.3.x/_sources/api/spatial-indexing.rst.txt +++ /dev/null @@ -1,1532 +0,0 @@ -===================== -Spatial grid indexing -===================== - -Spatial grid indexing is the process of mapping a geometry (or a point) to one or more cells (or cell ID) -from the selected spatial grid. - -The grid system can be specified by using the spark configuration `spark.databricks.labs.mosaic.index.system` -before enabling Mosaic. - -The valid values are: - * `H3` - Good all-rounder for any location on earth - * `BNG` - Local grid system Great Britain (EPSG:27700) - * `CUSTOM(minX,maxX,minY,maxY,splits,rootCellSizeX,rootCellSizeY)` - Can be used with any local or global CRS - * `minX`,`maxX`,`minY`,`maxY` can be positive or negative integers defining the grid bounds - * `splits` defines how many splits are applied to each cell for an increase in resolution step (usually 2 or 10) - * `rootCellSizeX`,`rootCellSizeY` define the size of the cells on resolution 0 - -Example - -.. tabs:: - .. code-tab:: py - - spark.conf.set("spark.databricks.labs.mosaic.index.system", "H3") # Default - # spark.conf.set("spark.databricks.labs.mosaic.index.system", "BNG") - # spark.conf.set("spark.databricks.labs.mosaic.index.system", "CUSTOM(-180,180,-90,90,2,30,30)") - - import mosaic as mos - mos.enable_mosaic(spark, dbutils) - - -grid_longlatascellid -******************** - -.. function:: grid_longlatascellid(lon, lat, resolution) - - Returns the `resolution` grid index associated with - the input `lon` and `lat` coordinates. - - :param lon: Longitude - :type lon: Column: DoubleType - :param lat: Latitude - :type lat: Column: DoubleType - :param resolution: Index resolution - :type resolution: Column: Integer - :rtype: Column: LongType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'lon': 30., 'lat': 10.}]) - df.select(grid_longlatascellid('lon', 'lat', lit(10))).show(1, False) - +----------------------------------+ - |grid_longlatascellid(lon, lat, 10)| - +----------------------------------+ - | 623385352048508927| - +----------------------------------+ - - .. code-tab:: scala - - val df = List((30.0, 10.0)).toDF("lon", "lat") - df.select(grid_longlatascellid(col("lon"), col("lat"), lit(10))).show() - +----------------------------------+ - |grid_longlatascellid(lon, lat, 10)| - +----------------------------------+ - | 623385352048508927| - +----------------------------------+ - - .. code-tab:: sql - - SELECT grid_longlatascellid(30d, 10d, 10) - +----------------------------------+ - |grid_longlatascellid(lon, lat, 10)| - +----------------------------------+ - | 623385352048508927| - +----------------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(lon = 30.0, lat = 10.0)) - showDF(select(df, grid_longlatascellid(column("lon"), column("lat"), lit(10L))), truncate=F) - +----------------------------------+ - |grid_longlatascellid(lon, lat, 10)| - +----------------------------------+ - | 623385352048508927| - +----------------------------------+ - -.. raw:: html - -
- - -.. figure:: ../images/grid_longlatascellid/h3.png - :figclass: doc-figure-float-left - - Fig 1. Point to grid cell in H3(9) - - -.. figure:: ../images/grid_longlatascellid/bng.png - :figclass: doc-figure-float-left - - Fig 2. Point to grid cell in BNG(4) - - -.. raw:: html - -
- - -grid_pointascellid -****************** - -.. function:: grid_pointascellid(geometry, resolution) - - Returns the `resolution` grid index associated - with the input point geometry `geometry`. - - :param geometry: Geometry - :type geometry: Column - :param resolution: Index resolution - :type resolution: Column: Integer - :rtype: Column: LongType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'lon': 30., 'lat': 10.}]) - df.select(grid_pointascellid(st_point('lon', 'lat'), lit(10))).show(1, False) - +------------------------------------------+ - |grid_pointascellid(st_point(lon, lat), 10)| - +------------------------------------------+ - |623385352048508927 | - +------------------------------------------+ - - .. code-tab:: scala - - val df = List((30.0, 10.0)).toDF("lon", "lat") - df.select(grid_pointascellid(st_point(col("lon"), col("lat")), lit(10))).show() - +------------------------------------------+ - |grid_pointascellid(st_point(lon, lat), 10)| - +------------------------------------------+ - |623385352048508927 | - +------------------------------------------+ - - .. code-tab:: sql - - SELECT grid_pointascellid(st_point(30d, 10d), 10) - +------------------------------------------+ - |grid_pointascellid(st_point(lon, lat), 10)| - +------------------------------------------+ - |623385352048508927 | - +------------------------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(lon = 30.0, lat = 10.0)) - showDF(select(df, grid_pointascellid(st_point(column("lon"), column("lat")), lit(10L))), truncate=F) - +------------------------------------------+ - |grid_pointascellid(st_point(lon, lat), 10)| - +------------------------------------------+ - |623385352048508927 | - +------------------------------------------+ - -.. raw:: html - -
- - -.. figure:: ../images/grid_longlatascellid/h3.png - :figclass: doc-figure-float-left - - Fig 1. Point to grid cell in H3(9) - - -.. figure:: ../images/grid_longlatascellid/bng.png - :figclass: doc-figure-float-left - - Fig 2. Point to grid cell in BNG(4) - - -.. raw:: html - -
- - - - -grid_polyfill -************* - -.. function:: grid_polyfill(geometry, resolution) - - Returns the set of grid indices of which centroid is contained in the input `geometry` at `resolution`. - - When using `H3 ` index system, this is equivalent to the - `H3 polyfill ` method - - :param geometry: Geometry - :type geometry: Column - :param resolution: Index resolution - :type resolution: Column: Integer - :rtype: Column: ArrayType[LongType] - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{ - 'wkt': 'MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))' - }]) - df.select(grid_polyfill('wkt', lit(0))).show(1, False) - +------------------------------------------------------------+ - |grid_polyfill(wkt, 0) | - +------------------------------------------------------------+ - |[577586652210266111, 578360708396220415, 577269992861466623]| - +------------------------------------------------------------+ - - .. code-tab:: scala - - val df = List(("MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))")).toDF("wkt") - df.select(grid_polyfill(col("wkt"), lit(0))).show(false) - +------------------------------------------------------------+ - |grid_polyfill(wkt, 0) | - +------------------------------------------------------------+ - |[577586652210266111, 578360708396220415, 577269992861466623]| - +------------------------------------------------------------+ - - .. code-tab:: sql - - SELECT grid_polyfill("MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))", 0) - +------------------------------------------------------------+ - |grid_polyfill(wkt, 0) | - +------------------------------------------------------------+ - |[577586652210266111, 578360708396220415, 577269992861466623]| - +------------------------------------------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))")) - showDF(select(df, grid_polyfill(column("wkt"), lit(0L))), truncate=F) - +------------------------------------------------------------+ - |grid_polyfill(wkt, 0) | - +------------------------------------------------------------+ - |[577586652210266111, 578360708396220415, 577269992861466623]| - +------------------------------------------------------------+ - -.. raw:: html - -
- - -.. figure:: ../images/grid_polyfill/h3.png - :figclass: doc-figure-float-left - - Fig 1. Polyfill of a polygon in H3(8) - - -.. figure:: ../images/grid_polyfill/bng.png - :figclass: doc-figure-float-left - - Fig 2. Polyfill of a polygon in BNG(4) - - -.. raw:: html - -
- - - -grid_boundaryaswkb -****************** - -.. function:: grid_boundaryaswkb(cellid) - - Returns the boundary of the grid cell as a WKB. - - :param cellid: Grid cell id - :type cellid: Column: Union(LongType, StringType) - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'cellid': 613177664827555839}]) - df.select(grid_boundaryaswkb("cellid").show(1, False) - +--------------------------+ - |grid_boundaryaswkb(cellid)| - +--------------------------+ - |[01 03 00 00 00 00 00 00..| - +--------------------------+ - - .. code-tab:: scala - - val df = List((613177664827555839)).toDF("cellid") - df.select(grid_boundaryaswkb(col("cellid")).show() - +--------------------------+ - |grid_boundaryaswkb(cellid)| - +--------------------------+ - |[01 03 00 00 00 00 00 00..| - +--------------------------+ - - .. code-tab:: sql - - SELECT grid_boundaryaswkb(613177664827555839) - +--------------------------+ - |grid_boundaryaswkb(cellid)| - +--------------------------+ - |[01 03 00 00 00 00 00 00..| - +--------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(cellid = 613177664827555839)) - showDF(select(df, grid_boundaryaswkb(column("cellid")), truncate=F) - +--------------------------+ - |grid_boundaryaswkb(cellid)| - +--------------------------+ - |[01 03 00 00 00 00 00 00..| - +--------------------------+ - - - -grid_boundary -****************** - -.. function:: grid_boundary(cellid, format) - - Returns the boundary of the grid cell as a geometry in specified format. - - :param cellid: Grid cell id - :type cellid: Column: Union(LongType, StringType) - :param format: Geometry format - :type format: Column: StringType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'cellid': 613177664827555839}]) - df.select(grid_boundary("cellid", "WKT").show(1, False) - +--------------------------+ - |grid_boundary(cellid, WKT)| - +--------------------------+ - | "POLYGON (( ..."| - +--------------------------+ - - .. code-tab:: scala - - val df = List((613177664827555839)).toDF("cellid") - df.select(grid_boundary(col("cellid"), lit("WKT").show() - +--------------------------+ - |grid_boundary(cellid, WKT)| - +--------------------------+ - | "POLYGON (( ..."| - +--------------------------+ - - .. code-tab:: sql - - SELECT grid_boundary(613177664827555839, "WKT") - +--------------------------+ - |grid_boundary(cellid, WKT)| - +--------------------------+ - | "POLYGON (( ..."| - +--------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(cellid = 613177664827555839)) - showDF(select(df, grid_boundary(column("cellid"), lit("WKT")), truncate=F) - +--------------------------+ - |grid_boundary(cellid, WKT)| - +--------------------------+ - | "POLYGON (( ..."| - +--------------------------+ - -grid_tessellate -*************** - -.. function:: grid_tessellate(geometry, resolution, keep_core_geometries) - - Cuts the original `geometry` into several pieces along the grid index borders at the specified `resolution`. - - Returns an array of Mosaic chips **covering** the input `geometry` at `resolution`. - - A Mosaic chip is a struct type composed of: - - - `is_core`: Identifies if the chip is fully contained within the geometry: Boolean - - - `index_id`: Index ID of the configured spatial indexing (default H3): Integer - - - `wkb`: Geometry in WKB format equal to the intersection of the index shape and the original `geometry`: Binary - - In contrast to :ref:`grid_tessellateexplode`, `grid_tessellate` does not explode the list of shapes. - - In contrast to :ref:`grid_polyfill`, `grid_tessellate` fully covers the original `geometry` even if the index centroid - falls outside of the original geometry. This makes it suitable to index lines as well. - - :param geometry: Geometry - :type geometry: Column - :param resolution: Index resolution - :type resolution: Column: Integer - :param keep_core_geometries: Whether to keep the core geometries or set them to null - :type keep_core_geometries: Column: Boolean - :rtype: Column: ArrayType[MosaicType] - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))'}]) - df.select(grid_tessellate('wkt', lit(0))).printSchema() - root - |-- grid_tessellate(wkt, 0): mosaic (nullable = true) - | |-- chips: array (nullable = true) - | | |-- element: mosaic_chip (containsNull = true) - | | | |-- is_core: boolean (nullable = true) - | | | |-- index_id: long (nullable = true) - | | | |-- wkb: binary (nullable = true) - - - df.select(grid_tessellate('wkt', lit(0))).show() - +-----------------------+ - |grid_tessellate(wkt, 0)| - +-----------------------+ - | {[{false, 5774810...| - +-----------------------+ - - .. code-tab:: scala - - val df = List(("MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))")).toDF("wkt") - df.select(grid_tessellate(col("wkt"), lit(0))).printSchema - root - |-- grid_tessellate(wkt, 0): mosaic (nullable = true) - | |-- chips: array (nullable = true) - | | |-- element: mosaic_chip (containsNull = true) - | | | |-- is_core: boolean (nullable = true) - | | | |-- index_id: long (nullable = true) - | | | |-- wkb: binary (nullable = true) - - df.select(grid_tessellate(col("wkt"), lit(0))).show() - +-----------------------+ - |grid_tessellate(wkt, 0)| - +-----------------------+ - | {[{false, 5774810...| - +-----------------------+ - - .. code-tab:: sql - - SELECT grid_tessellate("MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))", 0) - +-----------------------+ - |grid_tessellate(wkt, 0)| - +-----------------------+ - | {[{false, 5774810...| - +-----------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = "MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))")) - schema(select(df, grid_tessellate(column("wkt"), lit(0L)))) - root - |-- grid_tessellate(wkt, 0): mosaic (nullable = true) - | |-- chips: array (nullable = true) - | | |-- element: mosaic_chip (containsNull = true) - | | | |-- is_core: boolean (nullable = true) - | | | |-- index_id: long (nullable = true) - | | | |-- wkb: binary (nullable = true) - showDF(select(df, grid_tessellate(column("wkt"), lit(0L)))) - +-----------------------+ - |grid_tessellate(wkt, 0)| - +-----------------------+ - | {[{false, 5774810...| - +-----------------------+ - -.. raw:: html - -
- - -.. figure:: ../images/grid_tessellate/h3.png - :figclass: doc-figure-float-left - - Fig 1. Tessellation of a polygon in H3(8) - - -.. figure:: ../images/grid_tessellate/bng.png - :figclass: doc-figure-float-left - - Fig 2. Tessellation of a polygon in BNG(4) - - -.. raw:: html - -
- - - -grid_tessellateexplode -********************** - -.. function:: grid_tessellateexplode(geometry, resolution, keep_core_geometries) - - Cuts the original `geometry` into several pieces along the grid index borders at the specified `resolution`. - - Returns the set of Mosaic chips **covering** the input `geometry` at `resolution`. - - A Mosaic chip is a struct type composed of: - - - `is_core`: Identifies if the chip is fully contained within the geometry: Boolean - - - `index_id`: Index ID of the configured spatial indexing (default H3): Integer - - - `wkb`: Geometry in WKB format equal to the intersection of the index shape and the original `geometry`: Binary - - In contrast to :ref:`grid_tessellate`, `grid_tessellateexplode` generates one result row per chip. - - In contrast to :ref:`grid_polyfill`, `grid_tessellateexplode` fully covers the original `geometry` even if the index centroid - falls outside of the original geometry. This makes it suitable to index lines as well. - - :param geometry: Geometry - :type geometry: Column - :param resolution: Index resolution - :type resolution: Column: Integer - :param keep_core_geometries: Whether to keep the core geometries or set them to null - :type keep_core_geometries: Column: Boolean - :rtype: Column: MosaicType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'wkt': 'MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))'}]) - df.select(grid_tessellateexplode('wkt', lit(0))).show() - +-----------------------------------------------+ - |is_core| index_id| wkb| - +-------+------------------+--------------------+ - | false|577481099093999615|[01 03 00 00 00 0...| - | false|578044049047420927|[01 03 00 00 00 0...| - | false|578782920861286399|[01 03 00 00 00 0...| - | false|577023702256844799|[01 03 00 00 00 0...| - | false|577938495931154431|[01 03 00 00 00 0...| - | false|577586652210266111|[01 06 00 00 00 0...| - | false|577269992861466623|[01 03 00 00 00 0...| - | false|578360708396220415|[01 03 00 00 00 0...| - +-------+------------------+--------------------+ - - .. code-tab:: scala - - val df = List(("MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))")).toDF("wkt") - df.select(grid_tessellateexplode(col("wkt"), lit(0))).show() - +-----------------------------------------------+ - |is_core| index_id| wkb| - +-------+------------------+--------------------+ - | false|577481099093999615|[01 03 00 00 00 0...| - | false|578044049047420927|[01 03 00 00 00 0...| - | false|578782920861286399|[01 03 00 00 00 0...| - | false|577023702256844799|[01 03 00 00 00 0...| - | false|577938495931154431|[01 03 00 00 00 0...| - | false|577586652210266111|[01 06 00 00 00 0...| - | false|577269992861466623|[01 03 00 00 00 0...| - | false|578360708396220415|[01 03 00 00 00 0...| - +-------+------------------+--------------------+ - - .. code-tab:: sql - - SELECT grid_tessellateexplode("MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))", 0) - +-----------------------------------------------+ - |is_core| index_id| wkb| - +-------+------------------+--------------------+ - | false|577481099093999615|[01 03 00 00 00 0...| - | false|578044049047420927|[01 03 00 00 00 0...| - | false|578782920861286399|[01 03 00 00 00 0...| - | false|577023702256844799|[01 03 00 00 00 0...| - | false|577938495931154431|[01 03 00 00 00 0...| - | false|577586652210266111|[01 06 00 00 00 0...| - | false|577269992861466623|[01 03 00 00 00 0...| - | false|578360708396220415|[01 03 00 00 00 0...| - +-------+------------------+--------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(wkt = 'MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))')) - showDF(select(df, grid_tessellateexplode(column("wkt"), lit(0L)))) - +-----------------------------------------------+ - |is_core| index_id| wkb| - +-------+------------------+--------------------+ - | false|577481099093999615|[01 03 00 00 00 0...| - | false|578044049047420927|[01 03 00 00 00 0...| - | false|578782920861286399|[01 03 00 00 00 0...| - | false|577023702256844799|[01 03 00 00 00 0...| - | false|577938495931154431|[01 03 00 00 00 0...| - | false|577586652210266111|[01 06 00 00 00 0...| - | false|577269992861466623|[01 03 00 00 00 0...| - | false|578360708396220415|[01 03 00 00 00 0...| - +-------+------------------+--------------------+ - -.. raw:: html - -
- - -.. figure:: ../images/grid_tessellate/h3.png - :figclass: doc-figure-float-left - - Fig 1. Tessellation of a polygon in H3(8) - - -.. figure:: ../images/grid_tessellate/bng.png - :figclass: doc-figure-float-left - - Fig 2. Tessellation of a polygon in BNG(4) - - -.. raw:: html - -
- - -grid_cellarea -************* - -.. function:: grid_cellarea(cellid) - - Returns the area of a given cell in km^2. - - :param cellid: Grid cell ID - :type cellid: Column: Long - :rtype: Column: DoubleType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'grid_cellid': 613177664827555839}]) - df.withColumn(grid_cellarea('grid_cellid').alias("area")).show() - +------------------------------------+ - | grid_cellid| area| - +--------------------+---------------+ - | 613177664827555839| 0.78595419| - +--------------------+---------------+ - - .. code-tab:: scala - - val df = List((613177664827555839)).toDF("grid_cellid") - df.select(grid_cellarea('grid_cellid').alias("area")).show() - +------------------------------------+ - | grid_cellid| area| - +--------------------+---------------+ - | 613177664827555839| 0.78595419| - +--------------------+---------------+ - - .. code-tab:: sql - - SELECT grid_cellarea(613177664827555839) - +------------------------------------+ - | grid_cellid| area| - +--------------------+---------------+ - | 613177664827555839| 0.78595419| - +--------------------+---------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(grid_cellid = 613177664827555839)) - showDF(select(df, grid_cellarea(column("grid_cellid")))) - +------------------------------------+ - | grid_cellid| area| - +--------------------+---------------+ - | 613177664827555839| 0.78595419| - +--------------------+---------------+ - - - - -grid_cellkring -************** - -.. function:: grid_cellkring(cellid, k) - - Returns the k-ring of a given cell. - - :param cellid: Grid cell ID - :type cellid: Column: Long - :param k: K-ring size - :type k: Column: Integer - :rtype: Column: ArrayType(Long) - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'grid_cellid': 613177664827555839}]) - df.select(grid_cellkring('grid_cellid', lit(2)).alias("kring")).show() - +-------------------------------------------------------------------+ - | grid_cellid| kring| - +--------------------+----------------------------------------------+ - | 613177664827555839|[613177664827555839, 613177664825458687, ....]| - +--------------------+----------------------------------------------+ - - .. code-tab:: scala - - val df = List((613177664827555839)).toDF("grid_cellid") - df.select(grid_cellkring('grid_cellid', lit(2)).alias("kring")).show() - +-------------------------------------------------------------------+ - | grid_cellid| kring| - +--------------------+----------------------------------------------+ - | 613177664827555839|[613177664827555839, 613177664825458687, ....]| - +--------------------+----------------------------------------------+ - - .. code-tab:: sql - - SELECT grid_cellkring(613177664827555839, 2) - +-------------------------------------------------------------------+ - | grid_cellid| kring| - +--------------------+----------------------------------------------+ - | 613177664827555839|[613177664827555839, 613177664825458687, ....]| - +--------------------+----------------------------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(grid_cellid = 613177664827555839)) - showDF(select(df, grid_cellkring(column("grid_cellid"), lit(2L)))) - +-------------------------------------------------------------------+ - | grid_cellid| kring| - +--------------------+----------------------------------------------+ - | 613177664827555839|[613177664827555839, 613177664825458687, ....]| - +--------------------+----------------------------------------------+ - - -.. raw:: html - -
- - -.. figure:: ../images/grid_cellkring/h3.png - :figclass: doc-figure-float-left - - Fig 1. Cell based kring(2) in H3(8) - - -.. figure:: ../images/grid_cellkring/bng.png - :figclass: doc-figure-float-left - - Fig 2. Cell based kring(2) in BNG(4) - - -.. raw:: html - -
- - -grid_cellkringexplode -********************* - -.. function:: grid_cellkringexplode(cellid, k) - - Returns the k-ring of a given cell exploded. - - :param cellid: Grid cell ID - :type cellid: Column: Long - :param k: K-ring size - :type k: Column: Integer - :rtype: Column: Long - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'grid_cellid': 613177664827555839}]) - df.select(grid_cellkringexplode('grid_cellid', lit(2)).alias("kring")).show() - +------------------+ - | kring| - +------------------+ - |613177664827555839| - |613177664825458687| - |613177664831750143| - |613177664884178943| - | ...| - +------------------+ - - - .. code-tab:: scala - - val df = List((613177664827555839)).toDF("grid_cellid") - df.select(grid_cellkringexplode('grid_cellid', lit(2)).alias("kring")).show() - +------------------+ - | kring| - +------------------+ - |613177664827555839| - |613177664825458687| - |613177664831750143| - |613177664884178943| - | ...| - +------------------+ - - .. code-tab:: sql - - SELECT grid_cellkringexplode(613177664827555839, 2) - +------------------+ - | kring| - +------------------+ - |613177664827555839| - |613177664825458687| - |613177664831750143| - |613177664884178943| - | ...| - +------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(grid_cellid = 613177664827555839)) - showDF(select(df, grid_cellkringexplode(column("grid_cellid"), lit(2L)))) - +------------------+ - | kring| - +------------------+ - |613177664827555839| - |613177664825458687| - |613177664831750143| - |613177664884178943| - | ...| - +------------------+ - - -.. raw:: html - -
- - -.. figure:: ../images/grid_cellkring/h3.png - :figclass: doc-figure-float-left - - Fig 1. Cell based kring(2) in H3(8) - - -.. figure:: ../images/grid_cellkring/bng.png - :figclass: doc-figure-float-left - - Fig 2. Cell based kring(2) in BNG(4) - - -.. raw:: html - -
- -grid_cell_intersection -************** - -.. function:: grid_cell_intersection(left_chip, right_chip) - - Returns the chip representing the intersection of two chips based on the same grid cell - - :param left_chip: Chip - :type left_chip: Column: ChipType(LongType) - :param left_chip: Chip - :type left_chip: Column: ChipType(LongType) - :rtype: Column: ChipType(LongType) - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{"chip": {"is_core": False, "index_id": 590418571381702655, "wkb": ...}})]) - df.select(grid_cell_intersection("chip", "chip").alias("intersection")).show() - ---------------------------------------------------------+ - | intersection | - +--------------------------------------------------------+ - |{is_core: false, index_id: 590418571381702655, wkb: ...}| - +--------------------------------------------------------+ - - .. code-tab:: scala - - val df = List((...)).toDF("chip") - df.select(grid_cell_intersection("chip", "chip").alias("intersection")).show() - ---------------------------------------------------------+ - | intersection | - +--------------------------------------------------------+ - |{is_core: false, index_id: 590418571381702655, wkb: ...}| - +--------------------------------------------------------+ - - .. code-tab:: sql - - SELECT grid_cell_intersection({"is_core": False, "index_id": 590418571381702655, "wkb": ...}) - ---------------------------------------------------------+ - | intersection | - +--------------------------------------------------------+ - |{is_core: false, index_id: 590418571381702655, wkb: ...}| - +--------------------------------------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(...)) - showDF(select(df, grid_cell_intersection(column("chip")))) - ---------------------------------------------------------+ - | intersection | - +--------------------------------------------------------+ - |{is_core: false, index_id: 590418571381702655, wkb: ...}| - +--------------------------------------------------------+ - -grid_cell_union -************** - -.. function:: grid_cell_union(left_chip, right_chip) - - Returns the chip representing the union of two chips based on the same grid cell - - :param left_chip: Chip - :type left_chip: Column: ChipType(LongType) - :param left_chip: Chip - :type left_chip: Column: ChipType(LongType) - :rtype: Column: ChipType(LongType) - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{"chip": {"is_core": False, "index_id": 590418571381702655, "wkb": ...}})]) - df.select(grid_cell_union("chip", "chip").alias("union")).show() - ---------------------------------------------------------+ - | union | - +--------------------------------------------------------+ - |{is_core: false, index_id: 590418571381702655, wkb: ...}| - +--------------------------------------------------------+ - - .. code-tab:: scala - - val df = List((...)).toDF("chip") - df.select(grid_cell_union("chip", "chip").alias("union")).show() - ---------------------------------------------------------+ - | union | - +--------------------------------------------------------+ - |{is_core: false, index_id: 590418571381702655, wkb: ...}| - +--------------------------------------------------------+ - - .. code-tab:: sql - - SELECT grid_cell_union({"is_core": False, "index_id": 590418571381702655, "wkb": ...}) - ---------------------------------------------------------+ - | union | - +--------------------------------------------------------+ - |{is_core: false, index_id: 590418571381702655, wkb: ...}| - +--------------------------------------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(...)) - showDF(select(df, grid_cell_union(column("chip")))) - ---------------------------------------------------------+ - | union | - +--------------------------------------------------------+ - |{is_core: false, index_id: 590418571381702655, wkb: ...}| - +--------------------------------------------------------+ - - -grid_cellkloop -************** - -.. function:: grid_cellkloop(cellid, k) - - Returns the k loop (hollow ring) of a given cell. - - :param cellid: Grid cell ID - :type cellid: Column: Long - :param k: K-loop size - :type k: Column: Integer - :rtype: Column: ArrayType(Long) - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'grid_cellid': 613177664827555839}]) - df.select(grid_cellkloop('grid_cellid', lit(2)).alias("kloop")).show() - +-------------------------------------------------------------------+ - | grid_cellid| kloop| - +--------------------+----------------------------------------------+ - | 613177664827555839|[613177664827555839, 613177664825458687, ....]| - +--------------------+----------------------------------------------+ - - .. code-tab:: scala - - val df = List((613177664827555839)).toDF("grid_cellid") - df.select(grid_cellkloop('grid_cellid', lit(2)).alias("kloop")).show() - +-------------------------------------------------------------------+ - | grid_cellid| kloop| - +--------------------+----------------------------------------------+ - | 613177664827555839|[613177664827555839, 613177664825458687, ....]| - +--------------------+----------------------------------------------+ - - .. code-tab:: sql - - SELECT grid_cellkloop(613177664827555839, 2) - +-------------------------------------------------------------------+ - | grid_cellid| kloop| - +--------------------+----------------------------------------------+ - | 613177664827555839|[613177664827555839, 613177664825458687, ....]| - +--------------------+----------------------------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(grid_cellid = 613177664827555839)) - showDF(select(df, grid_cellkloop(column("grid_cellid"), lit(2L)))) - +-------------------------------------------------------------------+ - | grid_cellid| kloop| - +--------------------+----------------------------------------------+ - | 613177664827555839|[613177664827555839, 613177664825458687, ....]| - +--------------------+----------------------------------------------+ - - -.. raw:: html - -
- - -.. figure:: ../images/grid_cellkloop/h3.png - :figclass: doc-figure-float-left - - Fig 1. Cell based kring(2) in H3(8) - - -.. figure:: ../images/grid_cellkloop/bng.png - :figclass: doc-figure-float-left - - Fig 2. Cell based kring(2) in BNG(4) - - -.. raw:: html - -
- - -grid_cellkloopexplode -********************* - -.. function:: grid_cellkloopexplode(cellid, k) - - Returns the k loop (hollow ring) of a given cell exploded. - - :param cellid: Grid cell ID - :type cellid: Column: Long - :param k: K-loop size - :type k: Column: Integer - :rtype: Column: Long - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'grid_cellid': 613177664827555839}]) - df.select(grid_cellkloopexplode('grid_cellid', lit(2)).alias("kloop")).show() - +------------------+ - | kloop| - +------------------+ - |613177664827555839| - |613177664825458687| - |613177664831750143| - |613177664884178943| - | ...| - +------------------+ - - - .. code-tab:: scala - - val df = List((613177664827555839)).toDF("grid_cellid") - df.select(grid_cellkloopexplode('grid_cellid', lit(2)).alias("kloop")).show() - +------------------+ - | kloop| - +------------------+ - |613177664827555839| - |613177664825458687| - |613177664831750143| - |613177664884178943| - | ...| - +------------------+ - - .. code-tab:: sql - - SELECT grid_cellkloopexplode(613177664827555839, 2) - +------------------+ - | kloop| - +------------------+ - |613177664827555839| - |613177664825458687| - |613177664831750143| - |613177664884178943| - | ...| - +------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(grid_cellid = 613177664827555839)) - showDF(select(df, grid_cellkloopexplode(column("grid_cellid"), lit(2L)))) - +------------------+ - | kloop| - +------------------+ - |613177664827555839| - |613177664825458687| - |613177664831750143| - |613177664884178943| - | ...| - +------------------+ - - -.. raw:: html - -
- - -.. figure:: ../images/grid_cellkloop/h3.png - :figclass: doc-figure-float-left - - Fig 1. Cell based kring(2) in H3(8) - - -.. figure:: ../images/grid_cellkloop/bng.png - :figclass: doc-figure-float-left - - Fig 2. Cell based kring(2) in BNG(4) - - -.. raw:: html - -
- - - -grid_geometrykring -****************** - -.. function:: grid_geometrykring(geometry, resolution, k) - - Returns the k-ring of a given geometry respecting the boundary shape. - - :param geometry: Geometry to be used - :type geometry: Column - :param resolution: Resolution of the index used to calculate the k-ring - :type resolution: Column: Integer - :param k: K-ring size - :type k: Column: Integer - :rtype: Column: ArrayType(Long) - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'geometry': "MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))"}]) - df.select(grid_geometrykring('geometry', lit(8), lit(1)).alias("kring")).show() - +-------------------------------------------------------------------+ - | geometry| kring| - +--------------------+----------------------------------------------+ - | "MULTIPOLYGON(..."|[613177664827555839, 613177664825458687, ....]| - +--------------------+----------------------------------------------+ - - .. code-tab:: scala - - val df = List((613177664827555839)).toDF("geometry") - df.select(grid_geometrykring('geometry', lit(8), lit(1)).alias("kring")).show() - +-------------------------------------------------------------------+ - | geometry| kring| - +--------------------+----------------------------------------------+ - | "MULTIPOLYGON(..."|[613177664827555839, 613177664825458687, ....]| - +--------------------+----------------------------------------------+ - - .. code-tab:: sql - - SELECT grid_geometrykring('MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))', 8, 1) - +-------------------------------------------------------------------+ - | geometry| kring| - +--------------------+----------------------------------------------+ - | "MULTIPOLYGON(..."|[613177664827555839, 613177664825458687, ....]| - +--------------------+----------------------------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(geometry = 613177664827555839)) - showDF(select(df, grid_geometrykring('geometry', lit(8L), lit(1L)))) - +-------------------------------------------------------------------+ - | geometry| kring| - +--------------------+----------------------------------------------+ - | "MULTIPOLYGON(..."|[613177664827555839, 613177664825458687, ....]| - +--------------------+----------------------------------------------+ - - -.. raw:: html - -
- - -.. figure:: ../images/grid_geometrykring/h3.png - :figclass: doc-figure-float-left - - Fig 1. Geometry based kring(1) in H3(8) - - -.. figure:: ../images/grid_geometrykring/bng.png - :figclass: doc-figure-float-left - - Fig 2. Geometry based kring(1) in BNG(4) - - -.. raw:: html - -
- - -grid_geometrykringexplode -************************* - -.. function:: grid_geometrykringexplode(geometry, resolution, k) - - Returns the k-ring of a given geometry exploded. - - :param geometry: Geometry to be used - :type geometry: Column - :param resolution: Resolution of the index used to calculate the k-ring - :type resolution: Column: Integer - :param k: K-ring size - :type k: Column: Integer - :rtype: Column: Long - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'geometry': "MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))"}]) - df.select(grid_geometrykringexplode('geometry', lit(8), lit(2)).alias("kring")).show() - +------------------+ - | kring| - +------------------+ - |613177664827555839| - |613177664825458687| - |613177664831750143| - |613177664884178943| - | ...| - +------------------+ - - - .. code-tab:: scala - - val df = List(("MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))")).toDF("geometry") - df.select(grid_geometrykringexplode('geometry', lit(8), lit(2)).alias("kring")).show() - +------------------+ - | kring| - +------------------+ - |613177664827555839| - |613177664825458687| - |613177664831750143| - |613177664884178943| - | ...| - +------------------+ - - .. code-tab:: sql - - SELECT grid_geometrykringexplode("MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))", 8, 2) - +------------------+ - | kring| - +------------------+ - |613177664827555839| - |613177664825458687| - |613177664831750143| - |613177664884178943| - | ...| - +------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(geometry = "MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))")) - showDF(select(df, grid_cellkringexplode(column("geometry"), lit(8L), lit(2L)))) - +------------------+ - | kring| - +------------------+ - |613177664827555839| - |613177664825458687| - |613177664831750143| - |613177664884178943| - | ...| - +------------------+ - - -.. raw:: html - -
- - -.. figure:: ../images/grid_geometrykring/h3.png - :figclass: doc-figure-float-left - - Fig 1. Cell based kring(2) in H3(8) - - -.. figure:: ../images/grid_geometrykring/bng.png - :figclass: doc-figure-float-left - - Fig 2. Cell based kring(2) in BNG(4) - - -.. raw:: html - -
- - -grid_geometrykloop -****************** - -.. function:: grid_geometrykloop(geometry, resolution, k) - - Returns the k-loop (hollow ring) of a given geometry. - - :param geometry: Geometry to be used - :type geometry: Column - :param resolution: Resolution of the index used to calculate the k loop - :type resolution: Column: Integer - :param k: K-Loop size - :type k: Column: Integer - :rtype: Column: ArrayType(Long) - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'geometry': "MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))"}]) - df.select(grid_geometrykloop('geometry', lit(2)).alias("kloop")).show() - +-------------------------------------------------------------------+ - | geometry| kloop| - +--------------------+----------------------------------------------+ - | MULTIPOLYGON ((...|[613177664827555839, 613177664825458687, ....]| - +--------------------+----------------------------------------------+ - - .. code-tab:: scala - - val df = List(("MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))")).toDF("geometry") - df.select(grid_cellkloop('geometry', lit(2)).alias("kloop")).show() - +-------------------------------------------------------------------+ - | geometry| kloop| - +--------------------+----------------------------------------------+ - | MULTIPOLYGON ((...|[613177664827555839, 613177664825458687, ....]| - +--------------------+----------------------------------------------+ - - .. code-tab:: sql - - SELECT grid_cellkloop("MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))", 2) - +-------------------------------------------------------------------+ - | geometry| kloop| - +--------------------+----------------------------------------------+ - | MULTIPOLYGON ((...|[613177664827555839, 613177664825458687, ....]| - +--------------------+----------------------------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(geometry = "MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))")) - showDF(select(df, grid_cellkloop(column("geometry"), lit(2L)))) - +-------------------------------------------------------------------+ - | geometry| kloop| - +--------------------+----------------------------------------------+ - | MULTIPOLYGON ((...|[613177664827555839, 613177664825458687, ....]| - +--------------------+----------------------------------------------+ - - -.. raw:: html - -
- - -.. figure:: ../images/grid_geometrykloop/h3.png - :figclass: doc-figure-float-left - - Fig 1. Cell based kring(2) in H3(8) - - -.. figure:: ../images/grid_geometrykloop/bng.png - :figclass: doc-figure-float-left - - Fig 2. Cell based kring(2) in BNG(4) - - -.. raw:: html - -
- - -grid_geometrykloopexplode -************************* - -.. function:: grid_geometrykloopexplode(geometry, resolution, k) - - Returns the k loop (hollow ring) of a given geometry exploded. - - :param geometry: Geometry to be used - :type geometry: Column - :param resolution: Resolution of the index used to calculate the k loop - :type resolution: Column: Integer - :param k: K-loop size - :type k: Column: Integer - :rtype: Column: Long - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'geometry': "MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))"}]) - df.select(grid_geometrykloopexplode('geometry', lit(8), lit(2)).alias("kloop")).show() - +------------------+ - | kloop| - +------------------+ - |613177664827555839| - |613177664825458687| - |613177664831750143| - |613177664884178943| - | ...| - +------------------+ - - - .. code-tab:: scala - - val df = List(("MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))")).toDF("geometry") - df.select(grid_geometrykloopexplode('geometry', lit(8), lit(2)).alias("kloop")).show() - +------------------+ - | kloop| - +------------------+ - |613177664827555839| - |613177664825458687| - |613177664831750143| - |613177664884178943| - | ...| - +------------------+ - - .. code-tab:: sql - - SELECT grid_geometrykloopexplode("MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))", 8, 2) - +------------------+ - | kloop| - +------------------+ - |613177664827555839| - |613177664825458687| - |613177664831750143| - |613177664884178943| - | ...| - +------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(geometry = "MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))")) - showDF(select(df, grid_geometrykloopexplode(column("geometry"), lit(8L), lit(2L)))) - +------------------+ - | kloop| - +------------------+ - |613177664827555839| - |613177664825458687| - |613177664831750143| - |613177664884178943| - | ...| - +------------------+ - - -.. raw:: html - -
- - -.. figure:: ../images/grid_geometrykloop/h3.png - :figclass: doc-figure-float-left - - Fig 1. Cell based kring(2) in H3(8) - - -.. figure:: ../images/grid_geometrykloop/bng.png - :figclass: doc-figure-float-left - - Fig 2. Cell based kring(2) in BNG(4) - - -.. raw:: html - -
- - - -mosaic_explode [Deprecated] -*************************** - -.. function:: mosaic_explode(geometry, resolution, keep_core_geometries) - - This is an alias for :ref:`grid_tessellateexplode` - - -mosaicfill [Deprecated] -************************ - -.. function:: mosaicfill(geometry, resolution, keep_core_geometries) - - This is an alias for :ref:`grid_tessellate` - - -point_index_geom [Deprecated] -****************************** - -.. function:: point_index_geom(point, resolution) - - This is an alias for :ref:`grid_pointascellid` - - -point_index_lonlat [Deprecated] -******************************** - -.. function:: point_index_lonlat(point, resolution) - - This is an alias for :ref:`grid_longlatascellid` - - -polyfill [Deprecated] -********************** - -.. function:: polyfill(geom, resolution) - - This is an alias for :ref:`grid_polyfill` diff --git a/v0.3.x/_sources/api/spatial-predicates.rst.txt b/v0.3.x/_sources/api/spatial-predicates.rst.txt deleted file mode 100644 index 09fc6fa31..000000000 --- a/v0.3.x/_sources/api/spatial-predicates.rst.txt +++ /dev/null @@ -1,177 +0,0 @@ -================== -Spatial predicates -================== - - -st_contains -*********** - -.. function:: st_contains(geom1, geom2) - - Returns `true` if `geom1` 'spatially' contains `geom2`. - - :param geom1: Geometry - :type geom1: Column - :param geom2: Geometry - :type geom2: Column - :rtype: Column: BooleanType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'point': 'POINT (25 15)', 'poly': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}]) - df.select(st_contains('poly', 'point')).show() - +------------------------+ - |st_contains(poly, point)| - +------------------------+ - | true| - +------------------------+ - - .. code-tab:: scala - - val df = List(("POINT (25 15)", "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")).toDF("point", "poly") - df.select(st_contains($"poly", $"point")).show() - +------------------------+ - |st_contains(poly, point)| - +------------------------+ - | true| - +------------------------+ - - .. code-tab:: sql - - SELECT st_contains("POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))", "POINT (25 15)") - +------------------------+ - |st_contains(poly, point)| - +------------------------+ - | true| - +------------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(point = c( "POINT (25 15)"), poly = "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")) - showDF(select(df, st_contains(column("poly"), column("point")))) - +------------------------+ - |st_contains(poly, point)| - +------------------------+ - | true| - +------------------------+ - -.. note:: ST_Within is the inverse of ST_Contains, where ST_Contains(a, b)==ST_Within(b,a). - - -st_intersects -************* - -.. function:: st_intersects(geom1, geom2) - - Returns true if the geometry `geom1` intersects `geom2`. - - :param geom1: Geometry - :type geom1: Column - :param geom2: Geometry - :type geom2: Column - :rtype: Column: BooleanType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'p1': 'POLYGON ((0 0, 0 3, 3 3, 3 0))', 'p2': 'POLYGON ((2 2, 2 4, 4 4, 4 2))'}]) - df.select(st_intersects(col('p1'), col('p2'))).show(1, False) - +---------------------+ - |st_intersects(p1, p2)| - +---------------------+ - | true| - +---------------------+ - - .. code-tab:: scala - - val df = List(("POLYGON ((0 0, 0 3, 3 3, 3 0))", "POLYGON ((2 2, 2 4, 4 4, 4 2))")).toDF("p1", "p2") - df.select(st_intersects($"p1", $"p2")).show(false) - +---------------------+ - |st_intersects(p1, p2)| - +---------------------+ - | true| - +---------------------+ - - .. code-tab:: sql - - SELECT st_intersects("POLYGON ((0 0, 0 3, 3 3, 3 0))", "POLYGON ((2 2, 2 4, 4 4, 4 2))") - +---------------------+ - |st_intersects(p1, p2)| - +---------------------+ - | true| - +---------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(p1 = "POLYGON ((0 0, 0 3, 3 3, 3 0))", p2 = "POLYGON ((2 2, 2 4, 4 4, 4 2))")) - showDF(select(df, st_intersects(column("p1"), column("p2"))), truncate=F) - +---------------------+ - |st_intersects(p1, p2)| - +---------------------+ - | true| - +---------------------+ - -.. note:: Intersection logic will be dependent on the chosen geometry API (ESRI or JTS). ESRI is only available for mosaic < 0.4.x series, in mosaic >= 0.4.0 JTS is the only geometry API. - -st_within -********* - -.. function:: st_within(geom1, geom2) - - Returns `true` if `geom1` 'spatially' is within `geom2`. - - :param geom1: Geometry - :type geom1: Column - :param geom2: Geometry - :type geom2: Column - :rtype: Column: BooleanType - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.createDataFrame([{'point': 'POINT (25 15)', 'poly': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}]) - df.select(st_within('point', 'poly')).show() - +----------------------+ - |st_within(point, poly)| - +----------------------+ - | true| - +----------------------+ - - .. code-tab:: scala - - val df = List(("POINT (25 15)", "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")).toDF("point", "poly") - df.select(st_within($"point", $"poly")).show() - +----------------------+ - |st_within(point, poly)| - +----------------------+ - | true| - +----------------------+ - - .. code-tab:: sql - - SELECT st_within("POINT (25 15)", "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))") - +----------------------+ - |st_within(point, poly)| - +----------------------+ - | true| - +----------------------+ - - .. code-tab:: r R - - df <- createDataFrame(data.frame(point = c( "POINT (25 15)"), poly = "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))")) - showDF(select(df, st_within(column("point"), column("poly")))) - +----------------------+ - |st_within(point, poly)| - +----------------------+ - | true| - +----------------------+ - -.. note:: ST_Within is the inverse of ST_Contains, where ST_Contains(a, b)==ST_Within(b,a). - diff --git a/v0.3.x/_sources/api/vector-format-readers.rst.txt b/v0.3.x/_sources/api/vector-format-readers.rst.txt deleted file mode 100644 index 8d9b420e2..000000000 --- a/v0.3.x/_sources/api/vector-format-readers.rst.txt +++ /dev/null @@ -1,263 +0,0 @@ -===================== -Vector Format Readers -===================== - - -Intro -################ -Mosaic provides spark readers for vector files supported by GDAL OGR drivers. -Only the drivers that are built by default are supported. -Here are some common useful file formats: - - * GeoJSON (also ESRIJSON, TopoJSON) https://gdal.org/drivers/vector/geojson.html - * ESRI File Geodatabase (FileGDB) and ESRI File Geodatabase vector (OpenFileGDB). Mosaic implements named reader geo_db (described in this doc). https://gdal.org/drivers/vector/filegdb.html - * ESRI Shapefile / DBF (ESRI Shapefile) - Mosaic implements named reader shapefile (described in this doc) https://gdal.org/drivers/vector/shapefile.html - * Network Common Data Form (netCDF) - Mosaic implements raster reader also https://gdal.org/drivers/raster/netcdf.html - * (Geo)Parquet (Parquet) - Mosaic will be implementing a custom reader soon https://gdal.org/drivers/vector/parquet.html - * Spreadsheets (XLSX, XLS, ODS) https://gdal.org/drivers/vector/xls.html - * U.S. Census TIGER/Line (TIGER) https://gdal.org/drivers/vector/tiger.html - * PostgreSQL Dump (PGDump) https://gdal.org/drivers/vector/pgdump.html - * Keyhole Markup Language (KML) https://gdal.org/drivers/vector/kml.html - * Geography Markup Language (GML) https://gdal.org/drivers/vector/gml.html - * GRASS - option for Linear Referencing Systems (LRS) https://gdal.org/drivers/vector/grass.html - -For more information please refer to gdal documentation: https://gdal.org/drivers/vector/index.html - - - -Mosaic provides two flavors of the readers: -* spark.read.format("ogr") for reading 1 file per spark task -* mos.read().format("multi_read_ogr") for reading file in parallel with multiple spark tasks - - -spark.read.format("ogr") -************************* -A base Spark SQL data source for reading GDAL vector data sources. -The output of the reader is a DataFrame with inferred schema. -The schema is inferred from both features and fields in the vector file. -Each feature will be provided as 2 columns: -* geometry - geometry of the feature (GeometryType) -* srid - spatial reference system identifier of the feature (StringType) - -The fields of the feature will be provided as columns in the DataFrame. -The types of the fields are coerced to most concrete type that can hold all the values. -The reader supports the following options: - - * driverName - GDAL driver name (StringType) - * vsizip - if the vector files are zipped files, set this to true (BooleanType) - * asWKB - if the geometry should be returned as WKB (BooleanType) - default is false - * layerName - name of the layer to read (StringType) - * layerNumber - number of the layer to read (IntegerType) - - -.. function:: read.format("ogr").load(path) - - Loads a vector file and returns the result as a :class:`DataFrame`. - - :param path: the path of the vector file - :return: :class:`DataFrame` - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("ogr")\ - .option("driverName", "GeoJSON")\ - .option("layerName", "points")\ - .option("asWKB", "false")\ - .load("file:///tmp/points.geojson") - df.show() - +--------------------+-------+-----+-----------------+-----------+ - | field_1|field_2| ... | geom_1|geom_1_srid| - +--------------------+-------+-----+-----------------+-----------+ - | "description"| 1| ... | POINT (1.0 1.0) | 4326| - | "description"| 2| ... | POINT (2.0 2.0) | 4326| - | "description"| 3| ... | POINT (3.0 3.0) | 4326| - +--------------------+-------+-----+-----------------+-----------+ - - .. code-tab:: scala - - val df = spark.read.format("ogr") - .option("layerName", "points") - .option("asWKB", "false") - .load("file:///tmp/points.geojson") - df.show() - +--------------------+-------+-----+-----------------+-----------+ - | field_1|field_2| ... | geom_1|geom_1_srid| - +--------------------+-------+-----+-----------------+-----------+ - | "description"| 1| ... | POINT (1.0 1.0) | 4326| - | "description"| 2| ... | POINT (2.0 2.0) | 4326| - | "description"| 3| ... | POINT (3.0 3.0) | 4326| - +--------------------+-------+-----+-----------------+-----------+ - - -mos.read().format("multi_read_ogr") -*********************************** -Mosaic supports reading vector files in parallel with multiple spark tasks. -The amount of data per task is controlled by the chunkSize option. -Chunk size is the number of file rows that will be read per single task. -The output of the reader is a DataFrame with inferred schema. -The schema is inferred from both features and fields in the vector file. -Each feature will be provided as 2 columns: -* geometry - geometry of the feature (GeometryType) -* srid - spatial reference system identifier of the feature (StringType) - -The fields of the feature will be provided as columns in the DataFrame. -The types of the fields are coerced to most concrete type that can hold all the values. -The reader supports the following options: - - * driverName - GDAL driver name (StringType) - * vsizip - if the vector files are zipped files, set this to true (BooleanType) - * asWKB - if the geometry should be returned as WKB (BooleanType) - default is false - * chunkSize - size of the chunk to read from the file per single task (IntegerType) - default is 5000 - * layerName - name of the layer to read (StringType) - * layerNumber - number of the layer to read (IntegerType) - - -.. function:: read.format("multi_read_ogr").load(path) - - Loads a vector file and returns the result as a :class:`DataFrame`. - - :param path: the path of the vector file - :return: :class:`DataFrame` - - :example: - -.. tabs:: - .. code-tab:: py - - df = mos.read().format("multi_read_ogr")\ - .option("driverName", "GeoJSON")\ - .option("layerName", "points")\ - .option("asWKB", "false")\ - .load("file:///tmp/points.geojson") - df.show() - +--------------------+-------+-----+-----------------+-----------+ - | field_1|field_2| ... | geom_1|geom_1_srid| - +--------------------+-------+-----+-----------------+-----------+ - | "description"| 1| ... | POINT (1.0 1.0) | 4326| - | "description"| 2| ... | POINT (2.0 2.0) | 4326| - | "description"| 3| ... | POINT (3.0 3.0) | 4326| - +--------------------+-------+-----+-----------------+-----------+ - - .. code-tab:: scala - - val df = MosaicContext.read.format("multi_read_ogr") - .option("layerName", "points") - .option("asWKB", "false") - .load("file:///tmp/points.geojson") - df.show() - +--------------------+-------+-----+-----------------+-----------+ - | field_1|field_2| ... | geom_1|geom_1_srid| - +--------------------+-------+-----+-----------------+-----------+ - | "description"| 1| ... | POINT (1.0 1.0) | 4326| - | "description"| 2| ... | POINT (2.0 2.0) | 4326| - | "description"| 3| ... | POINT (3.0 3.0) | 4326| - +--------------------+-------+-----+-----------------+-----------+ - - -spark.read().format("geo_db") -***************************** -Mosaic provides a reader for GeoDB files natively in Spark. -The output of the reader is a DataFrame with inferred schema. -Only 1 file per task is read. For parallel reading of large files use the multi_read_ogr reader. -The reader supports the following options: - - * asWKB - if the geometry should be returned as WKB (BooleanType) - default is false - * layerName - name of the layer to read (StringType) - * layerNumber - number of the layer to read (IntegerType) - * vsizip - if the vector files are zipped files, set this to true (BooleanType) - -.. function:: read.format("geo_db").load(path) - - Loads a GeoDB file and returns the result as a :class:`DataFrame`. - - :param path: the path of the GeoDB file - :return: :class:`DataFrame` - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("geo_db")\ - .option("layerName", "points")\ - .option("asWKB", "false")\ - .load("file:///tmp/points.geodb") - df.show() - +--------------------+-------+-----+-----------------+-----------+ - | field_1|field_2| ... | geom_1|geom_1_srid| - +--------------------+-------+-----+-----------------+-----------+ - | "description"| 1| ... | POINT (1.0 1.0) | 4326| - | "description"| 2| ... | POINT (2.0 2.0) | 4326| - | "description"| 3| ... | POINT (3.0 3.0) | 4326| - +--------------------+-------+-----+-----------------+-----------+ - - .. code-tab:: scala - - val df = spark.read.format("geo_db") - .option("layerName", "points") - .option("asWKB", "false") - .load("file:///tmp/points.geodb") - df.show() - +--------------------+-------+-----+-----------------+-----------+ - | field_1|field_2| ... | geom_1|geom_1_srid| - +--------------------+-------+-----+-----------------+-----------+ - | "description"| 1| ... | POINT (1.0 1.0) | 4326| - | "description"| 2| ... | POINT (2.0 2.0) | 4326| - | "description"| 3| ... | POINT (3.0 3.0) | 4326| - +--------------------+-------+-----+-----------------+-----------+ - - -spark.read().format("shapefile") -******************************** -Mosaic provides a reader for Shapefiles natively in Spark. -The output of the reader is a DataFrame with inferred schema. -Only 1 file per task is read. For parallel reading of large files use the multi_read_ogr reader. -The reader supports the following options: - - * asWKB - if the geometry should be returned as WKB (BooleanType) - default is false - * layerName - name of the layer to read (StringType) - * layerNumber - number of the layer to read (IntegerType) - * vsizip - if the vector files are zipped files, set this to true (BooleanType) - -.. function:: read.format("shapefile").load(path) - - Loads a Shapefile and returns the result as a :class:`DataFrame`. - - :param path: the path of the Shapefile - :return: :class:`DataFrame` - - :example: - -.. tabs:: - .. code-tab:: py - - df = spark.read.format("shapefile")\ - .option("layerName", "points")\ - .option("asWKB", "false")\ - .load("file:///tmp/points.shp") - df.show() - +--------------------+-------+-----+-----------------+-----------+ - | field_1|field_2| ... | geom_1|geom_1_srid| - +--------------------+-------+-----+-----------------+-----------+ - | "description"| 1| ... | POINT (1.0 1.0) | 4326| - | "description"| 2| ... | POINT (2.0 2.0) | 4326| - | "description"| 3| ... | POINT (3.0 3.0) | 4326| - +--------------------+-------+-----+-----------------+-----------+ - - .. code-tab:: scala - - val df = spark.read.format("shapefile") - .option("layerName", "points") - .option("asWKB", "false") - .load("file:///tmp/points.shp") - df.show() - +--------------------+-------+-----+-----------------+-----------+ - | field_1|field_2| ... | geom_1|geom_1_srid| - +--------------------+-------+-----+-----------------+-----------+ - | "description"| 1| ... | POINT (1.0 1.0) | 4326| - | "description"| 2| ... | POINT (2.0 2.0) | 4326| - | "description"| 3| ... | POINT (3.0 3.0) | 4326| - +--------------------+-------+-----+-----------------+-----------+ \ No newline at end of file diff --git a/v0.3.x/_sources/index.rst.txt b/v0.3.x/_sources/index.rst.txt deleted file mode 100644 index ee499822e..000000000 --- a/v0.3.x/_sources/index.rst.txt +++ /dev/null @@ -1,95 +0,0 @@ -.. Mosaic documentation master file, created by - sphinx-quickstart on Wed Feb 2 11:01:42 2022. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -.. image:: images/mosaic_logo.png - :alt: mosaic - :class: mosaic-logo - - -.. container:: package_health - - .. image:: https://badge.fury.io/py/databricks-mosaic.svg - :target: https://badge.fury.io/py/databricks-mosaic - :alt: PyPI Version - - .. image:: https://img.shields.io/pypi/dm/databricks-mosaic?style=plastic - :alt: PyPI Monthly Downloads - - .. image:: https://codecov.io/gh/databrickslabs/mosaic/branch/main/graph/badge.svg?token=aEzZ8ITxdg - :target: https://codecov.io/gh/databrickslabs/mosaic - :alt: Codecov - - .. image:: https://github.com/databrickslabs/mosaic/actions/workflows/build_main.yml/badge.svg - :target: https://github.com/databrickslabs/mosaic/actions?query=workflow%3A%22build+main%22 - :alt: build - - .. image:: https://github.com/databrickslabs/mosaic/actions/workflows/docs.yml/badge.svg - :target: https://github.com/databrickslabs/mosaic/actions/workflows/docs.yml - :alt: Mosaic sphinx docs - - .. image:: https://img.shields.io/lgtm/grade/python/g/databrickslabs/mosaic.svg?logo=lgtm&logoWidth=18 - :target: https://lgtm.com/projects/g/databrickslabs/mosaic/context:python - :alt: Language grade: Python - - .. image:: https://img.shields.io/badge/code%20style-black-000000.svg - :target: https://github.com/psf/black - :alt: Code style: black - - - -Mosaic is an extension to the `Apache Spark `_ framework that allows easy and fast processing of very large geospatial datasets. - -.. warning:: - From versions after 0.3.x, Mosaic will require either - * Databricks Runtime 11.2+ with Photon enabled - * Databricks Runtime for ML 11.2+ - - Mosaic 0.3 series does not yet support DBR 13 (coming soon); - also, DBR 10 is no longer supported in Mosaic. - -We currently recommend using Databricks Runtime versions 11.3 LTS or 12.2 LTS with Photon enabled; -this will leverage the Databricks H3 expressions when using H3 grid system. - -Mosaic provides: - * easy conversion between common spatial data encodings (WKT, WKB and GeoJSON); - * constructors to easily generate new geometries from Spark native data types; - * many of the OGC SQL standard `ST_` functions implemented as Spark Expressions for transforming, aggregating and joining spatial datasets; - * high performance through implementation of Spark code generation within the core Mosaic functions; - * optimisations for performing point-in-polygon joins using an approach we co-developed with Ordnance Survey (`blog post `_); and - * the choice of a Scala, SQL and Python API. - - - -Documentation -============= - -.. toctree:: - :glob: - :titlesonly: - :maxdepth: 2 - :caption: Contents: - - api/api - usage/usage - models/models - literature/videos - - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`search` - - -.. * :ref:`modindex` - - -Project Support -=============== - -Please note that all projects in the ``databrickslabs`` github space are provided for your exploration only, and are not formally supported by Databricks with Service Level Agreements (SLAs). They are provided AS-IS and we do not make any guarantees of any kind. Please do not submit a support ticket relating to any issues arising from the use of these projects. - -Any issues discovered through the use of this project should be filed as GitHub Issues on the Repo. They will be reviewed as time permits, but there are no formal SLAs for support. diff --git a/v0.3.x/_sources/literature/videos.rst.txt b/v0.3.x/_sources/literature/videos.rst.txt deleted file mode 100644 index b33a9ec72..000000000 --- a/v0.3.x/_sources/literature/videos.rst.txt +++ /dev/null @@ -1,129 +0,0 @@ -========================== -Mosaic Videos and Talks -========================== - -In this section we will provide links to videos and talks that are related to the Mosaic project. -Some of these are videos of talks given by the Mosaic team, while others are videos of talks given -by others that are related to the Mosaic project or related to GIS in general. Note: speaker images are linked to their linkedin profiles. - - -.. raw:: html - -
-
-

Mosaic: A Framework for Geospatial Analytics at Scale

-
-
-

Location: Data and AI Summit, San Francisco, March 2022

-

This video provides an overview of the Mosaic project and the Mosaic framework and the vision Mosaic team had once the project was started. - It also provides an example of how Mosaic can address use cases such as Ship To Ship Transfer of Goods Detection and how to integrate Mosaic - and Delta Live Tables to build a geospatial analytics pipeline for ingestion of Open Street Map data.

-
- -
    -
  • - -

    Stuart Lynn

    -
  • -
  • - -

    Milos Colic

    -
  • -
- -
- - -.. raw:: html - -
-
-

Advancing Spark - Intro to H3 and Mosaic

-
-
-

Location: Virtual, December 2022

-

This video provides an overview of Grid Base Index systems, specifically H3 and how it can be used to address geospatial use cases. - It also provides a discussion around geospatial data specificities and how that fits into big data and distributed data processing.

-
- -
    -
  • - -

    Simon Whiteley

    -
  • -
  • - -

    Milos Colic

    -
  • -
- -
- -.. raw:: html - -
-
-

Vector and Raster Data Unification Through H3

-
-
-

Location: Spatial Data Science Conference, London, May 2023

-

This unification facilitates an easy plugin/plugout capability for all raster and vector layers. Databricks used these principles to design an easy, scalable and extensible Flood Risk for Physical Assets solution using H3 as a unification grid.

-
- -
    -
  • - -

    Milos Colic

    -
  • -
- -
- - -.. raw:: html - -
-
-

Advancing the Geospatial Lakehouse

-
-
-

Location: Spatial Data Science Conference, New York, November 2022

-

Kent Marten, Staff Product Manager at Databricks, provides an overview of the Databricks Lakehouse, and how its performance and flexibility make it ideal for - geospatial data processing and analytics. Kent will deep-dive into recent boundary-pushing performance improvements with H3, benchmarks included.

-
- -
    -
  • - -

    Kent Marten

    -
  • -
- -
- - -.. raw:: html - -
-
-

Mosaic: A Framework for Geospatial Analytics at Scale

-
-
-

Location: Spatial Data Science Conference, London, May 2022

-

This video walks us through Geospatial Analytics on the Lakehouse, discussing how to build scalable, efficient, cloud-based, - data platforms based on the Lakehouse architecture. It also covers two initiatives: Product Integrations with CARTO & Project Mosaic. - Mosaic is a Databricks Labs project, which brings a unified framework for distributing geospatial analytics on Databricks.

-
- -
    -
  • - -

    Milos Colic

    -
  • -
- -
- - - - diff --git a/v0.3.x/_sources/models/models.rst.txt b/v0.3.x/_sources/models/models.rst.txt deleted file mode 100644 index b118a1730..000000000 --- a/v0.3.x/_sources/models/models.rst.txt +++ /dev/null @@ -1,8 +0,0 @@ -Models -====== - -.. toctree:: - :maxdepth: 2 - - spatial-knn - diff --git a/v0.3.x/_sources/models/spatial-knn.rst.txt b/v0.3.x/_sources/models/spatial-knn.rst.txt deleted file mode 100644 index 0423d9022..000000000 --- a/v0.3.x/_sources/models/spatial-knn.rst.txt +++ /dev/null @@ -1,375 +0,0 @@ -============================ -Spatial K Nearest Neighbours -============================ - -* Runnable notebook based python example available, see `here `__ -* Also, reference SpatialKNN code-level APIs `Python `__ | `Scala `__ for any additions or changes - -Intro -################### - -Nearest neighbour problem is defined as finding an observation from a set S that is the most similar to the given -observation O. The similarity is defined by a distance function d(O, S[i]). The most common distance function is the Euclidean. -The nearest neighbour problem is a special case of the k-nearest neighbour problem, where k=1. The k-nearest neighbour -problem is defined as finding k observations from a set S that are the most similar to the given observation O. - -.. figure:: ../images/nearest_neighbour.png - :figclass: doc-figure - - Fig 1. Nearest neighbour problem - -We define spatial k-nearest neighbour problem as finding k observations from a set of candidates C that are the most similar to the -given a landmark L[i], where the similarity is defined by a distance function d(L[i], S[j]) = st_distance(L[i], S[j]). -In our case we further define the similarity as the inverse of the distance, so the most similar observation is the one with -the smallest distance. ST_Distance function is defined as the shortest distance between two geometries in projected units. -We do not restrict the type of geometries that can be used in the problem. The only requirement is that the geometries -must be in the same coordinate system. - -Spatial KNN as a Join Relation -############################## - -The traditional definition of the nearest neighbour problem is defined as: -"given a set S of points in a space M and a query point q in M, find the point in S that is closest to q". -We have relaxed this definition by allowing the query point to be a set of points. In our case the result of the nearest -neighbour problem is a set of geometries from the candidates set C that are closest to each query geometry from the -set of landmarks L. This in effect formulates a join condition where a point pair (L[i], C[j]) is a match if -st_distance(L[i], C[j]) <= st_distance(L[i], C[k]) where C[k] is the kth nearest neighbour of L[i]. - -The above definition of k nearest neighbour problem is in effect a left join between the set of landmarks L and the set of -candidates C. The result set isn't symmetric and it does depend on the direction of operation. If S[j] is in the knn set of Q[i] -it does not imply that Q[i] is in the knn set of S[j]. This join would default to a Cartesian product if we were to -use the traditional join syntax. We have to use a different approach. - -Spatial KNN as an Iterative Transformation -########################################## - -The problem of finding the k-nearest neighbours can be formulated as an iterative transformation. The transformation -is defined as follows: -* For each geometry in set L generate a hex ring in grid index space -* Generate match candidates in the hex ring -* For each match candidate C[j] calculate the distance to the landmark geometry L[i] -* For each landmark geometry L[i] count the matches and stop if the count is equal to k -* If the count is less than k, increase the size of the hex ring and repeat the process -* If the count exceeds k, remove the matches that are furthest from the landmark and stop -iterating over the hex ring for L[i] -* Evaluate early stopping condition (if enabled): Stop if no new match candidates are found -in the hex ring for any L[i] geometry in the set L for N iterations (knn.setEarlyStopIterations(N)) -* Continue with the next hex ring until max number of iterations is performed -* Return the geometries that have the smallest distance to the query geometries - -.. figure:: ../images/spatial_knn_iterations.png - :figclass: doc-figure - - Fig 2. Spatial KNN example over 4 iterations. - -Parameters -########## - -The transformer has the following parameters: - -* candidatesDf: the dataframe containing the geometries that will be used as candidates for the KNN search -* candidatesFeatureCol: the name of the column that contains the candidates geometries -* candidatesRowID: the name of the column that contains the candidates ids -* landmarksFeatureCol: the name of the column that contains the landmarks geometries -* landmarksRowID: the name of the column that contains the landmarks ids -* kNeighbours: the number of neighbours to return -* maxIterations: the maximum number of iterations to perform -* distanceThreshold: the distance threshold to stop the iterations (in CRS units) -* earlyStopIterations: the number of subsequent iterations upon which to stop if no new neighbours -* checkpointTablePrefix: the prefix of the checkpoint table -* indexResolution: the resolution of the index (grid system specific) -* approximate: whether to stop after max iterations (approximate = true) or to - perform the finalisation step (approximate = false) - no default value, the caller must specify this parameter - -Param distanceThreshold is specific to the CRS used, e.g. for 4326 units are decimal degrees. -This is useful as a a safety net for coarse grained indexResolution choices which could easily span large chunks of the globe. - -If the approximate is set to true the transformer wont perform the finalisation step. -The finalisation takes into account that grid index cells may be skewed at different -locations and we cant ensure radial growth between iterations. That means that some -of the neighbours in returned K set aren't nearest neighbours. The finalisation step -will take the distance between the neighbours and the target geometry and will generate -a buffered geometry around the target geometry. The buffered geometry will be used to -identify missed neighbours. The missed neighbours will be added to the K set and the -set will be sorted by distance to the target geometry. Grid cells can be skewed at different -locations in a different way, meaning the hex rings are more of ellipses than circles. -To account for that we need to perform the finalisation step that is based on buffer geometries. - -Usage -##### - -Mosaic implements a transformer that implements the iterative approach outlined above. -The transformer is called SpatialKNN and it is used as follows: - -.. tabs:: - .. code-tab:: py - - import mosaic as mos - mos.enable_mosaic(spark, dbutils) - >>> - spark.sparkContext.setCheckpointDir("dbfs:/tmp/mosaic/username/checkpoints") - >>> - building_df = spark.read.table("building") - trip_df = spark.read.table("trip") - - from mosaic.models import SpatialKNN - >>> - knn = SpatialKNN() - - knn.setUseTableCheckpoint(True) - knn.setCheckpointTablePrefix("checkpoint_table_knn") - knn.model.cleanupCheckpoint - >>> - # CRS Specific - # - e.g. 4326 units are decimal degrees - knn.setDistanceThreshold(1.0) - - # Grid System Specific - # - e.g. H3 resolutions 0-15 - knn.setIndexResolution(10) - >>> - knn.setKNeighbours(5) - knn.setApproximate(True) - knn.setMaxIterations(10) - knn.setEarlyStopIterations(3) - >>> - knn.setLandmarksFeatureCol("geom_wkt") - knn.setLandmarksRowID("left_id") # id will be generated - >>> - knn.setCandidatesDf(trip_df.where("pickup_point is not null")) - knn.setCandidatesFeatureCol("pickup_point") - knn.setCandidatesRowID("right_id") # id will be generated - >>> - neighbours = knn.transform(building_df) - neighbours.display() - +-------+--------+-----------+--------------+--------------------------+---------+----------------+ - |left_id|right_id| geometry|right_geometry|geometry_geometry_distance|iteration|neighbour_number| - +-------+--------+-----------+--------------+--------------------------+---------+----------------+ - | 1012| 2012|POLYGON(...|LINESTRING(...| 0.0| 0| 1| - | 1012| 2013|POLYGON(...|LINESTRING(...| 2.145| 0| 2| - | 1012| 2014|POLYGON(...|LINESTRING(...| 2.1787| 2| 3| - | 1013| 2013|POLYGON(...|LINESTRING(...| 0.0| 0| 1| - | 1013| 2014|POLYGON(...|LINESTRING(...| 1.1112| 1| 1| - +-------+--------+-----------+--------------+--------------------------+---------+----------------+ - - .. code-tab:: scala - - import com.databricks.labs.mosaic.models.knn.SpatialKNN - import com.databricks.labs.mosaic.functions.MosaicContext - import com.databricks.labs.mosaic.H3 - import com.databricks.labs.mosaic.JTS - >>> - val mosaicContext = MosaicContext.build(H3, JTS) - import mosaicContext.functions._ - mosaicContext.register(spark) - >>> - spark.sparkContext.setCheckpointDir("dbfs:/tmp/mosaic/username/checkpoints") - >>> - val buildingDf = spark.read.table("building") - val tripDf = spark.read.table("trip") - >>> - val knn = SpatialKNN(tripDf) - .setDistanceThreshold(1.0) // crs specific units - .setIndexResolution(10) // grid system specific - .setKNeighbours(5) - .setMaxIterations(10) - .setEarlyStopIterations(3) - .setLandmarksFeatureCol("geom_wkt") - .setLandmarksRowID("left_id") // will be generated - .setCandidatesFeatureCol("pickup_point") - .setCandidatesRowID("right_id") // will be generated - .setCheckpointTablePrefix("checkpoint_table_knn") - >>> - val neighbours = knn.transform(buildingDf) - neighbours.display() - +-------+--------+-----------+--------------+--------------------------+---------+----------------+ - |left_id|right_id| geometry|right_geometry|geometry_geometry_distance|iteration|neighbour_number| - +-------+--------+-----------+--------------+--------------------------+---------+----------------+ - | 1012| 2012|POLYGON(...|LINESTRING(...| 0.0| 0| 1| - | 1012| 2013|POLYGON(...|LINESTRING(...| 2.145| 0| 2| - | 1012| 2014|POLYGON(...|LINESTRING(...| 2.1787| 2| 3| - | 1013| 2013|POLYGON(...|LINESTRING(...| 0.0| 0| 1| - | 1013| 2014|POLYGON(...|LINESTRING(...| 1.1112| 1| 1| - +-------+--------+-----------+--------------+--------------------------+---------+----------------+ - -Note: the transformer is implemented only in python and scala at the moment. - -Mosaic supports all indexing systems for this transformer. -Please see :doc:`Spatial Indexing ` for supported indexing operations. - -Visualisation -############# - -The transformer returns a dataframe with the following columns: - -* left_id: the id of the left geometry -* right_id: the id of the right geometry -* geometry: the left geometry -* right_geometry: the right geometry -* geometry_geometry_distance: the distance between the left and right geometry -* iteration: the iteration number -* neighbour_number: the number of the neighbour in the K set -* any other column from left dataset will be returned as well -* any other column from right dataset will be returned as well -* any column name that appears in both datasets will be suffixed with _right for the right dataset, - left dataset column names wont be altered - -For visualisation purposes we advise that you select the following columns: - -* left_id -* right_id -* geometry -* right_geometry -* geometry_geometry_distance - -The following image shows the result of the transformer applied on the buildings and taxi trip pickup locations: - -.. figure:: ../images/knn_result_visualisation.png - :figclass: doc-figure - - Fig 3. Spatial KNN example visualisation. - -Mlflow Integration -################## - -SpatialKNN transformer supports mlflow integration since it extends spark.mllib APIs. -In addition the transformer comes with .getParams() and .getMetrics() methods to facilitate -easy logging with mlflow. The .getParams() method returns a dictionary with the parameters -of the transformer. The .getMetrics() method returns a dictionary with the metrics of the -transformer after the convergence. - -.. tabs:: - .. code-tab:: py - - import mosaic as mos - mos.enable_mosaic(spark, dbutils) - >>> - from mosaic.models import SpatialKNN - import mlflow - mlflow.autolog(disable=False) - >>> - with mlflow.start_run(): - >>> - knn = SpatialKNN() - ... - result_df = knn.transform(...) - >>> - mlflow.log_params(knn.getParams()) - mlflow.log_metrics(knn.getMetrics()) - - -.. figure:: ../images/knn_mlflow_notebook.png - :figclass: doc-figure-full - - Fig 4. Spatial KNN mlflow integration in notebooks. - - -.. raw:: html - -
- - -.. figure:: ../images/knn_mlflow_params.png - :figclass: doc-figure-float-left - - Fig 5. Spatial KNN mlflow integration params. - -.. figure:: ../images/knn_mlflow_metrics.png - :figclass: doc-figure-float-left - - Fig 6. Spatial KNN mlflow integration metrics. - - -.. raw:: html - -
- - -Model serialisation -################### - -The transformer can be serialised and deserialised using the model.write.save() and model.read.load() methods. -The serialised model can be used for audit purposes only. -The transformers are not models in a pure sense - they do not create a new object that can be called on each row. -The outputs of knn transformer is a dataframe with the neighbours of each geometry. -To run the transform method one has to have access to both the landmarks and the candidates datasets. -These datasets are not serialised with the model, and neither are the model outputs. - -.. tabs:: - .. code-tab:: py - - import mosaic as mos - mos.enable_mosaic(spark, dbutils) - >>> - spark.sparkContext.setCheckpointDir("dbfs:/tmp/mosaic/username/checkpoints") - >>> - from mosaic.models import SpatialKNN - knn = SpatialKNN() - ... - >>> - knn.write.save("dbfs:/tmp/mosaic/username/knn_model") - loaded_knn = SpatialKNN.read.load("dbfs:/tmp/mosaic/username/knn_model") - loaded_knn.getParams() - {'approximate': 'true', - 'candidatesFeatureCol': 'pickup_point', - 'candidatesRowID': 'candidates_id', - 'checkpointTablePrefix': 'checkpoint_table_knn', - 'distanceThreshold': '1.0', - 'earlyStopIterations': '3', - 'indexResolution': '10', - 'kNeighbours': '20', - 'landmarksFeatureCol': 'geom_wkt', - 'landmarksRowID': 'landmarks_id', - 'maxIterations': '10', - 'useTableCheckpoint': 'true'} - - .. code-tab:: scala - - import com.databricks.labs.mosaic.models.knn.SpatialKNN - import com.databricks.labs.mosaic.functions.MosaicContext - import com.databricks.labs.mosaic.H3 - import com.databricks.labs.mosaic.JTS - >>> - val mosaicContext = MosaicContext.build(H3, JTS) - import mosaicContext.functions._ - mosaicContext.register(spark) - >>> - spark.sparkContext.setCheckpointDir("dbfs:/tmp/mosaic/username/checkpoints") - >>> - val knn = SpatialKNN() - ... - >>> - knn.write.save("dbfs:/tmp/mosaic/username/knn_model") - val loadedKnn = SpatialKNN.read.load("dbfs:/tmp/mosaic/username/knn_model") - val params = loadedKnn.getParams() - params.foreach(println) - ('approximate': 'true') - ('candidatesFeatureCol': 'pickup_point') - ('candidatesRowID': 'candidates_id') - ('checkpointTablePrefix': 'checkpoint_table_knn') - ('distanceThreshold': '1.0') - ('earlyStopIterations': '3') - ('indexResolution': '10') - ('kNeighbours': '20') - ('landmarksFeatureCol': 'geom_wkt') - ('landmarksRowID': 'landmarks_id') - ('maxIterations': '10') - ('useTableCheckpoint': 'true') - - -Shape Aware Hex Rings -##################### - -When performing the iterations the transformer will use the grid to identify -the candidates for the K set. The grid is generated using the shape aware -hex rings algorithm. The algorithm will generate a grid that will be skewed -in the direction of the target geometry. -If the target geometry is a point the hex ring will coincide with the grid -base implementation. If the target geometry is a line the hex ring will be skewed in -the direction of the line. If the target geometry is a polygon the hex ring will be -skewed around the shape of the polygon, the polygon holes will be considered. - -.. figure:: ../images/knn_line_hexrings.png - :figclass: doc-figure - - Fig 7. Spatial KNN example of shape aware hex rings. diff --git a/v0.3.x/_sources/usage/automatic-sql-registration.rst.txt b/v0.3.x/_sources/usage/automatic-sql-registration.rst.txt deleted file mode 100644 index 347949bd0..000000000 --- a/v0.3.x/_sources/usage/automatic-sql-registration.rst.txt +++ /dev/null @@ -1,90 +0,0 @@ -========================== -Automatic SQL registration -========================== - -If you are looking to use only the SQL functions exposed by Mosaic, without the need -to execute any Python or Scala set-up code, this can be achieved through the automatic SQL -registration process described on this page. - -An example of when this might be useful would be connecting a business intelligence tool -to your Spark / Databricks cluster to perform spatial queries or integrating Spark -with a geospatial middleware component such as [Geoserver](https://geoserver.org/). - -Pre-requisites -************** - -In order to use Mosaic, you must have access to a Databricks cluster running -Databricks Runtime 10.0 or higher (11.2 with photon or higher is recommended). -If you have cluster creation permissions in your Databricks -workspace, you can create a cluster using the instructions -`here `__. - -You will also need "Can Manage" permissions on this cluster in order to attach init script -to your cluster. A workspace administrator will be able to grant -these permissions and more information about cluster permissions can be found -in our documentation -`here `__. - -Installation -************ - -To install Mosaic on your Databricks cluster, take the following steps: - -#. Upload Mosaic jar to a dedicated dbfs location. E.g. dbfs:/FileStore/mosaic/jars/. -#. Create an init script that fetches the mosaic jar and copies it to databricks/jars. - - .. code-block:: bash - - %sh - - # Create init script directory for Mosaic - mkdir -p /dbfs/FileStore/mosaic/scripts - - # Create init script - cat > /dbfs/FileStore/mosaic/scripts/mosaic-init.sh <<'EOF' - #!/bin/bash - # - # File: mosaic-init.sh - # On cluster startup, this script will copy the Mosaic jars to the cluster's default jar directory. - - cp /dbfs/FileStore/mosaic/jars/*.jar /databricks/jars - - EOF - -#. Configure the init script for the cluster following the instructions `here `__. -#. Add the following spark configuration values for your cluster following the instructions `here `__. - - .. code-block:: bash - - # H3 or BNG - spark.databricks.labs.mosaic.index.system H3 - # JTS only - spark.databricks.labs.mosaic.geometry.api JTS - # MosaicSQL or MosaicSQLDefault, MosaicSQLDefault corresponds to (H3, JTS) - spark.sql.extensions com.databricks.labs.mosaic.sql.extensions.MosaicSQL - -Testing -******* - -To test the installation, create a new Python notebook and run the following command: - -.. code-block:: python - - spark.sql("""show functions""").where("startswith(function, 'st_')").display() - -You should see all the supported functions registered by Mosaic appear in the output. - -.. warning:: - Issue 317: https://github.com/databrickslabs/mosaic/issues/317 - Mosaic jar needs to be installed via init script and not through the cluster UI. - Automatic SQL registration needs to happen at the cluster start up time when Spark context is created. - Cluster UI installed libraries are made available too late and the Automatic SQL registration - will not work, but there is no way to print an Error message in that case. - -.. warning:: - Issue 297: https://github.com/databrickslabs/mosaic/issues/297 - Since Mosaic V0.3.6 Automatic SQL Registration can fail with the following error message: - "java.lang.Exception: spark.databricks.labs.mosaic.raster.api". This is due to a missing key in the spark - configuration. The issue has been fixed since Mosaic V0.3.10. For releases between V0.3.6 and V0.3.10 - please add the following configuration to your cluster spark configs: (spark.databricks.labs.mosaic.raster.api, "GDAL"), - or alternatively in python/scala code: spark.conf.set("spark.databricks.labs.mosaic.raster.api", "GDAL") \ No newline at end of file diff --git a/v0.3.x/_sources/usage/grid-indexes-bng.rst.txt b/v0.3.x/_sources/usage/grid-indexes-bng.rst.txt deleted file mode 100644 index 874ae9df5..000000000 --- a/v0.3.x/_sources/usage/grid-indexes-bng.rst.txt +++ /dev/null @@ -1,112 +0,0 @@ -============================ -BNG - British National Grid -============================ - -Intro -################### -The `Ordnance Survey National Grid reference system `__ -also known as the British National Grid (BNG) is a grid index system defined over the territory of Great Britain and -is extensively being used by many organizations in UK for indexing their geospatial data. -Mosaic supports multiple different grid indexes. One of the supported index systems is the British National Grid. -All of the operations that can be performed on H3 grid system are transferable to BNG grid system, and in general, are -transferable to a generic index system. - -.. image:: ../images/OS_BNG_definition.png - :width: 600px - :height: 600px - :alt: Ordnance Survey British National Grid - :align: center - -Configuring BNG -#################### - -The default index system for Mosaic is H3. If the users wish to use BNG instead, this can be achieved using spark -configurations. Spark provides an easy way to supply configuration parameters using spark.conf.set API. - -.. tabs:: - .. code-tab:: py - - import mosaic as mos - - spark.conf.set("spark.databricks.labs.mosaic.index.system", "BNG") - mos.enable_mosaic(spark, dbutils) - - .. code-tab:: scala - - import com.databricks.labs.mosaic.functions.MosaicContext - import com.databricks.labs.mosaic.{BNG, JTS} - - val mosaicContext = MosaicContext.build(BNG, JTS) - import mosaicContext.functions._ - - .. code-tab:: r R - - library(sparkrMosaic) - enableMosaic("JTS", "BNG") - - .. code-tab:: sql - - -- For SQL please use Automatic SQL Configuration. See: https://databrickslabs.github.io/mosaic/usage/automatic-sql-registration.html - -- Otherwise, use python configuration in the first cell of your notebook, then use SQL in the rest of the notebook. - -Coordinate Reference System -########################### - -British National Grid (BNG) expects that coordinates are provided in EPSG:27700 coordinate reference system. -EPSG:27700 CRS is also referred to as "OSGB36 / British National Grid -- United Kingdom Ordnance Survey". -For more information on the CRS you can visit `EPSG:27700 `__. - -If your data in is not provided in EPSG:27700 we would recommend to either switch the indexing strategy to H3 -or to reproject the data from source CRS to EPSG:27700. Mosaic provides the functionality to set CRS ID -even for geometries that arrive as WKT and WKB (the formats do not capture the CRS information and this information -has to be set manually). - -.. tabs:: - .. code-tab:: py - - ### CRS codes assume EPSG - df = df.withColumn("geometry", mos.st_setsrid("geometry", 4326)) - df = df.withColumn("geometry", mos.st_transform("geometry", 27700)) - - - .. code-tab:: scala - - ### CRS codes assume EPSG - val withSrcCRS = df.withColumn("geometry", mos.st_setsrid("geometry", 4326)) - val withReprojected = withSrcCRS.withColumn("geometry", mos.st_transform("geometry", 27700)) - - .. code-tab:: r R - - ### CRS codes assume EPSG - df <- withColumn(df, "geometry", mos.st_setsrid(df$geometry, 4326)) - df <- withColumn(df, "geometry", mos.st_transform(df$geometry, 27700)) - -Mosaic provides functionality to verify provided geometries have all of their vertices within bounds of the -specified CRS. If the CRS isn't EPSG:4326 then the functionality allows to prefer checks on the coordinates -before and/or after reprojection. This allows the end users to filter out geometries that would not be -possible to index with BNG. - -.. tabs:: - .. code-tab:: py - - df = df.withColumn("is_within_bng_bounds", st_hasvalidcoordinates(geometry, 'EPSG:27700', 'reprojected_bounds')) - - .. code-tab:: scala - - val withValidCoords = df.withColumn("is_within_bng_bounds", st_hasvalidcoordinates(geometry, 'EPSG:27700', 'reprojected_bounds')) - - .. code-tab:: r R - - df <- withColumn(df, "is_within_bng_bounds", st_hasvalidcoordinates(geometry, 'EPSG:27700', 'reprojected_bounds')) - - .. code-tab:: sql - - SELECT *, st_hasvalidcoordinates(geometry, 'EPSG:27700', 'reprojected_bounds') as is_within_bng_bounds - -Mosaic supports all indexing operations for both H3 and BNG. -Please see :doc:`Spatial Indexing ` for supported indexing operations. - - - - - diff --git a/v0.3.x/_sources/usage/grid-indexes.ipynb.txt b/v0.3.x/_sources/usage/grid-indexes.ipynb.txt deleted file mode 100644 index 6690c7ae0..000000000 --- a/v0.3.x/_sources/usage/grid-indexes.ipynb.txt +++ /dev/null @@ -1,496 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "source": [ - "# Using grid index systems in Mosaic" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "1deecb01-8ded-4750-a112-5847e410846b" - } - } - }, - { - "cell_type": "code", - "source": [ - "from pyspark.sql.functions import *\nfrom mosaic import enable_mosaic\nenable_mosaic(spark, dbutils)" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "f6311e22-f0a8-4025-b612-4367b5f1cac2" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "markdown", - "source": [ - "Set operations over big geospatial datasets become very expensive without some form of spatial indexing.\n\nSpatial indexes not only allow operations like point-in-polygon joins to be partitioned but, if only approximate results are required, can be used to reduce these to deterministic SQL joins directly on the indexes." - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "e5603057-662b-4bf3-9517-84b35ad7a8b5" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "![example h3 point-in-poly image](https://databricks.com/wp-content/uploads/2021/01/blog-geospatial-3.jpg)" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "c8199fdd-1372-43a4-8edf-f96129f4195a" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "The workflow for a point-in-poly spatial join might look like the following:" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "39e3cf64-61c9-4930-be5e-91b254cf0984" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "## 1. Read the source point and polygon datasets." - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "947d6e33-06b5-4ea0-bc55-0fdb5b8e8524" - } - } - }, - { - "cell_type": "code", - "source": [ - "drop_cols = [\n \"rate_code_id\", \"store_and_fwd_flag\", \"dropoff_longitude\",\n \"dropoff_latitude\", \"payment_type\", \"fare_amount\",\n \"extra\", \"mta_tax\", \"tip_amount\", \"tolls_amount\",\n \"total_amount\"\n]\n\ntrips = (\n spark.table(\"delta.`/databricks-datasets/nyctaxi/tables/nyctaxi_yellow`\")\n .drop(*drop_cols)\n .limit(5_000_000)\n .repartition(sc.defaultParallelism * 20)\n)\n\ntrips.show()" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "f1474a53-da53-4955-b944-083fdf3a22a1" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+\n|vendor_id| pickup_datetime| dropoff_datetime|passenger_count|trip_distance|pickup_longitude|pickup_latitude|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+\n| CMT|2009-01-01 20:07:33|2009-01-01 20:12:28| 1| 0.8| -74.001041| 40.731|\n| CMT|2009-01-06 15:29:12|2009-01-06 15:51:57| 2| 3.3| -73.996489| 40.725742|\n| CMT|2010-02-14 17:42:16|2010-02-14 17:55:03| 1| 3.4| -74.002949| 40.734254|\n| CMT|2010-02-11 18:19:01|2010-02-11 18:27:54| 1| 1.5| -73.998133| 40.682463|\n| VTS|2009-04-29 12:26:00|2009-04-29 12:35:00| 3| 2.05| -74.001332| 40.72006|\n| VTS|2009-04-24 15:03:00|2009-04-24 15:23:00| 2| 2.89| -73.989952| 40.734625|\n| CMT|2010-02-28 13:55:44|2010-02-28 14:02:37| 1| 1.2| -74.006015| 40.735279|\n| VTS|2009-09-27 08:46:00|2009-09-27 08:59:00| 1| 3.97| -74.000148| 40.717468|\n| CMT|2010-02-18 09:48:52|2010-02-18 10:08:38| 1| 3.0| -73.995177| 40.725297|\n| CMT|2009-04-09 20:33:44|2009-04-09 20:39:33| 2| 0.6| -73.990133| 40.729321|\n| CMT|2010-02-13 22:41:10|2010-02-13 23:07:04| 1| 4.2| -74.009175| 40.706284|\n| CMT|2009-01-25 20:06:51|2009-01-25 20:12:37| 1| 1.3| -74.007384| 40.717929|\n| VTS|2010-02-27 18:19:00|2010-02-27 18:38:00| 1| 4.2| -74.011512| 40.710588|\n| VTS|2010-02-15 10:17:00|2010-02-15 10:24:00| 1| 1.74| -74.016442| 40.711617|\n| CMT|2009-12-26 18:45:49|2009-12-26 18:59:08| 1| 4.8| -74.01014| 40.712263|\n| CMT|2009-12-06 01:00:07|2009-12-06 01:11:41| 2| 4.2| -74.002505| 40.729001|\n| VTS|2009-10-04 14:36:00|2009-10-04 14:42:00| 1| 1.13| -74.006767| 40.718942|\n| CMT|2009-01-18 00:20:50|2009-01-18 00:36:29| 3| 2.1| -73.993258| 40.721401|\n| VTS|2009-05-18 13:24:00|2009-05-18 13:33:00| 1| 1.91| -73.992785| 40.730412|\n| VTS|2009-11-11 21:51:00|2009-11-11 22:13:00| 5| 4.71| -74.010065| 40.733383|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+\nonly showing top 20 rows\n\n
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+\nvendor_id| pickup_datetime| dropoff_datetime|passenger_count|trip_distance|pickup_longitude|pickup_latitude|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+\n CMT|2009-01-01 20:07:33|2009-01-01 20:12:28| 1| 0.8| -74.001041| 40.731|\n CMT|2009-01-06 15:29:12|2009-01-06 15:51:57| 2| 3.3| -73.996489| 40.725742|\n CMT|2010-02-14 17:42:16|2010-02-14 17:55:03| 1| 3.4| -74.002949| 40.734254|\n CMT|2010-02-11 18:19:01|2010-02-11 18:27:54| 1| 1.5| -73.998133| 40.682463|\n VTS|2009-04-29 12:26:00|2009-04-29 12:35:00| 3| 2.05| -74.001332| 40.72006|\n VTS|2009-04-24 15:03:00|2009-04-24 15:23:00| 2| 2.89| -73.989952| 40.734625|\n CMT|2010-02-28 13:55:44|2010-02-28 14:02:37| 1| 1.2| -74.006015| 40.735279|\n VTS|2009-09-27 08:46:00|2009-09-27 08:59:00| 1| 3.97| -74.000148| 40.717468|\n CMT|2010-02-18 09:48:52|2010-02-18 10:08:38| 1| 3.0| -73.995177| 40.725297|\n CMT|2009-04-09 20:33:44|2009-04-09 20:39:33| 2| 0.6| -73.990133| 40.729321|\n CMT|2010-02-13 22:41:10|2010-02-13 23:07:04| 1| 4.2| -74.009175| 40.706284|\n CMT|2009-01-25 20:06:51|2009-01-25 20:12:37| 1| 1.3| -74.007384| 40.717929|\n VTS|2010-02-27 18:19:00|2010-02-27 18:38:00| 1| 4.2| -74.011512| 40.710588|\n VTS|2010-02-15 10:17:00|2010-02-15 10:24:00| 1| 1.74| -74.016442| 40.711617|\n CMT|2009-12-26 18:45:49|2009-12-26 18:59:08| 1| 4.8| -74.01014| 40.712263|\n CMT|2009-12-06 01:00:07|2009-12-06 01:11:41| 2| 4.2| -74.002505| 40.729001|\n VTS|2009-10-04 14:36:00|2009-10-04 14:42:00| 1| 1.13| -74.006767| 40.718942|\n CMT|2009-01-18 00:20:50|2009-01-18 00:36:29| 3| 2.1| -73.993258| 40.721401|\n VTS|2009-05-18 13:24:00|2009-05-18 13:33:00| 1| 1.91| -73.992785| 40.730412|\n VTS|2009-11-11 21:51:00|2009-11-11 22:13:00| 5| 4.71| -74.010065| 40.733383|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+\nonly showing top 20 rows\n\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "code", - "source": [ - "from mosaic import st_geomfromgeojson\n\nuser = spark.sql(\"select current_user() as user\").collect()[0][\"user\"]\n\nneighbourhoods = (\n spark.read.format(\"json\")\n .load(f\"dbfs:/FileStore/shared_uploads/{user}/NYC_Taxi_Zones.geojson\")\n .repartition(sc.defaultParallelism)\n .withColumn(\"geometry\", st_geomfromgeojson(to_json(col(\"geometry\"))))\n .select(\"properties.*\", \"geometry\")\n .drop(\"shape_area\", \"shape_leng\")\n)\n\nneighbourhoods.show()" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "e3a366bf-4d60-4356-8b7b-eedb0beabc8d" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
+-------------+-----------+--------+-------------------+--------------------+\n| borough|location_id|objectid| zone| geometry|\n+-------------+-----------+--------+-------------------+--------------------+\n| Brooklyn| 123| 123| Homecrest|{6, 4326, [[[-73....|\n| Manhattan| 153| 153| Marble Hill|{6, 4326, [[[-73....|\n| Brooklyn| 112| 112| Greenpoint|{6, 4326, [[[-73....|\n| Manhattan| 233| 233|UN/Turtle Bay South|{6, 4326, [[[-73....|\n| Manhattan| 43| 43| Central Park|{6, 4326, [[[-73....|\n| Queens| 201| 201| Rockaway Park|{6, 4326, [[[-73....|\n| Queens| 131| 131| Jamaica Estates|{6, 4326, [[[-73....|\n| Brooklyn| 111| 111|Green-Wood Cemetery|{6, 4326, [[[-73....|\n| Queens| 226| 226| Sunnyside|{6, 4326, [[[-73....|\n| Queens| 129| 129| Jackson Heights|{6, 4326, [[[-73....|\n| Manhattan| 120| 120| Highbridge Park|{6, 4326, [[[-73....|\n| Brooklyn| 76| 76| East New York|{6, 4326, [[[-73....|\n| Manhattan| 24| 24| Bloomingdale|{6, 4326, [[[-73....|\n| Manhattan| 202| 202| Roosevelt Island|{6, 4326, [[[-73....|\n| Manhattan| 100| 100| Garment District|{6, 4326, [[[-73....|\n|Staten Island| 251| 251| Westerleigh|{6, 4326, [[[-74....|\n| Manhattan| 74| 74| East Harlem North|{6, 4326, [[[-73....|\n| Queens| 98| 98| Fresh Meadows|{6, 4326, [[[-73....|\n| Manhattan| 211| 211| SoHo|{6, 4326, [[[-74....|\n| Bronx| 174| 174| Norwood|{6, 4326, [[[-73....|\n+-------------+-----------+--------+-------------------+--------------------+\nonly showing top 20 rows\n\n
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
+-------------+-----------+--------+-------------------+--------------------+\n borough|location_id|objectid| zone| geometry|\n+-------------+-----------+--------+-------------------+--------------------+\n Brooklyn| 123| 123| Homecrest|{6, 4326, [[[-73....|\n Manhattan| 153| 153| Marble Hill|{6, 4326, [[[-73....|\n Brooklyn| 112| 112| Greenpoint|{6, 4326, [[[-73....|\n Manhattan| 233| 233|UN/Turtle Bay South|{6, 4326, [[[-73....|\n Manhattan| 43| 43| Central Park|{6, 4326, [[[-73....|\n Queens| 201| 201| Rockaway Park|{6, 4326, [[[-73....|\n Queens| 131| 131| Jamaica Estates|{6, 4326, [[[-73....|\n Brooklyn| 111| 111|Green-Wood Cemetery|{6, 4326, [[[-73....|\n Queens| 226| 226| Sunnyside|{6, 4326, [[[-73....|\n Queens| 129| 129| Jackson Heights|{6, 4326, [[[-73....|\n Manhattan| 120| 120| Highbridge Park|{6, 4326, [[[-73....|\n Brooklyn| 76| 76| East New York|{6, 4326, [[[-73....|\n Manhattan| 24| 24| Bloomingdale|{6, 4326, [[[-73....|\n Manhattan| 202| 202| Roosevelt Island|{6, 4326, [[[-73....|\n Manhattan| 100| 100| Garment District|{6, 4326, [[[-73....|\nStaten Island| 251| 251| Westerleigh|{6, 4326, [[[-74....|\n Manhattan| 74| 74| East Harlem North|{6, 4326, [[[-73....|\n Queens| 98| 98| Fresh Meadows|{6, 4326, [[[-73....|\n Manhattan| 211| 211| SoHo|{6, 4326, [[[-74....|\n Bronx| 174| 174| Norwood|{6, 4326, [[[-73....|\n+-------------+-----------+--------+-------------------+--------------------+\nonly showing top 20 rows\n\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "markdown", - "source": [ - "## 2. Compute the resolution of index required to optimize the join." - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "ae8cc184-574e-458f-9613-d2225b7a73e8" - } - } - }, - { - "cell_type": "code", - "source": [ - "from mosaic import MosaicFrame\n\nneighbourhoods_mdf = MosaicFrame(neighbourhoods, \"geometry\")\nhelp(neighbourhoods_mdf.get_optimal_resolution)" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "08dc48c1-9da2-4f8a-a233-aae456cac972" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
Help on method get_optimal_resolution in module mosaic.core.mosaic_frame:\n\nget_optimal_resolution(sample_rows: Union[int, NoneType] = None, sample_fraction: Union[float, NoneType] = None) -> int method of mosaic.core.mosaic_frame.MosaicFrame instance\n Analyzes the geometries in the currently selected geometry column and proposes an optimal\n grid-index resolution.\n \n Provide either `sample_rows` or `sample_fraction` parameters to control how much data is passed to the analyzer.\n (Providing too little data to the analyzer may result in a `NotEnoughGeometriesException`)\n \n Parameters\n ----------\n sample_rows: int, optional\n The number of rows to sample.\n sample_fraction: float, optional\n The proportion of rows to sample.\n \n Returns\n -------\n int\n The recommended grid-index resolution to apply to this MosaicFrame.\n\n
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
Help on method get_optimal_resolution in module mosaic.core.mosaic_frame:\n\nget_optimal_resolution(sample_rows: Union[int, NoneType] = None, sample_fraction: Union[float, NoneType] = None) -> int method of mosaic.core.mosaic_frame.MosaicFrame instance\n Analyzes the geometries in the currently selected geometry column and proposes an optimal\n grid-index resolution.\n \n Provide either `sample_rows` or `sample_fraction` parameters to control how much data is passed to the analyzer.\n (Providing too little data to the analyzer may result in a `NotEnoughGeometriesException`)\n \n Parameters\n ----------\n sample_rows: int, optional\n The number of rows to sample.\n sample_fraction: float, optional\n The proportion of rows to sample.\n \n Returns\n -------\n int\n The recommended grid-index resolution to apply to this MosaicFrame.\n\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "code", - "source": [ - "(resolution := neighbourhoods_mdf.get_optimal_resolution(sample_fraction=1.))" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "50ed9fb7-3521-40fe-856c-8d5ed9b182d3" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
Out[15]: 9
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
Out[15]: 9
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "markdown", - "source": [ - "## 3. Apply the index to the set of points in your left-hand dataframe.\nThis will generate an index value that corresponds to the grid ‘cell’ that this point occupies." - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "fccff6d5-da76-44c6-b015-749d3dcad3ca" - } - } - }, - { - "cell_type": "code", - "source": [ - "from mosaic import grid_longlatascellid\nindexed_trips = trips.withColumn(\"ix\", grid_longlatascellid(lon=\"pickup_longitude\", lat=\"pickup_latitude\", resolution=lit(resolution)))\nindexed_trips.show()" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "aad98fce-a22b-47d0-961d-62007acc23dd" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------------+\n|vendor_id| pickup_datetime| dropoff_datetime|passenger_count|trip_distance|pickup_longitude|pickup_latitude| ix|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------------+\n| DDS|2009-01-17 18:49:57|2009-01-17 18:56:29| 3| 1.2| -74.004043| 40.733409|617733151092113407|\n| DDS|2009-12-01 00:47:52|2009-12-01 01:00:16| 1| 3.4| -73.991702| 40.726342|617733151087132671|\n| CMT|2009-02-09 16:50:21|2009-02-09 17:02:47| 1| 2.6| -73.999673| 40.733586|617733123805806591|\n| CMT|2009-12-07 07:15:47|2009-12-07 07:32:07| 1| 3.8| -74.01211| 40.716893|617733151084773375|\n| VTS|2009-10-16 22:02:00|2009-10-16 22:08:00| 1| 1.1| -74.010903| 40.71624|617733151084773375|\n| VTS|2009-12-23 22:13:00|2009-12-23 22:18:00| 1| 0.37| -74.002343| 40.73366|617733151092113407|\n| VTS|2009-12-12 01:24:00|2009-12-12 01:38:00| 2| 3.55| -74.002565| 40.728188|617733151091326975|\n| CMT|2009-12-07 13:10:37|2009-12-07 13:13:45| 1| 0.5| -73.999184| 40.73428|617733123805806591|\n| CMT|2009-11-08 22:20:44|2009-11-08 22:31:23| 1| 1.9| -74.003029| 40.733385|617733151092113407|\n| VTS|2009-12-27 20:01:00|2009-12-27 20:04:00| 1| 1.04| -74.000227| 40.732603|617733151092375551|\n| VTS|2009-02-13 14:33:00|2009-02-13 14:50:00| 3| 1.59| -74.006535| 40.732303|617733151092637695|\n| CMT|2009-11-15 21:13:32|2009-11-15 21:25:56| 3| 3.0| -73.998795| 40.730621|617733151092375551|\n| VTS|2009-01-08 18:13:00|2009-01-08 18:33:00| 2| 4.18| -74.0079| 40.712012|617733151021334527|\n| CMT|2009-11-30 13:30:13|2009-11-30 13:41:55| 1| 1.6| -74.004487| 40.734072|617733151092637695|\n| CMT|2009-01-11 20:02:22|2009-01-11 20:08:15| 1| 1.0| -74.004493| 40.713349|617733151020810239|\n| CMT|2009-12-30 18:46:08|2009-12-30 19:02:23| 1| 2.3| -74.010798| 40.716717|617733151084773375|\n| CMT|2009-11-18 21:50:12|2009-11-18 22:05:19| 1| 5.8| -73.992515| 40.694106|617733151038111743|\n| VTS|2009-11-21 12:51:00|2009-11-21 13:27:00| 1| 14.18| -73.9923| 40.715218|617733151109414911|\n| CMT|2009-01-20 09:34:49|2009-01-20 09:37:15| 1| 0.4| -74.0027| 40.733479|617733151092113407|\n| VTS|2009-01-03 07:07:00|2009-01-03 07:18:00| 1| 7.81| -73.994358| 40.690345|617733151037325311|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------------+\nonly showing top 20 rows\n\n
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------------+\nvendor_id| pickup_datetime| dropoff_datetime|passenger_count|trip_distance|pickup_longitude|pickup_latitude| ix|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------------+\n DDS|2009-01-17 18:49:57|2009-01-17 18:56:29| 3| 1.2| -74.004043| 40.733409|617733151092113407|\n DDS|2009-12-01 00:47:52|2009-12-01 01:00:16| 1| 3.4| -73.991702| 40.726342|617733151087132671|\n CMT|2009-02-09 16:50:21|2009-02-09 17:02:47| 1| 2.6| -73.999673| 40.733586|617733123805806591|\n CMT|2009-12-07 07:15:47|2009-12-07 07:32:07| 1| 3.8| -74.01211| 40.716893|617733151084773375|\n VTS|2009-10-16 22:02:00|2009-10-16 22:08:00| 1| 1.1| -74.010903| 40.71624|617733151084773375|\n VTS|2009-12-23 22:13:00|2009-12-23 22:18:00| 1| 0.37| -74.002343| 40.73366|617733151092113407|\n VTS|2009-12-12 01:24:00|2009-12-12 01:38:00| 2| 3.55| -74.002565| 40.728188|617733151091326975|\n CMT|2009-12-07 13:10:37|2009-12-07 13:13:45| 1| 0.5| -73.999184| 40.73428|617733123805806591|\n CMT|2009-11-08 22:20:44|2009-11-08 22:31:23| 1| 1.9| -74.003029| 40.733385|617733151092113407|\n VTS|2009-12-27 20:01:00|2009-12-27 20:04:00| 1| 1.04| -74.000227| 40.732603|617733151092375551|\n VTS|2009-02-13 14:33:00|2009-02-13 14:50:00| 3| 1.59| -74.006535| 40.732303|617733151092637695|\n CMT|2009-11-15 21:13:32|2009-11-15 21:25:56| 3| 3.0| -73.998795| 40.730621|617733151092375551|\n VTS|2009-01-08 18:13:00|2009-01-08 18:33:00| 2| 4.18| -74.0079| 40.712012|617733151021334527|\n CMT|2009-11-30 13:30:13|2009-11-30 13:41:55| 1| 1.6| -74.004487| 40.734072|617733151092637695|\n CMT|2009-01-11 20:02:22|2009-01-11 20:08:15| 1| 1.0| -74.004493| 40.713349|617733151020810239|\n CMT|2009-12-30 18:46:08|2009-12-30 19:02:23| 1| 2.3| -74.010798| 40.716717|617733151084773375|\n CMT|2009-11-18 21:50:12|2009-11-18 22:05:19| 1| 5.8| -73.992515| 40.694106|617733151038111743|\n VTS|2009-11-21 12:51:00|2009-11-21 13:27:00| 1| 14.18| -73.9923| 40.715218|617733151109414911|\n CMT|2009-01-20 09:34:49|2009-01-20 09:37:15| 1| 0.4| -74.0027| 40.733479|617733151092113407|\n VTS|2009-01-03 07:07:00|2009-01-03 07:18:00| 1| 7.81| -73.994358| 40.690345|617733151037325311|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------------+\nonly showing top 20 rows\n\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "markdown", - "source": [ - "## 4. Compute the set of indices that fully covers each polygon in the right-hand dataframe\nThis is commonly referred to as a polyfill operation." - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "e127e5be-30e4-4507-8aa9-59399290b8f7" - } - } - }, - { - "cell_type": "code", - "source": [ - "from mosaic import grid_polyfill\n\nindexed_neighbourhoods = (\n neighbourhoods\n .select(\"*\", grid_polyfill(\"geometry\", lit(resolution)).alias(\"ix_set\"))\n .drop(\"geometry\")\n)\n\nindexed_neighbourhoods.show()" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "06e1f722-8530-47c2-aec5-f0a6cb4f9301" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
+-------------+-----------+--------+-------------------+--------------------+\n| borough|location_id|objectid| zone| ix_set|\n+-------------+-----------+--------+-------------------+--------------------+\n| Brooklyn| 123| 123| Homecrest|[6177331514226769...|\n| Manhattan| 153| 153| Marble Hill|[6177331229858201...|\n| Brooklyn| 112| 112| Greenpoint|[6177331237832622...|\n| Manhattan| 233| 233|UN/Turtle Bay South|[6177331238679347...|\n| Manhattan| 43| 43| Central Park|[6177331225792348...|\n| Queens| 201| 201| Rockaway Park|[6177331357831659...|\n| Queens| 131| 131| Jamaica Estates|[6177331242658693...|\n| Brooklyn| 111| 111|Green-Wood Cemetery|[6177331522277212...|\n| Queens| 226| 226| Sunnyside|[6177331238566625...|\n| Queens| 129| 129| Jackson Heights|[6177331243222302...|\n| Manhattan| 120| 120| Highbridge Park|[6177331231976325...|\n| Brooklyn| 76| 76| East New York|[6177331236938711...|\n| Manhattan| 24| 24| Bloomingdale|[6177331226458193...|\n| Manhattan| 202| 202| Roosevelt Island|[6177331237777571...|\n| Manhattan| 100| 100| Garment District|[6177331509717893...|\n|Staten Island| 251| 251| Westerleigh|[6177331466128588...|\n| Manhattan| 74| 74| East Harlem North|[6177331226508001...|\n| Queens| 98| 98| Fresh Meadows|[6177331242448977...|\n| Manhattan| 211| 211| SoHo|[6177331510784819...|\n| Bronx| 174| 174| Norwood|[6177331205497159...|\n+-------------+-----------+--------+-------------------+--------------------+\nonly showing top 20 rows\n\n
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
+-------------+-----------+--------+-------------------+--------------------+\n borough|location_id|objectid| zone| ix_set|\n+-------------+-----------+--------+-------------------+--------------------+\n Brooklyn| 123| 123| Homecrest|[6177331514226769...|\n Manhattan| 153| 153| Marble Hill|[6177331229858201...|\n Brooklyn| 112| 112| Greenpoint|[6177331237832622...|\n Manhattan| 233| 233|UN/Turtle Bay South|[6177331238679347...|\n Manhattan| 43| 43| Central Park|[6177331225792348...|\n Queens| 201| 201| Rockaway Park|[6177331357831659...|\n Queens| 131| 131| Jamaica Estates|[6177331242658693...|\n Brooklyn| 111| 111|Green-Wood Cemetery|[6177331522277212...|\n Queens| 226| 226| Sunnyside|[6177331238566625...|\n Queens| 129| 129| Jackson Heights|[6177331243222302...|\n Manhattan| 120| 120| Highbridge Park|[6177331231976325...|\n Brooklyn| 76| 76| East New York|[6177331236938711...|\n Manhattan| 24| 24| Bloomingdale|[6177331226458193...|\n Manhattan| 202| 202| Roosevelt Island|[6177331237777571...|\n Manhattan| 100| 100| Garment District|[6177331509717893...|\nStaten Island| 251| 251| Westerleigh|[6177331466128588...|\n Manhattan| 74| 74| East Harlem North|[6177331226508001...|\n Queens| 98| 98| Fresh Meadows|[6177331242448977...|\n Manhattan| 211| 211| SoHo|[6177331510784819...|\n Bronx| 174| 174| Norwood|[6177331205497159...|\n+-------------+-----------+--------+-------------------+--------------------+\nonly showing top 20 rows\n\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "markdown", - "source": [ - "## 5. ‘Explode’ the polygon index dataframe, such that each polygon index becomes a row in a new dataframe." - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "be2c88fd-9307-4b9a-ada8-fd714142d2d0" - } - } - }, - { - "cell_type": "code", - "source": [ - "exploded_indexed_neighbourhoods = (\n indexed_neighbourhoods\n .withColumn(\"ix\", explode(\"ix_set\"))\n .drop(\"ix_set\")\n)\n\nexploded_indexed_neighbourhoods.show()" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "132de00e-753f-49d6-ab3f-82517eef296a" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
+--------+-----------+--------+---------+------------------+\n| borough|location_id|objectid| zone| ix|\n+--------+-----------+--------+---------+------------------+\n|Brooklyn| 123| 123|Homecrest|617733151422676991|\n|Brooklyn| 123| 123|Homecrest|617733151503417343|\n|Brooklyn| 123| 123|Homecrest|617733151502893055|\n|Brooklyn| 123| 123|Homecrest|617733151502368767|\n|Brooklyn| 123| 123|Homecrest|617733151492407295|\n|Brooklyn| 123| 123|Homecrest|617733151488737279|\n|Brooklyn| 123| 123|Homecrest|617733151484542975|\n|Brooklyn| 123| 123|Homecrest|617733151484018687|\n|Brooklyn| 123| 123|Homecrest|617733151483494399|\n|Brooklyn| 123| 123|Homecrest|617733151425560575|\n|Brooklyn| 123| 123|Homecrest|617733151424511999|\n|Brooklyn| 123| 123|Homecrest|617733151423463423|\n|Brooklyn| 123| 123|Homecrest|617733151511019519|\n|Brooklyn| 123| 123|Homecrest|617733151505776639|\n|Brooklyn| 123| 123|Homecrest|617733151505252351|\n|Brooklyn| 123| 123|Homecrest|617733151504203775|\n|Brooklyn| 123| 123|Homecrest|617733151503679487|\n|Brooklyn| 123| 123|Homecrest|617733151503155199|\n|Brooklyn| 123| 123|Homecrest|617733151502630911|\n|Brooklyn| 123| 123|Homecrest|617733151502106623|\n+--------+-----------+--------+---------+------------------+\nonly showing top 20 rows\n\n
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
+--------+-----------+--------+---------+------------------+\n borough|location_id|objectid| zone| ix|\n+--------+-----------+--------+---------+------------------+\nBrooklyn| 123| 123|Homecrest|617733151422676991|\nBrooklyn| 123| 123|Homecrest|617733151503417343|\nBrooklyn| 123| 123|Homecrest|617733151502893055|\nBrooklyn| 123| 123|Homecrest|617733151502368767|\nBrooklyn| 123| 123|Homecrest|617733151492407295|\nBrooklyn| 123| 123|Homecrest|617733151488737279|\nBrooklyn| 123| 123|Homecrest|617733151484542975|\nBrooklyn| 123| 123|Homecrest|617733151484018687|\nBrooklyn| 123| 123|Homecrest|617733151483494399|\nBrooklyn| 123| 123|Homecrest|617733151425560575|\nBrooklyn| 123| 123|Homecrest|617733151424511999|\nBrooklyn| 123| 123|Homecrest|617733151423463423|\nBrooklyn| 123| 123|Homecrest|617733151511019519|\nBrooklyn| 123| 123|Homecrest|617733151505776639|\nBrooklyn| 123| 123|Homecrest|617733151505252351|\nBrooklyn| 123| 123|Homecrest|617733151504203775|\nBrooklyn| 123| 123|Homecrest|617733151503679487|\nBrooklyn| 123| 123|Homecrest|617733151503155199|\nBrooklyn| 123| 123|Homecrest|617733151502630911|\nBrooklyn| 123| 123|Homecrest|617733151502106623|\n+--------+-----------+--------+---------+------------------+\nonly showing top 20 rows\n\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "markdown", - "source": [ - "## 6. Join the new left- and right-hand dataframes directly on the index." - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "a369d19f-2917-4320-ab4a-e701953db7b5" - } - } - }, - { - "cell_type": "code", - "source": [ - "joined_df = (\n indexed_trips.alias(\"t\")\n .join(exploded_indexed_neighbourhoods.alias(\"n\"), on=\"ix\", how=\"inner\"))\njoined_df.count()" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "09a92bb5-4c72-4757-8176-01e14dbc3504" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
Out[25]: 4934937
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
Out[25]: 4934937
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "markdown", - "source": [ - "## Final notes\nMosaic provides support for Uber’s H3 spatial indexing library as a core part of the API, but we plan to add support for other index systems, including S2 and British National Grid in due course." - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "9825374a-d5d3-407f-9c0d-94c7514edacf" - } - } - } - ], - "metadata": { - "application/vnd.databricks.v1+notebook": { - "notebookName": "spatial-indexes", - "dashboards": [], - "notebookMetadata": { - "pythonIndentUnit": 2 - }, - "language": "python", - "widgets": {}, - "notebookOrigID": 4066942804256643 - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} \ No newline at end of file diff --git a/v0.3.x/_sources/usage/install-gdal.rst.txt b/v0.3.x/_sources/usage/install-gdal.rst.txt deleted file mode 100644 index b3a583051..000000000 --- a/v0.3.x/_sources/usage/install-gdal.rst.txt +++ /dev/null @@ -1,66 +0,0 @@ -======================= -GDAL Installation guide -======================= - -Supported platforms -################### -In order to use Mosaic, you must have access to a Databricks cluster running -Databricks Runtime 11.3 or higher. -If you have cluster creation permissions in your Databricks -workspace, you can create a cluster using the instructions -`here `__. - -You will also need "Can Manage" permissions on this cluster in order to attach the -Mosaic library to your cluster. A workspace administrator will be able to grant -these permissions and more information about cluster permissions can be found -in our documentation -`here `__. - -GDAL Installation -#################### - -Setup GDAL files and scripts -**************************** -Mosaic requires GDAL to be installed on the cluster. The easiest way to do this is to use the -the mos.setup_gdal() function. This function will extract the GDAL files and scripts from the -mosaic library and place them in the /dbfs/FileStore/geospatial/mosaic/gdal/ directory. -This call is no longer needed in versions >= 0.3.12. The shared objects are now included in the -databricks-mosaic-gdal pip installable bundle. - -.. code-block:: py - - import mosaic as mos - - mos.enable_mosaic(spark, dbutils) - mos.setup_gdal(spark) - GDAL setup complete. - Shared objects (*.so) stored in: /dbfs/FileStore/geospatial/mosaic/gdal/. - Init script stored in: /dbfs/FileStore/geospatial/mosaic/gdal/. - Please restart the cluster with the generated init script to complete the setup. - -Configure the init script -************************** -After the mos.setup_gdal() function has been run, you will need to configure the cluster to use the -init script. For versions >= 0.3.12, we are required to use the following init script: -`here `__. -The init script can be set by clicking on the "Edit" button on the cluster page and adding -the following to the "Advanced Options" section: - -.. figure:: ../images/init_script.png - :figclass: doc-figure - - Fig 1. Init script configuration - -Enable GDAL for a notebook -*********************************** -Once the cluster has been restarted, you can enable GDAL for a notebook by running the following -code at the top of the notebook: - -.. code-block:: py - - import mosaic as mos - - mos.enable_mosaic(spark, dbutils) - mos.enable_gdal(spark) - GDAL enabled. - GDAL 3.4.3, released 2022/04/22 \ No newline at end of file diff --git a/v0.3.x/_sources/usage/installation.rst.txt b/v0.3.x/_sources/usage/installation.rst.txt deleted file mode 100644 index 11263e11a..000000000 --- a/v0.3.x/_sources/usage/installation.rst.txt +++ /dev/null @@ -1,108 +0,0 @@ -================== -Installation guide -================== - -Supported platforms -################### - -.. warning:: - From versions after 0.3.x, Mosaic will require either - * Databricks Runtime 11.2+ with Photon enabled - * Databricks Runtime for ML 11.2+ - - Mosaic 0.3 series does not support DBR 13 (coming soon); - also, DBR 10 is no longer supported in Mosaic. - -We recommend using Databricks Runtime versions 11.3 LTS or 12.2 LTS with Photon enabled; -this will leverage the Databricks H3 expressions when using H3 grid system. -As of the 0.3.11 release, Mosaic issues the following warning when initialized on a cluster -that is neither Photon Runtime nor Databricks Runtime ML [`ADB `__ | `AWS `__ | `GCP `__]: - - DEPRECATION WARNING: Mosaic is not supported on the selected Databricks Runtime. Mosaic will stop working on this cluster after v0.3.x. Please use a Databricks Photon-enabled Runtime (for performance benefits) or Runtime ML (for spatial AI benefits). - -If you are receiving this warning in v0.3.11+, you will want to begin to plan for a supported runtime. -The reason we are making this change is that we are streamlining Mosaic -internals to be more aligned with future product APIs which are powered by Photon. Along this direction -of change, Mosaic will be standardizing to JTS as its default and supported Vector Geometry Provider. - -If you have cluster creation permissions in your Databricks -workspace, you can create a cluster using the instructions -`here `__. - -You will also need "Can Manage" permissions on this cluster in order to attach the -Mosaic library to your cluster. A workspace administrator will be able to grant -these permissions and more information about cluster permissions can be found -in our documentation -`here `__. - -Package installation -#################### - -Installation from PyPI -********************** -Python users can install the library directly from `PyPI `__ -using the instructions `here `__ -or from within a Databricks notebook using the :code:`%pip` magic command, e.g. - -.. code-block:: bash - - %pip install databricks-mosaic - -Installation from release artifacts -*********************************** -Alternatively, you can access the latest release artifacts `here `__ -and manually attach the appropriate library to your cluster. - -Which artifact you choose to attach will depend on the language API you intend to use. - -* For Python API users, choose the Python .whl file. -* For Scala users, take the Scala JAR (packaged with all necessary dependencies). -* For R users, download the Scala JAR and the R bindings library [see the sparkR readme](R/sparkR-mosaic/README.md). - -Instructions for how to attach libraries to a Databricks cluster can be found `here `__. - -Automated SQL registration -************************** -If you would like to use Mosaic's functions in pure SQL (in a SQL notebook, from a business intelligence tool, -or via a middleware layer such as Geoserver, perhaps) then you can configure -"Automatic SQL Registration" using the instructions `here `__. - -Enabling the Mosaic functions -############################# -The mechanism for enabling the Mosaic functions varies by language: - -.. tabs:: - .. code-tab:: py - - from mosaic import enable_mosaic - enable_mosaic(spark, dbutils) - - .. code-tab:: scala - - import com.databricks.labs.mosaic.functions.MosaicContext - import com.databricks.labs.mosaic.H3 - import com.databricks.labs.mosaic.JTS - - val mosaicContext = MosaicContext.build(H3, JTS) - import mosaicContext.functions._ - - .. code-tab:: r R - - library(sparkrMosaic) - enableMosaic() - - -SQL usage -********* -If you have not employed :ref:`Automatic SQL registration`, you will need to -register the Mosaic SQL functions in your SparkSession from a Scala notebook cell: - -.. code-block:: scala - - import com.databricks.labs.mosaic.functions.MosaicContext - import com.databricks.labs.mosaic.H3 - import com.databricks.labs.mosaic.JTS - - val mosaicContext = MosaicContext.build(H3, JTS) - mosaicContext.register(spark) - diff --git a/v0.3.x/_sources/usage/kepler.ipynb.txt b/v0.3.x/_sources/usage/kepler.ipynb.txt deleted file mode 100644 index 5c33a3e2c..000000000 --- a/v0.3.x/_sources/usage/kepler.ipynb.txt +++ /dev/null @@ -1,987 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "source": [ - "# Kepler visualizations" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "5dbca100-ca8d-4cb3-be39-72d2aeb85077" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "You can use the `%%mosaic_kepler` magic function to visualise data using [Kepler.gl](https://kepler.gl/).\n", - "\n", - "The mosaic_kepler magic function accepts four parameters:\n", - "\n", - "1) `dataset`: Can be a Spark dataset or a string representing a table/view name\n", - "\n", - "2) `column_name`: The column that needs to be plotted, can be either a geometry column (`WKT`, `WKB` or Mosaic internal format) or a column containing a spatial grid index ID\n", - "\n", - "3) `feature_type`: The type of data to be plotted. Valid values are `geometry` (if SRID=4326), `geometry()` (where `` is the SRID used by the geometry column) and `h3`\n", - "\n", - "4) `limit`: The maximum number of objects to plot. The default limit is `1000`\n", - "\n", - "Usage:\n", - "```\n", - "%%mosaic_kepler\n", - "dataset column_name feature_type [limit]\n", - "```\n", - "\n", - "This magic function is only available in python. It can be used from notebooks with other default languages by storing the intermediate result in a temporary view, and then adding a python cell that uses the `mosaic_kepler` with the temporary view created from another language." - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "a2712c52-9c84-427e-bff8-814b9fa35d86" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "## Examples" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "573fa05d-6dfd-414e-84c4-6f3618540b60" - } - } - }, - { - "cell_type": "code", - "source": [ - "%pip install databricks-mosaic --quiet" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "c73e5956-dec2-4206-be2d-99bca42d2c93" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
Python interpreter will be restarted.\nPython interpreter will be restarted.\n
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
Python interpreter will be restarted.\nPython interpreter will be restarted.\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "code", - "source": [ - "from pyspark.sql.functions import *\n", - "import mosaic as mos\n", - "mos.enable_mosaic(spark, dbutils)" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "a18dcbe7-1a01-45f2-a961-dd0f0284cf9c" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "markdown", - "source": [ - "### Download example shapes" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "2a997c83-5aff-4463-8c64-a1dc7a55d7d3" - } - } - }, - { - "cell_type": "code", - "source": [ - "import requests\n", - "\n", - "req = requests.get('https://data.cityofnewyork.us/api/geospatial/d3c5-ddgc?method=export&format=GeoJSON')\n", - "with open('/dbfs/tmp/nyc_taxi_zones.geojson', 'wb') as f:\n", - " f.write(req.content)" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "93072805-dd95-4518-9099-47ca7e85b62d" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "code", - "source": [ - "neighbourhoods = (\n", - " spark.read\n", - " .option(\"multiline\", \"true\")\n", - " .format(\"json\")\n", - " .load(\"dbfs:/tmp/nyc_taxi_zones.geojson\")\n", - " \n", - " # Extract geoJSON values for shapes\n", - " .select(\"type\", explode(col(\"features\")).alias(\"feature\"))\n", - " .select(\"type\", col(\"feature.properties\").alias(\"properties\"), to_json(col(\"feature.geometry\")).alias(\"geom_json\"))\n", - " \n", - " # Mosaic internal representation\n", - " .withColumn(\"geom_internal\", mos.st_geomfromgeojson(\"geom_json\"))\n", - " \n", - " # WKT representation\n", - " .withColumn(\"geom_wkt\", mos.st_aswkt(col(\"geom_internal\")))\n", - " \n", - " # WKB representation\n", - " .withColumn(\"geom_wkb\", mos.st_aswkb(col(\"geom_internal\")))\n", - " \n", - " # Limit to only 1 shape\n", - " .limit(1)\n", - ")\n", - "\n", - "neighbourhoods.show()" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "eb739b60-a368-4dc9-9cf7-2f4346ffb06a" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
+-----------------+--------------------+--------------------+--------------------+--------------------+--------------------+\n| type| properties| geom_json| geom_internal| geom_wkt| geom_wkb|\n+-----------------+--------------------+--------------------+--------------------+--------------------+--------------------+\n|FeatureCollection|{EWR, 1, 1, 0.000...|{"coordinates":[[...|{6, 4326, [[[-74....|MULTIPOLYGON (((-...|[01 06 00 00 00 0...|\n+-----------------+--------------------+--------------------+--------------------+--------------------+--------------------+\n\n
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
+-----------------+--------------------+--------------------+--------------------+--------------------+--------------------+\n type| properties| geom_json| geom_internal| geom_wkt| geom_wkb|\n+-----------------+--------------------+--------------------+--------------------+--------------------+--------------------+\nFeatureCollection|{EWR, 1, 1, 0.000...|{"coordinates":[[...|{6, 4326, [[[-74....|MULTIPOLYGON (((-...|[01 06 00 00 00 0...|\n+-----------------+--------------------+--------------------+--------------------+--------------------+--------------------+\n\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "markdown", - "source": [ - "### Plot geometries from Spark dataset" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "0c74d4f1-dbe6-4117-b752-4761b6a5d692" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "#### Internal geometry type" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "4109bf9f-479e-47f1-aea5-fb881136c49e" - } - } - }, - { - "cell_type": "code", - "source": [ - "%%mosaic_kepler\n", - "neighbourhoods \"geom_internal\" \"geometry\"" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "99be3b7a-3678-44bc-8d4a-ac35346cd724" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter\n
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter\n
" - ] - } - }, - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "", - "textData": null, - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "htmlSandbox", - "arguments": {} - } - }, - "data": { - "text/html": [ - "" - ] - } - }, - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "Kepler.gl
", - "textData": null, - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "htmlSandbox", - "arguments": {} - } - }, - "data": { - "text/html": [ - "Kepler.gl
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "markdown", - "source": [ - "![mosaic kepler map example geometry](../images/kepler-1.png)" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "34b3328f-2966-4b6f-859f-325eeec04619" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "#### WKT geometry type" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "f6d1c289-b007-4e40-b354-4c59fef9c2c4" - } - } - }, - { - "cell_type": "code", - "source": [ - "%%mosaic_kepler\n", - "neighbourhoods \"geom_wkt\" \"geometry\"" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "84ee5934-ed9c-4ee8-affd-dd347f375eec" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter\n
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter\n
" - ] - } - }, - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "", - "textData": null, - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "htmlSandbox", - "arguments": {} - } - }, - "data": { - "text/html": [ - "" - ] - } - }, - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "Kepler.gl
", - "textData": null, - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "htmlSandbox", - "arguments": {} - } - }, - "data": { - "text/html": [ - "Kepler.gl
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "markdown", - "source": [ - "![mosaic kepler map example geometry](../images/kepler-1.png)" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "b81a56b6-3d7c-4c87-91b2-fecc2f77333c" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "#### WKB geometry type" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "2acdd70b-decd-4654-8927-9f821e728864" - } - } - }, - { - "cell_type": "code", - "source": [ - "%%mosaic_kepler\n", - "neighbourhoods \"geom_wkb\" \"geometry\"" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "0ddd1cad-dabf-4a9d-9e89-4406e2fda6e4" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter\n
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter\n
" - ] - } - }, - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "", - "textData": null, - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "htmlSandbox", - "arguments": {} - } - }, - "data": { - "text/html": [ - "" - ] - } - }, - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "Kepler.gl
", - "textData": null, - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "htmlSandbox", - "arguments": {} - } - }, - "data": { - "text/html": [ - "Kepler.gl
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "markdown", - "source": [ - "![mosaic kepler map example geometry](../images/kepler-1.png)" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "0f0deddf-3408-470d-8e9a-a6d066d23697" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "### Plot geometries from table/view" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "590cb32e-2b3f-4ad7-b609-ffef9ae17967" - } - } - }, - { - "cell_type": "code", - "source": [ - "neighbourhoods.createOrReplaceTempView(\"temp_view_neighbourhoods\")" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "782fcc2e-d868-4819-bb01-9c4ea4bafb36" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "code", - "source": [ - "%%mosaic_kepler\n", - "\"temp_view_neighbourhoods\" \"geom_wkt\" \"geometry\"" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "fe84fa59-998d-4b9a-82c5-f280393ae244" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter\n
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter\n
" - ] - } - }, - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "", - "textData": null, - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "htmlSandbox", - "arguments": {} - } - }, - "data": { - "text/html": [ - "" - ] - } - }, - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "Kepler.gl
", - "textData": null, - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "htmlSandbox", - "arguments": {} - } - }, - "data": { - "text/html": [ - "Kepler.gl
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "markdown", - "source": [ - "![mosaic kepler map example geometry](../images/kepler-1.png)" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "9d7dd0c3-64c5-43bb-aecd-287635929970" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "### Plot H3 indexes" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "d34979d6-45e5-4a6f-a12a-52e46cb1e946" - } - } - }, - { - "cell_type": "code", - "source": [ - "neighbourhood_chips = (neighbourhoods\n", - " .limit(1)\n", - " .select(mos.grid_tessellateexplode(\"geom_internal\", lit(9)))\n", - " .select(\"index.*\")\n", - " )\n", - "\n", - "neighbourhood_chips.show()" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "86cdd4f3-34c5-4365-8108-303ca63d97af" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
+-------+------------------+--------------------+\n|is_core| index_id| wkb|\n+-------+------------------+--------------------+\n| true|617733150781997055|[01 03 00 00 00 0...|\n| true|617733150856445951|[01 03 00 00 00 0...|\n| true|617733150856970239|[01 03 00 00 00 0...|\n| true|617733150784094207|[01 03 00 00 00 0...|\n| true|617733150843600895|[01 03 00 00 00 0...|\n| true|617733150843863039|[01 03 00 00 00 0...|\n| true|617733150844125183|[01 03 00 00 00 0...|\n| true|617733150784880639|[01 03 00 00 00 0...|\n| true|617733150844387327|[01 03 00 00 00 0...|\n| true|617733150844649471|[01 03 00 00 00 0...|\n| true|617733150785404927|[01 03 00 00 00 0...|\n| true|617733150844911615|[01 03 00 00 00 0...|\n| true|617733150785667071|[01 03 00 00 00 0...|\n| true|617733150845173759|[01 03 00 00 00 0...|\n| true|617733150785929215|[01 03 00 00 00 0...|\n| true|617733150786453503|[01 03 00 00 00 0...|\n| true|617733150846222335|[01 03 00 00 00 0...|\n| true|617733150847270911|[01 03 00 00 00 0...|\n| true|617733150847795199|[01 03 00 00 00 0...|\n| true|617733150848057343|[01 03 00 00 00 0...|\n+-------+------------------+--------------------+\nonly showing top 20 rows\n\n
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
+-------+------------------+--------------------+\nis_core| index_id| wkb|\n+-------+------------------+--------------------+\n true|617733150781997055|[01 03 00 00 00 0...|\n true|617733150856445951|[01 03 00 00 00 0...|\n true|617733150856970239|[01 03 00 00 00 0...|\n true|617733150784094207|[01 03 00 00 00 0...|\n true|617733150843600895|[01 03 00 00 00 0...|\n true|617733150843863039|[01 03 00 00 00 0...|\n true|617733150844125183|[01 03 00 00 00 0...|\n true|617733150784880639|[01 03 00 00 00 0...|\n true|617733150844387327|[01 03 00 00 00 0...|\n true|617733150844649471|[01 03 00 00 00 0...|\n true|617733150785404927|[01 03 00 00 00 0...|\n true|617733150844911615|[01 03 00 00 00 0...|\n true|617733150785667071|[01 03 00 00 00 0...|\n true|617733150845173759|[01 03 00 00 00 0...|\n true|617733150785929215|[01 03 00 00 00 0...|\n true|617733150786453503|[01 03 00 00 00 0...|\n true|617733150846222335|[01 03 00 00 00 0...|\n true|617733150847270911|[01 03 00 00 00 0...|\n true|617733150847795199|[01 03 00 00 00 0...|\n true|617733150848057343|[01 03 00 00 00 0...|\n+-------+------------------+--------------------+\nonly showing top 20 rows\n\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "code", - "source": [ - "%%mosaic_kepler\n", - "neighbourhood_chips \"index_id\" \"h3\"" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "84f6d1d7-b270-498b-b1fe-fe6d17e0e713" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter\n
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter\n
" - ] - } - }, - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "", - "textData": null, - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "htmlSandbox", - "arguments": {} - } - }, - "data": { - "text/html": [ - "" - ] - } - }, - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "Kepler.gl
", - "textData": null, - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "htmlSandbox", - "arguments": {} - } - }, - "data": { - "text/html": [ - "Kepler.gl
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "markdown", - "source": [ - "![mosaic kepler map example H3 indexes](../images/kepler-2.png)" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "a9d921cb-5994-42a9-9518-626486cd1227" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "### Plot H3 chips" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "64cb0e7f-be2e-48f9-bea8-35a147e3f60c" - } - } - }, - { - "cell_type": "code", - "source": [ - "%%mosaic_kepler\n", - "neighbourhood_chips \"wkb\" \"geometry\"" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "dbe03c2b-a2c2-4b17-a44c-16891e81d3d0" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter\n
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter\n
" - ] - } - }, - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "", - "textData": null, - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "htmlSandbox", - "arguments": {} - } - }, - "data": { - "text/html": [ - "" - ] - } - }, - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "Kepler.gl
", - "textData": null, - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "htmlSandbox", - "arguments": {} - } - }, - "data": { - "text/html": [ - "Kepler.gl
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "markdown", - "source": [ - "![mosaic kepler map example h3 chips](../images/kepler-3.png)" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "6c8244f4-4c03-4d12-9d06-d5174ef94626" - } - } - } - ], - "metadata": { - "application/vnd.databricks.v1+notebook": { - "notebookName": "kepler", - "dashboards": [], - "notebookMetadata": { - "pythonIndentUnit": 2 - }, - "language": "python", - "widgets": {}, - "notebookOrigID": 2874007245243191 - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/v0.3.x/_sources/usage/quickstart.ipynb.txt b/v0.3.x/_sources/usage/quickstart.ipynb.txt deleted file mode 100644 index a643d848b..000000000 --- a/v0.3.x/_sources/usage/quickstart.ipynb.txt +++ /dev/null @@ -1,10236 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "source": [ - "# Quickstart notebook\nThe example code here shows how to get up and running with Mosaic using the Python API." - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "c247678b-66ab-4879-b331-bb0532826530" - } - } - }, - { - "cell_type": "code", - "source": [ - "from pyspark.sql.functions import *" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "aaf89a78-8b1f-4e27-8cc8-3fa382ff8210" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "markdown", - "source": [ - "## Enable Mosaic in the notebook\nTo get started, you'll need to attach the python library to your cluster and execute the `enable_mosaic` function." - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "ec0b86d5-e58c-478a-824b-e1165fb267de" - } - } - }, - { - "cell_type": "code", - "source": [ - "from mosaic import enable_mosaic\nenable_mosaic(spark, dbutils)" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "ecb6237c-050b-47c6-98ed-6942a50472e3" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "markdown", - "source": [ - "Mosaic has extra configuration options. Check the docs for more details." - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "d774f893-1152-41de-adde-bdad37e755f7" - } - } - }, - { - "cell_type": "code", - "source": [ - "help(enable_mosaic)" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "10776858-768a-450f-9281-6a00e80d04c2" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
Help on function enable_mosaic in module mosaic.api.enable:\n\nenable_mosaic(spark: pyspark.sql.session.SparkSession, dbutils=None) -> None\n Enable Mosaic functions.\n \n Use this function at the start of your workflow to ensure all of the required dependencies are installed and\n Mosaic is configured according to your needs.\n \n Parameters\n ----------\n spark : pyspark.sql.SparkSession\n The active SparkSession.\n dbutils : dbruntime.dbutils.DBUtils\n The dbutils object used for `display` and `displayHTML` functions.\n Optional, only applicable to Databricks users.\n \n Returns\n -------\n \n Notes\n -----\n Users can control various aspects of Mosaic's operation with the following Spark confs:\n \n - `spark.databricks.labs.mosaic.jar.autoattach`: 'true' (default) or 'false'\n Automatically attach the Mosaic JAR to the Databricks cluster? (Optional)\n - `spark.databricks.labs.mosaic.jar.location`\n Explicitly specify the path to the Mosaic JAR.\n (Optional and not required at all in a standard Databricks environment).\n - `spark.databricks.labs.mosaic.geometry.api`: 'OGC' (default) or 'JTS'\n Explicitly specify the underlying geometry library to use for spatial operations. (Optional)\n - `spark.databricks.labs.mosaic.index.system`: 'H3' (default)\n Explicitly specify the index system to use for optimized spatial joins. (Optional)\n\n
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
Help on function enable_mosaic in module mosaic.api.enable:\n\nenable_mosaic(spark: pyspark.sql.session.SparkSession, dbutils=None) -> None\n Enable Mosaic functions.\n \n Use this function at the start of your workflow to ensure all of the required dependencies are installed and\n Mosaic is configured according to your needs.\n \n Parameters\n ----------\n spark : pyspark.sql.SparkSession\n The active SparkSession.\n dbutils : dbruntime.dbutils.DBUtils\n The dbutils object used for `display` and `displayHTML` functions.\n Optional, only applicable to Databricks users.\n \n Returns\n -------\n \n Notes\n -----\n Users can control various aspects of Mosaic's operation with the following Spark confs:\n \n - `spark.databricks.labs.mosaic.jar.autoattach`: 'true' (default) or 'false'\n Automatically attach the Mosaic JAR to the Databricks cluster? (Optional)\n - `spark.databricks.labs.mosaic.jar.location`\n Explicitly specify the path to the Mosaic JAR.\n (Optional and not required at all in a standard Databricks environment).\n - `spark.databricks.labs.mosaic.geometry.api`: 'OGC' (default) or 'JTS'\n Explicitly specify the underlying geometry library to use for spatial operations. (Optional)\n - `spark.databricks.labs.mosaic.index.system`: 'H3' (default)\n Explicitly specify the index system to use for optimized spatial joins. (Optional)\n\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "markdown", - "source": [ - "## Geometry constructors and the Mosaic internal geometry format" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "ac3649d8-5561-4370-b5d3-a36bf5068fd1" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "Mosaic allows users to create new Point geometries from a pair of Spark DoubleType columns." - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "c9e64d22-ebbc-4ea7-97aa-2dd6e240c9ad" - } - } - }, - { - "cell_type": "code", - "source": [ - "from mosaic import st_point\n\nlons = [-80., -80., -70., -70., -80.]\nlats = [ 35., 45., 45., 35., 35.]\n\nbounds_df = (\n spark\n .createDataFrame({\"lon\": lon, \"lat\": lat} for lon, lat in zip(lons, lats))\n .coalesce(1)\n .withColumn(\"point_geom\", st_point(\"lon\", \"lat\"))\n)\nbounds_df.show()" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "aa85d1b2-8ec1-4879-87b4-cf55eb12820c" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
+----+-----+--------------------+\n| lat| lon| point_geom|\n+----+-----+--------------------+\n|35.0|-80.0|{1, [[[-80.0, 35....|\n|45.0|-80.0|{1, [[[-80.0, 45....|\n|45.0|-70.0|{1, [[[-70.0, 45....|\n|35.0|-70.0|{1, [[[-70.0, 35....|\n|35.0|-80.0|{1, [[[-80.0, 35....|\n+----+-----+--------------------+\n\n
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
+----+-----+--------------------+\n lat| lon| point_geom|\n+----+-----+--------------------+\n35.0|-80.0|{1, [[[-80.0, 35....|\n45.0|-80.0|{1, [[[-80.0, 45....|\n45.0|-70.0|{1, [[[-70.0, 45....|\n35.0|-70.0|{1, [[[-70.0, 35....|\n35.0|-80.0|{1, [[[-80.0, 35....|\n+----+-----+--------------------+\n\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "markdown", - "source": [ - "Mosaic Point geometries can be aggregated into LineString and Polygon geometries using the respective constructors." - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "e0229f66-1fe7-4218-905f-6fe265fd2441" - } - } - }, - { - "cell_type": "code", - "source": [ - "from mosaic import st_makeline\n\nbounds_df = (\n bounds_df\n .groupBy()\n .agg(collect_list(\"point_geom\").alias(\"bounding_coords\"))\n .select(st_makeline(\"bounding_coords\").alias(\"bounding_ring\"))\n)\nbounds_df.show()" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "c143e704-333d-4c15-800d-7dcefc924f71" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
+--------------------+\n| bounding_ring|\n+--------------------+\n|{3, [[[-80.0, 35....|\n+--------------------+\n\n
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
+--------------------+\n bounding_ring|\n+--------------------+\n{3, [[[-80.0, 35....|\n+--------------------+\n\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "code", - "source": [ - "from mosaic import st_makepolygon\n\nbounds_df = bounds_df.select(st_makepolygon(\"bounding_ring\").alias(\"bounds\"))\nbounds_df.show()" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "0282fcbd-f9b1-4708-b015-dc9e0fac9072" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
+--------------------+\n| bounds|\n+--------------------+\n|{5, [[[-80.0, 35....|\n+--------------------+\n\n
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
+--------------------+\n bounds|\n+--------------------+\n{5, [[[-80.0, 35....|\n+--------------------+\n\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "markdown", - "source": [ - "## Geometry clipping without an index" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "459a46e8-e7cb-4bb0-a167-e359889d15a9" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "Mosaic implements set intersection functions: contains, intersects, overlaps etc. Here you can see `st_contains` being used to clip points by a polygon geometry." - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "02d90b72-81b4-48a9-b117-b7976bca13aa" - } - } - }, - { - "cell_type": "code", - "source": [ - "tripsTable = spark.table(\"delta.`/databricks-datasets/nyctaxi/tables/nyctaxi_yellow`\")" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "e5ec8d70-8d6b-44b9-ad2a-ef593e2011bd" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "code", - "source": [ - "from mosaic import st_contains\ntrips = (\n tripsTable\n .limit(5_000_000)\n .repartition(sc.defaultParallelism * 20)\n .drop(\"vendorId\", \"rateCodeId\", \"store_and_fwd_flag\", \"payment_type\")\n .withColumn(\"pickup_geom\", st_point(\"pickup_longitude\", \"pickup_latitude\"))\n .withColumn(\"dropoff_geom\", st_point(\"dropoff_longitude\", \"dropoff_latitude\"))\n .crossJoin(bounds_df)\n .where(st_contains(\"bounds\", \"pickup_geom\"))\n .where(st_contains(\"bounds\", \"dropoff_geom\"))\n .cache()\n)" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "ad0e72a9-4e2e-45fe-ba39-d2933859154d" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "code", - "source": [ - "trips.show()" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "9aa22657-47c6-4de6-8e48-733a150b00a0" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+\n|vendor_id| pickup_datetime| dropoff_datetime|passenger_count|trip_distance|pickup_longitude|pickup_latitude|rate_code_id|dropoff_longitude|dropoff_latitude|fare_amount|extra|mta_tax|tip_amount|tolls_amount|total_amount| pickup_geom| dropoff_geom| bounds|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+\n| CMT|2009-10-12 19:35:21|2009-10-12 19:44:36| 1| 1.4| -74.000018| 40.720534| null| -73.995008| 40.734112| 6.5| 0.0| null| 0.0| 0.0| 6.5|{1, [[[-74.000018...|{1, [[[-73.995008...|{5, [[[-80.0, 35....|\n| CMT|2010-09-02 07:37:40|2010-09-02 07:53:17| 1| 6.8| -74.016477| 40.70971| 1| -73.97509| 40.759392| 17.3| 0.0| 0.5| 1.0| 0.0| 18.8|{1, [[[-74.016477...|{1, [[[-73.97509,...|{5, [[[-80.0, 35....|\n| CMT|2009-11-28 13:00:00|2009-11-28 13:01:57| 1| 0.5| -73.999666| 40.733384| null| -73.991751| 40.730273| 3.3| 0.0| 0.5| 0.0| 0.0| 3.8|{1, [[[-73.999666...|{1, [[[-73.991751...|{5, [[[-80.0, 35....|\n| CMT|2009-11-30 07:49:13|2009-11-30 08:12:38| 1| 12.9| -74.007033| 40.734931| null| -73.87277| 40.774319| 29.7| 0.0| 0.5| 6.04| 0.0| 36.24|{1, [[[-74.007033...|{1, [[[-73.87277,...|{5, [[[-80.0, 35....|\n| VTS|2009-01-03 01:55:00|2009-01-03 02:04:00| 5| 2.09| -73.993217| 40.72416| null| -73.9944| 40.74624| 7.7| 0.5| null| 0.0| 0.0| 8.2|{1, [[[-73.993217...|{1, [[[-73.9944, ...|{5, [[[-80.0, 35....|\n| VTS|2009-11-09 17:21:00|2009-11-09 17:32:00| 1| 5.19| -74.010003| 40.707022| null| -73.963853| 40.75677| 13.3| 1.0| 0.5| 0.0| 0.0| 14.8|{1, [[[-74.010003...|{1, [[[-73.963853...|{5, [[[-80.0, 35....|\n| VTS|2010-06-09 01:13:00|2010-06-09 01:27:00| 1| 8.09| -74.008697| 40.707335| 1| -73.949605| 40.78761| 19.7| 0.5| 0.5| 0.0| 0.0| 20.7|{1, [[[-74.008697...|{1, [[[-73.949605...|{5, [[[-80.0, 35....|\n| VTS|2009-01-28 18:36:00|2009-01-28 18:50:00| 1| 2.92| -74.008823| 40.72089| null| -73.994055| 40.747588| 10.1| 1.0| null| 3.0| 0.0| 14.1|{1, [[[-74.008823...|{1, [[[-73.994055...|{5, [[[-80.0, 35....|\n| CMT|2010-06-02 14:21:05|2010-06-02 14:28:43| 1| 5.0| -74.011653| 40.702604| 1| -73.971851| 40.749807| 12.5| 0.0| 0.5| 2.6| 0.0| 15.6|{1, [[[-74.011653...|{1, [[[-73.971851...|{5, [[[-80.0, 35....|\n| VTS|2009-11-26 15:38:00|2009-11-26 15:47:00| 5| 2.36| -73.997208| 40.722108| null| -73.99647| 40.748185| 8.1| 0.0| 0.5| 2.0| 0.0| 10.6|{1, [[[-73.997208...|{1, [[[-73.99647,...|{5, [[[-80.0, 35....|\n| CMT|2009-12-07 10:36:06|2009-12-07 10:42:26| 1| 1.3| -73.99067| 40.73065| null| -73.975539| 40.741353| 6.1| 0.0| 0.5| 0.0| 0.0| 6.6|{1, [[[-73.99067,...|{1, [[[-73.975539...|{5, [[[-80.0, 35....|\n| CMT|2009-11-15 09:11:42|2009-11-15 09:26:34| 1| 3.7| -73.990065| 40.687341| null| -73.999566| 40.730219| 12.1| 0.0| 0.5| 0.0| 0.0| 12.6|{1, [[[-73.990065...|{1, [[[-73.999566...|{5, [[[-80.0, 35....|\n| CMT|2010-06-27 17:27:25|2010-06-27 17:47:44| 2| 5.0| -74.008459| 40.712233| 1| -73.9516| 40.718877| 15.7| 0.0| 0.5| 3.0| 0.0| 19.2|{1, [[[-74.008459...|{1, [[[-73.9516, ...|{5, [[[-80.0, 35....|\n| VTS|2009-01-30 21:05:00|2009-01-30 21:34:00| 1| 5.99| -73.994397| 40.694843| null| -73.921257| 40.685107| 18.9| 0.5| null| 0.6| 0.0| 20.0|{1, [[[-73.994397...|{1, [[[-73.921257...|{5, [[[-80.0, 35....|\n| CMT|2009-01-14 07:43:53|2009-01-14 07:55:14| 2| 2.9| -74.007602| 40.725098| null| -73.977846| 40.751608| 9.3| 0.0| null| 0.0| 0.0| 9.3|{1, [[[-74.007602...|{1, [[[-73.977846...|{5, [[[-80.0, 35....|\n| VTS|2010-05-11 16:33:00|2010-05-11 16:41:00| 1| 0.99| -74.011205| 40.715468| 1| -74.011072| 40.708882| 5.7| 1.0| 0.5| 0.0| 0.0| 7.2|{1, [[[-74.011205...|{1, [[[-74.011072...|{5, [[[-80.0, 35....|\n| VTS|2009-01-19 09:43:00|2009-01-19 09:47:00| 1| 0.56| -73.991123| 40.731297| null| -73.98681| 40.736703| 4.1| 0.0| null| 0.0| 0.0| 4.1|{1, [[[-73.991123...|{1, [[[-73.98681,...|{5, [[[-80.0, 35....|\n| CMT|2009-11-14 15:46:36|2009-11-14 15:51:01| 2| 1.2| -74.008448| 40.734271| null| -74.006075| 40.720237| 4.9| 0.0| 0.5| 0.0| 0.0| 5.4|{1, [[[-74.008448...|{1, [[[-74.006075...|{5, [[[-80.0, 35....|\n| CMT|2009-11-17 16:50:35|2009-11-17 17:01:34| 1| 1.6| -74.00679| 40.730546| null| -73.9904| 40.73815| 7.7| 1.0| 0.5| 1.5| 0.0| 10.7|{1, [[[-74.00679,...|{1, [[[-73.9904, ...|{5, [[[-80.0, 35....|\n| CMT|2009-11-30 23:30:43|2009-11-30 23:42:54| 2| 2.9| -74.009605| 40.710155| null| -73.993875| 40.741554| 10.1| 0.5| 0.5| 2.22| 0.0| 13.32|{1, [[[-74.009605...|{1, [[[-73.993875...|{5, [[[-80.0, 35....|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+\nonly showing top 20 rows\n\n
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+\nvendor_id| pickup_datetime| dropoff_datetime|passenger_count|trip_distance|pickup_longitude|pickup_latitude|rate_code_id|dropoff_longitude|dropoff_latitude|fare_amount|extra|mta_tax|tip_amount|tolls_amount|total_amount| pickup_geom| dropoff_geom| bounds|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+\n CMT|2009-10-12 19:35:21|2009-10-12 19:44:36| 1| 1.4| -74.000018| 40.720534| null| -73.995008| 40.734112| 6.5| 0.0| null| 0.0| 0.0| 6.5|{1, [[[-74.000018...|{1, [[[-73.995008...|{5, [[[-80.0, 35....|\n CMT|2010-09-02 07:37:40|2010-09-02 07:53:17| 1| 6.8| -74.016477| 40.70971| 1| -73.97509| 40.759392| 17.3| 0.0| 0.5| 1.0| 0.0| 18.8|{1, [[[-74.016477...|{1, [[[-73.97509,...|{5, [[[-80.0, 35....|\n CMT|2009-11-28 13:00:00|2009-11-28 13:01:57| 1| 0.5| -73.999666| 40.733384| null| -73.991751| 40.730273| 3.3| 0.0| 0.5| 0.0| 0.0| 3.8|{1, [[[-73.999666...|{1, [[[-73.991751...|{5, [[[-80.0, 35....|\n CMT|2009-11-30 07:49:13|2009-11-30 08:12:38| 1| 12.9| -74.007033| 40.734931| null| -73.87277| 40.774319| 29.7| 0.0| 0.5| 6.04| 0.0| 36.24|{1, [[[-74.007033...|{1, [[[-73.87277,...|{5, [[[-80.0, 35....|\n VTS|2009-01-03 01:55:00|2009-01-03 02:04:00| 5| 2.09| -73.993217| 40.72416| null| -73.9944| 40.74624| 7.7| 0.5| null| 0.0| 0.0| 8.2|{1, [[[-73.993217...|{1, [[[-73.9944, ...|{5, [[[-80.0, 35....|\n VTS|2009-11-09 17:21:00|2009-11-09 17:32:00| 1| 5.19| -74.010003| 40.707022| null| -73.963853| 40.75677| 13.3| 1.0| 0.5| 0.0| 0.0| 14.8|{1, [[[-74.010003...|{1, [[[-73.963853...|{5, [[[-80.0, 35....|\n VTS|2010-06-09 01:13:00|2010-06-09 01:27:00| 1| 8.09| -74.008697| 40.707335| 1| -73.949605| 40.78761| 19.7| 0.5| 0.5| 0.0| 0.0| 20.7|{1, [[[-74.008697...|{1, [[[-73.949605...|{5, [[[-80.0, 35....|\n VTS|2009-01-28 18:36:00|2009-01-28 18:50:00| 1| 2.92| -74.008823| 40.72089| null| -73.994055| 40.747588| 10.1| 1.0| null| 3.0| 0.0| 14.1|{1, [[[-74.008823...|{1, [[[-73.994055...|{5, [[[-80.0, 35....|\n CMT|2010-06-02 14:21:05|2010-06-02 14:28:43| 1| 5.0| -74.011653| 40.702604| 1| -73.971851| 40.749807| 12.5| 0.0| 0.5| 2.6| 0.0| 15.6|{1, [[[-74.011653...|{1, [[[-73.971851...|{5, [[[-80.0, 35....|\n VTS|2009-11-26 15:38:00|2009-11-26 15:47:00| 5| 2.36| -73.997208| 40.722108| null| -73.99647| 40.748185| 8.1| 0.0| 0.5| 2.0| 0.0| 10.6|{1, [[[-73.997208...|{1, [[[-73.99647,...|{5, [[[-80.0, 35....|\n CMT|2009-12-07 10:36:06|2009-12-07 10:42:26| 1| 1.3| -73.99067| 40.73065| null| -73.975539| 40.741353| 6.1| 0.0| 0.5| 0.0| 0.0| 6.6|{1, [[[-73.99067,...|{1, [[[-73.975539...|{5, [[[-80.0, 35....|\n CMT|2009-11-15 09:11:42|2009-11-15 09:26:34| 1| 3.7| -73.990065| 40.687341| null| -73.999566| 40.730219| 12.1| 0.0| 0.5| 0.0| 0.0| 12.6|{1, [[[-73.990065...|{1, [[[-73.999566...|{5, [[[-80.0, 35....|\n CMT|2010-06-27 17:27:25|2010-06-27 17:47:44| 2| 5.0| -74.008459| 40.712233| 1| -73.9516| 40.718877| 15.7| 0.0| 0.5| 3.0| 0.0| 19.2|{1, [[[-74.008459...|{1, [[[-73.9516, ...|{5, [[[-80.0, 35....|\n VTS|2009-01-30 21:05:00|2009-01-30 21:34:00| 1| 5.99| -73.994397| 40.694843| null| -73.921257| 40.685107| 18.9| 0.5| null| 0.6| 0.0| 20.0|{1, [[[-73.994397...|{1, [[[-73.921257...|{5, [[[-80.0, 35....|\n CMT|2009-01-14 07:43:53|2009-01-14 07:55:14| 2| 2.9| -74.007602| 40.725098| null| -73.977846| 40.751608| 9.3| 0.0| null| 0.0| 0.0| 9.3|{1, [[[-74.007602...|{1, [[[-73.977846...|{5, [[[-80.0, 35....|\n VTS|2010-05-11 16:33:00|2010-05-11 16:41:00| 1| 0.99| -74.011205| 40.715468| 1| -74.011072| 40.708882| 5.7| 1.0| 0.5| 0.0| 0.0| 7.2|{1, [[[-74.011205...|{1, [[[-74.011072...|{5, [[[-80.0, 35....|\n VTS|2009-01-19 09:43:00|2009-01-19 09:47:00| 1| 0.56| -73.991123| 40.731297| null| -73.98681| 40.736703| 4.1| 0.0| null| 0.0| 0.0| 4.1|{1, [[[-73.991123...|{1, [[[-73.98681,...|{5, [[[-80.0, 35....|\n CMT|2009-11-14 15:46:36|2009-11-14 15:51:01| 2| 1.2| -74.008448| 40.734271| null| -74.006075| 40.720237| 4.9| 0.0| 0.5| 0.0| 0.0| 5.4|{1, [[[-74.008448...|{1, [[[-74.006075...|{5, [[[-80.0, 35....|\n CMT|2009-11-17 16:50:35|2009-11-17 17:01:34| 1| 1.6| -74.00679| 40.730546| null| -73.9904| 40.73815| 7.7| 1.0| 0.5| 1.5| 0.0| 10.7|{1, [[[-74.00679,...|{1, [[[-73.9904, ...|{5, [[[-80.0, 35....|\n CMT|2009-11-30 23:30:43|2009-11-30 23:42:54| 2| 2.9| -74.009605| 40.710155| null| -73.993875| 40.741554| 10.1| 0.5| 0.5| 2.22| 0.0| 13.32|{1, [[[-74.009605...|{1, [[[-73.993875...|{5, [[[-80.0, 35....|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+\nonly showing top 20 rows\n\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "markdown", - "source": [ - "## Read from GeoJson, compute some basic geometry attributes" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "c9353ac7-aa07-4d75-8b16-0031803ea31e" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "You've seen how Mosaic can create geometries from Spark native data types but it also provides functions to translate Well Known Text (WKT), Well Known Binary (WKB) and GeoJSON representations to Mosaic geometries." - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "db5daf84-fc48-45ce-81a7-5af76b7b6010" - } - } - }, - { - "cell_type": "code", - "source": [ - "from mosaic import st_geomfromgeojson\n\ngeoJsonDF = (\n spark.read.format(\"json\")\n .load(\"dbfs:/FileStore/shared_uploads/stuart.lynn@databricks.com/NYC_Taxi_Zones.geojson\")\n .withColumn(\"geometry\", st_geomfromgeojson(to_json(col(\"geometry\"))))\n .select(\"properties.*\", \"geometry\")\n .drop(\"shape_area\", \"shape_leng\")\n)\n\ngeoJsonDF.show()" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "49505635-4e84-480e-9892-e3e816af2226" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
+-------------+-----------+--------+--------------------+--------------------+\n| borough|location_id|objectid| zone| geometry|\n+-------------+-----------+--------+--------------------+--------------------+\n| EWR| 1| 1| Newark Airport|{6, [[[-74.184452...|\n| Queens| 2| 2| Jamaica Bay|{6, [[[-73.823375...|\n| Bronx| 3| 3|Allerton/Pelham G...|{6, [[[-73.847926...|\n| Manhattan| 4| 4| Alphabet City|{6, [[[-73.971774...|\n|Staten Island| 5| 5| Arden Heights|{6, [[[-74.174217...|\n|Staten Island| 6| 6|Arrochar/Fort Wad...|{6, [[[-74.063673...|\n| Queens| 7| 7| Astoria|{6, [[[-73.904136...|\n| Queens| 8| 8| Astoria Park|{6, [[[-73.923340...|\n| Queens| 9| 9| Auburndale|{6, [[[-73.785024...|\n| Manhattan| 24| 24| Bloomingdale|{6, [[[-73.959536...|\n| Queens| 10| 10| Baisley Park|{6, [[[-73.783266...|\n| Brooklyn| 11| 11| Bath Beach|{6, [[[-74.001098...|\n| Manhattan| 12| 12| Battery Park|{6, [[[-74.015657...|\n| Manhattan| 13| 13| Battery Park City|{6, [[[-74.012441...|\n| Bronx| 18| 18| Bedford Park|{6, [[[-73.885139...|\n| Brooklyn| 25| 25| Boerum Hill|{6, [[[-73.981552...|\n| Brooklyn| 14| 14| Bay Ridge|{6, [[[-74.034073...|\n| Queens| 15| 15|Bay Terrace/Fort ...|{6, [[[-73.777403...|\n| Brooklyn| 22| 22| Bensonhurst West|{6, [[[-73.992549...|\n|Staten Island| 23| 23|Bloomfield/Emerso...|{6, [[[-74.195686...|\n+-------------+-----------+--------+--------------------+--------------------+\nonly showing top 20 rows\n\n
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
+-------------+-----------+--------+--------------------+--------------------+\n borough|location_id|objectid| zone| geometry|\n+-------------+-----------+--------+--------------------+--------------------+\n EWR| 1| 1| Newark Airport|{6, [[[-74.184452...|\n Queens| 2| 2| Jamaica Bay|{6, [[[-73.823375...|\n Bronx| 3| 3|Allerton/Pelham G...|{6, [[[-73.847926...|\n Manhattan| 4| 4| Alphabet City|{6, [[[-73.971774...|\nStaten Island| 5| 5| Arden Heights|{6, [[[-74.174217...|\nStaten Island| 6| 6|Arrochar/Fort Wad...|{6, [[[-74.063673...|\n Queens| 7| 7| Astoria|{6, [[[-73.904136...|\n Queens| 8| 8| Astoria Park|{6, [[[-73.923340...|\n Queens| 9| 9| Auburndale|{6, [[[-73.785024...|\n Manhattan| 24| 24| Bloomingdale|{6, [[[-73.959536...|\n Queens| 10| 10| Baisley Park|{6, [[[-73.783266...|\n Brooklyn| 11| 11| Bath Beach|{6, [[[-74.001098...|\n Manhattan| 12| 12| Battery Park|{6, [[[-74.015657...|\n Manhattan| 13| 13| Battery Park City|{6, [[[-74.012441...|\n Bronx| 18| 18| Bedford Park|{6, [[[-73.885139...|\n Brooklyn| 25| 25| Boerum Hill|{6, [[[-73.981552...|\n Brooklyn| 14| 14| Bay Ridge|{6, [[[-74.034073...|\n Queens| 15| 15|Bay Terrace/Fort ...|{6, [[[-73.777403...|\n Brooklyn| 22| 22| Bensonhurst West|{6, [[[-73.992549...|\nStaten Island| 23| 23|Bloomfield/Emerso...|{6, [[[-74.195686...|\n+-------------+-----------+--------+--------------------+--------------------+\nonly showing top 20 rows\n\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "markdown", - "source": [ - "Mosaic provides a number of functions for extracting the properties of geometries. Here are some that are relevant to Polygon geometries:" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "880c5fb4-c0b2-456b-9167-cb6327876dbd" - } - } - }, - { - "cell_type": "code", - "source": [ - "from mosaic import st_area, st_length\n(\n geoJsonDF\n .withColumn(\"calculatedArea\", abs(st_area(\"geometry\")))\n .withColumn(\"calculatedLength\", st_length(\"geometry\"))\n .select(\"geometry\", \"calculatedArea\", \"calculatedLength\")\n).show()" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "939d35fd-d868-4e73-8338-3cb8142fffe9" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
+--------------------+--------------------+--------------------+\n| geometry| calculatedArea| calculatedLength|\n+--------------------+--------------------+--------------------+\n|{6, [[[-74.184452...|7.823067885002562E-4| 0.1163574531886787|\n|{6, [[[-73.823375...|0.001422779097814599| 0.8431218810128789|\n|{6, [[[-73.847926...|3.144141568206508E-4| 0.08434110590105784|\n|{6, [[[-73.971774...| 7.94539194214528E-5| 0.03559982116907461|\n|{6, [[[-74.174217...|4.979574893632193E-4| 0.09214648985735088|\n|{6, [[[-74.063673...|4.046076598541714E-4| 0.12905753305870837|\n|{6, [[[-73.904136...|3.897879892739018...| 0.10741717112348065|\n|{6, [[[-73.923340...|2.658771690499072E-5|0.027590691195158792|\n|{6, [[[-73.785024...|3.384438031986125...| 0.0997840924710119|\n|{6, [[[-73.959536...|4.193691000471793E-5|0.034022318280805826|\n|{6, [[[-73.783266...|4.358238180810105...| 0.09983947941552027|\n|{6, [[[-74.001098...|2.029913532381591E-4| 0.07243934539937844|\n|{6, [[[-74.015657...|1.078595394871048...| 0.01759380786230351|\n|{6, [[[-74.012441...|4.874002713725957E-5| 0.04726120195723124|\n|{6, [[[-73.885139...|1.488501639473639E-4| 0.06979954985700013|\n|{6, [[[-73.981552...|1.241682673558662...| 0.04714581993191898|\n|{6, [[[-74.034073...|6.636590898190788E-4| 0.13622530962992194|\n|{6, [[[-73.777403...|4.588438269978550...| 0.1295148763926726|\n|{6, [[[-73.992549...|4.613649657988681...| 0.11844001178496774|\n|{6, [[[-74.195686...|0.002090822778761513| 0.3007595308122533|\n+--------------------+--------------------+--------------------+\nonly showing top 20 rows\n\n
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
+--------------------+--------------------+--------------------+\n geometry| calculatedArea| calculatedLength|\n+--------------------+--------------------+--------------------+\n{6, [[[-74.184452...|7.823067885002562E-4| 0.1163574531886787|\n{6, [[[-73.823375...|0.001422779097814599| 0.8431218810128789|\n{6, [[[-73.847926...|3.144141568206508E-4| 0.08434110590105784|\n{6, [[[-73.971774...| 7.94539194214528E-5| 0.03559982116907461|\n{6, [[[-74.174217...|4.979574893632193E-4| 0.09214648985735088|\n{6, [[[-74.063673...|4.046076598541714E-4| 0.12905753305870837|\n{6, [[[-73.904136...|3.897879892739018...| 0.10741717112348065|\n{6, [[[-73.923340...|2.658771690499072E-5|0.027590691195158792|\n{6, [[[-73.785024...|3.384438031986125...| 0.0997840924710119|\n{6, [[[-73.959536...|4.193691000471793E-5|0.034022318280805826|\n{6, [[[-73.783266...|4.358238180810105...| 0.09983947941552027|\n{6, [[[-74.001098...|2.029913532381591E-4| 0.07243934539937844|\n{6, [[[-74.015657...|1.078595394871048...| 0.01759380786230351|\n{6, [[[-74.012441...|4.874002713725957E-5| 0.04726120195723124|\n{6, [[[-73.885139...|1.488501639473639E-4| 0.06979954985700013|\n{6, [[[-73.981552...|1.241682673558662...| 0.04714581993191898|\n{6, [[[-74.034073...|6.636590898190788E-4| 0.13622530962992194|\n{6, [[[-73.777403...|4.588438269978550...| 0.1295148763926726|\n{6, [[[-73.992549...|4.613649657988681...| 0.11844001178496774|\n{6, [[[-74.195686...|0.002090822778761513| 0.3007595308122533|\n+--------------------+--------------------+--------------------+\nonly showing top 20 rows\n\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "code", - "source": [ - "geoJsonDF.count()" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "920599a2-6c52-40e4-8547-a99f757406a6" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
Out[12]: 263
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
Out[12]: 263
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "markdown", - "source": [ - "## Example point-in-poly with indexing" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "e0d34f66-7498-4a86-9dd3-b2664ebc535c" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "Mosaic has built-in support for the popular spatial indexing library, H3. The user has access to functions for generating point indices and the sets of indices covering polygons, allowing point-in-polygon joins to be transformed into deterministic SQL joins." - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "cb687786-0494-468d-b2e4-dbe847ea887b" - } - } - }, - { - "cell_type": "code", - "source": [ - "from mosaic import grid_longlatascellid\n\ntrips_with_geom = (\n trips\n .withColumn(\"pickup_h3\", grid_longlatascellid(lon=\"pickup_longitude\", lat=\"pickup_latitude\", resolution=lit(10)))\n .withColumn(\"dropoff_h3\", grid_longlatascellid(lon=\"dropoff_longitude\", lat=\"dropoff_latitude\", resolution=lit(10)))\n)\n\ntrips_with_geom.show()" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "0ef8a536-fda8-4a9a-a2e6-58ad0c39cc8b" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+------------------+------------------+\n|vendor_id| pickup_datetime| dropoff_datetime|passenger_count|trip_distance|pickup_longitude|pickup_latitude|rate_code_id|dropoff_longitude|dropoff_latitude|fare_amount|extra|mta_tax|tip_amount|tolls_amount|total_amount| pickup_geom| dropoff_geom| bounds| pickup_h3| dropoff_h3|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+------------------+------------------+\n| CMT|2009-10-12 19:35:21|2009-10-12 19:44:36| 1| 1.4| -74.000018| 40.720534| null| -73.995008| 40.734112| 6.5| 0.0| null| 0.0| 0.0| 6.5|{1, [[[-74.000018...|{1, [[[-73.995008...|{5, [[[-80.0, 35....|622236750705885183|622236723432488959|\n| CMT|2010-09-02 07:37:40|2010-09-02 07:53:17| 1| 6.8| -74.016477| 40.70971| 1| -73.97509| 40.759392| 17.3| 0.0| 0.5| 1.0| 0.0| 18.8|{1, [[[-74.016477...|{1, [[[-73.97509,...|{5, [[[-80.0, 35....|622236750651359231|622236723493961727|\n| CMT|2009-11-28 13:00:00|2009-11-28 13:01:57| 1| 0.5| -73.999666| 40.733384| null| -73.991751| 40.730273| 3.3| 0.0| 0.5| 0.0| 0.0| 3.8|{1, [[[-73.999666...|{1, [[[-73.991751...|{5, [[[-80.0, 35....|622236723433046015|622236750715092991|\n| CMT|2009-11-30 07:49:13|2009-11-30 08:12:38| 1| 12.9| -74.007033| 40.734931| null| -73.87277| 40.774319| 29.7| 0.0| 0.5| 6.04| 0.0| 36.24|{1, [[[-74.007033...|{1, [[[-73.87277,...|{5, [[[-80.0, 35....|622236750719975423|622236724015759359|\n| VTS|2009-01-03 01:55:00|2009-01-03 02:04:00| 5| 2.09| -73.993217| 40.72416| null| -73.9944| 40.74624| 7.7| 0.5| null| 0.0| 0.0| 8.2|{1, [[[-73.993217...|{1, [[[-73.9944, ...|{5, [[[-80.0, 35....|622236750717878271|622236723431276543|\n| VTS|2009-11-09 17:21:00|2009-11-09 17:32:00| 1| 5.19| -74.010003| 40.707022| null| -73.963853| 40.75677| 13.3| 1.0| 0.5| 0.0| 0.0| 14.8|{1, [[[-74.010003...|{1, [[[-73.963853...|{5, [[[-80.0, 35....|622236750647689215|622236723504381951|\n| VTS|2010-06-09 01:13:00|2010-06-09 01:27:00| 1| 8.09| -74.008697| 40.707335| 1| -73.949605| 40.78761| 19.7| 0.5| 0.5| 0.0| 0.0| 20.7|{1, [[[-74.008697...|{1, [[[-73.949605...|{5, [[[-80.0, 35....|622236750647820287|622236722210668543|\n| VTS|2009-01-28 18:36:00|2009-01-28 18:50:00| 1| 2.92| -74.008823| 40.72089| null| -73.994055| 40.747588| 10.1| 1.0| null| 3.0| 0.0| 14.1|{1, [[[-74.008823...|{1, [[[-73.994055...|{5, [[[-80.0, 35....|622236750713159679|622236723439304703|\n| CMT|2010-06-02 14:21:05|2010-06-02 14:28:43| 1| 5.0| -74.011653| 40.702604| 1| -73.971851| 40.749807| 12.5| 0.0| 0.5| 2.6| 0.0| 15.6|{1, [[[-74.011653...|{1, [[[-73.971851...|{5, [[[-80.0, 35....|622236750639857663|622236723496026111|\n| VTS|2009-11-26 15:38:00|2009-11-26 15:47:00| 5| 2.36| -73.997208| 40.722108| null| -73.99647| 40.748185| 8.1| 0.0| 0.5| 2.0| 0.0| 10.6|{1, [[[-73.997208...|{1, [[[-73.99647,...|{5, [[[-80.0, 35....|622236750706966527|622236723431309311|\n| CMT|2009-12-07 10:36:06|2009-12-07 10:42:26| 1| 1.3| -73.99067| 40.73065| null| -73.975539| 40.741353| 6.1| 0.0| 0.5| 0.0| 0.0| 6.6|{1, [[[-73.99067,...|{1, [[[-73.975539...|{5, [[[-80.0, 35....|622236750715092991|622236723437502463|\n| CMT|2009-11-15 09:11:42|2009-11-15 09:26:34| 1| 3.7| -73.990065| 40.687341| null| -73.999566| 40.730219| 12.1| 0.0| 0.5| 0.0| 0.0| 12.6|{1, [[[-73.990065...|{1, [[[-73.999566...|{5, [[[-80.0, 35....|622236750667481087|622236750719549439|\n| CMT|2010-06-27 17:27:25|2010-06-27 17:47:44| 2| 5.0| -74.008459| 40.712233| 1| -73.9516| 40.718877| 15.7| 0.0| 0.5| 3.0| 0.0| 19.2|{1, [[[-74.008459...|{1, [[[-73.9516, ...|{5, [[[-80.0, 35....|622236750648639487|622236723415482367|\n| VTS|2009-01-30 21:05:00|2009-01-30 21:34:00| 1| 5.99| -73.994397| 40.694843| null| -73.921257| 40.685107| 18.9| 0.5| null| 0.6| 0.0| 20.0|{1, [[[-73.994397...|{1, [[[-73.921257...|{5, [[[-80.0, 35....|622236750665449471|622236723618283519|\n| CMT|2009-01-14 07:43:53|2009-01-14 07:55:14| 2| 2.9| -74.007602| 40.725098| null| -73.977846| 40.751608| 9.3| 0.0| null| 0.0| 0.0| 9.3|{1, [[[-74.007602...|{1, [[[-73.977846...|{5, [[[-80.0, 35....|622236750711291903|622236723435503615|\n| VTS|2010-05-11 16:33:00|2010-05-11 16:41:00| 1| 0.99| -74.011205| 40.715468| 1| -74.011072| 40.708882| 5.7| 1.0| 0.5| 0.0| 0.0| 7.2|{1, [[[-74.011205...|{1, [[[-74.011072...|{5, [[[-80.0, 35....|622236750712831999|622236750647459839|\n| VTS|2009-01-19 09:43:00|2009-01-19 09:47:00| 1| 0.56| -73.991123| 40.731297| null| -73.98681| 40.736703| 4.1| 0.0| null| 0.0| 0.0| 4.1|{1, [[[-73.991123...|{1, [[[-73.98681,...|{5, [[[-80.0, 35....|622236750715060223|622236723429539839|\n| CMT|2009-11-14 15:46:36|2009-11-14 15:51:01| 2| 1.2| -74.008448| 40.734271| null| -74.006075| 40.720237| 4.9| 0.0| 0.5| 0.0| 0.0| 5.4|{1, [[[-74.008448...|{1, [[[-74.006075...|{5, [[[-80.0, 35....|622236750719844351|622236750713126911|\n| CMT|2009-11-17 16:50:35|2009-11-17 17:01:34| 1| 1.6| -74.00679| 40.730546| null| -73.9904| 40.73815| 7.7| 1.0| 0.5| 1.5| 0.0| 10.7|{1, [[[-74.00679,...|{1, [[[-73.9904, ...|{5, [[[-80.0, 35....|622236750718894079|622236723426754559|\n| CMT|2009-11-30 23:30:43|2009-11-30 23:42:54| 2| 2.9| -74.009605| 40.710155| null| -73.993875| 40.741554| 10.1| 0.5| 0.5| 2.22| 0.0| 13.32|{1, [[[-74.009605...|{1, [[[-73.993875...|{5, [[[-80.0, 35....|622236750646968319|622236723430490111|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+------------------+------------------+\nonly showing top 20 rows\n\n
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+------------------+------------------+\nvendor_id| pickup_datetime| dropoff_datetime|passenger_count|trip_distance|pickup_longitude|pickup_latitude|rate_code_id|dropoff_longitude|dropoff_latitude|fare_amount|extra|mta_tax|tip_amount|tolls_amount|total_amount| pickup_geom| dropoff_geom| bounds| pickup_h3| dropoff_h3|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+------------------+------------------+\n CMT|2009-10-12 19:35:21|2009-10-12 19:44:36| 1| 1.4| -74.000018| 40.720534| null| -73.995008| 40.734112| 6.5| 0.0| null| 0.0| 0.0| 6.5|{1, [[[-74.000018...|{1, [[[-73.995008...|{5, [[[-80.0, 35....|622236750705885183|622236723432488959|\n CMT|2010-09-02 07:37:40|2010-09-02 07:53:17| 1| 6.8| -74.016477| 40.70971| 1| -73.97509| 40.759392| 17.3| 0.0| 0.5| 1.0| 0.0| 18.8|{1, [[[-74.016477...|{1, [[[-73.97509,...|{5, [[[-80.0, 35....|622236750651359231|622236723493961727|\n CMT|2009-11-28 13:00:00|2009-11-28 13:01:57| 1| 0.5| -73.999666| 40.733384| null| -73.991751| 40.730273| 3.3| 0.0| 0.5| 0.0| 0.0| 3.8|{1, [[[-73.999666...|{1, [[[-73.991751...|{5, [[[-80.0, 35....|622236723433046015|622236750715092991|\n CMT|2009-11-30 07:49:13|2009-11-30 08:12:38| 1| 12.9| -74.007033| 40.734931| null| -73.87277| 40.774319| 29.7| 0.0| 0.5| 6.04| 0.0| 36.24|{1, [[[-74.007033...|{1, [[[-73.87277,...|{5, [[[-80.0, 35....|622236750719975423|622236724015759359|\n VTS|2009-01-03 01:55:00|2009-01-03 02:04:00| 5| 2.09| -73.993217| 40.72416| null| -73.9944| 40.74624| 7.7| 0.5| null| 0.0| 0.0| 8.2|{1, [[[-73.993217...|{1, [[[-73.9944, ...|{5, [[[-80.0, 35....|622236750717878271|622236723431276543|\n VTS|2009-11-09 17:21:00|2009-11-09 17:32:00| 1| 5.19| -74.010003| 40.707022| null| -73.963853| 40.75677| 13.3| 1.0| 0.5| 0.0| 0.0| 14.8|{1, [[[-74.010003...|{1, [[[-73.963853...|{5, [[[-80.0, 35....|622236750647689215|622236723504381951|\n VTS|2010-06-09 01:13:00|2010-06-09 01:27:00| 1| 8.09| -74.008697| 40.707335| 1| -73.949605| 40.78761| 19.7| 0.5| 0.5| 0.0| 0.0| 20.7|{1, [[[-74.008697...|{1, [[[-73.949605...|{5, [[[-80.0, 35....|622236750647820287|622236722210668543|\n VTS|2009-01-28 18:36:00|2009-01-28 18:50:00| 1| 2.92| -74.008823| 40.72089| null| -73.994055| 40.747588| 10.1| 1.0| null| 3.0| 0.0| 14.1|{1, [[[-74.008823...|{1, [[[-73.994055...|{5, [[[-80.0, 35....|622236750713159679|622236723439304703|\n CMT|2010-06-02 14:21:05|2010-06-02 14:28:43| 1| 5.0| -74.011653| 40.702604| 1| -73.971851| 40.749807| 12.5| 0.0| 0.5| 2.6| 0.0| 15.6|{1, [[[-74.011653...|{1, [[[-73.971851...|{5, [[[-80.0, 35....|622236750639857663|622236723496026111|\n VTS|2009-11-26 15:38:00|2009-11-26 15:47:00| 5| 2.36| -73.997208| 40.722108| null| -73.99647| 40.748185| 8.1| 0.0| 0.5| 2.0| 0.0| 10.6|{1, [[[-73.997208...|{1, [[[-73.99647,...|{5, [[[-80.0, 35....|622236750706966527|622236723431309311|\n CMT|2009-12-07 10:36:06|2009-12-07 10:42:26| 1| 1.3| -73.99067| 40.73065| null| -73.975539| 40.741353| 6.1| 0.0| 0.5| 0.0| 0.0| 6.6|{1, [[[-73.99067,...|{1, [[[-73.975539...|{5, [[[-80.0, 35....|622236750715092991|622236723437502463|\n CMT|2009-11-15 09:11:42|2009-11-15 09:26:34| 1| 3.7| -73.990065| 40.687341| null| -73.999566| 40.730219| 12.1| 0.0| 0.5| 0.0| 0.0| 12.6|{1, [[[-73.990065...|{1, [[[-73.999566...|{5, [[[-80.0, 35....|622236750667481087|622236750719549439|\n CMT|2010-06-27 17:27:25|2010-06-27 17:47:44| 2| 5.0| -74.008459| 40.712233| 1| -73.9516| 40.718877| 15.7| 0.0| 0.5| 3.0| 0.0| 19.2|{1, [[[-74.008459...|{1, [[[-73.9516, ...|{5, [[[-80.0, 35....|622236750648639487|622236723415482367|\n VTS|2009-01-30 21:05:00|2009-01-30 21:34:00| 1| 5.99| -73.994397| 40.694843| null| -73.921257| 40.685107| 18.9| 0.5| null| 0.6| 0.0| 20.0|{1, [[[-73.994397...|{1, [[[-73.921257...|{5, [[[-80.0, 35....|622236750665449471|622236723618283519|\n CMT|2009-01-14 07:43:53|2009-01-14 07:55:14| 2| 2.9| -74.007602| 40.725098| null| -73.977846| 40.751608| 9.3| 0.0| null| 0.0| 0.0| 9.3|{1, [[[-74.007602...|{1, [[[-73.977846...|{5, [[[-80.0, 35....|622236750711291903|622236723435503615|\n VTS|2010-05-11 16:33:00|2010-05-11 16:41:00| 1| 0.99| -74.011205| 40.715468| 1| -74.011072| 40.708882| 5.7| 1.0| 0.5| 0.0| 0.0| 7.2|{1, [[[-74.011205...|{1, [[[-74.011072...|{5, [[[-80.0, 35....|622236750712831999|622236750647459839|\n VTS|2009-01-19 09:43:00|2009-01-19 09:47:00| 1| 0.56| -73.991123| 40.731297| null| -73.98681| 40.736703| 4.1| 0.0| null| 0.0| 0.0| 4.1|{1, [[[-73.991123...|{1, [[[-73.98681,...|{5, [[[-80.0, 35....|622236750715060223|622236723429539839|\n CMT|2009-11-14 15:46:36|2009-11-14 15:51:01| 2| 1.2| -74.008448| 40.734271| null| -74.006075| 40.720237| 4.9| 0.0| 0.5| 0.0| 0.0| 5.4|{1, [[[-74.008448...|{1, [[[-74.006075...|{5, [[[-80.0, 35....|622236750719844351|622236750713126911|\n CMT|2009-11-17 16:50:35|2009-11-17 17:01:34| 1| 1.6| -74.00679| 40.730546| null| -73.9904| 40.73815| 7.7| 1.0| 0.5| 1.5| 0.0| 10.7|{1, [[[-74.00679,...|{1, [[[-73.9904, ...|{5, [[[-80.0, 35....|622236750718894079|622236723426754559|\n CMT|2009-11-30 23:30:43|2009-11-30 23:42:54| 2| 2.9| -74.009605| 40.710155| null| -73.993875| 40.741554| 10.1| 0.5| 0.5| 2.22| 0.0| 13.32|{1, [[[-74.009605...|{1, [[[-73.993875...|{5, [[[-80.0, 35....|622236750646968319|622236723430490111|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+------------------+------------------+\nonly showing top 20 rows\n\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "code", - "source": [ - "from mosaic import grid_polyfill\n\nneighbourhoods = (\n geoJsonDF\n .repartition(sc.defaultParallelism)\n .select(\"*\", explode(grid_polyfill(\"geometry\", lit(10))).alias(\"h3\"))\n .drop(\"geometry\")\n)\n\nneighbourhoods.show()" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "21627a45-71e0-4286-907b-94de6f04ec43" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
+-------------+-----------+--------+---------------+------------------+\n| borough|location_id|objectid| zone| h3|\n+-------------+-----------+--------+---------------+------------------+\n|Staten Island| 99| 99|Freshkills Park|622236745731309567|\n|Staten Island| 99| 99|Freshkills Park|622236745690841087|\n|Staten Island| 99| 99|Freshkills Park|622236745723674623|\n|Staten Island| 99| 99|Freshkills Park|622236745683206143|\n|Staten Island| 99| 99|Freshkills Park|622236745691987967|\n|Staten Island| 99| 99|Freshkills Park|622236745684353023|\n|Staten Island| 99| 99|Freshkills Park|622236745733603327|\n|Staten Island| 99| 99|Freshkills Park|622236745725968383|\n|Staten Island| 99| 99|Freshkills Park|622236745701916671|\n|Staten Island| 99| 99|Freshkills Park|622236745734750207|\n|Staten Island| 99| 99|Freshkills Park|622236745694281727|\n|Staten Island| 99| 99|Freshkills Park|622236745703063551|\n|Staten Island| 99| 99|Freshkills Park|622236745679011839|\n|Staten Island| 99| 99|Freshkills Park|622236745761095679|\n|Staten Island| 99| 99|Freshkills Park|622236745680158719|\n|Staten Island| 99| 99|Freshkills Park|622236745696575487|\n|Staten Island| 99| 99|Freshkills Park|622236745762242559|\n|Staten Island| 99| 99|Freshkills Park|622236745681305599|\n|Staten Island| 99| 99|Freshkills Park|622236745730555903|\n|Staten Island| 99| 99|Freshkills Park|622236745690087423|\n+-------------+-----------+--------+---------------+------------------+\nonly showing top 20 rows\n\n
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
+-------------+-----------+--------+---------------+------------------+\n borough|location_id|objectid| zone| h3|\n+-------------+-----------+--------+---------------+------------------+\nStaten Island| 99| 99|Freshkills Park|622236745731309567|\nStaten Island| 99| 99|Freshkills Park|622236745690841087|\nStaten Island| 99| 99|Freshkills Park|622236745723674623|\nStaten Island| 99| 99|Freshkills Park|622236745683206143|\nStaten Island| 99| 99|Freshkills Park|622236745691987967|\nStaten Island| 99| 99|Freshkills Park|622236745684353023|\nStaten Island| 99| 99|Freshkills Park|622236745733603327|\nStaten Island| 99| 99|Freshkills Park|622236745725968383|\nStaten Island| 99| 99|Freshkills Park|622236745701916671|\nStaten Island| 99| 99|Freshkills Park|622236745734750207|\nStaten Island| 99| 99|Freshkills Park|622236745694281727|\nStaten Island| 99| 99|Freshkills Park|622236745703063551|\nStaten Island| 99| 99|Freshkills Park|622236745679011839|\nStaten Island| 99| 99|Freshkills Park|622236745761095679|\nStaten Island| 99| 99|Freshkills Park|622236745680158719|\nStaten Island| 99| 99|Freshkills Park|622236745696575487|\nStaten Island| 99| 99|Freshkills Park|622236745762242559|\nStaten Island| 99| 99|Freshkills Park|622236745681305599|\nStaten Island| 99| 99|Freshkills Park|622236745730555903|\nStaten Island| 99| 99|Freshkills Park|622236745690087423|\n+-------------+-----------+--------+---------------+------------------+\nonly showing top 20 rows\n\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "code", - "source": [ - "joined_df = trips_with_geom.alias(\"t\").join(neighbourhoods.alias(\"n\"), on=expr(\"t.pickup_h3 = n.h3\"), how=\"inner\")\njoined_df.count()" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "c3e68351-52d4-4a8b-8ce6-4898dedd0ecc" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
Out[15]: 4934151
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
Out[15]: 4934151
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "markdown", - "source": [ - "## Mosaic spatial join optimizations" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "c4fb8772-94b2-4fbe-aaf9-6e261609b009" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "Mosaic provides easy access to the optimized spatial join technique described in [this](https://databricks.com/blog/2021/10/11/efficient-point-in-polygon-joins-via-pyspark-and-bng-geospatial-indexing.html) blog post." - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "c7696c95-820a-434e-9535-48807e1fb27c" - } - } - }, - { - "cell_type": "code", - "source": [ - "from mosaic import grid_tessellateexplode\n\nmosaic_neighbourhoods = (\n geoJsonDF\n .repartition(sc.defaultParallelism)\n .select(\"*\", grid_tessellateexplode(\"geometry\", lit(10)))\n .drop(\"geometry\")\n)\n\nmosaic_neighbourhoods.show()" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "1319c9ca-149c-4208-8512-f035ffff467b" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
+-------------+-----------+--------+---------------+-------+------------------+----+\n| borough|location_id|objectid| zone|is_core| h3| wkb|\n+-------------+-----------+--------+---------------+-------+------------------+----+\n|Staten Island| 99| 99|Freshkills Park| true|622236745694314495|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745679077375|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745734160383|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745762275327|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745731801087|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745725935615|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745680224255|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745689595903|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745683730431|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745723576319|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745763422207|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745693102079|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745732947967|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745702473727|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745696608255|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745736454143|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745761062911|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745690742783|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745675505663|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745730588671|null|\n+-------------+-----------+--------+---------------+-------+------------------+----+\nonly showing top 20 rows\n\n
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
+-------------+-----------+--------+---------------+-------+------------------+----+\n borough|location_id|objectid| zone|is_core| h3| wkb|\n+-------------+-----------+--------+---------------+-------+------------------+----+\nStaten Island| 99| 99|Freshkills Park| true|622236745694314495|null|\nStaten Island| 99| 99|Freshkills Park| true|622236745679077375|null|\nStaten Island| 99| 99|Freshkills Park| true|622236745734160383|null|\nStaten Island| 99| 99|Freshkills Park| true|622236745762275327|null|\nStaten Island| 99| 99|Freshkills Park| true|622236745731801087|null|\nStaten Island| 99| 99|Freshkills Park| true|622236745725935615|null|\nStaten Island| 99| 99|Freshkills Park| true|622236745680224255|null|\nStaten Island| 99| 99|Freshkills Park| true|622236745689595903|null|\nStaten Island| 99| 99|Freshkills Park| true|622236745683730431|null|\nStaten Island| 99| 99|Freshkills Park| true|622236745723576319|null|\nStaten Island| 99| 99|Freshkills Park| true|622236745763422207|null|\nStaten Island| 99| 99|Freshkills Park| true|622236745693102079|null|\nStaten Island| 99| 99|Freshkills Park| true|622236745732947967|null|\nStaten Island| 99| 99|Freshkills Park| true|622236745702473727|null|\nStaten Island| 99| 99|Freshkills Park| true|622236745696608255|null|\nStaten Island| 99| 99|Freshkills Park| true|622236745736454143|null|\nStaten Island| 99| 99|Freshkills Park| true|622236745761062911|null|\nStaten Island| 99| 99|Freshkills Park| true|622236745690742783|null|\nStaten Island| 99| 99|Freshkills Park| true|622236745675505663|null|\nStaten Island| 99| 99|Freshkills Park| true|622236745730588671|null|\n+-------------+-----------+--------+---------------+-------+------------------+----+\nonly showing top 20 rows\n\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "markdown", - "source": [ - "Mosaic also includes a convenience function for displaying dataframes with geometry columns." - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "ee5d5a0a-2f2f-4095-9ec8-ce3ba0af6eaa" - } - } - }, - { - "cell_type": "code", - "source": [ - "from mosaic import displayMosaic\ndisplayMosaic(mosaic_neighbourhoods)" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "162fc850-a289-416f-af6d-2dd73f30e93e" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "overflow": true, - "datasetInfos": [], - "data": [ - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694314495, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745679077375, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734160383, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745762275327, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731801087, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725935615, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745680224255, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689595903, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683730431, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723576319, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745763422207, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693102079, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732947967, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702473727, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745696608255, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745736454143, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761062911, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690742783, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675505663, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745730588671, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694248959, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745679011839, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734094847, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745762209791, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731735551, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725870079, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745680158719, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689530367, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683664895, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745763356671, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693036543, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732882431, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702408191, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745681305599, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745760997375, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675440127, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745730523135, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703555071, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745762144255, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725804543, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745680093183, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683599359, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745763291135, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745692971007, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732816895, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745913303039, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702342655, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745681240063, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690611711, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675374591, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694117887, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733963775, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703489535, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731604479, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689399295, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683533823, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745763225599, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745692905471, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732751359, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745913237503, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702277119, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742123007, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745681174527, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745760866303, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745730392063, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684680703, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724526591, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745764372479, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694052351, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733898239, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703423999, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745682321407, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731538943, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725673471, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745695199231, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745735045119, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689333759, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683468287, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745763160063, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732685823, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702211583, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742057471, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745681108991, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745760800767, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690480639, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675243519, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684615167, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745764306943, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693986815, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733832703, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745672884223, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745682255871, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236746168631295, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761947647, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731473407, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725607935, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745695133695, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734979583, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689268223, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683402751, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723248639, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732620287, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702146047, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745741991935, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745760735231, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690415103, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675177983, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684549631, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724395519, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745764241407, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703292927, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745682190335, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236746168565759, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745676324863, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725542399, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745695068159, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734914047, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683337215, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723183103, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732554751, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702080511, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745741926399, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745760669695, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690349567, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675112447, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693855743, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703227391, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745743073279, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745672753151, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236746168500223, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745676259327, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731342335, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725476863, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745695002623, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734848511, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745673900031, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683271679, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723117567, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732489215, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702014975, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745741860863, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726623743, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745760604159, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690284031, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684418559, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724264447, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693790207, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733636095, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703161855, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745743007743, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745697296383, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236746168434687, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745676193791, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731276799, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725411327, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694937087, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745679699967, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734782975, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683206143, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723052031, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745692577791, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732423679, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745701949439, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745741795327, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726558207, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745760538623, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690218495, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745674981375, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684353023, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724198911, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693724671, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745697230847, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761685503, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745676128255, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731211263, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725345791, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694871551, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734717439, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683140607, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745722986495, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732358143, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745701883903, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745741729791, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726492671, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690152959, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745674915839, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684287487, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724133375, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703030783, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745697165311, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761619967, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745676062719, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725280255, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694806015, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734651903, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683075071, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745722920959, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745692446719, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732292607, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745701818367, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745741664255, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745735798783, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690087423, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745674850303, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693593599, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733439487, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702965247, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742811135, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745697099775, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675997183, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725214719, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694740479, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734586367, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745698246655, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683009535, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745722855423, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745762701311, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732227071, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726361599, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745735733247, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690021887, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684156415, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724002303, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693528063, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733373951, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702899711, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742745599, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745697034239, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745681797119, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745736880127, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761488895, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675931647, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725149183, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694674943, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734520831, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745682943999, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745722789887, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732161535, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726296063, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745735667711, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689956351, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745674719231, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684090879, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723936767, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693462527, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733308415, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745696968703, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745736814591, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761423359, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675866111, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725083647, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694609407, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734455295, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732095999, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726230527, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689890815, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745674653695, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684025343, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723871231, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702768639, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742614527, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745681666047, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745736749055, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761357823, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675800575, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725018111, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694543871, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734389759, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732030463, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689825279, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745674588159, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702703103, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742548991, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745736683519, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690972159, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675735039, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724952575, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694478335, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734324223, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731964927, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726099455, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689759743, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683894271, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723740159, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702637567, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742483455, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745696772095, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761226751, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690906623, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675669503, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724887039, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694412799, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745679175679, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734258687, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731899391, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726033919, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689694207, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683828735, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723674623, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745763520511, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745696706559, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761161215, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690841087, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675603967, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694347263, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745679110143, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734193151, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745762308095, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731833855, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725968383, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689628671, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745729474559, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683763199, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723609087, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745763454975, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702506495, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742352383, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745696641023, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761095679, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675538431, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694281727, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745679044607, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734127615, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745762242559, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731768319, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745680191487, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689563135, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693069311, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732915199, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702440959, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745696575487, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675472895, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745730555903, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694216191, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734062079, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703587839, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745762177023, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731702783, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725837311, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689497599, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683632127, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723478015, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745763323903, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693003775, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732849663, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702375423, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745681272831, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690644479, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675407359, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745730490367, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694150655, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733996543, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703522303, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745762111487, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731637247, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745680060415, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689432063, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683566591, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745763258367, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745692938239, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732784127, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745681207295, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745760899071, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675341823, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745730424831, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684713471, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745764405247, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694085119, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733931007, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703456767, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745682354175, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745762045951, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731571711, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725706239, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689366527, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683501055, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745763192831, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702244351, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742090239, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745681141759, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675276287, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684647935, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724493823, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745764339711, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694019583, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745678782463, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733865471, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703391231, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745682288639, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761980415, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731506175, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745695166463, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745735012351, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689300991, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732653055, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702178815, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742024703, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690447871, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675210751, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684582399, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745764274175, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693954047, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733799935, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703325695, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745743171583, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745682223103, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761914879, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731440639, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725575167, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745695100927, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734946815, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689235455, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683369983, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723215871, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732587519, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702113279, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745741959167, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745696247807, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745681010687, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745760702463, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690382335, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675145215, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684516863, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724362751, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745764208639, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693888511, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733734399, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703260159, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745743106047, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745682157567, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761849343, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745691529215, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745676292095, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731375103, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725509631, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745695035391, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734881279, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683304447, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723150335, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732521983, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726656511, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745696182271, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745760636927, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690316799, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675079679, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684451327, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724297215, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693822975, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733668863, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703194623, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745743040511, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761783807, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745691463679, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745676226559, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731309567, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725444095, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683238911, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723084799, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745701982207, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745741828095, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726590975, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745696116735, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745760571391, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675014143, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684385791, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724231679, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693757439, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733603327, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703129087, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742974975, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745697263615, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745676161023, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731244031, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694904319, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734750207, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732390911, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745701916671, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745741762559, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726525439, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690185727, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745674948607, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684320255, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724166143, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693691903, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733537791, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703063551, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745697198079, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761652735, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731178495, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694838783, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734684671, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745698344959, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683107839, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745722953727, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745692479487, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732325375, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745701851135, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745741697023, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726459903, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745735831551, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690120191, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745674883071, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684254719, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724100607, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693626367, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733472255, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702998015, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745697132543, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745676029951, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725247487, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694773247, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734619135, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683042303, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745722888191, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745762734079, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732259839, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726394367, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745735766015, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690054655, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745674817535, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684189183, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724035071, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693560831, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733406719, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702932479, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761521663, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675964415, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745698213887, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745682976767, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745722822655, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726328831, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745674751999, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684123647, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723969535, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693495295, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733341183, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702866943, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745736847359, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761456127, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675898879, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694642175, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734488063, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745698148351, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732128767, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726263295, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745735634943, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689923583, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745674686463, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684058111, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723903999, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693429759, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733275647, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702801407, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742647295, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745736781823, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761390591, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725050879, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694576639, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734422527, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732063231, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726197759, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689858047, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745674620927, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683992575, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723838463, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702735871, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742581759, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745736716287, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761325055, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745691004927, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675767807, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724985343, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694511103, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734356991, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731997695, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726132223, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689792511, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745674555391, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683927039, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723772927, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745763618815, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702670335, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742516223, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761259519, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690939391, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675702271, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724919807, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745679208447, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726066687, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683861503, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723707391, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702604799, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742450687, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745696739327, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761193983, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690873855, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675636735, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694380031, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745679142911, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734225919, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731866623, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726001151, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689661439, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745729507327, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683795967, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723641855, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745763487743, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702539263, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745696673791, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761128447, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690808319, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725739007, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745696935935, - "AQMAAAABAAAABAAAAIzvORt9i1LAUzWXQ0NIRECs3yEigotSwIct0/1KSERAz1Bl94WLUsD10IC1SUhEQIzvORt9i1LAUzWXQ0NIREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236746167451647, - "AQMAAAABAAAABQAAALLLamedjVLA7PTzHUVHREBNNifZjI1SwIx+IDVNR0RAo5WznI2NUsAYmXlhTkdEQOZxFHmcjVLAepg7ZklHRECyy2pnnY1SwOz08x1FR0RA" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745725181951, - "AQMAAAABAAAACAAAAKO97SfLjFLAIFImkFVHRECDqWsmwIxSwIgY7T9ZR0RAaiCr/7mMUsAVstwXZUdEQKmCacK3jFLAJQi4Ym9HREBTwBAWwoxSwGytiUB/R0RAlcOy8tCMUsB7rxhGekdEQE9Ql3vVjFLA5tnfbWVHRECjve0= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745692708863, - "AQMAAAABAAAACgAAABxTRq7gilLAmdfeuPlHREDD33S73YpSwKGHSLX6R0RAyUDDbd2KUsAKqHCXDEhEQHoKDC7dilLAXpp1LhtIRECzsMwt3YpSwIA5Dj0bSERAJM9mHN2KUsARqtk4H0hEQKbuUhbdilLAAg+akiFIREAwyi0= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745763880959, - "AQMAAAABAAAABAAAAMJtrBbEilLAuXWkiSxLREAKJ7ZcwYpSwLrfZjFBS0RAuOwva8WKUsAVGCeVLktEQMJtrBbEilLAuXWkiSxLREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745673801727, - "AQMAAAABAAAAEAAAAEusd47ri1LARkK8hxlLREB67WSv3ItSwK+/oIEeS0RAiTnvJNiLUsC9w3NbM0tEQKosoHnii1LAw55wO0NLRECON47p6otSwA05smhAS0RAQTKHHt2LUsCWtkiYMUtEQGXeF4jfi1LAns6gKjFLREAkqVc= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745762766847, - "AQMAAAABAAAABAAAABHqBw3NilLA5PFQ+cpKREA20j3kzIpSwHeLCgrNSkRAic/LRM2KUsBDJg1Py0pEQBHqBw3NilLA5PFQ+cpKREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745769549823, - "AQMAAAABAAAACAAAAEsfeSjQilLAvI5xoTlMREBSSHP3yYpSwGY4QrM7TERAOPSwLMWKUsBX9gTsV0xEQOaTaHXEilLAzKLeUl9MREDTO0MRx4pSwLxEjlVjTERAUghS8dWKUsAn/qZcXkxEQAYG43zailLAFXeRgklMREBLH3k= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236746168893439, - "AQMAAAABAAAACgAAAEFnNV4qjVLAwD4mP1tHREBSQQgeKo1SwJ1uO2ZcR0RAZL/3cTSNUsCXXLZDbEdEQMYbEV82jVLAcXR5nmtHREBx/B14P41SwJ9IGV9eR0RAd4R8yzqNUsDHj1iuXkdEQDyyRxU2jVLAdJqzbl5HREDzpns= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745673244671, - "AQYAAAACAAAAAQMAAAABAAAABQAAAGfnWjFYjFLAcCT/1uFKREBEWyhGUYxSwCD74ifkSkRAow3VNFKMUsA4U1F95kpEQD0y/b9ZjFLAYpJwO+RKREBn51oxWIxSwHAk/9bhSkRAAQMAAAABAAAABQAAALTRzktOjFLAkEgTJ+U= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745730293759, - "AQMAAAABAAAADwAAAHsrqeBrjVLALNBqRGhIREC72IoDXY1SwL+PlD9tSERAycTpeliNUsAWLoUYgkhEQF/qes9ijVLAaVta9pFIREB0K4b3bo1SwMamceONSERAC8KjXG+NUsBsmGihjEhEQKB950BwjVLAOz81o4lIREDlS8k= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745757982719, - "AQMAAAABAAAACAAAAFvg22aMilLANALWn7VLREB+k+jbiopSwE9M1CO2S0RAGDjhCnqKUsDZZAofz0tEQO+Cb7V5ilLATtUVkNBLREBwrGJPg4pSwGznOlPfS0RAL1ApL5KKUsBiUqda2ktEQNP227qWilLAaLPtgMVLREBb4Ns= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745736519679, - "AQMAAAABAAAABgAAABIxNdUtjVLALY8s+hJKRECy44BiKo1SwHiQ5CEUSkRA9g1i2SWNUsCgwZ/7KEpEQBUkeHMujVLAEIjHMTZKREByI0BpLo1SwE8n89smSkRAEjE11S2NUsAtjyz6EkpEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745678913535, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745682026495, - "AQMAAAABAAAABwAAABhV/Kp6i1LAh31HSGFMRECUDmrva4tSwAQrrjVmTERABZFSZGeLUsARqwQQe0xEQKfzQ7lxi1LAY4jX8IpMRED1jqXhcotSwCtxt42KTERAYIM7BnqLUsBWLJGmYkxEQBhV/Kp6i1LAh31HSGFMREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745735405567, - "AQMAAAABAAAALAAAACBtiIU+jVLASpeWu6xJREC8PLExMo1SwFki59ywSURAVV6sqC2NUsD4YnG2xUlEQFL7/MY3jVLATD7rQNVJREBHH4DjN41SwDCgssfTSURAIsTaMjiNUsBjWkyr0UlEQI02BZ04jVLAtALEwc9JRED26fE= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745696149503, - "AQMAAAABAAAACQAAAORf+0wejFLAur1XzyRIRECcUfVWHYxSwICcAXIlSERA39+yMxqMUsA/LFb4JkhEQMyzxCgEjFLA7KJzdS9IRECy6bdfA4xSwLMk9RAzSERAMuo1sw2MUsD2iZTvQkhEQLzpcZAcjFLAsm3J9T1IRECArRk= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745742188543, - "AQMAAAABAAAACAAAAIprKi5ti1LAwRpDy59MREAWlwtOXotSwFh5zcSkTERAjxrcwlmLUsBkxz+fuUxEQE1c3xdki1LAZg02gMlMREAFjWoXZ4tSwK+BhX/ITERAVAUJCGiLUsDfm3gqx0xEQOtdaKtui1LA144nFaJMRECKayo= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745699262463, - "AQMAAAABAAAACQAAAJjNyNXrilLAKAnxzP9JREDMTz333IpSwFwbsMUESkRA/2kpzNqKUsC/hKG4DkpEQJ1M8g/ailLAz8UH5RlKREAWV8fm2YpSwFyfwuQbSkRA9IGfv+KKUsAImNB+KUpEQB9AQZ7xilLAEb4HhiRKRECw80s= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745695592447, - "AQMAAAABAAAAFAAAACHyBz3Zi1LAvWeqxEVIREAEgGFh14tSwOf3dj5ISERATDZXYNeLUsCOiL8/SEhEQOccQV/Xi1LAvJIdQUhIRECJnmNZ04tSwD3fZQVNSERAwUAYJM+LUsD72D9wUUhEQC2BQSPPi1LAkpgWcVFIREBFkXY= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745912778751, - "AQMAAAABAAAABAAAAGogq/+5jFLAFbLcF2VHREDDmav/s4xSwCv2LqVwR0RAqYJpwreMUsAlCLhib0dEQGogq/+5jFLAFbLcF2VHREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745769877503, - "AQMAAAABAAAABAAAAAESmsN+ilLAN0D7LPRLRECZpv25fIpSwPYgS9v0S0RAJSoxv3+KUsA+gcyv9UtEQAESmsN+ilLAN0D7LPRLREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745691365375, - "AQMAAAABAAAACwAAAGozUIn1ilLAEKQIQdlHREAw8SYW9IpSwMcGf+jfR0RALiPBaP6KUsDAqrbH70dEQBJ93QEMi1LA/HtxO+tHREA3kig6BotSwLZ1sPHlR0RAxGtyuQCLUsAGDz7t4EdEQAg8IJ7/ilLA9ibo6t9HREDs7PU= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745736290303, - "AQMAAAABAAAABgAAAO0EkPJDjVLAR0N/nJ5JREBBXEPvQo1SwJNXp0SjSURA56I3SkONUsBSb/DdoklEQNmKbSVEjVLAIcjG8KFJRECgZKwxRI1SwIaCYj+gSURA7QSQ8kONUsBHQ3+cnklEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745921560575, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745913106431, - "AQMAAAABAAAAEAAAAIIWNIjqjFLAZ2Od0SZHREBZDm1g6IxSwLkJSe8mR0RAA+xnOuaMUsDe2MI4J0dEQNYVpRfkjFLAj2zZrSdHREA05cPV4oxSwDR9Fg0oR0RAKXtIjd6MUsChDoq9O0dEQJJi9ODojFLA9Hgrm0tHREDMPG8= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745698476031, - "AQMAAAABAAAACQAAALL+ux3oilLAISejGFNJREBRTn3L4IpSwJM6VYtVSURAr2wazOCKUsAX3FEnVklEQKdUfongilLARGuvEmdJRED8vVvz34pSwAZAevV3SURAzrEi0N+KUsB9ldCGfElEQEwaBObtilLAFHgZ0XdJREBOsPA= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745769648127, - "AQMAAAABAAAABwAAAJ5JnIXCilLA0IWqL3hMRECiHMIJwopSwI4IEFl4TERA/atadMCKUsCS30q4iExEQO271ie+ilLAeH+vT6BMREBgDW9OyIpSwLcrH+ucTERAEwwY2syKUsCQ2O0QiExEQJ5JnIXCilLA0IWqL3hMREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236746168991743, - "AQMAAAABAAAAbgAAAOZxFHmcjVLAepg7ZklHRECjlbOcjY1SwBiZeWFOR0RAeDp0FImNUsAwnOU5Y0dEQNRjiUWTjVLAJcIu4XJHRED/Zstpk41SwACBE3xyR0RAaf7Oo5ONUsAQfUPlcUdEQB0fx+CTjVLAt2EwUXFHRED02aI= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745673342975, - "AQMAAAABAAAACQAAAB+zGpprjFLA/inKAshKRECwB1G7XIxSwNN6Kv3MSkRAZ+daMViMUsBwJP/W4UpEQD0y/b9ZjFLAYpJwO+RKREDd+3RsX4xSwLrmzYjiSkRArimgTm6MUsBukC0X5kpEQBjpkTV0jFLAQxtKzt9KRED9fQQ= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745680125951, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745672785919, - "AQMAAAABAAAABwAAACtBCaInjFLAVe8AGPJKREBS8sO1HIxSwGna4b/1SkRArQe3bRuMUsDdVY+i+0pEQACZCuIdjFLA31deePlKREB6WJ8NIYxSwBYZS+72SkRASHDjSSSMUsDgOSWX9EpEQCtBCaInjFLAVe8AGPJKREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745690578943, - "AQMAAAABAAAACQAAADmf/S3qilLA0p0dH8tIREDeljZq24pSwFzACA/QSERAHQuVdduKUsDBMc0y00hEQP7D8CDcilLA/mL9X+hIREAm+Thi3IpSwFEUV5HtSERABbJIGOGKUsBnDLvP9EhEQA6OJ/bvilLAP+gT1+9IREBuE/g= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745761751039, - "AQMAAAABAAAACAAAAIfQ/ZbEilLAbsZnK/BLRECF0TG3tYpSwH21MST1S0RAZUAtzbGKUsAxnLUYB0xEQIMkNPu8ilLAoHafRg5MREA7iZpExYpSwPaBRZsWTERAImKyX8qKUsAJfFzmFExEQDhHP+vOilLAxBlxDABMRECH0P0= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745679568895, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745743400959, - "AQMAAAABAAAACAAAAG3Nwusyi1LABCIZR+1MREAhLGkLJItSwLFPb0DyTERAyND3fx+LUsBWzvUaB01EQJsA9NQpi1LAtHY0/BZNREC4lME/MotSwGymuysUTURAS5QPEDuLUsB9Dzo1B01EQNZYwUA9i1LAkKk/KP1MREBtzcI= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745742843903, - "AQMAAAABAAAABwAAAAEzn97yilLA2oyXBhZNREClgCsC5IpSwAfxVf4aTURA2LgymeuKUsAqkB94HE1EQCuus3/wilLAjowFRh1NREDVFnRh9YpSwF42raweTURAx31npfmKUsB65hRxIE1EQAEzn97yilLA2oyXBhZNREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745735503871, - "AQMAAAABAAAAJwAAAGmcpnQzjVLA6wiKbupJREBKr4qWJI1SwJq/oWnvSURAfd5tDSCNUsBt20dDBEpEQLLjgGIqjVLAeJDkIRRKREASMTXVLY1SwC2PLPoSSkRAUz3cvy2NUsD9FD0cEEpEQKFRPQkujVLABAdpMg5KREAF9AY= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745763749887, - "AQMAAAABAAAACAAAALtW8YHOilLArlVM4gRLREDBzi5tyIpSwG9it+oGS0RA4J4bi8eKUsBsOitdEktEQMJtrBbEilLAuHWkiSxLREC47C9rxYpSwBUYJ5UuS0RAq7F7StSKUsCSfmGcKUtEQKxz0tXYilLAjfHswhRLREC7VvE= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745742286847, - "AQMAAAABAAAABQAAAPWOpeFyi1LAK3G3jYpMRECn80O5cYtSwGOI1/CKTERAimsqLm2LUsDBGkPLn0xEQOpdaKtui1LA1o4nFaJMRED1jqXhcotSwCtxt42KTERA" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745762635775, - "AQMAAAABAAAABwAAAHYlWVvWilLAhyqUnKFKREBbb3kU0IpSwFIVyLWjSkRAEeoHDc2KUsDk8VD5ykpEQInPy0TNilLAQyYNT8tKRECketcj3IpSwOq4SVbGSkRA5zIUr+CKUsBhDwZ9sUpEQHYlWVvWilLAhyqUnKFKREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745730162687, - "AQMAAAABAAAAGgAAAIWgZ8V9jVLAs+4/8U5IREDJVDRpcI1SwFX6gGtTSERAeyup4GuNUsAs0GpEaEhEQJIooa11jVLAxTnhUXdIREArfNixdY1SwDytwUR3SERAuryaHHaNUsDfR6badUhEQHJmIY12jVLAAyiXwHNIRECYmyg= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745760964607, - "AQMAAAABAAAADwAAAA6xuwjBilLASTCfrUNLREAMPY6+wIpSwIpDl99FS0RADlNtYMCKUsASCxWsSUtEQDbSl+C/ilLA1AOZb01LREC/N2w/v4pSwAJlaydRS0RAwVRcfb6KUsC3/NzQVEtEQOpFM529ilLA4aMZP1hLREAiICs= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745681895423, - "AQMAAAABAAAABAAAACCTZnWFi1LAwuEBV0pMREDpjmBaf4tSwCRuzGFMTERAFEPU6XqLUsBUWqrCYExEQCCTZnWFi1LAwuEBV0pMREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745913204735, - "AQMAAAABAAAACwAAABXjZov2jFLAiJgF+yhHREBY9ydG/IxSwGiLbMgxR0RARIHViAONUsD2Ja9ZL0dEQP5xVegCjVLAOz+bzi5HRECGIiypAY1SwJeud90tR0RAGzyPYQCNUsCfkFYILUdEQEWuBTf+jFLARiql8CtHRECeYPs= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745691791359, - "AQMAAAABAAAADAAAACoGIm3eilLAkiWYz9FHREAB8qRI3opSwD3ytDXaR0RAQqf0OOWKUsCSOQ7h5EdEQDDxJhb0ilLAxwZ/6N9HREBqM1CJ9YpSwBCkCEHZR0RAJkRisPKKUsB/rkns10dEQHVLi13vilLAjx6hh9ZHRECs1T8= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745762963455, - "AQMAAAABAAAABAAAANaM/WrUilLANt5z9mZKRED0jon204pSwBTVNlZtSkRAJZolHtWKUsCeeuUJaEpEQNaM/WrUilLANt5z9mZKREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745912647679, - "AQMAAAABAAAABwAAANhuy9LNjFLAokyR2T1HREBeY4fGzYxSwL/8KPI9R0RAxheJEMSMUsCuK4O2UUdEQISpaybAjFLAhxjtP1lHRECjve0ny4xSwCBSJpBVR0RA40TQsM+MUsBWlAK4QEdEQNhuy9LNjFLAokyR2T1HREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745769746431, - "AQMAAAABAAAACAAAAC9QKS+SilLAYlKnWtpLREBwrGJPg4pSwGznOlPfS0RAARKaw36KUsA3QPss9EtEQCUqMb9/ilLAPoHMr/VLREDbr8BfhYpSwEVfuDv3S0RA56Ztm5iKUsBVd9Ul/EtEQMadPYOcilLALk/KO+pLREAvUCk= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236746169090047, - "AQMAAAABAAAAWQAAAG9CaOCOjVLAOgej74dHREAwmN0DgI1SwM+E2eqMR0RA6FCGe3uNUsAlamHDoUdEQHGZzc+FjVLAnx/BoLFHREDG46MAiY1SwK+q9o6wR0RArlsIMomNUsDMdGTwr0dEQNW/eIWJjVLAbZaq8K5HRECmLPQ= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236746168532991, - "AQMAAAABAAAABwAAANOJOWFxjVLA9XyFoVpHREBd8nW9X41SwGstTkBjR0RAGO8Ff1yNUsAjLT8rckdEQM57ItNmjVLAvnCgCIJHREBMhKqvdY1SwAgXhQ19R0RAFsj/N3qNUsCVSRI1aEdEQNOJOWFxjVLA9XyFoVpHREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745690677247, - "AQMAAAABAAAABwAAAJaTnyPeilLAwauyGAxJREAEAkaS3opSwJtPO5QSSURAs//Tnd+KUsAmHsVpI0lEQJfWoh3gilLAx6cvHi9JREDsCoZV4opSwAM5TWAuSURA4olu4OaKUsDtgduHGUlEQJaTnyPeilLAwauyGAxJREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745679667199, - "AQMAAAABAAAABwAAAMOqaqPMjFLAADEi3UZKRECt/ALFvYxSwIZS2ddLSkRA44l6O7mMUsCOL4yxYEpEQNmtbZDDjFLAVzyWkHBKRECI/Em7y4xSwP8/YdRtSkRAJAV3dNGMUsDK4jpDTkpEQMOqaqPMjFLAADEi3UZKREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745750839295, - "AQMAAAABAAAABgAAAFzYInTAilLAKfO+NQBNREBB/k2MtIpSwMpgZzAETURAyb1QWLOKUsBkYsfNEE1EQCMFdJHJilLAtfyqqxVNREAm6djIyopSwNdDPBcQTURAXNgidMCKUsAp8741AE1EQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745729376255, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745696903167, - "AQMAAAABAAAABwAAAM9QZfeFi1LA9tCAtUlIRECs3yEigotSwIct0/1KSERAaMvol32LUsCB4A7WX0hEQO0eHOuHi1LAnRMdtW9IREAy4IrIlotSwAp217tqSERAF8kzsZqLUsDi+w3JWEhEQM9QZfeFi1LA9tCAtUlIREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745757065215, - "AQMAAAABAAAABQAAAB2rT82hilLAK9g3t5JLREAufZ0+nIpSwPDVNVCcS0RAoABJppuKUsAe8X8ynUtEQKlDKdKfilLAYkKWzZtLREAdq0/NoYpSwCvYN7eSS0RA" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745742385151, - "AQMAAAABAAAABAAAAAWNahdni1LAroGFf8hMREBNXN8XZItSwGYNNoDJTERAhFTWEWOLUsBFdtUyzkxEQAWNahdni1LAroGFf8hMREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745673768959, - "AQMAAAABAAAACAAAAI43junqi1LADDmyaEBLRECqLKB54otSwMOecDtDS0RAuW8o792LUsCLtlgVWEtEQDyb7UPoi1LAvdlg9WdLREBL45x39otSwD0i0TRjS0RATkGm0feLUsDL/C7aX0tEQOKa9+v6i1LAfkZ+mlFLRECON44= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745769517055, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745730260991, - "AQMAAAABAAAAJgAAAHUrhvdujVLAxqZx441IREBf6nrPYo1SwGlbWvaRSERAa9LXRl6NUsCgEGDPpkhEQCQuXl9mjVLAFu6JPrNIRECqx/yQZo1SwKFpRfiySERA89HMMmeNUsDb/RiHskhEQMQxL5dnjVLAgs8Jg7JIREDFrU4= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745743269887, - "AQMAAAABAAAACAAAAEU7ZFdGi1LAF8oxc9NMRECSMx53N4tSwNddmWzYTERAbc3C6zKLUsAEIhlH7UxEQNZYwUA9i1LAkKk/KP1MREB8ENtiQ4tSwFa2PBv7TERA10BbHU+LUsAOw4d76kxEQPwhZaxQi1LA2TBAVONMREBFO2Q= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745700343807, - "AQMAAAABAAAACAAAAF424J3eilLALDWSr4FIREDzmPH+24pSwM2v64+CSERALwjLvNuKUsD5/EBKkEhEQKkTtzrbilLAQoMUz6hIREBjPyg624pSwFetVXipSERAb9flZeSKUsBWt0dnpkhEQP5FsvDoilLAZgAcj5FIREBeNuA= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745678880767, - "AQMAAAABAAAABgAAANJGsZ6rjFLA33bcPp9KRECeJwzAnIxSwMGtejmkSkRA6c9VNpiMUsCaJVATuUpEQKAIEl2YjFLApnjRTrlKREDlerXBrYxSwCmzKoeiSkRA0kaxnquMUsDfdtw+n0pEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745742712831, - "AQMAAAABAAAACgAAAAz8pEoGi1LAyBTvMvxMREB/bTpq94pSwA6sGCwBTURAATOf3vKKUsDajJcGFk1EQMd9Z6X5ilLAeuYUcSBNREBJ5nIy+opSwDKGhKsgTURA/wLa5v6KUsBkDCo/I01EQCtf+PEAi1LA3S+QpyRNREAaRQM= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745735372799, - "AQMAAAABAAAAJAAAAMRo/LY3jVLAZffo2dZJREBpnKZ0M41SwOsIim7qSURA+d1JyzSNUsD6t8l87ElEQDOCDd40jVLAKUIqbuxJREACiayTNY1SwJK7PRLsSURAMcec9zWNUsC0/EBQ60lEQG9eIGI2jVLAxnHpRupJRECXcwE= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745920643071, - "AQMAAAABAAAABgAAANgYEA6VjFLAkR28UKlHREBPXNQyhIxSwBUZLAvHR0RAmBuE5IeMUsDtzke4zEdEQEHcYMGWjFLAZtQKvsdHREA1JodKm4xSwMaoveWyR0RA2BgQDpWMUsCRHbxQqUdEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745680879615, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745691332607, - "AQMAAAABAAAACAAAABJ93QEMi1LA/HtxO+tHREAuI8Fo/opSwMCqtsfvR0RA7q8m3vmKUsCTnpWfBEhEQCAT1TAEi1LAk5HYfhRIREDBRCAOE4tSwIZzJIYPSERA1NammBeLUsAwKjeu+kdEQKCuRdAPi1LAtqLotu5HREASfd0= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733701631, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745750937599, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745697001471, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745760833535, - "AQMAAAABAAAACAAAAKuxe0rUilLAkn5hnClLREC47C9rxYpSwBUYJ5UuS0RACie2XMGKUsC632YxQUtEQA+xuwjBilLASTCfrUNLREBEL7Yzy4pSwLZnZk9TS0RA7DYYE9qKUsB2BpdWTktEQPoEcZ7eilLAFWYNfTlLRECrsXs= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745735700479, - "AQMAAAABAAAAEwAAALQHo0M7jVLA7nzuKYdJRED5LMdlLI1SwMHtAyWMSURAWFPE3CeNUsCnGHn+oElEQLw8sTEyjVLAWSLn3LBJREAgbYiFPo1SwEqXlrusSURAcUhlED+NUsAdsK/OqklEQKg1mTlBjVLAWq13QqVJRECkwDw= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745681764351, - "AQMAAAABAAAACAAAAIwmheW8i1LA9Z0od7BLRECoGgsGrotSwGaO7HC1S0RAbX5Pe6mLUsAx9f1KyktEQPfWIdCzi1LAuMBZK9pLREBb/ekiwItSwL+n7gvWS0RA89LTEsSLUsBCCgbTzktEQJTYWTrHi1LAUUlsV8BLRECMJoU= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745762832383, - "AQMAAAABAAAACAAAAKR61yPcilLA6rhJVsZKRECJz8tEzYpSwEMmDU/LSkRAN9I95MyKUsB0iwoKzUpEQGNgliHLilLAj5WO2+NKRECiDEYN04pSwCjc7AjwSkRArPln7OGKUsATpx8Q60pEQNS9pnfmilLAx+nGNtZKRECketc= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236746168958975, - "AQMAAAABAAAABgAAAM3Ma5ePjVLABgLhpYRHREBvQmjgjo1SwDoHo++HR0RAaOCiCI+NUsBKW2wtiEdEQEa8qCGPjVLAAsfclIdHRECeZNxxj41SwKi7GpuFR0RAzcxrl4+NUsAGAuGlhEdEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745690546175, - "AQMAAAABAAAACAAAAA6OJ/bvilLAP+gT1+9IREAFskgY4YpSwGcMu8/0SERAjlqPpN2KUsD/cP+mBElEQJaTnyPeilLAwauyGAxJREDiiW7g5opSwO2B24cZSURAQ6RjvvWKUsA/liqPFElEQPk0Nkn6ilLARJ6/tv9IREAOjic= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745761718271, - "AQMAAAABAAAABwAAACJisl/KilLACXxc5hRMREA6iZpExYpSwPeBRZsWTERAM5Feqc6KUsC21skMIExEQFNIc/fJilLAZjhCsztMREBLH3ko0IpSwLyOcaE5TERAtBAItNSKUsABGnHHJExEQCJisl/KilLACXxc5hRMREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745679536127, - "AQMAAAABAAAAJQAAAMpDMQvgjFLAkZqtCC1KREDVLt0s0YxSwLIXdgMySkRAw6pqo8yMUsAAMSLdRkpEQCQFd3TRjFLAy+I6Q05KREDMy6rN1IxSwH/qWMs7SkRAsvtiPdWMUsAl1UwkPEpEQDNcjp7VjFLAviqGWjxKRECH/M4= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745736585215, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745729245183, - "AQMAAAABAAAALAAAADLQxNOGjVLAz4V57BFIRECv9KUCfo1SwPc4++AUSERAULkyenmNUsCkLsm5KUhEQDva5neBjVLAiAm1/zVIREDhkTR5gY1SwLvnIvo1SERAjqF22YGNUsBbvuRsNEhEQKLNoDyCjVLA1TJT4TJIREAoKbI= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745743368191, - "AQMAAAABAAAABQAAALiUwT8yi1LAbKa7KxRNRECbAPTUKYtSwLR2NPwWTURAqtP19CiLUsA8pAQAG01EQP+oH2Qxi1LAZxLDbhVNREC4lME/MotSwGymuysUTURA" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745756934143, - "AQMAAAABAAAABwAAABc4Zze2ilLAMPCOuGpLREDAxvqotIpSwA3YGShuS0RAlKxE5a6KUsAfGV4bektEQNHHlx6pilLAGoA+XYVLRECyHU09s4pSwO3XS/uBS0RABtHRyLeKUsDPwLQhbUtEQBc4Zze2ilLAMPCOuGpLREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745696215039, - "AQMAAAABAAAACwAAALXuThv0i1LAX6sObDdIRECpl7jr64tSwJZhodE7SERAviuZm+OLUsCvTCm8P0hEQCZswprji1LAt++JvD9IRECwmeqZ44tSwLKS6rw/SERA/9ZrM9uLUsDnWTwnQ0hEQCHyBz3Zi1LAvWeqxEVIREDXEmA= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745692545023, - "AQMAAAABAAAABAAAACgicrTcilLA83wbF0dIREArG9yo3IpSwKOPqGtLSERAQxO1YN2KUsDDjPsfSEhEQCgicrTcilLA83wbF0dIREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745724461055, - "AQMAAAABAAAACgAAAJkOOndRjVLA525JvwtJREB5rTCbR41SwEbzBw0PSURAGLZdEkONUsDlZEXmI0lEQHzYJmdNjVLAyKNsxDNJREDHUhhOT41SwGiaQiEzSURAVbkEolKNUsDNYIVVDUlEQBEZy0dSjVLAsnLBeQxJREDOZYg= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745695657983, - "AQMAAAABAAAADgAAABfJM7Gai1LA4vsNyVhIREAy4IrIlotSwAp217tqSERAAcDUG6GLUsAf2NiaekhEQGgqRvmvi1LAXRV4oXVIRECQ4BJKtItSwLrTGtBhSERAV+uEyrGLUsCmx90dYkhEQNwdcPWti1LAPRtxCGJIREAleDs= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745691987967, - "AQMAAAABAAAACAAAAKooeOkvi1LAZfYDlQlIREAcETM+LItSwNxVi2waSERAQI0OkTaLUsBkq7RLKkhEQIwUX25Fi1LAAEXKUiVIRECyP2O7SItSwFMVnSsWSERAGWXJvjmLUsDyC945D0hEQCyKW1sxi1LA8nYzsgpIRECqKHg= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745680977919, - "AQMAAAABAAAABwAAANOw7Nqbi1LA+8pp2QhMREA2MDX7jItSwAXBFNMNTERAT6RLcIiLUsCRtUitIkxEQCoAeomRi1LAx5K2qDBMREAKMIfLlItSwMZjWLspTERA4lHgu6CLUsD3hrhYEExEQNOw7Nqbi1LA+8pp2QhMREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745691430911, - "AQMAAAABAAAABQAAAKGuRdAPi1LAt6Lotu5HREDU1qaYF4tSwDAqN676R0RANvJdkBuLUsBQenpa+UdEQERPK2Eai1LAqpOQYfhHREChrkXQD4tSwLei6LbuR0RA" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745723346943, - "AQMAAAABAAAAHAAAAGvS10ZejVLAoBBgz6ZIREDprY9pT41SwNBJgsqrSERA0KrW4EqNUsAEx46jwEhEQE+zeTVVjVLA1lmHgdBIREAyjfLbX41SwFCY5O/MSERAe70cJGCNUsDujN4AzEhEQFS6eo1gjVLAyM+DecpIREA8O1w= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745921626111, - "AQMAAAABAAAAEQAAALDgyKhgjFLA/P5Tsv9HREAmjv71XIxSwJoITWsDSERALyUTaVuMUsDV0oQvBEhEQHb+39FZjFLAiBZRugRIREB0ovMzWIxSwJm8fgoFSERArsftklaMUsCQYVkfBUhEQO6VdPJUjFLAy8ax+ARIREBH/Co= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745743138815, - "AQMAAAABAAAABwAAAGANb07IilLAtysf65xMREDuu9YnvopSwHh/r0+gTERAv4zxC7uKUsAFUjo3wExEQG4OBTe/ilLAgZ2dn8ZMREB3/VMXzopSwJUttKbBTERAnAj/otKKUsB5yG3MrExEQGANb07IilLAtysf65xMREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745760931839, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745678749695, - "AQMAAAABAAAABgAAANo04wa/jFLANC5eaoVKREAJr1EosIxSwNDBDWWKSkRA0kaxnquMUsDfdtw+n0pEQOV6tcGtjFLAKbMqh6JKREATkUgmw4xSwD9Zlb+LSkRA2jTjBr+MUsA0Ll5qhUpEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745920511999, - "AQMAAAABAAAABgAAAB+VN+mljFLAHNlvlotHREDYGBAOlYxSwJEdvFCpR0RANSaHSpuMUsDGqL3lskdEQGtSUCeqjFLAWFdv661HREBgsmCwroxSwKzyKBOZR0RAH5U36aWMUsAc2W+Wi0dEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745913171967, - "AQMAAAABAAAADwAAAESB1YgDjVLA9iWvWS9HREBY9ydG/IxSwGiLbMgxR0RAzDxvvfeMUsBI0JegRkdEQNurMRECjVLA62YsflZHRECtKa/tEI1SwCGbfYNRR0RA4we/chONUsD4CLrtRUdEQOQrAhUOjVLAbjrjPT9HREDV1s8= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745673965567, - "AQMAAAABAAAABgAAAEvjnHf2i1LAPSLRNGNLREA8m+1D6ItSwL3ZYPVnS0RAVdVzueOLUsAaBV7PfEtEQFNTPCboi1LAeowAnINLREAh5ikQ9YtSwJ9Au7BmS0RAS+Ocd/aLUsA9ItE0Y0tEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745673408511, - "AQMAAAABAAAACAAAALu+rP0+jFLAFZO+8dZKREBwIdIeMIxSwFla8uvbSkRAsHDnACyMUsCsmrvU7kpEQD17KOM1jFLA0yHRc+dKREDaHSmNPoxSwP+vXF34SkRA6nN7k0eMUsBq4qLW7kpEQPSifVJJjFLAABdO0eZKREC7vqw= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745730457599, - "AQMAAAABAAAAFgAAAFC5Mnp5jVLApC7JuSlIRECCNz6dao1SwMdz+rQuSERAAxK1FGaNUsB/Ms+NQ0hEQMlUNGlwjVLAVfqAa1NIRECGoGfFfY1SwLPuP/FOSERAJLS19n2NUsCxrrQ2TUhEQG7V+1p+jVLAQGxP70lIREBH65U= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733570559, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745672851455, - "AQMAAAABAAAADwAAAKGV1vf+i1LAVCD6s/9KREAkb9cY8ItSwL79760ES0RAS6x3juuLUsBGQryHGUtEQGwbygf0i1LAJW8njSZLRECDK1bD9ItSwG9lkhwmS0RA+S3loviLUsClnVOJJUtEQHh2Qfb6i1LACQXJVCRLREB4iTo= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745679634431, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745729343487, - "AQMAAAABAAAAMAAAALZOdEeBjVLAuBxeecZHRECt1b9qco1SwHIWjXTLR0RAkaFQ4m2NUsA83TBN4EdEQF/MqTZ4jVLASvizKvBHREC1qGG0go1SwD9bjabsR0RA/if6toKNUsDrgP2F7EdEQFP048mCjVLAMdgQxutHREB3w1Q= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745696870399, - "AQMAAAABAAAABgAAAEWNn5Zfi1LAgCxlxitIRECZTqSeXotSwGFA4TgwSERAUeOs8WiLUsC89vAXQEhEQHlj38Rzi1LAr3/MeDxIREBIZEZ1Y4tSwFVgYpswSERARY2fll+LUsCALGXGK0hEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745742909439, - "AQMAAAABAAAABwAAABpFAxQMi1LAKc7H7iBNREArX/jxAItSwN0vkKckTURAt+MycwOLUsDWUVVhJk1EQFn34MwHi1LAdi8zCSpNREDxR4LqC4tSwO4heSsuTURAVQ/kDRKLUsBEojUeKk1EQBpFAxQMi1LAKc7H7iBNREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745724559359, - "AQMAAAABAAAABwAAALzcUd5IjVLAoCu/nUhJREC81p8AOo1SwFsl3JhNSURAlu60dzWNUsAEdDVyYklEQGz0j8w/jVLASxiAUHJJRECAqMkSRo1SwIYIUzZwSURADEdtl0yNUsBlF5tVTklEQLzcUd5IjVLAoCu/nUhJREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745681633279, - "AQMAAAABAAAACAAAAHFDkU/Qi1LA+6JIo5ZLREBo0CpwwYtSwD31HZ2bS0RAjCaF5byLUsD1nSh3sEtEQJTYWTrHi1LAUUlsV8BLREA6o7cGzYtSwEBezGa+S0RAtPl/1dGLUsCbaA+VtUtEQKNTumjZi1LA7hZenqRLREBxQ5E= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745723445247, - "AQMAAAABAAAAIgAAAP+rvqxQjVLAp+2oWuVIREDrtEzPQY1SwKyfw1XqSERA9sF7Rj2NUsDw+usu/0hEQHmtMJtHjVLARvMHDQ9JRECZDjp3UY1SwOduSb8LSURAmy3qFFGNUsC8VxJ1C0lEQGJCHqRQjVLAXAF+CQtJREBL7aw= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745698312191, - "AQMAAAABAAAABgAAAG08OvjeilLAAk6WhphJREAXiRYn3opSwHp3p6WzSURASdt4DN6KUsCTTEAZt0lEQAdjDkXgilLAksMkW7ZJREC98xLQ5IpSwK4ObYKhSURAbTw6+N6KUsACTpaGmElEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236746168827903, - "AQMAAAABAAAACwAAAOMHv3ITjVLA+Ai67UVHRECtKa/tEI1SwCGbfYNRR0RASSCIQRuNUsCoXQVhYUdEQFJBCB4qjVLAnW47ZlxHREBBZzVeKo1SwL8+Jj9bR0RAEqjAJyiNUsBQpshPWkdEQGmfbbkjjVLAMafh2ldHRECVqug= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745679962111, - "AQMAAAABAAAABAAAAFysMkV+jFLAjn+zF9VKRED9fQTvdYxSwKC1NOLXSkRAGOmRNXSMUsBEG0rO30pEQFysMkV+jFLAjn+zF9VKREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761587199, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745743237119, - "AQMAAAABAAAABQAAAHwQ22JDi1LAVrY8G/tMREDWWMFAPYtSwJCpPyj9TERAS5QPEDuLUsB8Dzo1B01EQIhW+cFAi1LAdqb41P5MREB8ENtiQ4tSwFa2PBv7TERA" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745700311039, - "AQMAAAABAAAABwAAAG/X5WXkilLAVrdHZ6ZIREBjPyg624pSwFetVXipSERARaTUKNuKUsDEqJYAvkhEQN6WNmrbilLAW8AID9BIREA5n/0t6opSwNKdHR/LSERANhnMuO6KUsAT0dxGtkhEQG/X5WXkilLAVrdHZ6ZIREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745678847999, - "AQMAAAABAAAABgAAAIj8SbvLjFLA/z9h1G1KREDZrW2Qw4xSwFc8lpBwSkRA2jTjBr+MUsA0Ll5qhUpEQBORSCbDjFLAP1mVv4tKREAyXwIQx4xSwCYt7JSHSkRAiPxJu8uMUsD/P2HUbUpEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745921167359, - "AQMAAAABAAAAEAAAAKpBmSoxjFLAVBV0KgpIRED1+tsXMIxSwFhnw8cLSERApyPfVi6MUsDCi142D0hEQMWNn+ksjFLAf5uV5RJIREDhGj3pKoxSwHFZtOIWSERACuO+oCiMUsBPdzyYGkhEQP3niRcmjFLAunh29B1IREBiNAs= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745696083967, - "AQMAAAABAAAABwAAAMyzxCgEjFLA7KJzdS9IREBu3gM3/ItSwO2BqIQySERASSVnIfSLUsB7p8hoN0hEQLXuThv0i1LAX6sObDdIRECckX6C9ItSwBocpQo4SERAsum3XwOMUsCzJPUQM0hEQMyzxCgEjFLA7KJzdS9IREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745692413951, - "AQMAAAABAAAACgAAADDKLXbmilLAKU0UcB5IRECm7lIW3YpSwAIPmpIhSERAH2+7+9yKUsCZ6njbK0hEQOuxW87cilLApw88aD1IREAE2tXF3IpSwEW4R5dASERAKCJytNyKUsDzfBsXR0hEQEMTtWDdilLAw4z7H0hIREA0Zyc= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745763586047, - "AQMAAAABAAAABwAAACTefjTeilLAaUjOVz5KREBedQAm14pSwAbCx7NASkRA1oz9atSKUsA23nP2ZkpEQCWaJR7VilLAnnrlCWhKRECJLfH844pSwGA6JBFjSkRAId0TiOiKUsC8dRE4TkpEQCTefjTeilLAaUjOVz5KREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745913270271, - "AQMAAAABAAAADgAAADTlw9XijFLANH0WDShHRECJpqD54YxSwC4EOU4oR0RAlFrR4d+MUsAMQHYZKUdEQEjurdHdjFLAvhj/DipHREALh6TK24xSwD4NLC4rR0RA2usdztmMUsBZZjV2LEdEQJ+QvQ7XjFLAZJ+IVy9HREC48dQ= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745699196927, - "AQMAAAABAAAABQAAALrsGn7bilLAuFfbgQJKRECdmFAc24pSwJ6EgfYJSkRA/2kpzNqKUsC/hKG4DkpEQMxPPffcilLAXBuwxQRKREC67Bp+24pSwLhX24ECSkRA" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745695526911, - "AQMAAAABAAAABQAAAIRo44zDi1LALs7IBFtIRECnGKKbwYtSwLNuDmBcSERA5S3Pf8GLUsACxJtwXEhEQMdPtWDDi1LAoZytz1tIRECEaOOMw4tSwC7OyARbSERA" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745680846847, - "AQMAAAABAAAABwAAABMxZEWvi1LAlzqABe9LRECXScBloItSwJGTPP/zS0RA07Ds2puLUsD7ymnZCExEQOJR4Lugi1LA94a4WBBMREAQZNodo4tSwNinvkcLTERA+pIzCrGLUsBy1VS98UtEQBMxZEWvi1LAlzqABe9LREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745769811967, - "AQMAAAABAAAABwAAAFbvBmOrilLANo0bQ+VLREDGnT2DnIpSwC5PyjvqS0RA56Ztm5iKUsBVd9Ul/EtEQG61ciKmilLAQ0i3mv9LREBlQC3NsYpSwDKctRgHTERAhdExt7WKUsB9tTEk9UtEQFbvBmOrilLANo0bQ+VLREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236746168598527, - "AQYAAAACAAAAAQMAAAABAAAABAAAAMYbEV82jVLAcHR5nmtHREBkv/dxNI1SwJdctkNsR0RA1WQIwjONUsCPAKtsb0dEQMYbEV82jVLAcHR5nmtHREABAwAAAAEAAAAHAAAAJsRYLUiNUsDiJhvEbkdEQPRca30xjVLAU6dZ2nk= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745750904831, - "AQMAAAABAAAABgAAAPBjVKnZilLAqUM/HgtNREAm6djIyopSwNdDPBcQTURAIwV0kcmKUsC1/KqrFU1EQPpPG/vQilLAY0o+SxdNREBfton844pSwGCcPf0aTURA8GNUqdmKUsCpQz8eC01EQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236746168041471, - "AQMAAAABAAAAKQAAALlJtLqljVLATwxtDEFHRECyy2pnnY1SwOz08x1FR0RA5nEUeZyNUsB6mDtmSUdEQEx0E7ihjVLA5SbidFFHREDc8I68oY1SwC+Lt25RR0RAZ42B8qGNUsBV3b8dUUdEQBLr4S6ijVLAvRVN0VBHRED9au0= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745729441791, - "AQMAAAABAAAARQAAAMbjowCJjVLAr6r2jrBHREBxmc3PhY1SwJ8fwaCxR0RAtk50R4GNUsC4HF55xkdEQILDmUyGjVLADwMzL85HREBCxyVMho1SwFOq+gvOR0RAB4btRoaNUsBkrEybzUdEQEuJ9T2GjVLAxewqK81HREBtW0M= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745725771775, - "AQMAAAABAAAACgAAAFJBCB4qjVLAnW47ZlxHREBJIIhBG41SwKhdBWFhR0RAFkXhuBaNUsCFCVQ5dkdEQGpvzgwhjVLALRXnFoZHREDEyGTpL41SwD5XExyBR0RA9FxrfTGNUsBTp1naeUdEQGAQxh8qjVLA7wfWc31HREDVZAg= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745921495039, - "AQMAAAABAAAADgAAAFlfhFdzjFLA98u/xeRHREBmDkG8a4xSwLzO+y/yR0RAwYsfP2iMUsD/Vnzg9kdEQG5Dez5ojFLAohZT4fZHREAf+9Y9aIxSwOI2EuL2R0RAqA5AnWSMUsC/VRtS+0dEQBSyNJxkjFLAIAxmU/tHREAbjiw= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745692741631, - "AQMAAAABAAAABQAAAAHypEjeilLAPfK0NdpHREDE33S73YpSwKCHSLX6R0RAHFNGruCKUsCZ1964+UdEQEKn9DjlilLAkjkO4eRHREAB8qRI3opSwD3ytDXaR0RA" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745681731583, - "AQMAAAABAAAABgAAAFXVc7nji1LAGgVez3xLREAv+yDa1ItSwLy4RMmBS0RAcUORT9CLUsD7okijlktEQKNTumjZi1LA7hZenqRLREBSUzwm6ItSwHmMAJyDS0RAVdVzueOLUsAaBV7PfEtEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745673834495, - "AQMAAAABAAAABAAAAOKa9+v6i1LAfkZ+mlFLREBOQabR94tSwMz8LtpfS0RA7geSw/yLUsAOyQGVU0tEQOKa9+v6i1LAfkZ+mlFLREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745673277439, - "AQMAAAABAAAACgAAACvMfWZSjFLAqBazHb1KRECTx7aHQ4xSwGY8+BfCSkRAu76s/T6MUsAVk77x1kpEQPSifVJJjFLAABdO0eZKREC00c5LToxSwJBIEyflSkRAPBFL/U6MUsCHseZv3kpEQERbKEZRjFLAIPviJ+RKREBn51o= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745672720383, - "AQMAAAABAAAADAAAAMb1C2ESjFLAwV4t4OVKRECjZyCCA4xSwL2bNNrqSkRAoZXW9/6LUsBUIPqz/0pEQPs5jEwJjFLAu7vGkw9LREBzbpq/DoxSwJzt5sANS0RAx10I9RGMUsDA5h+HBUtEQOl6uNAUjFLAw0fzPAJLREARTko= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745758015487, - "AQMAAAABAAAABAAAACGkevmMilLAdpNQ/7JLREB+k+jbiopSwE9M1CO2S0RAW+DbZoyKUsA0AtaftUtEQCGkevmMilLAdpNQ/7JLREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745736552447, - "AQMAAAABAAAAEwAAABCG53ESjVLA7uNx0EJKREBIKI6TA41SwD21cMtHSkRAz+HDFwONUsAsgW4ESkpEQNhqxDYDjVLAFwaoE0pKRECpDesZBI1SwP/FAJ1KSkRANEitAgWNUsA42e4tS0pEQIxZd6UFjVLAmzLynUtKREB/wbU= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745743335423, - "AQMAAAABAAAABAAAABTMGT1Vi1LAduFtzeFMRED8IWWsUItSwNkwQFTjTERA10BbHU+LUsAOw4d76kxEQBTMGT1Vi1LAduFtzeFMREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745742778367, - "AQMAAAABAAAABwAAAMjQ938fi1LAVs71GgdNREDnlYqfEItSwHeVOhQMTURAGkUDFAyLUsApzsfuIE1EQFUP5A0Si1LARKI1HipNRECq0/X0KItSwD2kBAAbTURAmwD01CmLUsC0djT8Fk1EQMjQ938fi1LAVs71GgdNREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745682059263, - "AQMAAAABAAAACAAAAEoLgQV1i1LAgfkcgTxMREB+WKIlZotSwFEopXpBTERAh+WMmmGLUsDtleZUVkxEQJQOau9ri1LABCuuNWZMREAXVfyqeotSwIh9R0hhTERAFEPU6XqLUsBTWqrCYExEQOmOYFp/i1LAJG7MYUxMREBKC4E= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745692512255, - "AQMAAAABAAAABwAAAALwKmvcilLAqbNYemJIREB2vJ853IpSwNmdr/50SERAWHcvAdyKUsBCN9QYgkhEQPOY8f7bilLAza/rj4JIREBeNuCd3opSwCw1kq+BSERAdJmqKOOKUsAqlHvXbEhEQALwKmvcilLAqbNYemJIREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745724428287, - "AQMAAAABAAAABgAAAMZSGE5PjVLAaJpCITNJREB82CZnTY1SwMijbMQzSURAvNxR3kiNUsCgK7+dSElEQAxHbZdMjVLAZRebVU5JRECrqaUtTY1SwHvM1khLSURAxlIYTk+NUsBomkIhM0lEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742221311, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745699295231, - "AQMAAAABAAAACQAAAAGEYg3milLAh7X6E9tJREAZaS/H3IpSwBcHzi3eSURAuf/rg9yKUsBGXMgC6klEQPc6uO3bilLAfz1k//lJREC67Bp+24pSwLhX24ECSkRAzE8999yKUsBcG7DFBEpEQJjNyNXrilLAKAnxzP9JRECWddE= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745680945151, - "AQMAAAABAAAABQAAAFz96SLAi1LAv6fuC9ZLRED31iHQs4tSwLjAWSvaS0RAEzFkRa+LUsCXOoAF70tEQPqSMwqxi1LAc9VUvfFLREBc/ekiwItSwL+n7gvWS0RA" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745691398143, - "AQMAAAABAAAACAAAADbyXZAbi1LAUHp6WvlHREDU1qaYF4tSwDAqN676R0RAwUQgDhOLUsCGcySGD0hEQHg05WAdi1LAAJhaZR9IREAcETM+LItSwNxVi2waSERAqih46S+LUsBl9gOVCUhEQIlyqGAmi1LAkGwjOwJIREA28l0= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745723314175, - "AQMAAAABAAAAKwAAADKN8ttfjVLAUJjk78xIREBPs3k1VY1SwNZZh4HQSERA/6u+rFCNUsCn7aha5UhEQKQUpW5ZjVLAaqP9zfJIREAdsel8WY1SwFHP2pzySERAloK+AlqNUsC/MdhB8UhEQOsjZ41ajVLArDxZTPBIREBNQOs= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745698181119, - "AQMAAAABAAAABwAAAEwaBObtilLAFHgZ0XdJREDPsSLQ34pSwH2V0IZ8SURAbTw6+N6KUsADTpaGmElEQL3zEtDkilLArg5tgqFJREAPXl6u84pSwHArsImcSURAhv9MOfiKUsDgNP+wh0lEQEwaBObtilLAFHgZ0XdJREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745762013183, - "AQMAAAABAAAACAAAAKlDKdKfilLAYkKWzZtLRECgAEmmm4pSwB7xfzKdS0RAIaR6+YyKUsB2k1D/sktEQFvg22aMilLANALWn7VLREDT9tu6lopSwGiz7YDFS0RAUASPmqWKUsCzuEiIwEtEQGu3KyaqilLA9NOVrqtLRECpQyk= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745679831039, - "AQMAAAABAAAABQAAAOnPVTaYjFLAmiVQE7lKREBaF51XiYxSwE3/3A2+SkRAf3rCJ4aMUsDRNUqyzEpEQKAIEl2YjFLApnjRTrlKREDpz1U2mIxSwJolUBO5SkRA" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745729540095, - "AQMAAAABAAAAKQAAALWoYbSCjVLAP1uNpuxHREBfzKk2eI1SwEr4syrwR0RAnZQ4rnONUsCW1mwDBUhEQK/0pQJ+jVLA9zj74BRIREAy0MTTho1SwM+FeewRSERAqDP8z4aNUsCKDkn/D0hEQNO6OsaGjVLA+gFRSQ9IRECKmx8= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745736323071, - "AQMAAAABAAAAFwAAAIGoyRJGjVLAhghTNnBJREBs9I/MP41SwEsYgFBySURAtAejQzuNUsDufO4ph0lEQFwy2K1AjVLAX3L/eo9JREDjJ6yvQI1SwEDIwS2PSURAKCQp/ECNUsCZuHejjElEQDpT429BjVLA+8AvVItJRECuUCM= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745921593343, - "AQMAAAABAAAABgAAAE9c1DKEjFLAFRksC8dHREBZX4RXc4xSwPfLv8XkR0RASZJXfnSMUsBAZMeK5kdEQGDnR1uDjFLAFsGbkOFHRECYG4Tkh4xSwO3OR7jMR0RAT1zUMoSMUsAVGSwLx0dEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236746167582719, - "AQMAAAABAAAABgAAAE02J9mMjVLAjH4gNU1HREDTiTlhcY1SwPV8haFaR0RAFsj/N3qNUsCVSRI1aEdEQHg6dBSJjVLAMJzlOWNHRECjlbOcjY1SwBiZeWFOR0RATTYn2YyNUsCMfiA1TUdEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745725313023, - "AQMAAAABAAAACAAAAKmCacK3jFLAJQi4Ym9HREDEmav/s4xSwCv2LqVwR0RAOggkCKeMUsAoi2mciUdEQB+VN+mljFLAHNlvlotHREBgsmCwroxSwKzyKBOZR0RAHUoWjb2MUsDCSskYlEdEQFPAEBbCjFLAbK2JQH9HRECpgmk= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745921036287, - "AQMAAAABAAAADAAAACj9D6ZEjFLASZNCgQBIRECd6uHiQIxSwKd1+6IASERAsP9vKT2MUsBo2DU7AUhEQN7N6oI5jFLA86gvRgJIREALTGHqNoxSwC+sruUDSERA6dS0bzSMUsCkpNQMBkhEQNFvTSQyjFLASmvOsghIRECqQZk= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745681829887, - "AQMAAAABAAAABAAAADqjtwbNi1LAQF7MZr5LRECU2Fk6x4tSwFFJbFfAS0RA89LTEsSLUsBCCgbTzktEQDqjtwbNi1LAQF7MZr5LREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745673932799, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745698508799, - "AQMAAAABAAAACAAAAOwKhlXiilLAAzlNYC5JRECY1qId4IpSwMenLx4vSURAojQ9VuCKUsCemTlNNElEQCGXDLvgilLAyTTvOEVJREBRTn3L4IpSwJM6VYtVSURAsv67HeiKUsAhJ6MYU0lEQDSJpqjsilLAw1ocQD5JREDsCoY= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236746168467455, - "AQMAAAABAAAABQAAAF3ydb1fjVLAay1OQGNHREAmxFgtSI1SwOMmG8RuR0RAuIiAok2NUsAnYz8md0dEQBjvBX9cjVLAIy0/K3JHREBd8nW9X41SwGstTkBjR0RA" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745672818687, - "AQMAAAABAAAACAAAAPvMF8oljFLAZv5VDMxKREA31z/rFoxSwIGabgbRSkRAxvULYRKMUsDBXi3g5UpEQFLyw7UcjFLAadrhv/VKREArQQmiJ4xSwFXvABjySkRAsHDnACyMUsCsmrvU7kpEQHAh0h4wjFLAWVry69tKRED7zBc= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745758113791, - "AQMAAAABAAAADQAAAP+Cb7V5ilLAZdUVkNBLREDS+7j2eIpSwIjMzMfTS0RAcQsE0XiKUsDcdJ9q1EtEQJE1R9x3ilLA4cEU4NlLRED8yekvd4pSwJt2BnPfS0RAbF7jzXaKUsAmLEsW5UtEQF9QvLZ2ilLA0RtOvOpLREBJd6Y= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745679601663, - "AQMAAAABAAAAIQAAACzMfz75jFLACcGj7DdKRECfEilg6oxSwC5oh+c8SkRA6TTabOmMUsC/y8lFQUpEQEvVcqTpjFLA1/1jR0FKRED+DH1K6oxSwE5D04ZBSkRArUzC/OqMUsAfZjgpQkpEQAgR94vrjFLApwFgu0JKRECaQlU= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745696837631, - "AQMAAAABAAAACAAAAHpj38Rzi1LAr3/MeDxIREBR46zxaItSwLz28BdASERAfuxfZ2SLUsBWVR7wVEhEQKGzfLpui1LAClk5z2RIREBoy+iXfYtSwIHgDtZfSERArN8hIoKLUsCHLdP9SkhEQIvvORt9i1LAUjWXQ0NIREB6Y98= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745742876671, - "AQMAAAABAAAACAAAALVpaxXtilLAe1PASvFMREDZhwM13opSwAy7zkP2TERA8GNUqdmKUsCpQz8eC01EQF+2ifzjilLAYJw9/RpNREClgCsC5IpSwAfxVf4aTURAATOf3vKKUsDajJcGFk1EQH9tOmr3ilLADqwYLAFNREC1aWs= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745735536639, - "AQMAAAABAAAACQAAAFVerKgtjVLA+GJxtsVJREAQrqbKHo1SwBhKf7HKSURAPuKLQRqNUsB0UBCL30lEQEqvipYkjVLAmr+hae9JREBpnKZ0M41SwOsIim7qSURAxGj8tjeNUsBl9+jZ1klEQBupNLw3jVLAlaqSz9VJREBS+/w= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745763782655, - "AQMAAAABAAAABQAAAGNgliHLilLAj5WO2+NKREDBzi5tyIpSwG9it+oGS0RAu1bxgc6KUsCuVUziBEtEQKIMRg3TilLAKNzsCPBKREBjYJYhy4pSwI+VjtvjSkRA" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745742319615, - "AQMAAAABAAAACAAAAI8a3MJZi1LAZMc/n7lMREB5rKniSotSwMfAuJi+TERARTtkV0aLUsAXyjFz00xEQPwhZaxQi1LA2TBAVONMREAUzBk9VYtSwHbhbc3hTERAhFTWEWOLUsBEdtUyzkxEQE1c3xdki1LAZg02gMlMRECPGtw= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745699393535, - "AQMAAAABAAAABgAAABZXx+bZilLAXJ/C5BtKREDY2MHI2IpSwGK2GsgpSkRAXnUAJteKUsAGwsezQEpEQCTefjTeilLAaUjOVz5KRED0gZ+/4opSwAiY0H4pSkRAFlfH5tmKUsBcn8LkG0pEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745695723519, - "AQMAAAABAAAACwAAAMdPtWDDi1LAoZytz1tIREDlLc9/wYtSwALEm3BcSERA8V9t4LyLUsCXZJYwX0hEQLhP40u5i1LA8J8uq2BIREAdbySWtYtSwIHEuqdhSERAkOASSrSLUsC60xrQYUhEQGgqRvmvi1LAXRV4oXVIREBplqY= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745770565631, - "AQMAAAABAAAABgAAAL+M8Qu7ilLABVI6N8BMRED3i+BMuopSwKqQ99/HTERAau9xW7iKUsDrU7c/3ExEQAYORKu6ilLA97vqedtMREBuDgU3v4pSwIGdnZ/GTERAv4zxC7uKUsAFUjo3wExEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745692053503, - "AQMAAAABAAAACAAAALI/Y7tIi1LAUxWdKxZIRECMFF9uRYtSwABFylIlSERABR1RwU+LUsAry+YxNUhEQJlOpJ5ei1LAYUDhODBIREBFjZ+WX4tSwIAsZcYrSERATCsLel2LUsDt3mQjKUhEQF2Yfk9Ni1LAbw26ShhIRECyP2M= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745691496447, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745762668543, - "AQMAAAABAAAADQAAAMnMvqDSilLAgrRmC4BKREBM92Bw0opSwNJWGbGCSkRApebsSdKKUsAXBA/MhEpEQABiZi3SilLAPll8WYZKRECduvzL0YpSwMTZ76eLSkRA5LxJsNGKUsAQ+JMpjUpEQAzII43RilLAL38yF49KREAmVOM= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745698279423, - "AQMAAAABAAAACAAAAAdjDkXgilLAksMkW7ZJREBJ23gM3opSwJNMQBm3SURAKLotRd2KUsBYv2fx0ElEQHze3N7cilLA+ZyQA9pJREAZaS/H3IpSwBcHzi3eSURAAYRiDeaKUsCHtfoT20lEQGEgaZjqilLA2ustO8ZJREAHYw4= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745769451519, - "AQMAAAABAAAABQAAAOaTaHXEilLAzKLeUl9MRECiHMIJwopSwI4IEFl4TERAnkmchcKKUsDQhaoveExEQNM7QxHHilLAvESOVWNMREDmk2h1xIpSwMyi3lJfTERA" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745736421375, - "AQMAAAABAAAAKgAAAPYNYtkljVLAoMGf+yhKRED1SRz7Fo1SwK7tr/YtSkRAEIbncRKNUsDu43HQQkpEQMJl/UgVjVLAWxMyLUdKREBindMnF41SwDO4waRGSkRAAF87kheNUsBzHJ6iRkpEQKRTDvsXjVLAkmamhkZKREBYXJ4= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745921691647, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745681928191, - "AQMAAAABAAAACQAAAE+kS3CIi1LAkbVIrSJMRECXioCQeYtSwDdI4qYnTERASguBBXWLUsCB+RyBPExEQOmOYFp/i1LAJG7MYUxMREAgk2Z1hYtSwMLhAVdKTERAEo+1M4qLUsBorzhBQExEQBOkhXCRi1LA14/F3TBMREAqAHo= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745696051199, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745692381183, - "AQMAAAABAAAACAAAADRnJz7silLALShqJ0NIREBDE7Vg3YpSwMOM+x9ISERAKxvcqNyKUsClj6hrS0hEQALwKmvcilLAqLNYemJIREB0maoo44pSwCqUe9dsSERAeyozBvKKUsBHaODeZ0hEQJGg55D2ilLAR4fQBlNIREA0Zyc= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745763553279, - "AQMAAAABAAAACQAAAIkt8fzjilLAYDokEWNKREAlmiUe1YpSwJ565QloSkRA9Y6J9tOKUsAS1TZWbUpEQOeGhijTilLAx5TjnHhKREDJzL6g0opSwIK0ZguASkRAydGT5tqKUsDclGXDjEpEQFSmdcXpilLA34yayodKRECnYZo= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236746169122815, - "AQMAAAABAAAAHwAAAHg6dBSJjVLAMJzlOWNHREAWyP83eo1SwJVJEjVoR0RATISqr3WNUsAIF4UNfUdEQDCY3QOAjVLAz4TZ6oxHREBvQmjgjo1SwDoHo++HR0RAzcxrl4+NUsAGAuGlhEdEQKUCd7+PjVLA2zRwoINHREALQHY= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745680257023, - "AQMAAAABAAAACAAAAMv1sAJ/jFLAcpOKLq5KREBk4/ojcIxSwBpC/CizSkRAH7MammuMUsD+KcoCyEpEQP19BO91jFLAoLU04tdKREBbrDJFfoxSwI5/sxfVSkRAf3rCJ4aMUsDRNUqyzEpEQFoXnVeJjFLATf/cDb5KREDL9bA= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745672916991, - "AQMAAAABAAAACAAAAHNumr8OjFLAnO3mwA1LRED7OYxMCYxSwLu7xpMPS0RAaicA9gaMUsAFuptQGktEQDmF8sQHjFLAJ/EeZRlLRECgGY+oCYxSwPpCVQAXS0RATQaFdguMUsAxYeF1FEtEQNcrki0NjFLAOGqIxxFLREBzbpo= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745690710015, - "AQMAAAABAAAABQAAACb5OGLcilLAURRXke1IREDfA6Iq3YpSwAHiVIL9SERAjlqPpN2KUsD/cP+mBElEQAWySBjhilLAZwy7z/RIREAm+Thi3IpSwFEUV5HtSERA" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745761882111, - "AQMAAAABAAAACgAAALIdTT2zilLA7ddL+4FLREDRx5ceqYpSwBqAPl2FS0RAlwJC5qiKUsDU7QnLhUtEQCcu9q2iilLAtVg/M5FLREAdq0/NoYpSwCvYN7eSS0RAqUMp0p+KUsBiQpbNm0tEQGu3KyaqilLA9NOVrqtLRECiLss= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745750872063, - "AQMAAAABAAAABgAAAAYORKu6ilLA97vqedtMREBq73FbuIpSwOtTtz/cTERAQv5NjLSKUsDKYGcwBE1EQFzYInTAilLAKfO+NQBNREBr5eX/xIpSwATDXFvrTERABg5Eq7qKUsD3u+p520xEQA==" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937470463, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751857385471, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751873212415, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751936913407, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751933079551, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751873376255, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937077247, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751872098303, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751872819199, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937241087, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751936684031, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751871705087, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751938125823, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751873146879, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937568767, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751872589823, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751933014015, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751873310719, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937011711, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751872032767, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751872753663, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751933177855, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937175551, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751933341695, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751871639551, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937339391, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751938060287, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751873081343, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751871803391, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751873245183, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751936946175, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751871967231, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751872688127, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751873409023, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937110015, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751872851967, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937273855, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751872294911, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937994751, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751873015807, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751936716799, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937437695, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751871901695, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937601535, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751933046783, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751938322431, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751873343487, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937044479, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751872786431, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937208319, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751871672319, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937372159, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751936815103, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751871836159, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751872557055, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751932981247, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751938256895, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751873277951, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751936978943, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751872720895, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751872884735, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751933308927, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937306623, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751857221631, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751873048575, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751936749567, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751871770623, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751617425407, - "AQMAAAABAAAABwAAAFuk1FT4fVLAaMHh5nxRRECVVYdY9H1SwD3Fi8d9UURADxBsX/d9UsBOjuzxklFEQAULzkP5fVLAuN//AaBRRECTVndQ/H1SwNAtCQCfUURAb3JF6AB+UsBq1q8nilFEQFuk1FT4fVLAaMHh5nxRREA=" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751877046271, - "AQMAAAABAAAABwAAAEGj2xvoflLAoddU7BdSRECDgRJf4H5SwCrlDPAdUkRAYSTMy9l+UsBwJFt5I1JEQO2jvNjTflLA02SqbChSREDWWrny1X5SwGVRuqsrUkRAHANr2OR+UsBt5Ja+JlJEQEGj2xvoflLAoddU7BdSREA=" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751872458751, - "AQMAAAABAAAABwAAANEgXKx6flLAQcX68e1QREAZnLrUdX5SwEXm0YvvUERAs7lwPXF+UsCcDwRkBFFEQCyjM4t7flLAtKykTxRRREA4YGM/fn5SwLNpy2oTUURAhY2b4n1+UsA3GTSeD1FEQNEgXKx6flLAQcX68e1QREA=" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751871999999, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751933276159, - "AQMAAAABAAAABgAAAJNWd1D8fVLA0C0JAJ9RREAFC85D+X1SwLjf/wGgUURAky60m/59UsDJ767lxFFEQA27WgYCflLAhN+oxMNRREDdCiueBn5SwAyAOuyuUURAk1Z3UPx9UsDQLQkAn1FEQA==" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751876882431, - "AQMAAAABAAAACAAAAAyzeGDpflLAYhwA8BZSREBBo9sb6H5SwKHXVOwXUkRAHANr2OR+UsBt5Ja+JlJEQFBI/ybvflLAlUNhqjZSREC0zLMM/n5SwFigIr0xUkRALIZ1i/5+UsAfvWh9L1JEQLRsbafuflLAqiI0+RtSREAMs3g= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751938158591, - "AQMAAAABAAAABgAAAPOiYf1QflLAByZ+nZFSRECuJFQXQn5SwDEvE4qWUkRA3uhx7D5+UsBjMLvqpFJEQNvH5kpHflLAoYs4I55SREDgVFj3Un5SwHEgOquUUkRA86Jh/VB+UsAHJn6dkVJEQA==" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751875506175, - "AQMAAAABAAAACAAAAH/eC4drflLAF7Q8oN9QREB2wvSuYH5SwIGh+jXjUERAkiKR8Vt+UsDtGiWu51BEQAgOuApYflLAfDblZPlQREBvQ2RYYn5SwKmGklAJUURAs7lwPXF+UsCcDwRkBFFEQBmcutR1flLARebRi+9QREB/3gs= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751936782335, - "AQMAAAABAAAACQAAACzUaK99flLAJ2tl14JSREDP+mvJbn5SwO5DJ8SHUkRAbjHMMWp+UsCSTSqdnFJEQBH63i9uflLAX9E8yKJSREAE7b91dX5SwNFT2jGhUkRAA4jWq4R+UsBX1BnYnVJEQML7W5iFflLAOCL0pJ1SREB7Rdw= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751857319935, - "AQMAAAABAAAABgAAAIIjIicff1LA7++ImFdSREDtoN/4HH9SwI1HWoBhUkRAIoC1Ryd/UsDInhZscVJEQHrUUoUxf1LA1/bvCG5SREBqbveYJn9SwM4+8qFgUkRAgiMiJx9/UsDv74iYV1JEQA==" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751933112319, - "AQMAAAABAAAACAAAANq8cCgTflLAyqZKEzJSRECf3uGPDn5SwDhJFpgzUkRAdwxdVg9+UsBaq8O4OFJEQHrwDZcSflLA1fkX0U5SREBdN7n3E35SwB2yGndYUkRAUgWc3hh+UsBXI2zYVlJEQIwkdXYdflLA4aSp/0FSREDavHA= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751937535999, - "AQMAAAABAAAABwAAAGXD31O5flLAxhigJftRREB2j2sHt35SwFTBM+j7UURAJSUmcLJ+UsC2pQfBEFJEQFD/jL68flLANHLrrCBSREBwl37cvH5SwMO9BKMgUkRATYF/ibl+UsAGpXM0/VFEQGXD31O5flLAxhigJftRREA=" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751877013503, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751938289663, - "AQMAAAABAAAABwAAAH87dgTPflLA3aFLmshSREC9aFoewH5SwG2/aIfNUkRAAUFvPb1+UsATCp2Z2lJEQHJVohfOflLAbw1c2dZSREDBgg/m1X5SwLyEbhXVUkRAiBumsNZ+UsAgQ1l01FJEQH87dgTPflLA3aFLmshSREA=" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751858368511, - "AQMAAAABAAAABgAAAGCGxjMPf1LAAyT6C6BSREDi4M5NAH9SwB2oVfmkUkRAcztnW/x+UsBh+V3mtlJEQMbBKOUOf1LA6EEXhqhSREBc+TC8En9SwBuE4IClUkRAYIbGMw9/UsADJPoLoFJEQA==" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751872425983, - "AQMAAAABAAAACAAAADhgYz9+flLAs2nLahNRREAsozOLe35SwLSspE8UUURAT47n83Z+UsDh3usnKVFEQO+jvkGBflLAneaXEzlRREBzq4fSgX5SwP17ueM4UURAxlGhNoF+UsDFpImBMlFEQN9+Qs5/flLAsfwLwCNRREA4YGM= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751933243391, - "AQMAAAABAAAACQAAAA27WgYCflLAhN+oxMNRRECTLrSb/n1SwMnvruXEUURAHMxUi/99UsCnHwVcy1FEQCnT7qsAflLAFwFvI9NRREAct22yAn5SwGnKB5DjUURACQfUowN+UsC3++Dj6VFEQAoYULwHflLAgARpiehRREDDmyI= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751877308415, - "AQMAAAABAAAABwAAANA9HiyyflLAKsS9MrBRREDto16Zq35SwKGyJV+yUURAhJ0dAqd+UsC+hs83x1FEQMcbXFCxflLAWIGcI9dRRECMc4qvtX5SwBZSjLHVUURADJleB7N+UsDJ0u02uVFEQNA9HiyyflLAKsS9MrBRREA=" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751857287167, - "AQMAAAABAAAACAAAAHrUUoUxf1LA1/bvCG5SREAigLVHJ39SwMieFmxxUkRAEBm7sCJ/UsCFj05FhlJEQM4FhrQqf1LAw2pIppJSREAOYLMgP39SwI/dAZaCUkRAm3Zi0j9/UsDikdVuf1JEQLpltTAzf1LA50pRFXBSREB61FI= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751931244543, - "AQMAAAABAAAABQAAADYY5W4yflLA+hE0C69SREBFdWmZLn5SwM6tkU+wUkRAITioFS5+UsA1gJKlslJEQI2xqw0xflLAhlAUKrBSREA2GOVuMn5SwPoRNAuvUkRA" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937961983, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751937503231, - "AQMAAAABAAAACgAAAHCXfty8flLAw70EoyBSREBQ/4y+vH5SwDRy66wgUkRAG2NFJ7h+UsCDXtSFNVJEQKdrwHXCflLAmJPDcUVSRECsl4Vb0X5SwEi9sYRAUkRA1lq58tV+UsBlUbqrK1JEQO2jvNjTflLA02SqbChSRED7TwA= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751875309567, - "AQMAAAABAAAABQAAAI/Jx15tflLAtVNtQtdQRED0ZJE1aX5SwF5T4ivbUERAdsL0rmB+UsCBofo141BEQH/eC4drflLAF7Q8oN9QRECPycdebX5SwLVTbULXUERA" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751857876991, - "AQMAAAABAAAABAAAAJt2YtI/f1LA4pHVbn9SREANYLMgP39SwJDdAZaCUkRAUfHMH0F/UsCnG/8DgVJEQJt2YtI/f1LA4pHVbn9SREA=" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751857418239, - "AQMAAAABAAAABgAAABAZu7Aif1LAhY9ORYZSRECM+NbKE39SwFmquzKLUkRAYIbGMw9/UsADJPoLoFJEQFz5MLwSf1LAGoTggKVSREDOBYa0Kn9SwMNqSKaSUkRAEBm7sCJ/UsCFj05FhlJEQA==" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751934128127, - "AQMAAAABAAAABwAAAFIFnN4YflLAVyNs2FZSREBdN7n3E35SwB2yGndYUkRADq4U8BV+UsAv3oBDZlJEQC/lyEIZflLAn0XIX31SRECdR9mUHn5SwKwRrp17UkRAlZq0LCN+UsDHi9bEZlJEQFIFnN4YflLAVyNs2FZSREA=" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751871934463, - "AQMAAAABAAAACwAAADNjLjFHflLA9ZPyS/tQRED5HWuIQn5SwLU1S73/UERAk673Ezx+UsCJ8yHiBVFEQGxUb1k6flLA491zgQdRREBoSLPkN35SwMl0Nc0JUURAYLL4rTN+UsBQSQivDVFEQPPOX70wflLA7G05exBRREBxmx0= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751877275647, - "AQMAAAABAAAACQAAAItziq+1flLAFlKMsdVRREDHG1xQsX5SwFiBnCPXUURAZOMYuax+UsCpXVv861FEQHaPawe3flLAVMEz6PtRREBlw99TuX5SwMYYoCX7UURA45/9brh+UsArw/hc8lFEQPNdute2flLASqcZPuFRREBTxsU= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751938093055, - "AQMAAAABAAAACQAAAC+qEMk3flLA3xGqnYZSREC3CgbjKH5SwDjkI4qLUkRACYQoSyR+UsBmcRBjoFJEQEV1aZkuflLAzq2RT7BSREA2GOVuMn5SwPoRNAuvUkRAVSQkpzZ+UsDuy92dq1JEQN7ocew+flLAYzC76qRSRECuJFQ= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937634303, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751875440639, - "AQMAAAABAAAABwAAAJIikfFbflLA7BolrudQREDoDGM9W35SwES4C1joUERAz+nU8Eh+UsBaYBih+VBEQDNjLjFHflLA9pPyS/tQREC0da4lSX5SwF56WFH+UERACA64Clh+UsB8NuVk+VBEQJIikfFbflLA7BolrudQREA=" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751857254399, - "AQMAAAABAAAACAAAAOPvGj0Mf1LAIyI1YEBSREBJx15bCH9SwCxI4KhBUkRACrdSxAN/UsBhsvSBVlJEQLjgERMOf1LAu8G9bWZSREDtoN/4HH9SwI1HWoBhUkRAgiMiJx9/UsDv74iYV1JEQBohZ+0Yf1LALNL4CVBSREDj7xo= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751938387967, - "AQMAAAABAAAABgAAAMIN7pqcflLAddQKnLJSREDu5sdWln5SwAzhW660UkRAuy2L6pl+UsAEur0o2lJEQLEbElKiflLAqip2YddSREDiZIzppn5SwKAYQYjCUkRAwg3umpx+UsB11AqcslJEQA==" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751872983039, - "AQMAAAABAAAABgAAAGxjw5QdflLAy2ycskZRREAJHTUFFX5SwNam5YZJUURAJly2lxh+UsDDCRsAb1FEQNj2xUojflLA0GDedmtRRECD/mfiJ35SwCUXkp5WUURAbGPDlB1+UsDLbJyyRlFEQA==" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751872065535, - "AQMAAAABAAAABwAAAPPOX70wflLA7G05exBRRECTTLzTIn5SwPmVk7gdUURALiBBVRp+UsAHwLS8JVFEQJY3YywiflLAkytl2jFRREC70JMRMX5SwLATFe4sUURAcZsdqTV+UsATWuQVGFFEQPPOX70wflLA7G05exBRREA=" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751876947967, - "AQMAAAABAAAACAAAACyGdYv+flLAH71ofS9SREC0zLMM/n5SwFigIr0xUkRAScdeWwh/UsAsSOCoQVJEQOPvGj0Mf1LAIyI1YEBSREASkbjMC39SwL1netU/UkRAb6UCegN/UsBMUi+kNVJEQBeAuNH+flLA6ayz0y9SREAshnU= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751938224127, - "AQMAAAABAAAACQAAAK9apc+1flLApTI/m71SREDiZIzppn5SwKAYQYjCUkRAsRsSUqJ+UsCqKnZh11JEQHGZHYanflLAy/Mza99SREByYXbfqX5SwPFANuzeUkRAGdIcF71+UsDgpCSi2lJEQAFBbz29flLAEwqdmdpSREC9aFo= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751936847871, - "AQMAAAABAAAACAAAAJj82+OWflLA4O2/1o1SREB7Rdz9h35SwJL9nMOSUkRAwvtbmIV+UsA4IvSknVJEQPTpldiTflLAIjoIkJpSREDu5sdWln5SwAzhW660UkRAwg3umpx+UsB11AqcslJEQK4kZjKhflLAuMnqwp1SRECY/Ns= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751858302975, - "AQMAAAABAAAACAAAAEMO/v71flLAFRJpDZVSREC9RAkZ535SwNdeqfqZUkRAA+3OgeJ+UsC/4d/TrlJEQOs4ndDsflLAOpfkv75SREAAuqtD9n5SwMiy65+7UkRAcztnW/x+UsBh+V3mtlJEQOLgzk0Af1LAHahV+aRSREBDDv4= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751934095359, - "AQMAAAABAAAACAAAAJ1H2ZQeflLArBGunXtSREAv5chCGX5SwJ9FyF99UkRAHo2Dqxl+UsAb0CA4gFJEQHuwDmsdflLAyU+QvJlSREB0mRmfHn5SwKi26EKiUkRACYQoSyR+UsBmcRBjoFJEQLcKBuMoflLAOOQjiotSRECdR9k= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751872360447, - "AQMAAAABAAAACAAAAAaMDJquflLAcwfuuIpRRECZJ3PipX5SwItVz5qNUURAM1M0S6F+UsBYIWRzolFEQO2jXpmrflLAobIlX7JRREDQPR4ssn5SwCrEvTKwUURATgz9BLF+UsDnFL0PpFFEQID6xbuvflLAgunWWZdRREAGjAw= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751873114111, - "AQMAAAABAAAABgAAACvdMOoSflLAIaZiHHdRRED7Shf9CX5SwHF8jAN5UURAW6TUVPh9UsBoweHmfFFEQG9yRegAflLAatavJ4pRREAlbLPND35SwKlPeTuFUURAK90w6hJ+UsAhpmIcd1FEQA==" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751872196607, - "AQMAAAABAAAABgAAAIhy58SpflLArzZOHFZRREA/9d3nl35SwGcifcpZUURAs3mJnJZ+UsAMBfARWlFEQHammSugflLAemqZ1mhRRECi9nweq35SwN4W1DdlUURAiHLnxKl+UsCvNk4cVlFEQA==" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751871737855, - "AQMAAAABAAAACgAAAKVccKp8flLAgyH0601RREDlKDfFbX5SwJDUldhSUURALtjSLWl+UsDll/iwZ1FEQC+Su3tzflLAYCjInHdRREALJQthgn5SwCTXHLByUURAtp5b+IZ+UsCpk6vXXVFEQAD4Rr6GflLAmcTufV1RRED2F9A= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751931179007, - "AQMAAAABAAAABwAAAAmEKEskflLAZnEQY6BSREB0mRmfHn5SwKm26EKiUkRAK9x9FyF+UsChkx/Ds1JEQIdU3kIiflLAz6NziLxSREAhOKgVLn5SwDaAkqWyUkRARXVpmS5+UsDOrZFPsFJEQAmEKEskflLAZnEQY6BSREA=" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751877079039, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751938355199, - "AQMAAAABAAAABQAAALEbElKiflLAqip2YddSREC7LYvqmX5SwAS6vSjaUkRAsa5ZrZp+UsCNebch4lJEQHGZHYanflLAy/Mza99SRECxGxJSon5SwKoqdmHXUkRA" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937437695, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751858434047, - "AQMAAAABAAAACQAAAAPtzoHiflLAv+Hf065SREDbnsab035SwCCXDsGzUkRAfzt2BM9+UsDdoUuayFJEQIgbprDWflLAIENZdNRSRECpvTwo3n5SwGeIZYTOUkRAMLeyrOp+UsCOpsWcxFJEQAZ957LrflLA4zNv0cNSREDrOJ0= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751872950271, - "AQMAAAABAAAACQAAANj2xUojflLA0GDedmtRREAlXLaXGH5SwMQJGwBvUURAeRq/PBl+UsDgx1LDdVFEQCvdMOoSflLAIaZiHHdRREAlbLPND35SwKlPeTuFUURAAappGxp+UsCcg5InlVFEQN+C2gApflLAhshAO5BRRED9vX4= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751616376831, - "AQMAAAABAAAABgAAAC4gQVUaflLAB8C0vCVRREBUdiNUEn5SwAI2hkotUURACR01BRV+UsDWpuWGSVFEQGxjw5QdflLAy2ycskZRRECWN2MsIn5SwJMrZdoxUURALiBBVRp+UsAHwLS8JVFEQA==" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751937732607, - "AQMAAAABAAAABQAAAG4xzDFqflLAkk0qnZxSRECWOp/3Yn5SwL1ktwCfUkRAeOOJkmN+UsCItVYZpVJEQBH63i9uflLAX9E8yKJSREBuMcwxan5SwJJNKp2cUkRA" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751858270207, - "AQMAAAABAAAABAAAAAG6q0P2flLAyLLrn7tSREDrOJ3Q7H5SwDqX5L++UkRABn3nsut+UsDjM2/Rw1JEQAG6q0P2flLAyLLrn7tSREA=" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751857352703, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751872327679, - "AQMAAAABAAAACAAAALN5iZyWflLADAXwEVpRRECwEMFxin5SwD/XnbFcUURAtp5b+IZ+UsCpk6vXXVFEQAslC2GCflLAJNccsHJRREDVkwqvjH5SwHKz35uCUURAHARdlJt+UsDULRmvfVFEQHammSugflLAemqZ1mhRRECzeYk= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751933145087, - "AQMAAAABAAAACAAAAN1tV3INflLAYpxJTg1SREBY0l8hCX5SwMZUbLsOUkRAy7o7ogp+UsAo5urRGFJEQI63eQkMflLA6OQA5SJSRECf3uGPDn5SwDhJFpgzUkRA2rxwKBN+UsDKpkoTMlJEQEioR8AXflLA4C+dOh1SREDdbVc= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751938027519, - "AQMAAAABAAAADQAAAGJAD3tkflLAWfvi13dSREAiRRWVVX5SwFmdicR8UkRA86Jh/VB+UsAHJn6dkVJEQOBUWPdSflLAcSA6q5RSREAwJStPWH5SwDUwwVWQUkRAT4sy9Vx+UsAFeOWCjFJEQM3k3YlgflLADNFTPYlSREAgm+s= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751875375103, - "AQMAAAABAAAABgAAAC7muJd3flLA2IIdps1QRECPycdebX5SwLVTbULXUERAf94Lh2t+UsAXtDyg31BEQBmcutR1flLARebRi+9QREDRIFysen5SwEHF+vHtUERALua4l3d+UsDYgh2mzVBEQA==" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751936651263, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751872622591, - "AQYAAAACAAAAAQMAAAABAAAABQAAAHOrh9KBflLA/Xu54zhRREDvo75BgX5SwJ3mlxM5UURApVxwqnx+UsCDIfTrTVFEQHJxMRGFflLArfH55lpRREBzq4fSgX5SwP17ueM4UURAAQMAAAABAAAABAAAALAQwXGKflLAP9edsVw= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751872163839, - "AQMAAAABAAAACAAAAKL2fB6rflLA3hbUN2VRREB2ppkroH5SwHpqmdZoUURAHARdlJt+UsDULRmvfVFEQJknc+KlflLAi1XPmo1RREAGjAyarn5SwHMH7riKUURApgB+RK5+UsBx7Tz+hlFEQKy81p6sflLATfgyBXZRRECi9nw= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751933439999, - "AQMAAAABAAAABgAAAAoYULwHflLAgARpiehRREAJB9SjA35SwLf74OPpUURAWNJfIQl+UsDGVGy7DlJEQN1tV3INflLAYpxJTg1SREB1JSwKEn5SwCctsXX4UURAChhQvAd+UsCABGmJ6FFEQA==" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722201296895, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722202345471, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722201591807, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722202116095, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722202640383, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722210209791, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722210504703, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722201133055, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722202181631, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722204803071, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722201952255, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722210045951, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722201493503, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722202017791, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722202542079, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722201264127, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722202312703, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722210406399, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722202083327, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722210177023, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722201329663, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722202378239, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722204999679, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722210242559, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722201395199, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722201919487, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722202443775, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722201165823, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722202214399, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722210308095, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722201460735, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722202509311, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722210078719, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722201231359, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722202279935, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722210373631, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722202050559, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722209619967, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722210144255, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722202476543, - "AQMAAAABAAAACQAAAP+f8/YZfVLA8JO5MJhjREBrKmJ/Fn1SwMBMVVWZY0RASm2uPBZ9UsC69joMmmNEQGVAqBEOfVLA+OxhcbBjRED4yyvzCn1SwOJopQC5Y0RANK6ovhB9UsBSi3bzwWNEQDoh0K8ffVLAqGtmBr1jRECEoOs= (truncated)" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722214010879, - "AQMAAAABAAAABwAAAFlqf9difVLAzzwixkFkREBAHOl2VH1SwNN+woNGZERA36nY2k99UsC1pIplW2REQCWD/h5WfVLAU/pDEmVkRECsbjoEWX1SwNVJZE9dZERA0QvFUGB9UsB/BPqnSGREQFlqf9difVLAzzwixkFkREA=" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722201985023, - "AQMAAAABAAAACQAAANVekW+gfVLAgSja2GtjREDskrJ+kX1SwHgIaMZwY0RATIEB44x9UsB2o9enhWNEQGwvQziXfVLAqenHm5VjREC+95UYo31SwIuG/LCRY0RAiigaj6V9UsBy2+XrimNEQHTdfzWqfVLArD06Vn5jREDqm9U= (truncated)" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722201821183, - "AQMAAAABAAAACQAAACjlj5ySfVLAE3tMfapjREC4+Iarg31SwPA60mqvY0RAmoG9D399UsA7N11MxGNEQBXrEGWJfVLAHf9wQNRjREB2AA0Di31SwMfO57fTY0RAJrmEwo59UsAejzBqyWNEQNrP5mGWfVLAiDRhibRjREDq/a8= (truncated)" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722210340863, - "AQMAAAABAAAACAAAAIcX9JT4fFLAoKhTo/BjREBuepBj9nxSwG8xYFzxY0RAR2JAke98UsBKfc56BGREQOufj07qfFLADa11mBJkREBW+ktc73xSwBUvVGYaZERAUyuxTf58UsDa9V15FWREQChA++kCfVLA+GvWlwBkRECHF/Q= (truncated)" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722208505855, - "AQMAAAABAAAABQAAACdLlxO3fVLAIgROBkRjRECtcvf7s31SwNpZ0QlSY0RAPeXACLh9UsDu+mVKWGNEQFteC3C9fVLAJ7n5YkljREAnS5cTt31SwCIETgZEY0RA" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722215190527, - "AQMAAAABAAAABwAAAFTpiHgufVLAfpVN2rNkREAqu8aGH31SwNOnhce4ZERAgfdTLBt9UsBeyQ5/zGREQFvKzHQrfVLASNILXdpkREBvJaJiM31SwJCKHbjDZERAsniXUzV9UsD28R1wvmREQFTpiHgufVLAfpVN2rNkREA=" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722204835839, - "AQMAAAABAAAABwAAAAJLPg5UfVLAl601h/BiREBJMmN+TH1SwODmSFIFY0RAWgScR0x9UsCgxivoBWNEQFTqeYBTfVLAJQIDDxFjREBw5SVxYn1SwJAdvyEMY0RAnyHuT2V9UsDXNKAg/2JEQAJLPg5UfVLAl601h/BiREA=" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722209849343, - "AQMAAAABAAAABAAAAETav5LYfFLAQhrp2EJkREB7C9kv1nxSwIaybmtJZERACXj8Mdd8UsCZ8VoWSWREQETav5LYfFLAQhrp2EJkREA=" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722209685503, - "AQMAAAABAAAABQAAACp6OozJfFLARtBQBGxkREDWlMXZwXxSwB7BWDWBZERAwPirZcl8UsC8nFuRh2REQGwr9/jNfFLAiQKf2XJkREAqejqMyXxSwEbQUARsZERA" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722202836991, - "AQMAAAABAAAABQAAAE9FueZqfVLA9HMewStkRECbLlQEaH1SwMQGnbQsZERAqR5kKGR9UsCq4lowPmREQEyO6vBnfVLA+PTb4TNkREBPRbnman1SwPRzHsErZERA" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722209521663, - "AQMAAAABAAAABwAAALgbmurcfFLAY7LC7G1kREBsK/f4zXxSwIkCn9lyZERAwPirZcl8UsC8nFuRh2REQAbCFAvafFLA9gdymJVkREArz0mj4nxSwF7ASsOSZERAdbbEP+d8UsC3e4zhfWREQLgbmurcfFLAY7LC7G1kREA=" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722204344319, - "AQMAAAABAAAABgAAAH8U7DY/fVLAgoyPuSljREBSL4srPH1SwI6fmBgyY0RAckTMoDZ9UsDndJVMQWNEQNMa+1c7fVLAWr+Mvj9jREAHzeXzP31SwPG9Xd0qY0RAfxTsNj99UsCCjI+5KWNEQA==" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722211192831, - "AQMAAAABAAAABwAAAEAcWjEVfVLAES/K0qhkREC51Zo/Bn1SwJ3f5r+tZERAxX7u0QN9UsC/5lq/uGREQO9KLAURfVLAg0OL2cNkRECB91MsG31SwF7JDn/MZERAKrvGhh99UsDTp4XHuGREQEAcWjEVfVLAES/K0qhkREA=" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722208866303, - "AQMAAAABAAAACAAAANFQu6SQfVLAQaw8nSNjREBJjscLhn1SwOkuCRwnY0RAD+4acIF9UsCw3E79O2NEQPsHNMWLfVLAwnQo8UtjREBAUfy1mn1SwGc0pANHY0RAHv6UUZ99UsCB+08iMmNEQI7ZtUOcfVLAGU4way1jREDRULs= (truncated)" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722212208639, - "AQMAAAABAAAABgAAAJotUIsefVLASyl2Q4NjREAS8XnSHX1SwBFw1D+FY0RAbCpifxZ9UsDATFVVmWNEQP+f8/YZfVLA8JO5MJhjREBD5QyTHn1SwAjIaE+DY0RAmi1Qix59UsBLKXZDg2NEQA==" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722201690111, - "AQMAAAABAAAABgAAAL73lRijfVLAi4b8sJFjREBsL0M4l31SwKnpx5uVY0RAKOWPnJJ9UsATe0x9qmNEQOr9r16XfVLAfpfk1bFjRECuKyL6nX1SwIiSAMOfY0RAvveVGKN9UsCLhvywkWNEQA==" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722201526271, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722204868607, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722215059455, - "AQMAAAABAAAACAAAAI2CdgZCfVLAQtMZC5pkREDH8scUM31SwM+oY/ieZERAVOmIeC59UsB+lU3as2REQLN4l1M1fVLA9vEdcL5kRECU58fgOn1SwKB4tFWvZERANcvSP0J9UsDxeGQWm2REQC63lWlCfVLARS0kpJpkRECNgnY= (truncated)" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722201198591, - "AQMAAAABAAAACQAAAJqBvQ9/fVLAOzddTMRjRECM96AecH1SwNY20TnJY0RAVVPBgmt9UsCdnWIb3mNEQFUtEth1fVLAgJCOD+5jREAUtiYGg31SwJmV1rbpY0RALneyEId9UsARqYOR3mNEQIcc9zKHfVLATmJOM95jREAV6xA= (truncated)" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722209718271, - "AQMAAAABAAAABgAAACvPSaPifFLAXsBKw5JkREAFwhQL2nxSwPYHcpiVZERAAItY/tt8UsDn9Sw9l2REQNGx03TsfFLAideODKVkREDZtIj47HxSwGrhH7iiZERAK89Jo+J8UsBewErDkmREQA==" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722202869759, - "AQMAAAABAAAACAAAAARQMDxxfVLATe008QJkREBXpOlKYn1SwE3LoN4HZERAaJnxrl19UsAGkk3AHGREQJsuVARofVLAxAadtCxkREBORbnman1SwPRzHsErZERAjTtAWG99UsAipMSNH2REQL9W7q92fVLANpcWXAtkREAEUDA= (truncated)" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722209554431, - "AQMAAAABAAAACQAAAAl4/DHXfFLAmfFaFklkREB7C9kv1nxSwIaybmtJZERAf3rlbdF8UsDeJd6FVmREQN8oM+rJfFLA2lKYAWtkREAqejqMyXxSwEbQUARsZERAbCv3+M18UsCJAp/ZcmREQLgbmurcfFLAY7LC7G1kREAbyBI= (truncated)" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722208899071, - "AQMAAAABAAAACAAAAHf3aat8fVLA1DOu0xJjREALvsK2e31SwEjuOigXY0RASY7HC4Z9UsDpLgkcJ2NEQNFQu6SQfVLAQaw8nSNjRED/1eCZin1SwFgpLYQeY0RA0RvY0Yh9UsBE4JcMHWNEQMp4Vw2HfVLAsz0CkRtjREB392k= (truncated)" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722208735231, - "AQMAAAABAAAABAAAAI7ZtUOcfVLAGU4way1jREAe/pRRn31SwIH7TyIyY0RATr0XJKF9UsAY3G6IMWNEQI7ZtUOcfVLAGU4way1jREA=" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722201559039, - "AQMAAAABAAAABwAAAKPASJorfVLAMBukbl9jREA80aZkJX1SwEtyJW1wY0RAmi1Qix59UsBKKXZDg2NEQEPlDJMefVLACMhoT4NjREAGOAqELX1SwDOFUGJ+Y0RAaFANIDJ9UsASIwaBaWNEQKPASJorfVLAMBukbl9jREA=" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722204901375, - "AQMAAAABAAAABwAAAJ8h7k9lfVLA1zSgIP9iREBw5SVxYn1SwJAdvyEMY0RA3twTxmx9UsDvMJoVHGNEQAu+wrZ7fVLASO46KBdjREB392mrfH1SwNQzrtMSY0RAwIlKS259UsBarOm5BmNEQJ8h7k9lfVLA1zSgIP9iREA=" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722213257215, - "AQMAAAABAAAABQAAAANsRIn7fFLAE3QCQuNjRECNZ9v59nxSwB+kJbfvY0RAbnqQY/Z8UsBvMWBc8WNEQIcX9JT4fFLAoKhTo/BjREADbESJ+3xSwBN0AkLjY0RA" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722209587199, - null - ] - ], - "plotOptions": { - "displayType": "table", - "customPlotOptions": {}, - "pivotColumns": null, - "pivotAggregation": null, - "xColumns": null, - "yColumns": null - }, - "columnCustomDisplayInfos": {}, - "aggType": "", - "isJsonSchema": true, - "removedWidgets": [], - "aggSchema": [], - "schema": [ - { - "name": "borough", - "type": "\"string\"", - "metadata": "{}" - }, - { - "name": "location_id", - "type": "\"string\"", - "metadata": "{}" - }, - { - "name": "objectid", - "type": "\"string\"", - "metadata": "{}" - }, - { - "name": "zone", - "type": "\"string\"", - "metadata": "{}" - }, - { - "name": "is_core", - "type": "\"boolean\"", - "metadata": "{}" - }, - { - "name": "h3", - "type": "\"long\"", - "metadata": "{}" - }, - { - "name": "wkb", - "type": "\"binary\"", - "metadata": "{}" - } - ], - "aggError": "", - "aggData": [], - "addedWidgets": {}, - "metadata": {}, - "dbfsResultPath": null, - "type": "table", - "aggOverflow": false, - "aggSeriesLimitReached": false, - "arguments": {} - } - }, - "data": { - "text/html": [ - "
boroughlocation_idobjectidzoneis_coreh3wkb
Staten Island9999Freshkills Parktrue622236745694314495null
Staten Island9999Freshkills Parktrue622236745679077375null
Staten Island9999Freshkills Parktrue622236745734160383null
Staten Island9999Freshkills Parktrue622236745762275327null
Staten Island9999Freshkills Parktrue622236745731801087null
Staten Island9999Freshkills Parktrue622236745725935615null
Staten Island9999Freshkills Parktrue622236745680224255null
Staten Island9999Freshkills Parktrue622236745689595903null
Staten Island9999Freshkills Parktrue622236745683730431null
Staten Island9999Freshkills Parktrue622236745723576319null
Staten Island9999Freshkills Parktrue622236745763422207null
Staten Island9999Freshkills Parktrue622236745693102079null
Staten Island9999Freshkills Parktrue622236745732947967null
Staten Island9999Freshkills Parktrue622236745702473727null
Staten Island9999Freshkills Parktrue622236745696608255null
Staten Island9999Freshkills Parktrue622236745736454143null
Staten Island9999Freshkills Parktrue622236745761062911null
Staten Island9999Freshkills Parktrue622236745690742783null
Staten Island9999Freshkills Parktrue622236745675505663null
Staten Island9999Freshkills Parktrue622236745730588671null
Staten Island9999Freshkills Parktrue622236745694248959null
Staten Island9999Freshkills Parktrue622236745679011839null
Staten Island9999Freshkills Parktrue622236745734094847null
Staten Island9999Freshkills Parktrue622236745762209791null
Staten Island9999Freshkills Parktrue622236745731735551null
Staten Island9999Freshkills Parktrue622236745725870079null
Staten Island9999Freshkills Parktrue622236745680158719null
Staten Island9999Freshkills Parktrue622236745689530367null
Staten Island9999Freshkills Parktrue622236745683664895null
Staten Island9999Freshkills Parktrue622236745763356671null
Staten Island9999Freshkills Parktrue622236745693036543null
Staten Island9999Freshkills Parktrue622236745732882431null
Staten Island9999Freshkills Parktrue622236745702408191null
Staten Island9999Freshkills Parktrue622236745681305599null
Staten Island9999Freshkills Parktrue622236745760997375null
Staten Island9999Freshkills Parktrue622236745675440127null
Staten Island9999Freshkills Parktrue622236745730523135null
Staten Island9999Freshkills Parktrue622236745703555071null
Staten Island9999Freshkills Parktrue622236745762144255null
Staten Island9999Freshkills Parktrue622236745725804543null
Staten Island9999Freshkills Parktrue622236745680093183null
Staten Island9999Freshkills Parktrue622236745683599359null
Staten Island9999Freshkills Parktrue622236745763291135null
Staten Island9999Freshkills Parktrue622236745692971007null
Staten Island9999Freshkills Parktrue622236745732816895null
Staten Island9999Freshkills Parktrue622236745913303039null
Staten Island9999Freshkills Parktrue622236745702342655null
Staten Island9999Freshkills Parktrue622236745681240063null
Staten Island9999Freshkills Parktrue622236745690611711null
Staten Island9999Freshkills Parktrue622236745675374591null
Staten Island9999Freshkills Parktrue622236745694117887null
Staten Island9999Freshkills Parktrue622236745733963775null
Staten Island9999Freshkills Parktrue622236745703489535null
Staten Island9999Freshkills Parktrue622236745731604479null
Staten Island9999Freshkills Parktrue622236745689399295null
Staten Island9999Freshkills Parktrue622236745683533823null
Staten Island9999Freshkills Parktrue622236745763225599null
Staten Island9999Freshkills Parktrue622236745692905471null
Staten Island9999Freshkills Parktrue622236745732751359null
Staten Island9999Freshkills Parktrue622236745913237503null
Staten Island9999Freshkills Parktrue622236745702277119null
Staten Island9999Freshkills Parktrue622236745742123007null
Staten Island9999Freshkills Parktrue622236745681174527null
Staten Island9999Freshkills Parktrue622236745760866303null
Staten Island9999Freshkills Parktrue622236745730392063null
Staten Island9999Freshkills Parktrue622236745684680703null
Staten Island9999Freshkills Parktrue622236745724526591null
Staten Island9999Freshkills Parktrue622236745764372479null
Staten Island9999Freshkills Parktrue622236745694052351null
Staten Island9999Freshkills Parktrue622236745733898239null
Staten Island9999Freshkills Parktrue622236745703423999null
Staten Island9999Freshkills Parktrue622236745682321407null
Staten Island9999Freshkills Parktrue622236745731538943null
Staten Island9999Freshkills Parktrue622236745725673471null
Staten Island9999Freshkills Parktrue622236745695199231null
Staten Island9999Freshkills Parktrue622236745735045119null
Staten Island9999Freshkills Parktrue622236745689333759null
Staten Island9999Freshkills Parktrue622236745683468287null
Staten Island9999Freshkills Parktrue622236745763160063null
Staten Island9999Freshkills Parktrue622236745732685823null
Staten Island9999Freshkills Parktrue622236745702211583null
Staten Island9999Freshkills Parktrue622236745742057471null
Staten Island9999Freshkills Parktrue622236745681108991null
Staten Island9999Freshkills Parktrue622236745760800767null
Staten Island9999Freshkills Parktrue622236745690480639null
Staten Island9999Freshkills Parktrue622236745675243519null
Staten Island9999Freshkills Parktrue622236745684615167null
Staten Island9999Freshkills Parktrue622236745764306943null
Staten Island9999Freshkills Parktrue622236745693986815null
Staten Island9999Freshkills Parktrue622236745733832703null
Staten Island9999Freshkills Parktrue622236745672884223null
Staten Island9999Freshkills Parktrue622236745682255871null
Staten Island9999Freshkills Parktrue622236746168631295null
Staten Island9999Freshkills Parktrue622236745761947647null
Staten Island9999Freshkills Parktrue622236745731473407null
Staten Island9999Freshkills Parktrue622236745725607935null
Staten Island9999Freshkills Parktrue622236745695133695null
Staten Island9999Freshkills Parktrue622236745734979583null
Staten Island9999Freshkills Parktrue622236745689268223null
Staten Island9999Freshkills Parktrue622236745683402751null
Staten Island9999Freshkills Parktrue622236745723248639null
Staten Island9999Freshkills Parktrue622236745732620287null
Staten Island9999Freshkills Parktrue622236745702146047null
Staten Island9999Freshkills Parktrue622236745741991935null
Staten Island9999Freshkills Parktrue622236745760735231null
Staten Island9999Freshkills Parktrue622236745690415103null
Staten Island9999Freshkills Parktrue622236745675177983null
Staten Island9999Freshkills Parktrue622236745684549631null
Staten Island9999Freshkills Parktrue622236745724395519null
Staten Island9999Freshkills Parktrue622236745764241407null
Staten Island9999Freshkills Parktrue622236745703292927null
Staten Island9999Freshkills Parktrue622236745682190335null
Staten Island9999Freshkills Parktrue622236746168565759null
Staten Island9999Freshkills Parktrue622236745676324863null
Staten Island9999Freshkills Parktrue622236745725542399null
Staten Island9999Freshkills Parktrue622236745695068159null
Staten Island9999Freshkills Parktrue622236745734914047null
Staten Island9999Freshkills Parktrue622236745683337215null
Staten Island9999Freshkills Parktrue622236745723183103null
Staten Island9999Freshkills Parktrue622236745732554751null
Staten Island9999Freshkills Parktrue622236745702080511null
Staten Island9999Freshkills Parktrue622236745741926399null
Staten Island9999Freshkills Parktrue622236745760669695null
Staten Island9999Freshkills Parktrue622236745690349567null
Staten Island9999Freshkills Parktrue622236745675112447null
Staten Island9999Freshkills Parktrue622236745693855743null
Staten Island9999Freshkills Parktrue622236745703227391null
Staten Island9999Freshkills Parktrue622236745743073279null
Staten Island9999Freshkills Parktrue622236745672753151null
Staten Island9999Freshkills Parktrue622236746168500223null
Staten Island9999Freshkills Parktrue622236745676259327null
Staten Island9999Freshkills Parktrue622236745731342335null
Staten Island9999Freshkills Parktrue622236745725476863null
Staten Island9999Freshkills Parktrue622236745695002623null
Staten Island9999Freshkills Parktrue622236745734848511null
Staten Island9999Freshkills Parktrue622236745673900031null
Staten Island9999Freshkills Parktrue622236745683271679null
Staten Island9999Freshkills Parktrue622236745723117567null
Staten Island9999Freshkills Parktrue622236745732489215null
Staten Island9999Freshkills Parktrue622236745702014975null
Staten Island9999Freshkills Parktrue622236745741860863null
Staten Island9999Freshkills Parktrue622236745726623743null
Staten Island9999Freshkills Parktrue622236745760604159null
Staten Island9999Freshkills Parktrue622236745690284031null
Staten Island9999Freshkills Parktrue622236745684418559null
Staten Island9999Freshkills Parktrue622236745724264447null
Staten Island9999Freshkills Parktrue622236745693790207null
Staten Island9999Freshkills Parktrue622236745733636095null
Staten Island9999Freshkills Parktrue622236745703161855null
Staten Island9999Freshkills Parktrue622236745743007743null
Staten Island9999Freshkills Parktrue622236745697296383null
Staten Island9999Freshkills Parktrue622236746168434687null
Staten Island9999Freshkills Parktrue622236745676193791null
Staten Island9999Freshkills Parktrue622236745731276799null
Staten Island9999Freshkills Parktrue622236745725411327null
Staten Island9999Freshkills Parktrue622236745694937087null
Staten Island9999Freshkills Parktrue622236745679699967null
Staten Island9999Freshkills Parktrue622236745734782975null
Staten Island9999Freshkills Parktrue622236745683206143null
Staten Island9999Freshkills Parktrue622236745723052031null
Staten Island9999Freshkills Parktrue622236745692577791null
Staten Island9999Freshkills Parktrue622236745732423679null
Staten Island9999Freshkills Parktrue622236745701949439null
Staten Island9999Freshkills Parktrue622236745741795327null
Staten Island9999Freshkills Parktrue622236745726558207null
Staten Island9999Freshkills Parktrue622236745760538623null
Staten Island9999Freshkills Parktrue622236745690218495null
Staten Island9999Freshkills Parktrue622236745674981375null
Staten Island9999Freshkills Parktrue622236745684353023null
Staten Island9999Freshkills Parktrue622236745724198911null
Staten Island9999Freshkills Parktrue622236745693724671null
Staten Island9999Freshkills Parktrue622236745697230847null
Staten Island9999Freshkills Parktrue622236745761685503null
Staten Island9999Freshkills Parktrue622236745676128255null
Staten Island9999Freshkills Parktrue622236745731211263null
Staten Island9999Freshkills Parktrue622236745725345791null
Staten Island9999Freshkills Parktrue622236745694871551null
Staten Island9999Freshkills Parktrue622236745734717439null
Staten Island9999Freshkills Parktrue622236745683140607null
Staten Island9999Freshkills Parktrue622236745722986495null
Staten Island9999Freshkills Parktrue622236745732358143null
Staten Island9999Freshkills Parktrue622236745701883903null
Staten Island9999Freshkills Parktrue622236745741729791null
Staten Island9999Freshkills Parktrue622236745726492671null
Staten Island9999Freshkills Parktrue622236745690152959null
Staten Island9999Freshkills Parktrue622236745674915839null
Staten Island9999Freshkills Parktrue622236745684287487null
Staten Island9999Freshkills Parktrue622236745724133375null
Staten Island9999Freshkills Parktrue622236745703030783null
Staten Island9999Freshkills Parktrue622236745697165311null
Staten Island9999Freshkills Parktrue622236745761619967null
Staten Island9999Freshkills Parktrue622236745676062719null
Staten Island9999Freshkills Parktrue622236745725280255null
Staten Island9999Freshkills Parktrue622236745694806015null
Staten Island9999Freshkills Parktrue622236745734651903null
Staten Island9999Freshkills Parktrue622236745683075071null
Staten Island9999Freshkills Parktrue622236745722920959null
Staten Island9999Freshkills Parktrue622236745692446719null
Staten Island9999Freshkills Parktrue622236745732292607null
Staten Island9999Freshkills Parktrue622236745701818367null
Staten Island9999Freshkills Parktrue622236745741664255null
Staten Island9999Freshkills Parktrue622236745735798783null
Staten Island9999Freshkills Parktrue622236745690087423null
Staten Island9999Freshkills Parktrue622236745674850303null
Staten Island9999Freshkills Parktrue622236745693593599null
Staten Island9999Freshkills Parktrue622236745733439487null
Staten Island9999Freshkills Parktrue622236745702965247null
Staten Island9999Freshkills Parktrue622236745742811135null
Staten Island9999Freshkills Parktrue622236745697099775null
Staten Island9999Freshkills Parktrue622236745675997183null
Staten Island9999Freshkills Parktrue622236745725214719null
Staten Island9999Freshkills Parktrue622236745694740479null
Staten Island9999Freshkills Parktrue622236745734586367null
Staten Island9999Freshkills Parktrue622236745698246655null
Staten Island9999Freshkills Parktrue622236745683009535null
Staten Island9999Freshkills Parktrue622236745722855423null
Staten Island9999Freshkills Parktrue622236745762701311null
Staten Island9999Freshkills Parktrue622236745732227071null
Staten Island9999Freshkills Parktrue622236745726361599null
Staten Island9999Freshkills Parktrue622236745735733247null
Staten Island9999Freshkills Parktrue622236745690021887null
Staten Island9999Freshkills Parktrue622236745684156415null
Staten Island9999Freshkills Parktrue622236745724002303null
Staten Island9999Freshkills Parktrue622236745693528063null
Staten Island9999Freshkills Parktrue622236745733373951null
Staten Island9999Freshkills Parktrue622236745702899711null
Staten Island9999Freshkills Parktrue622236745742745599null
Staten Island9999Freshkills Parktrue622236745697034239null
Staten Island9999Freshkills Parktrue622236745681797119null
Staten Island9999Freshkills Parktrue622236745736880127null
Staten Island9999Freshkills Parktrue622236745761488895null
Staten Island9999Freshkills Parktrue622236745675931647null
Staten Island9999Freshkills Parktrue622236745725149183null
Staten Island9999Freshkills Parktrue622236745694674943null
Staten Island9999Freshkills Parktrue622236745734520831null
Staten Island9999Freshkills Parktrue622236745682943999null
Staten Island9999Freshkills Parktrue622236745722789887null
Staten Island9999Freshkills Parktrue622236745732161535null
Staten Island9999Freshkills Parktrue622236745726296063null
Staten Island9999Freshkills Parktrue622236745735667711null
Staten Island9999Freshkills Parktrue622236745689956351null
Staten Island9999Freshkills Parktrue622236745674719231null
Staten Island9999Freshkills Parktrue622236745684090879null
Staten Island9999Freshkills Parktrue622236745723936767null
Staten Island9999Freshkills Parktrue622236745693462527null
Staten Island9999Freshkills Parktrue622236745733308415null
Staten Island9999Freshkills Parktrue622236745696968703null
Staten Island9999Freshkills Parktrue622236745736814591null
Staten Island9999Freshkills Parktrue622236745761423359null
Staten Island9999Freshkills Parktrue622236745675866111null
Staten Island9999Freshkills Parktrue622236745725083647null
Staten Island9999Freshkills Parktrue622236745694609407null
Staten Island9999Freshkills Parktrue622236745734455295null
Staten Island9999Freshkills Parktrue622236745732095999null
Staten Island9999Freshkills Parktrue622236745726230527null
Staten Island9999Freshkills Parktrue622236745689890815null
Staten Island9999Freshkills Parktrue622236745674653695null
Staten Island9999Freshkills Parktrue622236745684025343null
Staten Island9999Freshkills Parktrue622236745723871231null
Staten Island9999Freshkills Parktrue622236745702768639null
Staten Island9999Freshkills Parktrue622236745742614527null
Staten Island9999Freshkills Parktrue622236745681666047null
Staten Island9999Freshkills Parktrue622236745736749055null
Staten Island9999Freshkills Parktrue622236745761357823null
Staten Island9999Freshkills Parktrue622236745675800575null
Staten Island9999Freshkills Parktrue622236745725018111null
Staten Island9999Freshkills Parktrue622236745694543871null
Staten Island9999Freshkills Parktrue622236745734389759null
Staten Island9999Freshkills Parktrue622236745732030463null
Staten Island9999Freshkills Parktrue622236745689825279null
Staten Island9999Freshkills Parktrue622236745674588159null
Staten Island9999Freshkills Parktrue622236745702703103null
Staten Island9999Freshkills Parktrue622236745742548991null
Staten Island9999Freshkills Parktrue622236745736683519null
Staten Island9999Freshkills Parktrue622236745690972159null
Staten Island9999Freshkills Parktrue622236745675735039null
Staten Island9999Freshkills Parktrue622236745724952575null
Staten Island9999Freshkills Parktrue622236745694478335null
Staten Island9999Freshkills Parktrue622236745734324223null
Staten Island9999Freshkills Parktrue622236745731964927null
Staten Island9999Freshkills Parktrue622236745726099455null
Staten Island9999Freshkills Parktrue622236745689759743null
Staten Island9999Freshkills Parktrue622236745683894271null
Staten Island9999Freshkills Parktrue622236745723740159null
Staten Island9999Freshkills Parktrue622236745702637567null
Staten Island9999Freshkills Parktrue622236745742483455null
Staten Island9999Freshkills Parktrue622236745696772095null
Staten Island9999Freshkills Parktrue622236745761226751null
Staten Island9999Freshkills Parktrue622236745690906623null
Staten Island9999Freshkills Parktrue622236745675669503null
Staten Island9999Freshkills Parktrue622236745724887039null
Staten Island9999Freshkills Parktrue622236745694412799null
Staten Island9999Freshkills Parktrue622236745679175679null
Staten Island9999Freshkills Parktrue622236745734258687null
Staten Island9999Freshkills Parktrue622236745731899391null
Staten Island9999Freshkills Parktrue622236745726033919null
Staten Island9999Freshkills Parktrue622236745689694207null
Staten Island9999Freshkills Parktrue622236745683828735null
Staten Island9999Freshkills Parktrue622236745723674623null
Staten Island9999Freshkills Parktrue622236745763520511null
Staten Island9999Freshkills Parktrue622236745696706559null
Staten Island9999Freshkills Parktrue622236745761161215null
Staten Island9999Freshkills Parktrue622236745690841087null
Staten Island9999Freshkills Parktrue622236745675603967null
Staten Island9999Freshkills Parktrue622236745694347263null
Staten Island9999Freshkills Parktrue622236745679110143null
Staten Island9999Freshkills Parktrue622236745734193151null
Staten Island9999Freshkills Parktrue622236745762308095null
Staten Island9999Freshkills Parktrue622236745731833855null
Staten Island9999Freshkills Parktrue622236745725968383null
Staten Island9999Freshkills Parktrue622236745689628671null
Staten Island9999Freshkills Parktrue622236745729474559null
Staten Island9999Freshkills Parktrue622236745683763199null
Staten Island9999Freshkills Parktrue622236745723609087null
Staten Island9999Freshkills Parktrue622236745763454975null
Staten Island9999Freshkills Parktrue622236745702506495null
Staten Island9999Freshkills Parktrue622236745742352383null
Staten Island9999Freshkills Parktrue622236745696641023null
Staten Island9999Freshkills Parktrue622236745761095679null
Staten Island9999Freshkills Parktrue622236745675538431null
Staten Island9999Freshkills Parktrue622236745694281727null
Staten Island9999Freshkills Parktrue622236745679044607null
Staten Island9999Freshkills Parktrue622236745734127615null
Staten Island9999Freshkills Parktrue622236745762242559null
Staten Island9999Freshkills Parktrue622236745731768319null
Staten Island9999Freshkills Parktrue622236745680191487null
Staten Island9999Freshkills Parktrue622236745689563135null
Staten Island9999Freshkills Parktrue622236745693069311null
Staten Island9999Freshkills Parktrue622236745732915199null
Staten Island9999Freshkills Parktrue622236745702440959null
Staten Island9999Freshkills Parktrue622236745696575487null
Staten Island9999Freshkills Parktrue622236745675472895null
Staten Island9999Freshkills Parktrue622236745730555903null
Staten Island9999Freshkills Parktrue622236745694216191null
Staten Island9999Freshkills Parktrue622236745734062079null
Staten Island9999Freshkills Parktrue622236745703587839null
Staten Island9999Freshkills Parktrue622236745762177023null
Staten Island9999Freshkills Parktrue622236745731702783null
Staten Island9999Freshkills Parktrue622236745725837311null
Staten Island9999Freshkills Parktrue622236745689497599null
Staten Island9999Freshkills Parktrue622236745683632127null
Staten Island9999Freshkills Parktrue622236745723478015null
Staten Island9999Freshkills Parktrue622236745763323903null
Staten Island9999Freshkills Parktrue622236745693003775null
Staten Island9999Freshkills Parktrue622236745732849663null
Staten Island9999Freshkills Parktrue622236745702375423null
Staten Island9999Freshkills Parktrue622236745681272831null
Staten Island9999Freshkills Parktrue622236745690644479null
Staten Island9999Freshkills Parktrue622236745675407359null
Staten Island9999Freshkills Parktrue622236745730490367null
Staten Island9999Freshkills Parktrue622236745694150655null
Staten Island9999Freshkills Parktrue622236745733996543null
Staten Island9999Freshkills Parktrue622236745703522303null
Staten Island9999Freshkills Parktrue622236745762111487null
Staten Island9999Freshkills Parktrue622236745731637247null
Staten Island9999Freshkills Parktrue622236745680060415null
Staten Island9999Freshkills Parktrue622236745689432063null
Staten Island9999Freshkills Parktrue622236745683566591null
Staten Island9999Freshkills Parktrue622236745763258367null
Staten Island9999Freshkills Parktrue622236745692938239null
Staten Island9999Freshkills Parktrue622236745732784127null
Staten Island9999Freshkills Parktrue622236745681207295null
Staten Island9999Freshkills Parktrue622236745760899071null
Staten Island9999Freshkills Parktrue622236745675341823null
Staten Island9999Freshkills Parktrue622236745730424831null
Staten Island9999Freshkills Parktrue622236745684713471null
Staten Island9999Freshkills Parktrue622236745764405247null
Staten Island9999Freshkills Parktrue622236745694085119null
Staten Island9999Freshkills Parktrue622236745733931007null
Staten Island9999Freshkills Parktrue622236745703456767null
Staten Island9999Freshkills Parktrue622236745682354175null
Staten Island9999Freshkills Parktrue622236745762045951null
Staten Island9999Freshkills Parktrue622236745731571711null
Staten Island9999Freshkills Parktrue622236745725706239null
Staten Island9999Freshkills Parktrue622236745689366527null
Staten Island9999Freshkills Parktrue622236745683501055null
Staten Island9999Freshkills Parktrue622236745763192831null
Staten Island9999Freshkills Parktrue622236745702244351null
Staten Island9999Freshkills Parktrue622236745742090239null
Staten Island9999Freshkills Parktrue622236745681141759null
Staten Island9999Freshkills Parktrue622236745675276287null
Staten Island9999Freshkills Parktrue622236745684647935null
Staten Island9999Freshkills Parktrue622236745724493823null
Staten Island9999Freshkills Parktrue622236745764339711null
Staten Island9999Freshkills Parktrue622236745694019583null
Staten Island9999Freshkills Parktrue622236745678782463null
Staten Island9999Freshkills Parktrue622236745733865471null
Staten Island9999Freshkills Parktrue622236745703391231null
Staten Island9999Freshkills Parktrue622236745682288639null
Staten Island9999Freshkills Parktrue622236745761980415null
Staten Island9999Freshkills Parktrue622236745731506175null
Staten Island9999Freshkills Parktrue622236745695166463null
Staten Island9999Freshkills Parktrue622236745735012351null
Staten Island9999Freshkills Parktrue622236745689300991null
Staten Island9999Freshkills Parktrue622236745732653055null
Staten Island9999Freshkills Parktrue622236745702178815null
Staten Island9999Freshkills Parktrue622236745742024703null
Staten Island9999Freshkills Parktrue622236745690447871null
Staten Island9999Freshkills Parktrue622236745675210751null
Staten Island9999Freshkills Parktrue622236745684582399null
Staten Island9999Freshkills Parktrue622236745764274175null
Staten Island9999Freshkills Parktrue622236745693954047null
Staten Island9999Freshkills Parktrue622236745733799935null
Staten Island9999Freshkills Parktrue622236745703325695null
Staten Island9999Freshkills Parktrue622236745743171583null
Staten Island9999Freshkills Parktrue622236745682223103null
Staten Island9999Freshkills Parktrue622236745761914879null
Staten Island9999Freshkills Parktrue622236745731440639null
Staten Island9999Freshkills Parktrue622236745725575167null
Staten Island9999Freshkills Parktrue622236745695100927null
Staten Island9999Freshkills Parktrue622236745734946815null
Staten Island9999Freshkills Parktrue622236745689235455null
Staten Island9999Freshkills Parktrue622236745683369983null
Staten Island9999Freshkills Parktrue622236745723215871null
Staten Island9999Freshkills Parktrue622236745732587519null
Staten Island9999Freshkills Parktrue622236745702113279null
Staten Island9999Freshkills Parktrue622236745741959167null
Staten Island9999Freshkills Parktrue622236745696247807null
Staten Island9999Freshkills Parktrue622236745681010687null
Staten Island9999Freshkills Parktrue622236745760702463null
Staten Island9999Freshkills Parktrue622236745690382335null
Staten Island9999Freshkills Parktrue622236745675145215null
Staten Island9999Freshkills Parktrue622236745684516863null
Staten Island9999Freshkills Parktrue622236745724362751null
Staten Island9999Freshkills Parktrue622236745764208639null
Staten Island9999Freshkills Parktrue622236745693888511null
Staten Island9999Freshkills Parktrue622236745733734399null
Staten Island9999Freshkills Parktrue622236745703260159null
Staten Island9999Freshkills Parktrue622236745743106047null
Staten Island9999Freshkills Parktrue622236745682157567null
Staten Island9999Freshkills Parktrue622236745761849343null
Staten Island9999Freshkills Parktrue622236745691529215null
Staten Island9999Freshkills Parktrue622236745676292095null
Staten Island9999Freshkills Parktrue622236745731375103null
Staten Island9999Freshkills Parktrue622236745725509631null
Staten Island9999Freshkills Parktrue622236745695035391null
Staten Island9999Freshkills Parktrue622236745734881279null
Staten Island9999Freshkills Parktrue622236745683304447null
Staten Island9999Freshkills Parktrue622236745723150335null
Staten Island9999Freshkills Parktrue622236745732521983null
Staten Island9999Freshkills Parktrue622236745726656511null
Staten Island9999Freshkills Parktrue622236745696182271null
Staten Island9999Freshkills Parktrue622236745760636927null
Staten Island9999Freshkills Parktrue622236745690316799null
Staten Island9999Freshkills Parktrue622236745675079679null
Staten Island9999Freshkills Parktrue622236745684451327null
Staten Island9999Freshkills Parktrue622236745724297215null
Staten Island9999Freshkills Parktrue622236745693822975null
Staten Island9999Freshkills Parktrue622236745733668863null
Staten Island9999Freshkills Parktrue622236745703194623null
Staten Island9999Freshkills Parktrue622236745743040511null
Staten Island9999Freshkills Parktrue622236745761783807null
Staten Island9999Freshkills Parktrue622236745691463679null
Staten Island9999Freshkills Parktrue622236745676226559null
Staten Island9999Freshkills Parktrue622236745731309567null
Staten Island9999Freshkills Parktrue622236745725444095null
Staten Island9999Freshkills Parktrue622236745683238911null
Staten Island9999Freshkills Parktrue622236745723084799null
Staten Island9999Freshkills Parktrue622236745701982207null
Staten Island9999Freshkills Parktrue622236745741828095null
Staten Island9999Freshkills Parktrue622236745726590975null
Staten Island9999Freshkills Parktrue622236745696116735null
Staten Island9999Freshkills Parktrue622236745760571391null
Staten Island9999Freshkills Parktrue622236745675014143null
Staten Island9999Freshkills Parktrue622236745684385791null
Staten Island9999Freshkills Parktrue622236745724231679null
Staten Island9999Freshkills Parktrue622236745693757439null
Staten Island9999Freshkills Parktrue622236745733603327null
Staten Island9999Freshkills Parktrue622236745703129087null
Staten Island9999Freshkills Parktrue622236745742974975null
Staten Island9999Freshkills Parktrue622236745697263615null
Staten Island9999Freshkills Parktrue622236745676161023null
Staten Island9999Freshkills Parktrue622236745731244031null
Staten Island9999Freshkills Parktrue622236745694904319null
Staten Island9999Freshkills Parktrue622236745734750207null
Staten Island9999Freshkills Parktrue622236745732390911null
Staten Island9999Freshkills Parktrue622236745701916671null
Staten Island9999Freshkills Parktrue622236745741762559null
Staten Island9999Freshkills Parktrue622236745726525439null
Staten Island9999Freshkills Parktrue622236745690185727null
Staten Island9999Freshkills Parktrue622236745674948607null
Staten Island9999Freshkills Parktrue622236745684320255null
Staten Island9999Freshkills Parktrue622236745724166143null
Staten Island9999Freshkills Parktrue622236745693691903null
Staten Island9999Freshkills Parktrue622236745733537791null
Staten Island9999Freshkills Parktrue622236745703063551null
Staten Island9999Freshkills Parktrue622236745697198079null
Staten Island9999Freshkills Parktrue622236745761652735null
Staten Island9999Freshkills Parktrue622236745731178495null
Staten Island9999Freshkills Parktrue622236745694838783null
Staten Island9999Freshkills Parktrue622236745734684671null
Staten Island9999Freshkills Parktrue622236745698344959null
Staten Island9999Freshkills Parktrue622236745683107839null
Staten Island9999Freshkills Parktrue622236745722953727null
Staten Island9999Freshkills Parktrue622236745692479487null
Staten Island9999Freshkills Parktrue622236745732325375null
Staten Island9999Freshkills Parktrue622236745701851135null
Staten Island9999Freshkills Parktrue622236745741697023null
Staten Island9999Freshkills Parktrue622236745726459903null
Staten Island9999Freshkills Parktrue622236745735831551null
Staten Island9999Freshkills Parktrue622236745690120191null
Staten Island9999Freshkills Parktrue622236745674883071null
Staten Island9999Freshkills Parktrue622236745684254719null
Staten Island9999Freshkills Parktrue622236745724100607null
Staten Island9999Freshkills Parktrue622236745693626367null
Staten Island9999Freshkills Parktrue622236745733472255null
Staten Island9999Freshkills Parktrue622236745702998015null
Staten Island9999Freshkills Parktrue622236745697132543null
Staten Island9999Freshkills Parktrue622236745676029951null
Staten Island9999Freshkills Parktrue622236745725247487null
Staten Island9999Freshkills Parktrue622236745694773247null
Staten Island9999Freshkills Parktrue622236745734619135null
Staten Island9999Freshkills Parktrue622236745683042303null
Staten Island9999Freshkills Parktrue622236745722888191null
Staten Island9999Freshkills Parktrue622236745762734079null
Staten Island9999Freshkills Parktrue622236745732259839null
Staten Island9999Freshkills Parktrue622236745726394367null
Staten Island9999Freshkills Parktrue622236745735766015null
Staten Island9999Freshkills Parktrue622236745690054655null
Staten Island9999Freshkills Parktrue622236745674817535null
Staten Island9999Freshkills Parktrue622236745684189183null
Staten Island9999Freshkills Parktrue622236745724035071null
Staten Island9999Freshkills Parktrue622236745693560831null
Staten Island9999Freshkills Parktrue622236745733406719null
Staten Island9999Freshkills Parktrue622236745702932479null
Staten Island9999Freshkills Parktrue622236745761521663null
Staten Island9999Freshkills Parktrue622236745675964415null
Staten Island9999Freshkills Parktrue622236745698213887null
Staten Island9999Freshkills Parktrue622236745682976767null
Staten Island9999Freshkills Parktrue622236745722822655null
Staten Island9999Freshkills Parktrue622236745726328831null
Staten Island9999Freshkills Parktrue622236745674751999null
Staten Island9999Freshkills Parktrue622236745684123647null
Staten Island9999Freshkills Parktrue622236745723969535null
Staten Island9999Freshkills Parktrue622236745693495295null
Staten Island9999Freshkills Parktrue622236745733341183null
Staten Island9999Freshkills Parktrue622236745702866943null
Staten Island9999Freshkills Parktrue622236745736847359null
Staten Island9999Freshkills Parktrue622236745761456127null
Staten Island9999Freshkills Parktrue622236745675898879null
Staten Island9999Freshkills Parktrue622236745694642175null
Staten Island9999Freshkills Parktrue622236745734488063null
Staten Island9999Freshkills Parktrue622236745698148351null
Staten Island9999Freshkills Parktrue622236745732128767null
Staten Island9999Freshkills Parktrue622236745726263295null
Staten Island9999Freshkills Parktrue622236745735634943null
Staten Island9999Freshkills Parktrue622236745689923583null
Staten Island9999Freshkills Parktrue622236745674686463null
Staten Island9999Freshkills Parktrue622236745684058111null
Staten Island9999Freshkills Parktrue622236745723903999null
Staten Island9999Freshkills Parktrue622236745693429759null
Staten Island9999Freshkills Parktrue622236745733275647null
Staten Island9999Freshkills Parktrue622236745702801407null
Staten Island9999Freshkills Parktrue622236745742647295null
Staten Island9999Freshkills Parktrue622236745736781823null
Staten Island9999Freshkills Parktrue622236745761390591null
Staten Island9999Freshkills Parktrue622236745725050879null
Staten Island9999Freshkills Parktrue622236745694576639null
Staten Island9999Freshkills Parktrue622236745734422527null
Staten Island9999Freshkills Parktrue622236745732063231null
Staten Island9999Freshkills Parktrue622236745726197759null
Staten Island9999Freshkills Parktrue622236745689858047null
Staten Island9999Freshkills Parktrue622236745674620927null
Staten Island9999Freshkills Parktrue622236745683992575null
Staten Island9999Freshkills Parktrue622236745723838463null
Staten Island9999Freshkills Parktrue622236745702735871null
Staten Island9999Freshkills Parktrue622236745742581759null
Staten Island9999Freshkills Parktrue622236745736716287null
Staten Island9999Freshkills Parktrue622236745761325055null
Staten Island9999Freshkills Parktrue622236745691004927null
Staten Island9999Freshkills Parktrue622236745675767807null
Staten Island9999Freshkills Parktrue622236745724985343null
Staten Island9999Freshkills Parktrue622236745694511103null
Staten Island9999Freshkills Parktrue622236745734356991null
Staten Island9999Freshkills Parktrue622236745731997695null
Staten Island9999Freshkills Parktrue622236745726132223null
Staten Island9999Freshkills Parktrue622236745689792511null
Staten Island9999Freshkills Parktrue622236745674555391null
Staten Island9999Freshkills Parktrue622236745683927039null
Staten Island9999Freshkills Parktrue622236745723772927null
Staten Island9999Freshkills Parktrue622236745763618815null
Staten Island9999Freshkills Parktrue622236745702670335null
Staten Island9999Freshkills Parktrue622236745742516223null
Staten Island9999Freshkills Parktrue622236745761259519null
Staten Island9999Freshkills Parktrue622236745690939391null
Staten Island9999Freshkills Parktrue622236745675702271null
Staten Island9999Freshkills Parktrue622236745724919807null
Staten Island9999Freshkills Parktrue622236745679208447null
Staten Island9999Freshkills Parktrue622236745726066687null
Staten Island9999Freshkills Parktrue622236745683861503null
Staten Island9999Freshkills Parktrue622236745723707391null
Staten Island9999Freshkills Parktrue622236745702604799null
Staten Island9999Freshkills Parktrue622236745742450687null
Staten Island9999Freshkills Parktrue622236745696739327null
Staten Island9999Freshkills Parktrue622236745761193983null
Staten Island9999Freshkills Parktrue622236745690873855null
Staten Island9999Freshkills Parktrue622236745675636735null
Staten Island9999Freshkills Parktrue622236745694380031null
Staten Island9999Freshkills Parktrue622236745679142911null
Staten Island9999Freshkills Parktrue622236745734225919null
Staten Island9999Freshkills Parktrue622236745731866623null
Staten Island9999Freshkills Parktrue622236745726001151null
Staten Island9999Freshkills Parktrue622236745689661439null
Staten Island9999Freshkills Parktrue622236745729507327null
Staten Island9999Freshkills Parktrue622236745683795967null
Staten Island9999Freshkills Parktrue622236745723641855null
Staten Island9999Freshkills Parktrue622236745763487743null
Staten Island9999Freshkills Parktrue622236745702539263null
Staten Island9999Freshkills Parktrue622236745696673791null
Staten Island9999Freshkills Parktrue622236745761128447null
Staten Island9999Freshkills Parktrue622236745690808319null
Staten Island9999Freshkills Parktrue622236745725739007null
Staten Island9999Freshkills Parkfalse622236745696935935AQMAAAABAAAABAAAAIzvORt9i1LAUzWXQ0NIRECs3yEigotSwIct0/1KSERAz1Bl94WLUsD10IC1SUhEQIzvORt9i1LAUzWXQ0NIREA=
Staten Island9999Freshkills Parkfalse622236746167451647AQMAAAABAAAABQAAALLLamedjVLA7PTzHUVHREBNNifZjI1SwIx+IDVNR0RAo5WznI2NUsAYmXlhTkdEQOZxFHmcjVLAepg7ZklHRECyy2pnnY1SwOz08x1FR0RA
Staten Island9999Freshkills Parkfalse622236745725181951AQMAAAABAAAACAAAAKO97SfLjFLAIFImkFVHRECDqWsmwIxSwIgY7T9ZR0RAaiCr/7mMUsAVstwXZUdEQKmCacK3jFLAJQi4Ym9HREBTwBAWwoxSwGytiUB/R0RAlcOy8tCMUsB7rxhGekdEQE9Ql3vVjFLA5tnfbWVHRECjve0= (truncated)
Staten Island9999Freshkills Parkfalse622236745692708863AQMAAAABAAAACgAAABxTRq7gilLAmdfeuPlHREDD33S73YpSwKGHSLX6R0RAyUDDbd2KUsAKqHCXDEhEQHoKDC7dilLAXpp1LhtIRECzsMwt3YpSwIA5Dj0bSERAJM9mHN2KUsARqtk4H0hEQKbuUhbdilLAAg+akiFIREAwyi0= (truncated)
Staten Island9999Freshkills Parkfalse622236745763880959AQMAAAABAAAABAAAAMJtrBbEilLAuXWkiSxLREAKJ7ZcwYpSwLrfZjFBS0RAuOwva8WKUsAVGCeVLktEQMJtrBbEilLAuXWkiSxLREA=
Staten Island9999Freshkills Parkfalse622236745673801727AQMAAAABAAAAEAAAAEusd47ri1LARkK8hxlLREB67WSv3ItSwK+/oIEeS0RAiTnvJNiLUsC9w3NbM0tEQKosoHnii1LAw55wO0NLRECON47p6otSwA05smhAS0RAQTKHHt2LUsCWtkiYMUtEQGXeF4jfi1LAns6gKjFLREAkqVc= (truncated)
Staten Island9999Freshkills Parkfalse622236745762766847AQMAAAABAAAABAAAABHqBw3NilLA5PFQ+cpKREA20j3kzIpSwHeLCgrNSkRAic/LRM2KUsBDJg1Py0pEQBHqBw3NilLA5PFQ+cpKREA=
Staten Island9999Freshkills Parkfalse622236745769549823AQMAAAABAAAACAAAAEsfeSjQilLAvI5xoTlMREBSSHP3yYpSwGY4QrM7TERAOPSwLMWKUsBX9gTsV0xEQOaTaHXEilLAzKLeUl9MREDTO0MRx4pSwLxEjlVjTERAUghS8dWKUsAn/qZcXkxEQAYG43zailLAFXeRgklMREBLH3k= (truncated)
Staten Island9999Freshkills Parkfalse622236746168893439AQMAAAABAAAACgAAAEFnNV4qjVLAwD4mP1tHREBSQQgeKo1SwJ1uO2ZcR0RAZL/3cTSNUsCXXLZDbEdEQMYbEV82jVLAcXR5nmtHREBx/B14P41SwJ9IGV9eR0RAd4R8yzqNUsDHj1iuXkdEQDyyRxU2jVLAdJqzbl5HREDzpns= (truncated)
Staten Island9999Freshkills Parkfalse622236745673244671AQYAAAACAAAAAQMAAAABAAAABQAAAGfnWjFYjFLAcCT/1uFKREBEWyhGUYxSwCD74ifkSkRAow3VNFKMUsA4U1F95kpEQD0y/b9ZjFLAYpJwO+RKREBn51oxWIxSwHAk/9bhSkRAAQMAAAABAAAABQAAALTRzktOjFLAkEgTJ+U= (truncated)
Staten Island9999Freshkills Parkfalse622236745730293759AQMAAAABAAAADwAAAHsrqeBrjVLALNBqRGhIREC72IoDXY1SwL+PlD9tSERAycTpeliNUsAWLoUYgkhEQF/qes9ijVLAaVta9pFIREB0K4b3bo1SwMamceONSERAC8KjXG+NUsBsmGihjEhEQKB950BwjVLAOz81o4lIREDlS8k= (truncated)
Staten Island9999Freshkills Parkfalse622236745757982719AQMAAAABAAAACAAAAFvg22aMilLANALWn7VLREB+k+jbiopSwE9M1CO2S0RAGDjhCnqKUsDZZAofz0tEQO+Cb7V5ilLATtUVkNBLREBwrGJPg4pSwGznOlPfS0RAL1ApL5KKUsBiUqda2ktEQNP227qWilLAaLPtgMVLREBb4Ns= (truncated)
Staten Island9999Freshkills Parkfalse622236745736519679AQMAAAABAAAABgAAABIxNdUtjVLALY8s+hJKRECy44BiKo1SwHiQ5CEUSkRA9g1i2SWNUsCgwZ/7KEpEQBUkeHMujVLAEIjHMTZKREByI0BpLo1SwE8n89smSkRAEjE11S2NUsAtjyz6EkpEQA==
Staten Island9999Freshkills Parktrue622236745678913535null
Staten Island9999Freshkills Parkfalse622236745682026495AQMAAAABAAAABwAAABhV/Kp6i1LAh31HSGFMRECUDmrva4tSwAQrrjVmTERABZFSZGeLUsARqwQQe0xEQKfzQ7lxi1LAY4jX8IpMRED1jqXhcotSwCtxt42KTERAYIM7BnqLUsBWLJGmYkxEQBhV/Kp6i1LAh31HSGFMREA=
Staten Island9999Freshkills Parkfalse622236745735405567AQMAAAABAAAALAAAACBtiIU+jVLASpeWu6xJREC8PLExMo1SwFki59ywSURAVV6sqC2NUsD4YnG2xUlEQFL7/MY3jVLATD7rQNVJREBHH4DjN41SwDCgssfTSURAIsTaMjiNUsBjWkyr0UlEQI02BZ04jVLAtALEwc9JRED26fE= (truncated)
Staten Island9999Freshkills Parkfalse622236745696149503AQMAAAABAAAACQAAAORf+0wejFLAur1XzyRIRECcUfVWHYxSwICcAXIlSERA39+yMxqMUsA/LFb4JkhEQMyzxCgEjFLA7KJzdS9IRECy6bdfA4xSwLMk9RAzSERAMuo1sw2MUsD2iZTvQkhEQLzpcZAcjFLAsm3J9T1IRECArRk= (truncated)
Staten Island9999Freshkills Parkfalse622236745742188543AQMAAAABAAAACAAAAIprKi5ti1LAwRpDy59MREAWlwtOXotSwFh5zcSkTERAjxrcwlmLUsBkxz+fuUxEQE1c3xdki1LAZg02gMlMREAFjWoXZ4tSwK+BhX/ITERAVAUJCGiLUsDfm3gqx0xEQOtdaKtui1LA144nFaJMRECKayo= (truncated)
Staten Island9999Freshkills Parkfalse622236745699262463AQMAAAABAAAACQAAAJjNyNXrilLAKAnxzP9JREDMTz333IpSwFwbsMUESkRA/2kpzNqKUsC/hKG4DkpEQJ1M8g/ailLAz8UH5RlKREAWV8fm2YpSwFyfwuQbSkRA9IGfv+KKUsAImNB+KUpEQB9AQZ7xilLAEb4HhiRKRECw80s= (truncated)
Staten Island9999Freshkills Parkfalse622236745695592447AQMAAAABAAAAFAAAACHyBz3Zi1LAvWeqxEVIREAEgGFh14tSwOf3dj5ISERATDZXYNeLUsCOiL8/SEhEQOccQV/Xi1LAvJIdQUhIRECJnmNZ04tSwD3fZQVNSERAwUAYJM+LUsD72D9wUUhEQC2BQSPPi1LAkpgWcVFIREBFkXY= (truncated)
Staten Island9999Freshkills Parkfalse622236745912778751AQMAAAABAAAABAAAAGogq/+5jFLAFbLcF2VHREDDmav/s4xSwCv2LqVwR0RAqYJpwreMUsAlCLhib0dEQGogq/+5jFLAFbLcF2VHREA=
Staten Island9999Freshkills Parkfalse622236745769877503AQMAAAABAAAABAAAAAESmsN+ilLAN0D7LPRLRECZpv25fIpSwPYgS9v0S0RAJSoxv3+KUsA+gcyv9UtEQAESmsN+ilLAN0D7LPRLREA=
Staten Island9999Freshkills Parkfalse622236745691365375AQMAAAABAAAACwAAAGozUIn1ilLAEKQIQdlHREAw8SYW9IpSwMcGf+jfR0RALiPBaP6KUsDAqrbH70dEQBJ93QEMi1LA/HtxO+tHREA3kig6BotSwLZ1sPHlR0RAxGtyuQCLUsAGDz7t4EdEQAg8IJ7/ilLA9ibo6t9HREDs7PU= (truncated)
Staten Island9999Freshkills Parkfalse622236745736290303AQMAAAABAAAABgAAAO0EkPJDjVLAR0N/nJ5JREBBXEPvQo1SwJNXp0SjSURA56I3SkONUsBSb/DdoklEQNmKbSVEjVLAIcjG8KFJRECgZKwxRI1SwIaCYj+gSURA7QSQ8kONUsBHQ3+cnklEQA==
Staten Island9999Freshkills Parktrue622236745921560575null
Staten Island9999Freshkills Parkfalse622236745913106431AQMAAAABAAAAEAAAAIIWNIjqjFLAZ2Od0SZHREBZDm1g6IxSwLkJSe8mR0RAA+xnOuaMUsDe2MI4J0dEQNYVpRfkjFLAj2zZrSdHREA05cPV4oxSwDR9Fg0oR0RAKXtIjd6MUsChDoq9O0dEQJJi9ODojFLA9Hgrm0tHREDMPG8= (truncated)
Staten Island9999Freshkills Parkfalse622236745698476031AQMAAAABAAAACQAAALL+ux3oilLAISejGFNJREBRTn3L4IpSwJM6VYtVSURAr2wazOCKUsAX3FEnVklEQKdUfongilLARGuvEmdJRED8vVvz34pSwAZAevV3SURAzrEi0N+KUsB9ldCGfElEQEwaBObtilLAFHgZ0XdJREBOsPA= (truncated)
Staten Island9999Freshkills Parkfalse622236745769648127AQMAAAABAAAABwAAAJ5JnIXCilLA0IWqL3hMRECiHMIJwopSwI4IEFl4TERA/atadMCKUsCS30q4iExEQO271ie+ilLAeH+vT6BMREBgDW9OyIpSwLcrH+ucTERAEwwY2syKUsCQ2O0QiExEQJ5JnIXCilLA0IWqL3hMREA=
Staten Island9999Freshkills Parkfalse622236746168991743AQMAAAABAAAAbgAAAOZxFHmcjVLAepg7ZklHRECjlbOcjY1SwBiZeWFOR0RAeDp0FImNUsAwnOU5Y0dEQNRjiUWTjVLAJcIu4XJHRED/Zstpk41SwACBE3xyR0RAaf7Oo5ONUsAQfUPlcUdEQB0fx+CTjVLAt2EwUXFHRED02aI= (truncated)
Staten Island9999Freshkills Parkfalse622236745673342975AQMAAAABAAAACQAAAB+zGpprjFLA/inKAshKRECwB1G7XIxSwNN6Kv3MSkRAZ+daMViMUsBwJP/W4UpEQD0y/b9ZjFLAYpJwO+RKREDd+3RsX4xSwLrmzYjiSkRArimgTm6MUsBukC0X5kpEQBjpkTV0jFLAQxtKzt9KRED9fQQ= (truncated)
Staten Island9999Freshkills Parktrue622236745680125951null
Staten Island9999Freshkills Parkfalse622236745672785919AQMAAAABAAAABwAAACtBCaInjFLAVe8AGPJKREBS8sO1HIxSwGna4b/1SkRArQe3bRuMUsDdVY+i+0pEQACZCuIdjFLA31deePlKREB6WJ8NIYxSwBYZS+72SkRASHDjSSSMUsDgOSWX9EpEQCtBCaInjFLAVe8AGPJKREA=
Staten Island9999Freshkills Parkfalse622236745690578943AQMAAAABAAAACQAAADmf/S3qilLA0p0dH8tIREDeljZq24pSwFzACA/QSERAHQuVdduKUsDBMc0y00hEQP7D8CDcilLA/mL9X+hIREAm+Thi3IpSwFEUV5HtSERABbJIGOGKUsBnDLvP9EhEQA6OJ/bvilLAP+gT1+9IREBuE/g= (truncated)
Staten Island9999Freshkills Parkfalse622236745761751039AQMAAAABAAAACAAAAIfQ/ZbEilLAbsZnK/BLRECF0TG3tYpSwH21MST1S0RAZUAtzbGKUsAxnLUYB0xEQIMkNPu8ilLAoHafRg5MREA7iZpExYpSwPaBRZsWTERAImKyX8qKUsAJfFzmFExEQDhHP+vOilLAxBlxDABMRECH0P0= (truncated)
Staten Island9999Freshkills Parktrue622236745679568895null
Staten Island9999Freshkills Parkfalse622236745743400959AQMAAAABAAAACAAAAG3Nwusyi1LABCIZR+1MREAhLGkLJItSwLFPb0DyTERAyND3fx+LUsBWzvUaB01EQJsA9NQpi1LAtHY0/BZNREC4lME/MotSwGymuysUTURAS5QPEDuLUsB9Dzo1B01EQNZYwUA9i1LAkKk/KP1MREBtzcI= (truncated)
Staten Island9999Freshkills Parkfalse622236745742843903AQMAAAABAAAABwAAAAEzn97yilLA2oyXBhZNREClgCsC5IpSwAfxVf4aTURA2LgymeuKUsAqkB94HE1EQCuus3/wilLAjowFRh1NREDVFnRh9YpSwF42raweTURAx31npfmKUsB65hRxIE1EQAEzn97yilLA2oyXBhZNREA=
Staten Island9999Freshkills Parkfalse622236745735503871AQMAAAABAAAAJwAAAGmcpnQzjVLA6wiKbupJREBKr4qWJI1SwJq/oWnvSURAfd5tDSCNUsBt20dDBEpEQLLjgGIqjVLAeJDkIRRKREASMTXVLY1SwC2PLPoSSkRAUz3cvy2NUsD9FD0cEEpEQKFRPQkujVLABAdpMg5KREAF9AY= (truncated)
Staten Island9999Freshkills Parkfalse622236745763749887AQMAAAABAAAACAAAALtW8YHOilLArlVM4gRLREDBzi5tyIpSwG9it+oGS0RA4J4bi8eKUsBsOitdEktEQMJtrBbEilLAuHWkiSxLREC47C9rxYpSwBUYJ5UuS0RAq7F7StSKUsCSfmGcKUtEQKxz0tXYilLAjfHswhRLREC7VvE= (truncated)
Staten Island9999Freshkills Parkfalse622236745742286847AQMAAAABAAAABQAAAPWOpeFyi1LAK3G3jYpMRECn80O5cYtSwGOI1/CKTERAimsqLm2LUsDBGkPLn0xEQOpdaKtui1LA1o4nFaJMRED1jqXhcotSwCtxt42KTERA
Staten Island9999Freshkills Parkfalse622236745762635775AQMAAAABAAAABwAAAHYlWVvWilLAhyqUnKFKREBbb3kU0IpSwFIVyLWjSkRAEeoHDc2KUsDk8VD5ykpEQInPy0TNilLAQyYNT8tKRECketcj3IpSwOq4SVbGSkRA5zIUr+CKUsBhDwZ9sUpEQHYlWVvWilLAhyqUnKFKREA=
Staten Island9999Freshkills Parkfalse622236745730162687AQMAAAABAAAAGgAAAIWgZ8V9jVLAs+4/8U5IREDJVDRpcI1SwFX6gGtTSERAeyup4GuNUsAs0GpEaEhEQJIooa11jVLAxTnhUXdIREArfNixdY1SwDytwUR3SERAuryaHHaNUsDfR6badUhEQHJmIY12jVLAAyiXwHNIRECYmyg= (truncated)
Staten Island9999Freshkills Parkfalse622236745760964607AQMAAAABAAAADwAAAA6xuwjBilLASTCfrUNLREAMPY6+wIpSwIpDl99FS0RADlNtYMCKUsASCxWsSUtEQDbSl+C/ilLA1AOZb01LREC/N2w/v4pSwAJlaydRS0RAwVRcfb6KUsC3/NzQVEtEQOpFM529ilLA4aMZP1hLREAiICs= (truncated)
Staten Island9999Freshkills Parkfalse622236745681895423AQMAAAABAAAABAAAACCTZnWFi1LAwuEBV0pMREDpjmBaf4tSwCRuzGFMTERAFEPU6XqLUsBUWqrCYExEQCCTZnWFi1LAwuEBV0pMREA=
Staten Island9999Freshkills Parkfalse622236745913204735AQMAAAABAAAACwAAABXjZov2jFLAiJgF+yhHREBY9ydG/IxSwGiLbMgxR0RARIHViAONUsD2Ja9ZL0dEQP5xVegCjVLAOz+bzi5HRECGIiypAY1SwJeud90tR0RAGzyPYQCNUsCfkFYILUdEQEWuBTf+jFLARiql8CtHRECeYPs= (truncated)
Staten Island9999Freshkills Parkfalse622236745691791359AQMAAAABAAAADAAAACoGIm3eilLAkiWYz9FHREAB8qRI3opSwD3ytDXaR0RAQqf0OOWKUsCSOQ7h5EdEQDDxJhb0ilLAxwZ/6N9HREBqM1CJ9YpSwBCkCEHZR0RAJkRisPKKUsB/rkns10dEQHVLi13vilLAjx6hh9ZHRECs1T8= (truncated)
Staten Island9999Freshkills Parkfalse622236745762963455AQMAAAABAAAABAAAANaM/WrUilLANt5z9mZKRED0jon204pSwBTVNlZtSkRAJZolHtWKUsCeeuUJaEpEQNaM/WrUilLANt5z9mZKREA=
Staten Island9999Freshkills Parkfalse622236745912647679AQMAAAABAAAABwAAANhuy9LNjFLAokyR2T1HREBeY4fGzYxSwL/8KPI9R0RAxheJEMSMUsCuK4O2UUdEQISpaybAjFLAhxjtP1lHRECjve0ny4xSwCBSJpBVR0RA40TQsM+MUsBWlAK4QEdEQNhuy9LNjFLAokyR2T1HREA=
Staten Island9999Freshkills Parkfalse622236745769746431AQMAAAABAAAACAAAAC9QKS+SilLAYlKnWtpLREBwrGJPg4pSwGznOlPfS0RAARKaw36KUsA3QPss9EtEQCUqMb9/ilLAPoHMr/VLREDbr8BfhYpSwEVfuDv3S0RA56Ztm5iKUsBVd9Ul/EtEQMadPYOcilLALk/KO+pLREAvUCk= (truncated)
Staten Island9999Freshkills Parkfalse622236746169090047AQMAAAABAAAAWQAAAG9CaOCOjVLAOgej74dHREAwmN0DgI1SwM+E2eqMR0RA6FCGe3uNUsAlamHDoUdEQHGZzc+FjVLAnx/BoLFHREDG46MAiY1SwK+q9o6wR0RArlsIMomNUsDMdGTwr0dEQNW/eIWJjVLAbZaq8K5HRECmLPQ= (truncated)
Staten Island9999Freshkills Parkfalse622236746168532991AQMAAAABAAAABwAAANOJOWFxjVLA9XyFoVpHREBd8nW9X41SwGstTkBjR0RAGO8Ff1yNUsAjLT8rckdEQM57ItNmjVLAvnCgCIJHREBMhKqvdY1SwAgXhQ19R0RAFsj/N3qNUsCVSRI1aEdEQNOJOWFxjVLA9XyFoVpHREA=
Staten Island9999Freshkills Parkfalse622236745690677247AQMAAAABAAAABwAAAJaTnyPeilLAwauyGAxJREAEAkaS3opSwJtPO5QSSURAs//Tnd+KUsAmHsVpI0lEQJfWoh3gilLAx6cvHi9JREDsCoZV4opSwAM5TWAuSURA4olu4OaKUsDtgduHGUlEQJaTnyPeilLAwauyGAxJREA=
Staten Island9999Freshkills Parkfalse622236745679667199AQMAAAABAAAABwAAAMOqaqPMjFLAADEi3UZKRECt/ALFvYxSwIZS2ddLSkRA44l6O7mMUsCOL4yxYEpEQNmtbZDDjFLAVzyWkHBKRECI/Em7y4xSwP8/YdRtSkRAJAV3dNGMUsDK4jpDTkpEQMOqaqPMjFLAADEi3UZKREA=
Staten Island9999Freshkills Parkfalse622236745750839295AQMAAAABAAAABgAAAFzYInTAilLAKfO+NQBNREBB/k2MtIpSwMpgZzAETURAyb1QWLOKUsBkYsfNEE1EQCMFdJHJilLAtfyqqxVNREAm6djIyopSwNdDPBcQTURAXNgidMCKUsAp8741AE1EQA==
Staten Island9999Freshkills Parktrue622236745729376255null
Staten Island9999Freshkills Parkfalse622236745696903167AQMAAAABAAAABwAAAM9QZfeFi1LA9tCAtUlIRECs3yEigotSwIct0/1KSERAaMvol32LUsCB4A7WX0hEQO0eHOuHi1LAnRMdtW9IREAy4IrIlotSwAp217tqSERAF8kzsZqLUsDi+w3JWEhEQM9QZfeFi1LA9tCAtUlIREA=
Staten Island9999Freshkills Parkfalse622236745757065215AQMAAAABAAAABQAAAB2rT82hilLAK9g3t5JLREAufZ0+nIpSwPDVNVCcS0RAoABJppuKUsAe8X8ynUtEQKlDKdKfilLAYkKWzZtLREAdq0/NoYpSwCvYN7eSS0RA
Staten Island9999Freshkills Parkfalse622236745742385151AQMAAAABAAAABAAAAAWNahdni1LAroGFf8hMREBNXN8XZItSwGYNNoDJTERAhFTWEWOLUsBFdtUyzkxEQAWNahdni1LAroGFf8hMREA=
Staten Island9999Freshkills Parkfalse622236745673768959AQMAAAABAAAACAAAAI43junqi1LADDmyaEBLRECqLKB54otSwMOecDtDS0RAuW8o792LUsCLtlgVWEtEQDyb7UPoi1LAvdlg9WdLREBL45x39otSwD0i0TRjS0RATkGm0feLUsDL/C7aX0tEQOKa9+v6i1LAfkZ+mlFLRECON44= (truncated)
Staten Island9999Freshkills Parktrue622236745769517055null
Staten Island9999Freshkills Parkfalse622236745730260991AQMAAAABAAAAJgAAAHUrhvdujVLAxqZx441IREBf6nrPYo1SwGlbWvaRSERAa9LXRl6NUsCgEGDPpkhEQCQuXl9mjVLAFu6JPrNIRECqx/yQZo1SwKFpRfiySERA89HMMmeNUsDb/RiHskhEQMQxL5dnjVLAgs8Jg7JIREDFrU4= (truncated)
Staten Island9999Freshkills Parkfalse622236745743269887AQMAAAABAAAACAAAAEU7ZFdGi1LAF8oxc9NMRECSMx53N4tSwNddmWzYTERAbc3C6zKLUsAEIhlH7UxEQNZYwUA9i1LAkKk/KP1MREB8ENtiQ4tSwFa2PBv7TERA10BbHU+LUsAOw4d76kxEQPwhZaxQi1LA2TBAVONMREBFO2Q= (truncated)
Staten Island9999Freshkills Parkfalse622236745700343807AQMAAAABAAAACAAAAF424J3eilLALDWSr4FIREDzmPH+24pSwM2v64+CSERALwjLvNuKUsD5/EBKkEhEQKkTtzrbilLAQoMUz6hIREBjPyg624pSwFetVXipSERAb9flZeSKUsBWt0dnpkhEQP5FsvDoilLAZgAcj5FIREBeNuA= (truncated)
Staten Island9999Freshkills Parkfalse622236745678880767AQMAAAABAAAABgAAANJGsZ6rjFLA33bcPp9KRECeJwzAnIxSwMGtejmkSkRA6c9VNpiMUsCaJVATuUpEQKAIEl2YjFLApnjRTrlKREDlerXBrYxSwCmzKoeiSkRA0kaxnquMUsDfdtw+n0pEQA==
Staten Island9999Freshkills Parkfalse622236745742712831AQMAAAABAAAACgAAAAz8pEoGi1LAyBTvMvxMREB/bTpq94pSwA6sGCwBTURAATOf3vKKUsDajJcGFk1EQMd9Z6X5ilLAeuYUcSBNREBJ5nIy+opSwDKGhKsgTURA/wLa5v6KUsBkDCo/I01EQCtf+PEAi1LA3S+QpyRNREAaRQM= (truncated)
Staten Island9999Freshkills Parkfalse622236745735372799AQMAAAABAAAAJAAAAMRo/LY3jVLAZffo2dZJREBpnKZ0M41SwOsIim7qSURA+d1JyzSNUsD6t8l87ElEQDOCDd40jVLAKUIqbuxJREACiayTNY1SwJK7PRLsSURAMcec9zWNUsC0/EBQ60lEQG9eIGI2jVLAxnHpRupJRECXcwE= (truncated)
Staten Island9999Freshkills Parkfalse622236745920643071AQMAAAABAAAABgAAANgYEA6VjFLAkR28UKlHREBPXNQyhIxSwBUZLAvHR0RAmBuE5IeMUsDtzke4zEdEQEHcYMGWjFLAZtQKvsdHREA1JodKm4xSwMaoveWyR0RA2BgQDpWMUsCRHbxQqUdEQA==
Staten Island9999Freshkills Parktrue622236745680879615null
Staten Island9999Freshkills Parkfalse622236745691332607AQMAAAABAAAACAAAABJ93QEMi1LA/HtxO+tHREAuI8Fo/opSwMCqtsfvR0RA7q8m3vmKUsCTnpWfBEhEQCAT1TAEi1LAk5HYfhRIREDBRCAOE4tSwIZzJIYPSERA1NammBeLUsAwKjeu+kdEQKCuRdAPi1LAtqLotu5HREASfd0= (truncated)
Staten Island9999Freshkills Parktrue622236745733701631null
Staten Island9999Freshkills Parktrue622236745750937599null
Staten Island9999Freshkills Parktrue622236745697001471null
Staten Island9999Freshkills Parkfalse622236745760833535AQMAAAABAAAACAAAAKuxe0rUilLAkn5hnClLREC47C9rxYpSwBUYJ5UuS0RACie2XMGKUsC632YxQUtEQA+xuwjBilLASTCfrUNLREBEL7Yzy4pSwLZnZk9TS0RA7DYYE9qKUsB2BpdWTktEQPoEcZ7eilLAFWYNfTlLRECrsXs= (truncated)
Staten Island9999Freshkills Parkfalse622236745735700479AQMAAAABAAAAEwAAALQHo0M7jVLA7nzuKYdJRED5LMdlLI1SwMHtAyWMSURAWFPE3CeNUsCnGHn+oElEQLw8sTEyjVLAWSLn3LBJREAgbYiFPo1SwEqXlrusSURAcUhlED+NUsAdsK/OqklEQKg1mTlBjVLAWq13QqVJRECkwDw= (truncated)
Staten Island9999Freshkills Parkfalse622236745681764351AQMAAAABAAAACAAAAIwmheW8i1LA9Z0od7BLRECoGgsGrotSwGaO7HC1S0RAbX5Pe6mLUsAx9f1KyktEQPfWIdCzi1LAuMBZK9pLREBb/ekiwItSwL+n7gvWS0RA89LTEsSLUsBCCgbTzktEQJTYWTrHi1LAUUlsV8BLRECMJoU= (truncated)
Staten Island9999Freshkills Parkfalse622236745762832383AQMAAAABAAAACAAAAKR61yPcilLA6rhJVsZKRECJz8tEzYpSwEMmDU/LSkRAN9I95MyKUsB0iwoKzUpEQGNgliHLilLAj5WO2+NKRECiDEYN04pSwCjc7AjwSkRArPln7OGKUsATpx8Q60pEQNS9pnfmilLAx+nGNtZKRECketc= (truncated)
Staten Island9999Freshkills Parkfalse622236746168958975AQMAAAABAAAABgAAAM3Ma5ePjVLABgLhpYRHREBvQmjgjo1SwDoHo++HR0RAaOCiCI+NUsBKW2wtiEdEQEa8qCGPjVLAAsfclIdHRECeZNxxj41SwKi7GpuFR0RAzcxrl4+NUsAGAuGlhEdEQA==
Staten Island9999Freshkills Parkfalse622236745690546175AQMAAAABAAAACAAAAA6OJ/bvilLAP+gT1+9IREAFskgY4YpSwGcMu8/0SERAjlqPpN2KUsD/cP+mBElEQJaTnyPeilLAwauyGAxJREDiiW7g5opSwO2B24cZSURAQ6RjvvWKUsA/liqPFElEQPk0Nkn6ilLARJ6/tv9IREAOjic= (truncated)
Staten Island9999Freshkills Parkfalse622236745761718271AQMAAAABAAAABwAAACJisl/KilLACXxc5hRMREA6iZpExYpSwPeBRZsWTERAM5Feqc6KUsC21skMIExEQFNIc/fJilLAZjhCsztMREBLH3ko0IpSwLyOcaE5TERAtBAItNSKUsABGnHHJExEQCJisl/KilLACXxc5hRMREA=
Staten Island9999Freshkills Parkfalse622236745679536127AQMAAAABAAAAJQAAAMpDMQvgjFLAkZqtCC1KREDVLt0s0YxSwLIXdgMySkRAw6pqo8yMUsAAMSLdRkpEQCQFd3TRjFLAy+I6Q05KREDMy6rN1IxSwH/qWMs7SkRAsvtiPdWMUsAl1UwkPEpEQDNcjp7VjFLAviqGWjxKRECH/M4= (truncated)
Staten Island9999Freshkills Parktrue622236745736585215null
Staten Island9999Freshkills Parkfalse622236745729245183AQMAAAABAAAALAAAADLQxNOGjVLAz4V57BFIRECv9KUCfo1SwPc4++AUSERAULkyenmNUsCkLsm5KUhEQDva5neBjVLAiAm1/zVIREDhkTR5gY1SwLvnIvo1SERAjqF22YGNUsBbvuRsNEhEQKLNoDyCjVLA1TJT4TJIREAoKbI= (truncated)
Staten Island9999Freshkills Parkfalse622236745743368191AQMAAAABAAAABQAAALiUwT8yi1LAbKa7KxRNRECbAPTUKYtSwLR2NPwWTURAqtP19CiLUsA8pAQAG01EQP+oH2Qxi1LAZxLDbhVNREC4lME/MotSwGymuysUTURA
Staten Island9999Freshkills Parkfalse622236745756934143AQMAAAABAAAABwAAABc4Zze2ilLAMPCOuGpLREDAxvqotIpSwA3YGShuS0RAlKxE5a6KUsAfGV4bektEQNHHlx6pilLAGoA+XYVLRECyHU09s4pSwO3XS/uBS0RABtHRyLeKUsDPwLQhbUtEQBc4Zze2ilLAMPCOuGpLREA=
Staten Island9999Freshkills Parkfalse622236745696215039AQMAAAABAAAACwAAALXuThv0i1LAX6sObDdIRECpl7jr64tSwJZhodE7SERAviuZm+OLUsCvTCm8P0hEQCZswprji1LAt++JvD9IRECwmeqZ44tSwLKS6rw/SERA/9ZrM9uLUsDnWTwnQ0hEQCHyBz3Zi1LAvWeqxEVIREDXEmA= (truncated)
Staten Island9999Freshkills Parkfalse622236745692545023AQMAAAABAAAABAAAACgicrTcilLA83wbF0dIREArG9yo3IpSwKOPqGtLSERAQxO1YN2KUsDDjPsfSEhEQCgicrTcilLA83wbF0dIREA=
Staten Island9999Freshkills Parkfalse622236745724461055AQMAAAABAAAACgAAAJkOOndRjVLA525JvwtJREB5rTCbR41SwEbzBw0PSURAGLZdEkONUsDlZEXmI0lEQHzYJmdNjVLAyKNsxDNJREDHUhhOT41SwGiaQiEzSURAVbkEolKNUsDNYIVVDUlEQBEZy0dSjVLAsnLBeQxJREDOZYg= (truncated)
Staten Island9999Freshkills Parkfalse622236745695657983AQMAAAABAAAADgAAABfJM7Gai1LA4vsNyVhIREAy4IrIlotSwAp217tqSERAAcDUG6GLUsAf2NiaekhEQGgqRvmvi1LAXRV4oXVIRECQ4BJKtItSwLrTGtBhSERAV+uEyrGLUsCmx90dYkhEQNwdcPWti1LAPRtxCGJIREAleDs= (truncated)
Staten Island9999Freshkills Parkfalse622236745691987967AQMAAAABAAAACAAAAKooeOkvi1LAZfYDlQlIREAcETM+LItSwNxVi2waSERAQI0OkTaLUsBkq7RLKkhEQIwUX25Fi1LAAEXKUiVIRECyP2O7SItSwFMVnSsWSERAGWXJvjmLUsDyC945D0hEQCyKW1sxi1LA8nYzsgpIRECqKHg= (truncated)
Staten Island9999Freshkills Parkfalse622236745680977919AQMAAAABAAAABwAAANOw7Nqbi1LA+8pp2QhMREA2MDX7jItSwAXBFNMNTERAT6RLcIiLUsCRtUitIkxEQCoAeomRi1LAx5K2qDBMREAKMIfLlItSwMZjWLspTERA4lHgu6CLUsD3hrhYEExEQNOw7Nqbi1LA+8pp2QhMREA=
Staten Island9999Freshkills Parkfalse622236745691430911AQMAAAABAAAABQAAAKGuRdAPi1LAt6Lotu5HREDU1qaYF4tSwDAqN676R0RANvJdkBuLUsBQenpa+UdEQERPK2Eai1LAqpOQYfhHREChrkXQD4tSwLei6LbuR0RA
Staten Island9999Freshkills Parkfalse622236745723346943AQMAAAABAAAAHAAAAGvS10ZejVLAoBBgz6ZIREDprY9pT41SwNBJgsqrSERA0KrW4EqNUsAEx46jwEhEQE+zeTVVjVLA1lmHgdBIREAyjfLbX41SwFCY5O/MSERAe70cJGCNUsDujN4AzEhEQFS6eo1gjVLAyM+DecpIREA8O1w= (truncated)
Staten Island9999Freshkills Parkfalse622236745921626111AQMAAAABAAAAEQAAALDgyKhgjFLA/P5Tsv9HREAmjv71XIxSwJoITWsDSERALyUTaVuMUsDV0oQvBEhEQHb+39FZjFLAiBZRugRIREB0ovMzWIxSwJm8fgoFSERArsftklaMUsCQYVkfBUhEQO6VdPJUjFLAy8ax+ARIREBH/Co= (truncated)
Staten Island9999Freshkills Parkfalse622236745743138815AQMAAAABAAAABwAAAGANb07IilLAtysf65xMREDuu9YnvopSwHh/r0+gTERAv4zxC7uKUsAFUjo3wExEQG4OBTe/ilLAgZ2dn8ZMREB3/VMXzopSwJUttKbBTERAnAj/otKKUsB5yG3MrExEQGANb07IilLAtysf65xMREA=
Staten Island9999Freshkills Parktrue622236745760931839null
Staten Island9999Freshkills Parkfalse622236745678749695AQMAAAABAAAABgAAANo04wa/jFLANC5eaoVKREAJr1EosIxSwNDBDWWKSkRA0kaxnquMUsDfdtw+n0pEQOV6tcGtjFLAKbMqh6JKREATkUgmw4xSwD9Zlb+LSkRA2jTjBr+MUsA0Ll5qhUpEQA==
Staten Island9999Freshkills Parkfalse622236745920511999AQMAAAABAAAABgAAAB+VN+mljFLAHNlvlotHREDYGBAOlYxSwJEdvFCpR0RANSaHSpuMUsDGqL3lskdEQGtSUCeqjFLAWFdv661HREBgsmCwroxSwKzyKBOZR0RAH5U36aWMUsAc2W+Wi0dEQA==
Staten Island9999Freshkills Parkfalse622236745913171967AQMAAAABAAAADwAAAESB1YgDjVLA9iWvWS9HREBY9ydG/IxSwGiLbMgxR0RAzDxvvfeMUsBI0JegRkdEQNurMRECjVLA62YsflZHRECtKa/tEI1SwCGbfYNRR0RA4we/chONUsD4CLrtRUdEQOQrAhUOjVLAbjrjPT9HREDV1s8= (truncated)
Staten Island9999Freshkills Parkfalse622236745673965567AQMAAAABAAAABgAAAEvjnHf2i1LAPSLRNGNLREA8m+1D6ItSwL3ZYPVnS0RAVdVzueOLUsAaBV7PfEtEQFNTPCboi1LAeowAnINLREAh5ikQ9YtSwJ9Au7BmS0RAS+Ocd/aLUsA9ItE0Y0tEQA==
Staten Island9999Freshkills Parkfalse622236745673408511AQMAAAABAAAACAAAALu+rP0+jFLAFZO+8dZKREBwIdIeMIxSwFla8uvbSkRAsHDnACyMUsCsmrvU7kpEQD17KOM1jFLA0yHRc+dKREDaHSmNPoxSwP+vXF34SkRA6nN7k0eMUsBq4qLW7kpEQPSifVJJjFLAABdO0eZKREC7vqw= (truncated)
Staten Island9999Freshkills Parkfalse622236745730457599AQMAAAABAAAAFgAAAFC5Mnp5jVLApC7JuSlIRECCNz6dao1SwMdz+rQuSERAAxK1FGaNUsB/Ms+NQ0hEQMlUNGlwjVLAVfqAa1NIRECGoGfFfY1SwLPuP/FOSERAJLS19n2NUsCxrrQ2TUhEQG7V+1p+jVLAQGxP70lIREBH65U= (truncated)
Staten Island9999Freshkills Parktrue622236745733570559null
Staten Island9999Freshkills Parkfalse622236745672851455AQMAAAABAAAADwAAAKGV1vf+i1LAVCD6s/9KREAkb9cY8ItSwL79760ES0RAS6x3juuLUsBGQryHGUtEQGwbygf0i1LAJW8njSZLRECDK1bD9ItSwG9lkhwmS0RA+S3loviLUsClnVOJJUtEQHh2Qfb6i1LACQXJVCRLREB4iTo= (truncated)
Staten Island9999Freshkills Parktrue622236745679634431null
Staten Island9999Freshkills Parkfalse622236745729343487AQMAAAABAAAAMAAAALZOdEeBjVLAuBxeecZHRECt1b9qco1SwHIWjXTLR0RAkaFQ4m2NUsA83TBN4EdEQF/MqTZ4jVLASvizKvBHREC1qGG0go1SwD9bjabsR0RA/if6toKNUsDrgP2F7EdEQFP048mCjVLAMdgQxutHREB3w1Q= (truncated)
Staten Island9999Freshkills Parkfalse622236745696870399AQMAAAABAAAABgAAAEWNn5Zfi1LAgCxlxitIRECZTqSeXotSwGFA4TgwSERAUeOs8WiLUsC89vAXQEhEQHlj38Rzi1LAr3/MeDxIREBIZEZ1Y4tSwFVgYpswSERARY2fll+LUsCALGXGK0hEQA==
Staten Island9999Freshkills Parkfalse622236745742909439AQMAAAABAAAABwAAABpFAxQMi1LAKc7H7iBNREArX/jxAItSwN0vkKckTURAt+MycwOLUsDWUVVhJk1EQFn34MwHi1LAdi8zCSpNREDxR4LqC4tSwO4heSsuTURAVQ/kDRKLUsBEojUeKk1EQBpFAxQMi1LAKc7H7iBNREA=
Staten Island9999Freshkills Parkfalse622236745724559359AQMAAAABAAAABwAAALzcUd5IjVLAoCu/nUhJREC81p8AOo1SwFsl3JhNSURAlu60dzWNUsAEdDVyYklEQGz0j8w/jVLASxiAUHJJRECAqMkSRo1SwIYIUzZwSURADEdtl0yNUsBlF5tVTklEQLzcUd5IjVLAoCu/nUhJREA=
Staten Island9999Freshkills Parkfalse622236745681633279AQMAAAABAAAACAAAAHFDkU/Qi1LA+6JIo5ZLREBo0CpwwYtSwD31HZ2bS0RAjCaF5byLUsD1nSh3sEtEQJTYWTrHi1LAUUlsV8BLREA6o7cGzYtSwEBezGa+S0RAtPl/1dGLUsCbaA+VtUtEQKNTumjZi1LA7hZenqRLREBxQ5E= (truncated)
Staten Island9999Freshkills Parkfalse622236745723445247AQMAAAABAAAAIgAAAP+rvqxQjVLAp+2oWuVIREDrtEzPQY1SwKyfw1XqSERA9sF7Rj2NUsDw+usu/0hEQHmtMJtHjVLARvMHDQ9JRECZDjp3UY1SwOduSb8LSURAmy3qFFGNUsC8VxJ1C0lEQGJCHqRQjVLAXAF+CQtJREBL7aw= (truncated)
Staten Island9999Freshkills Parkfalse622236745698312191AQMAAAABAAAABgAAAG08OvjeilLAAk6WhphJREAXiRYn3opSwHp3p6WzSURASdt4DN6KUsCTTEAZt0lEQAdjDkXgilLAksMkW7ZJREC98xLQ5IpSwK4ObYKhSURAbTw6+N6KUsACTpaGmElEQA==
Staten Island9999Freshkills Parkfalse622236746168827903AQMAAAABAAAACwAAAOMHv3ITjVLA+Ai67UVHRECtKa/tEI1SwCGbfYNRR0RASSCIQRuNUsCoXQVhYUdEQFJBCB4qjVLAnW47ZlxHREBBZzVeKo1SwL8+Jj9bR0RAEqjAJyiNUsBQpshPWkdEQGmfbbkjjVLAMafh2ldHRECVqug= (truncated)
Staten Island9999Freshkills Parkfalse622236745679962111AQMAAAABAAAABAAAAFysMkV+jFLAjn+zF9VKRED9fQTvdYxSwKC1NOLXSkRAGOmRNXSMUsBEG0rO30pEQFysMkV+jFLAjn+zF9VKREA=
Staten Island9999Freshkills Parktrue622236745761587199null
Staten Island9999Freshkills Parkfalse622236745743237119AQMAAAABAAAABQAAAHwQ22JDi1LAVrY8G/tMREDWWMFAPYtSwJCpPyj9TERAS5QPEDuLUsB8Dzo1B01EQIhW+cFAi1LAdqb41P5MREB8ENtiQ4tSwFa2PBv7TERA
Staten Island9999Freshkills Parkfalse622236745700311039AQMAAAABAAAABwAAAG/X5WXkilLAVrdHZ6ZIREBjPyg624pSwFetVXipSERARaTUKNuKUsDEqJYAvkhEQN6WNmrbilLAW8AID9BIREA5n/0t6opSwNKdHR/LSERANhnMuO6KUsAT0dxGtkhEQG/X5WXkilLAVrdHZ6ZIREA=
Staten Island9999Freshkills Parkfalse622236745678847999AQMAAAABAAAABgAAAIj8SbvLjFLA/z9h1G1KREDZrW2Qw4xSwFc8lpBwSkRA2jTjBr+MUsA0Ll5qhUpEQBORSCbDjFLAP1mVv4tKREAyXwIQx4xSwCYt7JSHSkRAiPxJu8uMUsD/P2HUbUpEQA==
Staten Island9999Freshkills Parkfalse622236745921167359AQMAAAABAAAAEAAAAKpBmSoxjFLAVBV0KgpIRED1+tsXMIxSwFhnw8cLSERApyPfVi6MUsDCi142D0hEQMWNn+ksjFLAf5uV5RJIREDhGj3pKoxSwHFZtOIWSERACuO+oCiMUsBPdzyYGkhEQP3niRcmjFLAunh29B1IREBiNAs= (truncated)
Staten Island9999Freshkills Parkfalse622236745696083967AQMAAAABAAAABwAAAMyzxCgEjFLA7KJzdS9IREBu3gM3/ItSwO2BqIQySERASSVnIfSLUsB7p8hoN0hEQLXuThv0i1LAX6sObDdIRECckX6C9ItSwBocpQo4SERAsum3XwOMUsCzJPUQM0hEQMyzxCgEjFLA7KJzdS9IREA=
Staten Island9999Freshkills Parkfalse622236745692413951AQMAAAABAAAACgAAADDKLXbmilLAKU0UcB5IRECm7lIW3YpSwAIPmpIhSERAH2+7+9yKUsCZ6njbK0hEQOuxW87cilLApw88aD1IREAE2tXF3IpSwEW4R5dASERAKCJytNyKUsDzfBsXR0hEQEMTtWDdilLAw4z7H0hIREA0Zyc= (truncated)
Staten Island9999Freshkills Parkfalse622236745763586047AQMAAAABAAAABwAAACTefjTeilLAaUjOVz5KREBedQAm14pSwAbCx7NASkRA1oz9atSKUsA23nP2ZkpEQCWaJR7VilLAnnrlCWhKRECJLfH844pSwGA6JBFjSkRAId0TiOiKUsC8dRE4TkpEQCTefjTeilLAaUjOVz5KREA=
Staten Island9999Freshkills Parkfalse622236745913270271AQMAAAABAAAADgAAADTlw9XijFLANH0WDShHRECJpqD54YxSwC4EOU4oR0RAlFrR4d+MUsAMQHYZKUdEQEjurdHdjFLAvhj/DipHREALh6TK24xSwD4NLC4rR0RA2usdztmMUsBZZjV2LEdEQJ+QvQ7XjFLAZJ+IVy9HREC48dQ= (truncated)
Staten Island9999Freshkills Parkfalse622236745699196927AQMAAAABAAAABQAAALrsGn7bilLAuFfbgQJKRECdmFAc24pSwJ6EgfYJSkRA/2kpzNqKUsC/hKG4DkpEQMxPPffcilLAXBuwxQRKREC67Bp+24pSwLhX24ECSkRA
Staten Island9999Freshkills Parkfalse622236745695526911AQMAAAABAAAABQAAAIRo44zDi1LALs7IBFtIRECnGKKbwYtSwLNuDmBcSERA5S3Pf8GLUsACxJtwXEhEQMdPtWDDi1LAoZytz1tIRECEaOOMw4tSwC7OyARbSERA
Staten Island9999Freshkills Parkfalse622236745680846847AQMAAAABAAAABwAAABMxZEWvi1LAlzqABe9LRECXScBloItSwJGTPP/zS0RA07Ds2puLUsD7ymnZCExEQOJR4Lugi1LA94a4WBBMREAQZNodo4tSwNinvkcLTERA+pIzCrGLUsBy1VS98UtEQBMxZEWvi1LAlzqABe9LREA=
Staten Island9999Freshkills Parkfalse622236745769811967AQMAAAABAAAABwAAAFbvBmOrilLANo0bQ+VLREDGnT2DnIpSwC5PyjvqS0RA56Ztm5iKUsBVd9Ul/EtEQG61ciKmilLAQ0i3mv9LREBlQC3NsYpSwDKctRgHTERAhdExt7WKUsB9tTEk9UtEQFbvBmOrilLANo0bQ+VLREA=
Staten Island9999Freshkills Parkfalse622236746168598527AQYAAAACAAAAAQMAAAABAAAABAAAAMYbEV82jVLAcHR5nmtHREBkv/dxNI1SwJdctkNsR0RA1WQIwjONUsCPAKtsb0dEQMYbEV82jVLAcHR5nmtHREABAwAAAAEAAAAHAAAAJsRYLUiNUsDiJhvEbkdEQPRca30xjVLAU6dZ2nk= (truncated)
Staten Island9999Freshkills Parkfalse622236745750904831AQMAAAABAAAABgAAAPBjVKnZilLAqUM/HgtNREAm6djIyopSwNdDPBcQTURAIwV0kcmKUsC1/KqrFU1EQPpPG/vQilLAY0o+SxdNREBfton844pSwGCcPf0aTURA8GNUqdmKUsCpQz8eC01EQA==
Staten Island9999Freshkills Parkfalse622236746168041471AQMAAAABAAAAKQAAALlJtLqljVLATwxtDEFHRECyy2pnnY1SwOz08x1FR0RA5nEUeZyNUsB6mDtmSUdEQEx0E7ihjVLA5SbidFFHREDc8I68oY1SwC+Lt25RR0RAZ42B8qGNUsBV3b8dUUdEQBLr4S6ijVLAvRVN0VBHRED9au0= (truncated)
Staten Island9999Freshkills Parkfalse622236745729441791AQMAAAABAAAARQAAAMbjowCJjVLAr6r2jrBHREBxmc3PhY1SwJ8fwaCxR0RAtk50R4GNUsC4HF55xkdEQILDmUyGjVLADwMzL85HREBCxyVMho1SwFOq+gvOR0RAB4btRoaNUsBkrEybzUdEQEuJ9T2GjVLAxewqK81HREBtW0M= (truncated)
Staten Island9999Freshkills Parkfalse622236745725771775AQMAAAABAAAACgAAAFJBCB4qjVLAnW47ZlxHREBJIIhBG41SwKhdBWFhR0RAFkXhuBaNUsCFCVQ5dkdEQGpvzgwhjVLALRXnFoZHREDEyGTpL41SwD5XExyBR0RA9FxrfTGNUsBTp1naeUdEQGAQxh8qjVLA7wfWc31HREDVZAg= (truncated)
Staten Island9999Freshkills Parkfalse622236745921495039AQMAAAABAAAADgAAAFlfhFdzjFLA98u/xeRHREBmDkG8a4xSwLzO+y/yR0RAwYsfP2iMUsD/Vnzg9kdEQG5Dez5ojFLAohZT4fZHREAf+9Y9aIxSwOI2EuL2R0RAqA5AnWSMUsC/VRtS+0dEQBSyNJxkjFLAIAxmU/tHREAbjiw= (truncated)
Staten Island9999Freshkills Parkfalse622236745692741631AQMAAAABAAAABQAAAAHypEjeilLAPfK0NdpHREDE33S73YpSwKCHSLX6R0RAHFNGruCKUsCZ1964+UdEQEKn9DjlilLAkjkO4eRHREAB8qRI3opSwD3ytDXaR0RA
Staten Island9999Freshkills Parkfalse622236745681731583AQMAAAABAAAABgAAAFXVc7nji1LAGgVez3xLREAv+yDa1ItSwLy4RMmBS0RAcUORT9CLUsD7okijlktEQKNTumjZi1LA7hZenqRLREBSUzwm6ItSwHmMAJyDS0RAVdVzueOLUsAaBV7PfEtEQA==
Staten Island9999Freshkills Parkfalse622236745673834495AQMAAAABAAAABAAAAOKa9+v6i1LAfkZ+mlFLREBOQabR94tSwMz8LtpfS0RA7geSw/yLUsAOyQGVU0tEQOKa9+v6i1LAfkZ+mlFLREA=
Staten Island9999Freshkills Parkfalse622236745673277439AQMAAAABAAAACgAAACvMfWZSjFLAqBazHb1KRECTx7aHQ4xSwGY8+BfCSkRAu76s/T6MUsAVk77x1kpEQPSifVJJjFLAABdO0eZKREC00c5LToxSwJBIEyflSkRAPBFL/U6MUsCHseZv3kpEQERbKEZRjFLAIPviJ+RKREBn51o= (truncated)
Staten Island9999Freshkills Parkfalse622236745672720383AQMAAAABAAAADAAAAMb1C2ESjFLAwV4t4OVKRECjZyCCA4xSwL2bNNrqSkRAoZXW9/6LUsBUIPqz/0pEQPs5jEwJjFLAu7vGkw9LREBzbpq/DoxSwJzt5sANS0RAx10I9RGMUsDA5h+HBUtEQOl6uNAUjFLAw0fzPAJLREARTko= (truncated)
Staten Island9999Freshkills Parkfalse622236745758015487AQMAAAABAAAABAAAACGkevmMilLAdpNQ/7JLREB+k+jbiopSwE9M1CO2S0RAW+DbZoyKUsA0AtaftUtEQCGkevmMilLAdpNQ/7JLREA=
Staten Island9999Freshkills Parkfalse622236745736552447AQMAAAABAAAAEwAAABCG53ESjVLA7uNx0EJKREBIKI6TA41SwD21cMtHSkRAz+HDFwONUsAsgW4ESkpEQNhqxDYDjVLAFwaoE0pKRECpDesZBI1SwP/FAJ1KSkRANEitAgWNUsA42e4tS0pEQIxZd6UFjVLAmzLynUtKREB/wbU= (truncated)
Staten Island9999Freshkills Parkfalse622236745743335423AQMAAAABAAAABAAAABTMGT1Vi1LAduFtzeFMRED8IWWsUItSwNkwQFTjTERA10BbHU+LUsAOw4d76kxEQBTMGT1Vi1LAduFtzeFMREA=
Staten Island9999Freshkills Parkfalse622236745742778367AQMAAAABAAAABwAAAMjQ938fi1LAVs71GgdNREDnlYqfEItSwHeVOhQMTURAGkUDFAyLUsApzsfuIE1EQFUP5A0Si1LARKI1HipNRECq0/X0KItSwD2kBAAbTURAmwD01CmLUsC0djT8Fk1EQMjQ938fi1LAVs71GgdNREA=
Staten Island9999Freshkills Parkfalse622236745682059263AQMAAAABAAAACAAAAEoLgQV1i1LAgfkcgTxMREB+WKIlZotSwFEopXpBTERAh+WMmmGLUsDtleZUVkxEQJQOau9ri1LABCuuNWZMREAXVfyqeotSwIh9R0hhTERAFEPU6XqLUsBTWqrCYExEQOmOYFp/i1LAJG7MYUxMREBKC4E= (truncated)
Staten Island9999Freshkills Parkfalse622236745692512255AQMAAAABAAAABwAAAALwKmvcilLAqbNYemJIREB2vJ853IpSwNmdr/50SERAWHcvAdyKUsBCN9QYgkhEQPOY8f7bilLAza/rj4JIREBeNuCd3opSwCw1kq+BSERAdJmqKOOKUsAqlHvXbEhEQALwKmvcilLAqbNYemJIREA=
Staten Island9999Freshkills Parkfalse622236745724428287AQMAAAABAAAABgAAAMZSGE5PjVLAaJpCITNJREB82CZnTY1SwMijbMQzSURAvNxR3kiNUsCgK7+dSElEQAxHbZdMjVLAZRebVU5JRECrqaUtTY1SwHvM1khLSURAxlIYTk+NUsBomkIhM0lEQA==
Staten Island9999Freshkills Parktrue622236745742221311null
Staten Island9999Freshkills Parkfalse622236745699295231AQMAAAABAAAACQAAAAGEYg3milLAh7X6E9tJREAZaS/H3IpSwBcHzi3eSURAuf/rg9yKUsBGXMgC6klEQPc6uO3bilLAfz1k//lJREC67Bp+24pSwLhX24ECSkRAzE8999yKUsBcG7DFBEpEQJjNyNXrilLAKAnxzP9JRECWddE= (truncated)
Staten Island9999Freshkills Parkfalse622236745680945151AQMAAAABAAAABQAAAFz96SLAi1LAv6fuC9ZLRED31iHQs4tSwLjAWSvaS0RAEzFkRa+LUsCXOoAF70tEQPqSMwqxi1LAc9VUvfFLREBc/ekiwItSwL+n7gvWS0RA
Staten Island9999Freshkills Parkfalse622236745691398143AQMAAAABAAAACAAAADbyXZAbi1LAUHp6WvlHREDU1qaYF4tSwDAqN676R0RAwUQgDhOLUsCGcySGD0hEQHg05WAdi1LAAJhaZR9IREAcETM+LItSwNxVi2waSERAqih46S+LUsBl9gOVCUhEQIlyqGAmi1LAkGwjOwJIREA28l0= (truncated)
Staten Island9999Freshkills Parkfalse622236745723314175AQMAAAABAAAAKwAAADKN8ttfjVLAUJjk78xIREBPs3k1VY1SwNZZh4HQSERA/6u+rFCNUsCn7aha5UhEQKQUpW5ZjVLAaqP9zfJIREAdsel8WY1SwFHP2pzySERAloK+AlqNUsC/MdhB8UhEQOsjZ41ajVLArDxZTPBIREBNQOs= (truncated)
Staten Island9999Freshkills Parkfalse622236745698181119AQMAAAABAAAABwAAAEwaBObtilLAFHgZ0XdJREDPsSLQ34pSwH2V0IZ8SURAbTw6+N6KUsADTpaGmElEQL3zEtDkilLArg5tgqFJREAPXl6u84pSwHArsImcSURAhv9MOfiKUsDgNP+wh0lEQEwaBObtilLAFHgZ0XdJREA=
Staten Island9999Freshkills Parkfalse622236745762013183AQMAAAABAAAACAAAAKlDKdKfilLAYkKWzZtLRECgAEmmm4pSwB7xfzKdS0RAIaR6+YyKUsB2k1D/sktEQFvg22aMilLANALWn7VLREDT9tu6lopSwGiz7YDFS0RAUASPmqWKUsCzuEiIwEtEQGu3KyaqilLA9NOVrqtLRECpQyk= (truncated)
Staten Island9999Freshkills Parkfalse622236745679831039AQMAAAABAAAABQAAAOnPVTaYjFLAmiVQE7lKREBaF51XiYxSwE3/3A2+SkRAf3rCJ4aMUsDRNUqyzEpEQKAIEl2YjFLApnjRTrlKREDpz1U2mIxSwJolUBO5SkRA
Staten Island9999Freshkills Parkfalse622236745729540095AQMAAAABAAAAKQAAALWoYbSCjVLAP1uNpuxHREBfzKk2eI1SwEr4syrwR0RAnZQ4rnONUsCW1mwDBUhEQK/0pQJ+jVLA9zj74BRIREAy0MTTho1SwM+FeewRSERAqDP8z4aNUsCKDkn/D0hEQNO6OsaGjVLA+gFRSQ9IRECKmx8= (truncated)
Staten Island9999Freshkills Parkfalse622236745736323071AQMAAAABAAAAFwAAAIGoyRJGjVLAhghTNnBJREBs9I/MP41SwEsYgFBySURAtAejQzuNUsDufO4ph0lEQFwy2K1AjVLAX3L/eo9JREDjJ6yvQI1SwEDIwS2PSURAKCQp/ECNUsCZuHejjElEQDpT429BjVLA+8AvVItJRECuUCM= (truncated)
Staten Island9999Freshkills Parkfalse622236745921593343AQMAAAABAAAABgAAAE9c1DKEjFLAFRksC8dHREBZX4RXc4xSwPfLv8XkR0RASZJXfnSMUsBAZMeK5kdEQGDnR1uDjFLAFsGbkOFHRECYG4Tkh4xSwO3OR7jMR0RAT1zUMoSMUsAVGSwLx0dEQA==
Staten Island9999Freshkills Parkfalse622236746167582719AQMAAAABAAAABgAAAE02J9mMjVLAjH4gNU1HREDTiTlhcY1SwPV8haFaR0RAFsj/N3qNUsCVSRI1aEdEQHg6dBSJjVLAMJzlOWNHRECjlbOcjY1SwBiZeWFOR0RATTYn2YyNUsCMfiA1TUdEQA==
Staten Island9999Freshkills Parkfalse622236745725313023AQMAAAABAAAACAAAAKmCacK3jFLAJQi4Ym9HREDEmav/s4xSwCv2LqVwR0RAOggkCKeMUsAoi2mciUdEQB+VN+mljFLAHNlvlotHREBgsmCwroxSwKzyKBOZR0RAHUoWjb2MUsDCSskYlEdEQFPAEBbCjFLAbK2JQH9HRECpgmk= (truncated)
Staten Island9999Freshkills Parkfalse622236745921036287AQMAAAABAAAADAAAACj9D6ZEjFLASZNCgQBIRECd6uHiQIxSwKd1+6IASERAsP9vKT2MUsBo2DU7AUhEQN7N6oI5jFLA86gvRgJIREALTGHqNoxSwC+sruUDSERA6dS0bzSMUsCkpNQMBkhEQNFvTSQyjFLASmvOsghIRECqQZk= (truncated)
Staten Island9999Freshkills Parkfalse622236745681829887AQMAAAABAAAABAAAADqjtwbNi1LAQF7MZr5LRECU2Fk6x4tSwFFJbFfAS0RA89LTEsSLUsBCCgbTzktEQDqjtwbNi1LAQF7MZr5LREA=
Staten Island9999Freshkills Parktrue622236745673932799null
Staten Island9999Freshkills Parkfalse622236745698508799AQMAAAABAAAACAAAAOwKhlXiilLAAzlNYC5JRECY1qId4IpSwMenLx4vSURAojQ9VuCKUsCemTlNNElEQCGXDLvgilLAyTTvOEVJREBRTn3L4IpSwJM6VYtVSURAsv67HeiKUsAhJ6MYU0lEQDSJpqjsilLAw1ocQD5JREDsCoY= (truncated)
Staten Island9999Freshkills Parkfalse622236746168467455AQMAAAABAAAABQAAAF3ydb1fjVLAay1OQGNHREAmxFgtSI1SwOMmG8RuR0RAuIiAok2NUsAnYz8md0dEQBjvBX9cjVLAIy0/K3JHREBd8nW9X41SwGstTkBjR0RA
Staten Island9999Freshkills Parkfalse622236745672818687AQMAAAABAAAACAAAAPvMF8oljFLAZv5VDMxKREA31z/rFoxSwIGabgbRSkRAxvULYRKMUsDBXi3g5UpEQFLyw7UcjFLAadrhv/VKREArQQmiJ4xSwFXvABjySkRAsHDnACyMUsCsmrvU7kpEQHAh0h4wjFLAWVry69tKRED7zBc= (truncated)
Staten Island9999Freshkills Parkfalse622236745758113791AQMAAAABAAAADQAAAP+Cb7V5ilLAZdUVkNBLREDS+7j2eIpSwIjMzMfTS0RAcQsE0XiKUsDcdJ9q1EtEQJE1R9x3ilLA4cEU4NlLRED8yekvd4pSwJt2BnPfS0RAbF7jzXaKUsAmLEsW5UtEQF9QvLZ2ilLA0RtOvOpLREBJd6Y= (truncated)
Staten Island9999Freshkills Parkfalse622236745679601663AQMAAAABAAAAIQAAACzMfz75jFLACcGj7DdKRECfEilg6oxSwC5oh+c8SkRA6TTabOmMUsC/y8lFQUpEQEvVcqTpjFLA1/1jR0FKRED+DH1K6oxSwE5D04ZBSkRArUzC/OqMUsAfZjgpQkpEQAgR94vrjFLApwFgu0JKRECaQlU= (truncated)
Staten Island9999Freshkills Parkfalse622236745696837631AQMAAAABAAAACAAAAHpj38Rzi1LAr3/MeDxIREBR46zxaItSwLz28BdASERAfuxfZ2SLUsBWVR7wVEhEQKGzfLpui1LAClk5z2RIREBoy+iXfYtSwIHgDtZfSERArN8hIoKLUsCHLdP9SkhEQIvvORt9i1LAUjWXQ0NIREB6Y98= (truncated)
Staten Island9999Freshkills Parkfalse622236745742876671AQMAAAABAAAACAAAALVpaxXtilLAe1PASvFMREDZhwM13opSwAy7zkP2TERA8GNUqdmKUsCpQz8eC01EQF+2ifzjilLAYJw9/RpNREClgCsC5IpSwAfxVf4aTURAATOf3vKKUsDajJcGFk1EQH9tOmr3ilLADqwYLAFNREC1aWs= (truncated)
Staten Island9999Freshkills Parkfalse622236745735536639AQMAAAABAAAACQAAAFVerKgtjVLA+GJxtsVJREAQrqbKHo1SwBhKf7HKSURAPuKLQRqNUsB0UBCL30lEQEqvipYkjVLAmr+hae9JREBpnKZ0M41SwOsIim7qSURAxGj8tjeNUsBl9+jZ1klEQBupNLw3jVLAlaqSz9VJREBS+/w= (truncated)
Staten Island9999Freshkills Parkfalse622236745763782655AQMAAAABAAAABQAAAGNgliHLilLAj5WO2+NKREDBzi5tyIpSwG9it+oGS0RAu1bxgc6KUsCuVUziBEtEQKIMRg3TilLAKNzsCPBKREBjYJYhy4pSwI+VjtvjSkRA
Staten Island9999Freshkills Parkfalse622236745742319615AQMAAAABAAAACAAAAI8a3MJZi1LAZMc/n7lMREB5rKniSotSwMfAuJi+TERARTtkV0aLUsAXyjFz00xEQPwhZaxQi1LA2TBAVONMREAUzBk9VYtSwHbhbc3hTERAhFTWEWOLUsBEdtUyzkxEQE1c3xdki1LAZg02gMlMRECPGtw= (truncated)
Staten Island9999Freshkills Parkfalse622236745699393535AQMAAAABAAAABgAAABZXx+bZilLAXJ/C5BtKREDY2MHI2IpSwGK2GsgpSkRAXnUAJteKUsAGwsezQEpEQCTefjTeilLAaUjOVz5KRED0gZ+/4opSwAiY0H4pSkRAFlfH5tmKUsBcn8LkG0pEQA==
Staten Island9999Freshkills Parkfalse622236745695723519AQMAAAABAAAACwAAAMdPtWDDi1LAoZytz1tIREDlLc9/wYtSwALEm3BcSERA8V9t4LyLUsCXZJYwX0hEQLhP40u5i1LA8J8uq2BIREAdbySWtYtSwIHEuqdhSERAkOASSrSLUsC60xrQYUhEQGgqRvmvi1LAXRV4oXVIREBplqY= (truncated)
Staten Island9999Freshkills Parkfalse622236745770565631AQMAAAABAAAABgAAAL+M8Qu7ilLABVI6N8BMRED3i+BMuopSwKqQ99/HTERAau9xW7iKUsDrU7c/3ExEQAYORKu6ilLA97vqedtMREBuDgU3v4pSwIGdnZ/GTERAv4zxC7uKUsAFUjo3wExEQA==
Staten Island9999Freshkills Parkfalse622236745692053503AQMAAAABAAAACAAAALI/Y7tIi1LAUxWdKxZIRECMFF9uRYtSwABFylIlSERABR1RwU+LUsAry+YxNUhEQJlOpJ5ei1LAYUDhODBIREBFjZ+WX4tSwIAsZcYrSERATCsLel2LUsDt3mQjKUhEQF2Yfk9Ni1LAbw26ShhIRECyP2M= (truncated)
Staten Island9999Freshkills Parktrue622236745691496447null
Staten Island9999Freshkills Parkfalse622236745762668543AQMAAAABAAAADQAAAMnMvqDSilLAgrRmC4BKREBM92Bw0opSwNJWGbGCSkRApebsSdKKUsAXBA/MhEpEQABiZi3SilLAPll8WYZKRECduvzL0YpSwMTZ76eLSkRA5LxJsNGKUsAQ+JMpjUpEQAzII43RilLAL38yF49KREAmVOM= (truncated)
Staten Island9999Freshkills Parkfalse622236745698279423AQMAAAABAAAACAAAAAdjDkXgilLAksMkW7ZJREBJ23gM3opSwJNMQBm3SURAKLotRd2KUsBYv2fx0ElEQHze3N7cilLA+ZyQA9pJREAZaS/H3IpSwBcHzi3eSURAAYRiDeaKUsCHtfoT20lEQGEgaZjqilLA2ustO8ZJREAHYw4= (truncated)
Staten Island9999Freshkills Parkfalse622236745769451519AQMAAAABAAAABQAAAOaTaHXEilLAzKLeUl9MRECiHMIJwopSwI4IEFl4TERAnkmchcKKUsDQhaoveExEQNM7QxHHilLAvESOVWNMREDmk2h1xIpSwMyi3lJfTERA
Staten Island9999Freshkills Parkfalse622236745736421375AQMAAAABAAAAKgAAAPYNYtkljVLAoMGf+yhKRED1SRz7Fo1SwK7tr/YtSkRAEIbncRKNUsDu43HQQkpEQMJl/UgVjVLAWxMyLUdKREBindMnF41SwDO4waRGSkRAAF87kheNUsBzHJ6iRkpEQKRTDvsXjVLAkmamhkZKREBYXJ4= (truncated)
Staten Island9999Freshkills Parktrue622236745921691647null
Staten Island9999Freshkills Parkfalse622236745681928191AQMAAAABAAAACQAAAE+kS3CIi1LAkbVIrSJMRECXioCQeYtSwDdI4qYnTERASguBBXWLUsCB+RyBPExEQOmOYFp/i1LAJG7MYUxMREAgk2Z1hYtSwMLhAVdKTERAEo+1M4qLUsBorzhBQExEQBOkhXCRi1LA14/F3TBMREAqAHo= (truncated)
Staten Island9999Freshkills Parktrue622236745696051199null
Staten Island9999Freshkills Parkfalse622236745692381183AQMAAAABAAAACAAAADRnJz7silLALShqJ0NIREBDE7Vg3YpSwMOM+x9ISERAKxvcqNyKUsClj6hrS0hEQALwKmvcilLAqLNYemJIREB0maoo44pSwCqUe9dsSERAeyozBvKKUsBHaODeZ0hEQJGg55D2ilLAR4fQBlNIREA0Zyc= (truncated)
Staten Island9999Freshkills Parkfalse622236745763553279AQMAAAABAAAACQAAAIkt8fzjilLAYDokEWNKREAlmiUe1YpSwJ565QloSkRA9Y6J9tOKUsAS1TZWbUpEQOeGhijTilLAx5TjnHhKREDJzL6g0opSwIK0ZguASkRAydGT5tqKUsDclGXDjEpEQFSmdcXpilLA34yayodKRECnYZo= (truncated)
Staten Island9999Freshkills Parkfalse622236746169122815AQMAAAABAAAAHwAAAHg6dBSJjVLAMJzlOWNHREAWyP83eo1SwJVJEjVoR0RATISqr3WNUsAIF4UNfUdEQDCY3QOAjVLAz4TZ6oxHREBvQmjgjo1SwDoHo++HR0RAzcxrl4+NUsAGAuGlhEdEQKUCd7+PjVLA2zRwoINHREALQHY= (truncated)
Staten Island9999Freshkills Parkfalse622236745680257023AQMAAAABAAAACAAAAMv1sAJ/jFLAcpOKLq5KREBk4/ojcIxSwBpC/CizSkRAH7MammuMUsD+KcoCyEpEQP19BO91jFLAoLU04tdKREBbrDJFfoxSwI5/sxfVSkRAf3rCJ4aMUsDRNUqyzEpEQFoXnVeJjFLATf/cDb5KREDL9bA= (truncated)
Staten Island9999Freshkills Parkfalse622236745672916991AQMAAAABAAAACAAAAHNumr8OjFLAnO3mwA1LRED7OYxMCYxSwLu7xpMPS0RAaicA9gaMUsAFuptQGktEQDmF8sQHjFLAJ/EeZRlLRECgGY+oCYxSwPpCVQAXS0RATQaFdguMUsAxYeF1FEtEQNcrki0NjFLAOGqIxxFLREBzbpo= (truncated)
Staten Island9999Freshkills Parkfalse622236745690710015AQMAAAABAAAABQAAACb5OGLcilLAURRXke1IREDfA6Iq3YpSwAHiVIL9SERAjlqPpN2KUsD/cP+mBElEQAWySBjhilLAZwy7z/RIREAm+Thi3IpSwFEUV5HtSERA
Staten Island9999Freshkills Parkfalse622236745761882111AQMAAAABAAAACgAAALIdTT2zilLA7ddL+4FLREDRx5ceqYpSwBqAPl2FS0RAlwJC5qiKUsDU7QnLhUtEQCcu9q2iilLAtVg/M5FLREAdq0/NoYpSwCvYN7eSS0RAqUMp0p+KUsBiQpbNm0tEQGu3KyaqilLA9NOVrqtLRECiLss= (truncated)
Staten Island9999Freshkills Parkfalse622236745750872063AQMAAAABAAAABgAAAAYORKu6ilLA97vqedtMREBq73FbuIpSwOtTtz/cTERAQv5NjLSKUsDKYGcwBE1EQFzYInTAilLAKfO+NQBNREBr5eX/xIpSwATDXFvrTERABg5Eq7qKUsD3u+p520xEQA==
Brooklyn133133Kensingtontrue622236751937470463null
Brooklyn133133Kensingtontrue622236751857385471null
Brooklyn133133Kensingtontrue622236751873212415null
Brooklyn133133Kensingtontrue622236751936913407null
Brooklyn133133Kensingtontrue622236751933079551null
Brooklyn133133Kensingtontrue622236751873376255null
Brooklyn133133Kensingtontrue622236751937077247null
Brooklyn133133Kensingtontrue622236751872098303null
Brooklyn133133Kensingtontrue622236751872819199null
Brooklyn133133Kensingtontrue622236751937241087null
Brooklyn133133Kensingtontrue622236751936684031null
Brooklyn133133Kensingtontrue622236751871705087null
Brooklyn133133Kensingtontrue622236751938125823null
Brooklyn133133Kensingtontrue622236751873146879null
Brooklyn133133Kensingtontrue622236751937568767null
Brooklyn133133Kensingtontrue622236751872589823null
Brooklyn133133Kensingtontrue622236751933014015null
Brooklyn133133Kensingtontrue622236751873310719null
Brooklyn133133Kensingtontrue622236751937011711null
Brooklyn133133Kensingtontrue622236751872032767null
Brooklyn133133Kensingtontrue622236751872753663null
Brooklyn133133Kensingtontrue622236751933177855null
Brooklyn133133Kensingtontrue622236751937175551null
Brooklyn133133Kensingtontrue622236751933341695null
Brooklyn133133Kensingtontrue622236751871639551null
Brooklyn133133Kensingtontrue622236751937339391null
Brooklyn133133Kensingtontrue622236751938060287null
Brooklyn133133Kensingtontrue622236751873081343null
Brooklyn133133Kensingtontrue622236751871803391null
Brooklyn133133Kensingtontrue622236751873245183null
Brooklyn133133Kensingtontrue622236751936946175null
Brooklyn133133Kensingtontrue622236751871967231null
Brooklyn133133Kensingtontrue622236751872688127null
Brooklyn133133Kensingtontrue622236751873409023null
Brooklyn133133Kensingtontrue622236751937110015null
Brooklyn133133Kensingtontrue622236751872851967null
Brooklyn133133Kensingtontrue622236751937273855null
Brooklyn133133Kensingtontrue622236751872294911null
Brooklyn133133Kensingtontrue622236751937994751null
Brooklyn133133Kensingtontrue622236751873015807null
Brooklyn133133Kensingtontrue622236751936716799null
Brooklyn133133Kensingtontrue622236751937437695null
Brooklyn133133Kensingtontrue622236751871901695null
Brooklyn133133Kensingtontrue622236751937601535null
Brooklyn133133Kensingtontrue622236751933046783null
Brooklyn133133Kensingtontrue622236751938322431null
Brooklyn133133Kensingtontrue622236751873343487null
Brooklyn133133Kensingtontrue622236751937044479null
Brooklyn133133Kensingtontrue622236751872786431null
Brooklyn133133Kensingtontrue622236751937208319null
Brooklyn133133Kensingtontrue622236751871672319null
Brooklyn133133Kensingtontrue622236751937372159null
Brooklyn133133Kensingtontrue622236751936815103null
Brooklyn133133Kensingtontrue622236751871836159null
Brooklyn133133Kensingtontrue622236751872557055null
Brooklyn133133Kensingtontrue622236751932981247null
Brooklyn133133Kensingtontrue622236751938256895null
Brooklyn133133Kensingtontrue622236751873277951null
Brooklyn133133Kensingtontrue622236751936978943null
Brooklyn133133Kensingtontrue622236751872720895null
Brooklyn133133Kensingtontrue622236751872884735null
Brooklyn133133Kensingtontrue622236751933308927null
Brooklyn133133Kensingtontrue622236751937306623null
Brooklyn133133Kensingtontrue622236751857221631null
Brooklyn133133Kensingtontrue622236751873048575null
Brooklyn133133Kensingtontrue622236751936749567null
Brooklyn133133Kensingtontrue622236751871770623null
Brooklyn133133Kensingtonfalse622236751617425407AQMAAAABAAAABwAAAFuk1FT4fVLAaMHh5nxRRECVVYdY9H1SwD3Fi8d9UURADxBsX/d9UsBOjuzxklFEQAULzkP5fVLAuN//AaBRRECTVndQ/H1SwNAtCQCfUURAb3JF6AB+UsBq1q8nilFEQFuk1FT4fVLAaMHh5nxRREA=
Brooklyn133133Kensingtonfalse622236751877046271AQMAAAABAAAABwAAAEGj2xvoflLAoddU7BdSRECDgRJf4H5SwCrlDPAdUkRAYSTMy9l+UsBwJFt5I1JEQO2jvNjTflLA02SqbChSREDWWrny1X5SwGVRuqsrUkRAHANr2OR+UsBt5Ja+JlJEQEGj2xvoflLAoddU7BdSREA=
Brooklyn133133Kensingtonfalse622236751872458751AQMAAAABAAAABwAAANEgXKx6flLAQcX68e1QREAZnLrUdX5SwEXm0YvvUERAs7lwPXF+UsCcDwRkBFFEQCyjM4t7flLAtKykTxRRREA4YGM/fn5SwLNpy2oTUURAhY2b4n1+UsA3GTSeD1FEQNEgXKx6flLAQcX68e1QREA=
Brooklyn133133Kensingtontrue622236751871999999null
Brooklyn133133Kensingtonfalse622236751933276159AQMAAAABAAAABgAAAJNWd1D8fVLA0C0JAJ9RREAFC85D+X1SwLjf/wGgUURAky60m/59UsDJ767lxFFEQA27WgYCflLAhN+oxMNRREDdCiueBn5SwAyAOuyuUURAk1Z3UPx9UsDQLQkAn1FEQA==
Brooklyn133133Kensingtonfalse622236751876882431AQMAAAABAAAACAAAAAyzeGDpflLAYhwA8BZSREBBo9sb6H5SwKHXVOwXUkRAHANr2OR+UsBt5Ja+JlJEQFBI/ybvflLAlUNhqjZSREC0zLMM/n5SwFigIr0xUkRALIZ1i/5+UsAfvWh9L1JEQLRsbafuflLAqiI0+RtSREAMs3g= (truncated)
Brooklyn133133Kensingtonfalse622236751938158591AQMAAAABAAAABgAAAPOiYf1QflLAByZ+nZFSRECuJFQXQn5SwDEvE4qWUkRA3uhx7D5+UsBjMLvqpFJEQNvH5kpHflLAoYs4I55SREDgVFj3Un5SwHEgOquUUkRA86Jh/VB+UsAHJn6dkVJEQA==
Brooklyn133133Kensingtonfalse622236751875506175AQMAAAABAAAACAAAAH/eC4drflLAF7Q8oN9QREB2wvSuYH5SwIGh+jXjUERAkiKR8Vt+UsDtGiWu51BEQAgOuApYflLAfDblZPlQREBvQ2RYYn5SwKmGklAJUURAs7lwPXF+UsCcDwRkBFFEQBmcutR1flLARebRi+9QREB/3gs= (truncated)
Brooklyn133133Kensingtonfalse622236751936782335AQMAAAABAAAACQAAACzUaK99flLAJ2tl14JSREDP+mvJbn5SwO5DJ8SHUkRAbjHMMWp+UsCSTSqdnFJEQBH63i9uflLAX9E8yKJSREAE7b91dX5SwNFT2jGhUkRAA4jWq4R+UsBX1BnYnVJEQML7W5iFflLAOCL0pJ1SREB7Rdw= (truncated)
Brooklyn133133Kensingtonfalse622236751857319935AQMAAAABAAAABgAAAIIjIicff1LA7++ImFdSREDtoN/4HH9SwI1HWoBhUkRAIoC1Ryd/UsDInhZscVJEQHrUUoUxf1LA1/bvCG5SREBqbveYJn9SwM4+8qFgUkRAgiMiJx9/UsDv74iYV1JEQA==
Brooklyn133133Kensingtonfalse622236751933112319AQMAAAABAAAACAAAANq8cCgTflLAyqZKEzJSRECf3uGPDn5SwDhJFpgzUkRAdwxdVg9+UsBaq8O4OFJEQHrwDZcSflLA1fkX0U5SREBdN7n3E35SwB2yGndYUkRAUgWc3hh+UsBXI2zYVlJEQIwkdXYdflLA4aSp/0FSREDavHA= (truncated)
Brooklyn133133Kensingtonfalse622236751937535999AQMAAAABAAAABwAAAGXD31O5flLAxhigJftRREB2j2sHt35SwFTBM+j7UURAJSUmcLJ+UsC2pQfBEFJEQFD/jL68flLANHLrrCBSREBwl37cvH5SwMO9BKMgUkRATYF/ibl+UsAGpXM0/VFEQGXD31O5flLAxhigJftRREA=
Brooklyn133133Kensingtontrue622236751877013503null
Brooklyn133133Kensingtonfalse622236751938289663AQMAAAABAAAABwAAAH87dgTPflLA3aFLmshSREC9aFoewH5SwG2/aIfNUkRAAUFvPb1+UsATCp2Z2lJEQHJVohfOflLAbw1c2dZSREDBgg/m1X5SwLyEbhXVUkRAiBumsNZ+UsAgQ1l01FJEQH87dgTPflLA3aFLmshSREA=
Brooklyn133133Kensingtonfalse622236751858368511AQMAAAABAAAABgAAAGCGxjMPf1LAAyT6C6BSREDi4M5NAH9SwB2oVfmkUkRAcztnW/x+UsBh+V3mtlJEQMbBKOUOf1LA6EEXhqhSREBc+TC8En9SwBuE4IClUkRAYIbGMw9/UsADJPoLoFJEQA==
Brooklyn133133Kensingtonfalse622236751872425983AQMAAAABAAAACAAAADhgYz9+flLAs2nLahNRREAsozOLe35SwLSspE8UUURAT47n83Z+UsDh3usnKVFEQO+jvkGBflLAneaXEzlRREBzq4fSgX5SwP17ueM4UURAxlGhNoF+UsDFpImBMlFEQN9+Qs5/flLAsfwLwCNRREA4YGM= (truncated)
Brooklyn133133Kensingtonfalse622236751933243391AQMAAAABAAAACQAAAA27WgYCflLAhN+oxMNRRECTLrSb/n1SwMnvruXEUURAHMxUi/99UsCnHwVcy1FEQCnT7qsAflLAFwFvI9NRREAct22yAn5SwGnKB5DjUURACQfUowN+UsC3++Dj6VFEQAoYULwHflLAgARpiehRREDDmyI= (truncated)
Brooklyn133133Kensingtonfalse622236751877308415AQMAAAABAAAABwAAANA9HiyyflLAKsS9MrBRREDto16Zq35SwKGyJV+yUURAhJ0dAqd+UsC+hs83x1FEQMcbXFCxflLAWIGcI9dRRECMc4qvtX5SwBZSjLHVUURADJleB7N+UsDJ0u02uVFEQNA9HiyyflLAKsS9MrBRREA=
Brooklyn133133Kensingtonfalse622236751857287167AQMAAAABAAAACAAAAHrUUoUxf1LA1/bvCG5SREAigLVHJ39SwMieFmxxUkRAEBm7sCJ/UsCFj05FhlJEQM4FhrQqf1LAw2pIppJSREAOYLMgP39SwI/dAZaCUkRAm3Zi0j9/UsDikdVuf1JEQLpltTAzf1LA50pRFXBSREB61FI= (truncated)
Brooklyn133133Kensingtonfalse622236751931244543AQMAAAABAAAABQAAADYY5W4yflLA+hE0C69SREBFdWmZLn5SwM6tkU+wUkRAITioFS5+UsA1gJKlslJEQI2xqw0xflLAhlAUKrBSREA2GOVuMn5SwPoRNAuvUkRA
Brooklyn133133Kensingtontrue622236751937961983null
Brooklyn133133Kensingtonfalse622236751937503231AQMAAAABAAAACgAAAHCXfty8flLAw70EoyBSREBQ/4y+vH5SwDRy66wgUkRAG2NFJ7h+UsCDXtSFNVJEQKdrwHXCflLAmJPDcUVSRECsl4Vb0X5SwEi9sYRAUkRA1lq58tV+UsBlUbqrK1JEQO2jvNjTflLA02SqbChSRED7TwA= (truncated)
Brooklyn133133Kensingtonfalse622236751875309567AQMAAAABAAAABQAAAI/Jx15tflLAtVNtQtdQRED0ZJE1aX5SwF5T4ivbUERAdsL0rmB+UsCBofo141BEQH/eC4drflLAF7Q8oN9QRECPycdebX5SwLVTbULXUERA
Brooklyn133133Kensingtonfalse622236751857876991AQMAAAABAAAABAAAAJt2YtI/f1LA4pHVbn9SREANYLMgP39SwJDdAZaCUkRAUfHMH0F/UsCnG/8DgVJEQJt2YtI/f1LA4pHVbn9SREA=
Brooklyn133133Kensingtonfalse622236751857418239AQMAAAABAAAABgAAABAZu7Aif1LAhY9ORYZSRECM+NbKE39SwFmquzKLUkRAYIbGMw9/UsADJPoLoFJEQFz5MLwSf1LAGoTggKVSREDOBYa0Kn9SwMNqSKaSUkRAEBm7sCJ/UsCFj05FhlJEQA==
Brooklyn133133Kensingtonfalse622236751934128127AQMAAAABAAAABwAAAFIFnN4YflLAVyNs2FZSREBdN7n3E35SwB2yGndYUkRADq4U8BV+UsAv3oBDZlJEQC/lyEIZflLAn0XIX31SRECdR9mUHn5SwKwRrp17UkRAlZq0LCN+UsDHi9bEZlJEQFIFnN4YflLAVyNs2FZSREA=
Brooklyn133133Kensingtonfalse622236751871934463AQMAAAABAAAACwAAADNjLjFHflLA9ZPyS/tQRED5HWuIQn5SwLU1S73/UERAk673Ezx+UsCJ8yHiBVFEQGxUb1k6flLA491zgQdRREBoSLPkN35SwMl0Nc0JUURAYLL4rTN+UsBQSQivDVFEQPPOX70wflLA7G05exBRREBxmx0= (truncated)
Brooklyn133133Kensingtonfalse622236751877275647AQMAAAABAAAACQAAAItziq+1flLAFlKMsdVRREDHG1xQsX5SwFiBnCPXUURAZOMYuax+UsCpXVv861FEQHaPawe3flLAVMEz6PtRREBlw99TuX5SwMYYoCX7UURA45/9brh+UsArw/hc8lFEQPNdute2flLASqcZPuFRREBTxsU= (truncated)
Brooklyn133133Kensingtonfalse622236751938093055AQMAAAABAAAACQAAAC+qEMk3flLA3xGqnYZSREC3CgbjKH5SwDjkI4qLUkRACYQoSyR+UsBmcRBjoFJEQEV1aZkuflLAzq2RT7BSREA2GOVuMn5SwPoRNAuvUkRAVSQkpzZ+UsDuy92dq1JEQN7ocew+flLAYzC76qRSRECuJFQ= (truncated)
Brooklyn133133Kensingtontrue622236751937634303null
Brooklyn133133Kensingtonfalse622236751875440639AQMAAAABAAAABwAAAJIikfFbflLA7BolrudQREDoDGM9W35SwES4C1joUERAz+nU8Eh+UsBaYBih+VBEQDNjLjFHflLA9pPyS/tQREC0da4lSX5SwF56WFH+UERACA64Clh+UsB8NuVk+VBEQJIikfFbflLA7BolrudQREA=
Brooklyn133133Kensingtonfalse622236751857254399AQMAAAABAAAACAAAAOPvGj0Mf1LAIyI1YEBSREBJx15bCH9SwCxI4KhBUkRACrdSxAN/UsBhsvSBVlJEQLjgERMOf1LAu8G9bWZSREDtoN/4HH9SwI1HWoBhUkRAgiMiJx9/UsDv74iYV1JEQBohZ+0Yf1LALNL4CVBSREDj7xo= (truncated)
Brooklyn133133Kensingtonfalse622236751938387967AQMAAAABAAAABgAAAMIN7pqcflLAddQKnLJSREDu5sdWln5SwAzhW660UkRAuy2L6pl+UsAEur0o2lJEQLEbElKiflLAqip2YddSREDiZIzppn5SwKAYQYjCUkRAwg3umpx+UsB11AqcslJEQA==
Brooklyn133133Kensingtonfalse622236751872983039AQMAAAABAAAABgAAAGxjw5QdflLAy2ycskZRREAJHTUFFX5SwNam5YZJUURAJly2lxh+UsDDCRsAb1FEQNj2xUojflLA0GDedmtRRECD/mfiJ35SwCUXkp5WUURAbGPDlB1+UsDLbJyyRlFEQA==
Brooklyn133133Kensingtonfalse622236751872065535AQMAAAABAAAABwAAAPPOX70wflLA7G05exBRRECTTLzTIn5SwPmVk7gdUURALiBBVRp+UsAHwLS8JVFEQJY3YywiflLAkytl2jFRREC70JMRMX5SwLATFe4sUURAcZsdqTV+UsATWuQVGFFEQPPOX70wflLA7G05exBRREA=
Brooklyn133133Kensingtonfalse622236751876947967AQMAAAABAAAACAAAACyGdYv+flLAH71ofS9SREC0zLMM/n5SwFigIr0xUkRAScdeWwh/UsAsSOCoQVJEQOPvGj0Mf1LAIyI1YEBSREASkbjMC39SwL1netU/UkRAb6UCegN/UsBMUi+kNVJEQBeAuNH+flLA6ayz0y9SREAshnU= (truncated)
Brooklyn133133Kensingtonfalse622236751938224127AQMAAAABAAAACQAAAK9apc+1flLApTI/m71SREDiZIzppn5SwKAYQYjCUkRAsRsSUqJ+UsCqKnZh11JEQHGZHYanflLAy/Mza99SREByYXbfqX5SwPFANuzeUkRAGdIcF71+UsDgpCSi2lJEQAFBbz29flLAEwqdmdpSREC9aFo= (truncated)
Brooklyn133133Kensingtonfalse622236751936847871AQMAAAABAAAACAAAAJj82+OWflLA4O2/1o1SREB7Rdz9h35SwJL9nMOSUkRAwvtbmIV+UsA4IvSknVJEQPTpldiTflLAIjoIkJpSREDu5sdWln5SwAzhW660UkRAwg3umpx+UsB11AqcslJEQK4kZjKhflLAuMnqwp1SRECY/Ns= (truncated)
Brooklyn133133Kensingtonfalse622236751858302975AQMAAAABAAAACAAAAEMO/v71flLAFRJpDZVSREC9RAkZ535SwNdeqfqZUkRAA+3OgeJ+UsC/4d/TrlJEQOs4ndDsflLAOpfkv75SREAAuqtD9n5SwMiy65+7UkRAcztnW/x+UsBh+V3mtlJEQOLgzk0Af1LAHahV+aRSREBDDv4= (truncated)
Brooklyn133133Kensingtonfalse622236751934095359AQMAAAABAAAACAAAAJ1H2ZQeflLArBGunXtSREAv5chCGX5SwJ9FyF99UkRAHo2Dqxl+UsAb0CA4gFJEQHuwDmsdflLAyU+QvJlSREB0mRmfHn5SwKi26EKiUkRACYQoSyR+UsBmcRBjoFJEQLcKBuMoflLAOOQjiotSRECdR9k= (truncated)
Brooklyn133133Kensingtonfalse622236751872360447AQMAAAABAAAACAAAAAaMDJquflLAcwfuuIpRRECZJ3PipX5SwItVz5qNUURAM1M0S6F+UsBYIWRzolFEQO2jXpmrflLAobIlX7JRREDQPR4ssn5SwCrEvTKwUURATgz9BLF+UsDnFL0PpFFEQID6xbuvflLAgunWWZdRREAGjAw= (truncated)
Brooklyn133133Kensingtonfalse622236751873114111AQMAAAABAAAABgAAACvdMOoSflLAIaZiHHdRRED7Shf9CX5SwHF8jAN5UURAW6TUVPh9UsBoweHmfFFEQG9yRegAflLAatavJ4pRREAlbLPND35SwKlPeTuFUURAK90w6hJ+UsAhpmIcd1FEQA==
Brooklyn133133Kensingtonfalse622236751872196607AQMAAAABAAAABgAAAIhy58SpflLArzZOHFZRREA/9d3nl35SwGcifcpZUURAs3mJnJZ+UsAMBfARWlFEQHammSugflLAemqZ1mhRRECi9nweq35SwN4W1DdlUURAiHLnxKl+UsCvNk4cVlFEQA==
Brooklyn133133Kensingtonfalse622236751871737855AQMAAAABAAAACgAAAKVccKp8flLAgyH0601RREDlKDfFbX5SwJDUldhSUURALtjSLWl+UsDll/iwZ1FEQC+Su3tzflLAYCjInHdRREALJQthgn5SwCTXHLByUURAtp5b+IZ+UsCpk6vXXVFEQAD4Rr6GflLAmcTufV1RRED2F9A= (truncated)
Brooklyn133133Kensingtonfalse622236751931179007AQMAAAABAAAABwAAAAmEKEskflLAZnEQY6BSREB0mRmfHn5SwKm26EKiUkRAK9x9FyF+UsChkx/Ds1JEQIdU3kIiflLAz6NziLxSREAhOKgVLn5SwDaAkqWyUkRARXVpmS5+UsDOrZFPsFJEQAmEKEskflLAZnEQY6BSREA=
Brooklyn133133Kensingtontrue622236751877079039null
Brooklyn133133Kensingtonfalse622236751938355199AQMAAAABAAAABQAAALEbElKiflLAqip2YddSREC7LYvqmX5SwAS6vSjaUkRAsa5ZrZp+UsCNebch4lJEQHGZHYanflLAy/Mza99SRECxGxJSon5SwKoqdmHXUkRA
Brooklyn133133Kensingtontrue622236751937437695null
Brooklyn133133Kensingtonfalse622236751858434047AQMAAAABAAAACQAAAAPtzoHiflLAv+Hf065SREDbnsab035SwCCXDsGzUkRAfzt2BM9+UsDdoUuayFJEQIgbprDWflLAIENZdNRSRECpvTwo3n5SwGeIZYTOUkRAMLeyrOp+UsCOpsWcxFJEQAZ957LrflLA4zNv0cNSREDrOJ0= (truncated)
Brooklyn133133Kensingtonfalse622236751872950271AQMAAAABAAAACQAAANj2xUojflLA0GDedmtRREAlXLaXGH5SwMQJGwBvUURAeRq/PBl+UsDgx1LDdVFEQCvdMOoSflLAIaZiHHdRREAlbLPND35SwKlPeTuFUURAAappGxp+UsCcg5InlVFEQN+C2gApflLAhshAO5BRRED9vX4= (truncated)
Brooklyn133133Kensingtonfalse622236751616376831AQMAAAABAAAABgAAAC4gQVUaflLAB8C0vCVRREBUdiNUEn5SwAI2hkotUURACR01BRV+UsDWpuWGSVFEQGxjw5QdflLAy2ycskZRRECWN2MsIn5SwJMrZdoxUURALiBBVRp+UsAHwLS8JVFEQA==
Brooklyn133133Kensingtonfalse622236751937732607AQMAAAABAAAABQAAAG4xzDFqflLAkk0qnZxSRECWOp/3Yn5SwL1ktwCfUkRAeOOJkmN+UsCItVYZpVJEQBH63i9uflLAX9E8yKJSREBuMcwxan5SwJJNKp2cUkRA
Brooklyn133133Kensingtonfalse622236751858270207AQMAAAABAAAABAAAAAG6q0P2flLAyLLrn7tSREDrOJ3Q7H5SwDqX5L++UkRABn3nsut+UsDjM2/Rw1JEQAG6q0P2flLAyLLrn7tSREA=
Brooklyn133133Kensingtontrue622236751857352703null
Brooklyn133133Kensingtonfalse622236751872327679AQMAAAABAAAACAAAALN5iZyWflLADAXwEVpRRECwEMFxin5SwD/XnbFcUURAtp5b+IZ+UsCpk6vXXVFEQAslC2GCflLAJNccsHJRREDVkwqvjH5SwHKz35uCUURAHARdlJt+UsDULRmvfVFEQHammSugflLAemqZ1mhRRECzeYk= (truncated)
Brooklyn133133Kensingtonfalse622236751933145087AQMAAAABAAAACAAAAN1tV3INflLAYpxJTg1SREBY0l8hCX5SwMZUbLsOUkRAy7o7ogp+UsAo5urRGFJEQI63eQkMflLA6OQA5SJSRECf3uGPDn5SwDhJFpgzUkRA2rxwKBN+UsDKpkoTMlJEQEioR8AXflLA4C+dOh1SREDdbVc= (truncated)
Brooklyn133133Kensingtonfalse622236751938027519AQMAAAABAAAADQAAAGJAD3tkflLAWfvi13dSREAiRRWVVX5SwFmdicR8UkRA86Jh/VB+UsAHJn6dkVJEQOBUWPdSflLAcSA6q5RSREAwJStPWH5SwDUwwVWQUkRAT4sy9Vx+UsAFeOWCjFJEQM3k3YlgflLADNFTPYlSREAgm+s= (truncated)
Brooklyn133133Kensingtonfalse622236751875375103AQMAAAABAAAABgAAAC7muJd3flLA2IIdps1QRECPycdebX5SwLVTbULXUERAf94Lh2t+UsAXtDyg31BEQBmcutR1flLARebRi+9QREDRIFysen5SwEHF+vHtUERALua4l3d+UsDYgh2mzVBEQA==
Brooklyn133133Kensingtontrue622236751936651263null
Brooklyn133133Kensingtonfalse622236751872622591AQYAAAACAAAAAQMAAAABAAAABQAAAHOrh9KBflLA/Xu54zhRREDvo75BgX5SwJ3mlxM5UURApVxwqnx+UsCDIfTrTVFEQHJxMRGFflLArfH55lpRREBzq4fSgX5SwP17ueM4UURAAQMAAAABAAAABAAAALAQwXGKflLAP9edsVw= (truncated)
Brooklyn133133Kensingtonfalse622236751872163839AQMAAAABAAAACAAAAKL2fB6rflLA3hbUN2VRREB2ppkroH5SwHpqmdZoUURAHARdlJt+UsDULRmvfVFEQJknc+KlflLAi1XPmo1RREAGjAyarn5SwHMH7riKUURApgB+RK5+UsBx7Tz+hlFEQKy81p6sflLATfgyBXZRRECi9nw= (truncated)
Brooklyn133133Kensingtonfalse622236751933439999AQMAAAABAAAABgAAAAoYULwHflLAgARpiehRREAJB9SjA35SwLf74OPpUURAWNJfIQl+UsDGVGy7DlJEQN1tV3INflLAYpxJTg1SREB1JSwKEn5SwCctsXX4UURAChhQvAd+UsCABGmJ6FFEQA==
Manhattan236236Upper East Side Northtrue622236722201296895null
Manhattan236236Upper East Side Northtrue622236722202345471null
Manhattan236236Upper East Side Northtrue622236722201591807null
Manhattan236236Upper East Side Northtrue622236722202116095null
Manhattan236236Upper East Side Northtrue622236722202640383null
Manhattan236236Upper East Side Northtrue622236722210209791null
Manhattan236236Upper East Side Northtrue622236722210504703null
Manhattan236236Upper East Side Northtrue622236722201133055null
Manhattan236236Upper East Side Northtrue622236722202181631null
Manhattan236236Upper East Side Northtrue622236722204803071null
Manhattan236236Upper East Side Northtrue622236722201952255null
Manhattan236236Upper East Side Northtrue622236722210045951null
Manhattan236236Upper East Side Northtrue622236722201493503null
Manhattan236236Upper East Side Northtrue622236722202017791null
Manhattan236236Upper East Side Northtrue622236722202542079null
Manhattan236236Upper East Side Northtrue622236722201264127null
Manhattan236236Upper East Side Northtrue622236722202312703null
Manhattan236236Upper East Side Northtrue622236722210406399null
Manhattan236236Upper East Side Northtrue622236722202083327null
Manhattan236236Upper East Side Northtrue622236722210177023null
Manhattan236236Upper East Side Northtrue622236722201329663null
Manhattan236236Upper East Side Northtrue622236722202378239null
Manhattan236236Upper East Side Northtrue622236722204999679null
Manhattan236236Upper East Side Northtrue622236722210242559null
Manhattan236236Upper East Side Northtrue622236722201395199null
Manhattan236236Upper East Side Northtrue622236722201919487null
Manhattan236236Upper East Side Northtrue622236722202443775null
Manhattan236236Upper East Side Northtrue622236722201165823null
Manhattan236236Upper East Side Northtrue622236722202214399null
Manhattan236236Upper East Side Northtrue622236722210308095null
Manhattan236236Upper East Side Northtrue622236722201460735null
Manhattan236236Upper East Side Northtrue622236722202509311null
Manhattan236236Upper East Side Northtrue622236722210078719null
Manhattan236236Upper East Side Northtrue622236722201231359null
Manhattan236236Upper East Side Northtrue622236722202279935null
Manhattan236236Upper East Side Northtrue622236722210373631null
Manhattan236236Upper East Side Northtrue622236722202050559null
Manhattan236236Upper East Side Northtrue622236722209619967null
Manhattan236236Upper East Side Northtrue622236722210144255null
Manhattan236236Upper East Side Northfalse622236722202476543AQMAAAABAAAACQAAAP+f8/YZfVLA8JO5MJhjREBrKmJ/Fn1SwMBMVVWZY0RASm2uPBZ9UsC69joMmmNEQGVAqBEOfVLA+OxhcbBjRED4yyvzCn1SwOJopQC5Y0RANK6ovhB9UsBSi3bzwWNEQDoh0K8ffVLAqGtmBr1jRECEoOs= (truncated)
Manhattan236236Upper East Side Northfalse622236722214010879AQMAAAABAAAABwAAAFlqf9difVLAzzwixkFkREBAHOl2VH1SwNN+woNGZERA36nY2k99UsC1pIplW2REQCWD/h5WfVLAU/pDEmVkRECsbjoEWX1SwNVJZE9dZERA0QvFUGB9UsB/BPqnSGREQFlqf9difVLAzzwixkFkREA=
Manhattan236236Upper East Side Northfalse622236722201985023AQMAAAABAAAACQAAANVekW+gfVLAgSja2GtjREDskrJ+kX1SwHgIaMZwY0RATIEB44x9UsB2o9enhWNEQGwvQziXfVLAqenHm5VjREC+95UYo31SwIuG/LCRY0RAiigaj6V9UsBy2+XrimNEQHTdfzWqfVLArD06Vn5jREDqm9U= (truncated)
Manhattan236236Upper East Side Northfalse622236722201821183AQMAAAABAAAACQAAACjlj5ySfVLAE3tMfapjREC4+Iarg31SwPA60mqvY0RAmoG9D399UsA7N11MxGNEQBXrEGWJfVLAHf9wQNRjREB2AA0Di31SwMfO57fTY0RAJrmEwo59UsAejzBqyWNEQNrP5mGWfVLAiDRhibRjREDq/a8= (truncated)
Manhattan236236Upper East Side Northfalse622236722210340863AQMAAAABAAAACAAAAIcX9JT4fFLAoKhTo/BjREBuepBj9nxSwG8xYFzxY0RAR2JAke98UsBKfc56BGREQOufj07qfFLADa11mBJkREBW+ktc73xSwBUvVGYaZERAUyuxTf58UsDa9V15FWREQChA++kCfVLA+GvWlwBkRECHF/Q= (truncated)
Manhattan236236Upper East Side Northfalse622236722208505855AQMAAAABAAAABQAAACdLlxO3fVLAIgROBkRjRECtcvf7s31SwNpZ0QlSY0RAPeXACLh9UsDu+mVKWGNEQFteC3C9fVLAJ7n5YkljREAnS5cTt31SwCIETgZEY0RA
Manhattan236236Upper East Side Northfalse622236722215190527AQMAAAABAAAABwAAAFTpiHgufVLAfpVN2rNkREAqu8aGH31SwNOnhce4ZERAgfdTLBt9UsBeyQ5/zGREQFvKzHQrfVLASNILXdpkREBvJaJiM31SwJCKHbjDZERAsniXUzV9UsD28R1wvmREQFTpiHgufVLAfpVN2rNkREA=
Manhattan236236Upper East Side Northfalse622236722204835839AQMAAAABAAAABwAAAAJLPg5UfVLAl601h/BiREBJMmN+TH1SwODmSFIFY0RAWgScR0x9UsCgxivoBWNEQFTqeYBTfVLAJQIDDxFjREBw5SVxYn1SwJAdvyEMY0RAnyHuT2V9UsDXNKAg/2JEQAJLPg5UfVLAl601h/BiREA=
Manhattan236236Upper East Side Northfalse622236722209849343AQMAAAABAAAABAAAAETav5LYfFLAQhrp2EJkREB7C9kv1nxSwIaybmtJZERACXj8Mdd8UsCZ8VoWSWREQETav5LYfFLAQhrp2EJkREA=
Manhattan236236Upper East Side Northfalse622236722209685503AQMAAAABAAAABQAAACp6OozJfFLARtBQBGxkREDWlMXZwXxSwB7BWDWBZERAwPirZcl8UsC8nFuRh2REQGwr9/jNfFLAiQKf2XJkREAqejqMyXxSwEbQUARsZERA
Manhattan236236Upper East Side Northfalse622236722202836991AQMAAAABAAAABQAAAE9FueZqfVLA9HMewStkRECbLlQEaH1SwMQGnbQsZERAqR5kKGR9UsCq4lowPmREQEyO6vBnfVLA+PTb4TNkREBPRbnman1SwPRzHsErZERA
Manhattan236236Upper East Side Northfalse622236722209521663AQMAAAABAAAABwAAALgbmurcfFLAY7LC7G1kREBsK/f4zXxSwIkCn9lyZERAwPirZcl8UsC8nFuRh2REQAbCFAvafFLA9gdymJVkREArz0mj4nxSwF7ASsOSZERAdbbEP+d8UsC3e4zhfWREQLgbmurcfFLAY7LC7G1kREA=
Manhattan236236Upper East Side Northfalse622236722204344319AQMAAAABAAAABgAAAH8U7DY/fVLAgoyPuSljREBSL4srPH1SwI6fmBgyY0RAckTMoDZ9UsDndJVMQWNEQNMa+1c7fVLAWr+Mvj9jREAHzeXzP31SwPG9Xd0qY0RAfxTsNj99UsCCjI+5KWNEQA==
Manhattan236236Upper East Side Northfalse622236722211192831AQMAAAABAAAABwAAAEAcWjEVfVLAES/K0qhkREC51Zo/Bn1SwJ3f5r+tZERAxX7u0QN9UsC/5lq/uGREQO9KLAURfVLAg0OL2cNkRECB91MsG31SwF7JDn/MZERAKrvGhh99UsDTp4XHuGREQEAcWjEVfVLAES/K0qhkREA=
Manhattan236236Upper East Side Northfalse622236722208866303AQMAAAABAAAACAAAANFQu6SQfVLAQaw8nSNjREBJjscLhn1SwOkuCRwnY0RAD+4acIF9UsCw3E79O2NEQPsHNMWLfVLAwnQo8UtjREBAUfy1mn1SwGc0pANHY0RAHv6UUZ99UsCB+08iMmNEQI7ZtUOcfVLAGU4way1jREDRULs= (truncated)
Manhattan236236Upper East Side Northfalse622236722212208639AQMAAAABAAAABgAAAJotUIsefVLASyl2Q4NjREAS8XnSHX1SwBFw1D+FY0RAbCpifxZ9UsDATFVVmWNEQP+f8/YZfVLA8JO5MJhjREBD5QyTHn1SwAjIaE+DY0RAmi1Qix59UsBLKXZDg2NEQA==
Manhattan236236Upper East Side Northfalse622236722201690111AQMAAAABAAAABgAAAL73lRijfVLAi4b8sJFjREBsL0M4l31SwKnpx5uVY0RAKOWPnJJ9UsATe0x9qmNEQOr9r16XfVLAfpfk1bFjRECuKyL6nX1SwIiSAMOfY0RAvveVGKN9UsCLhvywkWNEQA==
Manhattan236236Upper East Side Northtrue622236722201526271null
Manhattan236236Upper East Side Northtrue622236722204868607null
Manhattan236236Upper East Side Northfalse622236722215059455AQMAAAABAAAACAAAAI2CdgZCfVLAQtMZC5pkREDH8scUM31SwM+oY/ieZERAVOmIeC59UsB+lU3as2REQLN4l1M1fVLA9vEdcL5kRECU58fgOn1SwKB4tFWvZERANcvSP0J9UsDxeGQWm2REQC63lWlCfVLARS0kpJpkRECNgnY= (truncated)
Manhattan236236Upper East Side Northfalse622236722201198591AQMAAAABAAAACQAAAJqBvQ9/fVLAOzddTMRjRECM96AecH1SwNY20TnJY0RAVVPBgmt9UsCdnWIb3mNEQFUtEth1fVLAgJCOD+5jREAUtiYGg31SwJmV1rbpY0RALneyEId9UsARqYOR3mNEQIcc9zKHfVLATmJOM95jREAV6xA= (truncated)
Manhattan236236Upper East Side Northfalse622236722209718271AQMAAAABAAAABgAAACvPSaPifFLAXsBKw5JkREAFwhQL2nxSwPYHcpiVZERAAItY/tt8UsDn9Sw9l2REQNGx03TsfFLAideODKVkREDZtIj47HxSwGrhH7iiZERAK89Jo+J8UsBewErDkmREQA==
Manhattan236236Upper East Side Northfalse622236722202869759AQMAAAABAAAACAAAAARQMDxxfVLATe008QJkREBXpOlKYn1SwE3LoN4HZERAaJnxrl19UsAGkk3AHGREQJsuVARofVLAxAadtCxkREBORbnman1SwPRzHsErZERAjTtAWG99UsAipMSNH2REQL9W7q92fVLANpcWXAtkREAEUDA= (truncated)
Manhattan236236Upper East Side Northfalse622236722209554431AQMAAAABAAAACQAAAAl4/DHXfFLAmfFaFklkREB7C9kv1nxSwIaybmtJZERAf3rlbdF8UsDeJd6FVmREQN8oM+rJfFLA2lKYAWtkREAqejqMyXxSwEbQUARsZERAbCv3+M18UsCJAp/ZcmREQLgbmurcfFLAY7LC7G1kREAbyBI= (truncated)
Manhattan236236Upper East Side Northfalse622236722208899071AQMAAAABAAAACAAAAHf3aat8fVLA1DOu0xJjREALvsK2e31SwEjuOigXY0RASY7HC4Z9UsDpLgkcJ2NEQNFQu6SQfVLAQaw8nSNjRED/1eCZin1SwFgpLYQeY0RA0RvY0Yh9UsBE4JcMHWNEQMp4Vw2HfVLAsz0CkRtjREB392k= (truncated)
Manhattan236236Upper East Side Northfalse622236722208735231AQMAAAABAAAABAAAAI7ZtUOcfVLAGU4way1jREAe/pRRn31SwIH7TyIyY0RATr0XJKF9UsAY3G6IMWNEQI7ZtUOcfVLAGU4way1jREA=
Manhattan236236Upper East Side Northfalse622236722201559039AQMAAAABAAAABwAAAKPASJorfVLAMBukbl9jREA80aZkJX1SwEtyJW1wY0RAmi1Qix59UsBKKXZDg2NEQEPlDJMefVLACMhoT4NjREAGOAqELX1SwDOFUGJ+Y0RAaFANIDJ9UsASIwaBaWNEQKPASJorfVLAMBukbl9jREA=
Manhattan236236Upper East Side Northfalse622236722204901375AQMAAAABAAAABwAAAJ8h7k9lfVLA1zSgIP9iREBw5SVxYn1SwJAdvyEMY0RA3twTxmx9UsDvMJoVHGNEQAu+wrZ7fVLASO46KBdjREB392mrfH1SwNQzrtMSY0RAwIlKS259UsBarOm5BmNEQJ8h7k9lfVLA1zSgIP9iREA=
Manhattan236236Upper East Side Northfalse622236722213257215AQMAAAABAAAABQAAAANsRIn7fFLAE3QCQuNjRECNZ9v59nxSwB+kJbfvY0RAbnqQY/Z8UsBvMWBc8WNEQIcX9JT4fFLAoKhTo/BjREADbESJ+3xSwBN0AkLjY0RA
Manhattan236236Upper East Side Northtrue622236722209587199null
Showing the first 1000 rows.
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "markdown", - "source": [ - "This also extends to plotting maps inside the notebook using the kepler.gl visualisation library using a notebook magic `%%mosaic_kepler`." - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "a304589f-36a7-4bef-8cd2-932ddd3acba4" - } - } - }, - { - "cell_type": "code", - "source": [ - "from mosaic import st_aswkt\n(\n mosaic_neighbourhoods\n .select(st_aswkt(col(\"index.wkb\")).alias(\"wkt\"), col(\"index.index_id\").alias(\"h3\"))\n).createOrReplaceTempView(\"kepler_df\")" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "3be96bd5-e14d-40bd-9fc7-00dea16cb096" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "code", - "source": [ - "%%mosaic_kepler\n\"kepler_df\" \"h3\" \"h3\"" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "ffe429bb-de6f-4118-8d7b-6484b6b2d678" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter\n
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter\n
" - ] - } - }, - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "", - "textData": null, - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "htmlSandbox", - "arguments": {} - } - }, - "data": { - "text/html": [ - "" - ] - } - }, - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "Kepler.gl
", - "textData": null, - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "htmlSandbox", - "arguments": {} - } - }, - "data": { - "text/html": [ - "Kepler.gl
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "markdown", - "source": [ - "![mosaic kepler map example](../images/kepler-example.png)" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "4323fa2c-8495-43c6-afb2-9e239e5fb6fc" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "Now the two datasets can be joined first on H3 index, with any false positives removed through a contains filter on a much simpler geometry." - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "11933dab-085c-4503-8ba1-06365caa335c" - } - } - }, - { - "cell_type": "code", - "source": [ - "mosaic_joined_df = (\n trips_with_geom.alias(\"t\")\n .join(mosaic_neighbourhoods.alias(\"n\"), on=expr(\"t.pickup_h3 = n.index.index_id\"), how=\"inner\")\n .where(\n ~col(\"index.is_core\") | \n st_contains(\"index.wkb\", \"pickup_geom\")\n )\n)\n\nmosaic_joined_df.show()" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "98514998-1fe7-4a0c-b4f9-eebf38fb9d81" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+------------------+------------------+---------+-----------+--------+--------------------+-------+------------------+--------------------+\n|vendor_id| pickup_datetime| dropoff_datetime|passenger_count|trip_distance|pickup_longitude|pickup_latitude|rate_code_id|dropoff_longitude|dropoff_latitude|fare_amount|extra|mta_tax|tip_amount|tolls_amount|total_amount| pickup_geom| dropoff_geom| bounds| pickup_h3| dropoff_h3| borough|location_id|objectid| zone|is_core| h3| wkb|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+------------------+------------------+---------+-----------+--------+--------------------+-------+------------------+--------------------+\n| CMT|2009-11-28 13:00:00|2009-11-28 13:01:57| 1| 0.5| -73.999666| 40.733384| null| -73.991751| 40.730273| 3.3| 0.0| 0.5| 0.0| 0.0| 3.8|{1, [[[-73.999666...|{1, [[[-73.991751...|{5, [[[-80.0, 35....|622236723433046015|622236750715092991|Manhattan| 114| 114|Greenwich Village...| false|622236723433046015|[01 03 00 00 00 0...|\n| CMT|2009-11-28 13:00:00|2009-11-28 13:01:57| 1| 0.5| -73.999666| 40.733384| null| -73.991751| 40.730273| 3.3| 0.0| 0.5| 0.0| 0.0| 3.8|{1, [[[-73.999666...|{1, [[[-73.991751...|{5, [[[-80.0, 35....|622236723433046015|622236750715092991|Manhattan| 249| 249| West Village| false|622236723433046015|[01 03 00 00 00 0...|\n| CMT|2009-11-28 13:00:00|2009-11-28 13:01:57| 1| 0.5| -73.999666| 40.733384| null| -73.991751| 40.730273| 3.3| 0.0| 0.5| 0.0| 0.0| 3.8|{1, [[[-73.999666...|{1, [[[-73.991751...|{5, [[[-80.0, 35....|622236723433046015|622236750715092991|Manhattan| 113| 113|Greenwich Village...| false|622236723433046015|[01 03 00 00 00 0...|\n| CMT|2009-11-30 07:49:13|2009-11-30 08:12:38| 1| 12.9| -74.007033| 40.734931| null| -73.87277| 40.774319| 29.7| 0.0| 0.5| 6.04| 0.0| 36.24|{1, [[[-74.007033...|{1, [[[-73.87277,...|{5, [[[-80.0, 35....|622236750719975423|622236724015759359|Manhattan| 249| 249| West Village| false|622236750719975423|[01 03 00 00 00 0...|\n| CMT|2009-11-30 07:49:13|2009-11-30 08:12:38| 1| 12.9| -74.007033| 40.734931| null| -73.87277| 40.774319| 29.7| 0.0| 0.5| 6.04| 0.0| 36.24|{1, [[[-74.007033...|{1, [[[-73.87277,...|{5, [[[-80.0, 35....|622236750719975423|622236724015759359|Manhattan| 158| 158|Meatpacking/West ...| false|622236750719975423|[01 03 00 00 00 0...|\n| VTS|2009-01-03 01:55:00|2009-01-03 02:04:00| 5| 2.09| -73.993217| 40.72416| null| -73.9944| 40.74624| 7.7| 0.5| null| 0.0| 0.0| 8.2|{1, [[[-73.993217...|{1, [[[-73.9944, ...|{5, [[[-80.0, 35....|622236750717878271|622236723431276543|Manhattan| 114| 114|Greenwich Village...| false|622236750717878271|[01 03 00 00 00 0...|\n| VTS|2009-01-03 01:55:00|2009-01-03 02:04:00| 5| 2.09| -73.993217| 40.72416| null| -73.9944| 40.74624| 7.7| 0.5| null| 0.0| 0.0| 8.2|{1, [[[-73.993217...|{1, [[[-73.9944, ...|{5, [[[-80.0, 35....|622236750717878271|622236723431276543|Manhattan| 144| 144| Little Italy/NoLiTa| false|622236750717878271|[01 03 00 00 00 0...|\n| CMT|2009-12-07 10:36:06|2009-12-07 10:42:26| 1| 1.3| -73.99067| 40.73065| null| -73.975539| 40.741353| 6.1| 0.0| 0.5| 0.0| 0.0| 6.6|{1, [[[-73.99067,...|{1, [[[-73.975539...|{5, [[[-80.0, 35....|622236750715092991|622236723437502463|Manhattan| 113| 113|Greenwich Village...| false|622236750715092991|[01 03 00 00 00 0...|\n| CMT|2009-12-07 10:36:06|2009-12-07 10:42:26| 1| 1.3| -73.99067| 40.73065| null| -73.975539| 40.741353| 6.1| 0.0| 0.5| 0.0| 0.0| 6.6|{1, [[[-73.99067,...|{1, [[[-73.975539...|{5, [[[-80.0, 35....|622236750715092991|622236723437502463|Manhattan| 79| 79| East Village| false|622236750715092991|[01 03 00 00 00 0...|\n| CMT|2010-06-27 17:27:25|2010-06-27 17:47:44| 2| 5.0| -74.008459| 40.712233| 1| -73.9516| 40.718877| 15.7| 0.0| 0.5| 3.0| 0.0| 19.2|{1, [[[-74.008459...|{1, [[[-73.9516, ...|{5, [[[-80.0, 35....|622236750648639487|622236723415482367|Manhattan| 231| 231|TriBeCa/Civic Center| false|622236750648639487|[01 03 00 00 00 0...|\n| CMT|2010-06-27 17:27:25|2010-06-27 17:47:44| 2| 5.0| -74.008459| 40.712233| 1| -73.9516| 40.718877| 15.7| 0.0| 0.5| 3.0| 0.0| 19.2|{1, [[[-74.008459...|{1, [[[-73.9516, ...|{5, [[[-80.0, 35....|622236750648639487|622236723415482367|Manhattan| 261| 261| World Trade Center| false|622236750648639487|[01 03 00 00 00 0...|\n| CMT|2010-06-27 17:27:25|2010-06-27 17:47:44| 2| 5.0| -74.008459| 40.712233| 1| -73.9516| 40.718877| 15.7| 0.0| 0.5| 3.0| 0.0| 19.2|{1, [[[-74.008459...|{1, [[[-73.9516, ...|{5, [[[-80.0, 35....|622236750648639487|622236723415482367|Manhattan| 209| 209| Seaport| false|622236750648639487|[01 03 00 00 00 0...|\n| CMT|2009-11-17 16:50:35|2009-11-17 17:01:34| 1| 1.6| -74.00679| 40.730546| null| -73.9904| 40.73815| 7.7| 1.0| 0.5| 1.5| 0.0| 10.7|{1, [[[-74.00679,...|{1, [[[-73.9904, ...|{5, [[[-80.0, 35....|622236750718894079|622236723426754559|Manhattan| 249| 249| West Village| false|622236750718894079|[01 03 00 00 00 0...|\n| CMT|2009-11-17 16:50:35|2009-11-17 17:01:34| 1| 1.6| -74.00679| 40.730546| null| -73.9904| 40.73815| 7.7| 1.0| 0.5| 1.5| 0.0| 10.7|{1, [[[-74.00679,...|{1, [[[-73.9904, ...|{5, [[[-80.0, 35....|622236750718894079|622236723426754559|Manhattan| 158| 158|Meatpacking/West ...| false|622236750718894079|[01 03 00 00 00 0...|\n| CMT|2009-11-30 23:30:43|2009-11-30 23:42:54| 2| 2.9| -74.009605| 40.710155| null| -73.993875| 40.741554| 10.1| 0.5| 0.5| 2.22| 0.0| 13.32|{1, [[[-74.009605...|{1, [[[-73.993875...|{5, [[[-80.0, 35....|622236750646968319|622236723430490111|Manhattan| 87| 87|Financial Distric...| false|622236750646968319|[01 03 00 00 00 0...|\n| CMT|2009-11-30 23:30:43|2009-11-30 23:42:54| 2| 2.9| -74.009605| 40.710155| null| -73.993875| 40.741554| 10.1| 0.5| 0.5| 2.22| 0.0| 13.32|{1, [[[-74.009605...|{1, [[[-73.993875...|{5, [[[-80.0, 35....|622236750646968319|622236723430490111|Manhattan| 261| 261| World Trade Center| false|622236750646968319|[01 03 00 00 00 0...|\n| CMT|2010-09-21 07:44:41|2010-09-21 08:07:03| 1| 4.2| -74.008626| 40.7042| 1| -73.981636| 40.758581| 14.5| 0.0| 0.5| 1.2| 0.0| 16.2|{1, [[[-74.008626...|{1, [[[-73.981636...|{5, [[[-80.0, 35....|622236750650671103|622236723500384255|Manhattan| 87| 87|Financial Distric...| false|622236750650671103|[01 03 00 00 00 0...|\n| CMT|2010-09-21 07:44:41|2010-09-21 08:07:03| 1| 4.2| -74.008626| 40.7042| 1| -73.981636| 40.758581| 14.5| 0.0| 0.5| 1.2| 0.0| 16.2|{1, [[[-74.008626...|{1, [[[-73.981636...|{5, [[[-80.0, 35....|622236750650671103|622236723500384255|Manhattan| 88| 88|Financial Distric...| false|622236750650671103|[01 03 00 00 00 0...|\n| VTS|2010-10-10 08:56:00|2010-10-10 09:01:00| 1| 1.96| -74.012115| 40.707623| 1| -73.999272| 40.734073| 6.5| 0.0| 0.5| 0.0| 0.0| 7.0|{1, [[[-74.012115...|{1, [[[-73.999272...|{5, [[[-80.0, 35....|622236750639693823|622236723433013247|Manhattan| 87| 87|Financial Distric...| false|622236750639693823|[01 03 00 00 00 0...|\n| VTS|2010-10-10 08:56:00|2010-10-10 09:01:00| 1| 1.96| -74.012115| 40.707623| 1| -73.999272| 40.734073| 6.5| 0.0| 0.5| 0.0| 0.0| 7.0|{1, [[[-74.012115...|{1, [[[-73.999272...|{5, [[[-80.0, 35....|622236750639693823|622236723433013247|Manhattan| 261| 261| World Trade Center| false|622236750639693823|[01 03 00 00 00 0...|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+------------------+------------------+---------+-----------+--------+--------------------+-------+------------------+--------------------+\nonly showing top 20 rows\n\n
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+------------------+------------------+---------+-----------+--------+--------------------+-------+------------------+--------------------+\nvendor_id| pickup_datetime| dropoff_datetime|passenger_count|trip_distance|pickup_longitude|pickup_latitude|rate_code_id|dropoff_longitude|dropoff_latitude|fare_amount|extra|mta_tax|tip_amount|tolls_amount|total_amount| pickup_geom| dropoff_geom| bounds| pickup_h3| dropoff_h3| borough|location_id|objectid| zone|is_core| h3| wkb|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+------------------+------------------+---------+-----------+--------+--------------------+-------+------------------+--------------------+\n CMT|2009-11-28 13:00:00|2009-11-28 13:01:57| 1| 0.5| -73.999666| 40.733384| null| -73.991751| 40.730273| 3.3| 0.0| 0.5| 0.0| 0.0| 3.8|{1, [[[-73.999666...|{1, [[[-73.991751...|{5, [[[-80.0, 35....|622236723433046015|622236750715092991|Manhattan| 114| 114|Greenwich Village...| false|622236723433046015|[01 03 00 00 00 0...|\n CMT|2009-11-28 13:00:00|2009-11-28 13:01:57| 1| 0.5| -73.999666| 40.733384| null| -73.991751| 40.730273| 3.3| 0.0| 0.5| 0.0| 0.0| 3.8|{1, [[[-73.999666...|{1, [[[-73.991751...|{5, [[[-80.0, 35....|622236723433046015|622236750715092991|Manhattan| 249| 249| West Village| false|622236723433046015|[01 03 00 00 00 0...|\n CMT|2009-11-28 13:00:00|2009-11-28 13:01:57| 1| 0.5| -73.999666| 40.733384| null| -73.991751| 40.730273| 3.3| 0.0| 0.5| 0.0| 0.0| 3.8|{1, [[[-73.999666...|{1, [[[-73.991751...|{5, [[[-80.0, 35....|622236723433046015|622236750715092991|Manhattan| 113| 113|Greenwich Village...| false|622236723433046015|[01 03 00 00 00 0...|\n CMT|2009-11-30 07:49:13|2009-11-30 08:12:38| 1| 12.9| -74.007033| 40.734931| null| -73.87277| 40.774319| 29.7| 0.0| 0.5| 6.04| 0.0| 36.24|{1, [[[-74.007033...|{1, [[[-73.87277,...|{5, [[[-80.0, 35....|622236750719975423|622236724015759359|Manhattan| 249| 249| West Village| false|622236750719975423|[01 03 00 00 00 0...|\n CMT|2009-11-30 07:49:13|2009-11-30 08:12:38| 1| 12.9| -74.007033| 40.734931| null| -73.87277| 40.774319| 29.7| 0.0| 0.5| 6.04| 0.0| 36.24|{1, [[[-74.007033...|{1, [[[-73.87277,...|{5, [[[-80.0, 35....|622236750719975423|622236724015759359|Manhattan| 158| 158|Meatpacking/West ...| false|622236750719975423|[01 03 00 00 00 0...|\n VTS|2009-01-03 01:55:00|2009-01-03 02:04:00| 5| 2.09| -73.993217| 40.72416| null| -73.9944| 40.74624| 7.7| 0.5| null| 0.0| 0.0| 8.2|{1, [[[-73.993217...|{1, [[[-73.9944, ...|{5, [[[-80.0, 35....|622236750717878271|622236723431276543|Manhattan| 114| 114|Greenwich Village...| false|622236750717878271|[01 03 00 00 00 0...|\n VTS|2009-01-03 01:55:00|2009-01-03 02:04:00| 5| 2.09| -73.993217| 40.72416| null| -73.9944| 40.74624| 7.7| 0.5| null| 0.0| 0.0| 8.2|{1, [[[-73.993217...|{1, [[[-73.9944, ...|{5, [[[-80.0, 35....|622236750717878271|622236723431276543|Manhattan| 144| 144| Little Italy/NoLiTa| false|622236750717878271|[01 03 00 00 00 0...|\n CMT|2009-12-07 10:36:06|2009-12-07 10:42:26| 1| 1.3| -73.99067| 40.73065| null| -73.975539| 40.741353| 6.1| 0.0| 0.5| 0.0| 0.0| 6.6|{1, [[[-73.99067,...|{1, [[[-73.975539...|{5, [[[-80.0, 35....|622236750715092991|622236723437502463|Manhattan| 113| 113|Greenwich Village...| false|622236750715092991|[01 03 00 00 00 0...|\n CMT|2009-12-07 10:36:06|2009-12-07 10:42:26| 1| 1.3| -73.99067| 40.73065| null| -73.975539| 40.741353| 6.1| 0.0| 0.5| 0.0| 0.0| 6.6|{1, [[[-73.99067,...|{1, [[[-73.975539...|{5, [[[-80.0, 35....|622236750715092991|622236723437502463|Manhattan| 79| 79| East Village| false|622236750715092991|[01 03 00 00 00 0...|\n CMT|2010-06-27 17:27:25|2010-06-27 17:47:44| 2| 5.0| -74.008459| 40.712233| 1| -73.9516| 40.718877| 15.7| 0.0| 0.5| 3.0| 0.0| 19.2|{1, [[[-74.008459...|{1, [[[-73.9516, ...|{5, [[[-80.0, 35....|622236750648639487|622236723415482367|Manhattan| 231| 231|TriBeCa/Civic Center| false|622236750648639487|[01 03 00 00 00 0...|\n CMT|2010-06-27 17:27:25|2010-06-27 17:47:44| 2| 5.0| -74.008459| 40.712233| 1| -73.9516| 40.718877| 15.7| 0.0| 0.5| 3.0| 0.0| 19.2|{1, [[[-74.008459...|{1, [[[-73.9516, ...|{5, [[[-80.0, 35....|622236750648639487|622236723415482367|Manhattan| 261| 261| World Trade Center| false|622236750648639487|[01 03 00 00 00 0...|\n CMT|2010-06-27 17:27:25|2010-06-27 17:47:44| 2| 5.0| -74.008459| 40.712233| 1| -73.9516| 40.718877| 15.7| 0.0| 0.5| 3.0| 0.0| 19.2|{1, [[[-74.008459...|{1, [[[-73.9516, ...|{5, [[[-80.0, 35....|622236750648639487|622236723415482367|Manhattan| 209| 209| Seaport| false|622236750648639487|[01 03 00 00 00 0...|\n CMT|2009-11-17 16:50:35|2009-11-17 17:01:34| 1| 1.6| -74.00679| 40.730546| null| -73.9904| 40.73815| 7.7| 1.0| 0.5| 1.5| 0.0| 10.7|{1, [[[-74.00679,...|{1, [[[-73.9904, ...|{5, [[[-80.0, 35....|622236750718894079|622236723426754559|Manhattan| 249| 249| West Village| false|622236750718894079|[01 03 00 00 00 0...|\n CMT|2009-11-17 16:50:35|2009-11-17 17:01:34| 1| 1.6| -74.00679| 40.730546| null| -73.9904| 40.73815| 7.7| 1.0| 0.5| 1.5| 0.0| 10.7|{1, [[[-74.00679,...|{1, [[[-73.9904, ...|{5, [[[-80.0, 35....|622236750718894079|622236723426754559|Manhattan| 158| 158|Meatpacking/West ...| false|622236750718894079|[01 03 00 00 00 0...|\n CMT|2009-11-30 23:30:43|2009-11-30 23:42:54| 2| 2.9| -74.009605| 40.710155| null| -73.993875| 40.741554| 10.1| 0.5| 0.5| 2.22| 0.0| 13.32|{1, [[[-74.009605...|{1, [[[-73.993875...|{5, [[[-80.0, 35....|622236750646968319|622236723430490111|Manhattan| 87| 87|Financial Distric...| false|622236750646968319|[01 03 00 00 00 0...|\n CMT|2009-11-30 23:30:43|2009-11-30 23:42:54| 2| 2.9| -74.009605| 40.710155| null| -73.993875| 40.741554| 10.1| 0.5| 0.5| 2.22| 0.0| 13.32|{1, [[[-74.009605...|{1, [[[-73.993875...|{5, [[[-80.0, 35....|622236750646968319|622236723430490111|Manhattan| 261| 261| World Trade Center| false|622236750646968319|[01 03 00 00 00 0...|\n CMT|2010-09-21 07:44:41|2010-09-21 08:07:03| 1| 4.2| -74.008626| 40.7042| 1| -73.981636| 40.758581| 14.5| 0.0| 0.5| 1.2| 0.0| 16.2|{1, [[[-74.008626...|{1, [[[-73.981636...|{5, [[[-80.0, 35....|622236750650671103|622236723500384255|Manhattan| 87| 87|Financial Distric...| false|622236750650671103|[01 03 00 00 00 0...|\n CMT|2010-09-21 07:44:41|2010-09-21 08:07:03| 1| 4.2| -74.008626| 40.7042| 1| -73.981636| 40.758581| 14.5| 0.0| 0.5| 1.2| 0.0| 16.2|{1, [[[-74.008626...|{1, [[[-73.981636...|{5, [[[-80.0, 35....|622236750650671103|622236723500384255|Manhattan| 88| 88|Financial Distric...| false|622236750650671103|[01 03 00 00 00 0...|\n VTS|2010-10-10 08:56:00|2010-10-10 09:01:00| 1| 1.96| -74.012115| 40.707623| 1| -73.999272| 40.734073| 6.5| 0.0| 0.5| 0.0| 0.0| 7.0|{1, [[[-74.012115...|{1, [[[-73.999272...|{5, [[[-80.0, 35....|622236750639693823|622236723433013247|Manhattan| 87| 87|Financial Distric...| false|622236750639693823|[01 03 00 00 00 0...|\n VTS|2010-10-10 08:56:00|2010-10-10 09:01:00| 1| 1.96| -74.012115| 40.707623| 1| -73.999272| 40.734073| 6.5| 0.0| 0.5| 0.0| 0.0| 7.0|{1, [[[-74.012115...|{1, [[[-73.999272...|{5, [[[-80.0, 35....|622236750639693823|622236723433013247|Manhattan| 261| 261| World Trade Center| false|622236750639693823|[01 03 00 00 00 0...|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+------------------+------------------+---------+-----------+--------+--------------------+-------+------------------+--------------------+\nonly showing top 20 rows\n\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "markdown", - "source": [ - "## MosaicFrame abstraction for simple indexing and joins" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "6ad416fa-3a36-4946-98f9-b8d306d31dc5" - } - } - }, - { - "cell_type": "markdown", - "source": [ - "By wrapping our Spark DataFrames with `MosaicFrame`, we can simplify the join process. For example:" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "aba08cb2-fbbb-4de7-acdc-5eac0c12b91b" - } - } - }, - { - "cell_type": "code", - "source": [ - "from mosaic import MosaicFrame" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "54194240-dc88-42dc-a7e0-8b4a97a496f8" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "code", - "source": [ - "trips_mdf = MosaicFrame(trips, \"pickup_geom\")\nneighbourhoods_mdf = MosaicFrame(geoJsonDF, \"geometry\")" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "94730cc1-afc1-4227-9c91-709a18bb6eec" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
" - ] - } - } - ], - "execution_count": 0 - }, - { - "cell_type": "code", - "source": [ - "(\n trips_mdf\n .set_index_resolution(10)\n .apply_index()\n .join(\n neighbourhoods_mdf\n .set_index_resolution(10)\n .apply_index()\n )\n).show()" - ], - "metadata": { - "application/vnd.databricks.v1+cell": { - "title": "", - "showTitle": false, - "inputWidgets": {}, - "nuid": "a33782bb-3d4f-44e8-a33b-faeb11d0de46" - } - }, - "outputs": [ - { - "output_type": "display_data", - "metadata": { - "application/vnd.databricks.v1+output": { - "datasetInfos": [], - "data": "
+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+\n|vendor_id| pickup_datetime| dropoff_datetime|passenger_count|trip_distance|pickup_longitude|pickup_latitude|rate_code_id|dropoff_longitude|dropoff_latitude|fare_amount|extra|mta_tax|tip_amount|tolls_amount|total_amount| pickup_geom| dropoff_geom| bounds|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+\n| CMT|2009-10-12 19:35:21|2009-10-12 19:44:36| 1| 1.4| -74.000018| 40.720534| null| -73.995008| 40.734112| 6.5| 0.0| null| 0.0| 0.0| 6.5|{1, [[[-74.000018...|{1, [[[-73.995008...|{5, [[[-80.0, 35....|\n| CMT|2010-09-02 07:37:40|2010-09-02 07:53:17| 1| 6.8| -74.016477| 40.70971| 1| -73.97509| 40.759392| 17.3| 0.0| 0.5| 1.0| 0.0| 18.8|{1, [[[-74.016477...|{1, [[[-73.97509,...|{5, [[[-80.0, 35....|\n| CMT|2009-11-28 13:00:00|2009-11-28 13:01:57| 1| 0.5| -73.999666| 40.733384| null| -73.991751| 40.730273| 3.3| 0.0| 0.5| 0.0| 0.0| 3.8|{1, [[[-73.999666...|{1, [[[-73.991751...|{5, [[[-80.0, 35....|\n| CMT|2009-11-30 07:49:13|2009-11-30 08:12:38| 1| 12.9| -74.007033| 40.734931| null| -73.87277| 40.774319| 29.7| 0.0| 0.5| 6.04| 0.0| 36.24|{1, [[[-74.007033...|{1, [[[-73.87277,...|{5, [[[-80.0, 35....|\n| VTS|2009-01-03 01:55:00|2009-01-03 02:04:00| 5| 2.09| -73.993217| 40.72416| null| -73.9944| 40.74624| 7.7| 0.5| null| 0.0| 0.0| 8.2|{1, [[[-73.993217...|{1, [[[-73.9944, ...|{5, [[[-80.0, 35....|\n| VTS|2009-11-09 17:21:00|2009-11-09 17:32:00| 1| 5.19| -74.010003| 40.707022| null| -73.963853| 40.75677| 13.3| 1.0| 0.5| 0.0| 0.0| 14.8|{1, [[[-74.010003...|{1, [[[-73.963853...|{5, [[[-80.0, 35....|\n| VTS|2010-06-09 01:13:00|2010-06-09 01:27:00| 1| 8.09| -74.008697| 40.707335| 1| -73.949605| 40.78761| 19.7| 0.5| 0.5| 0.0| 0.0| 20.7|{1, [[[-74.008697...|{1, [[[-73.949605...|{5, [[[-80.0, 35....|\n| VTS|2009-01-28 18:36:00|2009-01-28 18:50:00| 1| 2.92| -74.008823| 40.72089| null| -73.994055| 40.747588| 10.1| 1.0| null| 3.0| 0.0| 14.1|{1, [[[-74.008823...|{1, [[[-73.994055...|{5, [[[-80.0, 35....|\n| CMT|2010-06-02 14:21:05|2010-06-02 14:28:43| 1| 5.0| -74.011653| 40.702604| 1| -73.971851| 40.749807| 12.5| 0.0| 0.5| 2.6| 0.0| 15.6|{1, [[[-74.011653...|{1, [[[-73.971851...|{5, [[[-80.0, 35....|\n| VTS|2009-11-26 15:38:00|2009-11-26 15:47:00| 5| 2.36| -73.997208| 40.722108| null| -73.99647| 40.748185| 8.1| 0.0| 0.5| 2.0| 0.0| 10.6|{1, [[[-73.997208...|{1, [[[-73.99647,...|{5, [[[-80.0, 35....|\n| CMT|2009-12-07 10:36:06|2009-12-07 10:42:26| 1| 1.3| -73.99067| 40.73065| null| -73.975539| 40.741353| 6.1| 0.0| 0.5| 0.0| 0.0| 6.6|{1, [[[-73.99067,...|{1, [[[-73.975539...|{5, [[[-80.0, 35....|\n| CMT|2009-11-15 09:11:42|2009-11-15 09:26:34| 1| 3.7| -73.990065| 40.687341| null| -73.999566| 40.730219| 12.1| 0.0| 0.5| 0.0| 0.0| 12.6|{1, [[[-73.990065...|{1, [[[-73.999566...|{5, [[[-80.0, 35....|\n| CMT|2010-06-27 17:27:25|2010-06-27 17:47:44| 2| 5.0| -74.008459| 40.712233| 1| -73.9516| 40.718877| 15.7| 0.0| 0.5| 3.0| 0.0| 19.2|{1, [[[-74.008459...|{1, [[[-73.9516, ...|{5, [[[-80.0, 35....|\n| VTS|2009-01-30 21:05:00|2009-01-30 21:34:00| 1| 5.99| -73.994397| 40.694843| null| -73.921257| 40.685107| 18.9| 0.5| null| 0.6| 0.0| 20.0|{1, [[[-73.994397...|{1, [[[-73.921257...|{5, [[[-80.0, 35....|\n| CMT|2009-01-14 07:43:53|2009-01-14 07:55:14| 2| 2.9| -74.007602| 40.725098| null| -73.977846| 40.751608| 9.3| 0.0| null| 0.0| 0.0| 9.3|{1, [[[-74.007602...|{1, [[[-73.977846...|{5, [[[-80.0, 35....|\n| VTS|2010-05-11 16:33:00|2010-05-11 16:41:00| 1| 0.99| -74.011205| 40.715468| 1| -74.011072| 40.708882| 5.7| 1.0| 0.5| 0.0| 0.0| 7.2|{1, [[[-74.011205...|{1, [[[-74.011072...|{5, [[[-80.0, 35....|\n| VTS|2009-01-19 09:43:00|2009-01-19 09:47:00| 1| 0.56| -73.991123| 40.731297| null| -73.98681| 40.736703| 4.1| 0.0| null| 0.0| 0.0| 4.1|{1, [[[-73.991123...|{1, [[[-73.98681,...|{5, [[[-80.0, 35....|\n| CMT|2009-11-14 15:46:36|2009-11-14 15:51:01| 2| 1.2| -74.008448| 40.734271| null| -74.006075| 40.720237| 4.9| 0.0| 0.5| 0.0| 0.0| 5.4|{1, [[[-74.008448...|{1, [[[-74.006075...|{5, [[[-80.0, 35....|\n| CMT|2009-11-17 16:50:35|2009-11-17 17:01:34| 1| 1.6| -74.00679| 40.730546| null| -73.9904| 40.73815| 7.7| 1.0| 0.5| 1.5| 0.0| 10.7|{1, [[[-74.00679,...|{1, [[[-73.9904, ...|{5, [[[-80.0, 35....|\n| CMT|2009-11-30 23:30:43|2009-11-30 23:42:54| 2| 2.9| -74.009605| 40.710155| null| -73.993875| 40.741554| 10.1| 0.5| 0.5| 2.22| 0.0| 13.32|{1, [[[-74.009605...|{1, [[[-73.993875...|{5, [[[-80.0, 35....|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+\nonly showing top 20 rows\n\n
", - "removedWidgets": [], - "addedWidgets": {}, - "metadata": {}, - "type": "html", - "arguments": {} - } - }, - "data": { - "text/html": [ - "\n
+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+\nvendor_id| pickup_datetime| dropoff_datetime|passenger_count|trip_distance|pickup_longitude|pickup_latitude|rate_code_id|dropoff_longitude|dropoff_latitude|fare_amount|extra|mta_tax|tip_amount|tolls_amount|total_amount| pickup_geom| dropoff_geom| bounds|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+\n CMT|2009-10-12 19:35:21|2009-10-12 19:44:36| 1| 1.4| -74.000018| 40.720534| null| -73.995008| 40.734112| 6.5| 0.0| null| 0.0| 0.0| 6.5|{1, [[[-74.000018...|{1, [[[-73.995008...|{5, [[[-80.0, 35....|\n CMT|2010-09-02 07:37:40|2010-09-02 07:53:17| 1| 6.8| -74.016477| 40.70971| 1| -73.97509| 40.759392| 17.3| 0.0| 0.5| 1.0| 0.0| 18.8|{1, [[[-74.016477...|{1, [[[-73.97509,...|{5, [[[-80.0, 35....|\n CMT|2009-11-28 13:00:00|2009-11-28 13:01:57| 1| 0.5| -73.999666| 40.733384| null| -73.991751| 40.730273| 3.3| 0.0| 0.5| 0.0| 0.0| 3.8|{1, [[[-73.999666...|{1, [[[-73.991751...|{5, [[[-80.0, 35....|\n CMT|2009-11-30 07:49:13|2009-11-30 08:12:38| 1| 12.9| -74.007033| 40.734931| null| -73.87277| 40.774319| 29.7| 0.0| 0.5| 6.04| 0.0| 36.24|{1, [[[-74.007033...|{1, [[[-73.87277,...|{5, [[[-80.0, 35....|\n VTS|2009-01-03 01:55:00|2009-01-03 02:04:00| 5| 2.09| -73.993217| 40.72416| null| -73.9944| 40.74624| 7.7| 0.5| null| 0.0| 0.0| 8.2|{1, [[[-73.993217...|{1, [[[-73.9944, ...|{5, [[[-80.0, 35....|\n VTS|2009-11-09 17:21:00|2009-11-09 17:32:00| 1| 5.19| -74.010003| 40.707022| null| -73.963853| 40.75677| 13.3| 1.0| 0.5| 0.0| 0.0| 14.8|{1, [[[-74.010003...|{1, [[[-73.963853...|{5, [[[-80.0, 35....|\n VTS|2010-06-09 01:13:00|2010-06-09 01:27:00| 1| 8.09| -74.008697| 40.707335| 1| -73.949605| 40.78761| 19.7| 0.5| 0.5| 0.0| 0.0| 20.7|{1, [[[-74.008697...|{1, [[[-73.949605...|{5, [[[-80.0, 35....|\n VTS|2009-01-28 18:36:00|2009-01-28 18:50:00| 1| 2.92| -74.008823| 40.72089| null| -73.994055| 40.747588| 10.1| 1.0| null| 3.0| 0.0| 14.1|{1, [[[-74.008823...|{1, [[[-73.994055...|{5, [[[-80.0, 35....|\n CMT|2010-06-02 14:21:05|2010-06-02 14:28:43| 1| 5.0| -74.011653| 40.702604| 1| -73.971851| 40.749807| 12.5| 0.0| 0.5| 2.6| 0.0| 15.6|{1, [[[-74.011653...|{1, [[[-73.971851...|{5, [[[-80.0, 35....|\n VTS|2009-11-26 15:38:00|2009-11-26 15:47:00| 5| 2.36| -73.997208| 40.722108| null| -73.99647| 40.748185| 8.1| 0.0| 0.5| 2.0| 0.0| 10.6|{1, [[[-73.997208...|{1, [[[-73.99647,...|{5, [[[-80.0, 35....|\n CMT|2009-12-07 10:36:06|2009-12-07 10:42:26| 1| 1.3| -73.99067| 40.73065| null| -73.975539| 40.741353| 6.1| 0.0| 0.5| 0.0| 0.0| 6.6|{1, [[[-73.99067,...|{1, [[[-73.975539...|{5, [[[-80.0, 35....|\n CMT|2009-11-15 09:11:42|2009-11-15 09:26:34| 1| 3.7| -73.990065| 40.687341| null| -73.999566| 40.730219| 12.1| 0.0| 0.5| 0.0| 0.0| 12.6|{1, [[[-73.990065...|{1, [[[-73.999566...|{5, [[[-80.0, 35....|\n CMT|2010-06-27 17:27:25|2010-06-27 17:47:44| 2| 5.0| -74.008459| 40.712233| 1| -73.9516| 40.718877| 15.7| 0.0| 0.5| 3.0| 0.0| 19.2|{1, [[[-74.008459...|{1, [[[-73.9516, ...|{5, [[[-80.0, 35....|\n VTS|2009-01-30 21:05:00|2009-01-30 21:34:00| 1| 5.99| -73.994397| 40.694843| null| -73.921257| 40.685107| 18.9| 0.5| null| 0.6| 0.0| 20.0|{1, [[[-73.994397...|{1, [[[-73.921257...|{5, [[[-80.0, 35....|\n CMT|2009-01-14 07:43:53|2009-01-14 07:55:14| 2| 2.9| -74.007602| 40.725098| null| -73.977846| 40.751608| 9.3| 0.0| null| 0.0| 0.0| 9.3|{1, [[[-74.007602...|{1, [[[-73.977846...|{5, [[[-80.0, 35....|\n VTS|2010-05-11 16:33:00|2010-05-11 16:41:00| 1| 0.99| -74.011205| 40.715468| 1| -74.011072| 40.708882| 5.7| 1.0| 0.5| 0.0| 0.0| 7.2|{1, [[[-74.011205...|{1, [[[-74.011072...|{5, [[[-80.0, 35....|\n VTS|2009-01-19 09:43:00|2009-01-19 09:47:00| 1| 0.56| -73.991123| 40.731297| null| -73.98681| 40.736703| 4.1| 0.0| null| 0.0| 0.0| 4.1|{1, [[[-73.991123...|{1, [[[-73.98681,...|{5, [[[-80.0, 35....|\n CMT|2009-11-14 15:46:36|2009-11-14 15:51:01| 2| 1.2| -74.008448| 40.734271| null| -74.006075| 40.720237| 4.9| 0.0| 0.5| 0.0| 0.0| 5.4|{1, [[[-74.008448...|{1, [[[-74.006075...|{5, [[[-80.0, 35....|\n CMT|2009-11-17 16:50:35|2009-11-17 17:01:34| 1| 1.6| -74.00679| 40.730546| null| -73.9904| 40.73815| 7.7| 1.0| 0.5| 1.5| 0.0| 10.7|{1, [[[-74.00679,...|{1, [[[-73.9904, ...|{5, [[[-80.0, 35....|\n CMT|2009-11-30 23:30:43|2009-11-30 23:42:54| 2| 2.9| -74.009605| 40.710155| null| -73.993875| 40.741554| 10.1| 0.5| 0.5| 2.22| 0.0| 13.32|{1, [[[-74.009605...|{1, [[[-73.993875...|{5, [[[-80.0, 35....|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+\nonly showing top 20 rows\n\n
" - ] - } - } - ], - "execution_count": 0 - } - ], - "metadata": { - "application/vnd.databricks.v1+notebook": { - "notebookName": "quickstart", - "dashboards": [], - "notebookMetadata": { - "pythonIndentUnit": 2 - }, - "language": "python", - "widgets": {}, - "notebookOrigID": 1935524762305611 - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} \ No newline at end of file diff --git a/v0.3.x/_sources/usage/usage.rst.txt b/v0.3.x/_sources/usage/usage.rst.txt deleted file mode 100644 index d7c8c3e10..000000000 --- a/v0.3.x/_sources/usage/usage.rst.txt +++ /dev/null @@ -1,14 +0,0 @@ -Usage -===== - -.. toctree:: - :maxdepth: 2 - - installation - install-gdal - grid-indexes - grid-indexes-bng - quickstart - kepler - automatic-sql-registration - diff --git a/v0.3.x/_static/_sphinx_javascript_frameworks_compat.js b/v0.3.x/_static/_sphinx_javascript_frameworks_compat.js deleted file mode 100644 index 81415803e..000000000 --- a/v0.3.x/_static/_sphinx_javascript_frameworks_compat.js +++ /dev/null @@ -1,123 +0,0 @@ -/* Compatability shim for jQuery and underscores.js. - * - * Copyright Sphinx contributors - * Released under the two clause BSD licence - */ - -/** - * small helper function to urldecode strings - * - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL - */ -jQuery.urldecode = function(x) { - if (!x) { - return x - } - return decodeURIComponent(x.replace(/\+/g, ' ')); -}; - -/** - * small helper function to urlencode strings - */ -jQuery.urlencode = encodeURIComponent; - -/** - * This function returns the parsed url parameters of the - * current request. Multiple values per key are supported, - * it will always return arrays of strings for the value parts. - */ -jQuery.getQueryParameters = function(s) { - if (typeof s === 'undefined') - s = document.location.search; - var parts = s.substr(s.indexOf('?') + 1).split('&'); - var result = {}; - for (var i = 0; i < parts.length; i++) { - var tmp = parts[i].split('=', 2); - var key = jQuery.urldecode(tmp[0]); - var value = jQuery.urldecode(tmp[1]); - if (key in result) - result[key].push(value); - else - result[key] = [value]; - } - return result; -}; - -/** - * highlight a given string on a jquery object by wrapping it in - * span elements with the given class name. - */ -jQuery.fn.highlightText = function(text, className) { - function highlight(node, addItems) { - if (node.nodeType === 3) { - var val = node.nodeValue; - var pos = val.toLowerCase().indexOf(text); - if (pos >= 0 && - !jQuery(node.parentNode).hasClass(className) && - !jQuery(node.parentNode).hasClass("nohighlight")) { - var span; - var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); - if (isInSVG) { - span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - } else { - span = document.createElement("span"); - span.className = className; - } - span.appendChild(document.createTextNode(val.substr(pos, text.length))); - node.parentNode.insertBefore(span, node.parentNode.insertBefore( - document.createTextNode(val.substr(pos + text.length)), - node.nextSibling)); - node.nodeValue = val.substr(0, pos); - if (isInSVG) { - var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); - var bbox = node.parentElement.getBBox(); - rect.x.baseVal.value = bbox.x; - rect.y.baseVal.value = bbox.y; - rect.width.baseVal.value = bbox.width; - rect.height.baseVal.value = bbox.height; - rect.setAttribute('class', className); - addItems.push({ - "parent": node.parentNode, - "target": rect}); - } - } - } - else if (!jQuery(node).is("button, select, textarea")) { - jQuery.each(node.childNodes, function() { - highlight(this, addItems); - }); - } - } - var addItems = []; - var result = this.each(function() { - highlight(this, addItems); - }); - for (var i = 0; i < addItems.length; ++i) { - jQuery(addItems[i].parent).before(addItems[i].target); - } - return result; -}; - -/* - * backward compatibility for jQuery.browser - * This will be supported until firefox bug is fixed. - */ -if (!jQuery.browser) { - jQuery.uaMatch = function(ua) { - ua = ua.toLowerCase(); - - var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || - /(webkit)[ \/]([\w.]+)/.exec(ua) || - /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || - /(msie) ([\w.]+)/.exec(ua) || - ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || - []; - - return { - browser: match[ 1 ] || "", - version: match[ 2 ] || "0" - }; - }; - jQuery.browser = {}; - jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; -} diff --git a/v0.3.x/_static/basic.css b/v0.3.x/_static/basic.css deleted file mode 100644 index 7577acb1a..000000000 --- a/v0.3.x/_static/basic.css +++ /dev/null @@ -1,903 +0,0 @@ -/* - * basic.css - * ~~~~~~~~~ - * - * Sphinx stylesheet -- basic theme. - * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/* -- main layout ----------------------------------------------------------- */ - -div.clearer { - clear: both; -} - -div.section::after { - display: block; - content: ''; - clear: left; -} - -/* -- relbar ---------------------------------------------------------------- */ - -div.related { - width: 100%; - font-size: 90%; -} - -div.related h3 { - display: none; -} - -div.related ul { - margin: 0; - padding: 0 0 0 10px; - list-style: none; -} - -div.related li { - display: inline; -} - -div.related li.right { - float: right; - margin-right: 5px; -} - -/* -- sidebar --------------------------------------------------------------- */ - -div.sphinxsidebarwrapper { - padding: 10px 5px 0 10px; -} - -div.sphinxsidebar { - float: left; - width: 230px; - margin-left: -100%; - font-size: 90%; - word-wrap: break-word; - overflow-wrap : break-word; -} - -div.sphinxsidebar ul { - list-style: none; -} - -div.sphinxsidebar ul ul, -div.sphinxsidebar ul.want-points { - margin-left: 20px; - list-style: square; -} - -div.sphinxsidebar ul ul { - margin-top: 0; - margin-bottom: 0; -} - -div.sphinxsidebar form { - margin-top: 10px; -} - -div.sphinxsidebar input { - border: 1px solid #98dbcc; - font-family: sans-serif; - font-size: 1em; -} - -div.sphinxsidebar #searchbox form.search { - overflow: hidden; -} - -div.sphinxsidebar #searchbox input[type="text"] { - float: left; - width: 80%; - padding: 0.25em; - box-sizing: border-box; -} - -div.sphinxsidebar #searchbox input[type="submit"] { - float: left; - width: 20%; - border-left: none; - padding: 0.25em; - box-sizing: border-box; -} - - -img { - border: 0; - max-width: 100%; -} - -/* -- search page ----------------------------------------------------------- */ - -ul.search { - margin: 10px 0 0 20px; - padding: 0; -} - -ul.search li { - padding: 5px 0 5px 20px; - background-image: url(file.png); - background-repeat: no-repeat; - background-position: 0 7px; -} - -ul.search li a { - font-weight: bold; -} - -ul.search li p.context { - color: #888; - margin: 2px 0 0 30px; - text-align: left; -} - -ul.keywordmatches li.goodmatch a { - font-weight: bold; -} - -/* -- index page ------------------------------------------------------------ */ - -table.contentstable { - width: 90%; - margin-left: auto; - margin-right: auto; -} - -table.contentstable p.biglink { - line-height: 150%; -} - -a.biglink { - font-size: 1.3em; -} - -span.linkdescr { - font-style: italic; - padding-top: 5px; - font-size: 90%; -} - -/* -- general index --------------------------------------------------------- */ - -table.indextable { - width: 100%; -} - -table.indextable td { - text-align: left; - vertical-align: top; -} - -table.indextable ul { - margin-top: 0; - margin-bottom: 0; - list-style-type: none; -} - -table.indextable > tbody > tr > td > ul { - padding-left: 0em; -} - -table.indextable tr.pcap { - height: 10px; -} - -table.indextable tr.cap { - margin-top: 10px; - background-color: #f2f2f2; -} - -img.toggler { - margin-right: 3px; - margin-top: 3px; - cursor: pointer; -} - -div.modindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -div.genindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -/* -- domain module index --------------------------------------------------- */ - -table.modindextable td { - padding: 2px; - border-collapse: collapse; -} - -/* -- general body styles --------------------------------------------------- */ - -div.body { - min-width: 360px; - max-width: 800px; -} - -div.body p, div.body dd, div.body li, div.body blockquote { - -moz-hyphens: auto; - -ms-hyphens: auto; - -webkit-hyphens: auto; - hyphens: auto; -} - -a.headerlink { - visibility: hidden; -} - -h1:hover > a.headerlink, -h2:hover > a.headerlink, -h3:hover > a.headerlink, -h4:hover > a.headerlink, -h5:hover > a.headerlink, -h6:hover > a.headerlink, -dt:hover > a.headerlink, -caption:hover > a.headerlink, -p.caption:hover > a.headerlink, -div.code-block-caption:hover > a.headerlink { - visibility: visible; -} - -div.body p.caption { - text-align: inherit; -} - -div.body td { - text-align: left; -} - -.first { - margin-top: 0 !important; -} - -p.rubric { - margin-top: 30px; - font-weight: bold; -} - -img.align-left, figure.align-left, .figure.align-left, object.align-left { - clear: left; - float: left; - margin-right: 1em; -} - -img.align-right, figure.align-right, .figure.align-right, object.align-right { - clear: right; - float: right; - margin-left: 1em; -} - -img.align-center, figure.align-center, .figure.align-center, object.align-center { - display: block; - margin-left: auto; - margin-right: auto; -} - -img.align-default, figure.align-default, .figure.align-default { - display: block; - margin-left: auto; - margin-right: auto; -} - -.align-left { - text-align: left; -} - -.align-center { - text-align: center; -} - -.align-default { - text-align: center; -} - -.align-right { - text-align: right; -} - -/* -- sidebars -------------------------------------------------------------- */ - -div.sidebar, -aside.sidebar { - margin: 0 0 0.5em 1em; - border: 1px solid #ddb; - padding: 7px; - background-color: #ffe; - width: 40%; - float: right; - clear: right; - overflow-x: auto; -} - -p.sidebar-title { - font-weight: bold; -} - -nav.contents, -aside.topic, -div.admonition, div.topic, blockquote { - clear: left; -} - -/* -- topics ---------------------------------------------------------------- */ - -nav.contents, -aside.topic, -div.topic { - border: 1px solid #ccc; - padding: 7px; - margin: 10px 0 10px 0; -} - -p.topic-title { - font-size: 1.1em; - font-weight: bold; - margin-top: 10px; -} - -/* -- admonitions ----------------------------------------------------------- */ - -div.admonition { - margin-top: 10px; - margin-bottom: 10px; - padding: 7px; -} - -div.admonition dt { - font-weight: bold; -} - -p.admonition-title { - margin: 0px 10px 5px 0px; - font-weight: bold; -} - -div.body p.centered { - text-align: center; - margin-top: 25px; -} - -/* -- content of sidebars/topics/admonitions -------------------------------- */ - -div.sidebar > :last-child, -aside.sidebar > :last-child, -nav.contents > :last-child, -aside.topic > :last-child, -div.topic > :last-child, -div.admonition > :last-child { - margin-bottom: 0; -} - -div.sidebar::after, -aside.sidebar::after, -nav.contents::after, -aside.topic::after, -div.topic::after, -div.admonition::after, -blockquote::after { - display: block; - content: ''; - clear: both; -} - -/* -- tables ---------------------------------------------------------------- */ - -table.docutils { - margin-top: 10px; - margin-bottom: 10px; - border: 0; - border-collapse: collapse; -} - -table.align-center { - margin-left: auto; - margin-right: auto; -} - -table.align-default { - margin-left: auto; - margin-right: auto; -} - -table caption span.caption-number { - font-style: italic; -} - -table caption span.caption-text { -} - -table.docutils td, table.docutils th { - padding: 1px 8px 1px 5px; - border-top: 0; - border-left: 0; - border-right: 0; - border-bottom: 1px solid #aaa; -} - -th { - text-align: left; - padding-right: 5px; -} - -table.citation { - border-left: solid 1px gray; - margin-left: 1px; -} - -table.citation td { - border-bottom: none; -} - -th > :first-child, -td > :first-child { - margin-top: 0px; -} - -th > :last-child, -td > :last-child { - margin-bottom: 0px; -} - -/* -- figures --------------------------------------------------------------- */ - -div.figure, figure { - margin: 0.5em; - padding: 0.5em; -} - -div.figure p.caption, figcaption { - padding: 0.3em; -} - -div.figure p.caption span.caption-number, -figcaption span.caption-number { - font-style: italic; -} - -div.figure p.caption span.caption-text, -figcaption span.caption-text { -} - -/* -- field list styles ----------------------------------------------------- */ - -table.field-list td, table.field-list th { - border: 0 !important; -} - -.field-list ul { - margin: 0; - padding-left: 1em; -} - -.field-list p { - margin: 0; -} - -.field-name { - -moz-hyphens: manual; - -ms-hyphens: manual; - -webkit-hyphens: manual; - hyphens: manual; -} - -/* -- hlist styles ---------------------------------------------------------- */ - -table.hlist { - margin: 1em 0; -} - -table.hlist td { - vertical-align: top; -} - -/* -- object description styles --------------------------------------------- */ - -.sig { - font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; -} - -.sig-name, code.descname { - background-color: transparent; - font-weight: bold; -} - -.sig-name { - font-size: 1.1em; -} - -code.descname { - font-size: 1.2em; -} - -.sig-prename, code.descclassname { - background-color: transparent; -} - -.optional { - font-size: 1.3em; -} - -.sig-paren { - font-size: larger; -} - -.sig-param.n { - font-style: italic; -} - -/* C++ specific styling */ - -.sig-inline.c-texpr, -.sig-inline.cpp-texpr { - font-family: unset; -} - -.sig.c .k, .sig.c .kt, -.sig.cpp .k, .sig.cpp .kt { - color: #0033B3; -} - -.sig.c .m, -.sig.cpp .m { - color: #1750EB; -} - -.sig.c .s, .sig.c .sc, -.sig.cpp .s, .sig.cpp .sc { - color: #067D17; -} - - -/* -- other body styles ----------------------------------------------------- */ - -ol.arabic { - list-style: decimal; -} - -ol.loweralpha { - list-style: lower-alpha; -} - -ol.upperalpha { - list-style: upper-alpha; -} - -ol.lowerroman { - list-style: lower-roman; -} - -ol.upperroman { - list-style: upper-roman; -} - -:not(li) > ol > li:first-child > :first-child, -:not(li) > ul > li:first-child > :first-child { - margin-top: 0px; -} - -:not(li) > ol > li:last-child > :last-child, -:not(li) > ul > li:last-child > :last-child { - margin-bottom: 0px; -} - -ol.simple ol p, -ol.simple ul p, -ul.simple ol p, -ul.simple ul p { - margin-top: 0; -} - -ol.simple > li:not(:first-child) > p, -ul.simple > li:not(:first-child) > p { - margin-top: 0; -} - -ol.simple p, -ul.simple p { - margin-bottom: 0; -} - -aside.footnote > span, -div.citation > span { - float: left; -} -aside.footnote > span:last-of-type, -div.citation > span:last-of-type { - padding-right: 0.5em; -} -aside.footnote > p { - margin-left: 2em; -} -div.citation > p { - margin-left: 4em; -} -aside.footnote > p:last-of-type, -div.citation > p:last-of-type { - margin-bottom: 0em; -} -aside.footnote > p:last-of-type:after, -div.citation > p:last-of-type:after { - content: ""; - clear: both; -} - -dl.field-list { - display: grid; - grid-template-columns: fit-content(30%) auto; -} - -dl.field-list > dt { - font-weight: bold; - word-break: break-word; - padding-left: 0.5em; - padding-right: 5px; -} - -dl.field-list > dd { - padding-left: 0.5em; - margin-top: 0em; - margin-left: 0em; - margin-bottom: 0em; -} - -dl { - margin-bottom: 15px; -} - -dd > :first-child { - margin-top: 0px; -} - -dd ul, dd table { - margin-bottom: 10px; -} - -dd { - margin-top: 3px; - margin-bottom: 10px; - margin-left: 30px; -} - -dl > dd:last-child, -dl > dd:last-child > :last-child { - margin-bottom: 0; -} - -dt:target, span.highlighted { - background-color: #fbe54e; -} - -rect.highlighted { - fill: #fbe54e; -} - -dl.glossary dt { - font-weight: bold; - font-size: 1.1em; -} - -.versionmodified { - font-style: italic; -} - -.system-message { - background-color: #fda; - padding: 5px; - border: 3px solid red; -} - -.footnote:target { - background-color: #ffa; -} - -.line-block { - display: block; - margin-top: 1em; - margin-bottom: 1em; -} - -.line-block .line-block { - margin-top: 0; - margin-bottom: 0; - margin-left: 1.5em; -} - -.guilabel, .menuselection { - font-family: sans-serif; -} - -.accelerator { - text-decoration: underline; -} - -.classifier { - font-style: oblique; -} - -.classifier:before { - font-style: normal; - margin: 0 0.5em; - content: ":"; - display: inline-block; -} - -abbr, acronym { - border-bottom: dotted 1px; - cursor: help; -} - -/* -- code displays --------------------------------------------------------- */ - -pre { - overflow: auto; - overflow-y: hidden; /* fixes display issues on Chrome browsers */ -} - -pre, div[class*="highlight-"] { - clear: both; -} - -span.pre { - -moz-hyphens: none; - -ms-hyphens: none; - -webkit-hyphens: none; - hyphens: none; - white-space: nowrap; -} - -div[class*="highlight-"] { - margin: 1em 0; -} - -td.linenos pre { - border: 0; - background-color: transparent; - color: #aaa; -} - -table.highlighttable { - display: block; -} - -table.highlighttable tbody { - display: block; -} - -table.highlighttable tr { - display: flex; -} - -table.highlighttable td { - margin: 0; - padding: 0; -} - -table.highlighttable td.linenos { - padding-right: 0.5em; -} - -table.highlighttable td.code { - flex: 1; - overflow: hidden; -} - -.highlight .hll { - display: block; -} - -div.highlight pre, -table.highlighttable pre { - margin: 0; -} - -div.code-block-caption + div { - margin-top: 0; -} - -div.code-block-caption { - margin-top: 1em; - padding: 2px 5px; - font-size: small; -} - -div.code-block-caption code { - background-color: transparent; -} - -table.highlighttable td.linenos, -span.linenos, -div.highlight span.gp { /* gp: Generic.Prompt */ - user-select: none; - -webkit-user-select: text; /* Safari fallback only */ - -webkit-user-select: none; /* Chrome/Safari */ - -moz-user-select: none; /* Firefox */ - -ms-user-select: none; /* IE10+ */ -} - -div.code-block-caption span.caption-number { - padding: 0.1em 0.3em; - font-style: italic; -} - -div.code-block-caption span.caption-text { -} - -div.literal-block-wrapper { - margin: 1em 0; -} - -code.xref, a code { - background-color: transparent; - font-weight: bold; -} - -h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { - background-color: transparent; -} - -.viewcode-link { - float: right; -} - -.viewcode-back { - float: right; - font-family: sans-serif; -} - -div.viewcode-block:target { - margin: -1px -10px; - padding: 0 10px; -} - -/* -- math display ---------------------------------------------------------- */ - -img.math { - vertical-align: middle; -} - -div.body div.math p { - text-align: center; -} - -span.eqno { - float: right; -} - -span.eqno a.headerlink { - position: absolute; - z-index: 1; -} - -div.math:hover a.headerlink { - visibility: visible; -} - -/* -- printout stylesheet --------------------------------------------------- */ - -@media print { - div.document, - div.documentwrapper, - div.bodywrapper { - margin: 0 !important; - width: 100%; - } - - div.sphinxsidebar, - div.related, - div.footer, - #top-link { - display: none; - } -} \ No newline at end of file diff --git a/v0.3.x/_static/css/badge_only.css b/v0.3.x/_static/css/badge_only.css deleted file mode 100644 index c718cee44..000000000 --- a/v0.3.x/_static/css/badge_only.css +++ /dev/null @@ -1 +0,0 @@ -.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} \ No newline at end of file diff --git a/v0.3.x/_static/css/custom.css b/v0.3.x/_static/css/custom.css deleted file mode 100644 index a67f5b339..000000000 --- a/v0.3.x/_static/css/custom.css +++ /dev/null @@ -1,126 +0,0 @@ -.doc-figure { - display: block; - margin-left: auto; - margin-right: auto; - width: 75%; -} - -.doc-figure-full { - width: 100%; -} - -.doc-figure-float-left { - display: block; - float: left !important; - width: 50%; -} - -.figure-group { - display: flex; - flex-wrap: wrap; - justify-content: center; -} - -.mosaic-logo { - display: block; - margin-left: 10%; - margin-right: 10%; - margin-bottom: 2%; - width: 80%; -} - -.wy-nav-content { - max-width: 70% !important; -} - -.icon-home .logo { - filter: invert(66%) sepia(76%) saturate(752%) hue-rotate(317deg) brightness(95%) contrast(94%); -} - -.package-health { - margin-bottom: 2%; - width: fit-content; - margin-left: auto; - margin-right: auto; -} - -li { - list-style: disc; -} - -.output_area img { - height: 20px; -} - -.video-tile { - width: 440px; - float: left; - padding: 10px; - background: rgba(251, 181, 58, 0.46); - margin-right: 20px; - margin-top: 20px; -} - -.video-tile p { - margin: 0 0 5px 0; -} - -.video-title { - height: 82px; -} - -.video-description { - padding: 10px; - height: 300px; - overflow: auto; - margin-bottom: 20px; -} - -.video-tile ul { - width: fit-content; - margin: auto !important; - margin-top: 15px !important; -} - -.linkedin-badge a { - display: inline-block; - margin: 0 5px; -} - -.linkedin-badge a img { - width: 50px; - height: 50px; - border-radius: 50px; - box-shadow: 0 0 0 1px #fff; - transition: all 0.2s ease-in-out; -} - -.linkedin-badge a:hover img { - box-shadow: 0 0 0 1px #0077b5; -} - -.linkedin-badge p { - margin: 0; - margin-top: -5px !important; - font-size: 18px; - line-height: 20px; - color: #000000; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-weight: 600; - text-align: center; - text-decoration: none; -} - -.linkedin-badge { - display: inline-block; - margin: 0 5px; - text-align: center; -} - -.video-spacing { - height: 50px; -} - -.speakers-title { - float: left; -} \ No newline at end of file diff --git a/v0.3.x/_static/css/fonts/Roboto-Slab-Bold.woff b/v0.3.x/_static/css/fonts/Roboto-Slab-Bold.woff deleted file mode 100644 index 6cb600001..000000000 Binary files a/v0.3.x/_static/css/fonts/Roboto-Slab-Bold.woff and /dev/null differ diff --git a/v0.3.x/_static/css/fonts/Roboto-Slab-Bold.woff2 b/v0.3.x/_static/css/fonts/Roboto-Slab-Bold.woff2 deleted file mode 100644 index 7059e2314..000000000 Binary files a/v0.3.x/_static/css/fonts/Roboto-Slab-Bold.woff2 and /dev/null differ diff --git a/v0.3.x/_static/css/fonts/Roboto-Slab-Regular.woff b/v0.3.x/_static/css/fonts/Roboto-Slab-Regular.woff deleted file mode 100644 index f815f63f9..000000000 Binary files a/v0.3.x/_static/css/fonts/Roboto-Slab-Regular.woff and /dev/null differ diff --git a/v0.3.x/_static/css/fonts/Roboto-Slab-Regular.woff2 b/v0.3.x/_static/css/fonts/Roboto-Slab-Regular.woff2 deleted file mode 100644 index f2c76e5bd..000000000 Binary files a/v0.3.x/_static/css/fonts/Roboto-Slab-Regular.woff2 and /dev/null differ diff --git a/v0.3.x/_static/css/fonts/fontawesome-webfont.eot b/v0.3.x/_static/css/fonts/fontawesome-webfont.eot deleted file mode 100644 index e9f60ca95..000000000 Binary files a/v0.3.x/_static/css/fonts/fontawesome-webfont.eot and /dev/null differ diff --git a/v0.3.x/_static/css/fonts/fontawesome-webfont.svg b/v0.3.x/_static/css/fonts/fontawesome-webfont.svg deleted file mode 100644 index 855c845e5..000000000 --- a/v0.3.x/_static/css/fonts/fontawesome-webfont.svg +++ /dev/null @@ -1,2671 +0,0 @@ - - - - -Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 - By ,,, -Copyright Dave Gandy 2016. All rights reserved. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/v0.3.x/_static/css/fonts/fontawesome-webfont.ttf b/v0.3.x/_static/css/fonts/fontawesome-webfont.ttf deleted file mode 100644 index 35acda2fa..000000000 Binary files a/v0.3.x/_static/css/fonts/fontawesome-webfont.ttf and /dev/null differ diff --git a/v0.3.x/_static/css/fonts/fontawesome-webfont.woff b/v0.3.x/_static/css/fonts/fontawesome-webfont.woff deleted file mode 100644 index 400014a4b..000000000 Binary files a/v0.3.x/_static/css/fonts/fontawesome-webfont.woff and /dev/null differ diff --git a/v0.3.x/_static/css/fonts/fontawesome-webfont.woff2 b/v0.3.x/_static/css/fonts/fontawesome-webfont.woff2 deleted file mode 100644 index 4d13fc604..000000000 Binary files a/v0.3.x/_static/css/fonts/fontawesome-webfont.woff2 and /dev/null differ diff --git a/v0.3.x/_static/css/fonts/lato-bold-italic.woff b/v0.3.x/_static/css/fonts/lato-bold-italic.woff deleted file mode 100644 index 88ad05b9f..000000000 Binary files a/v0.3.x/_static/css/fonts/lato-bold-italic.woff and /dev/null differ diff --git a/v0.3.x/_static/css/fonts/lato-bold-italic.woff2 b/v0.3.x/_static/css/fonts/lato-bold-italic.woff2 deleted file mode 100644 index c4e3d804b..000000000 Binary files a/v0.3.x/_static/css/fonts/lato-bold-italic.woff2 and /dev/null differ diff --git a/v0.3.x/_static/css/fonts/lato-bold.woff b/v0.3.x/_static/css/fonts/lato-bold.woff deleted file mode 100644 index c6dff51f0..000000000 Binary files a/v0.3.x/_static/css/fonts/lato-bold.woff and /dev/null differ diff --git a/v0.3.x/_static/css/fonts/lato-bold.woff2 b/v0.3.x/_static/css/fonts/lato-bold.woff2 deleted file mode 100644 index bb195043c..000000000 Binary files a/v0.3.x/_static/css/fonts/lato-bold.woff2 and /dev/null differ diff --git a/v0.3.x/_static/css/fonts/lato-normal-italic.woff b/v0.3.x/_static/css/fonts/lato-normal-italic.woff deleted file mode 100644 index 76114bc03..000000000 Binary files a/v0.3.x/_static/css/fonts/lato-normal-italic.woff and /dev/null differ diff --git a/v0.3.x/_static/css/fonts/lato-normal-italic.woff2 b/v0.3.x/_static/css/fonts/lato-normal-italic.woff2 deleted file mode 100644 index 3404f37e2..000000000 Binary files a/v0.3.x/_static/css/fonts/lato-normal-italic.woff2 and /dev/null differ diff --git a/v0.3.x/_static/css/fonts/lato-normal.woff b/v0.3.x/_static/css/fonts/lato-normal.woff deleted file mode 100644 index ae1307ff5..000000000 Binary files a/v0.3.x/_static/css/fonts/lato-normal.woff and /dev/null differ diff --git a/v0.3.x/_static/css/fonts/lato-normal.woff2 b/v0.3.x/_static/css/fonts/lato-normal.woff2 deleted file mode 100644 index 3bf984332..000000000 Binary files a/v0.3.x/_static/css/fonts/lato-normal.woff2 and /dev/null differ diff --git a/v0.3.x/_static/css/theme.css b/v0.3.x/_static/css/theme.css deleted file mode 100644 index 19a446a0e..000000000 --- a/v0.3.x/_static/css/theme.css +++ /dev/null @@ -1,4 +0,0 @@ -html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! - * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/v0.3.x/_static/custom.css b/v0.3.x/_static/custom.css deleted file mode 100644 index 05a52e900..000000000 --- a/v0.3.x/_static/custom.css +++ /dev/null @@ -1,274 +0,0 @@ -/** - - CHANGES FOR CUSTOM.CSS SHOULD BE MADE INSIDE CUSTOM.SCSS - - - - Requirements: - - - pip install compile-scss https://pypi.org/project/compile-scss/ - - - -To make changes to styling, first run the following in the root of the project: - - - pip install -e .[dev] - - - -Then you can edit and make changes to this file and see the results by doing the following: - - Steps: - - - Run: compile_scss --watch from inside /renku_sphinx_theme - - - That command will compile scss changes into css. - - - After doing changes commit scss and css files. - -*/ -.wy-nav-side { - background: #01192d; -} - -@media screen and (min-width: 1100px) { - .wy-nav-content-wrap { - background:#01192d; - } -} - -a { - color: #009568; -} - -a:hover { - color: #00bd84; -} - -a:visited { - color: #009568; -} - -.rst-content { - color: #3d3d3d; -} - -.rst-content code.literal { - color: #d26a98; -} - -.rst-content tt.literal { - color: #d26a98; -} - -.rst-content .note { - color: #003274; - background: #ccddf3; - padding: 1rem; - margin-bottom: 1rem; -} - -.rst-content .note .admonition-title { - display: none; -} - -.rst-content .warning { - color: #605000; - background: #fcf4cc; - padding: 1rem; - margin-bottom: 1rem; -} - -.rst-content .warning .admonition-title { - display: none; -} - -.rst-content .highlight { - background: #f5f5f5; -} - -.wy-side-scroll { - background-color: #01192d; -} - -.wy-side-nav-search { - background-color: #01192d; -} - -.wy-side-nav-search input[type="text"] { - width: 100%; - border-radius: 0px; - padding: 6px 12px; - border-color: #01192d; -} - -.wy-menu-vertical a { - font-size: 100%; - color: #d9d9d9; - padding-top: 0.6rem; - padding-bottom: 0.6rem; - background-color: inherit; -} - -.wy-menu-vertical a:hover { - background-color: unset; - opacity: 1; -} - -.wy-menu-vertical li.current > a { - background-color: #01192d; - color: white; -} - -.wy-menu-vertical li.current > a span.toctree-expand { - display: block; - font-size: inherit; - line-height: inherit; - color: inherit; -} - -.wy-menu-vertical li.current > a span.toctree-expand:before { - display: block; - font-size: inherit; - line-height: inherit; - color: inherit; -} - -.wy-menu-vertical li.current > a span.toctree-expand:hover { - color: white; -} - -.wy-menu-vertical li.current > a:hover { - background-color: #01192d; - color: white; -} - -.wy-menu-vertical li.current > a:hover span.toctree-expand { - color: white; -} - -.wy-menu-vertical .toctree-l1 { - opacity: 0.5; -} - -.wy-menu-vertical .toctree-l1:hover { - opacity: 1; - background-color: inherit; -} - -.wy-menu-vertical li.toctree-l1.current { - opacity: 1; - background-color: inherit; -} - -.wy-menu-vertical li.toctree-l1.current > a { - border: 0px; -} - -.wy-menu-vertical .toctree-l2:hover { - background-color: #566673; -} - -.wy-menu-vertical li.toctree-l2.current > a { - background-color: #566673; - color: white; -} - -.wy-menu-vertical li.toctree-l2.current li.toctree-l3 > a { - background-color: #e4e7ea; - color: #838383; -} - -.wy-menu-vertical li.toctree-l2.current li.toctree-l3 > a:hover { - color: #3d3d3d; -} - -.wy-menu-vertical li.toctree-l2.current li.toctree-l3 > a:hover span.toctree-expand { - color: #3d3d3d; -} - -.wy-menu-vertical li.toctree-l2.current li.toctree-l3.current > a { - color: #3d3d3d; -} - -.wy-menu-vertical li.toctree-l2 a { - border: 0px; - background-color: #566673; - color: #d9d9d9; -} - -.wy-menu-vertical li.toctree-l2 a span.toctree-expand { - display: block; - font-size: inherit; - line-height: inherit; - color: inherit; -} - -.wy-menu-vertical li.toctree-l2 a span.toctree-expand:before { - display: block; - font-size: inherit; - line-height: inherit; - color: inherit; -} - -.wy-menu-vertical li.toctree-l2 a span.toctree-expand:hover { - color: white; -} - -.wy-menu-vertical li.toctree-l2 a:hover { - color: white; - background-color: #566673; -} - -.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand { - color: white; -} - -.wy-menu-vertical li.toctree-l3.current > a { - background-color: #e4e7ea; - color: #838383; -} - -.wy-menu-vertical li.toctree-l3.current li.toctree-l4 > a { - background-color: #e4e7ea; - color: #838383; -} - -.wy-menu-vertical li.toctree-l3.current li.toctree-l4.current > a { - color: #3d3d3d; -} - -.wy-nav-top { - background-color: #01192d; -} - -.btn { - display: inline-block; - font-weight: 400; - line-height: 1.5; - color: #3d3d3d; - text-align: center; - text-decoration: none; - vertical-align: middle; - cursor: pointer; - -webkit-user-select: none; - -ms-user-select: none; - user-select: none; - background-color: transparent; - border: 1px solid transparent; - padding: 0.375rem 0.75rem; - font-size: 1rem; - border-radius: 0; - transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - box-shadow: unset; -} - -.btn-neutral { - background: unset !important; - color: #838383 !important; -} - -.btn-neutral:active { - padding: 0.375rem 0.75rem; - box-shadow: unset; -} diff --git a/v0.3.x/_static/custom.scss b/v0.3.x/_static/custom.scss deleted file mode 100644 index 035b16a0d..000000000 --- a/v0.3.x/_static/custom.scss +++ /dev/null @@ -1,292 +0,0 @@ -/** - CHANGES FOR CUSTOM.CSS SHOULD BE MADE INSIDE CUSTOM.SCSS - - Requirements: - - pip install compile-scss https://pypi.org/project/compile-scss/ - -To make changes to styling, first run the following in the root of the project: - - pip install -e .[dev] - -Then you can edit and make changes to this file and see the results by doing the following: - Steps: - - Run: compile_scss --watch from inside /renku_sphinx_theme - - That command will compile scss changes into css. - - After doing changes commit scss and css files. -*/ - -$rk-blue: #01192d; -$rk-green: #009568; -$rk-green-lighter: hsl(162, 100%, 37%); -$rk-background: #f5f5f5; -$rk-white: #f5f5f5; -$rk-dark: #3d3d3d; -$rk-warning-background: #fcf4cc; -$rk-warning-font: #605000; -$rk-info-background: #ccddf3; -$rk-info-font: #003274; -$rk-light-blue: #566673; -$rk-gray: #838383; -$rk-light-gray: #e4e7ea; -$rk-pink: #d26a98; - -//side background -.wy-nav-side { - background: $rk-blue; -} - -@media screen and (min-width: 1100px) { - .wy-nav-content-wrap { - background:$rk-blue; - } -} - -//all links are green -a { - color: $rk-green; - &:hover { - color: $rk-green-lighter; - } - &:visited { - color: $rk-green; - } -} - -// right content -- docs -.rst-content { - color: $rk-dark; - - // code color - code.literal { - color: $rk-pink; - } - - tt.literal { - color: $rk-pink; - } - - // note style - .note { - .admonition-title { - display: none; - } - color: $rk-info-font; - background: $rk-info-background; - padding: 1rem; - margin-bottom: 1rem; - } - - // warning style - .warning { - .admonition-title { - display: none; - } - color: $rk-warning-font; - background: $rk-warning-background; - padding: 1rem; - margin-bottom: 1rem; - } - - // code blocks - .highlight { - background: $rk-background; - } -} - -// menu background -.wy-side-scroll { - background-color: $rk-blue; -} - -// side nav -.wy-side-nav-search { - background-color: $rk-blue; - input[type="text"] { - width: 100%; - border-radius: 0px; - padding: 6px 12px; - border-color: $rk-blue; - } -} - -// Vertical menu -.wy-menu-vertical { - a { - font-size: 100%; - color: #d9d9d9; - padding-top: 0.6rem; - padding-bottom: 0.6rem; - background-color: inherit; - &:hover { - background-color: unset; - opacity: 1; - } - } - - // all links inside the menu - li.current { - > a { - background-color: $rk-blue; - color: white; - span.toctree-expand { - display: block; - font-size: inherit; - line-height: inherit; - color: inherit; - &:before { - display: block; - font-size: inherit; - line-height: inherit; - color: inherit; - } - &:hover { - color: white; - } - } - &:hover { - background-color: $rk-blue; - color: white; - span.toctree-expand { - color: white; - } - } - } - } - - // level 1 link - .toctree-l1 { - opacity: 0.5; - &:hover { - opacity: 1; - background-color: inherit; - } - } - - // selected level 1 link - li.toctree-l1.current { - opacity: 1; - background-color: inherit; - > a { - border: 0px; - } - } - - .toctree-l2 { - &:hover { - background-color: #566673; - } - } - - li.toctree-l2.current { - > a { - background-color: $rk-light-blue; - color: white; - } - li.toctree-l3 { - > a { - background-color: $rk-light-gray; - color: $rk-gray; - &:hover { - color: $rk-dark; - span.toctree-expand { - color: $rk-dark; - } - } - } - } - li.toctree-l3.current { - > a { - color: $rk-dark; - } - } - } - - li.toctree-l2 { - a { - border: 0px; - background-color: $rk-light-blue; - color: #d9d9d9; - // - span.toctree-expand { - display: block; - font-size: inherit; - line-height: inherit; - color: inherit; - &:before { - display: block; - font-size: inherit; - line-height: inherit; - color: inherit; - } - &:hover { - color: white; - } - } - // - &:hover { - color: white; - background-color: $rk-light-blue; - /// - span.toctree-expand { - color: white; - } - /// - } - } - } - - li.toctree-l3.current { - > a { - background-color: $rk-light-gray; - color: $rk-gray; - } - li.toctree-l4 { - > a { - background-color: $rk-light-gray; - color: $rk-gray; - } - &.current { - > a { - color: $rk-dark; - } - } - } - } -} - -// Responsive small navigation -.wy-nav-top { - background-color: $rk-blue; -} - -// Button -.btn { - display: inline-block; - font-weight: 400; - line-height: 1.5; - color: $rk-dark; - text-align: center; - text-decoration: none; - vertical-align: middle; - cursor: pointer; - -webkit-user-select: none; - -ms-user-select: none; - user-select: none; - background-color: transparent; - border: 1px solid transparent; - padding: 0.375rem 0.75rem; - font-size: 1rem; - border-radius: 0; - transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, - border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; - box-shadow: unset; -} - -// Neutral button - prev next -.btn-neutral { - background: unset !important; - color: $rk-gray !important; - &:active { - padding: 0.375rem 0.75rem; - box-shadow: unset; - } -} diff --git a/v0.3.x/_static/doctools.js b/v0.3.x/_static/doctools.js deleted file mode 100644 index d06a71d75..000000000 --- a/v0.3.x/_static/doctools.js +++ /dev/null @@ -1,156 +0,0 @@ -/* - * doctools.js - * ~~~~~~~~~~~ - * - * Base JavaScript utilities for all Sphinx HTML documentation. - * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ -"use strict"; - -const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ - "TEXTAREA", - "INPUT", - "SELECT", - "BUTTON", -]); - -const _ready = (callback) => { - if (document.readyState !== "loading") { - callback(); - } else { - document.addEventListener("DOMContentLoaded", callback); - } -}; - -/** - * Small JavaScript module for the documentation. - */ -const Documentation = { - init: () => { - Documentation.initDomainIndexTable(); - Documentation.initOnKeyListeners(); - }, - - /** - * i18n support - */ - TRANSLATIONS: {}, - PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), - LOCALE: "unknown", - - // gettext and ngettext don't access this so that the functions - // can safely bound to a different name (_ = Documentation.gettext) - gettext: (string) => { - const translated = Documentation.TRANSLATIONS[string]; - switch (typeof translated) { - case "undefined": - return string; // no translation - case "string": - return translated; // translation exists - default: - return translated[0]; // (singular, plural) translation tuple exists - } - }, - - ngettext: (singular, plural, n) => { - const translated = Documentation.TRANSLATIONS[singular]; - if (typeof translated !== "undefined") - return translated[Documentation.PLURAL_EXPR(n)]; - return n === 1 ? singular : plural; - }, - - addTranslations: (catalog) => { - Object.assign(Documentation.TRANSLATIONS, catalog.messages); - Documentation.PLURAL_EXPR = new Function( - "n", - `return (${catalog.plural_expr})` - ); - Documentation.LOCALE = catalog.locale; - }, - - /** - * helper function to focus on search bar - */ - focusSearchBar: () => { - document.querySelectorAll("input[name=q]")[0]?.focus(); - }, - - /** - * Initialise the domain index toggle buttons - */ - initDomainIndexTable: () => { - const toggler = (el) => { - const idNumber = el.id.substr(7); - const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); - if (el.src.substr(-9) === "minus.png") { - el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; - toggledRows.forEach((el) => (el.style.display = "none")); - } else { - el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; - toggledRows.forEach((el) => (el.style.display = "")); - } - }; - - const togglerElements = document.querySelectorAll("img.toggler"); - togglerElements.forEach((el) => - el.addEventListener("click", (event) => toggler(event.currentTarget)) - ); - togglerElements.forEach((el) => (el.style.display = "")); - if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); - }, - - initOnKeyListeners: () => { - // only install a listener if it is really needed - if ( - !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && - !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS - ) - return; - - document.addEventListener("keydown", (event) => { - // bail for input elements - if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; - // bail with special keys - if (event.altKey || event.ctrlKey || event.metaKey) return; - - if (!event.shiftKey) { - switch (event.key) { - case "ArrowLeft": - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; - - const prevLink = document.querySelector('link[rel="prev"]'); - if (prevLink && prevLink.href) { - window.location.href = prevLink.href; - event.preventDefault(); - } - break; - case "ArrowRight": - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; - - const nextLink = document.querySelector('link[rel="next"]'); - if (nextLink && nextLink.href) { - window.location.href = nextLink.href; - event.preventDefault(); - } - break; - } - } - - // some keyboard layouts may need Shift to get / - switch (event.key) { - case "/": - if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; - Documentation.focusSearchBar(); - event.preventDefault(); - } - }); - }, -}; - -// quick alias for translations -const _ = Documentation.gettext; - -_ready(Documentation.init); diff --git a/v0.3.x/_static/documentation_options.js b/v0.3.x/_static/documentation_options.js deleted file mode 100644 index 4dbf322b3..000000000 --- a/v0.3.x/_static/documentation_options.js +++ /dev/null @@ -1,14 +0,0 @@ -var DOCUMENTATION_OPTIONS = { - URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: 'v0.3.14', - LANGUAGE: 'en', - COLLAPSE_INDEX: false, - BUILDER: 'html', - FILE_SUFFIX: '.html', - LINK_SUFFIX: '.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt', - NAVIGATION_WITH_KEYS: false, - SHOW_SEARCH_SUMMARY: true, - ENABLE_SEARCH_SHORTCUTS: true, -}; \ No newline at end of file diff --git a/v0.3.x/_static/favicon.png b/v0.3.x/_static/favicon.png deleted file mode 100644 index 948a9b20e..000000000 Binary files a/v0.3.x/_static/favicon.png and /dev/null differ diff --git a/v0.3.x/_static/file.png b/v0.3.x/_static/file.png deleted file mode 100644 index a858a410e..000000000 Binary files a/v0.3.x/_static/file.png and /dev/null differ diff --git a/v0.3.x/_static/fonts.css b/v0.3.x/_static/fonts.css deleted file mode 100644 index a7acf062b..000000000 --- a/v0.3.x/_static/fonts.css +++ /dev/null @@ -1,41 +0,0 @@ -/* Webfont: Calcutta-Bold */ -@import url("https://fonts.googleapis.com/css2?family=Source+Code+Pro:ital,wght@0,400;0,500;1,400&display=swap"); -@font-face { - font-family: 'Calcutta'; - src: url("fonts/calcutta/Calcutta-Bold.eot"); - /* IE9 Compat Modes */ - src: url("fonts/calcutta/Calcutta-Bold.eot?#iefix") format("embedded-opentype"), url("fonts/calcutta/Calcutta-Bold.woff") format("woff"), url("fonts/calcutta/Calcutta-Bold.ttf") format("truetype"), url("fonts/calcutta/Calcutta-Bold.svg#Calcutta-Bold") format("svg"); - /* Legacy iOS */ - font-style: normal; - font-weight: 700; - text-rendering: optimizeLegibility !important; } - -/* Webfont: Calcutta-Medium */ -@font-face { - font-family: 'Calcutta'; - src: url("fonts/calcutta/Calcutta-Medium.eot"); - /* IE9 Compat Modes */ - src: url("fonts/calcutta/Calcutta-Medium.eot?#iefix") format("embedded-opentype"), url("fonts/calcutta/Calcutta-Medium.woff") format("woff"), url("fonts/calcutta/Calcutta-Medium.ttf") format("truetype"), url("fonts/calcutta/Calcutta-Medium.svg#Calcutta-Medium") format("svg"); - /* Legacy iOS */ - font-style: normal; - font-weight: 500; - text-rendering: optimizeLegibility !important; } - -/* Webfont: Calcutta-Regular */ -@font-face { - font-family: 'Calcutta'; - src: url("fonts/calcutta/Calcutta-Regular.eot"); - /* IE9 Compat Modes */ - src: url("fonts/calcutta/Calcutta-Regular.eot?#iefix") format("embedded-opentype"), url("fonts/calcutta/Calcutta-Regular.woff") format("woff"), url("fonts/calcutta/Calcutta-Regular.ttf") format("truetype"), url("fonts/calcutta/Calcutta-Regular.svg#Calcutta-Regular") format("svg"); - /* Legacy iOS */ - font-style: normal; - font-weight: 400; - text-rendering: optimizeLegibility; } - -body { - font-family: 'Calcutta', sans-serif; -} - -h1,h2,h3,h4,h5,h6{ - font-family: 'Calcutta', sans-serif; -} diff --git a/v0.3.x/_static/fonts/calcutta/Calcutta-Bold.eot b/v0.3.x/_static/fonts/calcutta/Calcutta-Bold.eot deleted file mode 100644 index 551926213..000000000 Binary files a/v0.3.x/_static/fonts/calcutta/Calcutta-Bold.eot and /dev/null differ diff --git a/v0.3.x/_static/fonts/calcutta/Calcutta-Bold.otf b/v0.3.x/_static/fonts/calcutta/Calcutta-Bold.otf deleted file mode 100644 index 5a75fe6d8..000000000 Binary files a/v0.3.x/_static/fonts/calcutta/Calcutta-Bold.otf and /dev/null differ diff --git a/v0.3.x/_static/fonts/calcutta/Calcutta-Bold.svg b/v0.3.x/_static/fonts/calcutta/Calcutta-Bold.svg deleted file mode 100644 index 15f250925..000000000 --- a/v0.3.x/_static/fonts/calcutta/Calcutta-Bold.svg +++ /dev/null @@ -1,1042 +0,0 @@ - - - - -Created by FontForge 20190801 at Tue Mar 28 12:10:51 2017 - By Unknown -Copyright (c) 2014 Indian Type Foundry (info@indiantypefoundry.com); Copyright (c) 2017 Cristiano Sobral (cssobral2013@gmail.com) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/v0.3.x/_static/fonts/calcutta/Calcutta-Bold.ttf b/v0.3.x/_static/fonts/calcutta/Calcutta-Bold.ttf deleted file mode 100644 index b7e9582b5..000000000 Binary files a/v0.3.x/_static/fonts/calcutta/Calcutta-Bold.ttf and /dev/null differ diff --git a/v0.3.x/_static/fonts/calcutta/Calcutta-Bold.woff b/v0.3.x/_static/fonts/calcutta/Calcutta-Bold.woff deleted file mode 100644 index 78974b498..000000000 Binary files a/v0.3.x/_static/fonts/calcutta/Calcutta-Bold.woff and /dev/null differ diff --git a/v0.3.x/_static/fonts/calcutta/Calcutta-Medium.eot b/v0.3.x/_static/fonts/calcutta/Calcutta-Medium.eot deleted file mode 100644 index 090dbf960..000000000 Binary files a/v0.3.x/_static/fonts/calcutta/Calcutta-Medium.eot and /dev/null differ diff --git a/v0.3.x/_static/fonts/calcutta/Calcutta-Medium.otf b/v0.3.x/_static/fonts/calcutta/Calcutta-Medium.otf deleted file mode 100644 index 48101a652..000000000 Binary files a/v0.3.x/_static/fonts/calcutta/Calcutta-Medium.otf and /dev/null differ diff --git a/v0.3.x/_static/fonts/calcutta/Calcutta-Medium.svg b/v0.3.x/_static/fonts/calcutta/Calcutta-Medium.svg deleted file mode 100644 index 0ea6ee0f9..000000000 --- a/v0.3.x/_static/fonts/calcutta/Calcutta-Medium.svg +++ /dev/null @@ -1,337 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/v0.3.x/_static/fonts/calcutta/Calcutta-Medium.ttf b/v0.3.x/_static/fonts/calcutta/Calcutta-Medium.ttf deleted file mode 100644 index 1382599c4..000000000 Binary files a/v0.3.x/_static/fonts/calcutta/Calcutta-Medium.ttf and /dev/null differ diff --git a/v0.3.x/_static/fonts/calcutta/Calcutta-Medium.woff b/v0.3.x/_static/fonts/calcutta/Calcutta-Medium.woff deleted file mode 100644 index bb7bd669b..000000000 Binary files a/v0.3.x/_static/fonts/calcutta/Calcutta-Medium.woff and /dev/null differ diff --git a/v0.3.x/_static/fonts/calcutta/Calcutta-Regular.eot b/v0.3.x/_static/fonts/calcutta/Calcutta-Regular.eot deleted file mode 100644 index bdd39cfd4..000000000 Binary files a/v0.3.x/_static/fonts/calcutta/Calcutta-Regular.eot and /dev/null differ diff --git a/v0.3.x/_static/fonts/calcutta/Calcutta-Regular.otf b/v0.3.x/_static/fonts/calcutta/Calcutta-Regular.otf deleted file mode 100644 index ad69e4aea..000000000 Binary files a/v0.3.x/_static/fonts/calcutta/Calcutta-Regular.otf and /dev/null differ diff --git a/v0.3.x/_static/fonts/calcutta/Calcutta-Regular.svg b/v0.3.x/_static/fonts/calcutta/Calcutta-Regular.svg deleted file mode 100644 index b08e6cbf1..000000000 --- a/v0.3.x/_static/fonts/calcutta/Calcutta-Regular.svg +++ /dev/null @@ -1,337 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/v0.3.x/_static/fonts/calcutta/Calcutta-Regular.ttf b/v0.3.x/_static/fonts/calcutta/Calcutta-Regular.ttf deleted file mode 100644 index e68749676..000000000 Binary files a/v0.3.x/_static/fonts/calcutta/Calcutta-Regular.ttf and /dev/null differ diff --git a/v0.3.x/_static/fonts/calcutta/Calcutta-Regular.woff b/v0.3.x/_static/fonts/calcutta/Calcutta-Regular.woff deleted file mode 100644 index 4be980627..000000000 Binary files a/v0.3.x/_static/fonts/calcutta/Calcutta-Regular.woff and /dev/null differ diff --git a/v0.3.x/_static/jquery.js b/v0.3.x/_static/jquery.js deleted file mode 100644 index c4c6022f2..000000000 --- a/v0.3.x/_static/jquery.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/v0.3.x/_static/js/html5shiv.min.js b/v0.3.x/_static/js/html5shiv.min.js deleted file mode 100644 index cd1c674f5..000000000 --- a/v0.3.x/_static/js/html5shiv.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/** -* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed -*/ -!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/v0.3.x/_static/js/theme.js b/v0.3.x/_static/js/theme.js deleted file mode 100644 index 1fddb6ee4..000000000 --- a/v0.3.x/_static/js/theme.js +++ /dev/null @@ -1 +0,0 @@ -!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("
"),n("table.docutils.footnote").wrap("
"),n("table.docutils.citation").wrap("
"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t0 - var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 - var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 - var s_v = "^(" + C + ")?" + v; // vowel in stem - - this.stemWord = function (w) { - var stem; - var suffix; - var firstch; - var origword = w; - - if (w.length < 3) - return w; - - var re; - var re2; - var re3; - var re4; - - firstch = w.substr(0,1); - if (firstch == "y") - w = firstch.toUpperCase() + w.substr(1); - - // Step 1a - re = /^(.+?)(ss|i)es$/; - re2 = /^(.+?)([^s])s$/; - - if (re.test(w)) - w = w.replace(re,"$1$2"); - else if (re2.test(w)) - w = w.replace(re2,"$1$2"); - - // Step 1b - re = /^(.+?)eed$/; - re2 = /^(.+?)(ed|ing)$/; - if (re.test(w)) { - var fp = re.exec(w); - re = new RegExp(mgr0); - if (re.test(fp[1])) { - re = /.$/; - w = w.replace(re,""); - } - } - else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1]; - re2 = new RegExp(s_v); - if (re2.test(stem)) { - w = stem; - re2 = /(at|bl|iz)$/; - re3 = new RegExp("([^aeiouylsz])\\1$"); - re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re2.test(w)) - w = w + "e"; - else if (re3.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - else if (re4.test(w)) - w = w + "e"; - } - } - - // Step 1c - re = /^(.+?)y$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(s_v); - if (re.test(stem)) - w = stem + "i"; - } - - // Step 2 - re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) - w = stem + step2list[suffix]; - } - - // Step 3 - re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) - w = stem + step3list[suffix]; - } - - // Step 4 - re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; - re2 = /^(.+?)(s|t)(ion)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - if (re.test(stem)) - w = stem; - } - else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1] + fp[2]; - re2 = new RegExp(mgr1); - if (re2.test(stem)) - w = stem; - } - - // Step 5 - re = /^(.+?)e$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - re2 = new RegExp(meq1); - re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) - w = stem; - } - re = /ll$/; - re2 = new RegExp(mgr1); - if (re.test(w) && re2.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - - // and turn initial Y back to y - if (firstch == "y") - w = firstch.toLowerCase() + w.substr(1); - return w; - } -} - diff --git a/v0.3.x/_static/minus.png b/v0.3.x/_static/minus.png deleted file mode 100644 index d96755fda..000000000 Binary files a/v0.3.x/_static/minus.png and /dev/null differ diff --git a/v0.3.x/_static/mosaic_logo.svg b/v0.3.x/_static/mosaic_logo.svg deleted file mode 100644 index 47c7f8823..000000000 --- a/v0.3.x/_static/mosaic_logo.svg +++ /dev/null @@ -1,76 +0,0 @@ - - - - -Created by potrace 1.16, written by Peter Selinger 2001-2019 - - - - - - - - - - - - - - - - - - - - - - diff --git a/v0.3.x/_static/nbsphinx-broken-thumbnail.svg b/v0.3.x/_static/nbsphinx-broken-thumbnail.svg deleted file mode 100644 index 4919ca882..000000000 --- a/v0.3.x/_static/nbsphinx-broken-thumbnail.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/v0.3.x/_static/nbsphinx-code-cells.css b/v0.3.x/_static/nbsphinx-code-cells.css deleted file mode 100644 index a3fb27c30..000000000 --- a/v0.3.x/_static/nbsphinx-code-cells.css +++ /dev/null @@ -1,259 +0,0 @@ -/* remove conflicting styling from Sphinx themes */ -div.nbinput.container div.prompt *, -div.nboutput.container div.prompt *, -div.nbinput.container div.input_area pre, -div.nboutput.container div.output_area pre, -div.nbinput.container div.input_area .highlight, -div.nboutput.container div.output_area .highlight { - border: none; - padding: 0; - margin: 0; - box-shadow: none; -} - -div.nbinput.container > div[class*=highlight], -div.nboutput.container > div[class*=highlight] { - margin: 0; -} - -div.nbinput.container div.prompt *, -div.nboutput.container div.prompt * { - background: none; -} - -div.nboutput.container div.output_area .highlight, -div.nboutput.container div.output_area pre { - background: unset; -} - -div.nboutput.container div.output_area div.highlight { - color: unset; /* override Pygments text color */ -} - -/* avoid gaps between output lines */ -div.nboutput.container div[class*=highlight] pre { - line-height: normal; -} - -/* input/output containers */ -div.nbinput.container, -div.nboutput.container { - display: -webkit-flex; - display: flex; - align-items: flex-start; - margin: 0; - width: 100%; -} -@media (max-width: 540px) { - div.nbinput.container, - div.nboutput.container { - flex-direction: column; - } -} - -/* input container */ -div.nbinput.container { - padding-top: 5px; -} - -/* last container */ -div.nblast.container { - padding-bottom: 5px; -} - -/* input prompt */ -div.nbinput.container div.prompt pre, -/* for sphinx_immaterial theme: */ -div.nbinput.container div.prompt pre > code { - color: #307FC1; -} - -/* output prompt */ -div.nboutput.container div.prompt pre, -/* for sphinx_immaterial theme: */ -div.nboutput.container div.prompt pre > code { - color: #BF5B3D; -} - -/* all prompts */ -div.nbinput.container div.prompt, -div.nboutput.container div.prompt { - width: 4.5ex; - padding-top: 5px; - position: relative; - user-select: none; -} - -div.nbinput.container div.prompt > div, -div.nboutput.container div.prompt > div { - position: absolute; - right: 0; - margin-right: 0.3ex; -} - -@media (max-width: 540px) { - div.nbinput.container div.prompt, - div.nboutput.container div.prompt { - width: unset; - text-align: left; - padding: 0.4em; - } - div.nboutput.container div.prompt.empty { - padding: 0; - } - - div.nbinput.container div.prompt > div, - div.nboutput.container div.prompt > div { - position: unset; - } -} - -/* disable scrollbars and line breaks on prompts */ -div.nbinput.container div.prompt pre, -div.nboutput.container div.prompt pre { - overflow: hidden; - white-space: pre; -} - -/* input/output area */ -div.nbinput.container div.input_area, -div.nboutput.container div.output_area { - -webkit-flex: 1; - flex: 1; - overflow: auto; -} -@media (max-width: 540px) { - div.nbinput.container div.input_area, - div.nboutput.container div.output_area { - width: 100%; - } -} - -/* input area */ -div.nbinput.container div.input_area { - border: 1px solid #e0e0e0; - border-radius: 2px; - /*background: #f5f5f5;*/ -} - -/* override MathJax center alignment in output cells */ -div.nboutput.container div[class*=MathJax] { - text-align: left !important; -} - -/* override sphinx.ext.imgmath center alignment in output cells */ -div.nboutput.container div.math p { - text-align: left; -} - -/* standard error */ -div.nboutput.container div.output_area.stderr { - background: #fdd; -} - -/* ANSI colors */ -.ansi-black-fg { color: #3E424D; } -.ansi-black-bg { background-color: #3E424D; } -.ansi-black-intense-fg { color: #282C36; } -.ansi-black-intense-bg { background-color: #282C36; } -.ansi-red-fg { color: #E75C58; } -.ansi-red-bg { background-color: #E75C58; } -.ansi-red-intense-fg { color: #B22B31; } -.ansi-red-intense-bg { background-color: #B22B31; } -.ansi-green-fg { color: #00A250; } -.ansi-green-bg { background-color: #00A250; } -.ansi-green-intense-fg { color: #007427; } -.ansi-green-intense-bg { background-color: #007427; } -.ansi-yellow-fg { color: #DDB62B; } -.ansi-yellow-bg { background-color: #DDB62B; } -.ansi-yellow-intense-fg { color: #B27D12; } -.ansi-yellow-intense-bg { background-color: #B27D12; } -.ansi-blue-fg { color: #208FFB; } -.ansi-blue-bg { background-color: #208FFB; } -.ansi-blue-intense-fg { color: #0065CA; } -.ansi-blue-intense-bg { background-color: #0065CA; } -.ansi-magenta-fg { color: #D160C4; } -.ansi-magenta-bg { background-color: #D160C4; } -.ansi-magenta-intense-fg { color: #A03196; } -.ansi-magenta-intense-bg { background-color: #A03196; } -.ansi-cyan-fg { color: #60C6C8; } -.ansi-cyan-bg { background-color: #60C6C8; } -.ansi-cyan-intense-fg { color: #258F8F; } -.ansi-cyan-intense-bg { background-color: #258F8F; } -.ansi-white-fg { color: #C5C1B4; } -.ansi-white-bg { background-color: #C5C1B4; } -.ansi-white-intense-fg { color: #A1A6B2; } -.ansi-white-intense-bg { background-color: #A1A6B2; } - -.ansi-default-inverse-fg { color: #FFFFFF; } -.ansi-default-inverse-bg { background-color: #000000; } - -.ansi-bold { font-weight: bold; } -.ansi-underline { text-decoration: underline; } - - -div.nbinput.container div.input_area div[class*=highlight] > pre, -div.nboutput.container div.output_area div[class*=highlight] > pre, -div.nboutput.container div.output_area div[class*=highlight].math, -div.nboutput.container div.output_area.rendered_html, -div.nboutput.container div.output_area > div.output_javascript, -div.nboutput.container div.output_area:not(.rendered_html) > img{ - padding: 5px; - margin: 0; -} - -/* fix copybtn overflow problem in chromium (needed for 'sphinx_copybutton') */ -div.nbinput.container div.input_area > div[class^='highlight'], -div.nboutput.container div.output_area > div[class^='highlight']{ - overflow-y: hidden; -} - -/* hide copy button on prompts for 'sphinx_copybutton' extension ... */ -.prompt .copybtn, -/* ... and 'sphinx_immaterial' theme */ -.prompt .md-clipboard.md-icon { - display: none; -} - -/* Some additional styling taken form the Jupyter notebook CSS */ -.jp-RenderedHTMLCommon table, -div.rendered_html table { - border: none; - border-collapse: collapse; - border-spacing: 0; - color: black; - font-size: 12px; - table-layout: fixed; -} -.jp-RenderedHTMLCommon thead, -div.rendered_html thead { - border-bottom: 1px solid black; - vertical-align: bottom; -} -.jp-RenderedHTMLCommon tr, -.jp-RenderedHTMLCommon th, -.jp-RenderedHTMLCommon td, -div.rendered_html tr, -div.rendered_html th, -div.rendered_html td { - text-align: right; - vertical-align: middle; - padding: 0.5em 0.5em; - line-height: normal; - white-space: normal; - max-width: none; - border: none; -} -.jp-RenderedHTMLCommon th, -div.rendered_html th { - font-weight: bold; -} -.jp-RenderedHTMLCommon tbody tr:nth-child(odd), -div.rendered_html tbody tr:nth-child(odd) { - background: #f5f5f5; -} -.jp-RenderedHTMLCommon tbody tr:hover, -div.rendered_html tbody tr:hover { - background: rgba(66, 165, 245, 0.2); -} - diff --git a/v0.3.x/_static/nbsphinx-gallery.css b/v0.3.x/_static/nbsphinx-gallery.css deleted file mode 100644 index 365c27a96..000000000 --- a/v0.3.x/_static/nbsphinx-gallery.css +++ /dev/null @@ -1,31 +0,0 @@ -.nbsphinx-gallery { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); - gap: 5px; - margin-top: 1em; - margin-bottom: 1em; -} - -.nbsphinx-gallery > a { - padding: 5px; - border: 1px dotted currentColor; - border-radius: 2px; - text-align: center; -} - -.nbsphinx-gallery > a:hover { - border-style: solid; -} - -.nbsphinx-gallery img { - max-width: 100%; - max-height: 100%; -} - -.nbsphinx-gallery > a > div:first-child { - display: flex; - align-items: start; - justify-content: center; - height: 120px; - margin-bottom: 5px; -} diff --git a/v0.3.x/_static/nbsphinx-no-thumbnail.svg b/v0.3.x/_static/nbsphinx-no-thumbnail.svg deleted file mode 100644 index 9dca7588f..000000000 --- a/v0.3.x/_static/nbsphinx-no-thumbnail.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/v0.3.x/_static/plus.png b/v0.3.x/_static/plus.png deleted file mode 100644 index 7107cec93..000000000 Binary files a/v0.3.x/_static/plus.png and /dev/null differ diff --git a/v0.3.x/_static/pygments.css b/v0.3.x/_static/pygments.css deleted file mode 100644 index 0d49244ed..000000000 --- a/v0.3.x/_static/pygments.css +++ /dev/null @@ -1,75 +0,0 @@ -pre { line-height: 125%; } -td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } -span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } -td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } -span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } -.highlight .hll { background-color: #ffffcc } -.highlight { background: #eeffcc; } -.highlight .c { color: #408090; font-style: italic } /* Comment */ -.highlight .err { border: 1px solid #FF0000 } /* Error */ -.highlight .k { color: #007020; font-weight: bold } /* Keyword */ -.highlight .o { color: #666666 } /* Operator */ -.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */ -.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: #007020 } /* Comment.Preproc */ -.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */ -.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ -.highlight .gd { color: #A00000 } /* Generic.Deleted */ -.highlight .ge { font-style: italic } /* Generic.Emph */ -.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ -.highlight .gr { color: #FF0000 } /* Generic.Error */ -.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ -.highlight .gi { color: #00A000 } /* Generic.Inserted */ -.highlight .go { color: #333333 } /* Generic.Output */ -.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ -.highlight .gs { font-weight: bold } /* Generic.Strong */ -.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ -.highlight .gt { color: #0044DD } /* Generic.Traceback */ -.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ -.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ -.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ -.highlight .kp { color: #007020 } /* Keyword.Pseudo */ -.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ -.highlight .kt { color: #902000 } /* Keyword.Type */ -.highlight .m { color: #208050 } /* Literal.Number */ -.highlight .s { color: #4070a0 } /* Literal.String */ -.highlight .na { color: #4070a0 } /* Name.Attribute */ -.highlight .nb { color: #007020 } /* Name.Builtin */ -.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ -.highlight .no { color: #60add5 } /* Name.Constant */ -.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ -.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ -.highlight .ne { color: #007020 } /* Name.Exception */ -.highlight .nf { color: #06287e } /* Name.Function */ -.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ -.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ -.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ -.highlight .nv { color: #bb60d5 } /* Name.Variable */ -.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ -.highlight .w { color: #bbbbbb } /* Text.Whitespace */ -.highlight .mb { color: #208050 } /* Literal.Number.Bin */ -.highlight .mf { color: #208050 } /* Literal.Number.Float */ -.highlight .mh { color: #208050 } /* Literal.Number.Hex */ -.highlight .mi { color: #208050 } /* Literal.Number.Integer */ -.highlight .mo { color: #208050 } /* Literal.Number.Oct */ -.highlight .sa { color: #4070a0 } /* Literal.String.Affix */ -.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ -.highlight .sc { color: #4070a0 } /* Literal.String.Char */ -.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */ -.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ -.highlight .s2 { color: #4070a0 } /* Literal.String.Double */ -.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ -.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ -.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ -.highlight .sx { color: #c65d09 } /* Literal.String.Other */ -.highlight .sr { color: #235388 } /* Literal.String.Regex */ -.highlight .s1 { color: #4070a0 } /* Literal.String.Single */ -.highlight .ss { color: #517918 } /* Literal.String.Symbol */ -.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ -.highlight .fm { color: #06287e } /* Name.Function.Magic */ -.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ -.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ -.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ -.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */ -.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/v0.3.x/_static/searchtools.js b/v0.3.x/_static/searchtools.js deleted file mode 100644 index 97d56a74d..000000000 --- a/v0.3.x/_static/searchtools.js +++ /dev/null @@ -1,566 +0,0 @@ -/* - * searchtools.js - * ~~~~~~~~~~~~~~~~ - * - * Sphinx JavaScript utilities for the full-text search. - * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ -"use strict"; - -/** - * Simple result scoring code. - */ -if (typeof Scorer === "undefined") { - var Scorer = { - // Implement the following function to further tweak the score for each result - // The function takes a result array [docname, title, anchor, descr, score, filename] - // and returns the new score. - /* - score: result => { - const [docname, title, anchor, descr, score, filename] = result - return score - }, - */ - - // query matches the full name of an object - objNameMatch: 11, - // or matches in the last dotted part of the object name - objPartialMatch: 6, - // Additive scores depending on the priority of the object - objPrio: { - 0: 15, // used to be importantResults - 1: 5, // used to be objectResults - 2: -5, // used to be unimportantResults - }, - // Used when the priority is not in the mapping. - objPrioDefault: 0, - - // query found in title - title: 15, - partialTitle: 7, - // query found in terms - term: 5, - partialTerm: 2, - }; -} - -const _removeChildren = (element) => { - while (element && element.lastChild) element.removeChild(element.lastChild); -}; - -/** - * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping - */ -const _escapeRegExp = (string) => - string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string - -const _displayItem = (item, searchTerms) => { - const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; - const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT; - const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; - const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; - const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; - - const [docName, title, anchor, descr, score, _filename] = item; - - let listItem = document.createElement("li"); - let requestUrl; - let linkUrl; - if (docBuilder === "dirhtml") { - // dirhtml builder - let dirname = docName + "/"; - if (dirname.match(/\/index\/$/)) - dirname = dirname.substring(0, dirname.length - 6); - else if (dirname === "index/") dirname = ""; - requestUrl = docUrlRoot + dirname; - linkUrl = requestUrl; - } else { - // normal html builders - requestUrl = docUrlRoot + docName + docFileSuffix; - linkUrl = docName + docLinkSuffix; - } - let linkEl = listItem.appendChild(document.createElement("a")); - linkEl.href = linkUrl + anchor; - linkEl.dataset.score = score; - linkEl.innerHTML = title; - if (descr) - listItem.appendChild(document.createElement("span")).innerHTML = - " (" + descr + ")"; - else if (showSearchSummary) - fetch(requestUrl) - .then((responseData) => responseData.text()) - .then((data) => { - if (data) - listItem.appendChild( - Search.makeSearchSummary(data, searchTerms) - ); - }); - Search.output.appendChild(listItem); -}; -const _finishSearch = (resultCount) => { - Search.stopPulse(); - Search.title.innerText = _("Search Results"); - if (!resultCount) - Search.status.innerText = Documentation.gettext( - "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." - ); - else - Search.status.innerText = _( - `Search finished, found ${resultCount} page(s) matching the search query.` - ); -}; -const _displayNextItem = ( - results, - resultCount, - searchTerms -) => { - // results left, load the summary and display it - // this is intended to be dynamic (don't sub resultsCount) - if (results.length) { - _displayItem(results.pop(), searchTerms); - setTimeout( - () => _displayNextItem(results, resultCount, searchTerms), - 5 - ); - } - // search finished, update title and status message - else _finishSearch(resultCount); -}; - -/** - * Default splitQuery function. Can be overridden in ``sphinx.search`` with a - * custom function per language. - * - * The regular expression works by splitting the string on consecutive characters - * that are not Unicode letters, numbers, underscores, or emoji characters. - * This is the same as ``\W+`` in Python, preserving the surrogate pair area. - */ -if (typeof splitQuery === "undefined") { - var splitQuery = (query) => query - .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) - .filter(term => term) // remove remaining empty strings -} - -/** - * Search Module - */ -const Search = { - _index: null, - _queued_query: null, - _pulse_status: -1, - - htmlToText: (htmlString) => { - const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); - htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); - const docContent = htmlElement.querySelector('[role="main"]'); - if (docContent !== undefined) return docContent.textContent; - console.warn( - "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." - ); - return ""; - }, - - init: () => { - const query = new URLSearchParams(window.location.search).get("q"); - document - .querySelectorAll('input[name="q"]') - .forEach((el) => (el.value = query)); - if (query) Search.performSearch(query); - }, - - loadIndex: (url) => - (document.body.appendChild(document.createElement("script")).src = url), - - setIndex: (index) => { - Search._index = index; - if (Search._queued_query !== null) { - const query = Search._queued_query; - Search._queued_query = null; - Search.query(query); - } - }, - - hasIndex: () => Search._index !== null, - - deferQuery: (query) => (Search._queued_query = query), - - stopPulse: () => (Search._pulse_status = -1), - - startPulse: () => { - if (Search._pulse_status >= 0) return; - - const pulse = () => { - Search._pulse_status = (Search._pulse_status + 1) % 4; - Search.dots.innerText = ".".repeat(Search._pulse_status); - if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); - }; - pulse(); - }, - - /** - * perform a search for something (or wait until index is loaded) - */ - performSearch: (query) => { - // create the required interface elements - const searchText = document.createElement("h2"); - searchText.textContent = _("Searching"); - const searchSummary = document.createElement("p"); - searchSummary.classList.add("search-summary"); - searchSummary.innerText = ""; - const searchList = document.createElement("ul"); - searchList.classList.add("search"); - - const out = document.getElementById("search-results"); - Search.title = out.appendChild(searchText); - Search.dots = Search.title.appendChild(document.createElement("span")); - Search.status = out.appendChild(searchSummary); - Search.output = out.appendChild(searchList); - - const searchProgress = document.getElementById("search-progress"); - // Some themes don't use the search progress node - if (searchProgress) { - searchProgress.innerText = _("Preparing search..."); - } - Search.startPulse(); - - // index already loaded, the browser was quick! - if (Search.hasIndex()) Search.query(query); - else Search.deferQuery(query); - }, - - /** - * execute search (requires search index to be loaded) - */ - query: (query) => { - const filenames = Search._index.filenames; - const docNames = Search._index.docnames; - const titles = Search._index.titles; - const allTitles = Search._index.alltitles; - const indexEntries = Search._index.indexentries; - - // stem the search terms and add them to the correct list - const stemmer = new Stemmer(); - const searchTerms = new Set(); - const excludedTerms = new Set(); - const highlightTerms = new Set(); - const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); - splitQuery(query.trim()).forEach((queryTerm) => { - const queryTermLower = queryTerm.toLowerCase(); - - // maybe skip this "word" - // stopwords array is from language_data.js - if ( - stopwords.indexOf(queryTermLower) !== -1 || - queryTerm.match(/^\d+$/) - ) - return; - - // stem the word - let word = stemmer.stemWord(queryTermLower); - // select the correct list - if (word[0] === "-") excludedTerms.add(word.substr(1)); - else { - searchTerms.add(word); - highlightTerms.add(queryTermLower); - } - }); - - if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js - localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) - } - - // console.debug("SEARCH: searching for:"); - // console.info("required: ", [...searchTerms]); - // console.info("excluded: ", [...excludedTerms]); - - // array of [docname, title, anchor, descr, score, filename] - let results = []; - _removeChildren(document.getElementById("search-progress")); - - const queryLower = query.toLowerCase(); - for (const [title, foundTitles] of Object.entries(allTitles)) { - if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { - for (const [file, id] of foundTitles) { - let score = Math.round(100 * queryLower.length / title.length) - results.push([ - docNames[file], - titles[file] !== title ? `${titles[file]} > ${title}` : title, - id !== null ? "#" + id : "", - null, - score, - filenames[file], - ]); - } - } - } - - // search for explicit entries in index directives - for (const [entry, foundEntries] of Object.entries(indexEntries)) { - if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { - for (const [file, id] of foundEntries) { - let score = Math.round(100 * queryLower.length / entry.length) - results.push([ - docNames[file], - titles[file], - id ? "#" + id : "", - null, - score, - filenames[file], - ]); - } - } - } - - // lookup as object - objectTerms.forEach((term) => - results.push(...Search.performObjectSearch(term, objectTerms)) - ); - - // lookup as search terms in fulltext - results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); - - // let the scorer override scores with a custom scoring function - if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); - - // now sort the results by score (in opposite order of appearance, since the - // display function below uses pop() to retrieve items) and then - // alphabetically - results.sort((a, b) => { - const leftScore = a[4]; - const rightScore = b[4]; - if (leftScore === rightScore) { - // same score: sort alphabetically - const leftTitle = a[1].toLowerCase(); - const rightTitle = b[1].toLowerCase(); - if (leftTitle === rightTitle) return 0; - return leftTitle > rightTitle ? -1 : 1; // inverted is intentional - } - return leftScore > rightScore ? 1 : -1; - }); - - // remove duplicate search results - // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept - let seen = new Set(); - results = results.reverse().reduce((acc, result) => { - let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); - if (!seen.has(resultStr)) { - acc.push(result); - seen.add(resultStr); - } - return acc; - }, []); - - results = results.reverse(); - - // for debugging - //Search.lastresults = results.slice(); // a copy - // console.info("search results:", Search.lastresults); - - // print the results - _displayNextItem(results, results.length, searchTerms); - }, - - /** - * search for object names - */ - performObjectSearch: (object, objectTerms) => { - const filenames = Search._index.filenames; - const docNames = Search._index.docnames; - const objects = Search._index.objects; - const objNames = Search._index.objnames; - const titles = Search._index.titles; - - const results = []; - - const objectSearchCallback = (prefix, match) => { - const name = match[4] - const fullname = (prefix ? prefix + "." : "") + name; - const fullnameLower = fullname.toLowerCase(); - if (fullnameLower.indexOf(object) < 0) return; - - let score = 0; - const parts = fullnameLower.split("."); - - // check for different match types: exact matches of full name or - // "last name" (i.e. last dotted part) - if (fullnameLower === object || parts.slice(-1)[0] === object) - score += Scorer.objNameMatch; - else if (parts.slice(-1)[0].indexOf(object) > -1) - score += Scorer.objPartialMatch; // matches in last name - - const objName = objNames[match[1]][2]; - const title = titles[match[0]]; - - // If more than one term searched for, we require other words to be - // found in the name/title/description - const otherTerms = new Set(objectTerms); - otherTerms.delete(object); - if (otherTerms.size > 0) { - const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); - if ( - [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) - ) - return; - } - - let anchor = match[3]; - if (anchor === "") anchor = fullname; - else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; - - const descr = objName + _(", in ") + title; - - // add custom score for some objects according to scorer - if (Scorer.objPrio.hasOwnProperty(match[2])) - score += Scorer.objPrio[match[2]]; - else score += Scorer.objPrioDefault; - - results.push([ - docNames[match[0]], - fullname, - "#" + anchor, - descr, - score, - filenames[match[0]], - ]); - }; - Object.keys(objects).forEach((prefix) => - objects[prefix].forEach((array) => - objectSearchCallback(prefix, array) - ) - ); - return results; - }, - - /** - * search for full-text terms in the index - */ - performTermsSearch: (searchTerms, excludedTerms) => { - // prepare search - const terms = Search._index.terms; - const titleTerms = Search._index.titleterms; - const filenames = Search._index.filenames; - const docNames = Search._index.docnames; - const titles = Search._index.titles; - - const scoreMap = new Map(); - const fileMap = new Map(); - - // perform the search on the required terms - searchTerms.forEach((word) => { - const files = []; - const arr = [ - { files: terms[word], score: Scorer.term }, - { files: titleTerms[word], score: Scorer.title }, - ]; - // add support for partial matches - if (word.length > 2) { - const escapedWord = _escapeRegExp(word); - Object.keys(terms).forEach((term) => { - if (term.match(escapedWord) && !terms[word]) - arr.push({ files: terms[term], score: Scorer.partialTerm }); - }); - Object.keys(titleTerms).forEach((term) => { - if (term.match(escapedWord) && !titleTerms[word]) - arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); - }); - } - - // no match but word was a required one - if (arr.every((record) => record.files === undefined)) return; - - // found search word in contents - arr.forEach((record) => { - if (record.files === undefined) return; - - let recordFiles = record.files; - if (recordFiles.length === undefined) recordFiles = [recordFiles]; - files.push(...recordFiles); - - // set score for the word in each file - recordFiles.forEach((file) => { - if (!scoreMap.has(file)) scoreMap.set(file, {}); - scoreMap.get(file)[word] = record.score; - }); - }); - - // create the mapping - files.forEach((file) => { - if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) - fileMap.get(file).push(word); - else fileMap.set(file, [word]); - }); - }); - - // now check if the files don't contain excluded terms - const results = []; - for (const [file, wordList] of fileMap) { - // check if all requirements are matched - - // as search terms with length < 3 are discarded - const filteredTermCount = [...searchTerms].filter( - (term) => term.length > 2 - ).length; - if ( - wordList.length !== searchTerms.size && - wordList.length !== filteredTermCount - ) - continue; - - // ensure that none of the excluded terms is in the search result - if ( - [...excludedTerms].some( - (term) => - terms[term] === file || - titleTerms[term] === file || - (terms[term] || []).includes(file) || - (titleTerms[term] || []).includes(file) - ) - ) - break; - - // select one (max) score for the file. - const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); - // add result to the result list - results.push([ - docNames[file], - titles[file], - "", - null, - score, - filenames[file], - ]); - } - return results; - }, - - /** - * helper function to return a node containing the - * search summary for a given text. keywords is a list - * of stemmed words. - */ - makeSearchSummary: (htmlText, keywords) => { - const text = Search.htmlToText(htmlText); - if (text === "") return null; - - const textLower = text.toLowerCase(); - const actualStartPosition = [...keywords] - .map((k) => textLower.indexOf(k.toLowerCase())) - .filter((i) => i > -1) - .slice(-1)[0]; - const startWithContext = Math.max(actualStartPosition - 120, 0); - - const top = startWithContext === 0 ? "" : "..."; - const tail = startWithContext + 240 < text.length ? "..." : ""; - - let summary = document.createElement("p"); - summary.classList.add("context"); - summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; - - return summary; - }, -}; - -_ready(Search.init); diff --git a/v0.3.x/_static/sphinx_highlight.js b/v0.3.x/_static/sphinx_highlight.js deleted file mode 100644 index aae669d7e..000000000 --- a/v0.3.x/_static/sphinx_highlight.js +++ /dev/null @@ -1,144 +0,0 @@ -/* Highlighting utilities for Sphinx HTML documentation. */ -"use strict"; - -const SPHINX_HIGHLIGHT_ENABLED = true - -/** - * highlight a given string on a node by wrapping it in - * span elements with the given class name. - */ -const _highlight = (node, addItems, text, className) => { - if (node.nodeType === Node.TEXT_NODE) { - const val = node.nodeValue; - const parent = node.parentNode; - const pos = val.toLowerCase().indexOf(text); - if ( - pos >= 0 && - !parent.classList.contains(className) && - !parent.classList.contains("nohighlight") - ) { - let span; - - const closestNode = parent.closest("body, svg, foreignObject"); - const isInSVG = closestNode && closestNode.matches("svg"); - if (isInSVG) { - span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); - } else { - span = document.createElement("span"); - span.classList.add(className); - } - - span.appendChild(document.createTextNode(val.substr(pos, text.length))); - parent.insertBefore( - span, - parent.insertBefore( - document.createTextNode(val.substr(pos + text.length)), - node.nextSibling - ) - ); - node.nodeValue = val.substr(0, pos); - - if (isInSVG) { - const rect = document.createElementNS( - "http://www.w3.org/2000/svg", - "rect" - ); - const bbox = parent.getBBox(); - rect.x.baseVal.value = bbox.x; - rect.y.baseVal.value = bbox.y; - rect.width.baseVal.value = bbox.width; - rect.height.baseVal.value = bbox.height; - rect.setAttribute("class", className); - addItems.push({ parent: parent, target: rect }); - } - } - } else if (node.matches && !node.matches("button, select, textarea")) { - node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); - } -}; -const _highlightText = (thisNode, text, className) => { - let addItems = []; - _highlight(thisNode, addItems, text, className); - addItems.forEach((obj) => - obj.parent.insertAdjacentElement("beforebegin", obj.target) - ); -}; - -/** - * Small JavaScript module for the documentation. - */ -const SphinxHighlight = { - - /** - * highlight the search words provided in localstorage in the text - */ - highlightSearchWords: () => { - if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight - - // get and clear terms from localstorage - const url = new URL(window.location); - const highlight = - localStorage.getItem("sphinx_highlight_terms") - || url.searchParams.get("highlight") - || ""; - localStorage.removeItem("sphinx_highlight_terms") - url.searchParams.delete("highlight"); - window.history.replaceState({}, "", url); - - // get individual terms from highlight string - const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); - if (terms.length === 0) return; // nothing to do - - // There should never be more than one element matching "div.body" - const divBody = document.querySelectorAll("div.body"); - const body = divBody.length ? divBody[0] : document.querySelector("body"); - window.setTimeout(() => { - terms.forEach((term) => _highlightText(body, term, "highlighted")); - }, 10); - - const searchBox = document.getElementById("searchbox"); - if (searchBox === null) return; - searchBox.appendChild( - document - .createRange() - .createContextualFragment( - '" - ) - ); - }, - - /** - * helper function to hide the search marks again - */ - hideSearchWords: () => { - document - .querySelectorAll("#searchbox .highlight-link") - .forEach((el) => el.remove()); - document - .querySelectorAll("span.highlighted") - .forEach((el) => el.classList.remove("highlighted")); - localStorage.removeItem("sphinx_highlight_terms") - }, - - initEscapeListener: () => { - // only install a listener if it is really needed - if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; - - document.addEventListener("keydown", (event) => { - // bail for input elements - if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; - // bail with special keys - if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; - if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { - SphinxHighlight.hideSearchWords(); - event.preventDefault(); - } - }); - }, -}; - -_ready(SphinxHighlight.highlightSearchWords); -_ready(SphinxHighlight.initEscapeListener); diff --git a/v0.3.x/_static/tabs.css b/v0.3.x/_static/tabs.css deleted file mode 100644 index 957ba60d6..000000000 --- a/v0.3.x/_static/tabs.css +++ /dev/null @@ -1,89 +0,0 @@ -.sphinx-tabs { - margin-bottom: 1rem; -} - -[role="tablist"] { - border-bottom: 1px solid #a0b3bf; -} - -.sphinx-tabs-tab { - position: relative; - font-family: Lato,'Helvetica Neue',Arial,Helvetica,sans-serif; - color: #1D5C87; - line-height: 24px; - margin: 0; - font-size: 16px; - font-weight: 400; - background-color: rgba(255, 255, 255, 0); - border-radius: 5px 5px 0 0; - border: 0; - padding: 1rem 1.5rem; - margin-bottom: 0; -} - -.sphinx-tabs-tab[aria-selected="true"] { - font-weight: 700; - border: 1px solid #a0b3bf; - border-bottom: 1px solid white; - margin: -1px; - background-color: white; -} - -.sphinx-tabs-tab:focus { - z-index: 1; - outline-offset: 1px; -} - -.sphinx-tabs-panel { - position: relative; - padding: 1rem; - border: 1px solid #a0b3bf; - margin: 0px -1px -1px -1px; - border-radius: 0 0 5px 5px; - border-top: 0; - background: white; -} - -.sphinx-tabs-panel.code-tab { - padding: 0.4rem; -} - -.sphinx-tab img { - margin-bottom: 24 px; -} - -/* Dark theme preference styling */ - -@media (prefers-color-scheme: dark) { - body[data-theme="auto"] .sphinx-tabs-panel { - color: white; - background-color: rgb(50, 50, 50); - } - - body[data-theme="auto"] .sphinx-tabs-tab { - color: white; - background-color: rgba(255, 255, 255, 0.05); - } - - body[data-theme="auto"] .sphinx-tabs-tab[aria-selected="true"] { - border-bottom: 1px solid rgb(50, 50, 50); - background-color: rgb(50, 50, 50); - } -} - -/* Explicit dark theme styling */ - -body[data-theme="dark"] .sphinx-tabs-panel { - color: white; - background-color: rgb(50, 50, 50); -} - -body[data-theme="dark"] .sphinx-tabs-tab { - color: white; - background-color: rgba(255, 255, 255, 0.05); -} - -body[data-theme="dark"] .sphinx-tabs-tab[aria-selected="true"] { - border-bottom: 2px solid rgb(50, 50, 50); - background-color: rgb(50, 50, 50); -} diff --git a/v0.3.x/_static/tabs.js b/v0.3.x/_static/tabs.js deleted file mode 100644 index 48dc303c8..000000000 --- a/v0.3.x/_static/tabs.js +++ /dev/null @@ -1,145 +0,0 @@ -try { - var session = window.sessionStorage || {}; -} catch (e) { - var session = {}; -} - -window.addEventListener("DOMContentLoaded", () => { - const allTabs = document.querySelectorAll('.sphinx-tabs-tab'); - const tabLists = document.querySelectorAll('[role="tablist"]'); - - allTabs.forEach(tab => { - tab.addEventListener("click", changeTabs); - }); - - tabLists.forEach(tabList => { - tabList.addEventListener("keydown", keyTabs); - }); - - // Restore group tab selection from session - const lastSelected = session.getItem('sphinx-tabs-last-selected'); - if (lastSelected != null) selectNamedTabs(lastSelected); -}); - -/** - * Key focus left and right between sibling elements using arrows - * @param {Node} e the element in focus when key was pressed - */ -function keyTabs(e) { - const tab = e.target; - let nextTab = null; - if (e.keyCode === 39 || e.keyCode === 37) { - tab.setAttribute("tabindex", -1); - // Move right - if (e.keyCode === 39) { - nextTab = tab.nextElementSibling; - if (nextTab === null) { - nextTab = tab.parentNode.firstElementChild; - } - // Move left - } else if (e.keyCode === 37) { - nextTab = tab.previousElementSibling; - if (nextTab === null) { - nextTab = tab.parentNode.lastElementChild; - } - } - } - - if (nextTab !== null) { - nextTab.setAttribute("tabindex", 0); - nextTab.focus(); - } -} - -/** - * Select or deselect clicked tab. If a group tab - * is selected, also select tab in other tabLists. - * @param {Node} e the element that was clicked - */ -function changeTabs(e) { - // Use this instead of the element that was clicked, in case it's a child - const notSelected = this.getAttribute("aria-selected") === "false"; - const positionBefore = this.parentNode.getBoundingClientRect().top; - const notClosable = !this.parentNode.classList.contains("closeable"); - - deselectTabList(this); - - if (notSelected || notClosable) { - selectTab(this); - const name = this.getAttribute("name"); - selectNamedTabs(name, this.id); - - if (this.classList.contains("group-tab")) { - // Persist during session - session.setItem('sphinx-tabs-last-selected', name); - } - } - - const positionAfter = this.parentNode.getBoundingClientRect().top; - const positionDelta = positionAfter - positionBefore; - // Scroll to offset content resizing - window.scrollTo(0, window.scrollY + positionDelta); -} - -/** - * Select tab and show associated panel. - * @param {Node} tab tab to select - */ -function selectTab(tab) { - tab.setAttribute("aria-selected", true); - - // Show the associated panel - document - .getElementById(tab.getAttribute("aria-controls")) - .removeAttribute("hidden"); -} - -/** - * Hide the panels associated with all tabs within the - * tablist containing this tab. - * @param {Node} tab a tab within the tablist to deselect - */ -function deselectTabList(tab) { - const parent = tab.parentNode; - const grandparent = parent.parentNode; - - Array.from(parent.children) - .forEach(t => t.setAttribute("aria-selected", false)); - - Array.from(grandparent.children) - .slice(1) // Skip tablist - .forEach(panel => panel.setAttribute("hidden", true)); -} - -/** - * Select grouped tabs with the same name, but no the tab - * with the given id. - * @param {Node} name name of grouped tab to be selected - * @param {Node} clickedId id of clicked tab - */ -function selectNamedTabs(name, clickedId=null) { - const groupedTabs = document.querySelectorAll(`.sphinx-tabs-tab[name="${name}"]`); - const tabLists = Array.from(groupedTabs).map(tab => tab.parentNode); - - tabLists - .forEach(tabList => { - // Don't want to change the tabList containing the clicked tab - const clickedTab = tabList.querySelector(`[id="${clickedId}"]`); - if (clickedTab === null ) { - // Select first tab with matching name - const tab = tabList.querySelector(`.sphinx-tabs-tab[name="${name}"]`); - deselectTabList(tab); - selectTab(tab); - } - }) -} - -if (typeof exports === 'undefined') { - exports = {}; -} - -exports.keyTabs = keyTabs; -exports.changeTabs = changeTabs; -exports.selectTab = selectTab; -exports.deselectTabList = deselectTabList; -exports.selectNamedTabs = selectNamedTabs; diff --git a/v0.3.x/api/api.html b/v0.3.x/api/api.html deleted file mode 100644 index 6407f1ee4..000000000 --- a/v0.3.x/api/api.html +++ /dev/null @@ -1,251 +0,0 @@ - - - - - - - API Documentation — Mosaic - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

API Documentation

-
- -
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/v0.3.x/api/geometry-accessors.html b/v0.3.x/api/geometry-accessors.html deleted file mode 100644 index 794fcc28e..000000000 --- a/v0.3.x/api/geometry-accessors.html +++ /dev/null @@ -1,428 +0,0 @@ - - - - - - - Geometry accessors — Mosaic - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Geometry accessors

-
-

st_asbinary

-
-
-st_asbinary(col)
-

Translate a geometry into its Well-known Binary (WKB) representation.

-
-
Parameters:
-

col (Column: StringType, HexType, JSONType or InternalGeometryType) – Geometry column

-
-
Return type:
-

Column: BinaryType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'POINT (30 10)'}])
-df.select(st_asbinary('wkt').alias('wkb')).show()
-+--------------------+
-|                 wkb|
-+--------------------+
-|[01 01 00 00 00 0...|
-+--------------------+
-
-
-
-
-

Note

-

Alias for st_aswkb.

-
-
-
-

st_asgeojson

-
-
-st_asgeojson(col)
-

Translate a geometry into its GeoJSON representation.

-
-
Parameters:
-

col (Column: BinaryType, StringType, HexType or InternalGeometryType) – Geometry column

-
-
Return type:
-

Column: JSONType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'POINT (30 10)'}])
-df.select(st_asgeojson('wkt').cast('string').alias('json')).show(truncate=False)
-+------------------------------------------------------------------------------------------------+
-|json                                                                                            |
-+------------------------------------------------------------------------------------------------+
-|{{"type":"Point","coordinates":[30,10],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}}}|
-+------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

st_astext

-
-
-st_astext(col)
-

Translate a geometry into its Well-known Text (WKT) representation.

-
-
Parameters:
-

col (Column: BinaryType, HexType, JSONType or InternalGeometryType) – Geometry column

-
-
Return type:
-

Column: StringType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'lon': 30., 'lat': 10.}])
-df.select(st_astext(st_point('lon', 'lat')).alias('wkt')).show()
-+-------------+
-|          wkt|
-+-------------+
-|POINT (30 10)|
-+-------------+
-
-
-
-
-

Note

-

Alias for st_aswkt.

-
-
-
-

st_aswkb

-
-
-st_aswkb(col)
-

Translate a geometry into its Well-known Binary (WKB) representation.

-
-
Parameters:
-

col (Column: StringType, HexType, JSONType or InternalGeometryType) – Geometry column

-
-
Return type:
-

Column: BinaryType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'POINT (30 10)'}])
-df.select(st_aswkb('wkt').alias('wkb')).show()
-+--------------------+
-|                 wkb|
-+--------------------+
-|[01 01 00 00 00 0...|
-+--------------------+
-
-
-
-
-

Note

-

Alias for st_asbinary.

-
-
-
-

st_aswkt

-
-
-st_aswkt(col)
-

Translate a geometry into its Well-known Text (WKT) representation.

-
-
Parameters:
-

col (Column: BinaryType, HexType, JSONType or InternalGeometryType) – Geometry column

-
-
Return type:
-

Column: StringType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'lon': 30., 'lat': 10.}])
-df.select(st_aswkt(st_point('lon', 'lat')).alias('wkt')).show()
-+-------------+
-|          wkt|
-+-------------+
-|POINT (30 10)|
-+-------------+
-
-
-
-
-

Note

-

Alias for st_astext.

-
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/v0.3.x/api/geometry-constructors.html b/v0.3.x/api/geometry-constructors.html deleted file mode 100644 index 0de16caae..000000000 --- a/v0.3.x/api/geometry-constructors.html +++ /dev/null @@ -1,544 +0,0 @@ - - - - - - - Geometry constructors — Mosaic - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Geometry constructors

-
-

st_point

-
-
-st_point(x, y)
-

Create a new Mosaic Point geometry from two DoubleType values.

-
-
Parameters:
-
    -
  • x (Column: DoubleType) – x coordinate (DoubleType)

  • -
  • y (Column: DoubleType) – y coordinate (DoubleType)

  • -
-
-
Return type:
-

Column: InternalGeometryType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'lon': 30., 'lat': 10.}])
-df.select(st_point('lon', 'lat').alias('point_geom')).show(1, False)
-+---------------------------+
-|point_geom                 |
-+---------------------------+
-|{1, [[[30.0, 10.0]]], [[]]}|
-+---------------------------+
-
-
-
-
-
-

st_makeline

-
-
-st_makeline(col)
-

Create a new Mosaic LineString geometry from an Array of Mosaic Points.

-
-
Parameters:
-

col (Column: ArrayType[InternalGeometryType]) – Point array

-
-
Return type:
-

Column: InternalGeometryType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([
-    {'lon': 30., 'lat': 10.},
-    {'lon': 10., 'lat': 30.},
-    {'lon': 40., 'lat': 40.}
-    ])
-(
-    df.select(st_point('lon', 'lat').alias('point_geom'))
-    .groupBy()
-    .agg(collect_list('point_geom').alias('point_array'))
-    .select(st_makeline('point_array').alias('line_geom'))
-).show(1, False)
-+-------------------------------------------------------+
-|line_geom                                              |
-+-------------------------------------------------------+
-|{3, [[[40.0, 40.0], [30.0, 10.0], [10.0, 30.0]]], [[]]}|
-+-------------------------------------------------------+
-
-
-
-
-
-

st_makepolygon

-
-
-st_makepolygon(col)
-

Create a new Mosaic Polygon geometry from a closed LineString.

-
-
Parameters:
-

col (Column: InternalGeometryType) – closed LineString

-
-
Return type:
-

Column: InternalGeometryType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'LINESTRING (30 10, 40 40, 20 40, 10 20, 30 10)'}])
-df.select(st_makepolygon(st_geomfromwkt('wkt')).alias('polygon_geom')).show(1, False)
-+-----------------------------------------------------------------------------------+
-|polygon_geom                                                                       |
-+-----------------------------------------------------------------------------------+
-|{5, [[[30.0, 10.0], [40.0, 40.0], [20.0, 40.0], [10.0, 20.0], [30.0, 10.0]]], [[]]}|
-+-----------------------------------------------------------------------------------+
-
-
-
-
-
-

st_geomfromwkt

-
-
-st_geomfromwkt(col)
-

Create a new Mosaic geometry from Well-known Text.

-
-
Parameters:
-

col (Column: StringType) – Well-known Text Geometry

-
-
Return type:
-

Column: InternalGeometryType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'LINESTRING (30 10, 40 40, 20 40, 10 20, 30 10)'}])
-df.select(st_geomfromwkt('wkt')).show(1, False)
-+-------------------------------------------------------------------------------------+
-|convert_to(wkt)                                                                      |
-+-------------------------------------------------------------------------------------+
-|{3, [[[30.0, 10.0], [40.0, 40.0], [20.0, 40.0], [10.0, 20.0], [30.0, 10.0]]], [[[]]]}|
-+-------------------------------------------------------------------------------------+
-
-
-
-
-
-

st_geomfromwkb

-
-
-st_geomfromwkb(col)
-

Create a new Mosaic geometry from Well-known Binary.

-
-
Parameters:
-

col (Column: BinaryType) – Well-known Binary Geometry

-
-
Return type:
-

Column: InternalGeometryType

-
-
Example:
-

-
-
- -
-
import binascii
-
-hex = '0000000001C052F1F0ED3D859D4041983D46B26BF8'
-binary = binascii.unhexlify(hex)
-df = spark.createDataFrame([{'wkb': binary}])
-df.select(st_geomfromwkb('wkb')).show(1, False)
-+--------------------------------------+
-|convert_to(wkb)                       |
-+--------------------------------------+
-|{1, [[[-75.78033, 35.18937]]], [[[]]]}|
-+--------------------------------------+
-
-
-
-
-
-

st_geomfromgeojson

-
-
-st_geomfromgeojson(col)
-

Create a new Mosaic geometry from GeoJSON.

-
-
Parameters:
-

col (Column: StringType) – GeoJSON Geometry

-
-
Return type:
-

Column: InternalGeometryType

-
-
Example:
-

-
-
- -
-
import json
-
-geojson_dict = {
-        "type":"Point",
-        "coordinates":[
-            -75.78033,
-            35.18937
-        ],
-        "crs":{
-            "type":"name",
-            "properties":{
-                "name":"EPSG:4326"
-            }
-        }
-    }
-df = spark.createDataFrame([{'json': json.dumps(geojson_dict)}])
-df.select(st_geomfromgeojson('json')).show(1, False)
-+--------------------------------------+
-|convert_to(as_json(json))             |
-+--------------------------------------+
-|{1, [[[-75.78033, 35.18937]]], [[[]]]}|
-+--------------------------------------+
-
-
-
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/v0.3.x/api/raster-format-readers.html b/v0.3.x/api/raster-format-readers.html deleted file mode 100644 index c1b4504f0..000000000 --- a/v0.3.x/api/raster-format-readers.html +++ /dev/null @@ -1,316 +0,0 @@ - - - - - - - Raster Format Readers — Mosaic - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Raster Format Readers

-
-

Intro

-

Mosaic provides spark readers for the following raster formats:

-
-
-
-

Other formats are supported if supported by GDAL available drivers.

-
-
Mosaic provides two flavors of the readers:
    -
  • spark.read.format(“gdal”) for reading 1 file per spark task

  • -
  • mos.read().format(“raster_to_grid”) reader that automatically converts raster to grid.

  • -
-
-
-
-

spark.read.format(“gdal”)

-

A base Spark SQL data source for reading GDAL raster data sources. -It reads metadata of the raster and exposes the direct paths for the raster files. -The output of the reader is a DataFrame with the following columns:

-
-
    -
  • tile - loaded raster tile (RasterTileType)

  • -
  • ySize - height of the raster in pixels (IntegerType)

  • -
  • xSize - width of the raster in pixels (IntegerType)

  • -
  • bandCount - number of bands in the raster (IntegerType)

  • -
  • metadata - raster metadata (MapType(StringType, StringType))

  • -
  • subdatasets - raster subdatasets (MapType(StringType, StringType))

  • -
  • srid - raster spatial reference system identifier (IntegerType)

  • -
  • proj4Str - raster spatial reference system proj4 string (StringType)

  • -
-
-
-
-spark.read.format("gdal").load(path)
-

Loads a GDAL raster file and returns the result as a DataFrame. -It uses standard spark.read.format(*).option(*).load(*) pattern.

-
-
Parameters:
-

path (*StringType) – path to the raster file on dbfs

-
-
Return type:
-

DataFrame

-
-
Example:
-

-
-
- -
-
df = spark.read.format("gdal")\
-    .option("driverName", "GTiff")\
-    .load("dbfs:/path/to/raster.tif")
-df.show()
-+---------------------------------------------------------------------------------------------------------------+------+------+----------+---------------------+--------------------+-----+----------------------+
-|                                                                                                           tile| ySize| xSize| bandCount|             metadata|         subdatasets| srid|              proj4Str|
-+---------------------------------------------------------------------------------------------------------------+------+------+----------+---------------------+--------------------+-----+----------------------+
-| {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } |  100 |  100 |        1 | {AREA_OR_POINT=Po...|                null| 4326|  +proj=longlat +da...|
-+---------------------------------------------------------------------------------------------------------------+------+------+----------+---------------------+--------------------+-----+----------------------+
-
-
-
-
-

Warning

-

Issue 350: https://github.com/databrickslabs/mosaic/issues/350 -The raster reader ‘driverName’ option has to match the names provided in the above list. -For example, if you want to read a GeoTiff file, you have to use the following option: -.option(“driverName”, “GTiff”) instead of .option(“driverName”, “tif”).

-
-
-
-

mos.read().format(“raster_to_grid”)

-

Reads a GDAL raster file and converts it to a grid. -It uses a pattern similar to standard spark.read.format(*).option(*).load(*) pattern. -The only difference is that it uses mos.read() instead of spark.read(). -The raster pixels are converted to grid cells using specified combiner operation (default is mean). -If the raster pixels are larger than the grid cells, the cell values can be calculated using interpolation. -The interpolation method used is Inverse Distance Weighting (IDW) where the distance function is a k_ring -distance of the grid. -The reader supports the following options:

-
-
    -
  • fileExtension - file extension of the raster file (StringType) - default is .

  • -
  • vsizip - if the rasters are zipped files, set this to true (BooleanType)

  • -
  • resolution - resolution of the output grid (IntegerType)

  • -
  • combiner - combiner operation to use when converting raster to grid (StringType) - default is mean

  • -
  • retile - if the rasters are too large they can be re-tiled to smaller tiles (BooleanType)

  • -
  • tileSize - size of the re-tiled tiles, tiles are always squares of tileSize x tileSize (IntegerType)

  • -
  • readSubdatasets - if the raster has subdatasets set this to true (BooleanType)

  • -
  • subdatasetNumber - if the raster has subdatasets, select a specific subdataset by index (IntegerType)

  • -
  • subdatasetName - if the raster has subdatasets, select a specific subdataset by name (StringType)

  • -
  • kRingInterpolate - if the raster pixels are larger than the grid cells, use k_ring interpolation with n = kRingInterpolate (IntegerType)

  • -
-
-
-
-mos.read().format("raster_to_grid").load(path)
-

Loads a GDAL raster file and returns the result as a DataFrame. -It uses standard mos.read().format(*).option(*).load(*) pattern.

-
-
Parameters:
-

path (*StringType) – path to the raster file on dbfs

-
-
Return type:
-

DataFrame

-
-
Example:
-

-
-
- -
-
df = mos.read().format("raster_to_grid")\
-    .option("fileExtension", "*.tif")\
-    .option("resolution", "8")\
-    .option("combiner", "mean")\
-    .option("retile", "true")\
-    .option("tileSize", "1000")\
-    .option("kRingInterpolate", "2")\
-    .load("dbfs:/path/to/raster.tif")
-df.show()
-+--------+--------+------------------+
-|band_id |cell_id |cell_value        |
-+--------+--------+------------------+
-|       1|       1|0.1400000000000000|
-|       1|       2|0.1400000000000000|
-|       1|       3|0.2464000000000000|
-|       1|       4|0.2464000000000000|
-+--------+--------+------------------+
-
-
-
-
-

Warning

-

Issue 350: https://github.com/databrickslabs/mosaic/issues/350 -The option ‘fileExtension’ expects a wild card mask. Please use the following format: ‘*.tif’ or equivalent for other formats. -If you use ‘tif’ without the wildcard the reader wont pick up any files and you will have empty table as a result.

-
-
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/v0.3.x/api/raster-functions.html b/v0.3.x/api/raster-functions.html deleted file mode 100644 index 74bd6e953..000000000 --- a/v0.3.x/api/raster-functions.html +++ /dev/null @@ -1,3211 +0,0 @@ - - - - - - - Raster functions — Mosaic - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Raster functions

-
-

Intro

-

Raster functions are available in mosaic if you have installed the optional dependency GDAL. -Please see Install and Enable GDAL with Mosaic for installation instructions. -Mosaic provides several unique raster functions that are not available in other Spark packages. -Mainly raster to grid functions, which are useful for reprojecting the raster data into a standard grid index system. -This is useful for performing spatial joins between raster data and vector data. -Mosaic also provides a scalable retiling function that can be used to retile raster data in case of bottlenecking due to large files. -All raster functions respect the "rst_" prefix naming convention. -In versions <= 0.3.11 mosaic was operating using either string paths or byte arrays. -In versions > 0.3.11 mosaic is operating using tile objects only. Tile objects are created using rst_fromfile(path_to_raster) function. -If you use spark.read.format(“gdal”) tiles are automatically generated for you.

-
-

Note

-

For mosaic versions > 0.3.11 please do not use setup_gdal call. There is no longer a need for shared objects to be copied around. -Please use the updated init_script.sh script to install GDAL on your cluster. See Install and Enable GDAL with Mosaic for more details.

-
-
-

rst_bandmetadata

-
-
-rst_bandmetadata(tile, band)
-

Extract the metadata describing the raster band. -Metadata is return as a map of key value pairs.

-
-
Parameters:
-
    -
  • tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.

  • -
  • band (Column (IntegerType)) – The band number to extract metadata for.

  • -
-
-
Return type:
-

Column: MapType(StringType, StringType)

-
-
Example:
-

-
-
- -
-
df = spark.read.format("gdal").option("extensions", "nc")\
-        .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/gdal-netcdf-coral")
-df.select(mos.rst_bandmetadata("tile", F.lit(1))).limit(1).display()
-+--------------------------------------------------------------------------------------+
-| rst_bandmetadata(tile, 1)                                                            |
-+--------------------------------------------------------------------------------------+
-| {"_FillValue": "251", "NETCDF_DIM_time": "1294315200", "long_name": "bleaching alert |
-| area 7-day maximum composite", "grid_mapping": "crs", "NETCDF_VARNAME":              |
-| "bleaching_alert_area", "coverage_content_type": "thematicClassification",           |
-| "standard_name": "N/A", "comment": "Bleaching Alert Area (BAA) values are coral      |
-| bleaching heat stress levels: 0 - No Stress; 1 - Bleaching Watch; 2 - Bleaching      |
-| Warning; 3 - Bleaching Alert Level 1; 4 - Bleaching Alert Level 2. Product           |
-| description is provided at https://coralreefwatch.noaa.gov/product/5km/index.php.",  |
-| "valid_min": "0", "units": "stress_level", "valid_max": "4", "scale_factor": "1"}    |
-+--------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_boundingbox

-
-
-rst_boundingbox(raster)
-

Returns the bounding box of the raster as a polygon geometry.

-
-
Parameters:
-

tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.

-
-
Return type:
-

Column: StructType(DoubleType, DoubleType, DoubleType, DoubleType)

-
-
Example:
-

-
-
- -
-
df = spark.read.format("gdal").option("extensions", "nc")\
-           .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/gdal-netcdf-coral")
-df.select(mos.rst_boundingbox("tile")).limit(1).display()
-+------------------------------------------------------------------+
-| rst_boundingbox(tile)                                            |
-+------------------------------------------------------------------+
-| [00 00 ... 00] // WKB representation of the polygon bounding box |
-+------------------------------------------------------------------+
-
-
-
-
-
-

rst_clip

-
-
-rst_clip(raster, geometry)
-

Clips the raster to the geometry. -The geometry is expected to be in the same coordinate reference system as the raster. -The geometry is expected to be a polygon or a multipolygon. -The output raster will have the same extent as the input geometry. -The output raster will have the same number of bands as the input raster. -The output raster will have the same pixel type as the input raster. -The output raster will have the same pixel size as the input raster. -The output raster will have the same coordinate reference system as the input raster.

-
-
Parameters:
-
    -
  • tile – A column containing the raster tile.

  • -
  • geometry – A column containing the geometry to clip the raster to.

  • -
-
-
Return type:
-

Column: RasterTileType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("gdal").option("extensions", "nc")\
-           .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/gdal-netcdf-coral")
-df.select(mos.rst_clip("tile", F.lit("POLYGON((0 0, 0 10, 10 10, 10 0, 0 0))"))).limit(1).display()
-+----------------------------------------------------------------------------------------------------------------+
-| rst_clip(tile, POLYGON ((0 0, 0 10, 10 10, 10 0, 0 0)))                                                        |
-+----------------------------------------------------------------------------------------------------------------+
-| {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } |
-+----------------------------------------------------------------------------------------------------------------+
-
-
-
-
rst_clip(tile, POLYGON ((0 0, 0 10, 10 10, 10 0, 0 0))) |
-
- - - - - -

{index_id: 593308294097928191, raster: [00 01 10 … 00], parentPath: “dbfs:/path_to_file”, driver: “NetCDF” }

-
-
-
-

rst_combineavg

-
-
-rst_combineavg(rasters)
-

Combines a collection of rasters by averaging the pixel values. -The rasters must have the same extent, number of bands, and pixel type. -The rasters must have the same pixel size and coordinate reference system. -The output raster will have the same extent as the input rasters. -The output raster will have the same number of bands as the input rasters. -The output raster will have the same pixel type as the input rasters. -The output raster will have the same pixel size as the input rasters. -The output raster will have the same coordinate reference system as the input rasters.

-
-
Parameters:
-

tile – A column containing an array of raster tiles.

-
-
Return type:
-

Column: RasterTileType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("gdal").option("extensions", "nc")\
-           .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/gdal-netcdf-coral")\
-           .groupBy().agg(F.collect_list("tile").alias("tile"))
-df.select(mos.rst_combineavg("tile")).limit(1).display()
-+----------------------------------------------------------------------------------------------------------------+
-| rst_combineavg(tile)                                                                                           |
-+----------------------------------------------------------------------------------------------------------------+
-| {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } |
-+----------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_combineavgagg

-
-
-rst_combineavgagg(rasters)
-

Combines a group by statement over rasters by averaging the pixel values. -The rasters must have the same extent, number of bands, and pixel type. -The rasters must have the same pixel size and coordinate reference system. -The output raster will have the same extent as the input rasters. -The output raster will have the same number of bands as the input rasters. -The output raster will have the same pixel type as the input rasters. -The output raster will have the same pixel size as the input rasters. -The output raster will have the same coordinate reference system as the input rasters.

-
-
Parameters:
-

tile – A column containing raster tiles.

-
-
Return type:
-

Column: RasterTileType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("gdal").option("extensions", "nc")\
-           .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/gdal-netcdf-coral")\
-df.groupBy().agg(mos.rst_combineavgagg("tile")).limit(1).display()
-+----------------------------------------------------------------------------------------------------------------+
-| rst_combineavgagg(tile)                                                                                        |
-+----------------------------------------------------------------------------------------------------------------+
-| {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } |
-+----------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_frombands

-
-
-rst_frombands(rasters)
-

Combines a collection of rasters into a single raster. -The rasters must have the same extent. -The rasters must have the same pixel coordinate reference system. -The output raster will have the same extent as the input rasters. -The output raster will have the same number of bands as all the input raster bands. -The output raster will have the same pixel type as the input raster bands. -The output raster will have the same pixel size as the highest resolution input rasters. -The output raster will have the same coordinate reference system as the input rasters.

-
-
Parameters:
-

tile – A column containing an array of raster tiles.

-
-
Return type:
-

Column: RasterTileType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("gdal").option("extensions", "nc")\
-           .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/gdal-netcdf-coral")\
-           .groupBy().agg(F.collect_list("tile").alias("tile"))
-df.select(mos.rst_frombands("tile")).limit(1).display()
-+----------------------------------------------------------------------------------------------------------------+
-| rst_frombands(tile)                                                                                            |
-+----------------------------------------------------------------------------------------------------------------+
-| {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } |
-+----------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_fromfile

-
-
-rst_fromfile(path, <size_in_MB>)
-

Returns a raster tile from a file path. -The file path must be a string. -The file path must be a valid path to a raster file. -The file path must be a path to a file that GDAL can read. -If the size_in_MB parameter is specified, the raster will be split into tiles of the specified size. -If the size_in_MB parameter is not specified, the raster will not be split into tiles. -If the size_in_Mb < 0 the raster wont be split into tiles.

-
-
Parameters:
-
    -
  • path – A column containing the path to a raster file.

  • -
  • size_in_MB – Optional parameter to specify the size of the raster tile in MB. Default is not to split the input.

  • -
-
-
Return type:
-

Column: RasterTileType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile")\
-           .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_fromfile("path")).limit(1).display()
-+----------------------------------------------------------------------------------------------------------------+
-| rst_fromfile(path)                                                                                             |
-+----------------------------------------------------------------------------------------------------------------+
-| {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } |
-+----------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_georeference

-
-
-rst_georeference(raster)
-

Returns GeoTransform of the raster as a GT array of doubles. -GT(0) x-coordinate of the upper-left corner of the upper-left pixel. -GT(1) w-e pixel resolution / pixel width. -GT(2) row rotation (typically zero). -GT(3) y-coordinate of the upper-left corner of the upper-left pixel. -GT(4) column rotation (typically zero). -GT(5) n-s pixel resolution / pixel height (negative value for a north-up image).

-
-
Parameters:
-

tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.

-
-
Return type:
-

Column: MapType(StringType, DoubleType)

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_georeference("path")).limit(1).display()
-+--------------------------------------------------------------------------------------------+
-| rst_georeference(path)                                                                     |
-+--------------------------------------------------------------------------------------------+
-| {"scaleY": -0.049999999152053956, "skewX": 0, "skewY": 0, "upperLeftY": 89.99999847369712, |
-| "upperLeftX": -180.00000610436345, "scaleX": 0.050000001695656514}                         |
-+--------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rest_getnodata

-
-
-rst_getnodata(raster)
-

Returns the nodata value of the raster bands.

-
-
Parameters:
-

tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.

-
-
Return type:
-

Column: ArrayType(DoubleType)

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-     .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_getnodata("path")).limit(1).display()
-+---------------------+
-| rst_getnodata(path) |
-+---------------------+
-| [0.0, -9999.0, ...] |
-+---------------------+
-
-
-
-
-
-

rst_getsubdataset

-
-
-rst_getsubdataset(raster, name)
-

Returns the subdataset of the raster with a given name. -The subdataset name must be a string. The name is not a full path. -The name is the last identifier in the subdataset path (FORMAT:PATH:NAME). -The subdataset name must be a valid subdataset name for the raster.

-
-
Parameters:
-
    -
  • tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.

  • -
  • name – A column containing the name of the subdataset to return.

  • -
-
-
Return type:
-

Column: RasterTileType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-     .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_getsubdataset("path", "sst")).limit(1).display()
-+----------------------------------------------------------------------------------------------------------------+
-| rst_getsubdataset(path, sst)                                                                                   |
-+----------------------------------------------------------------------------------------------------------------+
-| {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } |
-+----------------------------------------------------------------------------------------------------------------+
-
-
-
- - - - -

{index_id: 593308294097928191, raster: [00 01 10 … 00], parentPath: “dbfs:/path_to_file”, driver: “NetCDF” }

-
-
-
-

rst_height

-
-
-rst_height(raster)
-

Returns the height of the raster in pixels.

-
-
Parameters:
-

tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.

-
-
Return type:
-

Column: IntegerType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_height('path')).show()
-+--------------------+
-| rst_height(path)   |
-+--------------------+
-| 3600               |
-| 3600               |
-+--------------------+
-
-
-
-
-
-

rst_initnodata

-
-
-rst_initnodata(raster)
-

Initializes the nodata value of the raster bands. -The nodata value will be set to default values for the pixel type of the raster bands. -The output raster will have the same extent as the input raster. -The default nodata value for ByteType is 0. -The default nodata value for UnsignedShortType is UShort.MaxValue (65535). -The default nodata value for ShortType is Short.MinValue (-32768). -The default nodata value for UnsignedIntegerType is Int.MaxValue (4.294967294E9). -The default nodata value for IntegerType is Int.MinValue (-2147483648). -The default nodata value for FloatType is Float.MinValue (-3.4028234663852886E38). -The default nodata value for DoubleType is Double.MinValue (-1.7976931348623157E308).

-
-
Parameters:
-

tile – A column containing the raster tile.

-
-
Return type:
-

Column: RasterTileType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-     .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_initnodata("path")).limit(1).display()
-+----------------------------------------------------------------------------------------------------------------+
-| rst_initnodata(path)                                                                                        |
-+----------------------------------------------------------------------------------------------------------------+
-| {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } |
-+----------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_isempty

-
-
-rst_isempty(raster)
-

Returns true if the raster is empty.

-
-
Parameters:
-

tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.

-
-
Return type:
-

Column: BooleanType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_isempty('path')).show()
-+--------------------+
-| rst_height(path)   |
-+--------------------+
-|false               |
-|false               |
-+--------------------+
-
-
-
-
-
-

rst_memsize

-
-
-rst_memsize(raster)
-

Returns size of the raster in bytes.

-
-
Parameters:
-

tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.

-
-
Return type:
-

Column: LongType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_memsize('path')).show()
-+--------------------+
-| rst_height(path)   |
-+--------------------+
-|730260              |
-|730260              |
-+--------------------+
-
-
-
-
-
-

rst_merge

-
-
-rst_merge(rasters)
-

Combines a collection of rasters into a single raster. -The rasters do not need to have the same extent. -The rasters must have the same coordinate reference system. -The rasters are combined using gdalwarp. -The noData value needs to be initialised; if not, the non valid pixels may introduce artifacts in the output raster. -The rasters are stacked in the order they are provided. -The output raster will have the extent covering all input rasters. -The output raster will have the same number of bands as the input rasters. -The output raster will have the same pixel type as the input rasters. -The output raster will have the same pixel size as the highest resolution input rasters. -The output raster will have the same coordinate reference system as the input rasters.

-
-
Parameters:
-

tile – A column containing an array of raster tiles.

-
-
Return type:
-

Column: RasterTileType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("gdal").option("extensions", "nc")\
-           .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/gdal-netcdf-coral")\
-           .groupBy().agg(F.collect_list("tile").alias("tile"))
-df.select(mos.rst_merge("tile")).limit(1).display()
-+----------------------------------------------------------------------------------------------------------------+
-| rst_merge(tile)                                                                                                |
-+----------------------------------------------------------------------------------------------------------------+
-| {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } |
-+----------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_mergeagg

-
-
-rst_mergeagg(rasters)
-

Combines a collection of rasters into a single raster. -The rasters do not need to have the same extent. -The rasters must have the same coordinate reference system. -The rasters are combined using gdalwarp. -The noData value needs to be initialised; if not, the non valid pixels may introduce artifacts in the output raster. -The rasters are stacked in the order they are provided. -This order is randomized since this is an aggregation function. -If the order of rasters is important please first collect rasters and sort them by metadata information and then use -rst_merge function. -The output raster will have the extent covering all input rasters. -The output raster will have the same number of bands as the input rasters. -The output raster will have the same pixel type as the input rasters. -The output raster will have the same pixel size as the highest resolution input rasters. -The output raster will have the same coordinate reference system as the input rasters.

-
-
Parameters:
-

tile – A column containing raster tiles.

-
-
Return type:
-

Column: RasterTileType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("gdal").option("extensions", "nc")\
-           .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/gdal-netcdf-coral")
-df.select(mos.rst_mergeagg("tile")).limit(1).display()
-+----------------------------------------------------------------------------------------------------------------+
-| rst_mergeagg(tile)                                                                                             |
-+----------------------------------------------------------------------------------------------------------------+
-| {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } |
-+----------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_metadata

-
-
-rst_metadata(raster)
-

Extract the metadata describing the raster. -Metadata is return as a map of key value pairs.

-
-
Parameters:
-

tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.

-
-
Return type:
-

Column: MapType(StringType, StringType)

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_metadata('path')).show()
-+--------------------------------------------------------------------------------------------------------------------+
-| rst_metadata(path)                                                                                                 |
-+--------------------------------------------------------------------------------------------------------------------+
-| {"NC_GLOBAL#publisher_url": "https://coralreefwatch.noaa.gov", "NC_GLOBAL#geospatial_lat_units": "degrees_north",  |
-| "NC_GLOBAL#platform_vocabulary": "NOAA NODC Ocean Archive System Platforms", "NC_GLOBAL#creator_type": "group",    |
-| "NC_GLOBAL#geospatial_lon_units": "degrees_east", "NC_GLOBAL#geospatial_bounds": "POLYGON((-90.0 180.0, 90.0       |
-| 180.0, 90.0 -180.0, -90.0 -180.0, -90.0 180.0))", "NC_GLOBAL#keywords": "Oceans > Ocean Temperature > Sea Surface  |
-| Temperature, Oceans > Ocean Temperature > Water Temperature, Spectral/Engineering > Infrared Wavelengths > Thermal |
-| Infrared, Oceans > Ocean Temperature > Bleaching Alert Area", "NC_GLOBAL#geospatial_lat_max": "89.974998",         |
-| .... (truncated).... "NC_GLOBAL#history": "This is a product data file of the NOAA Coral Reef Watch Daily Global   |
-| 5km Satellite Coral Bleaching Heat Stress Monitoring Product Suite Version 3.1 (v3.1) in its NetCDF Version 1.0    |
-| (v1.0).", "NC_GLOBAL#publisher_institution": "NOAA/NESDIS/STAR Coral Reef Watch Program",                          |
-| "NC_GLOBAL#cdm_data_type": "Grid"}                                                                                 |
-+--------------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_ndvi

-
-
-rst_ndvi(raster, red_band, nir_band)
-

Calculates the Normalized Difference Vegetation Index (NDVI) for a raster. -The NDVI is calculated using the formula: (NIR - RED) / (NIR + RED). -The output raster will have the same extent as the input raster. -The output raster will have a single band. -The output raster will have a pixel type of float64. -The output raster will have the same coordinate reference system as the input raster.

-
-
Parameters:
-
    -
  • tile – A column containing the raster tile.

  • -
  • red_band – A column containing the band number of the red band.

  • -
  • nir_band – A column containing the band number of the near infrared band.

  • -
-
-
Return type:
-

Column: RasterTileType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_ndvi("path", 1, 2)).limit(1).display()
-+----------------------------------------------------------------------------------------------------------------+
-| rst_ndvi(path, 1, 2)                                                                                           |
-+----------------------------------------------------------------------------------------------------------------+
-| {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" } |
-+----------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_numbands

-
-
-rst_numbands(raster)
-

Returns number of bands in the raster.

-
-
Parameters:
-

tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.

-
-
Return type:
-

Column: IntegerType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_numbands('path')).show()
-+---------------------+
-| rst_numbands(path)  |
-+---------------------+
-| 1                   |
-| 1                   |
-+---------------------+
-
-
-
-
-
-

rst_pixelheight

-
-
-rst_pixelheight(raster)
-

Returns the height of the pixel in the raster derived via GeoTransform.

-
-
Parameters:
-

tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.

-
-
Return type:
-

Column: DoubleType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_pixelheight('path')).show()
-+-----------------------+
-| rst_pixelheight(path) |
-+-----------------------+
-| 1                     |
-| 1                     |
-+-----------------------+
-
-
-
-
-
-

rst_pixelwidth

-
-
-rst_pixelwidth(raster)
-

Returns the width of the pixel in the raster derived via GeoTransform.

-
-
Parameters:
-

tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.

-
-
Return type:
-

Column: DoubleType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_pixelwidth('path')).show()
-+---------------------+
-| rst_pixelwidth(path)|
-+---------------------+
-| 1                   |
-| 1                   |
-+---------------------+
-
-
-
-
-
-

rst_rastertogridavg

-
-
-rst_rastertogridavg(raster, resolution)
-

The result is a 2D array of cells, where each cell is a struct of (cellID, value). -For getting the output of cellID->value pairs, please use explode() function twice. -CellID can be LongType or StringType depending on the configuration of MosaicContext. -The value/measure for each cell is the average of the pixel values in the cell.

-
-
Parameters:
-
    -
  • tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.

  • -
  • resolution – A resolution of the grid index system.

  • -
-
-
Return type:
-

Column: ArrayType(ArrayType(StructType(LongType|StringType, DoubleType)))

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_rastertogridavg('path', F.lit(3))).show()
-+--------------------------------------------------------------------------------------------------------------------+
-| rst_rastertogridavg(path, 3)                                                                                       |
-+--------------------------------------------------------------------------------------------------------------------+
-| [[{"cellID": "593176490141548543", "measure": 0}, {"cellID": "593386771740360703", "measure": 1.2037735849056603}, |
-| {"cellID": "593308294097928191", "measure": 0}, {"cellID": "593825202001936383", "measure": 0},                    |
-| {"cellID": "593163914477305855", "measure": 2}, {"cellID": "592998781574709247", "measure": 1.1283185840707965},   |
-| {"cellID": "593262526926422015", "measure": 2}, {"cellID": "592370479398911999", "measure": 0},                    |
-| {"cellID": "593472602366803967", "measure": 0.3963963963963964},                                                   |
-| {"cellID": "593785619583336447", "measure": 0.6590909090909091}, {"cellID": "591988330388783103", "measure": 1},   |
-| {"cellID": "592336738135834623", "measure": 1}, ....]]                                                             |
-+--------------------------------------------------------------------------------------------------------------------+
-
-
-
-
-../_images/h3.png -
-

Fig 1. RST_RasterToGridAvg(raster, 3)

-
-
-
-
-

rst_rastertogridcount

-
-
-rst_rastertogridcount(raster, resolution)
-

The result is a 2D array of cells, where each cell is a struct of (cellID, value). -For getting the output of cellID->value pairs, please use explode() function twice. -CellID can be LongType or StringType depending on the configuration of MosaicContext. -The value/measure for each cell is the average of the pixel values in the cell.

-
-
Parameters:
-
    -
  • tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.

  • -
  • resolution – A resolution of the grid index system.

  • -
-
-
Return type:
-

Column: ArrayType(ArrayType(StructType(LongType|StringType, DoubleType)))

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_rastertogridcount('path', F.lit(3))).show()
-+------------------------------------------------------------------------------------------------------------------+
-| rst_rastertogridcount(path, 3)                                                                                   |
-+------------------------------------------------------------------------------------------------------------------+
-| [[{"cellID": "593176490141548543", "measure": 0}, {"cellID": "593386771740360703", "measure": 1},                |
-| {"cellID": "593308294097928191", "measure": 0}, {"cellID": "593825202001936383", "measure": 0},                  |
-| {"cellID": "593163914477305855", "measure": 2}, {"cellID": "592998781574709247", "measure": 1},                  |
-| {"cellID": "593262526926422015", "measure": 2}, {"cellID": "592370479398911999", "measure": 0},                  |
-| {"cellID": "593472602366803967", "measure": 3},                                                                  |
-| {"cellID": "593785619583336447", "measure": 3}, {"cellID": "591988330388783103", "measure": 1},                  |
-| {"cellID": "592336738135834623", "measure": 1}, ....]]                                                           |
-+------------------------------------------------------------------------------------------------------------------+
-
-
-
-
-../_images/h3.png -
-

Fig 2. RST_RasterToGridCount(raster, 3)

-
-
-
-
-

rst_rastertogridmax

-
-
-rst_rastertogridmax(raster, resolution)
-

The result is a 2D array of cells, where each cell is a struct of (cellID, value). -For getting the output of cellID->value pairs, please use explode() function twice. -CellID can be LongType or StringType depending on the configuration of MosaicContext. -The value/measure for each cell is the maximum pixel value.

-
-
Parameters:
-
    -
  • tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.

  • -
  • resolution – A resolution of the grid index system.

  • -
-
-
Return type:
-

Column: ArrayType(ArrayType(StructType(LongType|StringType, DoubleType)))

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_rastertogridmax('path', F.lit(3))).show()
-+--------------------------------------------------------------------------------------------------------------------+
-| rst_rastertogridmax(path, 3)                                                                                       |
-+--------------------------------------------------------------------------------------------------------------------+
-| [[{"cellID": "593176490141548543", "measure": 0}, {"cellID": "593386771740360703", "measure": 1.2037735849056603}, |
-| {"cellID": "593308294097928191", "measure": 0}, {"cellID": "593825202001936383", "measure": 0},                    |
-| {"cellID": "593163914477305855", "measure": 2}, {"cellID": "592998781574709247", "measure": 1.1283185840707965},   |
-| {"cellID": "593262526926422015", "measure": 2}, {"cellID": "592370479398911999", "measure": 0},                    |
-| {"cellID": "593472602366803967", "measure": 0.3963963963963964},                                                   |
-| {"cellID": "593785619583336447", "measure": 0.6590909090909091}, {"cellID": "591988330388783103", "measure": 1},   |
-| {"cellID": "592336738135834623", "measure": 1}, ....]]                                                             |
-+--------------------------------------------------------------------------------------------------------------------+
-
-
-
-
-../_images/h3.png -
-

Fig 3. RST_RasterToGridMax(raster, 3)

-
-
-
-
-

rst_rastertogridmedian

-
-
-rst_rastertogridmedian(raster, resolution)
-

The result is a 2D array of cells, where each cell is a struct of (cellID, value). -For getting the output of cellID->value pairs, please use explode() function twice. -CellID can be LongType or StringType depending on the configuration of MosaicContext. -The value/measure for each cell is the median pixel value.

-
-
Parameters:
-
    -
  • tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.

  • -
  • resolution – A resolution of the grid index system.

  • -
-
-
Return type:
-

Column: ArrayType(ArrayType(StructType(LongType|StringType, DoubleType)))

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_rastertogridmedian('path', F.lit(3))).show()
-+--------------------------------------------------------------------------------------------------------------------+
-| rst_rastertogridmedian(path, 3)                                                                                    |
-+--------------------------------------------------------------------------------------------------------------------+
-| [[{"cellID": "593176490141548543", "measure": 0}, {"cellID": "593386771740360703", "measure": 1.2037735849056603}, |
-| {"cellID": "593308294097928191", "measure": 0}, {"cellID": "593825202001936383", "measure": 0},                    |
-| {"cellID": "593163914477305855", "measure": 2}, {"cellID": "592998781574709247", "measure": 1.1283185840707965},   |
-| {"cellID": "593262526926422015", "measure": 2}, {"cellID": "592370479398911999", "measure": 0},                    |
-| {"cellID": "593472602366803967", "measure": 0.3963963963963964},                                                   |
-| {"cellID": "593785619583336447", "measure": 0.6590909090909091}, {"cellID": "591988330388783103", "measure": 1},   |
-| {"cellID": "592336738135834623", "measure": 1}, ....]]                                                             |
-+--------------------------------------------------------------------------------------------------------------------+
-
-
-
-
-../_images/h3.png -
-

Fig 4. RST_RasterToGridMedian(raster, 3)

-
-
-
-
-

rst_rastertogridmin

-
-
-rst_rastertogridmin(raster, resolution)
-

The result is a 2D array of cells, where each cell is a struct of (cellID, value). -For getting the output of cellID->value pairs, please use explode() function twice. -CellID can be LongType or StringType depending on the configuration of MosaicContext. -The value/measure for each cell is the median pixel value.

-
-
Parameters:
-
    -
  • tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.

  • -
  • resolution – A resolution of the grid index system.

  • -
-
-
Return type:
-

Column: ArrayType(ArrayType(StructType(LongType|StringType, DoubleType)))

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_rastertogridmin('path', F.lit(3))).show()
-+--------------------------------------------------------------------------------------------------------------------+
-| rst_rastertogridmin(path, 3)                                                                                       |
-+--------------------------------------------------------------------------------------------------------------------+
-| [[{"cellID": "593176490141548543", "measure": 0}, {"cellID": "593386771740360703", "measure": 1.2037735849056603}, |
-| {"cellID": "593308294097928191", "measure": 0}, {"cellID": "593825202001936383", "measure": 0},                    |
-| {"cellID": "593163914477305855", "measure": 2}, {"cellID": "592998781574709247", "measure": 1.1283185840707965},   |
-| {"cellID": "593262526926422015", "measure": 2}, {"cellID": "592370479398911999", "measure": 0},                    |
-| {"cellID": "593472602366803967", "measure": 0.3963963963963964},                                                   |
-| {"cellID": "593785619583336447", "measure": 0.6590909090909091}, {"cellID": "591988330388783103", "measure": 1},   |
-| {"cellID": "592336738135834623", "measure": 1}, ....]]                                                             |
-+--------------------------------------------------------------------------------------------------------------------+
-
-
-
-
-../_images/h3.png -
-

Fig 4. RST_RasterToGridMin(raster, 3)

-
-
-
-
-

rst_rastertoworldcoord

-
-
-rst_rastertoworldcoord(raster, x, y)
-

Computes the world coordinates of the raster pixel at the given x and y coordinates. -The result is a WKT point geometry. -The coordinates are computed using the GeoTransform of the raster to respect the projection.

-
-
Parameters:
-
    -
  • tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.

  • -
  • x – x coordinate of the pixel.

  • -
  • y – y coordinate of the pixel.

  • -
-
-
Return type:
-

Column: StringType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_rastertoworldcoord('path', F.lit(3), F.lit(3))).show()
-+------------------------------------------------------------------------------------------------------------------+
-| rst_rastertoworldcoord(path, 3, 3)                                                                               |
-+------------------------------------------------------------------------------------------------------------------+
-|POINT (-179.85000609927647 89.84999847624096)                                                                     |
-+------------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_rastertoworldcoordx

-
-
-rst_rastertoworldcoord(raster, x, y)
-

Computes the world coordinates of the raster pixel at the given x and y coordinates. -The result is the X coordinate of the point after applying the GeoTransform of the raster.

-
-
Parameters:
-
    -
  • tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.

  • -
  • x – x coordinate of the pixel.

  • -
  • y – y coordinate of the pixel.

  • -
-
-
Return type:
-

Column: StringType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_rastertoworldcoordx('path', F.lit(3), F.lit(3))).show()
-+------------------------------------------------------------------------------------------------------------------+
-| rst_rastertoworldcoordx(path, 3, 3)                                                                              |
-+------------------------------------------------------------------------------------------------------------------+
-| -179.85000609927647                                                                                              |
-+------------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_rastertoworldcoordy

-
-
-rst_rastertoworldcoordy(raster, x, y)
-

Computes the world coordinates of the raster pixel at the given x and y coordinates. -The result is the X coordinate of the point after applying the GeoTransform of the raster.

-
-
Parameters:
-
    -
  • tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.

  • -
  • x – x coordinate of the pixel.

  • -
  • y – y coordinate of the pixel.

  • -
-
-
Return type:
-

Column: StringType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_rastertoworldcoordy('path', F.lit(3), F.lit(3))).show()
-+------------------------------------------------------------------------------------------------------------------+
-| rst_rastertoworldcoordy(path, 3, 3)                                                                              |
-+------------------------------------------------------------------------------------------------------------------+
-| 89.84999847624096                                                                                                |
-+------------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_retile

-
-
-rst_retile(raster, width, height)
-

Retiles the raster to the given tile size. The result is a collection of new raster files. -The new rasters are stored in the checkpoint directory. -The results are the paths to the new rasters. -The result set is automatically exploded.

-
-
Parameters:
-
    -
  • tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.

  • -
  • width – The width of the tiles.

  • -
  • height – The height of the tiles.

  • -
-
-
Return type:
-

Column: StringType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_retile('path', F.lit(300), F.lit(300))).show()
-+------------------------------------------------------------------------------------------------------------------+
-| rst_retile(path, 300, 300)                                                                                       |
-+------------------------------------------------------------------------------------------------------------------+
-| {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" }   |
-| {index_id: 593308294097928192, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "NetCDF" }   |
-+------------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_rotation

-
-
-rst_rotation(raster)
-

Computes the rotation of the raster in degrees. -The rotation is the angle between the X axis and the North axis. -The rotation is computed using the GeoTransform of the raster.

-
-
Parameters:
-

tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.

-
-
Return type:
-

Column: DoubleType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_rotation('path').show()
-+------------------------------------------------------------------------------------------------------------------+
-| rst_rotation(path)                                                                                               |
-+------------------------------------------------------------------------------------------------------------------+
-| 1.2                                                                                                              |
-| 21.2                                                                                                             |
-+------------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_scalex

-
-
-rst_scalex(raster)
-

Computes the scale of the raster in the X direction.

-
-
Parameters:
-

tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.

-
-
Return type:
-

Column: DoubleType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_scalex('path')).show()
-+------------------------------------------------------------------------------------------------------------------+
-| rst_scalex(path)                                                                                                 |
-+------------------------------------------------------------------------------------------------------------------+
-| 1.2                                                                                                              |
-+------------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_scaley

-
-
-rst_scaley(raster)
-

Computes the scale of the raster in the Y direction.

-
-
Parameters:
-

tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.

-
-
Return type:
-

Column: DoubleType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_scaley('path')).show()
-+------------------------------------------------------------------------------------------------------------------+
-| rst_scaley(path)                                                                                                 |
-+------------------------------------------------------------------------------------------------------------------+
-| 1.2                                                                                                              |
-+------------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_setnodata

-
-
-rst_setnodata(raster, nodata)
-

Sets the nodata value of the raster. -The result is a new raster with the nodata value set. -The same nodata value is set for all bands of the raster if a single value is passed. -If an array of values is passed, the nodata value is set for each band of the raster.

-
-
Parameters:
-
    -
  • tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.A column containing the path to a raster file.

  • -
  • nodata – The nodata value to set.

  • -
-
-
Return type:
-

Column: StringType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "tif")\
-     .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/tif")
-df.select(mos.rst_setnodata('path', F.lit(0))).show()
-+------------------------------------------------------------------------------------------------------------------+
-| rst_setnodata(path, 0)                                                                                           |
-+------------------------------------------------------------------------------------------------------------------+
-| {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" }    |
-| {index_id: 593308294097928192, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" }    |
-+------------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_skewx

-
-
-rst_skewx(raster)
-

Computes the skew of the raster in the X direction.

-
-
Parameters:
-

tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.A column containing the path to a raster file.

-
-
Return type:
-

Column: DoubleType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_skewx('path')).show()
-+------------------------------------------------------------------------------------------------------------------+
-| rst_skewx(path)                                                                                                  |
-+------------------------------------------------------------------------------------------------------------------+
-| 1.2                                                                                                              |
-+------------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_skewy

-
-
-rst_skewx(raster)
-

Computes the skew of the raster in the Y direction.

-
-
Parameters:
-

tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.A column containing the path to a raster file.

-
-
Return type:
-

Column: DoubleType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_skewy('path')).show()
-+------------------------------------------------------------------------------------------------------------------+
-| rst_skewy(path)                                                                                                  |
-+------------------------------------------------------------------------------------------------------------------+
-| 1.2                                                                                                              |
-+------------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_srid

-
-
-rst_srid(raster)
-

Computes the SRID of the raster. -The SRID is the EPSG code of the raster.

-
-

Note

-

For complex CRS definition the EPSG code may default to 0.

-
-
-
Parameters:
-

tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.A column containing the path to a raster file.

-
-
Return type:
-

Column: DoubleType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_srid('path')).show()
-+------------------------------------------------------------------------------------------------------------------+
-| rst_srid(path)                                                                                                   |
-+------------------------------------------------------------------------------------------------------------------+
-| 9122                                                                                                             |
-+------------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_subdatasets

-
-
-rst_subdatasets(raster)
-

Computes the subdatasets of the raster. -The subdatasets are the paths to the subdatasets of the raster. -The result is a map of the subdataset path to the subdatasets and the description of the subdatasets.

-
-
Parameters:
-

tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.A column containing the path to a raster file.

-
-
Return type:
-

Column: MapType(StringType, StringType)

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_subdatasets('path')).show()
-+--------------------------------------------------------------------------------------------------------------------+
-| rst_subdatasets(path)                                                                                              |
-+--------------------------------------------------------------------------------------------------------------------+
-| {"NETCDF:\"/dbfs/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral/ct5km_baa_max_7d_v3_1_2022010  |
-| 6-1.nc\":bleaching_alert_area": "[1x3600x7200] N/A (8-bit unsigned integer)", "NETCDF:\"/dbfs/FileStore/geospatial |
-| /mosaic/sample_raster_data/binary/netcdf-coral/ct5km_baa_max_7d_v3_1_20220106-1.nc\":mask": "[1x3600x7200] mask (8 |
-| -bit unsigned integer)"}                                                                                           |
-+--------------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_subdivide

-
-
-rst_subdivide(raster, sizeInMB)
-

Subdivides the raster to the given tile size in MB. The result is a collection of new raster files. -The tiles are split until the expected size of a tile is < sizeInMB. -The tile is always split in 4 tiles. This ensures that the tiles are always split in the same way. -The aspect ratio of the tiles is preserved. -The result set is automatically exploded.

-
-

Note

-

The size of the tiles is approximate. Due to compressions and other effects we cannot guarantee the size of the tiles in MB.

-
-
-
Parameters:
-
    -
  • tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.A column containing the path to a raster file.

  • -
  • sizeInMB – The size of the tiles in MB.

  • -
-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "tif")\
-     .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/tif")
-df.select(mos.rst_subdivide('path', F.lit(10))).show()
-+------------------------------------------------------------------------------------------------------------------+
-| rst_subdivide(path, 10)                                                                                          |
-+------------------------------------------------------------------------------------------------------------------+
-| {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" }    |
-| {index_id: 593308294097928192, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" }    |
-+------------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_summary

-
-
-rst_summary(raster)
-

Computes the summary of the raster. -The summary is a map of the statistics of the raster. -The logic is produced by gdalinfo procedure. -The result is stored as JSON.

-
-
Parameters:
-

tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.A column containing the path to a raster file.

-
-
Return type:
-

Column: MapType(StringType, StringType)

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_summary('path')).show()
-+------------------------------------------------------------------------------------------------------------------+
-| rst_summary(path)                                                                                                |
-+------------------------------------------------------------------------------------------------------------------+
-| {   "description":"/dbfs/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral/ct5km_baa_max_7d_v3_1|
-|_20220106-1.nc",   "driverShortName":"netCDF",   "driverLongName":"Network Common Data Format",   "files":[       |
-|"/dbfs/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral/ct5km_baa_max_7d_v3_1_20220106-1.nc"    |
-|],   "size":[     512,     512   ],   "metadata":{     "":{       "NC_GLOBAL#acknowledgement":"NOAA Coral Reef    |
-|Watch Program",       "NC_GLOBAL#cdm_data_type":"Gr...                                                            |
-+------------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_tessellate

-
-
-rst_tessellate(raster, resolution)
-

Tessellates the raster to the given resolution of the supported grid (H3, BNG, Custom). The result is a collection of new raster files. -Each tile in the tile set corresponds to a cell that is a part of the tesselation of the bounding box of the raster. -The result set is automatically exploded. -If rst_merge is called on the tile set the original raster will be reconstructed. -The output tiles have same number of bands as the input rasters.

-
-
Parameters:
-
    -
  • tile – A column containing the raster tile.

  • -
  • sizeInMB – The size of the tiles in MB.

  • -
-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "tif")\
-     .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/tif")
-df.select(mos.rst_tessellate('path', F.lit(10))).show()
-+------------------------------------------------------------------------------------------------------------------+
-| rst_tessellate(path, 10)                                                                                         |
-+------------------------------------------------------------------------------------------------------------------+
-| {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" }    |
-| {index_id: 593308294097928192, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" }    |
-+------------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_tooverlappingtiles

-
-
-rst_tooverlappingtiles(raster, width, height, overlap)
-

Splits the raster into overlapping tiles of the given width and height. -The overlap is the the percentage of the tile size that the tiles overlap. -The result is a collection of new raster files. -The result set is automatically exploded. -If rst_merge is called on the tile set the original raster will be reconstructed. -The output tiles have same number of bands as the input rasters.

-
-
Parameters:
-
    -
  • tile – A column containing the raster tile.

  • -
  • width – The width of the tiles in pixels.

  • -
  • height – The height of the tiles in pixels.

  • -
  • overlap – The overlap of the tiles in percentage.

  • -
-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "tif")\
-     .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/tif")
-df.select(mos.rst_tooverlappingtiles('path', F.lit(10), F.lit(10), F.lit(10))).show()
-+------------------------------------------------------------------------------------------------------------------+
-| rst_tooverlappingtiles(path, 10, 10, 10)                                                                         |
-+------------------------------------------------------------------------------------------------------------------+
-| {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" }    |
-| {index_id: 593308294097928192, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" }    |
-+------------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_tryopen

-
-
-rst_tryopen(raster)
-

Tries to open the raster. If the raster cannot be opened the result is false and if the raster can be opened the result is true.

-
-
Parameters:
-

tile – A column containing the raster tile.

-
-
Return type:
-

Column: BooleanType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "tif")\
-     .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/tif")
-df.select(mos.rst_tryopen('path')).show()
-+------------------------------------------------------------------------------------------------------------------+
-| rst_tryopen(path)                                                                                                |
-+------------------------------------------------------------------------------------------------------------------+
-| true                                                                                                             |
-+------------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_upperleftx

-
-
-rst_upperleftx(raster)
-

Computes the upper left X coordinate of the raster. -The value is computed based on GeoTransform.

-
-
Parameters:
-

tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.A column containing the path to a raster file.

-
-
Return type:
-

Column: DoubleType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_upperleftx('path')).show()
-+------------------------------------------------------------------------------------------------------------------+
-| rst_upperleftx(path)                                                                                             |
-+------------------------------------------------------------------------------------------------------------------+
-| -180.00000610436345                                                                                              |
-+------------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_upperlefty

-
-
-rst_upperlefty(raster)
-

Computes the upper left Y coordinate of the raster. -The value is computed based on GeoTransform.

-
-
Parameters:
-

tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.A column containing the path to a raster file.

-
-
Return type:
-

Column: DoubleType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_upperlefty('path')).show()
-+------------------------------------------------------------------------------------------------------------------+
-| rst_upperlefty(path)                                                                                             |
-+------------------------------------------------------------------------------------------------------------------+
-| 89.99999847369712                                                                                                |
-+------------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_width

-
-
-rst_width(raster)
-

Computes the width of the raster in pixels.

-
-
Parameters:
-

tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.A column containing the path to a raster file.

-
-
Return type:
-

Column: IntegerType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_width('path')).show()
-+------------------------------------------------------------------------------------------------------------------+
-| rst_width(path)                                                                                                  |
-+------------------------------------------------------------------------------------------------------------------+
-| 600                                                                                                              |
-+------------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_worldtorastercoord

-
-
-rst_worldtorastercoord(raster, xworld, yworld)
-

Computes the raster coordinates of the world coordinates. -The raster coordinates are the pixel coordinates of the raster. -The world coordinates are the coordinates in the CRS of the raster. -The coordinates are resolved using GeoTransform.

-
-
Parameters:
-
    -
  • tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.A column containing the path to a raster file.

  • -
  • x – X world coordinate.

  • -
  • y – Y world coordinate.

  • -
-
-
Return type:
-

Column: StructType(IntegerType, IntegerType)

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_worldtorastercoord('path', F.lit(-160.1), F.lit(40.0))).show()
-+------------------------------------------------------------------------------------------------------------------+
-| rst_worldtorastercoord(path)                                                                                     |
-+------------------------------------------------------------------------------------------------------------------+
-| {"x": 398, "y": 997}                                                                                             |
-+------------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_worldtorastercoordx

-
-
-rst_worldtorastercoordx(raster, xworld, yworld)
-

Computes the raster coordinates of the world coordinates. -The raster coordinates are the pixel coordinates of the raster. -The world coordinates are the coordinates in the CRS of the raster. -The coordinates are resolved using GeoTransform. -This method returns the X coordinate.

-
-
Parameters:
-
    -
  • tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.A column containing the path to a raster file.

  • -
  • x – X world coordinate.

  • -
  • y – Y world coordinate.

  • -
-
-
Return type:
-

Column: IntegerType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_worldtorastercoord('path', F.lit(-160.1), F.lit(40.0))).show()
-+------------------------------------------------------------------------------------------------------------------+
-| rst_worldtorastercoordx(path, -160.1, 40.0)                                                                      |
-+------------------------------------------------------------------------------------------------------------------+
-| 398                                                                                                              |
-+------------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-

rst_worldtorastercoordy

-
-
-rst_worldtorastercoordy(raster, xworld, yworld)
-

Computes the raster coordinates of the world coordinates. -The raster coordinates are the pixel coordinates of the raster. -The world coordinates are the coordinates in the CRS of the raster. -The coordinates are resolved using GeoTransform. -This method returns the Y coordinate.

-
-
Parameters:
-
    -
  • tile – A column containing the raster tile. For < 0.3.11 string representing the path to a raster file or byte array.A column containing the path to a raster file.

  • -
  • x – X world coordinate.

  • -
  • y – Y world coordinate.

  • -
-
-
Return type:
-

Column: IntegerType

-
-
Example:
-

-
-
- -
-
df = spark.read.format("binaryFile").option("extensions", "nc")\
-    .load("dbfs:/FileStore/geospatial/mosaic/sample_raster_data/binary/netcdf-coral")
-df.select(mos.rst_worldtorastercoordy('path', F.lit(-160.1), F.lit(40.0))).show()
-+------------------------------------------------------------------------------------------------------------------+
-| rst_worldtorastercoordy(path, -160.1, 40.0)                                                                      |
-+------------------------------------------------------------------------------------------------------------------+
-| 997                                                                                                              |
-+------------------------------------------------------------------------------------------------------------------+
-
-
-
-
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/v0.3.x/api/rasterio-udfs.html b/v0.3.x/api/rasterio-udfs.html deleted file mode 100644 index d478ba6dc..000000000 --- a/v0.3.x/api/rasterio-udfs.html +++ /dev/null @@ -1,365 +0,0 @@ - - - - - - - Rasterio UDFs — Mosaic - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Rasterio UDFs

-
-

Intro

-

Rasterio (https://rasterio.readthedocs.io/en/latest/) is a Python library for reading and writing geospatial raster datasets. -It uses GDAL (https://gdal.org/) for file I/O and raster formatting and provides a Python API for GDAL functions. -It is a great library for working with raster data in Python and it is a popular choice for many geospatial data scientists. -Rasterio UDFs provide a way to use Rasterio Python API in Spark for distributed processing of raster data. -The data structures used by Mosaic are compatible with Rasterio and can be used interchangeably. -In this section we will show how to use Rasterio UDFs to process raster data in Mosaic + Spark. -We assume that you have a basic understanding of Rasterio and GDAL.

-

Please note that we advise the users to set these configuration to ensure proper distribution.

-
spark.conf.set("spark.sql.execution.arrow.enabled", "true")
-spark.conf.set("spark.sql.execution.arrow.maxRecordsPerBatch", "1024")
-spark.conf.set("spark.sql.execution.arrow.fallback.enabled", "true")
-spark.conf.set("spark.sql.adaptive.coalescePartitions.enabled", "false")
-spark.conf.set("spark.sql.shuffle.partitions", "400")
-
-
-
-
-

Rasterio raster plotting

-

In this example we will show how to plot a raster file using Rasterio Python API.

-

Firstly we will create a spark DataFrame from a directory of raster files.

-
df = spark.read.format("gdal").load("dbfs:/path/to/raster/files").repartition(400)
-df.show()
-+-----------------------------------------------------------+------------------------------+-----------+---------------------+-------+-------+-----------+----------------------+-------------+-------+---------------------------------------------------------------------------------------------------------------+
-|                                                      path |             modificationTime |    length |                uuid | ySize | xSize | bandCount |             metadata | subdatasets |  srid |                                                                                                          tile |
-+-----------------------------------------------------------+------------------------------+-----------+---------------------+-------+-------+-----------+----------------------+-------------+-------+---------------------------------------------------------------------------------------------------------------+
-| dbfs:/FileStore/geospatial/odin/alaska/B02/-424495268.tif | 1970-01-20T15:49:53.135+0000 | 211660514 | 7836235824828840960 | 10980 | 10980 |         1 | {AREA_OR_POINT=Po... |          {} | 32602 | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } |
-| dbfs:/FileStore/geospatial/odin/alaska/B02/-524425268.tif | 1970-01-20T15:49:53.135+0000 | 212060218 | 7836235824828840961 | 10980 | 10980 |         1 | {AREA_OR_POINT=Po... |          {} | 32602 | {index_id: 593308294097927192, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } |
-| dbfs:/FileStore/geospatial/odin/alaska/B02/1241323268.tif | 1970-01-20T15:49:53.135+0000 | 211660897 | 7836235824828840962 | 10980 | 10980 |         1 | {AREA_OR_POINT=Po... |          {} | 32602 | {index_id: 593308294097929991, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } |
-| ...                                                       | ...                          | ...       | ...                 | ...   | ...   | ...       | ...                  | ...         | ...   | ...                                                                                                           |
-+-----------------------------------------------------------+------------------------------+-----------+---------------------+-------+-------+-----------+----------------------+-------------+-------+---------------------------------------------------------------------------------------------------------------+
-
-
-

Next we will define a function that will plot a given raster file.

-
import numpy as np
-import rasterio
-from rasterio.io import MemoryFile
-from io import BytesIO
-from pyspark.sql.functions import udf
-
-def plot_raster(raster):
-    fig, ax = pyplot.subplots(1, figsize=(12, 12))
-
-    with MemoryFile(BytesIO(raster)) as memfile:
-        with memfile.open() as src:
-            show(src, ax=ax)
-            pyplot.show()
-
-
-

Finally we will apply the function to the DataFrame collected results. -Note that in order to plot the raster we need to collect the results to the driver. -Please apply reasonable filters to the DataFrame before collecting the results.

-
plot_raster(df.select("tile").limit(1).collect()[0]["tile"]["raster"])
-
-
-
-../_images/plot_raster.png -
-

Fig 1. Plot raster using Rasterio Python API

-
-
-
-
-

UDF example for computing band statistics

-

In this example we will show how to compute band statistics for a raster file.

-

Firstly we will create a spark DataFrame from a directory of raster files.

-
df = spark.read.format("gdal").load("dbfs:/path/to/raster/files").repartition(400)
-df.show()
-+-----------------------------------------------------------+------------------------------+-----------+---------------------+-------+-------+-----------+----------------------+-------------+-------+---------------------------------------------------------------------------------------------------------------+
-|                                                      path |             modificationTime |    length |                uuid | ySize | xSize | bandCount |             metadata | subdatasets |  srid |                                                                                                          tile |
-+-----------------------------------------------------------+------------------------------+-----------+---------------------+-------+-------+-----------+----------------------+-------------+-------+---------------------------------------------------------------------------------------------------------------+
-| dbfs:/FileStore/geospatial/odin/alaska/B02/-424495268.tif | 1970-01-20T15:49:53.135+0000 | 211660514 | 7836235824828840960 | 10980 | 10980 |         1 | {AREA_OR_POINT=Po... |          {} | 32602 | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } |
-| dbfs:/FileStore/geospatial/odin/alaska/B02/-524425268.tif | 1970-01-20T15:49:53.135+0000 | 212060218 | 7836235824828840961 | 10980 | 10980 |         1 | {AREA_OR_POINT=Po... |          {} | 32602 | {index_id: 593308294097927192, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } |
-| dbfs:/FileStore/geospatial/odin/alaska/B02/1241323268.tif | 1970-01-20T15:49:53.135+0000 | 211660897 | 7836235824828840962 | 10980 | 10980 |         1 | {AREA_OR_POINT=Po... |          {} | 32602 | {index_id: 593308294097929991, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } |
-| ...                                                       | ...                          | ...       | ...                 | ...   | ...   | ...       | ...                  | ...         | ...   | ...                                                                                                           |
-+-----------------------------------------------------------+------------------------------+-----------+---------------------+-------+-------+-----------+----------------------+-------------+-------+---------------------------------------------------------------------------------------------------------------+
-
-
-

Next we will define a function that will compute band statistics for a given raster file.

-
import numpy as np
-import rasterio
-from rasterio.io import MemoryFile
-from io import BytesIO
-from pyspark.sql.functions import udf
-
-@udf("double")
-def compute_band_mean(raster):
-  with MemoryFile(BytesIO(raster)) as memfile:
-    with memfile.open() as dataset:
-      return dataset.statistics(bidx = 1).mean
-
-
-

Finally we will apply the function to the DataFrame.

-
df.select(compute_band_mean("tile.raster")).show()
-+---------------------------+
-| compute_band_mean(raster) |
-+---------------------------+
-|         0.0111000000000000|
-|         0.0021000000000000|
-|         0.3001000000000000|
-| ...                       |
-+---------------------------+
-
-
-
-
-

UDF example for computing NDVI

-

In this example we will show how to compute NDVI for a raster file. -NDVI is a common index used to assess vegetation health. -It is computed as follows: ndvi = (nir - red) / (nir + red). -NDVI output is a single band raster file with values in the range [-1, 1]. -We will show how to return a raster object as a result of a UDF.

-

Firstly we will create a spark DataFrame from a directory of raster files.

-
df = spark.read.format("gdal").load("dbfs:/path/to/raster/files").repartition(400)
-df.show()
-+-----------------------------------------------------------+------------------------------+-----------+---------------------+-------+-------+-----------+----------------------+-------------+-------+---------------------------------------------------------------------------------------------------------------+
-|                                                      path |             modificationTime |    length |                uuid | ySize | xSize | bandCount |             metadata | subdatasets |  srid |                                                                                                          tile |
-+-----------------------------------------------------------+------------------------------+-----------+---------------------+-------+-------+-----------+----------------------+-------------+-------+---------------------------------------------------------------------------------------------------------------+
-| dbfs:/FileStore/geospatial/odin/alaska/B02/-424495268.tif | 1970-01-20T15:49:53.135+0000 | 211660514 | 7836235824828840960 | 10980 | 10980 |         1 | {AREA_OR_POINT=Po... |          {} | 32602 | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } |
-| dbfs:/FileStore/geospatial/odin/alaska/B02/-524425268.tif | 1970-01-20T15:49:53.135+0000 | 212060218 | 7836235824828840961 | 10980 | 10980 |         1 | {AREA_OR_POINT=Po... |          {} | 32602 | {index_id: 593308294097927192, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } |
-| dbfs:/FileStore/geospatial/odin/alaska/B02/1241323268.tif | 1970-01-20T15:49:53.135+0000 | 211660897 | 7836235824828840962 | 10980 | 10980 |         1 | {AREA_OR_POINT=Po... |          {} | 32602 | {index_id: 593308294097929991, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } |
-| ...                                                       | ...                          | ...       | ...                 | ...   | ...   | ...       | ...                  | ...         | ...   | ...                                                                                                           |
-+-----------------------------------------------------------+------------------------------+-----------+---------------------+-------+-------+-----------+----------------------+-------------+-------+---------------------------------------------------------------------------------------------------------------+
-
-
-

Next we will define a function that will compute NDVI for a given raster file.

-
import numpy as np
-import rasterio
-from rasterio.io import MemoryFile
-from io import BytesIO
-from pyspark.sql.functions import udf
-
-@udf("binary")
-def compute_ndvi(raster, nir_band, red_band):
-  with MemoryFile(BytesIO(raster)) as memfile:
-    with memfile.open() as dataset:
-      red = dataset.read(red_band)
-      nir = dataset.read(nir_band)
-      ndvi = (nir - red) / (nir + red)
-      profile = dataset.profile
-      profile.update(count = 1, dtype = rasterio.float32)
-      # Write the NDVI to a tmp file and return it as binary
-      # This is a workaround an issue occurring when using
-      # MemoryFile for writing using an updated profile
-      with tempfile.NamedTemporaryFile() as tmp:
-        with rasterio.open(tmp.name, "w", **profile) as dst:
-          dst.write(ndvi.astype(rasterio.float32))
-        with open(tmp.name, "rb") as f:
-          return f.read()
-
-
-

Finally we will apply the function to the DataFrame.

-
df.select(compute_ndvi("tile.raster", lit(1), lit(2))).show()
-# The output is a binary column containing the NDVI raster
-+------------------------------+
-| compute_ndvi(raster, 1, 2)   |
-+------------------------------+
-| 000000 ... 00000000000000000 |
-| 000000 ... 00000000000000000 |
-| 000000 ... 00000000000000000 |
-| ...                          |
-+------------------------------+
-
-# We can update the tile column with the NDVI raster in place as well
-# This will overwrite the existing raster field in the tile column
-df.select(col("tile").withField("raster", compute_ndvi("tile.raster", lit(1), lit(2)))).show()
-+-----------------------------------------------------------+------------------------------+-----------+---------------------+-------+-------+-----------+----------------------+-------------+-------+---------------------------------------------------------------------------------------------------------------+
-|                                                      path |             modificationTime |    length |                uuid | ySize | xSize | bandCount |             metadata | subdatasets |  srid |                                                                                                          tile |
-+-----------------------------------------------------------+------------------------------+-----------+---------------------+-------+-------+-----------+----------------------+-------------+-------+---------------------------------------------------------------------------------------------------------------+
-| dbfs:/FileStore/geospatial/odin/alaska/B02/-424495268.tif | 1970-01-20T15:49:53.135+0000 | 211660514 | 7836235824828840960 | 10980 | 10980 |         1 | {AREA_OR_POINT=Po... |          {} | 32602 | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } |
-| dbfs:/FileStore/geospatial/odin/alaska/B02/-524425268.tif | 1970-01-20T15:49:53.135+0000 | 212060218 | 7836235824828840961 | 10980 | 10980 |         1 | {AREA_OR_POINT=Po... |          {} | 32602 | {index_id: 593308294097927192, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } |
-| dbfs:/FileStore/geospatial/odin/alaska/B02/1241323268.tif | 1970-01-20T15:49:53.135+0000 | 211660897 | 7836235824828840962 | 10980 | 10980 |         1 | {AREA_OR_POINT=Po... |          {} | 32602 | {index_id: 593308294097929991, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } |
-| ...                                                       | ...                          | ...       | ...                 | ...   | ...   | ...       | ...                  | ...         | ...   | ...                                                                                                           |
-+-----------------------------------------------------------+------------------------------+-----------+---------------------+-------+-------+-----------+----------------------+-------------+-------+---------------------------------------------------------------------------------------------------------------+
-
-
-
-
-

UDF example for writing raster files to disk

-

In this example we will show how to write a raster file to disk using Rasterio Python API. -This is an examples showing how to materialize a raster binary object as a raster file on disk. -The format of the output file should match the driver format of the binary object.

-

Firstly we will create a spark DataFrame from a directory of raster files.

-
df = spark.read.format("gdal").load("dbfs:/path/to/raster/files").repartition(400)
-df.show()
-+-----------------------------------------------------------+------------------------------+-----------+---------------------+-------+-------+-----------+----------------------+-------------+-------+---------------------------------------------------------------------------------------------------------------+
-|                                                      path |             modificationTime |    length |                uuid | ySize | xSize | bandCount |             metadata | subdatasets |  srid |                                                                                                          tile |
-+-----------------------------------------------------------+------------------------------+-----------+---------------------+-------+-------+-----------+----------------------+-------------+-------+---------------------------------------------------------------------------------------------------------------+
-| dbfs:/FileStore/geospatial/odin/alaska/B02/-424495268.tif | 1970-01-20T15:49:53.135+0000 | 211660514 | 7836235824828840960 | 10980 | 10980 |         1 | {AREA_OR_POINT=Po... |          {} | 32602 | {index_id: 593308294097928191, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } |
-| dbfs:/FileStore/geospatial/odin/alaska/B02/-524425268.tif | 1970-01-20T15:49:53.135+0000 | 212060218 | 7836235824828840961 | 10980 | 10980 |         1 | {AREA_OR_POINT=Po... |          {} | 32602 | {index_id: 593308294097927192, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } |
-| dbfs:/FileStore/geospatial/odin/alaska/B02/1241323268.tif | 1970-01-20T15:49:53.135+0000 | 211660897 | 7836235824828840962 | 10980 | 10980 |         1 | {AREA_OR_POINT=Po... |          {} | 32602 | {index_id: 593308294097929991, raster: [00 01 10 ... 00], parentPath: "dbfs:/path_to_file", driver: "GTiff" } |
-| ...                                                       | ...                          | ...       | ...                 | ...   | ...   | ...       | ...                  | ...         | ...   | ...                                                                                                           |
-+-----------------------------------------------------------+------------------------------+-----------+---------------------+-------+-------+-----------+----------------------+-------------+-------+---------------------------------------------------------------------------------------------------------------+
-
-
-

Next we will define a function that will write a given raster file to disk.

-
import numpy as np
-import rasterio
-from rasterio.io import MemoryFile
-from io import BytesIO
-from pyspark.sql.functions import udf
-from pathlib import Path
-
-@udf("string")
-def write_raster(raster, file_id, parent_dir):
-  with MemoryFile(BytesIO(raster)) as memfile:
-    with memfile.open() as dataset:
-      Path(outputpath).mkdir(parents=True, exist_ok=True)
-      extensions_map = rasterio.drivers.raster_driver_extensions()
-      driver_map = {v: k for k, v in extensions_map.items()}
-      extension = driver_map[dataset.driver]
-      path = f"{parent_dir}/{file_id}.{extension}"
-      # If you want to write the raster to a different format
-      # you can update the profile here. Note that the extension
-      # should match the driver format
-      with rasterio.open(path, "w", **dataset.profile) as dst:
-        dst.write(dataset.read())
-      return path
-
-
-

Finally we will apply the function to the DataFrame.

-
df.select(write_raster("tile.raster", "uuid", lit("dbfs:/path/to/output/dir"))).show()
-+-------------------------------------+
-| write_raster(raster, output, output)|
-+-------------------------------------+
-| dbfs:/path/to/output/dir/1234.tif   |
-| dbfs:/path/to/output/dir/4545.tif   |
-| dbfs:/path/to/output/dir/3215.tif   |
-| ...                                 |
-+-------------------------------------+
-
-
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/v0.3.x/api/spatial-aggregations.html b/v0.3.x/api/spatial-aggregations.html deleted file mode 100644 index 60b10967b..000000000 --- a/v0.3.x/api/spatial-aggregations.html +++ /dev/null @@ -1,487 +0,0 @@ - - - - - - - Spatial aggregation functions — Mosaic - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Spatial aggregation functions

-
-

st_intersects_aggregate

-
-
-st_intersects_aggregate(leftIndex, rightIndex)
-

Returns true if any of the leftIndex and rightIndex pairs intersect.

-
-
Parameters:
-
    -
  • leftIndex (Column) – Geometry

  • -
  • rightIndex (Column) – Geometry

  • -
-
-
Return type:
-

Column

-
-
Example:
-

-
-
- -
-
left_df = (
-    spark.createDataFrame([{'geom': 'POLYGON ((0 0, 0 3, 3 3, 3 0))'}])
-        .select(grid_tessellateexplode(col("geom"), lit(1)).alias("left_index"))
-)
-right_df = (
-    spark.createDataFrame([{'geom': 'POLYGON ((2 2, 2 4, 4 4, 4 2))'}])
-        .select(grid_tessellateexplode(col("geom"), lit(1)).alias("right_index"))
-)
-(
-    left_df
-        .join(right_df, col("left_index.index_id") == col("right_index.index_id"))
-        .groupBy()
-        .agg(st_intersects_aggregate(col("left_index"), col("right_index")))
-).show(1, False)
-+------------------------------------------------+
-|st_intersects_aggregate(left_index, right_index)|
-+------------------------------------------------+
-|true                                            |
-+------------------------------------------------+
-
-
-
-
-
-

st_intersection_aggregate

-
-
-st_intersection_aggregate(leftIndex, rightIndex)
-

Computes the intersections of leftIndex and rightIndex and returns the union of these intersections.

-
-
Parameters:
-
    -
  • leftIndex (Column) – Geometry

  • -
  • rightIndex (Column) – Geometry

  • -
-
-
Return type:
-

Column

-
-
Example:
-

-
-
- -
-
left_df = (
-    spark.createDataFrame([{'geom': 'POLYGON ((0 0, 0 3, 3 3, 3 0))'}])
-        .select(grid_tessellateexplode(col("geom"), lit(1)).alias("left_index"))
-)
-right_df = (
-    spark.createDataFrame([{'geom': 'POLYGON ((2 2, 2 4, 4 4, 4 2))'}])
-        .select(grid_tessellateexplode(col("geom"), lit(1)).alias("right_index"))
-)
-(
-    left_df
-        .join(right_df, col("left_index.index_id") == col("right_index.index_id"))
-        .groupBy()
-        .agg(st_astext(st_intersection_aggregate(col("left_index"), col("right_index"))))
-).show(1, False)
-+--------------------------------------------------------------+
-|convert_to(st_intersection_aggregate(left_index, right_index))|
-+--------------------------------------------------------------+
-|POLYGON ((2 2, 3 2, 3 3, 2 3, 2 2))                           |
-+--------------------------------------------------------------+
-
-
-
-
-
-

st_union_agg

-
-
-st_union_agg(geom)
-

Computes the union of the input geometries.

-
-
Parameters:
-

geom (Column) – Geometry

-
-
Return type:
-

Column

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'geom': 'POLYGON ((10 10, 20 10, 20 20, 10 20, 10 10))'}, {'geom': 'POLYGON ((15 15, 25 15, 25 25, 15 25, 15 15))'}])
-df.select(st_astext(st_union_agg(col('geom')))).show()
-+-------------------------------------------------------------------------+
-| st_union_agg(geom)                                                      |
-+-------------------------------------------------------------------------+
-|POLYGON ((20 15, 20 10, 10 10, 10 20, 15 20, 15 25, 25 25, 25 15, 20 15))|
-+-------------------------------------------------------------------------+
-
-
-
-
-
-

grid_cell_intersection_agg

-
-
-grid_cell_intersection_agg(chips)
-

Computes the chip representing the intersection of the input chips.

-
-
Parameters:
-

chips (Column) – Chips

-
-
Return type:
-

Column

-
-
Example:
-

-
-
- -
-
df = df.withColumn("chip", grid_tessellateexplode(...))
-df.groupBy("chip.index_id").agg(grid_cell_intersection_agg("chip").alias("agg_chip")).limit(1).show()
-+--------------------------------------------------------+
-| agg_chip                                               |
-+--------------------------------------------------------+
-|{is_core: false, index_id: 590418571381702655, wkb: ...}|
-+--------------------------------------------------------+
-
-
-
-
-
-

grid_cell_union_agg

-
-
-grid_cell_union_agg(chips)
-

Computes the chip representing the union of the input chips.

-
-
Parameters:
-

chips (Column) – Chips

-
-
Return type:
-

Column

-
-
Example:
-

-
-
- -
-
df = df.withColumn("chip", grid_tessellateexplode(...))
-df.groupBy("chip.index_id").agg(grid_cell_union_agg("chip").alias("agg_chip")).limit(1).show()
-+--------------------------------------------------------+
-| agg_chip                                               |
-+--------------------------------------------------------+
-|{is_core: false, index_id: 590418571381702655, wkb: ...}|
-+--------------------------------------------------------+
-
-
-
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/v0.3.x/api/spatial-functions.html b/v0.3.x/api/spatial-functions.html deleted file mode 100644 index 5a6d87f6d..000000000 --- a/v0.3.x/api/spatial-functions.html +++ /dev/null @@ -1,2376 +0,0 @@ - - - - - - - Spatial functions — Mosaic - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Spatial functions

-
-

flatten_polygons

-
-
-flatten_polygons(col)
-

Explodes a MultiPolygon geometry into one row per constituent Polygon.

-
-
Parameters:
-

col (Column) – MultiPolygon Geometry

-
-
Return type:
-

Column: StringType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([
-        {'wkt': 'MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))'}
-    ])
-df.select(flatten_polygons('wkt')).show(2, False)
-+------------------------------------------+
-|element                                   |
-+------------------------------------------+
-|POLYGON ((30 20, 45 40, 10 40, 30 20))    |
-|POLYGON ((15 5, 40 10, 10 20, 5 10, 15 5))|
-+------------------------------------------+
-
-
-
-
-
-

st_area

-
-
-st_area(col)
-

Compute the area of a geometry.

-
-
Parameters:
-

col (Column) – Geometry

-
-
Return type:
-

Column: DoubleType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}])
-df.select(st_area('wkt')).show()
-+------------+
-|st_area(wkt)|
-+------------+
-|       550.0|
-+------------+
-
-
-
-
-

Note

-

Results of this function are always expressed in the original units of the input geometry.

-
-
-
-

st_buffer

-
-
-st_buffer(col, radius)
-

Buffer the input geometry by radius radius and return a new, buffered geometry.

-
-
Parameters:
-
    -
  • col (Column) – Geometry

  • -
  • radius (Column (DoubleType)) – Double

  • -
-
-
Return type:
-

Column: Geometry

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}])
-df.select(st_buffer('wkt', lit(2.))).show()
-+--------------------+
-| st_buffer(wkt, 2.0)|
-+--------------------+
-|POLYGON ((29.1055...|
-+--------------------+
-
-
-
-
-
-

st_bufferloop

-
-
-st_bufferloop(col, innerRadius, outerRadius)
-

Returns a difference between st_buffer(col, outerRadius) and st_buffer(col, innerRadius). -The resulting geometry is a loop with a width of outerRadius - innerRadius.

-
-
Parameters:
-
    -
  • col (Column) – Geometry

  • -
  • innerRadius (Column (DoubleType)) – Radius of the resulting geometry hole.

  • -
  • outerRadius (Column (DoubleType)) – Radius of the resulting geometry.

  • -
-
-
Return type:
-

Column: Geometry

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}])
-df.select(st_bufferloop('wkt', lit(2.), lit(2.1)).show()
-+-------------------------+
-| st_buffer(wkt, 2.0, 2.1)|
-+-------------------------+
-|     POLYGON ((29.1055...|
-+-------------------------+
-
-
-
-
-../_images/geom.png -
-

Fig 1. ST_BufferLoop(geom, 0.02, 0.04)

-
-
-
-
-

st_centroid2D [Deprecated]

-
-
-st_centroid2D(col)
-

Returns the x and y coordinates representing the centroid of the input geometry.

-
-
Parameters:
-

col (Column) – Geometry

-
-
Return type:
-

Column: StructType[x: DoubleType, y: DoubleType]

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}])
-df.select(st_centroid2D('wkt')).show()
-+---------------------------------------+
-|st_centroid(wkt)                       |
-+---------------------------------------+
-|{25.454545454545453, 26.96969696969697}|
-+---------------------------------------+
-
-
-
-
-
-

st_centroid

-
-
-st_centroid(col)
-

Returns the POINT geometry representing the centroid of the input geometry.

-
-
Parameters:
-

col (Column) – Geometry

-
-
Return type:
-

Column: Geometry

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}])
-df.select(st_centroid('wkt')).show()
-+---------------------------------------------+
-|st_centroid(wkt)                             |
-+---------------------------------------------+
-|POINT (25.454545454545453, 26.96969696969697)|
-+---------------------------------------------+
-
-
-
-
-
-

st_convexhull

-
-
-st_convexhull(col)
-

Compute the convex hull of a geometry or multi-geometry object.

-
-
Parameters:
-

col (Column) – Geometry

-
-
Return type:
-

Column

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'MULTIPOINT ((10 40), (40 30), (20 20), (30 10))'}])
-df.select(st_convexhull('wkt')).show(1, False)
-+---------------------------------------------+
-|st_convexhull(wkt)                           |
-+---------------------------------------------+
-|POLYGON ((10 40, 20 20, 30 10, 40 30, 10 40))|
-+---------------------------------------------+
-
-
-
-
-
-

st_difference

-
-
-st_difference(left_geom, right_geom)
-

Returns the point set difference of the left and right geometry.

-
-
Parameters:
-
    -
  • left_geom (Column) – Geometry

  • -
  • right_geom (Column) – Geometry

  • -
-
-
Rtype Column:
-

Geometry

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'left': 'POLYGON ((10 10, 20 10, 20 20, 10 20, 10 10))', 'right': 'POLYGON ((15 15, 25 15, 25 25, 15 25, 15 15))'}])
-df.select(st_difference(col('left'), col('right'))).show()
-+-----------------------------------------------------------+
-| st_difference(left, right)                                |
-+-----------------------------------------------------------+
-|POLYGON ((10 10, 20 10, 20 15, 15 15, 15 20, 10 20, 10 10))|
-+-----------------------------------------------------------+
-
-
-
-
-
-

st_dimension

-
-
-st_dimension(col)
-

Compute the dimension of the geometry.

-
-
Parameters:
-

col (Column) – Geometry

-
-
Return type:
-

Column: IntegerType

-
-
Example:
-

-
-
- -
-
>>> df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}])
->>> df.select(st_dimension('wkt')).show()
-+-----------------+
-|st_dimension(wkt)|
-+-----------------+
-|                2|
-+-----------------+
-
-
-
-
-
-

st_distance

-
-
-st_distance(geom1, geom2)
-

Compute the euclidean distance between geom1 and geom2.

-
-
Parameters:
-
    -
  • geom1 (Column) – Geometry

  • -
  • geom2 (Column) – Geometry

  • -
-
-
Return type:
-

Column: DoubleType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'point': 'POINT (5 5)', 'poly': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}])
-df.select(st_distance('poly', 'point')).show()
-+------------------------+
-|st_distance(poly, point)|
-+------------------------+
-|      15.652475842498529|
-+------------------------+
-
-
-
-
-

Note

-

Results of this euclidean distance function are always expressed in the original units of the input geometries, e.g. for WGS84 (SRID 4326) units are degrees.

-
-
-
-

st_dump

-
-
-st_dump(col)
-

Explodes a multi-geometry into one row per constituent geometry.

-
-
Parameters:
-

col (Column) – The input multi-geometry

-
-
Return type:
-

Column

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'MULTIPOINT ((10 40), (40 30), (20 20), (30 10))'}])
-df.select(st_dump('wkt')).show(5, False)
-+-------------+
-|element      |
-+-------------+
-|POINT (10 40)|
-|POINT (40 30)|
-|POINT (20 20)|
-|POINT (30 10)|
-+-------------+
-
-
-
-
-
-

st_envelope

-
-
-st_envelope(col)
-

Returns the minimum bounding box of the input geometry, as a geometry. -This bounding box is defined by the rectangular polygon with corner points (x_min, y_min), (x_max, y_min), (x_min, y_max), (x_max, y_max).

-
-
Parameters:
-

col (Column) – Geometry

-
-
Return type:
-

Column

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'POLYGON ((10 10, 20 10, 15 20, 10 10))'}])
-df.select(st_envelope('wkt')).show()
-+-----------------------------------------------+
-| st_envelope(wkt)                              |
-+-----------------------------------------------+
-| POLYGON ((10 10, 20 10, 20 20, 10 20, 10 10)) |
-+-----------------------------------------------+
-
-
-
-
-
-

st_geometrytype

-
-
-st_geometrytype(col)
-

Returns the type of the input geometry (“POINT”, “LINESTRING”, “POLYGON” etc.).

-
-
Parameters:
-

col (Column) – Geometry

-
-
Return type:
-

Column: StringType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}])
-df.select(st_geometrytype('wkt')).show()
-+--------------------+
-|st_geometrytype(wkt)|
-+--------------------+
-|             POLYGON|
-+--------------------+
-
-
-
-
-
-

st_haversine

-
-
-st_haversine(lat1, lng1, lat2, lng2)
-

Compute the haversine distance between lat1/lng1 and lat2/lng2.

-
-
Parameters:
-
    -
  • lat1 (Column) – DoubleType

  • -
  • lng1 (Column) – DoubleType

  • -
  • lat2 (Column) – DoubleType

  • -
  • lng2 (Column) – DoubleType

  • -
-
-
Return type:
-

Column: DoubleType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'lat1': 0.0, 'lng1': 90.0, 'lat2': 0.0, 'lng2': 0.0}])
-df.select(st_distance('lat1', 'lng1', 'lat2', 'lng2')).show()
-+------------------------------------+
-|st_haversine(lat1, lng1, lat2, lng2)|
-+------------------------------------+
-|                   10007.55722101796|
-+------------------------------------+
-
-
-
-
-

Note

-

Results of this function are always expressed in km, while the input lat/lng pairs are expected to be in degrees. The radius used (in km) is 6371.0088.

-
-
-
-

st_hasvalidcoordinates

-
-
-st_hasvalidcoordinates(geom, crs, which)
-

Checks if all points in geom are valid with respect to crs bounds. -CRS bounds can be provided either as bounds or as reprojected_bounds.

-
-
Parameters:
-
    -
  • geom (Column) – Geometry

  • -
  • crs (Column) – CRS name (EPSG ID), e.g. “EPSG:2192”

  • -
  • which (Column) – Check against geographic “bounds” or geometric “reprojected_bounds” bounds.

  • -
-
-
Return type:
-

Column: IntegerType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'POLYGON((5.84 45.64, 5.92 45.64, 5.89 45.81, 5.79 45.81, 5.84 45.64))'}])
-df.select(st_hasvalidcoordinates(col('wkt'), lit('EPSG:2192'), lit('bounds'))).show()
-+----------------------------------------------+
-|st_hasvalidcoordinates(wkt, EPSG:2192, bounds)|
-+----------------------------------------------+
-|                                          true|
-+----------------------------------------------+
-
-
-
-
-
-

st_intersection

-
-
-st_intersection(geom1, geom2)
-

Returns a geometry representing the intersection of left_geom and right_geom.

-
-
Parameters:
-
    -
  • geom1 (Column) – Geometry

  • -
  • geom2 (Column) – Geometry

  • -
-
-
Return type:
-

Column

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'p1': 'POLYGON ((0 0, 0 3, 3 3, 3 0))', 'p2': 'POLYGON ((2 2, 2 4, 4 4, 4 2))'}])
-df.select(st_intersection(col('p1'), col('p2'))).show(1, False)
-+-----------------------------------+
-|st_intersection(p1, p2)            |
-+-----------------------------------+
-|POLYGON ((2 2, 3 2, 3 3, 2 3, 2 2))|
-+-----------------------------------+
-
-
-
-
-
-

st_isvalid

-
-
-st_isvalid(col)
-

Returns true if the geometry is valid.

-
-
Parameters:
-

col (Column) – Geometry

-
-
Return type:
-

Column: BooleanType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}])
-df.select(st_isvalid('wkt')).show()
-+---------------+
-|st_isvalid(wkt)|
-+---------------+
-|           true|
-+---------------+
-
-df = spark.createDataFrame([{
-    'wkt': 'POLYGON((0 0, 10 0, 10 10, 0 10, 0 0), (15 15, 15 20, 20 20, 20 15, 15 15))'
-    }])
-df.select(st_isvalid('wkt')).show()
-+---------------+
-|st_isvalid(wkt)|
-+---------------+
-|          false|
-+---------------+
-
-
-
-
-

Note

-

Validity assertions will be dependent on the chosen geometry API. -The assertions used in the ESRI geometry API (JTS is the default) follow the definitions in the -“Simple feature access - Part 1” document (OGC 06-103r4) for each geometry type.

-
-
-
-

st_length

-
-
-st_length(col)
-

Compute the length of a geometry.

-
-
Parameters:
-

col (Column) – Geometry

-
-
Return type:
-

Column: DoubleType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}])
-df.select(st_length('wkt')).show()
-+-----------------+
-|   st_length(wkt)|
-+-----------------+
-|96.34413615167959|
-+-----------------+
-
-
-
-
-

Note

-

Results of this function are always expressed in the original units of the input geometry.

-
-
-

Note

-

Alias for st_perimeter.

-
-
-
-

st_numpoints

-
-
-st_numpoints(col)
-

Returns the number of points in geom.

-
-
Parameters:
-

col (Column) – Geometry

-
-
Return type:
-

Column: IntegerType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}])
-df.select(st_numpoints('wkt')).show()
-+-----------------+
-|st_numpoints(wkt)|
-+-----------------+
-|                5|
-+-----------------+
-
-
-
-
-
-

st_perimeter

-
-
-st_perimeter(col)
-

Compute the perimeter length of a geometry.

-
-
Parameters:
-

col (Column) – Geometry

-
-
Return type:
-

Column: DoubleType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}])
-df.select(st_perimeter('wkt')).show()
-+-----------------+
-|st_perimeter(wkt)|
-+-----------------+
-|96.34413615167959|
-+-----------------+
-
-
-
-
-

Note

-

Results of this function are always expressed in the original units of the input geometry.

-
-
-

Note

-

Alias for st_length.

-
-
-
-

st_rotate

-
-
-st_rotate(geom, td)
-

Rotates geom using the rotational factor td.

-
-
Parameters:
-
    -
  • geom (Column) – Geometry

  • -
  • td (Column (DoubleType)) – Rotation (in radians)

  • -
-
-
Return type:
-

Column

-
-
Example:
-

-
-
- -
-
from math import pi
-df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}])
-df.select(st_rotate('wkt', lit(pi))).show(1, False)
-+-------------------------------------------------------+
-|st_rotate(wkt, 3.141592653589793)                      |
-+-------------------------------------------------------+
-|POLYGON ((-30 -10, -40 -40, -20 -40, -10 -20, -30 -10))|
-+-------------------------------------------------------+
-
-
-
-
-
-

st_scale

-
-
-st_scale(geom, xd, yd)
-

Scales geom using the scaling factors xd and yd.

-
-
Parameters:
-
    -
  • geom (Column) – Geometry

  • -
  • xd (Column (DoubleType)) – Scale factor in the x-direction

  • -
  • yd (Column (DoubleType)) – Scale factor in the y-direction

  • -
-
-
Return type:
-

Column

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}])
-df.select(st_scale('wkt', lit(0.5), lit(2))).show(1, False)
-+--------------------------------------------+
-|st_scale(wkt, 0.5, 2)                       |
-+--------------------------------------------+
-|POLYGON ((15 20, 20 80, 10 80, 5 40, 15 20))|
-+--------------------------------------------+
-
-
-
-
-
-

st_setsrid

-
-
-st_setsrid(geom, srid)
-

Sets the Coordinate Reference System well-known identifier (SRID) for geom.

-
-
Parameters:
-
    -
  • geom (Column) – Geometry

  • -
  • srid (Column (IntegerType)) – The spatial reference identifier of geom, expressed as an integer, e.g. 4326 for EPSG:4326 / WGS84

  • -
-
-
Return type:
-

Column

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'MULTIPOINT ((10 40), (40 30), (20 20), (30 10))'}])
-df.select(st_setsrid(st_geomfromwkt('wkt'), lit(4326))).show(1)
-+---------------------------------+
-|st_setsrid(convert_to(wkt), 4326)|
-+---------------------------------+
-|             {2, 4326, [[[10.0...|
-+---------------------------------+
-
-
-
-
-

Note

-

ST_SetSRID does not transform the coordinates of geom, -rather it tells Mosaic the SRID in which the current coordinates are expressed. -ST_SetSRID can only operate on geometries encoded in GeoJSON or the Mosaic internal format.

-
-
-
-

st_simplify

-
-
-st_simplify(geom, tol)
-

Returns the simplified geometry.

-
-
Parameters:
-
    -
  • geom (Column) – Geometry

  • -
  • tol (Column) – Tolerance

  • -
-
-
Return type:
-

Column: Geometry

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'LINESTRING (0 1, 1 2, 2 1, 3 0)'}])
-df.select(st_simplify('wkt', 1.0)).show()
-+----------------------------+
-| st_simplify(wkt, 1.0)      |
-+----------------------------+
-| LINESTRING (0 1, 1 2, 3 0) |
-+----------------------------+
-
-
-
-
-

Note

-

The specified tolerance will be ignored by the ESRI geometry API.

-
-
-
-

st_srid

-
-
-st_srid(geom)
-

Looks up the Coordinate Reference System well-known identifier (SRID) for geom.

-
-
Parameters:
-

geom (Column) – Geometry

-
-
Return type:
-

Column

-
-
Example:
-

-
-
- -
-
json_geom = '{"type":"MultiPoint","coordinates":[[10,40],[40,30],[20,20],[30,10]],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}}'
-df = spark.createDataFrame([{'json': json_geom}])
-df.select(st_srid(as_json('json'))).show(1)
-+----------------------+
-|st_srid(as_json(json))|
-+----------------------+
-|                  4326|
-+----------------------+
-
-
-
-
-

Note

-

ST_SRID can only operate on geometries encoded in GeoJSON or the Mosaic internal format.

-
-
-
-

st_transform

-
-
-st_transform(geom, srid)
-

Transforms the horizontal (XY) coordinates of geom from the current reference system to that described by srid.

-
-
Parameters:
-
    -
  • geom (Column) – Geometry

  • -
  • srid (Column (IntegerType)) – Target spatial reference system for geom, expressed as an integer, e.g. 3857 for EPSG:3857 / Pseudo-Mercator

  • -
-
-
Return type:
-

Column

-
-
Example:
-

-
-
- -
-
df = (
-  spark.createDataFrame([{'wkt': 'MULTIPOINT ((10 40), (40 30), (20 20), (30 10))'}])
-  .withColumn('geom', st_setsrid(st_geomfromwkt('wkt'), lit(4326)))
-)
-df.select(st_astext(st_transform('geom', lit(3857)))).show(1, False)
-+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-|convert_to(st_transform(geom, 3857))                                                                                                                                      |
-+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-|MULTIPOINT ((1113194.9079327357 4865942.279503176), (4452779.631730943 3503549.843504374), (2226389.8158654715 2273030.926987689), (3339584.723798207 1118889.9748579597))|
-+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-
-
-
-
-

Note

-

If geom does not have an associated SRID, use ST_SetSRID to set this before calling ST_Transform.

-
-
-
-

st_translate

-
-
-st_translate(geom, xd, yd)
-

Translates geom to a new location using the distance parameters xd and yd.

-
-
Parameters:
-
    -
  • geom (Column) – Geometry

  • -
  • xd (Column (DoubleType)) – Offset in the x-direction

  • -
  • yd (Column (DoubleType)) – Offset in the y-direction

  • -
-
-
Return type:
-

Column

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'MULTIPOINT ((10 40), (40 30), (20 20), (30 10))'}])
-df.select(st_translate('wkt', lit(10), lit(-5))).show(1, False)
-+----------------------------------------------+
-|st_translate(wkt, 10, -5)                     |
-+----------------------------------------------+
-|MULTIPOINT ((20 35), (50 25), (30 15), (40 5))|
-+----------------------------------------------+
-
-
-
-
-
-

st_union

-
-
-st_union(left_geom, right_geom)
-

Returns the point set union of the input geometries.

-
-
Parameters:
-
    -
  • left_geom (Column) – Geometry

  • -
  • right_geom (Column) – Geometry

  • -
-
-
Return type:
-

Column: Geometry

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'left': 'POLYGON ((10 10, 20 10, 20 20, 10 20, 10 10))', 'right': 'POLYGON ((15 15, 25 15, 25 25, 15 25, 15 15))'}])
-df.select(st_union(col('left'), col('right'))).show()
-+-------------------------------------------------------------------------+
-| st_union(left, right)                                                   |
-+-------------------------------------------------------------------------+
-|POLYGON ((20 15, 20 10, 10 10, 10 20, 15 20, 15 25, 25 25, 25 15, 20 15))|
-+-------------------------------------------------------------------------+
-
-
-
-
-
-

st_unaryunion

-
-
-st_unaryunion(col)
-

Returns a geometry that represents the point set union of the given geometry

-
-
Parameters:
-

col (Column) – Geometry

-
-
Return type:
-

Column: Geometry

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'MULTIPOLYGON (((10 10, 20 10, 20 20, 10 20, 10 10)), ((15 15, 25 15, 25 25, 15 25, 15 15)))'}])
-df.select(st_unaryunion('wkt')).show()
-+-------------------------------------------------------------------------+
-| st_unaryunion(wkt, 2.0)                                                 |
-+-------------------------------------------------------------------------+
-|POLYGON ((20 15, 20 10, 10 10, 10 20, 15 20, 15 25, 25 25, 25 15, 20 15))|
-+-------------------------------------------------------------------------+
-
-
-
-
-
-

st_x

-
-
-st_x(col)
-

Returns the x coordinate of the input geometry.

-
-
Parameters:
-

col (Column) – Geometry

-
-
Return type:
-

Column: DoubleType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'POINT (30 10)'}])
-df.select(st_x('wkt')).show()
-+-----------------+
-|st_x(wkt)        |
-+-----------------+
-|             30.0|
-+-----------------+
-
-
-
-
-
-

st_xmax

-
-
-st_xmax(col)
-

Returns the largest x coordinate in the input geometry.

-
-
Parameters:
-

col (Column) – Geometry

-
-
Return type:
-

Column: DoubleType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}])
-df.select(st_xmax('wkt')).show()
-+-----------------+
-|st_minmaxxyz(wkt)|
-+-----------------+
-|             40.0|
-+-----------------+
-
-
-
-
-
-

st_xmin

-
-
-st_xmin(col)
-

Returns the smallest x coordinate in the input geometry.

-
-
Parameters:
-

col (Column) – Geometry

-
-
Return type:
-

Column: DoubleType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}])
-df.select(st_xmin('wkt')).show()
-+-----------------+
-|st_minmaxxyz(wkt)|
-+-----------------+
-|             10.0|
-+-----------------+
-
-
-
-
-
-

st_y

-
-
-st_y(col)
-

Returns the y coordinate of the input geometry.

-
-
Parameters:
-

col (Column) – Geometry

-
-
Return type:
-

Column: DoubleType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'POINT (30 10)'}])
-df.select(st_y('wkt')).show()
-+-----------------+
-|st_y(wkt)        |
-+-----------------+
-|             10.0|
-+-----------------+
-
-
-
-
-
-

st_ymax

-
-
-st_ymax(col)
-

Returns the largest y coordinate in the input geometry.

-
-
Parameters:
-

col (Column) – Geometry

-
-
Return type:
-

Column: DoubleType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}])
-df.select(st_ymax('wkt')).show()
-+-----------------+
-|st_minmaxxyz(wkt)|
-+-----------------+
-|             40.0|
-+-----------------+
-
-
-
-
-
-

st_ymin

-
-
-st_ymin(col)
-

Returns the smallest y coordinate in the input geometry.

-
-
Parameters:
-

col (Column) – Geometry

-
-
Return type:
-

Column: DoubleType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}])
-df.select(st_ymin('wkt')).show()
-+-----------------+
-|st_minmaxxyz(wkt)|
-+-----------------+
-|             10.0|
-+-----------------+
-
-
-
-
-
-

st_zmax

-
-
-st_zmax(col)
-

Returns the largest z coordinate in the input geometry.

-
-
Parameters:
-

col (Column) – Geometry

-
-
Return type:
-

Column: DoubleType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'POINT (30 10 20)'}])
-df.select(st_zmax('wkt')).show()
-+-----------------+
-|st_minmaxxyz(wkt)|
-+-----------------+
-|             20.0|
-+-----------------+
-
-
-
-
-
-

st_zmin

-
-
-st_zmin(col)
-

Returns the smallest z coordinate in the input geometry.

-
-
Parameters:
-

col (Column) – Geometry

-
-
Return type:
-

Column: DoubleType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'POINT (30 10 20)'}])
-df.select(st_zmin('wkt')).show()
-+-----------------+
-|st_minmaxxyz(wkt)|
-+-----------------+
-|             20.0|
-+-----------------+
-
-
-
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/v0.3.x/api/spatial-indexing.html b/v0.3.x/api/spatial-indexing.html deleted file mode 100644 index 6298c2de1..000000000 --- a/v0.3.x/api/spatial-indexing.html +++ /dev/null @@ -1,1566 +0,0 @@ - - - - - - - Spatial grid indexing — Mosaic - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Spatial grid indexing

-

Spatial grid indexing is the process of mapping a geometry (or a point) to one or more cells (or cell ID) -from the selected spatial grid.

-

The grid system can be specified by using the spark configuration spark.databricks.labs.mosaic.index.system -before enabling Mosaic.

-
-
The valid values are:
    -
  • H3 - Good all-rounder for any location on earth

  • -
  • BNG - Local grid system Great Britain (EPSG:27700)

  • -
  • -
    CUSTOM(minX,maxX,minY,maxY,splits,rootCellSizeX,rootCellSizeY) - Can be used with any local or global CRS
      -
    • minX,`maxX`,`minY`,`maxY` can be positive or negative integers defining the grid bounds

    • -
    • splits defines how many splits are applied to each cell for an increase in resolution step (usually 2 or 10)

    • -
    • rootCellSizeX,`rootCellSizeY` define the size of the cells on resolution 0

    • -
    -
    -
    -
  • -
-
-
-

Example

-
-
spark.conf.set("spark.databricks.labs.mosaic.index.system", "H3") # Default
-# spark.conf.set("spark.databricks.labs.mosaic.index.system", "BNG")
-# spark.conf.set("spark.databricks.labs.mosaic.index.system", "CUSTOM(-180,180,-90,90,2,30,30)")
-
-import mosaic as mos
-mos.enable_mosaic(spark, dbutils)
-
-
-
-
-

grid_longlatascellid

-
-
-grid_longlatascellid(lon, lat, resolution)
-

Returns the resolution grid index associated with -the input lon and lat coordinates.

-
-
Parameters:
-
    -
  • lon (Column: DoubleType) – Longitude

  • -
  • lat (Column: DoubleType) – Latitude

  • -
  • resolution (Column: Integer) – Index resolution

  • -
-
-
Return type:
-

Column: LongType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'lon': 30., 'lat': 10.}])
-df.select(grid_longlatascellid('lon', 'lat', lit(10))).show(1, False)
-+----------------------------------+
-|grid_longlatascellid(lon, lat, 10)|
-+----------------------------------+
-|                623385352048508927|
-+----------------------------------+
-
-
-
-
-../_images/h31.png -
-

Fig 1. Point to grid cell in H3(9)

-
-
-
-../_images/bng.png -
-

Fig 2. Point to grid cell in BNG(4)

-
-
-
-
-

grid_pointascellid

-
-
-grid_pointascellid(geometry, resolution)
-

Returns the resolution grid index associated -with the input point geometry geometry.

-
-
Parameters:
-
    -
  • geometry (Column) – Geometry

  • -
  • resolution (Column: Integer) – Index resolution

  • -
-
-
Return type:
-

Column: LongType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'lon': 30., 'lat': 10.}])
-df.select(grid_pointascellid(st_point('lon', 'lat'), lit(10))).show(1, False)
-+------------------------------------------+
-|grid_pointascellid(st_point(lon, lat), 10)|
-+------------------------------------------+
-|623385352048508927                        |
-+------------------------------------------+
-
-
-
-
-../_images/h31.png -
-

Fig 1. Point to grid cell in H3(9)

-
-
-
-../_images/bng.png -
-

Fig 2. Point to grid cell in BNG(4)

-
-
-
-
-

grid_polyfill

-
-
-grid_polyfill(geometry, resolution)
-

Returns the set of grid indices of which centroid is contained in the input geometry at resolution.

-

When using H3 <https://h3geo.org/> index system, this is equivalent to the -H3 polyfill <https://h3geo.org/docs/api/regions/#polyfill> method

-
-
Parameters:
-
    -
  • geometry (Column) – Geometry

  • -
  • resolution (Column: Integer) – Index resolution

  • -
-
-
Return type:
-

Column: ArrayType[LongType]

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{
-    'wkt': 'MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))'
-    }])
-df.select(grid_polyfill('wkt', lit(0))).show(1, False)
-+------------------------------------------------------------+
-|grid_polyfill(wkt, 0)                                       |
-+------------------------------------------------------------+
-|[577586652210266111, 578360708396220415, 577269992861466623]|
-+------------------------------------------------------------+
-
-
-
-
-../_images/h32.png -
-

Fig 1. Polyfill of a polygon in H3(8)

-
-
-
-../_images/bng1.png -
-

Fig 2. Polyfill of a polygon in BNG(4)

-
-
-
-
-

grid_boundaryaswkb

-
-
-grid_boundaryaswkb(cellid)
-

Returns the boundary of the grid cell as a WKB.

-
-
Parameters:
-

cellid (Column: Union(LongType, StringType)) – Grid cell id

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'cellid': 613177664827555839}])
-df.select(grid_boundaryaswkb("cellid").show(1, False)
-+--------------------------+
-|grid_boundaryaswkb(cellid)|
-+--------------------------+
-|[01 03 00 00 00 00 00 00..|
-+--------------------------+
-
-
-
-
-
-

grid_boundary

-
-
-grid_boundary(cellid, format)
-

Returns the boundary of the grid cell as a geometry in specified format.

-
-
Parameters:
-
    -
  • cellid (Column: Union(LongType, StringType)) – Grid cell id

  • -
  • format (Column: StringType) – Geometry format

  • -
-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'cellid': 613177664827555839}])
-df.select(grid_boundary("cellid", "WKT").show(1, False)
-+--------------------------+
-|grid_boundary(cellid, WKT)|
-+--------------------------+
-|          "POLYGON (( ..."|
-+--------------------------+
-
-
-
-
-
-

grid_tessellate

-
-
-grid_tessellate(geometry, resolution, keep_core_geometries)
-

Cuts the original geometry into several pieces along the grid index borders at the specified resolution.

-

Returns an array of Mosaic chips covering the input geometry at resolution.

-

A Mosaic chip is a struct type composed of:

-
    -
  • is_core: Identifies if the chip is fully contained within the geometry: Boolean

  • -
  • index_id: Index ID of the configured spatial indexing (default H3): Integer

  • -
  • wkb: Geometry in WKB format equal to the intersection of the index shape and the original geometry: Binary

  • -
-

In contrast to grid_tessellateexplode, grid_tessellate does not explode the list of shapes.

-

In contrast to grid_polyfill, grid_tessellate fully covers the original geometry even if the index centroid -falls outside of the original geometry. This makes it suitable to index lines as well.

-
-
Parameters:
-
    -
  • geometry (Column) – Geometry

  • -
  • resolution (Column: Integer) – Index resolution

  • -
  • keep_core_geometries (Column: Boolean) – Whether to keep the core geometries or set them to null

  • -
-
-
Return type:
-

Column: ArrayType[MosaicType]

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))'}])
-df.select(grid_tessellate('wkt', lit(0))).printSchema()
-root
- |-- grid_tessellate(wkt, 0): mosaic (nullable = true)
- |    |-- chips: array (nullable = true)
- |    |    |-- element: mosaic_chip (containsNull = true)
- |    |    |    |-- is_core: boolean (nullable = true)
- |    |    |    |-- index_id: long (nullable = true)
- |    |    |    |-- wkb: binary (nullable = true)
-
-
-df.select(grid_tessellate('wkt', lit(0))).show()
-+-----------------------+
-|grid_tessellate(wkt, 0)|
-+-----------------------+
-|   {[{false, 5774810...|
-+-----------------------+
-
-
-
-
-../_images/h33.png -
-

Fig 1. Tessellation of a polygon in H3(8)

-
-
-
-../_images/bng2.png -
-

Fig 2. Tessellation of a polygon in BNG(4)

-
-
-
-
-

grid_tessellateexplode

-
-
-grid_tessellateexplode(geometry, resolution, keep_core_geometries)
-

Cuts the original geometry into several pieces along the grid index borders at the specified resolution.

-

Returns the set of Mosaic chips covering the input geometry at resolution.

-

A Mosaic chip is a struct type composed of:

-
    -
  • is_core: Identifies if the chip is fully contained within the geometry: Boolean

  • -
  • index_id: Index ID of the configured spatial indexing (default H3): Integer

  • -
  • wkb: Geometry in WKB format equal to the intersection of the index shape and the original geometry: Binary

  • -
-

In contrast to grid_tessellate, grid_tessellateexplode generates one result row per chip.

-

In contrast to grid_polyfill, grid_tessellateexplode fully covers the original geometry even if the index centroid -falls outside of the original geometry. This makes it suitable to index lines as well.

-
-
Parameters:
-
    -
  • geometry (Column) – Geometry

  • -
  • resolution (Column: Integer) – Index resolution

  • -
  • keep_core_geometries (Column: Boolean) – Whether to keep the core geometries or set them to null

  • -
-
-
Return type:
-

Column: MosaicType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'wkt': 'MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))'}])
-df.select(grid_tessellateexplode('wkt', lit(0))).show()
-+-----------------------------------------------+
-|is_core|          index_id|                 wkb|
-+-------+------------------+--------------------+
-|  false|577481099093999615|[01 03 00 00 00 0...|
-|  false|578044049047420927|[01 03 00 00 00 0...|
-|  false|578782920861286399|[01 03 00 00 00 0...|
-|  false|577023702256844799|[01 03 00 00 00 0...|
-|  false|577938495931154431|[01 03 00 00 00 0...|
-|  false|577586652210266111|[01 06 00 00 00 0...|
-|  false|577269992861466623|[01 03 00 00 00 0...|
-|  false|578360708396220415|[01 03 00 00 00 0...|
-+-------+------------------+--------------------+
-
-
-
-
-../_images/h33.png -
-

Fig 1. Tessellation of a polygon in H3(8)

-
-
-
-../_images/bng2.png -
-

Fig 2. Tessellation of a polygon in BNG(4)

-
-
-
-
-

grid_cellarea

-
-
-grid_cellarea(cellid)
-

Returns the area of a given cell in km^2.

-
-
Parameters:
-

cellid (Column: Long) – Grid cell ID

-
-
Return type:
-

Column: DoubleType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'grid_cellid': 613177664827555839}])
-df.withColumn(grid_cellarea('grid_cellid').alias("area")).show()
-+------------------------------------+
-|         grid_cellid|           area|
-+--------------------+---------------+
-|  613177664827555839|     0.78595419|
-+--------------------+---------------+
-
-
-
-
-
-

grid_cellkring

-
-
-grid_cellkring(cellid, k)
-

Returns the k-ring of a given cell.

-
-
Parameters:
-
    -
  • cellid (Column: Long) – Grid cell ID

  • -
  • k (Column: Integer) – K-ring size

  • -
-
-
Return type:
-

Column: ArrayType(Long)

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'grid_cellid': 613177664827555839}])
-df.select(grid_cellkring('grid_cellid', lit(2)).alias("kring")).show()
-+-------------------------------------------------------------------+
-|         grid_cellid|                                         kring|
-+--------------------+----------------------------------------------+
-|  613177664827555839|[613177664827555839, 613177664825458687, ....]|
-+--------------------+----------------------------------------------+
-
-
-
-
-../_images/h34.png -
-

Fig 1. Cell based kring(2) in H3(8)

-
-
-
-../_images/bng3.png -
-

Fig 2. Cell based kring(2) in BNG(4)

-
-
-
-
-

grid_cellkringexplode

-
-
-grid_cellkringexplode(cellid, k)
-

Returns the k-ring of a given cell exploded.

-
-
Parameters:
-
    -
  • cellid (Column: Long) – Grid cell ID

  • -
  • k (Column: Integer) – K-ring size

  • -
-
-
Return type:
-

Column: Long

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'grid_cellid': 613177664827555839}])
-df.select(grid_cellkringexplode('grid_cellid', lit(2)).alias("kring")).show()
-+------------------+
-|             kring|
-+------------------+
-|613177664827555839|
-|613177664825458687|
-|613177664831750143|
-|613177664884178943|
-|               ...|
-+------------------+
-
-
-
-
-../_images/h34.png -
-

Fig 1. Cell based kring(2) in H3(8)

-
-
-
-../_images/bng3.png -
-

Fig 2. Cell based kring(2) in BNG(4)

-
-
-
-
-

grid_cell_intersection

-
-
-grid_cell_intersection(left_chip, right_chip)
-

Returns the chip representing the intersection of two chips based on the same grid cell

-
-
Parameters:
-
    -
  • left_chip (Column: ChipType(LongType)) – Chip

  • -
  • left_chip – Chip

  • -
-
-
Return type:
-

Column: ChipType(LongType)

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{"chip": {"is_core": False, "index_id": 590418571381702655, "wkb": ...}})])
-df.select(grid_cell_intersection("chip", "chip").alias("intersection")).show()
----------------------------------------------------------+
-|                                           intersection |
-+--------------------------------------------------------+
-|{is_core: false, index_id: 590418571381702655, wkb: ...}|
-+--------------------------------------------------------+
-
-
-
-
-
-

grid_cell_union

-
-
-grid_cell_union(left_chip, right_chip)
-

Returns the chip representing the union of two chips based on the same grid cell

-
-
Parameters:
-
    -
  • left_chip (Column: ChipType(LongType)) – Chip

  • -
  • left_chip – Chip

  • -
-
-
Return type:
-

Column: ChipType(LongType)

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{"chip": {"is_core": False, "index_id": 590418571381702655, "wkb": ...}})])
-df.select(grid_cell_union("chip", "chip").alias("union")).show()
----------------------------------------------------------+
-|                                           union        |
-+--------------------------------------------------------+
-|{is_core: false, index_id: 590418571381702655, wkb: ...}|
-+--------------------------------------------------------+
-
-
-
-
-
-

grid_cellkloop

-
-
-grid_cellkloop(cellid, k)
-

Returns the k loop (hollow ring) of a given cell.

-
-
Parameters:
-
    -
  • cellid (Column: Long) – Grid cell ID

  • -
  • k (Column: Integer) – K-loop size

  • -
-
-
Return type:
-

Column: ArrayType(Long)

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'grid_cellid': 613177664827555839}])
-df.select(grid_cellkloop('grid_cellid', lit(2)).alias("kloop")).show()
-+-------------------------------------------------------------------+
-|         grid_cellid|                                         kloop|
-+--------------------+----------------------------------------------+
-|  613177664827555839|[613177664827555839, 613177664825458687, ....]|
-+--------------------+----------------------------------------------+
-
-
-
-
-../_images/h35.png -
-

Fig 1. Cell based kring(2) in H3(8)

-
-
-
-../_images/bng4.png -
-

Fig 2. Cell based kring(2) in BNG(4)

-
-
-
-
-

grid_cellkloopexplode

-
-
-grid_cellkloopexplode(cellid, k)
-

Returns the k loop (hollow ring) of a given cell exploded.

-
-
Parameters:
-
    -
  • cellid (Column: Long) – Grid cell ID

  • -
  • k (Column: Integer) – K-loop size

  • -
-
-
Return type:
-

Column: Long

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'grid_cellid': 613177664827555839}])
-df.select(grid_cellkloopexplode('grid_cellid', lit(2)).alias("kloop")).show()
-+------------------+
-|             kloop|
-+------------------+
-|613177664827555839|
-|613177664825458687|
-|613177664831750143|
-|613177664884178943|
-|               ...|
-+------------------+
-
-
-
-
-../_images/h35.png -
-

Fig 1. Cell based kring(2) in H3(8)

-
-
-
-../_images/bng4.png -
-

Fig 2. Cell based kring(2) in BNG(4)

-
-
-
-
-

grid_geometrykring

-
-
-grid_geometrykring(geometry, resolution, k)
-

Returns the k-ring of a given geometry respecting the boundary shape.

-
-
Parameters:
-
    -
  • geometry (Column) – Geometry to be used

  • -
  • resolution (Column: Integer) – Resolution of the index used to calculate the k-ring

  • -
  • k (Column: Integer) – K-ring size

  • -
-
-
Return type:
-

Column: ArrayType(Long)

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'geometry': "MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))"}])
-df.select(grid_geometrykring('geometry', lit(8), lit(1)).alias("kring")).show()
-+-------------------------------------------------------------------+
-|            geometry|                                         kring|
-+--------------------+----------------------------------------------+
-|  "MULTIPOLYGON(..."|[613177664827555839, 613177664825458687, ....]|
-+--------------------+----------------------------------------------+
-
-
-
-
-../_images/h36.png -
-

Fig 1. Geometry based kring(1) in H3(8)

-
-
-
-../_images/bng5.png -
-

Fig 2. Geometry based kring(1) in BNG(4)

-
-
-
-
-

grid_geometrykringexplode

-
-
-grid_geometrykringexplode(geometry, resolution, k)
-

Returns the k-ring of a given geometry exploded.

-
-
Parameters:
-
    -
  • geometry (Column) – Geometry to be used

  • -
  • resolution (Column: Integer) – Resolution of the index used to calculate the k-ring

  • -
  • k (Column: Integer) – K-ring size

  • -
-
-
Return type:
-

Column: Long

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'geometry': "MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))"}])
-df.select(grid_geometrykringexplode('geometry', lit(8), lit(2)).alias("kring")).show()
-+------------------+
-|             kring|
-+------------------+
-|613177664827555839|
-|613177664825458687|
-|613177664831750143|
-|613177664884178943|
-|               ...|
-+------------------+
-
-
-
-
-../_images/h36.png -
-

Fig 1. Cell based kring(2) in H3(8)

-
-
-
-../_images/bng5.png -
-

Fig 2. Cell based kring(2) in BNG(4)

-
-
-
-
-

grid_geometrykloop

-
-
-grid_geometrykloop(geometry, resolution, k)
-

Returns the k-loop (hollow ring) of a given geometry.

-
-
Parameters:
-
    -
  • geometry (Column) – Geometry to be used

  • -
  • resolution (Column: Integer) – Resolution of the index used to calculate the k loop

  • -
  • k (Column: Integer) – K-Loop size

  • -
-
-
Return type:
-

Column: ArrayType(Long)

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'geometry': "MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))"}])
-df.select(grid_geometrykloop('geometry', lit(2)).alias("kloop")).show()
-+-------------------------------------------------------------------+
-|            geometry|                                         kloop|
-+--------------------+----------------------------------------------+
-|  MULTIPOLYGON ((...|[613177664827555839, 613177664825458687, ....]|
-+--------------------+----------------------------------------------+
-
-
-
-
-../_images/h37.png -
-

Fig 1. Cell based kring(2) in H3(8)

-
-
-
-../_images/bng6.png -
-

Fig 2. Cell based kring(2) in BNG(4)

-
-
-
-
-

grid_geometrykloopexplode

-
-
-grid_geometrykloopexplode(geometry, resolution, k)
-

Returns the k loop (hollow ring) of a given geometry exploded.

-
-
Parameters:
-
    -
  • geometry (Column) – Geometry to be used

  • -
  • resolution (Column: Integer) – Resolution of the index used to calculate the k loop

  • -
  • k (Column: Integer) – K-loop size

  • -
-
-
Return type:
-

Column: Long

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'geometry': "MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))"}])
-df.select(grid_geometrykloopexplode('geometry', lit(8), lit(2)).alias("kloop")).show()
-+------------------+
-|             kloop|
-+------------------+
-|613177664827555839|
-|613177664825458687|
-|613177664831750143|
-|613177664884178943|
-|               ...|
-+------------------+
-
-
-
-
-../_images/h37.png -
-

Fig 1. Cell based kring(2) in H3(8)

-
-
-
-../_images/bng6.png -
-

Fig 2. Cell based kring(2) in BNG(4)

-
-
-
-
-

mosaic_explode [Deprecated]

-
-
-mosaic_explode(geometry, resolution, keep_core_geometries)
-

This is an alias for grid_tessellateexplode

-
- -
-
-

mosaicfill [Deprecated]

-
-
-mosaicfill(geometry, resolution, keep_core_geometries)
-

This is an alias for grid_tessellate

-
- -
-
-

point_index_geom [Deprecated]

-
-
-point_index_geom(point, resolution)
-

This is an alias for grid_pointascellid

-
- -
-
-

point_index_lonlat [Deprecated]

-
-
-point_index_lonlat(point, resolution)
-

This is an alias for grid_longlatascellid

-
- -
-
-

polyfill [Deprecated]

-
-
-polyfill(geom, resolution)
-

This is an alias for grid_polyfill

-
- -
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/v0.3.x/api/spatial-predicates.html b/v0.3.x/api/spatial-predicates.html deleted file mode 100644 index 8afe3247e..000000000 --- a/v0.3.x/api/spatial-predicates.html +++ /dev/null @@ -1,321 +0,0 @@ - - - - - - - Spatial predicates — Mosaic - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Spatial predicates

-
-

st_contains

-
-
-st_contains(geom1, geom2)
-

Returns true if geom1 ‘spatially’ contains geom2.

-
-
Parameters:
-
    -
  • geom1 (Column) – Geometry

  • -
  • geom2 (Column) – Geometry

  • -
-
-
Return type:
-

Column: BooleanType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'point': 'POINT (25 15)', 'poly': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}])
-df.select(st_contains('poly', 'point')).show()
-+------------------------+
-|st_contains(poly, point)|
-+------------------------+
-|                    true|
-+------------------------+
-
-
-
-
-

Note

-

ST_Within is the inverse of ST_Contains, where ST_Contains(a, b)==ST_Within(b,a).

-
-
-
-

st_intersects

-
-
-st_intersects(geom1, geom2)
-

Returns true if the geometry geom1 intersects geom2.

-
-
Parameters:
-
    -
  • geom1 (Column) – Geometry

  • -
  • geom2 (Column) – Geometry

  • -
-
-
Return type:
-

Column: BooleanType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'p1': 'POLYGON ((0 0, 0 3, 3 3, 3 0))', 'p2': 'POLYGON ((2 2, 2 4, 4 4, 4 2))'}])
-df.select(st_intersects(col('p1'), col('p2'))).show(1, False)
-+---------------------+
-|st_intersects(p1, p2)|
-+---------------------+
-|                 true|
-+---------------------+
-
-
-
-
-

Note

-

Intersection logic will be dependent on the chosen geometry API (ESRI or JTS). ESRI is only available for mosaic < 0.4.x series, in mosaic >= 0.4.0 JTS is the only geometry API.

-
-
-
-

st_within

-
-
-st_within(geom1, geom2)
-

Returns true if geom1 ‘spatially’ is within geom2.

-
-
Parameters:
-
    -
  • geom1 (Column) – Geometry

  • -
  • geom2 (Column) – Geometry

  • -
-
-
Return type:
-

Column: BooleanType

-
-
Example:
-

-
-
- -
-
df = spark.createDataFrame([{'point': 'POINT (25 15)', 'poly': 'POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))'}])
-df.select(st_within('point', 'poly')).show()
-+----------------------+
-|st_within(point, poly)|
-+----------------------+
-|                  true|
-+----------------------+
-
-
-
-
-

Note

-

ST_Within is the inverse of ST_Contains, where ST_Contains(a, b)==ST_Within(b,a).

-
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/v0.3.x/api/vector-format-readers.html b/v0.3.x/api/vector-format-readers.html deleted file mode 100644 index 7d1eb851d..000000000 --- a/v0.3.x/api/vector-format-readers.html +++ /dev/null @@ -1,418 +0,0 @@ - - - - - - - Vector Format Readers — Mosaic - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Vector Format Readers

-
-

Intro

-

Mosaic provides spark readers for vector files supported by GDAL OGR drivers. -Only the drivers that are built by default are supported. -Here are some common useful file formats:

-
-
-
-

For more information please refer to gdal documentation: https://gdal.org/drivers/vector/index.html

-

Mosaic provides two flavors of the readers: -* spark.read.format(“ogr”) for reading 1 file per spark task -* mos.read().format(“multi_read_ogr”) for reading file in parallel with multiple spark tasks

-
-

spark.read.format(“ogr”)

-

A base Spark SQL data source for reading GDAL vector data sources. -The output of the reader is a DataFrame with inferred schema. -The schema is inferred from both features and fields in the vector file. -Each feature will be provided as 2 columns: -* geometry - geometry of the feature (GeometryType) -* srid - spatial reference system identifier of the feature (StringType)

-

The fields of the feature will be provided as columns in the DataFrame. -The types of the fields are coerced to most concrete type that can hold all the values. -The reader supports the following options:

-
-
    -
  • driverName - GDAL driver name (StringType)

  • -
  • vsizip - if the vector files are zipped files, set this to true (BooleanType)

  • -
  • asWKB - if the geometry should be returned as WKB (BooleanType) - default is false

  • -
  • layerName - name of the layer to read (StringType)

  • -
  • layerNumber - number of the layer to read (IntegerType)

  • -
-
-
-
-read.format("ogr").load(path)
-

Loads a vector file and returns the result as a DataFrame.

-
-
Parameters:
-

path – the path of the vector file

-
-
Returns:
-

DataFrame

-
-
Example:
-

-
-
- -
-
df = spark.read.format("ogr")\
-    .option("driverName", "GeoJSON")\
-    .option("layerName", "points")\
-    .option("asWKB", "false")\
-    .load("file:///tmp/points.geojson")
-df.show()
-+--------------------+-------+-----+-----------------+-----------+
-|             field_1|field_2| ... |           geom_1|geom_1_srid|
-+--------------------+-------+-----+-----------------+-----------+
-|       "description"|      1| ... | POINT (1.0 1.0) |       4326|
-|       "description"|      2| ... | POINT (2.0 2.0) |       4326|
-|       "description"|      3| ... | POINT (3.0 3.0) |       4326|
-+--------------------+-------+-----+-----------------+-----------+
-
-
-
-
-
-

mos.read().format(“multi_read_ogr”)

-

Mosaic supports reading vector files in parallel with multiple spark tasks. -The amount of data per task is controlled by the chunkSize option. -Chunk size is the number of file rows that will be read per single task. -The output of the reader is a DataFrame with inferred schema. -The schema is inferred from both features and fields in the vector file. -Each feature will be provided as 2 columns: -* geometry - geometry of the feature (GeometryType) -* srid - spatial reference system identifier of the feature (StringType)

-

The fields of the feature will be provided as columns in the DataFrame. -The types of the fields are coerced to most concrete type that can hold all the values. -The reader supports the following options:

-
-
    -
  • driverName - GDAL driver name (StringType)

  • -
  • vsizip - if the vector files are zipped files, set this to true (BooleanType)

  • -
  • asWKB - if the geometry should be returned as WKB (BooleanType) - default is false

  • -
  • chunkSize - size of the chunk to read from the file per single task (IntegerType) - default is 5000

  • -
  • layerName - name of the layer to read (StringType)

  • -
  • layerNumber - number of the layer to read (IntegerType)

  • -
-
-
-
-read.format("multi_read_ogr").load(path)
-

Loads a vector file and returns the result as a DataFrame.

-
-
Parameters:
-

path – the path of the vector file

-
-
Returns:
-

DataFrame

-
-
Example:
-

-
-
- -
-
df = mos.read().format("multi_read_ogr")\
-    .option("driverName", "GeoJSON")\
-    .option("layerName", "points")\
-    .option("asWKB", "false")\
-    .load("file:///tmp/points.geojson")
-df.show()
-+--------------------+-------+-----+-----------------+-----------+
-|             field_1|field_2| ... |           geom_1|geom_1_srid|
-+--------------------+-------+-----+-----------------+-----------+
-|       "description"|      1| ... | POINT (1.0 1.0) |       4326|
-|       "description"|      2| ... | POINT (2.0 2.0) |       4326|
-|       "description"|      3| ... | POINT (3.0 3.0) |       4326|
-+--------------------+-------+-----+-----------------+-----------+
-
-
-
-
-
-

spark.read().format(“geo_db”)

-

Mosaic provides a reader for GeoDB files natively in Spark. -The output of the reader is a DataFrame with inferred schema. -Only 1 file per task is read. For parallel reading of large files use the multi_read_ogr reader. -The reader supports the following options:

-
-
    -
  • asWKB - if the geometry should be returned as WKB (BooleanType) - default is false

  • -
  • layerName - name of the layer to read (StringType)

  • -
  • layerNumber - number of the layer to read (IntegerType)

  • -
  • vsizip - if the vector files are zipped files, set this to true (BooleanType)

  • -
-
-
-
-read.format("geo_db").load(path)
-

Loads a GeoDB file and returns the result as a DataFrame.

-
-
Parameters:
-

path – the path of the GeoDB file

-
-
Returns:
-

DataFrame

-
-
Example:
-

-
-
- -
-
df = spark.read.format("geo_db")\
-    .option("layerName", "points")\
-    .option("asWKB", "false")\
-    .load("file:///tmp/points.geodb")
-df.show()
-+--------------------+-------+-----+-----------------+-----------+
-|             field_1|field_2| ... |           geom_1|geom_1_srid|
-+--------------------+-------+-----+-----------------+-----------+
-|       "description"|      1| ... | POINT (1.0 1.0) |       4326|
-|       "description"|      2| ... | POINT (2.0 2.0) |       4326|
-|       "description"|      3| ... | POINT (3.0 3.0) |       4326|
-+--------------------+-------+-----+-----------------+-----------+
-
-
-
-
-
-

spark.read().format(“shapefile”)

-

Mosaic provides a reader for Shapefiles natively in Spark. -The output of the reader is a DataFrame with inferred schema. -Only 1 file per task is read. For parallel reading of large files use the multi_read_ogr reader. -The reader supports the following options:

-
-
    -
  • asWKB - if the geometry should be returned as WKB (BooleanType) - default is false

  • -
  • layerName - name of the layer to read (StringType)

  • -
  • layerNumber - number of the layer to read (IntegerType)

  • -
  • vsizip - if the vector files are zipped files, set this to true (BooleanType)

  • -
-
-
-
-read.format("shapefile").load(path)
-

Loads a Shapefile and returns the result as a DataFrame.

-
-
Parameters:
-

path – the path of the Shapefile

-
-
Returns:
-

DataFrame

-
-
Example:
-

-
-
- -
-
df = spark.read.format("shapefile")\
-    .option("layerName", "points")\
-    .option("asWKB", "false")\
-    .load("file:///tmp/points.shp")
-df.show()
-+--------------------+-------+-----+-----------------+-----------+
-|             field_1|field_2| ... |           geom_1|geom_1_srid|
-+--------------------+-------+-----+-----------------+-----------+
-|       "description"|      1| ... | POINT (1.0 1.0) |       4326|
-|       "description"|      2| ... | POINT (2.0 2.0) |       4326|
-|       "description"|      3| ... | POINT (3.0 3.0) |       4326|
-+--------------------+-------+-----+-----------------+-----------+
-
-
-
-
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/v0.3.x/genindex.html b/v0.3.x/genindex.html deleted file mode 100644 index 615b95e5b..000000000 --- a/v0.3.x/genindex.html +++ /dev/null @@ -1,1340 +0,0 @@ - - - - - - Index — Mosaic - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - -
  • -
  • -
-
-
-
-
- - -

Index

- -
- B - | F - | G - | M - | P - | R - | S - -
-

B

- - -
- -

F

- - -
- -

G

- - - -
- -

M

- - - -
- -

P

- - - -
- -

R

- - - -
- -

S

- - - -
- - - -
-
-
- -
- -
-

© Copyright 2022, Databricks Inc.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - \ No newline at end of file diff --git a/v0.3.x/index.html b/v0.3.x/index.html deleted file mode 100644 index 6afa1286b..000000000 --- a/v0.3.x/index.html +++ /dev/null @@ -1,202 +0,0 @@ - - - - - - - Documentation — Mosaic - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- - -
-PyPI Version -PyPI Monthly Downloads -Codecov -build -Mosaic sphinx docs -Language grade: Python -Code style: black -
-

Mosaic is an extension to the Apache Spark framework that allows easy and fast processing of very large geospatial datasets.

-
-

Warning

-

Warning: You are in a historic version (0.3.14) of the documentation!

-

For the latest version please go to latest docs.

-
-
-

Warning

-
-
From versions after 0.3.x, Mosaic will require either
    -
  • Databricks Runtime 11.2+ with Photon enabled

  • -
  • Databricks Runtime for ML 11.2+

  • -
-
-
-

Mosaic 0.3 series does not yet support DBR 13 (coming soon); -also, DBR 10 is no longer supported in Mosaic.

-
-

We currently recommend using Databricks Runtime versions 11.3 LTS or 12.2 LTS with Photon enabled; -this will leverage the Databricks H3 expressions when using H3 grid system.

-
-
Mosaic provides:
    -
  • easy conversion between common spatial data encodings (WKT, WKB and GeoJSON);

  • -
  • constructors to easily generate new geometries from Spark native data types;

  • -
  • many of the OGC SQL standard ST_ functions implemented as Spark Expressions for transforming, aggregating and joining spatial datasets;

  • -
  • high performance through implementation of Spark code generation within the core Mosaic functions;

  • -
  • optimisations for performing point-in-polygon joins using an approach we co-developed with Ordnance Survey (blog post); and

  • -
  • the choice of a Scala, SQL and Python API.

  • -
-
-
-
-

Documentation

- -
-
-

Indices and tables

- -
-
-

Project Support

-

Please note that all projects in the databrickslabs github space are provided for your exploration only, and are not formally supported by Databricks with Service Level Agreements (SLAs). They are provided AS-IS and we do not make any guarantees of any kind. Please do not submit a support ticket relating to any issues arising from the use of these projects.

-

Any issues discovered through the use of this project should be filed as GitHub Issues on the Repo. They will be reviewed as time permits, but there are no formal SLAs for support.

-
- - -
-
- -
-
-
-
- - - - diff --git a/v0.3.x/literature/videos.html b/v0.3.x/literature/videos.html deleted file mode 100644 index 328374444..000000000 --- a/v0.3.x/literature/videos.html +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - - Mosaic Videos and Talks — Mosaic - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Mosaic Videos and Talks

-

In this section we will provide links to videos and talks that are related to the Mosaic project. -Some of these are videos of talks given by the Mosaic team, while others are videos of talks given -by others that are related to the Mosaic project or related to GIS in general. Note: speaker images are linked to their linkedin profiles.

-
-
-

Mosaic: A Framework for Geospatial Analytics at Scale

-
-
-

Location: Data and AI Summit, San Francisco, March 2022

-

This video provides an overview of the Mosaic project and the Mosaic framework and the vision Mosaic team had once the project was started. - It also provides an example of how Mosaic can address use cases such as Ship To Ship Transfer of Goods Detection and how to integrate Mosaic - and Delta Live Tables to build a geospatial analytics pipeline for ingestion of Open Street Map data.

-
- -
    -
  • - -

    Stuart Lynn

    -
  • -
  • - -

    Milos Colic

    -
  • -
- -
-
-

Advancing Spark - Intro to H3 and Mosaic

-
-
-

Location: Virtual, December 2022

-

This video provides an overview of Grid Base Index systems, specifically H3 and how it can be used to address geospatial use cases. - It also provides a discussion around geospatial data specificities and how that fits into big data and distributed data processing.

-
- -
    -
  • - -

    Simon Whiteley

    -
  • -
  • - -

    Milos Colic

    -
  • -
- -
-
-

Vector and Raster Data Unification Through H3

-
-
-

Location: Spatial Data Science Conference, London, May 2023

-

This unification facilitates an easy plugin/plugout capability for all raster and vector layers. Databricks used these principles to design an easy, scalable and extensible Flood Risk for Physical Assets solution using H3 as a unification grid.

-
- -
    -
  • - -

    Milos Colic

    -
  • -
- -
-
-

Advancing the Geospatial Lakehouse

-
-
-

Location: Spatial Data Science Conference, New York, November 2022

-

Kent Marten, Staff Product Manager at Databricks, provides an overview of the Databricks Lakehouse, and how its performance and flexibility make it ideal for - geospatial data processing and analytics. Kent will deep-dive into recent boundary-pushing performance improvements with H3, benchmarks included.

-
- -
    -
  • - -

    Kent Marten

    -
  • -
- -
-
-

Mosaic: A Framework for Geospatial Analytics at Scale

-
-
-

Location: Spatial Data Science Conference, London, May 2022

-

This video walks us through Geospatial Analytics on the Lakehouse, discussing how to build scalable, efficient, cloud-based, - data platforms based on the Lakehouse architecture. It also covers two initiatives: Product Integrations with CARTO & Project Mosaic. - Mosaic is a Databricks Labs project, which brings a unified framework for distributing geospatial analytics on Databricks.

-
- -
    -
  • - -

    Milos Colic

    -
  • -
- -
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/v0.3.x/models/models.html b/v0.3.x/models/models.html deleted file mode 100644 index 2bb467d94..000000000 --- a/v0.3.x/models/models.html +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - - Models — Mosaic - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
- - -
-
-
-
- - - - \ No newline at end of file diff --git a/v0.3.x/models/spatial-knn.html b/v0.3.x/models/spatial-knn.html deleted file mode 100644 index 7bb39c8fd..000000000 --- a/v0.3.x/models/spatial-knn.html +++ /dev/null @@ -1,476 +0,0 @@ - - - - - - - Spatial K Nearest Neighbours — Mosaic - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Spatial K Nearest Neighbours

-
    -
  • Runnable notebook based python example available, see here

  • -
  • Also, reference SpatialKNN code-level APIs Python | Scala for any additions or changes

  • -
-
-

Intro

-

Nearest neighbour problem is defined as finding an observation from a set S that is the most similar to the given -observation O. The similarity is defined by a distance function d(O, S[i]). The most common distance function is the Euclidean. -The nearest neighbour problem is a special case of the k-nearest neighbour problem, where k=1. The k-nearest neighbour -problem is defined as finding k observations from a set S that are the most similar to the given observation O.

-
-../_images/nearest_neighbour.png -
-

Fig 1. Nearest neighbour problem

-
-
-

We define spatial k-nearest neighbour problem as finding k observations from a set of candidates C that are the most similar to the -given a landmark L[i], where the similarity is defined by a distance function d(L[i], S[j]) = st_distance(L[i], S[j]). -In our case we further define the similarity as the inverse of the distance, so the most similar observation is the one with -the smallest distance. ST_Distance function is defined as the shortest distance between two geometries in projected units. -We do not restrict the type of geometries that can be used in the problem. The only requirement is that the geometries -must be in the same coordinate system.

-
-
-

Spatial KNN as a Join Relation

-

The traditional definition of the nearest neighbour problem is defined as: -“given a set S of points in a space M and a query point q in M, find the point in S that is closest to q”. -We have relaxed this definition by allowing the query point to be a set of points. In our case the result of the nearest -neighbour problem is a set of geometries from the candidates set C that are closest to each query geometry from the -set of landmarks L. This in effect formulates a join condition where a point pair (L[i], C[j]) is a match if -st_distance(L[i], C[j]) <= st_distance(L[i], C[k]) where C[k] is the kth nearest neighbour of L[i].

-

The above definition of k nearest neighbour problem is in effect a left join between the set of landmarks L and the set of -candidates C. The result set isn’t symmetric and it does depend on the direction of operation. If S[j] is in the knn set of Q[i] -it does not imply that Q[i] is in the knn set of S[j]. This join would default to a Cartesian product if we were to -use the traditional join syntax. We have to use a different approach.

-
-
-

Spatial KNN as an Iterative Transformation

-

The problem of finding the k-nearest neighbours can be formulated as an iterative transformation. The transformation -is defined as follows: -* For each geometry in set L generate a hex ring in grid index space -* Generate match candidates in the hex ring -* For each match candidate C[j] calculate the distance to the landmark geometry L[i] -* For each landmark geometry L[i] count the matches and stop if the count is equal to k -* If the count is less than k, increase the size of the hex ring and repeat the process -* If the count exceeds k, remove the matches that are furthest from the landmark and stop -iterating over the hex ring for L[i] -* Evaluate early stopping condition (if enabled): Stop if no new match candidates are found -in the hex ring for any L[i] geometry in the set L for N iterations (knn.setEarlyStopIterations(N)) -* Continue with the next hex ring until max number of iterations is performed -* Return the geometries that have the smallest distance to the query geometries

-
-../_images/spatial_knn_iterations.png -
-

Fig 2. Spatial KNN example over 4 iterations.

-
-
-
-
-

Parameters

-

The transformer has the following parameters:

-
    -
  • candidatesDf: the dataframe containing the geometries that will be used as candidates for the KNN search

  • -
  • candidatesFeatureCol: the name of the column that contains the candidates geometries

  • -
  • candidatesRowID: the name of the column that contains the candidates ids

  • -
  • landmarksFeatureCol: the name of the column that contains the landmarks geometries

  • -
  • landmarksRowID: the name of the column that contains the landmarks ids

  • -
  • kNeighbours: the number of neighbours to return

  • -
  • maxIterations: the maximum number of iterations to perform

  • -
  • distanceThreshold: the distance threshold to stop the iterations (in CRS units)

  • -
  • earlyStopIterations: the number of subsequent iterations upon which to stop if no new neighbours

  • -
  • checkpointTablePrefix: the prefix of the checkpoint table

  • -
  • indexResolution: the resolution of the index (grid system specific)

  • -
  • approximate: whether to stop after max iterations (approximate = true) or to -perform the finalisation step (approximate = false) - no default value, the caller must specify this parameter

  • -
-

Param distanceThreshold is specific to the CRS used, e.g. for 4326 units are decimal degrees. -This is useful as a a safety net for coarse grained indexResolution choices which could easily span large chunks of the globe.

-

If the approximate is set to true the transformer wont perform the finalisation step. -The finalisation takes into account that grid index cells may be skewed at different -locations and we cant ensure radial growth between iterations. That means that some -of the neighbours in returned K set aren’t nearest neighbours. The finalisation step -will take the distance between the neighbours and the target geometry and will generate -a buffered geometry around the target geometry. The buffered geometry will be used to -identify missed neighbours. The missed neighbours will be added to the K set and the -set will be sorted by distance to the target geometry. Grid cells can be skewed at different -locations in a different way, meaning the hex rings are more of ellipses than circles. -To account for that we need to perform the finalisation step that is based on buffer geometries.

-
-
-

Usage

-

Mosaic implements a transformer that implements the iterative approach outlined above. -The transformer is called SpatialKNN and it is used as follows:

-
-
import mosaic as mos
-mos.enable_mosaic(spark, dbutils)
->>>
-spark.sparkContext.setCheckpointDir("dbfs:/tmp/mosaic/username/checkpoints")
->>>
-building_df = spark.read.table("building")
-trip_df = spark.read.table("trip")
-
-from mosaic.models import SpatialKNN
->>>
-knn = SpatialKNN()
-
-knn.setUseTableCheckpoint(True)
-knn.setCheckpointTablePrefix("checkpoint_table_knn")
-knn.model.cleanupCheckpoint
->>>
-# CRS Specific
-# - e.g. 4326 units are decimal degrees
-knn.setDistanceThreshold(1.0)
-
-# Grid System Specific
-# - e.g. H3 resolutions 0-15
-knn.setIndexResolution(10)
->>>
-knn.setKNeighbours(5)
-knn.setApproximate(True)
-knn.setMaxIterations(10)
-knn.setEarlyStopIterations(3)
->>>
-knn.setLandmarksFeatureCol("geom_wkt")
-knn.setLandmarksRowID("left_id") # id will be generated
->>>
-knn.setCandidatesDf(trip_df.where("pickup_point is not null"))
-knn.setCandidatesFeatureCol("pickup_point")
-knn.setCandidatesRowID("right_id") # id will be generated
->>>
-neighbours = knn.transform(building_df)
-neighbours.display()
-+-------+--------+-----------+--------------+--------------------------+---------+----------------+
-|left_id|right_id|   geometry|right_geometry|geometry_geometry_distance|iteration|neighbour_number|
-+-------+--------+-----------+--------------+--------------------------+---------+----------------+
-|   1012|    2012|POLYGON(...|LINESTRING(...|                       0.0|        0|               1|
-|   1012|    2013|POLYGON(...|LINESTRING(...|                     2.145|        0|               2|
-|   1012|    2014|POLYGON(...|LINESTRING(...|                    2.1787|        2|               3|
-|   1013|    2013|POLYGON(...|LINESTRING(...|                       0.0|        0|               1|
-|   1013|    2014|POLYGON(...|LINESTRING(...|                    1.1112|        1|               1|
-+-------+--------+-----------+--------------+--------------------------+---------+----------------+
-
-
-
-

Note: the transformer is implemented only in python and scala at the moment.

-

Mosaic supports all indexing systems for this transformer. -Please see Spatial Indexing for supported indexing operations.

-
-
-

Visualisation

-

The transformer returns a dataframe with the following columns:

-
    -
  • left_id: the id of the left geometry

  • -
  • right_id: the id of the right geometry

  • -
  • geometry: the left geometry

  • -
  • right_geometry: the right geometry

  • -
  • geometry_geometry_distance: the distance between the left and right geometry

  • -
  • iteration: the iteration number

  • -
  • neighbour_number: the number of the neighbour in the K set

  • -
  • any other column from left dataset will be returned as well

  • -
  • any other column from right dataset will be returned as well

  • -
  • -
    any column name that appears in both datasets will be suffixed with _right for the right dataset,

    left dataset column names wont be altered

    -
    -
    -
  • -
-

For visualisation purposes we advise that you select the following columns:

-
    -
  • left_id

  • -
  • right_id

  • -
  • geometry

  • -
  • right_geometry

  • -
  • geometry_geometry_distance

  • -
-

The following image shows the result of the transformer applied on the buildings and taxi trip pickup locations:

-
-../_images/knn_result_visualisation.png -
-

Fig 3. Spatial KNN example visualisation.

-
-
-
-
-

Mlflow Integration

-

SpatialKNN transformer supports mlflow integration since it extends spark.mllib APIs. -In addition the transformer comes with .getParams() and .getMetrics() methods to facilitate -easy logging with mlflow. The .getParams() method returns a dictionary with the parameters -of the transformer. The .getMetrics() method returns a dictionary with the metrics of the -transformer after the convergence.

-
-
import mosaic as mos
-mos.enable_mosaic(spark, dbutils)
->>>
-from mosaic.models import SpatialKNN
-import mlflow
-mlflow.autolog(disable=False)
->>>
-with mlflow.start_run():
->>>
-    knn = SpatialKNN()
-    ...
-    result_df = knn.transform(...)
->>>
-    mlflow.log_params(knn.getParams())
-    mlflow.log_metrics(knn.getMetrics())
-
-
-
-
-../_images/knn_mlflow_notebook.png -
-

Fig 4. Spatial KNN mlflow integration in notebooks.

-
-
-
-../_images/knn_mlflow_params.png -
-

Fig 5. Spatial KNN mlflow integration params.

-
-
-
-../_images/knn_mlflow_metrics.png -
-

Fig 6. Spatial KNN mlflow integration metrics.

-
-
-
-
-

Model serialisation

-

The transformer can be serialised and deserialised using the model.write.save() and model.read.load() methods. -The serialised model can be used for audit purposes only. -The transformers are not models in a pure sense - they do not create a new object that can be called on each row. -The outputs of knn transformer is a dataframe with the neighbours of each geometry. -To run the transform method one has to have access to both the landmarks and the candidates datasets. -These datasets are not serialised with the model, and neither are the model outputs.

-
-
import mosaic as mos
-mos.enable_mosaic(spark, dbutils)
->>>
-spark.sparkContext.setCheckpointDir("dbfs:/tmp/mosaic/username/checkpoints")
->>>
-from mosaic.models import SpatialKNN
-knn = SpatialKNN()
-...
->>>
-knn.write.save("dbfs:/tmp/mosaic/username/knn_model")
-loaded_knn = SpatialKNN.read.load("dbfs:/tmp/mosaic/username/knn_model")
-loaded_knn.getParams()
-{'approximate': 'true',
- 'candidatesFeatureCol': 'pickup_point',
- 'candidatesRowID': 'candidates_id',
- 'checkpointTablePrefix': 'checkpoint_table_knn',
- 'distanceThreshold': '1.0',
- 'earlyStopIterations': '3',
- 'indexResolution': '10',
- 'kNeighbours': '20',
- 'landmarksFeatureCol': 'geom_wkt',
- 'landmarksRowID': 'landmarks_id',
- 'maxIterations': '10',
- 'useTableCheckpoint': 'true'}
-
-
-
-
-
-

Shape Aware Hex Rings

-

When performing the iterations the transformer will use the grid to identify -the candidates for the K set. The grid is generated using the shape aware -hex rings algorithm. The algorithm will generate a grid that will be skewed -in the direction of the target geometry. -If the target geometry is a point the hex ring will coincide with the grid -base implementation. If the target geometry is a line the hex ring will be skewed in -the direction of the line. If the target geometry is a polygon the hex ring will be -skewed around the shape of the polygon, the polygon holes will be considered.

-
-../_images/knn_line_hexrings.png -
-

Fig 7. Spatial KNN example of shape aware hex rings.

-
-
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/v0.3.x/objects.inv b/v0.3.x/objects.inv deleted file mode 100644 index d06d359c9..000000000 Binary files a/v0.3.x/objects.inv and /dev/null differ diff --git a/v0.3.x/search.html b/v0.3.x/search.html deleted file mode 100644 index 335dfb8c4..000000000 --- a/v0.3.x/search.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - Search — Mosaic - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
-
    -
  • - -
  • -
  • -
-
-
-
-
- - - - -
- -
- -
-
-
- -
- -
-

© Copyright 2022, Databricks Inc.

-
- - Built with Sphinx using a - theme - provided by Read the Docs. - - -
-
-
-
-
- - - - - - - - - \ No newline at end of file diff --git a/v0.3.x/searchindex.js b/v0.3.x/searchindex.js deleted file mode 100644 index 4d8bef961..000000000 --- a/v0.3.x/searchindex.js +++ /dev/null @@ -1 +0,0 @@ -Search.setIndex({"docnames": ["api/api", "api/geometry-accessors", "api/geometry-constructors", "api/raster-format-readers", "api/raster-functions", "api/rasterio-udfs", "api/spatial-aggregations", "api/spatial-functions", "api/spatial-indexing", "api/spatial-predicates", "api/vector-format-readers", "index", "literature/videos", "models/models", "models/spatial-knn", "usage/automatic-sql-registration", "usage/grid-indexes", "usage/grid-indexes-bng", "usage/install-gdal", "usage/installation", "usage/kepler", "usage/quickstart", "usage/usage"], "filenames": ["api/api.rst", "api/geometry-accessors.rst", "api/geometry-constructors.rst", "api/raster-format-readers.rst", "api/raster-functions.rst", "api/rasterio-udfs.rst", "api/spatial-aggregations.rst", "api/spatial-functions.rst", "api/spatial-indexing.rst", "api/spatial-predicates.rst", "api/vector-format-readers.rst", "index.rst", "literature/videos.rst", "models/models.rst", "models/spatial-knn.rst", "usage/automatic-sql-registration.rst", "usage/grid-indexes.ipynb", "usage/grid-indexes-bng.rst", "usage/install-gdal.rst", "usage/installation.rst", "usage/kepler.ipynb", "usage/quickstart.ipynb", "usage/usage.rst"], "titles": ["API Documentation", "Geometry accessors", "Geometry constructors", "Raster Format Readers", "Raster functions", "Rasterio UDFs", "Spatial aggregation functions", "Spatial functions", "Spatial grid indexing", "Spatial predicates", "Vector Format Readers", "Documentation", "Mosaic Videos and Talks", "Models", "Spatial K Nearest Neighbours", "Automatic SQL registration", "Using grid index systems in Mosaic", "BNG - British National Grid", "GDAL Installation guide", "Installation guide", "Kepler visualizations", "Quickstart notebook", "Usage"], "terms": {"vector": [0, 4, 11, 12, 19], "format": [0, 4, 5, 7, 8, 11, 16, 17, 20, 22], "reader": [0, 11], "intro": [0, 12, 13, 22], "raster": [0, 10, 11, 12, 15], "geometri": [0, 4, 6, 7, 8, 9, 10, 11, 14, 15, 16, 17, 19, 22], "constructor": [0, 11, 22], "st_point": [0, 1, 8, 21], "st_makelin": [0, 21], "st_makepolygon": [0, 21], "st_geomfromwkt": [0, 7], "st_geomfromwkb": 0, "st_geomfromgeojson": [0, 16, 20, 21], "accessor": [0, 11], "st_asbinari": 0, "st_asgeojson": 0, "st_astext": [0, 6, 7], "st_aswkb": [0, 2, 20], "st_aswkt": [0, 20, 21], "spatial": [0, 3, 4, 10, 11, 12, 13, 15, 16, 17, 19, 20, 22], "function": [0, 3, 5, 11, 14, 15, 16, 17, 18, 20, 21, 22], "flatten_polygon": 0, "st_area": [0, 21], "st_buffer": 0, "st_bufferloop": 0, "st_centroid2d": 0, "deprec": [0, 19], "st_centroid": 0, "st_convexhul": 0, "st_differ": 0, "st_dimens": 0, "st_distanc": [0, 14], "st_dump": 0, "st_envelop": 0, "st_geometrytyp": 0, "st_haversin": 0, "st_hasvalidcoordin": [0, 17], "st_intersect": 0, "st_isvalid": 0, "st_length": [0, 21], "st_numpoint": 0, "st_perimet": 0, "st_rotat": 0, "st_scale": 0, "st_setsrid": [0, 17], "st_simplifi": 0, "st_srid": 0, "st_transform": [0, 17], "st_translat": 0, "st_union": 0, "st_unaryunion": 0, "st_x": 0, "st_xmax": 0, "st_xmin": 0, "st_y": 0, "st_ymax": 0, "st_ymin": 0, "st_zmax": 0, "st_zmin": 0, "grid": [0, 3, 4, 11, 12, 14, 19, 20, 22], "index": [0, 3, 4, 5, 10, 11, 12, 14, 15, 17, 22], "grid_longlatascellid": [0, 16, 21], "grid_pointascellid": 0, "grid_polyfil": [0, 16, 21], "grid_boundaryaswkb": 0, "grid_boundari": 0, "grid_tessel": 0, "grid_tessellateexplod": [0, 6, 20, 21], "grid_cellarea": 0, "grid_cellkr": 0, "grid_cellkringexplod": 0, "grid_cell_intersect": 0, "grid_cell_union": 0, "grid_cellkloop": 0, "grid_cellkloopexplod": 0, "grid_geometrykr": 0, "grid_geometrykringexplod": 0, "grid_geometrykloop": 0, "grid_geometrykloopexplod": 0, "mosaic_explod": 0, "mosaicfil": 0, "point_index_geom": 0, "point_index_lonlat": 0, "polyfil": [0, 16], "predic": [0, 11], "st_contain": [0, 21], "st_within": 0, "aggreg": [0, 4, 11, 21], "st_intersects_aggreg": 0, "st_intersection_aggreg": 0, "st_union_agg": 0, "grid_cell_intersection_agg": 0, "grid_cell_union_agg": 0, "rasterio": [0, 11], "udf": [0, 11], "plot": [0, 21], "exampl": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 12, 14, 15, 21, 22], "comput": [0, 4, 6, 7, 22], "band": [0, 3, 4], "statist": [0, 4], "ndvi": [0, 4], "write": [0, 14, 20], "file": [0, 3, 4, 10, 11, 15, 19], "disk": 0, "col": [1, 2, 4, 5, 6, 7, 8, 9, 16, 20, 21], "translat": [1, 7, 21], "its": [1, 4, 12, 19], "well": [1, 2, 5, 7, 8, 14, 21], "known": [1, 2, 7, 17, 21], "binari": [1, 2, 4, 5, 8, 21], "wkb": [1, 2, 4, 6, 8, 10, 11, 17, 21], "represent": [1, 4, 20, 21], "paramet": [1, 2, 3, 4, 6, 7, 8, 9, 10, 13, 16, 17, 20, 21], "column": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 14, 16, 20, 21], "stringtyp": [1, 2, 3, 4, 7, 8, 10], "hextyp": 1, "jsontyp": 1, "internalgeometrytyp": [1, 2], "return": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 14, 16, 21], "type": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 14, 21], "binarytyp": [1, 2], "python": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 14, 15, 17, 19, 20, 21], "scala": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 14, 15, 17, 19], "sql": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 16, 17, 20, 21, 22], "r": [1, 2, 6, 7, 8, 9, 17, 19], "df": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 17], "spark": [1, 2, 4, 5, 6, 7, 8, 9, 11, 12, 14, 15, 16, 17, 18, 19, 21], "createdatafram": [1, 2, 6, 7, 8, 9, 21], "wkt": [1, 2, 4, 6, 7, 8, 11, 17, 21], "point": [1, 2, 4, 7, 8, 9, 10, 11, 14, 21, 22], "30": [1, 2, 7, 8, 9, 16, 21], "10": [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 14, 15, 16, 19, 21], "select": [1, 2, 3, 4, 5, 6, 7, 8, 9, 14, 16, 17, 19, 20, 21], "alia": [1, 2, 4, 6, 7, 8, 16, 20, 21], "show": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 14, 15, 16, 20, 21], "01": [1, 3, 4, 5, 8, 16, 20, 21], "00": [1, 3, 4, 5, 8, 16, 20, 21], "0": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 14, 15, 16, 18, 19, 20, 21], "val": [1, 2, 3, 4, 6, 7, 8, 9, 10, 14, 17, 19], "list": [1, 2, 3, 6, 7, 8, 9], "todf": [1, 2, 6, 7, 8, 9], "AS": [1, 2, 6, 11], "data": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 16, 17, 20, 21], "frame": [1, 2, 6, 7, 8, 9], "showdf": [1, 2, 6, 7, 8, 9], "geojson": [1, 2, 7, 10, 11, 16, 20, 22], "cast": 1, "string": [1, 3, 4, 5, 20], "json": [1, 2, 4, 7, 16, 20, 21], "truncat": [1, 2, 4, 6, 7, 8, 9, 21], "fals": [1, 2, 4, 5, 6, 7, 8, 9, 10, 14, 21], "coordin": [1, 2, 4, 7, 8, 14, 20, 22], "cr": [1, 2, 4, 7, 8, 14, 17], "name": [1, 2, 3, 4, 5, 7, 10, 14, 20], "properti": [1, 2, 7, 16, 20, 21], "epsg": [1, 2, 4, 7, 8, 17], "4326": [1, 2, 3, 7, 10, 14, 16, 17, 20], "f": [1, 2, 4, 5, 6, 7, 8, 9, 16, 20], "text": [1, 2, 21], "lon": [1, 2, 8, 16, 21], "lat": [1, 2, 7, 8, 16, 21], "0d": [1, 7], "x": [2, 3, 4, 7, 9, 11, 19, 21], "y": [2, 4, 7, 21], "creat": [2, 4, 5, 14, 15, 18, 19, 20, 21], "new": [2, 4, 7, 11, 12, 14, 15, 21, 22], "mosaic": [2, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 20, 22], "from": [2, 4, 5, 6, 7, 8, 10, 11, 14, 16, 17, 18, 22], "two": [2, 3, 8, 10, 12, 14, 21], "doubletyp": [2, 4, 7, 8, 21], "valu": [2, 3, 4, 5, 6, 8, 10, 14, 15, 16, 20], "point_geom": [2, 21], "1": [2, 3, 4, 5, 6, 7, 8, 9, 10, 14, 18, 20, 21, 22], "30d": [2, 8], "10d": [2, 7, 8], "linestr": [2, 7, 14, 21], "an": [2, 4, 5, 7, 8, 11, 12, 13, 15, 16, 17, 22], "arrai": [2, 4, 8], "arraytyp": [2, 4, 8], "40": [2, 4, 7, 8, 9, 16, 21], "groupbi": [2, 4, 6, 21], "agg": [2, 4, 6, 21], "collect_list": [2, 4, 21], "point_arrai": 2, "line_geom": 2, "3": [2, 3, 4, 6, 7, 9, 10, 11, 14, 15, 18, 19, 21, 22], "WITH": [2, 4, 6], "union": [2, 6, 7, 8, 16], "40d": 2, "c": [2, 6, 7, 9, 14, 21], "polygon": [2, 4, 6, 7, 8, 9, 11, 14, 21, 22], "close": 2, "20": [2, 6, 7, 8, 9, 14, 16, 20, 21], "polygon_geom": 2, "5": [2, 4, 7, 8, 14, 21, 22], "convert_to": [2, 6, 7], "import": [2, 4, 5, 7, 8, 14, 16, 17, 18, 19, 20, 21], "binascii": 2, "hex": [2, 13], "0000000001c052f1f0ed3d859d4041983d46b26bf8": 2, "unhexlifi": 2, "75": 2, "78033": 2, "35": [2, 7, 16, 21], "18937": 2, "geojson_dict": 2, "dump": [2, 10], "as_json": [2, 7], "stripmargin": 2, "provid": [3, 4, 5, 7, 10, 11, 12, 16, 17, 19, 21], "follow": [3, 5, 7, 10, 14, 15, 16, 18, 19, 21], "gtiff": [3, 4, 5], "geotiff": 3, "us": [3, 4, 5, 7, 8, 10, 11, 12, 14, 15, 17, 18, 19, 20, 21, 22], "tif": [3, 4, 5], "extens": [3, 4, 5, 11, 12, 15, 17], "http": [3, 4, 5, 8, 10, 15, 17, 20, 21], "org": [3, 5, 8, 10, 15], "driver": [3, 4, 5, 10], "html": [3, 10, 17], "cog": 3, "cloud": [3, 12], "optim": [3, 22], "hdf4": 3, "hdf": 3, "hdf5": 3, "h5": 3, "netcdf": [3, 4, 10], "nc": [3, 4], "jp2ecw": 3, "jp2": 3, "jp2kak": 3, "jp2openjpeg": 3, "pdf": 3, "png": 3, "vrt": [3, 21], "xpm": 3, "grib": 3, "grb": 3, "zarr": 3, "other": [3, 4, 12, 14, 16, 20], "ar": [3, 4, 5, 7, 8, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21], "support": [3, 4, 10, 14, 15, 16, 17, 21, 22], "avail": [3, 4, 9, 14, 15, 20], "flavor": [3, 10], "per": [3, 7, 8, 10], "task": [3, 10], "automat": [3, 4, 11, 17, 19, 21, 22], "convert": 3, "A": [3, 4, 8, 10, 12, 15, 18, 19], "base": [3, 4, 8, 10, 12, 14], "sourc": [3, 10, 17, 22], "It": [3, 5, 12, 20], "metadata": [3, 4, 5], "expos": [3, 15], "direct": [3, 4, 7, 14, 19], "path": [3, 4, 5, 10, 21], "The": [3, 4, 5, 7, 8, 10, 14, 15, 16, 17, 18, 19, 20, 21], "output": [3, 4, 5, 10, 14, 15], "i": [3, 4, 5, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21], "datafram": [3, 5, 10, 14, 21, 22], "tile": [3, 4, 5], "load": [3, 4, 5, 10, 14, 16, 20, 21], "rastertiletyp": [3, 4], "ysize": [3, 5], "height": [3, 4, 16, 21], "pixel": [3, 4], "integertyp": [3, 4, 7, 10], "xsize": [3, 5], "width": [3, 4, 7], "bandcount": [3, 5], "number": [3, 4, 7, 10, 14, 16, 20, 21], "maptyp": [3, 4], "subdataset": [3, 4, 5], "srid": [3, 4, 5, 7, 10, 20], "refer": [3, 4, 7, 10, 14, 16, 22], "system": [3, 4, 7, 8, 10, 11, 12, 14, 15, 19, 21, 22], "identifi": [3, 4, 7, 8, 10, 14], "proj4str": 3, "proj4": 3, "result": [3, 4, 5, 7, 8, 10, 14, 16, 20], "standard": [3, 4, 11, 19, 21], "option": [3, 4, 10, 16, 18, 20, 21], "pattern": 3, "dbf": [3, 4, 5, 10, 14, 15, 16, 18, 20, 21], "drivernam": [3, 10], "index_id": [3, 4, 5, 6, 8, 20, 21], "593308294097928191": [3, 4, 5], "parentpath": [3, 4, 5], "path_to_fil": [3, 4, 5], "100": [3, 16], "area_or_point": [3, 5], "po": [3, 5], "null": [3, 8, 14, 21], "proj": 3, "longlat": 3, "da": 3, "issu": [3, 5, 11, 15, 19], "350": 3, "github": [3, 11, 15, 17], "com": [3, 14, 15, 17, 19, 21], "databrickslab": [3, 11, 15, 17], "ha": [3, 14, 15, 17, 18, 21], "match": [3, 5, 14], "abov": [3, 14], "For": [3, 4, 10, 14, 15, 17, 18, 19, 21], "you": [3, 4, 5, 14, 15, 17, 18, 19, 20, 21], "want": [3, 5, 19], "have": [3, 4, 5, 7, 14, 15, 17, 18, 19], "instead": [3, 17], "similar": [3, 14], "onli": [3, 4, 7, 9, 10, 11, 14, 15, 16, 20, 21], "differ": [3, 4, 5, 7, 14, 17], "cell": [3, 4, 8, 14, 16, 17, 19, 20], "specifi": [3, 4, 7, 8, 14, 17, 21], "combin": [3, 4], "oper": [3, 4, 7, 14, 16, 17, 21], "default": [3, 4, 7, 8, 10, 14, 15, 17, 19, 20, 21], "mean": [3, 5, 14], "If": [3, 4, 5, 7, 14, 15, 17, 18, 19], "larger": 3, "than": [3, 14], "can": [3, 4, 5, 7, 8, 10, 12, 14, 15, 16, 17, 18, 19, 20, 21], "calcul": [3, 4, 8, 14], "interpol": 3, "method": [3, 4, 8, 14, 16, 20], "invers": [3, 9, 14], "distanc": [3, 7, 14], "weight": 3, "idw": 3, "where": [3, 4, 9, 14, 15, 20, 21], "k_ring": 3, "fileextens": 3, "vsizip": [3, 10], "zip": [3, 10, 21], "set": [3, 4, 5, 7, 8, 10, 14, 15, 17, 18, 21, 22], "thi": [3, 4, 5, 7, 8, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21], "true": [3, 4, 5, 6, 7, 8, 9, 10, 14, 20, 21], "booleantyp": [3, 4, 7, 9, 10], "resolut": [3, 4, 8, 14, 21, 22], "when": [3, 5, 8, 11, 14, 15, 19], "retil": [3, 4], "too": [3, 15, 16], "larg": [3, 4, 10, 11, 14], "thei": [3, 4, 11, 14], "re": 3, "smaller": 3, "tiles": 3, "size": [3, 4, 8, 10, 14], "alwai": [3, 4, 7], "squar": 3, "readsubdataset": 3, "subdatasetnumb": 3, "specif": [3, 12, 14], "subdatasetnam": 3, "kringinterpol": 3, "n": [3, 4, 14, 16, 21], "8": [3, 4, 8, 16, 21], "1000": [3, 20, 21], "2": [3, 4, 5, 6, 7, 8, 9, 10, 11, 14, 15, 19, 21, 22], "band_id": 3, "cell_id": 3, "cell_valu": 3, "1400000000000000": 3, "2464000000000000": 3, "4": [3, 4, 6, 7, 8, 9, 14, 18, 21, 22], "mosaiccontext": [3, 4, 10, 14, 17, 19], "expect": [3, 4, 7, 17], "wild": 3, "card": 3, "mask": [3, 4], "pleas": [3, 4, 5, 10, 11, 14, 15, 17, 18, 19], "equival": [3, 8], "without": [3, 15, 16, 22], "wildcard": 3, "wont": [3, 4, 14], "pick": 3, "up": [3, 4, 7, 15, 21], "ani": [3, 6, 8, 11, 14, 15, 21], "empti": [3, 4], "tabl": [3, 4, 12, 14, 16, 21], "instal": [4, 11, 20, 21, 22], "depend": [4, 7, 9, 14, 19, 21], "gdal": [4, 5, 10, 11, 15, 22], "see": [4, 14, 15, 17, 19, 21], "enabl": [4, 5, 8, 11, 14, 22], "instruct": [4, 15, 18, 19], "sever": [4, 8], "uniqu": 4, "packag": [4, 22], "mainli": 4, "which": [4, 7, 8, 12, 14, 19], "reproject": [4, 17], "perform": [4, 11, 12, 14, 15, 17, 19], "join": [4, 6, 11, 13, 22], "between": [4, 7, 11, 14, 15], "also": [4, 10, 11, 12, 14, 15, 17, 18, 19, 21], "scalabl": [4, 12], "case": [4, 12, 14, 15], "bottleneck": 4, "due": [4, 15, 16], "all": [4, 7, 8, 10, 11, 12, 14, 15, 17, 19, 21], "respect": [4, 7, 8, 21], "rst_": 4, "prefix": [4, 14], "convent": 4, "In": [4, 5, 8, 12, 14, 15, 18], "version": [4, 11, 18, 19], "11": [4, 11, 15, 16, 18, 19, 21], "wa": [4, 12], "either": [4, 7, 11, 16, 17, 19, 20], "byte": 4, "object": [4, 5, 7, 14, 18, 20, 21], "path_to_rast": 4, "read": [4, 5, 14, 20, 22], "gener": [4, 8, 11, 12, 14, 16, 17, 18, 21], "do": [4, 11, 14, 17, 18], "setup_gd": [4, 18], "call": [4, 7, 14, 18], "There": 4, "longer": [4, 11, 18, 19], "need": [4, 5, 14, 15, 18, 19, 20, 21], "share": [4, 18], "copi": [4, 15], "around": [4, 12, 14], "updat": [4, 5], "init_script": 4, "sh": [4, 15], "script": [4, 15], "your": [4, 11, 15, 17, 18, 19, 21, 22], "cluster": [4, 15, 18, 19, 21], "more": [4, 8, 10, 14, 15, 17, 18, 19, 21], "detail": [4, 21], "extract": [4, 18, 20, 21], "describ": [4, 7, 10, 15, 21], "map": [4, 8, 12, 21], "kei": [4, 15], "pair": [4, 6, 7, 14, 21], "contain": [4, 5, 8, 9, 14, 20, 21], "repres": [4, 6, 7, 8, 20], "filestor": [4, 5, 15, 16, 18, 21], "geospati": [4, 5, 11, 12, 15, 16, 17, 18, 20], "sample_raster_data": 4, "coral": 4, "mo": [4, 8, 14, 17, 18, 20], "lit": [4, 5, 6, 7, 8, 16, 20, 21], "limit": [4, 5, 6, 16, 20, 21], "displai": [4, 14, 15, 21], "_fillvalu": 4, "251": [4, 16], "netcdf_dim_tim": 4, "1294315200": 4, "long_nam": 4, "bleach": 4, "alert": 4, "area": [4, 7, 8], "7": [4, 14, 16, 21], "dai": 4, "maximum": [4, 14, 20], "composit": 4, "grid_map": 4, "netcdf_varnam": 4, "bleaching_alert_area": 4, "coverage_content_typ": 4, "thematicclassif": 4, "standard_nam": 4, "comment": 4, "baa": 4, "heat": 4, "stress": 4, "level": [4, 11, 14], "No": 4, "watch": 4, "warn": [4, 19], "product": [4, 12, 14, 19], "descript": [4, 10], "coralreefwatch": 4, "noaa": 4, "gov": 4, "5km": 4, "php": 4, "valid_min": 4, "unit": [4, 7, 14, 17], "stress_level": 4, "valid_max": 4, "scale_factor": 4, "IF": 4, "NOT": 4, "exist": [4, 5], "coral_netcdf": 4, "bound": [4, 7, 8, 17, 21], "box": [4, 7], "structtyp": [4, 7], "clip": [4, 22], "same": [4, 8, 14], "multipolygon": [4, 7, 8, 20], "extent": 4, "input": [4, 6, 7, 8], "collect": [4, 5, 16], "averag": 4, "must": [4, 14, 15, 18], "group": [4, 6], "statement": 4, "over": [4, 14, 16, 17], "BY": [4, 6], "singl": [4, 5, 10], "highest": 4, "size_in_mb": 4, "valid": [4, 7, 8, 20], "split": [4, 8], "mb": 4, "binaryfil": 4, "geotransform": 4, "gt": [4, 16, 21], "doubl": [4, 5, 7], "upper": 4, "left": [4, 7, 14, 22], "corner": [4, 7], "w": [4, 5, 21], "e": [4, 7, 14, 15, 19], "row": [4, 7, 8, 10, 14, 20, 21, 22], "rotat": [4, 7], "typic": 4, "zero": 4, "": [4, 10, 14, 15, 16, 19, 21], "neg": [4, 8], "north": [4, 16], "imag": [4, 12, 14], "scalei": 4, "049999999152053956": 4, "skewx": 4, "skewi": 4, "upperlefti": 4, "89": [4, 7, 16], "99999847369712": 4, "upperleftx": 4, "180": [4, 8], "00000610436345": 4, "scalex": 4, "050000001695656514": 4, "rst_getnodata": 4, "nodata": 4, "9999": 4, "given": [4, 5, 7, 8, 12, 14], "full": 4, "last": 4, "sst": 4, "3600": 4, "initi": [4, 12, 19], "bytetyp": 4, "unsignedshorttyp": 4, "ushort": 4, "maxvalu": 4, "65535": 4, "shorttyp": 4, "short": 4, "minvalu": 4, "32768": 4, "unsignedintegertyp": 4, "int": [4, 16], "294967294e9": 4, "2147483648": 4, "floattyp": 4, "float": [4, 16], "4028234663852886e38": 4, "7976931348623157e308": 4, "longtyp": [4, 8], "730260": 4, "gdalwarp": 4, "initialis": 4, "non": 4, "mai": [4, 12, 14, 16], "introduc": 4, "artifact": 4, "stack": 4, "order": [4, 5, 15, 18, 19], "cover": [4, 8, 12, 21, 22], "random": 4, "sinc": [4, 14, 15], "first": [4, 17, 21], "sort": [4, 14], "them": [4, 8, 18], "inform": [4, 10, 15, 17, 18, 19], "nc_global": 4, "publisher_url": 4, "geospatial_lat_unit": 4, "degrees_north": 4, "platform_vocabulari": 4, "nodc": 4, "ocean": 4, "archiv": 4, "platform": [4, 12, 22], "creator_typ": 4, "geospatial_lon_unit": 4, "degrees_east": 4, "geospatial_bound": 4, "90": [4, 7, 8], "keyword": 4, "temperatur": 4, "sea": 4, "surfac": 4, "water": 4, "spectral": 4, "engin": 4, "infrar": 4, "wavelength": 4, "thermal": 4, "geospatial_lat_max": 4, "974998": 4, "histori": 4, "reef": 4, "daili": 4, "global": [4, 8], "satellit": 4, "monitor": 4, "suit": 4, "v3": 4, "v1": 4, "publisher_institut": 4, "nesdi": 4, "star": 4, "program": 4, "cdm_data_typ": 4, "red_band": [4, 5], "nir_band": [4, 5], "normal": 4, "veget": [4, 5], "formula": 4, "nir": [4, 5], "red": [4, 5], "float64": 4, "deriv": 4, "via": [4, 15, 19], "2d": [4, 7], "each": [4, 7, 8, 10, 14, 22], "struct": [4, 8], "cellid": [4, 8], "get": [4, 20, 21], "explod": [4, 7, 8, 20, 21, 22], "twice": 4, "configur": [4, 5, 8, 15, 19, 21, 22], "measur": 4, "593176490141548543": 4, "593386771740360703": 4, "2037735849056603": 4, "593825202001936383": 4, "593163914477305855": 4, "592998781574709247": 4, "1283185840707965": 4, "593262526926422015": 4, "592370479398911999": 4, "593472602366803967": 4, "3963963963963964": 4, "593785619583336447": 4, "6590909090909091": 4, "591988330388783103": 4, "592336738135834623": 4, "fig": [4, 5, 7, 8, 14, 18], "median": 4, "world": [4, 21], "project": [4, 12, 14], "179": 4, "85000609927647": 4, "84999847624096": 4, "after": [4, 11, 14, 17, 18, 19], "appli": [4, 5, 8, 14, 22], "store": [4, 18, 20], "checkpoint": [4, 14], "directori": [4, 5, 15, 18], "300": 4, "593308294097928192": 4, "degre": [4, 7, 14], "angl": 4, "axi": 4, "21": [4, 16, 21], "scale": [4, 7, 12], "pass": [4, 16], "coral_tif": 4, "skew": [4, 14], "code": [4, 11, 14, 15, 17, 18, 21], "complex": 4, "definit": [4, 7, 14], "9122": 4, "ct5km_baa_max_7d_v3_1_2022010": 4, "6": [4, 14, 15, 20, 21, 22], "1x3600x7200": 4, "bit": 4, "unsign": 4, "integ": [4, 7, 8], "ct5km_baa_max_7d_v3_1_20220106": 4, "sizeinmb": 4, "subdivid": 4, "until": [4, 14], "ensur": [4, 5, 14, 21], "wai": [4, 5, 14, 15, 17, 18], "aspect": [4, 21], "ratio": 4, "preserv": 4, "approxim": [4, 14, 16], "compress": 4, "effect": [4, 14], "we": [4, 5, 11, 12, 14, 16, 17, 18, 19, 21], "cannot": 4, "guarante": [4, 11], "summari": 4, "logic": [4, 9], "produc": 4, "gdalinfo": 4, "procedur": 4, "ct5km_baa_max_7d_v3_1": 4, "_20220106": 4, "drivershortnam": 4, "driverlongnam": 4, "network": [4, 10], "common": [4, 5, 10, 11, 14], "512": 4, "acknowledg": 4, "gr": 4, "tessel": [4, 8], "h3": [4, 8, 11, 12, 14, 15, 16, 17, 19, 21], "bng": [4, 8, 11, 15, 22], "custom": [4, 8, 10], "correspond": [4, 15, 16], "part": [4, 7, 16], "origin": [4, 7, 8], "reconstruct": 4, "overlap": [4, 21], "percentag": 4, "tri": 4, "open": [4, 5, 12, 20], "600": 4, "xworld": 4, "yworld": 4, "resolv": 4, "160": 4, "398": 4, "997": 4, "readthedoc": 5, "io": [5, 17], "en": 5, "latest": [5, 19], "librari": [5, 15, 16, 17, 18, 19, 21], "dataset": [5, 11, 14, 21, 22], "o": [5, 14], "api": [5, 7, 8, 9, 11, 14, 15, 16, 17, 19, 20, 21], "great": [5, 8, 17], "work": [5, 15, 19], "popular": [5, 21], "choic": [5, 11, 14], "mani": [5, 8, 11, 17], "scientist": 5, "distribut": [5, 12], "process": [5, 8, 11, 12, 14, 15, 21], "structur": 5, "compat": 5, "interchang": 5, "section": [5, 12, 18], "how": [5, 8, 12, 16, 19, 21], "assum": [5, 17], "basic": [5, 22], "understand": 5, "note": [5, 11, 12, 14, 21, 22], "advis": [5, 14], "user": [5, 16, 17, 19, 20, 21], "proper": 5, "conf": [5, 8, 15, 17, 21], "execut": [5, 15, 21], "arrow": 5, "maxrecordsperbatch": 5, "1024": 5, "fallback": 5, "adapt": 5, "coalescepartit": 5, "shuffl": 5, "partit": [5, 16], "400": 5, "firstli": 5, "repartit": [5, 16, 21], "modificationtim": 5, "length": [5, 7], "uuid": 5, "odin": 5, "alaska": 5, "b02": 5, "424495268": 5, "1970": 5, "20t15": 5, "49": [5, 16, 21], "53": [5, 21], "135": 5, "0000": 5, "211660514": 5, "7836235824828840960": 5, "10980": 5, "32602": 5, "524425268": 5, "212060218": 5, "7836235824828840961": 5, "593308294097927192": 5, "1241323268": 5, "211660897": 5, "7836235824828840962": 5, "593308294097929991": 5, "next": [5, 14], "defin": [5, 7, 8, 14, 17], "numpi": 5, "np": 5, "memoryfil": 5, "bytesio": 5, "pyspark": [5, 16, 20, 21], "def": 5, "plot_rast": 5, "ax": 5, "pyplot": 5, "subplot": 5, "figsiz": 5, "12": [5, 11, 16, 18, 19, 21], "memfil": 5, "src": 5, "final": [5, 22], "reason": [5, 19], "filter": [5, 17, 21], "befor": [5, 7, 8, 17], "compute_band_mean": 5, "bidx": 5, "0111000000000000": 5, "0021000000000000": 5, "3001000000000000": 5, "assess": 5, "health": 5, "rang": 5, "compute_ndvi": 5, "profil": [5, 12], "count": [5, 14, 16, 21], "dtype": 5, "float32": 5, "tmp": [5, 10, 14, 20], "workaround": 5, "occur": 5, "tempfil": 5, "namedtemporaryfil": 5, "dst": 5, "astyp": 5, "rb": 5, "000000": 5, "00000000000000000": 5, "place": [5, 18], "overwrit": 5, "field": [5, 10], "withfield": 5, "materi": 5, "should": [5, 10, 11, 15], "pathlib": 5, "write_rast": 5, "file_id": 5, "parent_dir": 5, "outputpath": 5, "mkdir": [5, 15], "parent": 5, "exist_ok": 5, "extensions_map": 5, "raster_driver_extens": 5, "driver_map": 5, "v": 5, "k": [5, 8, 11, 13, 21], "item": 5, "here": [5, 10, 14, 15, 18, 19, 21], "dir": 5, "1234": 5, "4545": 5, "3215": 5, "leftindex": 6, "rightindex": 6, "intersect": [6, 7, 8, 9, 21], "left_df": 6, "geom": [6, 7, 8], "left_index": 6, "right_df": 6, "right_index": 6, "leftdf": 6, "rightdf": 6, "l": [6, 14], "inner": [6, 16, 21], "1l": [6, 8], "15": [6, 7, 8, 9, 14, 16, 21], "25": [6, 7, 9, 16, 21], "chip": [6, 8], "withcolumn": [6, 7, 8, 16, 17, 20, 21], "agg_chip": 6, "is_cor": [6, 8, 20, 21], "590418571381702655": [6, 8], "other_df": 6, "one": [7, 8, 14], "constitu": 7, "45": [7, 8, 16, 21], "element": [7, 8], "550": 7, "express": [7, 11, 19], "radiu": 7, "buffer": [7, 14], "29": [7, 16, 21], "1055": 7, "innerradiu": 7, "outerradiu": 7, "loop": [7, 8], "hole": [7, 14], "1d": 7, "02": [7, 16, 21], "04": [7, 16, 18, 21], "centroid": [7, 8], "454545454545453": 7, "26": [7, 16, 21], "96969696969697": 7, "convex": 7, "hull": 7, "multi": 7, "multipoint": 7, "left_geom": 7, "right_geom": 7, "right": [7, 14, 22], "rtype": 7, "p1": [7, 9], "p2": [7, 9], "dimens": 7, "geom1": [7, 9], "geom2": [7, 9], "euclidean": [7, 14], "poli": [7, 9, 16, 21], "652475842498529": 7, "g": [7, 14, 15, 19, 21], "wgs84": 7, "minimum": 7, "rectangular": 7, "x_min": 7, "y_min": 7, "x_max": 7, "y_max": 7, "etc": [7, 21], "lat1": 7, "lng1": 7, "lat2": 7, "lng2": 7, "haversin": 7, "10007": 7, "55722101796": 7, "km": [7, 8], "while": [7, 12], "lng": 7, "6371": 7, "0088": 7, "check": [7, 17, 21], "reprojected_bound": [7, 17], "id": [7, 8, 14, 17, 20], "2192": 7, "against": 7, "geograph": 7, "geometr": 7, "84": 7, "64": 7, "92": [7, 21], "81": [7, 16], "79": [7, 21], "assert": 7, "chosen": [7, 9], "esri": [7, 9, 10], "jt": [7, 9, 14, 15, 17, 19, 21], "simpl": [7, 22], "featur": [7, 10, 20], "access": [7, 14, 15, 18, 19, 21], "document": [7, 10, 15, 18, 19], "ogc": [7, 11, 21], "06": [7, 8, 16, 20, 21], "103r4": 7, "96": [7, 21], "34413615167959": 7, "perimet": 7, "td": 7, "factor": 7, "radian": 7, "math": 7, "pi": 7, "141592653589793": 7, "xd": 7, "yd": 7, "80": [7, 21], "5d": 7, "4326l": 7, "doe": [7, 8, 11, 14, 19], "transform": [7, 11, 13, 21], "rather": 7, "tell": 7, "current": [7, 11, 16], "encod": [7, 11], "intern": [7, 19, 22], "tol": 7, "simplifi": [7, 21], "toler": 7, "ignor": 7, "look": [7, 15, 16], "json_geom": 7, "horizont": 7, "xy": 7, "target": [7, 14], "3857": 7, "pseudo": 7, "mercat": 7, "1113194": 7, "9079327357": 7, "4865942": 7, "279503176": 7, "4452779": 7, "631730943": 7, "3503549": 7, "843504374": 7, "2226389": 7, "8158654715": 7, "2273030": 7, "926987689": 7, "3339584": 7, "723798207": 7, "1118889": 7, "9748579597": 7, "3857l": 7, "associ": [7, 8], "locat": [7, 8, 12, 14, 15, 21], "offset": 7, "50": [7, 16, 21], "largest": 7, "st_minmaxxyz": 7, "smallest": [7, 14], "z": 7, "databrick": [8, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21], "lab": [8, 12, 14, 15, 17, 19, 21], "good": [8, 12], "rounder": 8, "earth": 8, "local": 8, "britain": [8, 17], "27700": [8, 17], "minx": 8, "maxx": 8, "mini": 8, "maxi": 8, "rootcellsizex": 8, "rootcellsizei": 8, "posit": [8, 21], "increas": [8, 14], "step": [8, 14, 15], "usual": 8, "enable_mosa": [8, 14, 16, 17, 18, 19, 20, 21], "dbutil": [8, 14, 16, 17, 18, 19, 20, 21], "longitud": 8, "latitud": 8, "623385352048508927": 8, "10l": 8, "9": [8, 16, 20, 21], "indic": [8, 21, 22], "h3geo": 8, "doc": [8, 10, 20, 21], "region": 8, "577586652210266111": 8, "578360708396220415": 8, "577269992861466623": 8, "0l": 8, "boundari": [8, 12], "613177664827555839": 8, "03": [8, 16, 20, 21], "keep_core_geometri": 8, "cut": 8, "piec": 8, "along": [8, 19], "border": 8, "compos": 8, "fulli": [8, 22], "within": [8, 9, 11, 17, 19], "boolean": 8, "equal": [8, 14], "shape": [8, 13], "contrast": 8, "even": [8, 17], "fall": 8, "outsid": 8, "make": [8, 11, 12, 19], "suitabl": 8, "line": [8, 10, 14], "whether": [8, 14], "keep": 8, "core": [8, 11, 16], "mosaictyp": 8, "printschema": 8, "root": 8, "nullabl": 8, "mosaic_chip": 8, "containsnul": 8, "long": 8, "5774810": 8, "schema": [8, 10], "577481099093999615": 8, "578044049047420927": 8, "578782920861286399": 8, "577023702256844799": 8, "577938495931154431": 8, "grid_cellid": 8, "78595419": 8, "ring": [8, 13], "kring": 8, "613177664825458687": 8, "2l": 8, "613177664831750143": 8, "613177664884178943": 8, "left_chip": 8, "right_chip": 8, "chiptyp": 8, "hollow": 8, "kloop": 8, "8l": 8, "b": 9, "seri": [9, 11, 19], "built": [10, 21], "some": [10, 12, 14, 16, 22], "esrijson": 10, "topojson": 10, "geodatabas": 10, "filegdb": 10, "openfilegdb": 10, "implement": [10, 11, 14, 21], "form": [10, 16], "geo": 10, "parquet": 10, "soon": [10, 11, 19], "spreadsheet": 10, "xlsx": 10, "xl": 10, "od": 10, "u": [10, 12, 20, 21], "censu": 10, "tiger": 10, "postgresql": 10, "pgdump": 10, "keyhol": 10, "markup": 10, "languag": [10, 19, 20], "kml": 10, "geographi": 10, "gml": 10, "grass": 10, "linear": 10, "referenc": 10, "lr": 10, "parallel": 10, "multipl": [10, 17], "infer": 10, "both": [10, 14, 17], "geometrytyp": 10, "coerc": 10, "most": [10, 14], "concret": 10, "hold": 10, "aswkb": 10, "layernam": 10, "layer": [10, 12, 19], "layernumb": 10, "field_1": 10, "field_2": 10, "geom_1": 10, "geom_1_srid": 10, "amount": 10, "control": [10, 16, 21], "chunksiz": 10, "chunk": [10, 14], "5000": 10, "geodb": 10, "nativ": [10, 11, 21], "shp": 10, "apach": 11, "framework": [11, 12], "allow": [11, 14, 16, 17, 21], "easi": [11, 12, 14, 17, 21], "fast": 11, "veri": [11, 16], "requir": [11, 14, 18, 19, 21, 22], "runtim": [11, 15, 18, 19], "photon": [11, 15, 19], "ml": [11, 19], "yet": 11, "dbr": [11, 19], "13": [11, 16, 19, 21], "come": [11, 14, 19], "recommend": [11, 15, 16, 17, 19], "lt": [11, 19], "leverag": [11, 19], "convers": 11, "easili": [11, 14], "st_": [11, 15], "high": 11, "through": [11, 12, 15, 21], "optimis": 11, "approach": [11, 14], "co": [11, 21], "develop": 11, "ordnanc": [11, 17], "survei": [11, 17], "blog": [11, 21], "post": [11, 21], "usag": [11, 13, 17, 20], "guid": [11, 20, 21, 22], "british": [11, 16, 22], "nation": [11, 16, 22], "quickstart": [11, 22], "notebook": [11, 14, 15, 17, 19, 20, 22], "kepler": [11, 21, 22], "visual": [11, 22], "registr": [11, 17, 22], "model": 11, "nearest": [11, 13], "neighbour": [11, 13], "video": 11, "talk": 11, "search": [11, 14], "page": [11, 15, 18], "space": [11, 14], "explor": 11, "formal": 11, "servic": 11, "agreement": 11, "sla": 11, "kind": 11, "submit": 11, "ticket": 11, "relat": [11, 12, 13], "aris": 11, "discov": 11, "repo": 11, "review": 11, "time": [11, 15], "permit": 11, "link": 12, "team": 12, "gi": 12, "speaker": 12, "linkedin": 12, "analyt": 12, "ai": [12, 19], "summit": 12, "san": 12, "francisco": 12, "march": 12, "2022": [12, 18], "overview": 12, "vision": 12, "had": 12, "onc": [12, 18], "start": [12, 15, 21], "address": 12, "ship": 12, "To": [12, 14, 15, 21], "transfer": [12, 17], "detect": 12, "integr": [12, 13, 15], "delta": [12, 16, 21], "live": 12, "build": [12, 14, 17, 19], "pipelin": 12, "ingest": 12, "street": 12, "stuart": [12, 21], "lynn": [12, 21], "milo": 12, "colic": 12, "advanc": [12, 18], "virtual": 12, "decemb": 12, "discuss": 12, "fit": 12, "big": [12, 16], "simon": 12, "whitelei": 12, "unif": 12, "scienc": 12, "confer": 12, "london": 12, "2023": 12, "facilit": [12, 14], "plugin": 12, "plugout": 12, "capabl": 12, "principl": 12, "design": 12, "flood": 12, "risk": 12, "physic": 12, "asset": 12, "solut": 12, "lakehous": 12, "york": [12, 16], "novemb": 12, "kent": 12, "marten": 12, "staff": 12, "manag": [12, 15, 18, 19], "flexibl": 12, "ideal": 12, "deep": 12, "dive": 12, "recent": 12, "push": 12, "improv": 12, "benchmark": 12, "includ": [12, 16, 18, 21], "walk": 12, "effici": 12, "architectur": 12, "carto": 12, "bring": 12, "unifi": 12, "knn": 13, "iter": 13, "visualis": [13, 20, 21], "mlflow": 13, "serialis": 13, "awar": 13, "runnabl": 14, "spatialknn": 14, "addit": 14, "chang": [14, 19], "problem": 14, "find": 14, "observ": 14, "d": 14, "special": 14, "candid": 14, "landmark": 14, "j": 14, "our": [14, 15, 18, 19, 21], "further": 14, "so": [14, 18], "shortest": 14, "restrict": 14, "tradit": 14, "m": [14, 21], "queri": [14, 15], "q": [14, 21], "closest": 14, "relax": 14, "formul": 14, "condit": 14, "kth": 14, "isn": [14, 17], "t": [14, 16, 17, 21], "symmetr": 14, "impli": 14, "would": [14, 15, 17, 19], "cartesian": 14, "were": 14, "syntax": 14, "stop": [14, 19], "less": 14, "repeat": 14, "exce": 14, "remov": [14, 21], "furthest": 14, "evalu": 14, "earli": 14, "found": [14, 15, 18, 19], "setearlystopiter": 14, "continu": 14, "max": 14, "candidatesdf": 14, "candidatesfeaturecol": 14, "candidatesrowid": 14, "landmarksfeaturecol": 14, "landmarksrowid": 14, "kneighbour": 14, "maxiter": 14, "distancethreshold": 14, "threshold": 14, "earlystopiter": 14, "subsequ": 14, "upon": 14, "checkpointtableprefix": 14, "indexresolut": 14, "finalis": 14, "caller": 14, "param": 14, "decim": 14, "safeti": 14, "net": 14, "coars": 14, "grain": 14, "could": 14, "span": 14, "globe": 14, "take": [14, 15, 19], "account": 14, "cant": 14, "radial": 14, "growth": 14, "That": 14, "aren": 14, "miss": [14, 15], "ad": [14, 18, 20], "ellips": 14, "circl": 14, "outlin": 14, "sparkcontext": 14, "setcheckpointdir": 14, "usernam": 14, "building_df": 14, "trip_df": 14, "trip": [14, 16, 21], "setusetablecheckpoint": 14, "setcheckpointtableprefix": 14, "checkpoint_table_knn": 14, "cleanupcheckpoint": 14, "setdistancethreshold": 14, "setindexresolut": 14, "setkneighbour": 14, "setapproxim": 14, "setmaxiter": 14, "setlandmarksfeaturecol": 14, "geom_wkt": [14, 20], "setlandmarksrowid": 14, "left_id": 14, "setcandidatesdf": 14, "pickup_point": 14, "setcandidatesfeaturecol": 14, "setcandidatesrowid": 14, "right_id": 14, "right_geometri": 14, "geometry_geometry_dist": 14, "neighbour_numb": 14, "1012": 14, "2012": 14, "2013": 14, "145": 14, "2014": 14, "1787": 14, "1013": 14, "1112": 14, "_": [14, 17, 19], "regist": [14, 15, 19], "buildingdf": 14, "tripdf": 14, "moment": 14, "appear": [14, 15], "suffix": 14, "_right": 14, "alter": 14, "purpos": 14, "taxi": 14, "pickup": 14, "extend": [14, 21], "mllib": 14, "getparam": 14, "getmetr": 14, "log": 14, "dictionari": 14, "metric": 14, "converg": 14, "autolog": 14, "disabl": 14, "start_run": 14, "result_df": 14, "log_param": 14, "log_metr": 14, "deserialis": 14, "save": 14, "audit": 14, "pure": [14, 19], "sens": 14, "run": [14, 15, 18, 21], "These": 14, "neither": [14, 19], "knn_model": 14, "loaded_knn": 14, "candidates_id": 14, "landmarks_id": 14, "usetablecheckpoint": 14, "loadedknn": 14, "foreach": 14, "println": 14, "algorithm": 14, "coincid": 14, "consid": 14, "achiev": [15, 17], "might": [15, 16], "connect": 15, "busi": [15, 19], "intellig": [15, 19], "tool": [15, 19], "middlewar": [15, 19], "compon": 15, "geoserv": [15, 19], "higher": [15, 18], "creation": [15, 18, 19], "permiss": [15, 18, 19], "workspac": [15, 18, 19], "attach": [15, 18, 19, 21], "init": 15, "administr": [15, 18, 19], "abl": [15, 18, 19], "grant": [15, 18, 19], "about": [15, 18, 19], "upload": 15, "jar": [15, 19, 21], "dedic": 15, "fetch": 15, "p": 15, "cat": 15, "eof": 15, "bin": 15, "bash": 15, "On": 15, "startup": 15, "cp": [15, 21], "add": [15, 16], "mosaicsql": 15, "mosaicsqldefault": 15, "command": [15, 19], "startswith": 15, "317": 15, "ui": 15, "happen": 15, "context": 15, "made": 15, "late": 15, "print": 15, "error": 15, "messag": 15, "297": 15, "v0": [15, 19], "fail": 15, "java": 15, "lang": 15, "except": 15, "been": [15, 18], "fix": 15, "releas": [15, 18], "config": 15, "altern": [15, 19], "expens": 16, "like": [16, 19], "reduc": 16, "determinist": [16, 21], "workflow": [16, 21], "drop_col": 16, "rate_code_id": [16, 21], "store_and_fwd_flag": [16, 21], "dropoff_longitud": [16, 21], "dropoff_latitud": [16, 21], "payment_typ": [16, 21], "fare_amount": [16, 21], "extra": [16, 21], "mta_tax": [16, 21], "tip_amount": [16, 21], "tolls_amount": [16, 21], "total_amount": [16, 21], "nyctaxi": [16, 21], "nyctaxi_yellow": [16, 21], "drop": [16, 21], "5_000_000": [16, 21], "sc": [16, 21], "defaultparallel": [16, 21], "vendor_id": [16, 21], "pickup_datetim": [16, 21], "dropoff_datetim": [16, 21], "passenger_count": [16, 21], "trip_dist": [16, 21], "pickup_longitud": [16, 21], "pickup_latitud": [16, 21], "cmt": [16, 21], "2009": [16, 21], "07": [16, 21], "33": [16, 21], "28": [16, 21], "74": [16, 20, 21], "001041": 16, "731": 16, "51": [16, 21], "57": [16, 21], "73": [16, 21], "996489": 16, "725742": 16, "2010": [16, 21], "14": [16, 21], "17": [16, 21], "42": [16, 21], "16": [16, 21], "55": [16, 21], "002949": 16, "734254": 16, "18": [16, 21], "19": [16, 21], "27": [16, 21], "54": [16, 21], "998133": 16, "682463": 16, "vt": [16, 21], "05": [16, 21], "001332": 16, "72006": 16, "24": [16, 21], "23": [16, 21], "989952": 16, "734625": 16, "44": [16, 21], "37": [16, 21], "006015": 16, "735279": 16, "09": [16, 21], "08": [16, 21], "46": [16, 21], "59": 16, "97": 16, "000148": 16, "717468": 16, "48": 16, "52": 16, "38": [16, 21], "995177": 16, "725297": 16, "39": [16, 21], "990133": 16, "729321": 16, "22": [16, 18, 21], "41": [16, 21], "009175": 16, "706284": 16, "007384": 16, "717929": 16, "011512": 16, "710588": 16, "016442": 16, "711617": 16, "01014": 16, "712263": 16, "002505": 16, "729001": 16, "36": [16, 21], "006767": 16, "718942": 16, "993258": 16, "721401": 16, "91": 16, "992785": 16, "730412": 16, "71": 16, "010065": 16, "733383": 16, "top": [16, 18, 20, 21], "current_us": 16, "neighbourhood": [16, 20, 21], "shared_upload": [16, 21], "nyc_taxi_zon": [16, 20, 21], "to_json": [16, 20, 21], "shape_area": [16, 21], "shape_leng": [16, 21], "borough": [16, 21], "location_id": [16, 21], "objectid": [16, 21], "zone": [16, 21], "brooklyn": [16, 21], "123": 16, "homecrest": 16, "manhattan": [16, 21], "153": 16, "marbl": 16, "hill": [16, 21], "112": 16, "greenpoint": 16, "233": 16, "un": 16, "turtl": 16, "bai": [16, 21], "south": 16, "43": [16, 21], "central": 16, "park": [16, 21], "queen": [16, 21], "201": 16, "rockawai": 16, "131": 16, "jamaica": [16, 21], "estat": 16, "111": 16, "green": 16, "wood": 16, "cemeteri": 16, "226": 16, "sunnysid": 16, "129": 16, "jackson": 16, "120": 16, "highbridg": 16, "76": 16, "east": [16, 21], "bloomingdal": [16, 21], "202": 16, "roosevelt": 16, "island": [16, 21], "garment": 16, "district": 16, "staten": [16, 21], "westerleigh": 16, "harlem": 16, "98": 16, "fresh": 16, "meadow": 16, "211": 16, "soho": 16, "bronx": [16, 21], "174": 16, "norwood": 16, "mosaicfram": [16, 22], "neighbourhoods_mdf": [16, 21], "help": [16, 21], "get_optimal_resolut": 16, "modul": [16, 21], "mosaic_fram": 16, "sample_row": 16, "nonetyp": 16, "none": [16, 21], "sample_fract": 16, "instanc": 16, "analyz": 16, "propos": 16, "much": [16, 21], "littl": [16, 21], "notenoughgeometriesexcept": 16, "sampl": 16, "proport": 16, "out": [16, 17, 21], "occupi": 16, "indexed_trip": 16, "ix": 16, "dd": 16, "56": [16, 21], "004043": 16, "733409": 16, "617733151092113407": 16, "47": [16, 21], "991702": 16, "726342": 16, "617733151087132671": 16, "999673": 16, "733586": 16, "617733123805806591": 16, "32": [16, 21], "01211": 16, "716893": 16, "617733151084773375": 16, "010903": 16, "71624": 16, "002343": 16, "73366": 16, "002565": 16, "728188": 16, "617733151091326975": 16, "999184": 16, "73428": 16, "31": 16, "003029": 16, "733385": 16, "000227": 16, "732603": 16, "617733151092375551": 16, "006535": 16, "732303": 16, "617733151092637695": 16, "998795": 16, "730621": 16, "0079": 16, "712012": 16, "617733151021334527": 16, "004487": 16, "734072": 16, "004493": 16, "713349": 16, "617733151020810239": 16, "010798": 16, "716717": 16, "992515": 16, "694106": 16, "617733151038111743": 16, "9923": 16, "715218": 16, "617733151109414911": 16, "34": [16, 20, 21], "0027": 16, "733479": 16, "994358": 16, "690345": 16, "617733151037325311": 16, "commonli": 16, "indexed_neighbourhood": 16, "ix_set": 16, "6177331514226769": 16, "6177331229858201": 16, "6177331237832622": 16, "6177331238679347": 16, "6177331225792348": 16, "6177331357831659": 16, "6177331242658693": 16, "6177331522277212": 16, "6177331238566625": 16, "6177331243222302": 16, "6177331231976325": 16, "6177331236938711": 16, "6177331226458193": 16, "6177331237777571": 16, "6177331509717893": 16, "6177331466128588": 16, "6177331226508001": 16, "6177331242448977": 16, "6177331510784819": 16, "6177331205497159": 16, "exploded_indexed_neighbourhood": 16, "617733151422676991": 16, "617733151503417343": 16, "617733151502893055": 16, "617733151502368767": 16, "617733151492407295": 16, "617733151488737279": 16, "617733151484542975": 16, "617733151484018687": 16, "617733151483494399": 16, "617733151425560575": 16, "617733151424511999": 16, "617733151423463423": 16, "617733151511019519": 16, "617733151505776639": 16, "617733151505252351": 16, "617733151504203775": 16, "617733151503679487": 16, "617733151503155199": 16, "617733151502630911": 16, "617733151502106623": 16, "joined_df": [16, 21], "4934937": 16, "uber": 16, "plan": [16, 19], "s2": 16, "cours": 16, "territori": 17, "being": [17, 21], "organ": 17, "uk": 17, "One": 17, "wish": 17, "suppli": 17, "sparkrmosa": [17, 19], "enablemosa": [17, 19], "otherwis": 17, "rest": 17, "osgb36": 17, "kingdom": 17, "visit": 17, "switch": 17, "strategi": 17, "arriv": 17, "captur": 17, "manual": [17, 19], "withsrccr": 17, "withreproject": 17, "verifi": 17, "vertic": 17, "prefer": 17, "end": 17, "possibl": 17, "is_within_bng_bound": 17, "withvalidcoord": 17, "easiest": 18, "now": [18, 21], "pip": [18, 19, 20], "bundl": 18, "complet": 18, "restart": [18, 20], "click": 18, "edit": 18, "button": 18, "enable_gd": 18, "As": 19, "nor": 19, "adb": 19, "aw": 19, "gcp": 19, "benefit": 19, "receiv": 19, "begin": 19, "streamlin": 19, "align": 19, "futur": 19, "power": 19, "directli": [19, 22], "magic": [19, 20, 21], "appropri": 19, "choos": 19, "intend": 19, "whl": 19, "necessari": 19, "download": 19, "bind": 19, "sparkr": 19, "readm": 19, "md": 19, "perhap": 19, "mechan": 19, "vari": 19, "emploi": 19, "sparksess": [19, 21], "mosaic_kepl": [20, 21], "gl": [20, 21], "accept": 20, "four": 20, "column_nam": 20, "feature_typ": 20, "intermedi": 20, "temporari": 20, "anoth": 20, "quiet": 20, "interpret": 20, "request": 20, "req": 20, "cityofnewyork": 20, "d3c5": 20, "ddgc": 20, "export": 20, "wb": 20, "content": 20, "multilin": 20, "geom_json": 20, "geom_intern": 20, "geom_wkb": 20, "featurecollect": 20, "ewr": [20, 21], "000": 20, "keplergl": [20, 21], "jupyt": [20, 21], "createorreplacetempview": [20, 21], "temp_view_neighbourhood": 20, "neighbourhood_chip": 20, "617733150781997055": 20, "617733150856445951": 20, "617733150856970239": 20, "617733150784094207": 20, "617733150843600895": 20, "617733150843863039": 20, "617733150844125183": 20, "617733150784880639": 20, "617733150844387327": 20, "617733150844649471": 20, "617733150785404927": 20, "617733150844911615": 20, "617733150785667071": 20, "617733150845173759": 20, "617733150785929215": 20, "617733150786453503": 20, "617733150846222335": 20, "617733150847270911": 20, "617733150847795199": 20, "617733150848057343": 20, "ll": 21, "session": 21, "accord": 21, "activ": 21, "dbruntim": 21, "displayhtml": 21, "applic": 21, "variou": 21, "autoattach": 21, "explicitli": 21, "environ": 21, "underli": 21, "70": 21, "bounds_df": 21, "coalesc": 21, "bounding_coord": 21, "bounding_r": 21, "tripstabl": 21, "vendorid": 21, "ratecodeid": 21, "pickup_geom": 21, "dropoff_geom": 21, "crossjoin": 21, "cach": 21, "000018": 21, "720534": 21, "995008": 21, "734112": 21, "016477": 21, "70971": 21, "97509": 21, "759392": 21, "999666": 21, "733384": 21, "991751": 21, "730273": 21, "007033": 21, "734931": 21, "87277": 21, "774319": 21, "993217": 21, "72416": 21, "9944": 21, "74624": 21, "010003": 21, "707022": 21, "963853": 21, "75677": 21, "008697": 21, "707335": 21, "949605": 21, "78761": 21, "008823": 21, "72089": 21, "994055": 21, "747588": 21, "011653": 21, "702604": 21, "971851": 21, "749807": 21, "997208": 21, "722108": 21, "99647": 21, "748185": 21, "99067": 21, "73065": 21, "975539": 21, "741353": 21, "990065": 21, "687341": 21, "999566": 21, "730219": 21, "008459": 21, "712233": 21, "9516": 21, "718877": 21, "99": 21, "994397": 21, "694843": 21, "921257": 21, "685107": 21, "007602": 21, "725098": 21, "977846": 21, "751608": 21, "011205": 21, "715468": 21, "011072": 21, "708882": 21, "991123": 21, "731297": 21, "98681": 21, "736703": 21, "008448": 21, "734271": 21, "006075": 21, "720237": 21, "00679": 21, "730546": 21, "9904": 21, "73815": 21, "009605": 21, "710155": 21, "993875": 21, "741554": 21, "ve": 21, "seen": 21, "geojsondf": 21, "newark": 21, "airport": 21, "184452": 21, "823375": 21, "allerton": 21, "pelham": 21, "847926": 21, "alphabet": 21, "citi": 21, "971774": 21, "arden": 21, "174217": 21, "arrochar": 21, "fort": 21, "wad": 21, "063673": 21, "astoria": 21, "904136": 21, "923340": 21, "auburndal": 21, "785024": 21, "959536": 21, "baislei": 21, "783266": 21, "bath": 21, "beach": 21, "001098": 21, "batteri": 21, "015657": 21, "012441": 21, "bedford": 21, "885139": 21, "boerum": 21, "981552": 21, "ridg": 21, "034073": 21, "terrac": 21, "777403": 21, "bensonhurst": 21, "west": 21, "992549": 21, "bloomfield": 21, "emerso": 21, "195686": 21, "relev": 21, "calculatedarea": 21, "ab": 21, "calculatedlength": 21, "823067885002562e": 21, "1163574531886787": 21, "001422779097814599": 21, "8431218810128789": 21, "144141568206508e": 21, "08434110590105784": 21, "94539194214528e": 21, "03559982116907461": 21, "979574893632193e": 21, "09214648985735088": 21, "046076598541714e": 21, "12905753305870837": 21, "897879892739018": 21, "10741717112348065": 21, "658771690499072e": 21, "027590691195158792": 21, "384438031986125": 21, "0997840924710119": 21, "193691000471793e": 21, "034022318280805826": 21, "358238180810105": 21, "09983947941552027": 21, "029913532381591e": 21, "07243934539937844": 21, "078595394871048": 21, "01759380786230351": 21, "874002713725957e": 21, "04726120195723124": 21, "488501639473639e": 21, "06979954985700013": 21, "241682673558662": 21, "04714581993191898": 21, "636590898190788e": 21, "13622530962992194": 21, "588438269978550": 21, "1295148763926726": 21, "613649657988681": 21, "11844001178496774": 21, "002090822778761513": 21, "3007595308122533": 21, "263": 21, "trips_with_geom": 21, "pickup_h3": 21, "dropoff_h3": 21, "622236750705885183": 21, "622236723432488959": 21, "622236750651359231": 21, "622236723493961727": 21, "622236723433046015": 21, "622236750715092991": 21, "622236750719975423": 21, "622236724015759359": 21, "622236750717878271": 21, "622236723431276543": 21, "622236750647689215": 21, "622236723504381951": 21, "622236750647820287": 21, "622236722210668543": 21, "622236750713159679": 21, "622236723439304703": 21, "622236750639857663": 21, "622236723496026111": 21, "622236750706966527": 21, "622236723431309311": 21, "622236723437502463": 21, "622236750667481087": 21, "622236750719549439": 21, "622236750648639487": 21, "622236723415482367": 21, "622236750665449471": 21, "622236723618283519": 21, "622236750711291903": 21, "622236723435503615": 21, "622236750712831999": 21, "622236750647459839": 21, "622236750715060223": 21, "622236723429539839": 21, "622236750719844351": 21, "622236750713126911": 21, "622236750718894079": 21, "622236723426754559": 21, "622236750646968319": 21, "622236723430490111": 21, "freshkil": 21, "622236745731309567": 21, "622236745690841087": 21, "622236745723674623": 21, "622236745683206143": 21, "622236745691987967": 21, "622236745684353023": 21, "622236745733603327": 21, "622236745725968383": 21, "622236745701916671": 21, "622236745734750207": 21, "622236745694281727": 21, "622236745703063551": 21, "622236745679011839": 21, "622236745761095679": 21, "622236745680158719": 21, "622236745696575487": 21, "622236745762242559": 21, "622236745681305599": 21, "622236745730555903": 21, "622236745690087423": 21, "expr": 21, "4934151": 21, "techniqu": 21, "mosaic_neighbourhood": 21, "622236745694314495": 21, "622236745679077375": 21, "622236745734160383": 21, "622236745762275327": 21, "622236745731801087": 21, "622236745725935615": 21, "622236745680224255": 21, "622236745689595903": 21, "622236745683730431": 21, "622236745723576319": 21, "622236745763422207": 21, "622236745693102079": 21, "622236745732947967": 21, "622236745702473727": 21, "622236745696608255": 21, "622236745736454143": 21, "622236745761062911": 21, "622236745690742783": 21, "622236745675505663": 21, "622236745730588671": 21, "conveni": 21, "displaymosa": 21, "boroughlocation_idobjectidzoneis_coreh3wkbstaten": 21, "island9999freshkil": 21, "parktrue622236745694314495nullstaten": 21, "parktrue622236745679077375nullstaten": 21, "parktrue622236745734160383nullstaten": 21, "parktrue622236745762275327nullstaten": 21, "parktrue622236745731801087nullstaten": 21, "parktrue622236745725935615nullstaten": 21, "parktrue622236745680224255nullstaten": 21, "parktrue622236745689595903nullstaten": 21, "parktrue622236745683730431nullstaten": 21, "parktrue622236745723576319nullstaten": 21, "parktrue622236745763422207nullstaten": 21, "parktrue622236745693102079nullstaten": 21, "parktrue622236745732947967nullstaten": 21, "parktrue622236745702473727nullstaten": 21, "parktrue622236745696608255nullstaten": 21, "parktrue622236745736454143nullstaten": 21, "parktrue622236745761062911nullstaten": 21, "parktrue622236745690742783nullstaten": 21, "parktrue622236745675505663nullstaten": 21, "parktrue622236745730588671nullstaten": 21, "parktrue622236745694248959nullstaten": 21, "parktrue622236745679011839nullstaten": 21, "parktrue622236745734094847nullstaten": 21, "parktrue622236745762209791nullstaten": 21, "parktrue622236745731735551nullstaten": 21, "parktrue622236745725870079nullstaten": 21, "parktrue622236745680158719nullstaten": 21, "parktrue622236745689530367nullstaten": 21, "parktrue622236745683664895nullstaten": 21, "parktrue622236745763356671nullstaten": 21, "parktrue622236745693036543nullstaten": 21, "parktrue622236745732882431nullstaten": 21, "parktrue622236745702408191nullstaten": 21, "parktrue622236745681305599nullstaten": 21, "parktrue622236745760997375nullstaten": 21, "parktrue622236745675440127nullstaten": 21, "parktrue622236745730523135nullstaten": 21, "parktrue622236745703555071nullstaten": 21, "parktrue622236745762144255nullstaten": 21, "parktrue622236745725804543nullstaten": 21, "parktrue622236745680093183nullstaten": 21, "parktrue622236745683599359nullstaten": 21, "parktrue622236745763291135nullstaten": 21, "parktrue622236745692971007nullstaten": 21, "parktrue622236745732816895nullstaten": 21, "parktrue622236745913303039nullstaten": 21, "parktrue622236745702342655nullstaten": 21, "parktrue622236745681240063nullstaten": 21, "parktrue622236745690611711nullstaten": 21, "parktrue622236745675374591nullstaten": 21, "parktrue622236745694117887nullstaten": 21, "parktrue622236745733963775nullstaten": 21, "parktrue622236745703489535nullstaten": 21, "parktrue622236745731604479nullstaten": 21, "parktrue622236745689399295nullstaten": 21, "parktrue622236745683533823nullstaten": 21, "parktrue622236745763225599nullstaten": 21, "parktrue622236745692905471nullstaten": 21, "parktrue622236745732751359nullstaten": 21, "parktrue622236745913237503nullstaten": 21, "parktrue622236745702277119nullstaten": 21, "parktrue622236745742123007nullstaten": 21, "parktrue622236745681174527nullstaten": 21, "parktrue622236745760866303nullstaten": 21, "parktrue622236745730392063nullstaten": 21, "parktrue622236745684680703nullstaten": 21, "parktrue622236745724526591nullstaten": 21, "parktrue622236745764372479nullstaten": 21, "parktrue622236745694052351nullstaten": 21, "parktrue622236745733898239nullstaten": 21, "parktrue622236745703423999nullstaten": 21, "parktrue622236745682321407nullstaten": 21, "parktrue622236745731538943nullstaten": 21, "parktrue622236745725673471nullstaten": 21, "parktrue622236745695199231nullstaten": 21, "parktrue622236745735045119nullstaten": 21, "parktrue622236745689333759nullstaten": 21, "parktrue622236745683468287nullstaten": 21, "parktrue622236745763160063nullstaten": 21, "parktrue622236745732685823nullstaten": 21, "parktrue622236745702211583nullstaten": 21, "parktrue622236745742057471nullstaten": 21, "parktrue622236745681108991nullstaten": 21, "parktrue622236745760800767nullstaten": 21, "parktrue622236745690480639nullstaten": 21, "parktrue622236745675243519nullstaten": 21, "parktrue622236745684615167nullstaten": 21, "parktrue622236745764306943nullstaten": 21, "parktrue622236745693986815nullstaten": 21, "parktrue622236745733832703nullstaten": 21, "parktrue622236745672884223nullstaten": 21, "parktrue622236745682255871nullstaten": 21, "parktrue622236746168631295nullstaten": 21, "parktrue622236745761947647nullstaten": 21, "parktrue622236745731473407nullstaten": 21, "parktrue622236745725607935nullstaten": 21, "parktrue622236745695133695nullstaten": 21, "parktrue622236745734979583nullstaten": 21, "parktrue622236745689268223nullstaten": 21, "parktrue622236745683402751nullstaten": 21, "parktrue622236745723248639nullstaten": 21, "parktrue622236745732620287nullstaten": 21, "parktrue622236745702146047nullstaten": 21, "parktrue622236745741991935nullstaten": 21, "parktrue622236745760735231nullstaten": 21, "parktrue622236745690415103nullstaten": 21, "parktrue622236745675177983nullstaten": 21, "parktrue622236745684549631nullstaten": 21, "parktrue622236745724395519nullstaten": 21, "parktrue622236745764241407nullstaten": 21, "parktrue622236745703292927nullstaten": 21, "parktrue622236745682190335nullstaten": 21, "parktrue622236746168565759nullstaten": 21, "parktrue622236745676324863nullstaten": 21, "parktrue622236745725542399nullstaten": 21, "parktrue622236745695068159nullstaten": 21, "parktrue622236745734914047nullstaten": 21, "parktrue622236745683337215nullstaten": 21, "parktrue622236745723183103nullstaten": 21, "parktrue622236745732554751nullstaten": 21, "parktrue622236745702080511nullstaten": 21, "parktrue622236745741926399nullstaten": 21, "parktrue622236745760669695nullstaten": 21, "parktrue622236745690349567nullstaten": 21, "parktrue622236745675112447nullstaten": 21, "parktrue622236745693855743nullstaten": 21, "parktrue622236745703227391nullstaten": 21, "parktrue622236745743073279nullstaten": 21, "parktrue622236745672753151nullstaten": 21, "parktrue622236746168500223nullstaten": 21, "parktrue622236745676259327nullstaten": 21, "parktrue622236745731342335nullstaten": 21, "parktrue622236745725476863nullstaten": 21, "parktrue622236745695002623nullstaten": 21, "parktrue622236745734848511nullstaten": 21, "parktrue622236745673900031nullstaten": 21, "parktrue622236745683271679nullstaten": 21, "parktrue622236745723117567nullstaten": 21, "parktrue622236745732489215nullstaten": 21, "parktrue622236745702014975nullstaten": 21, "parktrue622236745741860863nullstaten": 21, "parktrue622236745726623743nullstaten": 21, "parktrue622236745760604159nullstaten": 21, "parktrue622236745690284031nullstaten": 21, "parktrue622236745684418559nullstaten": 21, "parktrue622236745724264447nullstaten": 21, "parktrue622236745693790207nullstaten": 21, "parktrue622236745733636095nullstaten": 21, "parktrue622236745703161855nullstaten": 21, "parktrue622236745743007743nullstaten": 21, "parktrue622236745697296383nullstaten": 21, "parktrue622236746168434687nullstaten": 21, "parktrue622236745676193791nullstaten": 21, "parktrue622236745731276799nullstaten": 21, "parktrue622236745725411327nullstaten": 21, "parktrue622236745694937087nullstaten": 21, "parktrue622236745679699967nullstaten": 21, "parktrue622236745734782975nullstaten": 21, "parktrue622236745683206143nullstaten": 21, "parktrue622236745723052031nullstaten": 21, "parktrue622236745692577791nullstaten": 21, "parktrue622236745732423679nullstaten": 21, "parktrue622236745701949439nullstaten": 21, "parktrue622236745741795327nullstaten": 21, "parktrue622236745726558207nullstaten": 21, "parktrue622236745760538623nullstaten": 21, "parktrue622236745690218495nullstaten": 21, "parktrue622236745674981375nullstaten": 21, "parktrue622236745684353023nullstaten": 21, "parktrue622236745724198911nullstaten": 21, "parktrue622236745693724671nullstaten": 21, "parktrue622236745697230847nullstaten": 21, "parktrue622236745761685503nullstaten": 21, "parktrue622236745676128255nullstaten": 21, "parktrue622236745731211263nullstaten": 21, "parktrue622236745725345791nullstaten": 21, "parktrue622236745694871551nullstaten": 21, "parktrue622236745734717439nullstaten": 21, "parktrue622236745683140607nullstaten": 21, "parktrue622236745722986495nullstaten": 21, "parktrue622236745732358143nullstaten": 21, "parktrue622236745701883903nullstaten": 21, "parktrue622236745741729791nullstaten": 21, "parktrue622236745726492671nullstaten": 21, "parktrue622236745690152959nullstaten": 21, "parktrue622236745674915839nullstaten": 21, "parktrue622236745684287487nullstaten": 21, "parktrue622236745724133375nullstaten": 21, "parktrue622236745703030783nullstaten": 21, "parktrue622236745697165311nullstaten": 21, "parktrue622236745761619967nullstaten": 21, "parktrue622236745676062719nullstaten": 21, "parktrue622236745725280255nullstaten": 21, "parktrue622236745694806015nullstaten": 21, "parktrue622236745734651903nullstaten": 21, "parktrue622236745683075071nullstaten": 21, "parktrue622236745722920959nullstaten": 21, "parktrue622236745692446719nullstaten": 21, "parktrue622236745732292607nullstaten": 21, "parktrue622236745701818367nullstaten": 21, "parktrue622236745741664255nullstaten": 21, "parktrue622236745735798783nullstaten": 21, "parktrue622236745690087423nullstaten": 21, "parktrue622236745674850303nullstaten": 21, "parktrue622236745693593599nullstaten": 21, "parktrue622236745733439487nullstaten": 21, "parktrue622236745702965247nullstaten": 21, "parktrue622236745742811135nullstaten": 21, "parktrue622236745697099775nullstaten": 21, "parktrue622236745675997183nullstaten": 21, "parktrue622236745725214719nullstaten": 21, "parktrue622236745694740479nullstaten": 21, "parktrue622236745734586367nullstaten": 21, "parktrue622236745698246655nullstaten": 21, "parktrue622236745683009535nullstaten": 21, "parktrue622236745722855423nullstaten": 21, "parktrue622236745762701311nullstaten": 21, "parktrue622236745732227071nullstaten": 21, "parktrue622236745726361599nullstaten": 21, "parktrue622236745735733247nullstaten": 21, "parktrue622236745690021887nullstaten": 21, "parktrue622236745684156415nullstaten": 21, "parktrue622236745724002303nullstaten": 21, "parktrue622236745693528063nullstaten": 21, "parktrue622236745733373951nullstaten": 21, "parktrue622236745702899711nullstaten": 21, "parktrue622236745742745599nullstaten": 21, "parktrue622236745697034239nullstaten": 21, "parktrue622236745681797119nullstaten": 21, "parktrue622236745736880127nullstaten": 21, "parktrue622236745761488895nullstaten": 21, "parktrue622236745675931647nullstaten": 21, "parktrue622236745725149183nullstaten": 21, "parktrue622236745694674943nullstaten": 21, "parktrue622236745734520831nullstaten": 21, "parktrue622236745682943999nullstaten": 21, "parktrue622236745722789887nullstaten": 21, "parktrue622236745732161535nullstaten": 21, "parktrue622236745726296063nullstaten": 21, "parktrue622236745735667711nullstaten": 21, "parktrue622236745689956351nullstaten": 21, "parktrue622236745674719231nullstaten": 21, "parktrue622236745684090879nullstaten": 21, "parktrue622236745723936767nullstaten": 21, "parktrue622236745693462527nullstaten": 21, "parktrue622236745733308415nullstaten": 21, "parktrue622236745696968703nullstaten": 21, "parktrue622236745736814591nullstaten": 21, "parktrue622236745761423359nullstaten": 21, "parktrue622236745675866111nullstaten": 21, "parktrue622236745725083647nullstaten": 21, "parktrue622236745694609407nullstaten": 21, "parktrue622236745734455295nullstaten": 21, "parktrue622236745732095999nullstaten": 21, "parktrue622236745726230527nullstaten": 21, "parktrue622236745689890815nullstaten": 21, "parktrue622236745674653695nullstaten": 21, "parktrue622236745684025343nullstaten": 21, "parktrue622236745723871231nullstaten": 21, "parktrue622236745702768639nullstaten": 21, "parktrue622236745742614527nullstaten": 21, "parktrue622236745681666047nullstaten": 21, "parktrue622236745736749055nullstaten": 21, "parktrue622236745761357823nullstaten": 21, "parktrue622236745675800575nullstaten": 21, "parktrue622236745725018111nullstaten": 21, "parktrue622236745694543871nullstaten": 21, "parktrue622236745734389759nullstaten": 21, "parktrue622236745732030463nullstaten": 21, "parktrue622236745689825279nullstaten": 21, "parktrue622236745674588159nullstaten": 21, "parktrue622236745702703103nullstaten": 21, "parktrue622236745742548991nullstaten": 21, "parktrue622236745736683519nullstaten": 21, "parktrue622236745690972159nullstaten": 21, "parktrue622236745675735039nullstaten": 21, "parktrue622236745724952575nullstaten": 21, "parktrue622236745694478335nullstaten": 21, "parktrue622236745734324223nullstaten": 21, "parktrue622236745731964927nullstaten": 21, "parktrue622236745726099455nullstaten": 21, "parktrue622236745689759743nullstaten": 21, "parktrue622236745683894271nullstaten": 21, "parktrue622236745723740159nullstaten": 21, "parktrue622236745702637567nullstaten": 21, "parktrue622236745742483455nullstaten": 21, "parktrue622236745696772095nullstaten": 21, "parktrue622236745761226751nullstaten": 21, "parktrue622236745690906623nullstaten": 21, "parktrue622236745675669503nullstaten": 21, "parktrue622236745724887039nullstaten": 21, "parktrue622236745694412799nullstaten": 21, "parktrue622236745679175679nullstaten": 21, "parktrue622236745734258687nullstaten": 21, "parktrue622236745731899391nullstaten": 21, "parktrue622236745726033919nullstaten": 21, "parktrue622236745689694207nullstaten": 21, "parktrue622236745683828735nullstaten": 21, "parktrue622236745723674623nullstaten": 21, "parktrue622236745763520511nullstaten": 21, "parktrue622236745696706559nullstaten": 21, "parktrue622236745761161215nullstaten": 21, "parktrue622236745690841087nullstaten": 21, "parktrue622236745675603967nullstaten": 21, "parktrue622236745694347263nullstaten": 21, "parktrue622236745679110143nullstaten": 21, "parktrue622236745734193151nullstaten": 21, "parktrue622236745762308095nullstaten": 21, "parktrue622236745731833855nullstaten": 21, "parktrue622236745725968383nullstaten": 21, "parktrue622236745689628671nullstaten": 21, "parktrue622236745729474559nullstaten": 21, "parktrue622236745683763199nullstaten": 21, "parktrue622236745723609087nullstaten": 21, "parktrue622236745763454975nullstaten": 21, "parktrue622236745702506495nullstaten": 21, "parktrue622236745742352383nullstaten": 21, "parktrue622236745696641023nullstaten": 21, "parktrue622236745761095679nullstaten": 21, "parktrue622236745675538431nullstaten": 21, "parktrue622236745694281727nullstaten": 21, "parktrue622236745679044607nullstaten": 21, "parktrue622236745734127615nullstaten": 21, "parktrue622236745762242559nullstaten": 21, "parktrue622236745731768319nullstaten": 21, "parktrue622236745680191487nullstaten": 21, "parktrue622236745689563135nullstaten": 21, "parktrue622236745693069311nullstaten": 21, "parktrue622236745732915199nullstaten": 21, "parktrue622236745702440959nullstaten": 21, "parktrue622236745696575487nullstaten": 21, "parktrue622236745675472895nullstaten": 21, "parktrue622236745730555903nullstaten": 21, "parktrue622236745694216191nullstaten": 21, "parktrue622236745734062079nullstaten": 21, "parktrue622236745703587839nullstaten": 21, "parktrue622236745762177023nullstaten": 21, "parktrue622236745731702783nullstaten": 21, "parktrue622236745725837311nullstaten": 21, "parktrue622236745689497599nullstaten": 21, "parktrue622236745683632127nullstaten": 21, "parktrue622236745723478015nullstaten": 21, "parktrue622236745763323903nullstaten": 21, "parktrue622236745693003775nullstaten": 21, "parktrue622236745732849663nullstaten": 21, "parktrue622236745702375423nullstaten": 21, "parktrue622236745681272831nullstaten": 21, "parktrue622236745690644479nullstaten": 21, "parktrue622236745675407359nullstaten": 21, "parktrue622236745730490367nullstaten": 21, "parktrue622236745694150655nullstaten": 21, "parktrue622236745733996543nullstaten": 21, "parktrue622236745703522303nullstaten": 21, "parktrue622236745762111487nullstaten": 21, "parktrue622236745731637247nullstaten": 21, "parktrue622236745680060415nullstaten": 21, "parktrue622236745689432063nullstaten": 21, "parktrue622236745683566591nullstaten": 21, "parktrue622236745763258367nullstaten": 21, "parktrue622236745692938239nullstaten": 21, "parktrue622236745732784127nullstaten": 21, "parktrue622236745681207295nullstaten": 21, "parktrue622236745760899071nullstaten": 21, "parktrue622236745675341823nullstaten": 21, "parktrue622236745730424831nullstaten": 21, "parktrue622236745684713471nullstaten": 21, "parktrue622236745764405247nullstaten": 21, "parktrue622236745694085119nullstaten": 21, "parktrue622236745733931007nullstaten": 21, "parktrue622236745703456767nullstaten": 21, "parktrue622236745682354175nullstaten": 21, "parktrue622236745762045951nullstaten": 21, "parktrue622236745731571711nullstaten": 21, "parktrue622236745725706239nullstaten": 21, "parktrue622236745689366527nullstaten": 21, "parktrue622236745683501055nullstaten": 21, "parktrue622236745763192831nullstaten": 21, "parktrue622236745702244351nullstaten": 21, "parktrue622236745742090239nullstaten": 21, "parktrue622236745681141759nullstaten": 21, "parktrue622236745675276287nullstaten": 21, "parktrue622236745684647935nullstaten": 21, "parktrue622236745724493823nullstaten": 21, "parktrue622236745764339711nullstaten": 21, "parktrue622236745694019583nullstaten": 21, "parktrue622236745678782463nullstaten": 21, "parktrue622236745733865471nullstaten": 21, "parktrue622236745703391231nullstaten": 21, "parktrue622236745682288639nullstaten": 21, "parktrue622236745761980415nullstaten": 21, "parktrue622236745731506175nullstaten": 21, "parktrue622236745695166463nullstaten": 21, "parktrue622236745735012351nullstaten": 21, "parktrue622236745689300991nullstaten": 21, "parktrue622236745732653055nullstaten": 21, "parktrue622236745702178815nullstaten": 21, "parktrue622236745742024703nullstaten": 21, "parktrue622236745690447871nullstaten": 21, "parktrue622236745675210751nullstaten": 21, "parktrue622236745684582399nullstaten": 21, "parktrue622236745764274175nullstaten": 21, "parktrue622236745693954047nullstaten": 21, "parktrue622236745733799935nullstaten": 21, "parktrue622236745703325695nullstaten": 21, "parktrue622236745743171583nullstaten": 21, "parktrue622236745682223103nullstaten": 21, "parktrue622236745761914879nullstaten": 21, "parktrue622236745731440639nullstaten": 21, "parktrue622236745725575167nullstaten": 21, "parktrue622236745695100927nullstaten": 21, "parktrue622236745734946815nullstaten": 21, "parktrue622236745689235455nullstaten": 21, "parktrue622236745683369983nullstaten": 21, "parktrue622236745723215871nullstaten": 21, "parktrue622236745732587519nullstaten": 21, "parktrue622236745702113279nullstaten": 21, "parktrue622236745741959167nullstaten": 21, "parktrue622236745696247807nullstaten": 21, "parktrue622236745681010687nullstaten": 21, "parktrue622236745760702463nullstaten": 21, "parktrue622236745690382335nullstaten": 21, "parktrue622236745675145215nullstaten": 21, "parktrue622236745684516863nullstaten": 21, "parktrue622236745724362751nullstaten": 21, "parktrue622236745764208639nullstaten": 21, "parktrue622236745693888511nullstaten": 21, "parktrue622236745733734399nullstaten": 21, "parktrue622236745703260159nullstaten": 21, "parktrue622236745743106047nullstaten": 21, "parktrue622236745682157567nullstaten": 21, "parktrue622236745761849343nullstaten": 21, "parktrue622236745691529215nullstaten": 21, "parktrue622236745676292095nullstaten": 21, "parktrue622236745731375103nullstaten": 21, "parktrue622236745725509631nullstaten": 21, "parktrue622236745695035391nullstaten": 21, "parktrue622236745734881279nullstaten": 21, "parktrue622236745683304447nullstaten": 21, "parktrue622236745723150335nullstaten": 21, "parktrue622236745732521983nullstaten": 21, "parktrue622236745726656511nullstaten": 21, "parktrue622236745696182271nullstaten": 21, "parktrue622236745760636927nullstaten": 21, "parktrue622236745690316799nullstaten": 21, "parktrue622236745675079679nullstaten": 21, "parktrue622236745684451327nullstaten": 21, "parktrue622236745724297215nullstaten": 21, "parktrue622236745693822975nullstaten": 21, "parktrue622236745733668863nullstaten": 21, "parktrue622236745703194623nullstaten": 21, "parktrue622236745743040511nullstaten": 21, "parktrue622236745761783807nullstaten": 21, "parktrue622236745691463679nullstaten": 21, "parktrue622236745676226559nullstaten": 21, "parktrue622236745731309567nullstaten": 21, "parktrue622236745725444095nullstaten": 21, "parktrue622236745683238911nullstaten": 21, "parktrue622236745723084799nullstaten": 21, "parktrue622236745701982207nullstaten": 21, "parktrue622236745741828095nullstaten": 21, "parktrue622236745726590975nullstaten": 21, "parktrue622236745696116735nullstaten": 21, "parktrue622236745760571391nullstaten": 21, "parktrue622236745675014143nullstaten": 21, "parktrue622236745684385791nullstaten": 21, "parktrue622236745724231679nullstaten": 21, "parktrue622236745693757439nullstaten": 21, "parktrue622236745733603327nullstaten": 21, "parktrue622236745703129087nullstaten": 21, "parktrue622236745742974975nullstaten": 21, "parktrue622236745697263615nullstaten": 21, "parktrue622236745676161023nullstaten": 21, "parktrue622236745731244031nullstaten": 21, "parktrue622236745694904319nullstaten": 21, "parktrue622236745734750207nullstaten": 21, "parktrue622236745732390911nullstaten": 21, "parktrue622236745701916671nullstaten": 21, "parktrue622236745741762559nullstaten": 21, "parktrue622236745726525439nullstaten": 21, "parktrue622236745690185727nullstaten": 21, "parktrue622236745674948607nullstaten": 21, "parktrue622236745684320255nullstaten": 21, "parktrue622236745724166143nullstaten": 21, "parktrue622236745693691903nullstaten": 21, "parktrue622236745733537791nullstaten": 21, "parktrue622236745703063551nullstaten": 21, "parktrue622236745697198079nullstaten": 21, "parktrue622236745761652735nullstaten": 21, "parktrue622236745731178495nullstaten": 21, "parktrue622236745694838783nullstaten": 21, "parktrue622236745734684671nullstaten": 21, "parktrue622236745698344959nullstaten": 21, "parktrue622236745683107839nullstaten": 21, "parktrue622236745722953727nullstaten": 21, "parktrue622236745692479487nullstaten": 21, "parktrue622236745732325375nullstaten": 21, "parktrue622236745701851135nullstaten": 21, "parktrue622236745741697023nullstaten": 21, "parktrue622236745726459903nullstaten": 21, "parktrue622236745735831551nullstaten": 21, "parktrue622236745690120191nullstaten": 21, "parktrue622236745674883071nullstaten": 21, "parktrue622236745684254719nullstaten": 21, "parktrue622236745724100607nullstaten": 21, "parktrue622236745693626367nullstaten": 21, "parktrue622236745733472255nullstaten": 21, "parktrue622236745702998015nullstaten": 21, "parktrue622236745697132543nullstaten": 21, "parktrue622236745676029951nullstaten": 21, "parktrue622236745725247487nullstaten": 21, "parktrue622236745694773247nullstaten": 21, "parktrue622236745734619135nullstaten": 21, "parktrue622236745683042303nullstaten": 21, "parktrue622236745722888191nullstaten": 21, "parktrue622236745762734079nullstaten": 21, "parktrue622236745732259839nullstaten": 21, "parktrue622236745726394367nullstaten": 21, "parktrue622236745735766015nullstaten": 21, "parktrue622236745690054655nullstaten": 21, "parktrue622236745674817535nullstaten": 21, "parktrue622236745684189183nullstaten": 21, "parktrue622236745724035071nullstaten": 21, "parktrue622236745693560831nullstaten": 21, "parktrue622236745733406719nullstaten": 21, "parktrue622236745702932479nullstaten": 21, "parktrue622236745761521663nullstaten": 21, "parktrue622236745675964415nullstaten": 21, "parktrue622236745698213887nullstaten": 21, "parktrue622236745682976767nullstaten": 21, "parktrue622236745722822655nullstaten": 21, "parktrue622236745726328831nullstaten": 21, "parktrue622236745674751999nullstaten": 21, "parktrue622236745684123647nullstaten": 21, "parktrue622236745723969535nullstaten": 21, "parktrue622236745693495295nullstaten": 21, "parktrue622236745733341183nullstaten": 21, "parktrue622236745702866943nullstaten": 21, "parktrue622236745736847359nullstaten": 21, "parktrue622236745761456127nullstaten": 21, "parktrue622236745675898879nullstaten": 21, "parktrue622236745694642175nullstaten": 21, "parktrue622236745734488063nullstaten": 21, "parktrue622236745698148351nullstaten": 21, "parktrue622236745732128767nullstaten": 21, "parktrue622236745726263295nullstaten": 21, "parktrue622236745735634943nullstaten": 21, "parktrue622236745689923583nullstaten": 21, "parktrue622236745674686463nullstaten": 21, "parktrue622236745684058111nullstaten": 21, "parktrue622236745723903999nullstaten": 21, "parktrue622236745693429759nullstaten": 21, "parktrue622236745733275647nullstaten": 21, "parktrue622236745702801407nullstaten": 21, "parktrue622236745742647295nullstaten": 21, "parktrue622236745736781823nullstaten": 21, "parktrue622236745761390591nullstaten": 21, "parktrue622236745725050879nullstaten": 21, "parktrue622236745694576639nullstaten": 21, "parktrue622236745734422527nullstaten": 21, "parktrue622236745732063231nullstaten": 21, "parktrue622236745726197759nullstaten": 21, "parktrue622236745689858047nullstaten": 21, "parktrue622236745674620927nullstaten": 21, "parktrue622236745683992575nullstaten": 21, "parktrue622236745723838463nullstaten": 21, "parktrue622236745702735871nullstaten": 21, "parktrue622236745742581759nullstaten": 21, "parktrue622236745736716287nullstaten": 21, "parktrue622236745761325055nullstaten": 21, "parktrue622236745691004927nullstaten": 21, "parktrue622236745675767807nullstaten": 21, "parktrue622236745724985343nullstaten": 21, "parktrue622236745694511103nullstaten": 21, "parktrue622236745734356991nullstaten": 21, "parktrue622236745731997695nullstaten": 21, "parktrue622236745726132223nullstaten": 21, "parktrue622236745689792511nullstaten": 21, "parktrue622236745674555391nullstaten": 21, "parktrue622236745683927039nullstaten": 21, "parktrue622236745723772927nullstaten": 21, "parktrue622236745763618815nullstaten": 21, "parktrue622236745702670335nullstaten": 21, "parktrue622236745742516223nullstaten": 21, "parktrue622236745761259519nullstaten": 21, "parktrue622236745690939391nullstaten": 21, "parktrue622236745675702271nullstaten": 21, "parktrue622236745724919807nullstaten": 21, "parktrue622236745679208447nullstaten": 21, "parktrue622236745726066687nullstaten": 21, "parktrue622236745683861503nullstaten": 21, "parktrue622236745723707391nullstaten": 21, "parktrue622236745702604799nullstaten": 21, "parktrue622236745742450687nullstaten": 21, "parktrue622236745696739327nullstaten": 21, "parktrue622236745761193983nullstaten": 21, "parktrue622236745690873855nullstaten": 21, "parktrue622236745675636735nullstaten": 21, "parktrue622236745694380031nullstaten": 21, "parktrue622236745679142911nullstaten": 21, "parktrue622236745734225919nullstaten": 21, "parktrue622236745731866623nullstaten": 21, "parktrue622236745726001151nullstaten": 21, "parktrue622236745689661439nullstaten": 21, "parktrue622236745729507327nullstaten": 21, "parktrue622236745683795967nullstaten": 21, "parktrue622236745723641855nullstaten": 21, "parktrue622236745763487743nullstaten": 21, "parktrue622236745702539263nullstaten": 21, "parktrue622236745696673791nullstaten": 21, "parktrue622236745761128447nullstaten": 21, "parktrue622236745690808319nullstaten": 21, "parktrue622236745725739007nullstaten": 21, "parkfalse622236745696935935aqmaaaabaaaabaaaaizvort9i1lauzwxq0nirecs3yeigotswict0": 21, "1kseraz1bl94wlusd10ic1suheqizvort9i1lauzwxq0nirea": 21, "parkfalse622236746167451647aqmaaaabaaaabqaaalllamedjvla7ptzhuvhrebnnifzji1swix": 21, "idvnr0rao5wzni2nusaymxlhtkdeqozxfhmcjvlaepg7zklhrecyy2pnny1swoz08x1fr0rastaten": 21, "parkfalse622236745725181951aqmaaaabaaaacaaaako97sfljflaifimkfvhrecdqwsmwixswigy7t9zr0raaicr": 21, "7mmusavstwxzudeqkmcack3jflajqi4ym9hrebtwbawwoxswgytiub": 21, "r0ralcoy8tcmusb7rxhgekdeqe9ql3vvjfla5tnfbwvhrecjve0": 21, "parkfalse622236745692708863aqmaaaabaaaacgaaabxtrq7gillamdfeuplhredd33s73ypswkghslx6r0rayuddbd2kusakqhcxdeheqhokdc7dillaxpp1lhtireczsmwt3ypswia5dj0bserajm9mhn2kusarqtk4h0heqkbuuhbdillaag": 21, "akifireawyi0": 21, "parkfalse622236745763880959aqmaaaabaaaabaaaamjtrbbeillauxwkisxlreakj7zcwypswlrfzjfbs0rauowva8wkusavgcevlkteqmjtrbbeillauxwkisxlrea": 21, "parkfalse622236745673801727aqmaaaabaaaaeaaaaeusd47ri1larkk8hxllreb67wsv3itswk": 21, "oiees0raitnvjnilusc9w3nbm0teqkosohnii1law55wo0nlrecon47p6otswa05smhas0raqtkhht2luscwtkiymuteqgxef4jfi1lans6gkjflreakqvc": 21, "parkfalse622236745762766847aqmaaaabaaaabaaaabhqbw3nilla5pfq": 21, "cpkrea20j3kzipswhelcgrnskra": 21, "lrm2kusbdjg1py0peqbhqbw3nilla5pfq": 21, "cpkrea": 21, "parkfalse622236745769549823aqmaaaabaaaacaaaaesfesjqillavi5xotlmrebsshp3yypswgy4qrm7teraopswlmwkusbx9gtsv0xeqoatahxeillazkleul9mredto0mrx4pswlxejlvjteraughs8dwkusan": 21, "qzcxkxeqayg43zaillafxergklmreblh3k": 21, "parkfalse622236746168893439aqmaaaabaaaacgaaaefnnv4qjvlawd4mp1threbsqqgeko1swj1uo2zcr0razl": 21, "3ctsnuscxxlzdbedeqmybev82jvlacxr5nmthrebx": 21, "b14p41swj9igv9er0rad4r8yzqnusdhj1iuxkdeqdyyrxu2jvladjqzbl5hredzpn": 21, "parkfalse622236745673244671aqyaaaacaaaaaqmaaaabaaaabqaaagfnwjfyjflacct": 21, "1ufkrebewyhguyxswcd74ifkskraow3vnfkmusa4u1f95kpeqd0i": 21, "b9zjflaypjwo": 21, "rkrebn51oxwixswhak": 21, "9bhskraaqmaaaabaaaabqaaaltrzktojflakegtj": 21, "parkfalse622236745730293759aqmaaaabaaaadwaaahsrqebrjvlalnbqrghirec72iodxy1swl": 21, "pld9tserayctpelinusawlouygkheqf": 21, "qes9ijvlaavta9pfireb0k4b3bo1swmamceonserac8kjxg": 21, "nusbsmgihjeheqkb950bwjvlaoz81o4liredls8k": 21, "parkfalse622236745757982719aqmaaaabaaaacaaaafvg22amillanalwn7vlreb": 21, "jbiopswe9m1co2s0ragdjhcnqkusdzzaofz0teqo": 21, "cb7v5illattuvknblrebwrgjpg4pswgznolpfs0ral1apl5kkusbiuqda2kteqnp227qwillaalptgmvlrebb4n": 21, "parkfalse622236745736519679aqmaaaabaaaabgaaabixndutjvlaly8": 21, "hjkrecy44biko1swhiq5ceuskra9g1i2swnuscgwz": 21, "7kepeqbukehmujvlaeijhmtzkrebyi0bplo1swe8n89smskraeje11s2nusatjyz6ekpeqa": 21, "parktrue622236745678913535nullstaten": 21, "parkfalse622236745682026495aqmaaaabaaaabwaaabhv": 21, "kp6i1lah31hsgfmrecudmrva4tswaqrrjvmterabzfszgelusarqwqqe0xeqkfzq7lxi1lay4jx8ipmred1jqxhcotswctxt42kterayim7bnqlusbwljgmykxeqbhv": 21, "kp6i1lah31hsgfmrea": 21, "parkfalse622236745735405567aqmaaaabaaaalaaaacbtiiu": 21, "jvlaspewu6xjrec8plexmo1swfki59ywsuravv6sqc2nusd4yng2xuleqfl7": 21, "my3jvlatd7rqnvjrebhh4djn41swdcgssftsuraistamjinusbjwkyr0uleqi02bz04jvlatalewc9jred26f": 21, "parkfalse622236745696149503aqmaaaabaaaacqaaaorf": 21, "0wejflaur1xzyrireccufvwhyxswiccaxilsera39": 21, "ymxqmusa": 21, "lfb4jkheqmyzxcgejfla7kjzds9irecy6bdfa4xswlmk9razseramuo1sw2musd2iztvqkheqlzpczacjflasm3j9t1irecarrk": 21, "parkfalse622236745742188543aqmaaaabaaaacaaaaiprki5ti1lawrpdy59mreawlwtoxotswfh5zcskterajxrcwlmlusbkxz": 21, "fuuxeqe1c3xdki1lazg02gmlmreafjwoxz4tswk": 21, "bhx": 21, "iteravaujcgilusdfm3gqx0xeqotdaktui1la144nfajmreckayo": 21, "parkfalse622236745699262463aqmaaaabaaaacqaaajjnynxrillakanxzp9jredmtz333ipswfwbsmueskra": 21, "2kpznqkusc": 21, "hkg4dkpeqj1m8g": 21, "aillaz8uh5rlkreawv8fm2ypswfyfwuqbskra9igfv": 21, "kkusaimnb": 21, "kupeqb9aqz7xillaeb4hhirkrecw80": 21, "parkfalse622236745695592447aqmaaaabaaaafaaaachybz3zi1lavweqxevireaeggfh14tswof3dj5iseratdzxyneluscoil8": 21, "seheqoccqv": 21, "xi1lavjidquhirecjnmnz04tswd3fzqvnserawuayjm": 21, "lusd72d9wuuheqc2bqsppi1lakpgwcvfirebfkxi": 21, "parkfalse622236745912778751aqmaaaabaaaabaaaagogq": 21, "5jflafblcf2vhreddmav": 21, "s4xswcv2lqvwr0raqyjpwremusalclhib0deqgogq": 21, "5jflafblcf2vhrea": 21, "parkfalse622236745769877503aqmaaaabaaaabaaaaaesmsn": 21, "illan0d7lprlreczpv25fipswpygs9v0s0rajsoxv3": 21, "kusa": 21, "gcyv9uteqaesmsn": 21, "illan0d7lprlrea": 21, "parkfalse622236745691365375aqmaaaabaaaacwaaagozuin1illaekqiqdlhreaw8syw9ipswmcgf": 21, "jfr0ralipbap6kusdaqrbh70deqbj93qemi1la": 21, "htxo": 21, "threa3kig6botswlz1sphlr0raxgtyuqclusagdz7t4edeqag8ij7": 21, "illa9ibo6t9hreds7pu": 21, "parkfalse622236745736290303aqmaaaabaaaabgaaao0ekpjdjvlar0n": 21, "nj5jrebbxepvqo1swjnxp0sjsura56i3skonusbsb": 21, "ddokleqnmkbsvejvlaicjg8kfjrecgzkwxri1swiacyj": 21, "gsura7qsq8konusbhq3": 21, "cnkleqa": 21, "parktrue622236745921560575nullstaten": 21, "parkfalse622236745913106431aqmaaaabaaaaeaaaaiiwnijqjflaz2od0szhrebzdm1g6ixswlkjse8mr0raa": 21, "xnouamusde2mi4j0deqnyvprfkjflaj2zzrsdhrea05cpv4oxswdr9fg0or0rakxtijd6muschdoq9o0deqjji9odojfla9hgrm0thredmpg8": 21, "parkfalse622236745698476031aqmaaaabaaaacqaaal": 21, "ux3oillaisejgfnjrebrtn3l4ipswjm6vytvsurar2wazockusax3fenvkleqkdufongillarguvemdjred8vvvz34pswazaevv3surazrei0n": 21, "kusb9ldcgfeleqewabobtillafhgz0xdjrebospa": 21, "parkfalse622236745769648127aqmaaaabaaaabwaaaj5jnixcilla0iwql3hmrecihmijwopswi4iefl4tera": 21, "atadmckuscs30q4iexeqo271i": 21, "illaeh": 21, "vt6bmrebgdw9oyipswlcrh": 21, "ucteraewwy2sykuscq2o0qiexeqj5jnixcilla0iwql3hmrea": 21, "parkfalse622236746168991743aqmaaaabaaaabgaaaozxfhmcjvlaepg7zklhrecjlbocjy1swbizewfor0raedp0fimnusawnou5y0deqnrjiuwtjvlajciu4xjhr": 21, "zstpk41swacbe3xyr0raaf7oo5onusaqfuplcudeqb0fx": 21, "ctjvlat2ewuxfhred02ai": 21, "parkfalse622236745673342975aqmaaaabaaaacqaaab": 21, "zgpprjfla": 21, "inkashkrecwb1g7xixswnn6kv3mskraz": 21, "damvimusbwjp": 21, "w4upeqd0i": 21, "rkredd": 21, "3rsx4xswlrmzyjiskrarimgtm6musbukc0x5kpeqbjpktv0jflaqxtkzt9kred9fqq": 21, "parktrue622236745680125951nullstaten": 21, "parkfalse622236745672785919aqmaaaabaaaabwaaactbcainjflave8agpjkrebs8so1hixswgna4b": 21, "1skrarqe3brumusddvi": 21, "0peqaczcuidjfla31deeplkreb6wj8niyxswbyz": 21, "72skrashdjsssmusdgoswx9epeqctbcainjflave8agpjkrea": 21, "parkfalse622236745690578943aqmaaaabaaaacqaaadmf": 21, "s3qilla0p0dh8tiredeljzq24pswfzaca": 21, "qserahquvddukusdbmc0y00heqp7d8cdcilla": 21, "ml9x": 21, "hiream": 21, "thi3ipswfeuv5htserabbjigogkusbndlvp9eheqa6oj": 21, "bvillap": 21, "gt1": 21, "9irebu": 21, "parkfalse622236745761751039aqmaaaabaaaacaaaaifq": 21, "zbeillabsznk": 21, "blrecf0tg3typswh21mst1s0razuatzbgkusaxnluyb0xeqimknpu8illaohafrg5mrea7izpexypswpabrzswteraimkyx8qkusajffzmfexeqdhhp": 21, "voillaxblxdabmrech0p0": 21, "parktrue622236745679568895nullstaten": 21, "parkfalse622236745743400959aqmaaaabaaaacaaaag3nwusyi1labcizr": 21, "1mreahlgkljitswlfpb0dyteraynd3fx": 21, "lusbwzvuab01eqjsa9nqpi1lathy0": 21, "bznrec4lm": 21, "motswgymuysuturas5qpedulusb9dzo1b01eqnzywua9i1lakkk": 21, "kp1mrebtzci": 21, "parkfalse622236745742843903aqmaaaabaaaabwaaaaezn97yilla2oyxbhznreclgcsc5ipswafxvf4atura2lgymeukusaqkb94he1eqcuus3": 21, "willajowfrh1nredvfnrh9ypswf42raweturax31npfmkusb65hrxie1eqaezn97yilla2oyxbhznrea": 21, "parkfalse622236745735503871aqmaaaabaaaajwaaagmcpnqzjvla6wikbupjrebkr4qwji1swjq": 21, "ownvsurafd5tdscnusbt20ddbepeqlljggiqjvlaejdkirrkreasmtxvly1swc2plposskrauz3cvy2nusd9fd0ceepeqkfrpqkujvlabadpmg5kreaf9ai": 21, "parkfalse622236745763749887aqmaaaabaaaacaaaaltw8yhoillarlvm4grlredbzi5tyipswg9it": 21, "ogs0ra4j4bi8ekusbsoitdekteqmjtrbbeillauhwkisxlrec47c9rxypswbuyj5uus0raq7f7stskuscsfmgckuteqkxz0txyillajfhswhrlrec7vv": 21, "parkfalse622236745742286847aqmaaaabaaaabqaaapwopefyi1lak3g3jypmrecn80o5cytswgoi1": 21, "ckteraimsqlm2lusdbgkpln0xeqopdaktui1la1o4nfajmred1jqxhcotswctxt42kterastaten": 21, "parkfalse622236745762635775aqmaaaabaaaabwaaahylwvvwillahyqunkfkrebbb3ku0ipswfivylwjskraeeohdc2kusdk8vd5ykpeqinpy0tnillaqyynt8tkrecketcj3ipswoq4svbgskra5ziur": 21, "ckusbhdwz9supeqhylwvvwillahyqunkfkrea": 21, "parkfalse622236745730162687aqmaaaabaaaaggaaaiwgz8v9jvla": 21, "8u5iredjvdrpci1swfx6ggttseraeyup4gunusas0gpeaeheqjiooa11jvlaxtnhuxdirearfnixdy1swdytwur3serauryahhanusdfr6baduheqhjmiy12jvlaayixwhnirecymyg": 21, "parkfalse622236745760964607aqmaaaabaaaadwaaaa6xuwjbillastcfrunlreampy6": 21, "wipswipdl99fs0radlntymckusascxwssuteqdbsl": 21, "illa1aozb01lrec": 21, "n2w": 21, "v4pswajlaydrs0rawvrcfb6kusc3": 21, "nzqveteqopfm529illa4amzp1hlreai": 21, "parkfalse622236745681895423aqmaaaabaaaabaaaacctznwfi1lawuebv0pmredpjmbaf4tswcruzgfmterafepu6xqlusbuwqrcyexeqcctznwfi1lawuebv0pmrea": 21, "parkfalse622236745913204735aqmaaaabaaaacwaaabxjzov2jflaijgf": 21, "yhhreby9ydg": 21, "ixswgilbmgxr0rarihviaonusd2ja9zl0deqp5xvegcjvlaoz": 21, "bzi5hrecgiiypay1swjeud90tr0ragzypyqcnuscfkfyiludeqewubtf": 21, "jflariql8cthreceyp": 21, "parkfalse622236745691791359aqmaaaabaaaadaaaacogim3eillakiwyz9fhreab8qri3opswd3ytdxar0raqqf0oowkuscsoq7h5edeqddxjhb0illaxwz": 21, "6n9hrebqm1cj9ypswbckcehzr0rajkrispkkusb": 21, "rkns10deqhvli13villajx6hh9zhrecs1t8": 21, "parkfalse622236745762963455aqmaaaabaaaabaaaanam": 21, "wruillant5z9mzkred0jon204pswbtvnlztskrajzolhtwkusceeuujaepeqnam": 21, "wruillant5z9mzkrea": 21, "parkfalse622236745912647679aqmaaaabaaaabwaaanhuy9lnjflaokyr2t1hrebey4fgzyxswl": 21, "8kpi9r0raxhejemsmuscuk4o2uudeqispaybajflahxjtp1lhrecjve0ny4xswcbsjpbvr0ra40tqsm": 21, "musbwlak4qedeqnhuy9lnjflaokyr2t1hrea": 21, "parkfalse622236745769746431aqmaaaabaaaacaaaac9qk": 21, "sillaylknwtplrebwrgjpg4pswgznolpfs0raarkaw36kusa3qpss9eteqcuqmb9": 21, "illapohmr": 21, "vlredbr8bfhypswevfudv3s0ra56ztm5ikusbvd9ul": 21, "eteqmadpyocillalk": 21, "ko": 21, "plreavuck": 21, "parkfalse622236746169090047aqmaaaabaaaawqaaag9caocojvlaogej74dhreawmn0dgi1swm": 21, "e2eqmr0ra6fcge3unusalamhdoudeqhgzzc": 21, "fjvlanx": 21, "bolfhredg46maiy1swk": 21, "q9o6wr0rarlsimomnusdmdgtwr0deqnw": 21, "eiwjjvlabzaq8k5hrecmlpq": 21, "parkfalse622236746168532991aqmaaaabaaaabwaaanojowfxjvla9xyfovphrebd8nw9x41swgsttkbjr0rago8ff1ynusajlt8rckdeqm57itnmjvlavncgcijhrebmhkqvdy1swagxhq19r0rafsj": 21, "n3qnuscvsri1aedeqnojowfxjvla9xyfovphrea": 21, "parkfalse622236745690677247aqmaaaabaaaabwaaajatnypeillawauygaxjreaeakas3opswjtpo5qssura": 21, "tnd": 21, "kusamhsvpi0leqjfwoh3gillax6cvhi9jredscozv4opswam5twausura4olu4oakusdtgduhguleqjatnypeillawauygaxjrea": 21, "parkfalse622236745679667199aqmaaaabaaaabwaaamoqaqpmjflaadei3uzkrect": 21, "alfvyxswizs2ddlskra44l6o7mmuscol4yxyepeqnmtbzddjflavzywkhbkreci": 21, "em7y4xswp8": 21, "ydrtskrajav3dngmusdk4jpdtkpeqmoqaqpmjflaadei3uzkrea": 21, "parkfalse622236745750839295aqmaaaabaaaabgaaafzyintaillakfo": 21, "nqbnrebb": 21, "k2mtipswmpgzzaeturayb1qwlokusbkysfnee1eqcmfdjhjillatfyqqxvnream6djiyopswnddpbcqturaxngidmckusap8741ae1eqa": 21, "parktrue622236745729376255nullstaten": 21, "parkfalse622236745696903167aqmaaaabaaaabwaaam9qzfefi1la9tcatulirecs3yeigotswict0": 21, "1kseraamvol32luscb4a7wx0heqo0ehouhi1lanrmdtw9ireay4irilotswap217tqseraf8kzszqlusdi": 21, "w3jweheqm9qzfefi1la9tcatulirea": 21, "parkfalse622236745757065215aqmaaaabaaaabqaaab2rt82hillak9g3t5jlreaufz0": 21, "nipswpdvnvccs0raoabjppukusae8x8ynuteqkldkdkfillaykkwzztlreadq0": 21, "noypswcvyn7ess0rastaten": 21, "parkfalse622236745742385151aqmaaaabaaaabaaaaawnahdni1larogff8hmrebnxn8xzitswgynnodjterahftwewolusbfdtuyzkxeqawnahdni1larogff8hmrea": 21, "parkfalse622236745673768959aqmaaaabaaaacaaaai43junqi1laddmyaeblrecqlkb54otswmoecdtds0rauw8o792luscltlgvweteqdyb7upoi1lavdlg9wdlrebl45x39otswd0i0trjs0ratkgm0felusdl": 21, "c7ax0teqoka9": 21, "v6i1lafkz": 21, "mlflrecon44": 21, "parktrue622236745769517055nullstaten": 21, "parkfalse622236745730260991aqmaaaabaaaajgaaahurhvdujvlaxqzx441irebf6nrpyo1swglbwvarseraa9lxrl6nuscgegdppkheqcquxl9mjvlafu6jprnirecqx": 21, "yqzo1swkfprfiysera89hmmmenusdb": 21, "rihskheqmqxl5dnjvlags8jg7jiredfru4": 21, "parkfalse622236745743269887aqmaaaabaaaacaaaaeu7zfdgi1laf8oxc9nmrecsmx53n4tswnddmwzyterabc3c6zklusaeihlh7uxeqnzywua9i1lakkk": 21, "kp1mreb8entiq4tswfa2pbv7tera10bbhu": 21, "lusaow4d76kxeqpwhzaxqi1la2tbavonmrebfo2q": 21, "parkfalse622236745700343807aqmaaaabaaaacaaaaf424j3eillaldwsr4firedzmph": 21, "24pswm2v64": 21, "cseralwjlvnukusd5": 21, "ebkkeheqkkttzrbillaqomuz6hirebjpyg624pswfetvxipserab9flzeskusbwt0dnpkheqp5fsvdoillazgacj5firebenua": 21, "parkfalse622236745678880767aqmaaaabaaaabgaaanjgsz6rjfla33bcpp9krecejwzanixswmgtejmkskra6c9vnpimuscajvatuupeqkaiel2yjflapnjrtrlkredlerxbryxswcmzkoeiskra0kaxnqumusdfdtw": 21, "n0peqa": 21, "parkfalse622236745742712831aqmaaaabaaaacgaaaaz8peogi1laybtvmvxmreb": 21, "btpq94pswa6sgcwbturaatof3vkkusdajjcgfk1eqmd9z6x5illaeuyucsbnrebj5nii": 21, "opswdkghksgtura": 21, "wla5v6kusbkdco": 21, "i01eqctf": 21, "peai1la3": 21, "qpyrnreaarqm": 21, "parkfalse622236745735372799aqmaaaabaaaajaaaamro": 21, "ly3jvlazffo2dzjrebpnkz0m41swosiim7qsura": 21, "d1jyzsnusd6t8l87eleqdocdd40jvlakuiqbuxjreaciaytny1swjk7prlssuramcec9zwnusc0": 21, "ebq60leqg9eigi2jvlaxnhprupjrecxcw": 21, "parkfalse622236745920643071aqmaaaabaaaabgaaangyea6vjflakr28uklhrebpxnqyhixswbuzlavhr0rambue5iemusdtzke4zedeqehcymgwjflaztqkvsdhrea1jodkm4xswmaovewyr0ra2bgqdpwmuscrhbxqqudeqa": 21, "parktrue622236745680879615nullstaten": 21, "parkfalse622236745691332607aqmaaaabaaaacaaaabj93qemi1la": 21, "threaui8fo": 21, "opswmcqtsfvr0ra7q8m3vmkusctnpwfbeheqcat1taei1lak5hyfhriredbrcaoe4tswizzjiypsera1nammbelusawkjeu": 21, "kdeqkcurdapi1latqlotu5hreasfd0": 21, "parktrue622236745733701631nullstaten": 21, "parktrue622236745750937599nullstaten": 21, "parktrue622236745697001471nullstaten": 21, "parkfalse622236745760833535aqmaaaabaaaacaaaakuxe0ruillakn5hncllrec47c9rxypswbuyj5uus0racie2xmgkusc632yxquteqa": 21, "xuwjbillastcfrunlrebel7yzy4pswlznzk9ts0ra7dyye9qkusb2bpdwtkteqpoecz7eillafwynftllrecrsx": 21, "parkfalse622236745735700479aqmaaaabaaaaewaaalqho0m7jvla7nzukydjred5lmdlli1swmhtaywmsurawfpe3cenuscnghn": 21, "oeleqlw8steyjvlawsln3lbjreagbyifpo1sweqxlrussuracuhl": 21, "nusadsk": 21, "oqkleqkg1mtlbjvlawq13qqvjreckwdw": 21, "parkfalse622236745681764351aqmaaaabaaaacaaaaiwmhew8i1la9z0od7blrecoggsgrotswgao7hc1s0rabx5pe6mlusax9f1kykteqpfwidczi1laumbzk9plrebb": 21, "ekiwitswl": 21, "n7gvws0ra89ltesslusbccgbtzkteqjtywtrhi1lauulsv8blrecmj": 21, "parkfalse622236745762832383aqmaaaabaaaacaaaakr61ypcilla6rhjvszkrecjz8tezypswemmdu": 21, "lskran9i95mykusb0iwokzupeqgnglihlillaj5wo2": 21, "nkrecideyn04pswcjc7ajwskrarpln7ogkusatpx8q60peqns9pnfmillax": 21, "ngntzkrecketc": 21, "parkfalse622236746168958975aqmaaaabaaaabgaaam3ma5epjvlabglhpyrhrebvqmjgjo1swdoho": 21, "hr0raaocici": 21, "nusbkw2wtiedeqea8qcgpjvlaasfclidhreceznxxj41swki7gpufr0razcxrl4": 21, "nusagauglhedeqa": 21, "parkfalse622236745690546175aqmaaaabaaaacaaaaa6oj": 21, "9ireafskgy4ypswgcmu8": 21, "0serajlqppn2kusd": 21, "mbeleqjatnypeillawauygaxjrediiw7g5opswo2b24czsuraq6rjvvwkusa": 21, "liqpfeleqpk0nkn6illarj6": 21, "tv9ireaoj": 21, "parkfalse622236745761718271aqmaaaabaaaabwaaacjisl": 21, "killacxxc5hrmrea6izpexypswpebrzswteram5feqc6kusc21skmiexeqfn": 21, "fjillazjhcsztmreblh3ko0ipswlyocae5teratbaitnskusabgnhhjexeqcjisl": 21, "killacxxc5hrmrea": 21, "parkfalse622236745679536127aqmaaaabaaaajqaaampdmqvgjflakzqtcc1kredvlt0s0yxswlixdgmyskraw6pqo8ymusaamsldrkpeqcqfd3trjflai": 21, "i6q05kredmy6rn1ixswh": 21, "qwms7skrasvtipdwmusal1uwkpepeqdncjp7vjflaviqgwjxkrech": 21, "m4": 21, "parktrue622236745736585215nullstaten": 21, "parkfalse622236745729245183aqmaaaabaaaalaaaadlqxnogjvlaz4v57bfirecv9kucfo1swpc4": 21, "auseraulkyenmnuscklsm5kuheqdva5nebjvlaiam1": 21, "zviredhktr5gy1swlvnivo1serajqf22ygnusbbvursneheqklnodycjvla1tjt4tjireaokbi": 21, "parkfalse622236745743368191aqmaaaabaaaabqaaaliuwt8yi1labka7kxrnrecbaptukytswlr2npwwturaqtp19cilusa8paqag01eqp": 21, "oh2qxi1lazxldbhvnrec4lm": 21, "motswgymuysuturastaten": 21, "parkfalse622236745756934143aqmaaaabaaaabwaaabc4zze2illampcougplredaxvqotipswa3ygshus0ralkxe5a6kusafgv4bekteqnhhlx6pillagoa": 21, "xyvlrecyhu09s4pswo3x": 21, "ubs0rabthrylekusdpwlqhbuteqbc4zze2illampcougplrea": 21, "parkfalse622236745696215039aqmaaaabaaaacwaaalxuthv0i1lax6sobddirecpl7jr64tswjzhode7seraviuzm": 21, "oluscvtcm8p0heqczswprji1lat": 21, "jvd9irecwmeqz44tswlks6rw": 21, "sera": 21, "9zrm9ulusdnwtwnq0heqchybz3zi1lavweqxeviredxema": 21, "parkfalse622236745692545023aqmaaaabaaaabaaaacgicrtcilla83wbf0direarg9yo3ipswkopqgtlseraqxo1yn2kusddjpsfseheqcgicrtcilla83wbf0direa": 21, "parkfalse622236745724461055aqmaaaabaaaacgaaajkoondrjvla525jvwtjreb5rtcbr41swebzbw0psuraglzdekonusdlzexmi0leqhzyjmdnjvlayknsxdnjredhuhhot41swgiaqiezsuravbkeolknusdnyivvduleqbezy0dsjvlasnlbeqxjredozyg": 21, "parkfalse622236745695657983aqmaaaabaaaadgaaabfjm7gai1la4vsnyvhireay4irilotswap217tqseraacdug6glusaf2niaekheqggqrvmvi1laxrv4oxvirecq4bjktitswlrtgtbhserav": 21, "ueyrgluscmx90dykheqnwdcpwti1laprtxcgjir": 21, "parkfalse622236745691987967aqmaaaabaaaacaaaakooeokvi1lazfydlqlireacetm": 21, "litswnxvi2waseraqi0oktalusbkq7rlkkheqiwux25fi1laaexkuivirecyp2o7sitswfmvnsswseragwxjvjmlusdyc945d0heqcykw1sxi1la8nyzsgpirecqkhg": 21, "parkfalse622236745680977919aqmaaaabaaaabwaaanow7nqbi1la": 21, "8pp2qhmrea2mdx7jitswaxbfnmnterat6rlciiluscrtuitikxeqcoaeomri1lax5k2qdbmreakmifllitswmzjwlsptera4lhgu6clusd3hrhyeexeqnow7nqbi1la": 21, "8pp2qhmrea": 21, "parkfalse622236745691430911aqmaaaabaaaabqaaakgurdapi1lat6lotu5hredu1qayf4tswdaqn676r0ranvjdkbulusbqenpa": 21, "udeqerpk2eai1laqpoqyfhhrechrkxqd4tswlei6lbur0rastaten": 21, "parkfalse622236745723346943aqmaaaabaaaahaaaagvs10zejvlaobbgz6ziredpry9pt41swnbjgsqrsera0krw4eqnusaex46jweheq": 21, "zetvvjvla1lmhgdbireayjflbx41swfcy5o": 21, "mserae70cjgcnusdujn4azeheqfs6eo1gjvlaym": 21, "decpirea8o1w": 21, "parkfalse622236745921626111aqmaaaabaaaaeqaaaldgykhgjfla": 21, "p5tsv9hreamjv71xixswjoitwsdseralyutavumusdv0oqvbeheqhb": 21, "39fzjflaibzrugrireb0ovmzwixswjm8fgofserarsftklamuscqyvkfbuheqo6vdpjujflay8ax": 21, "arirebh": 21, "parkfalse622236745743138815aqmaaaabaaaabwaaaganb07iillatysf65xmreduu9ynvopswhh": 21, "r0": 21, "gterav4zxc7ukusafujo3wexeqg4obt": 21, "illagz2dn8zmreb3": 21, "vmxzopswjuttkbbteranaj": 21, "otkkusb5yg3mrexeqganb07iillatysf65xmrea": 21, "parktrue622236745760931839nullstaten": 21, "parkfalse622236745678749695aqmaaaabaaaabgaaano04wa": 21, "jflanc5eaovkreajr1eosixswndbdwwkskra0kaxnqumusdfdtw": 21, "n0peqov6tcgtjflakbmqh6jkreatkugmw4xswd9zlb": 21, "lskra2jtjbr": 21, "musa0ll5qhupeqa": 21, "parkfalse622236745920511999aqmaaaabaaaabgaaab": 21, "vn": 21, "mljflahnlvlothredygbaolyxswjedvfcpr0ransahspumusdgql3lskdeqgtsuceqjflawfdv661hrebgsmcwroxswkzykbozr0rah5u36awmusac2w": 21, "wi0deqa": 21, "parkfalse622236745913171967aqmaaaabaaaadwaaaesb1ygdjvla9iwvws9hreby9ydg": 21, "ixswgilbmgxr0razdxvvfemusbi0jegrkdeqnurmrecjvla62ysflzhrectka": 21, "tei1swcgbfynrr0ra4w": 21, "chonusd4clrtrudeqoqrahuojvlabjrjpt9hredv1s8": 21, "parkfalse622236745673965567aqmaaaabaaaabgaaaevjnhf2i1lapslrngnlrea8m": 21, "1d6itswl3zypvns0ravdvzueolusaabv7pfeteqfntpcboi1laeowaninlreah5ikq9ytswj9au7bms0ra": 21, "ocd": 21, "alusa9ite0y0teqa": 21, "parkfalse622236745673408511aqmaaaabaaaacaaaalu": 21, "rp0": 21, "jflafzo": 21, "8dzkrebwidiemixswfla8uvbskrashdnacymuscsmrvu7kpeqd17kom1jfla0yhrc": 21, "dkredahsmnpoxswp": 21, "vxf34skra6nn7k0emusbq4qlw7kpeqpsifvjjjflaabdo0ezkrec7vqw": 21, "parkfalse622236745730457599aqmaaaabaaaafgaaafc5mnp5jvlapc7juslireccnz6dao1swmdz": 21, "rquseraaxk1fganusb": 21, "nq0heqmlunglwjvlavfqaa1nirecgogfffy1swlpup": 21, "foserajls19n2nuscxrrq2tuheqg7v": 21, "1p": 21, "jvlaqgxp70lirebh65u": 21, "parktrue622236745733570559nullstaten": 21, "parkfalse622236745672851455aqmaaaabaaaadwaaakgv1vf": 21, "i1lavcd6": 21, "9kreakb9cy8itswl79760es0ras6x3juulusbgqryhguteqgwbygf0i1lajw8njszlrecdk1bd9itswg9lkhwms0ra": 21, "s3lovilusclnvojjuteqhh2qfb6i1lacqxjvcrlreb4ito": 21, "parktrue622236745679634431nullstaten": 21, "parkfalse622236745729343487aqmaaaabaaaamaaaalzodeebjvlaubxeeczhrect1b9qco1swhiwjxtlr0rakafq4m2nusa83tbn4edeqf": 21, "mqtz4jvlasvizkvbhrec1qgg0go1swd9bjabsr0ra": 21, "if6toknusdrgp2f7edeqfp048mcjvlamdgqxuthreb3w1q": 21, "parkfalse622236745696870399aqmaaaabaaaabgaaaewnn5zfi1lagcxlxitirecztqsexotswgfa4tgwseraueos8wilusc89vaxqeheqhlj38rzi1lar3": 21, "medxirebizez1y4tswfvgypswserary2fl": 21, "luscalgxgk0heqa": 21, "parkfalse622236745742909439aqmaaaabaaaabwaaabpfaxqmi1lakc7h7ibnrearx": 21, "jxaitswn0vkkckturat": 21, "mycwolusdwuvvhjk1eqfn34mwhi1ladi8zcspnredxr4lqc4tswo4hessuturavq": 21, "kdrklusbeojuekk1eqbpfaxqmi1lakc7h7ibnrea": 21, "parkfalse622236745724559359aqmaaaabaaaabwaaalzcud5ijvlaocu": 21, "nuhjrec81p8aoo1swfsl3jhnsuralu60dzwnusaeddvyykleqgz0j8w": 21, "jvlasxiauhjjrecaqmksro1swiyiuzzwsuradedtl0ynusblf5tvtkleqlzcud5ijvlaocu": 21, "nuhjrea": 21, "parkfalse622236745681633279aqmaaaabaaaacaaaahfdku": 21, "qi1la": 21, "6jio5zlrebo0cpwwytswd31hz2bs0rajcaf5bylusd1nsh3seteqjtywtrhi1lauulsv8blrea6o7cgzytswebezga": 21, "s0ratpl": 21, "1dgluscbaa": 21, "vtuteqkntumjzi1la7hzenqrlrebxq5": 21, "parkfalse622236745723445247aqmaaaabaaaaigaaap": 21, "rvqxqjvlap": 21, "2owuviredrtezpqy1swkyfw1xqsera9sf7rj2nusdw": 21, "usu": 21, "0heqhmtmjthjvlarvmhdq9jreczdjp3uy1swodusb8lsuramy3qffgnusc8vxj1c0leqgjchqrqjvlaxaf": 21, "cqtjrebl7aw": 21, "parkfalse622236745698312191aqmaaaabaaaabgaaag08ovjeillaak6whphjreaxiryn3opswhp3p6wzsurasdt4dn6kusctteazt0leqadjdkxgillaksmkw7zjrec98xlq5ipswk4obykhsurabtw6": 21, "n6kusactpagmeleqa": 21, "parkfalse622236746168827903aqmaaaabaaaacwaaaomhv3itjvla": 21, "ai67uvhrectka": 21, "tei1swcgbfynrr0rassciqrunuscoxqvhyudeqfjbcb4qjvlanw47zlxhrebbzzveko1swl8": 21, "jj9br0raeqjajyinusbqpshpwkdeqgmfbbkjjvlamafh2ldhrecvqug": 21, "parkfalse622236745679962111aqmaaaabaaaabaaaafysmkv": 21, "jflajn": 21, "zf9vkred9fqtvdyxswkc1nolxskragomrnxsmusbeg0ro30peqfysmkv": 21, "zf9vkrea": 21, "parktrue622236745761587199nullstaten": 21, "parkfalse622236745743237119aqmaaaabaaaabqaaahwq22jdi1lavry8g": 21, "tmredwwmfapytswjcppyj9teras5qpedulusb8dzo1b01eqihw": 21, "cfai1ladqb41p5mreb8entiq4tswfa2pbv7terastaten": 21, "parkfalse622236745700311039aqmaaaabaaaabwaaag": 21, "x5wxkillavrdhz6zirebjpyg624pswfetvxipseraratuknukusdeqjyavkheqn6wnmrbillaw8aid9birea5n": 21, "0t6opswnkdhr": 21, "lseranhnmuo6kusat0dxgtkheqg": 21, "x5wxkillavrdhz6zirea": 21, "parkfalse622236745678847999aqmaaaabaaaabgaaaij8sbvljfla": 21, "z9h1g1kredzrw2qw4xswfc8lpbwskra2jtjbr": 21, "musa0ll5qhupeqborscbdjflap1mvv4tkreayxwiqx4xswcyt7jshskraipxju8umusd": 21, "p2hubupeqa": 21, "parkfalse622236745921167359aqmaaaabaaaaeaaaakpbmsoxjflavbv0kgpired1": 21, "tsxmixswfhnw8clserapypfvi6musdci142d0heqmwnn": 21, "ksjflaf5uv5rjiredhgj3pkoxswhfztoiwseracuo": 21, "ocimusbpdzyygkheqp3nircmjflaunh29b1irebina": 21, "parkfalse622236745696083967aqmaaaabaaaabwaaamyzxcgejfla7kjzds9irebu3gm3": 21, "itswo2bqiqyserassvnifslusb7p8hon0heqlxuthv0i1lax6sobddirecckx6c9itswbocpqo4serasum3xwomusczjpuqm0heqmyzxcgejfla7kjzds9irea": 21, "parkfalse622236745692413951aqmaaaabaaaacgaaaddklxbmillaku0ucb5irecm7liw3ypswaipmpihserah2": 21, "9ykuscz6njbk0heqouxw87cillapw88ad1ireae2txf3ipswew4r5daserakcjytnykusdzfbsxr0heqemttwddillaw4z7h0hirea0zyc": 21, "parkfalse622236745763586047aqmaaaabaaaabwaaactefjteillaaujovz5krebedqam14pswabcx7naskra1oz9atskusa23np2zkpeqcwajr7villannrlcwhkrecjlfh844pswga6jbfjskraid0tioikusc8dre4tkpeqctefjteillaaujovz5krea": 21, "parkfalse622236745913270271aqmaaaabaaaadgaaadtlw9xijflanh0wdshhrecjpqd54yxswc4eou4or0ralfrr4d": 21, "musamqhyzkudeqejurdhdjflavhj": 21, "diphrealh6tk24xswd4nlc4rr0ra2usdztmmusbzzjv2ledeqj": 21, "qvq7xjflazj": 21, "ivy9hrec48dq": 21, "parkfalse622236745699196927aqmaaaabaaaabqaaalrsgn7billauffbgqjkrecdmfac24pswj6egfyjskra": 21, "hkg4dkpeqmxppffcillaxbuwxqrkrec67bp": 21, "24pswlhx24ecskrastaten": 21, "parkfalse622236745695526911aqmaaaabaaaabqaaairo44zdi1lals7ibftirecngkkbwytswlnudmbcsera5s3pf8glusacxjtwxeheqmdptwddi1laozytz1tireceaoomw4tswc7oyarbserastaten": 21, "parkfalse622236745680846847aqmaaaabaaaabwaaabmxzewvi1lalzqabe9lrecxscbloitswjgtpp": 21, "zs0ra07ds2pulusd7ymnzcexeqojr4lugi1la94a4wbbmreaqznodo4tswninvkcltera": 21, "pizcrglusby1vs98uteqbmxzewvi1lalzqabe9lrea": 21, "parkfalse622236745769811967aqmaaaabaaaabwaaafbvbmorillano0bq": 21, "vlredgnt2dnipswc5pyjvqs0ra56ztm5ikusbvd9ul": 21, "eteqg61cikmillaq0i3mv9lreblqc3nsypswdkctrghterahdext7wkusb9ttek9uteqfbvbmorillano0bq": 21, "vlrea": 21, "parkfalse622236746168598527aqyaaaacaaaaaqmaaaabaaaabaaaamybev82jvlachr5nmthrebkv": 21, "dxni1swjdctknsr0ra1wqiwjonuscpaktsb0deqmybev82jvlachr5nmthreabawaaaaeaaaahaaaajsryluinusdijhvebkdeqprca30xjvlau6dz2nk": 21, "parkfalse622236745750904831aqmaaaabaaaabgaaapbjvknzillaqum": 21, "hgtnream6djiyopswnddpbcqturaiwv0kcmkusc1": 21, "kqrfu1eqpppg": 21, "vqillay0o": 21, "sxdnrebfton844pswgccpf0atura8gnuqdmkuscpqz8ec01eqa": 21, "parkfalse622236746168041471aqmaaaabaaaakqaaalljtlqljvlatwxtdefhrecyy2pnny1swoz08x1fr0ra5neuezynusb6mdtmsudeqex0e7ihjvla5sbidffhredc8i68oy1swc": 21, "lt25rr0raz42b8qgnusbv3b8duudeqblr4s6ijvlavrvn0vbhred9au0": 21, "parkfalse622236745729441791aqmaaaabaaaarqaaambjowcjjvlar6r2jrbhrebxmc3phy1swj8fwacxr0ratk50r4gnusc4hf55xkdeqildmuygjvladwmzl85hrebcxyvmho1swfoq": 21, "gvor0rab4btroanusbkreybzudeqeuj9t2gjvlaxewqk81hrebtw0m": 21, "parkfalse622236745725771775aqmaaaabaaaacgaaafjbcb4qjvlanw47zlxhrebjiihbg41swkhdbwfhr0rafkxhubanuscfcvq5dkdeqgpvzgwhjvlalrxnfozhredeygtpl41swd5xexybr0ra9fxrftgnusbtp1naeudeqgaqxh8qjvla7wfwc31hredvzag": 21, "parkfalse622236745921495039aqmaaaabaaaadgaaaflfhfdzjfla98u": 21, "xerhrebmdkg8a4xswlzo": 21, "yr0rawysfp2imusd": 21, "vnzg9kdeqg5dez5ojflaohzt4fzhreaf": 21, "9y9aixswoi2eul2r0raqa5anwsmusc": 21, "0deqbsynjxkjflaiaxmu": 21, "threabjiw": 21, "parkfalse622236745692741631aqmaaaabaaaabqaaaahypejeillapfk0ndphrede33s73ypswkchslx6r0rahfngruckuscz1964": 21, "udeqekn9djlillakjko4erhreab8qri3opswd3ytdxar0rastaten": 21, "parkfalse622236745681731583aqmaaaabaaaabgaaafxvc7nji1laggvez3xlreav": 21, "yda1itswly4rmmbs0racuort9clusd7okijlkteqkntumjzi1la7hzenqrlrebsuzwm6itswhmmajyds0ravdvzueolusaabv7pfeteqa": 21, "parkfalse622236745673834495aqmaaaabaaaabaaaaoka9": 21, "mlflreboqabr94tswmz8ltpfs0ra7gesw": 21, "ylusaoyqgvu0teqoka9": 21, "mlflrea": 21, "parkfalse622236745673277439aqmaaaabaaaacgaaacvmfwzsjflaqbazhb1krectx7ahq4xswgy8": 21, "bfcskrau76": 21, "t6musavk77x1kpeqpsifvjjjflaabdo0ezkrec00c5ltoxswjbieyflskrapbfl": 21, "u6muschsezv3kpeqerbkezrjflaipvij": 21, "rkrebn51o": 21, "parkfalse622236745672720383aqmaaaabaaaadaaaamb1c2esjflawv4t4ovkrecjzycca4xswl2bnnrqskraozxw9": 21, "6lusbuipqz": 21, "0peqps5jewjjflau7vgkw9lrebzbpq": 21, "doxswjzt5sans0rax10i9rgmusda5h": 21, "hbuteqol6unaujflaw0fzpajlreartko": 21, "parkfalse622236745758015487aqmaaaabaaaabaaaacgkevmmilladpnq": 21, "7jlreb": 21, "jbiopswe9m1co2s0raw": 21, "dbzoykusa0ataftuteqcgkevmmilladpnq": 21, "7jlrea": 21, "parkfalse622236745736552447aqmaaaabaaaaewaaabcg53esjvla7unx0ejkrebiki6ta41swd21cmthskraz": 21, "hdfwonusasgw4eskpeqnhqxdydjvlafwaoe0pkrecpdeszbi1swp": 21, "faj1kskraneitagwnusa42e4ts0peqixzd6ufjvlamzlynutkreb": 21, "wbu": 21, "parkfalse622236745743335423aqmaaaabaaaabaaaabtmgt1vi1laduftzefmred8iwwsuitswnkwqftjtera10bbhu": 21, "lusaow4d76kxeqbtmgt1vi1laduftzefmrea": 21, "parkfalse622236745742778367aqmaaaabaaaabwaaamjq938fi1lavs71ggdnrednlyqfeitswhevohqmturagkudfaylusapzsfuie1eqfup5a0si1larki1hipnrecq0": 21, "x0kitswd2kbaabturamwd01cmlusc0djt8fk1eqmjq938fi1lavs71ggdnrea": 21, "parkfalse622236745682059263aqmaaaabaaaacaaaaeolgqv1i1lagfkcgtxmreb": 21, "wkilzotswfeopxpbterah": 21, "wmmmglusdtlezuvkxeqjqoau9ri1labcuunwzmreaxvfyqeotswih9r0hhterafepu6xqlusbtwqrcyexeqomoyfp": 21, "i1lajg7myuxmrebkc4": 21, "parkfalse622236745692512255aqmaaaabaaaabwaaaalwkmvcillaqbnyemjireb2vj853ipswnmdr": 21, "50serawhcvadykusbcn9qygkheqpoy8f7billaza": 21, "rj4jirebenucd3opswcw1kq": 21, "bseradjmqkookusaqlhvxbeheqalwkmvcillaqbnyemjirea": 21, "parkfalse622236745724428287aqmaaaabaaaabgaaamzsge5pjvlaajpcitnjreb82cznty1swmijbmqzsuravnxr3kinuscgk7": 21, "dseleqaxhbzdmjvlazrebvu5jrecrqautty1swhvm1khlsuraxliytk": 21, "nusbomkihm0leqa": 21, "parktrue622236745742221311nullstaten": 21, "parkfalse622236745699295231aqmaaaabaaaacqaaaageyg3millah7x6e9tjreaza": 21, "h3ipswbchzi3esurauf": 21, "rg9ykusbgxmgc6kleqpc6uo3billafz1k": 21, "ljrec67bp": 21, "24pswlhx24ecskraze8999ykusbcg7dfbepeqjjnynxrillakanxzp9jrecwdd": 21, "parkfalse622236745680945151aqmaaaabaaaabqaaafz96slai1lav6fuc9zlred31ihqs4tswljawsvas0raezfkra": 21, "luscxooaf70teqpqsmwqxi1lac9vuvfflrebc": 21, "n7gvws0rastaten": 21, "parkfalse622236745691398143aqmaaaabaaaacaaaadbyxzabi1lauhp6wvlhredu1qayf4tswdaqn676r0rawuqgdholuscgcysgd0heqhg05wadi1laajhazr9ireacetm": 21, "litswnxvi2waseraqih46": 21, "lusbl9govcuheqilyqgami1lakgwjowjirea28l0": 21, "parkfalse622236745723314175aqmaaaabaaaakwaaadkn8ttfjvlaujjk78xirebps3k1vy1swnzzh4hqsera": 21, "6u": 21, "rfcnuscn7aha5uheqkqupw5zjvlaaqp9zfjireadsel8wy1swfhp2pzyseralok": 21, "alqnusc": 21, "mdhb8uheqosjz41ajvlardxztpbirebnqo": 21, "parkfalse622236745698181119aqmaaaabaaaabwaaaewabobtillafhgz0xdjredpsslq34pswh2v0iz8surabtw6": 21, "n6kusadtpagmeleql3zetdkillarg5tgqfjreapxl6u84pswharsimcsurahv9mofikusdgnp": 21, "wh0leqewabobtillafhgz0xdjrea": 21, "parkfalse622236745762013183aqmaaaabaaaacaaaakldkdkfillaykkwzztlrecgaemmm4pswb7xfzkds0raiar6": 21, "yykusb2k1d": 21, "skteqfvg22amillanalwn7vlredt9tu6lopswgiz7ydfs0rauaspmqwkusczueiiweteqgu3kyaqilla9novrqtlrecpqyk": 21, "parkfalse622236745679831039aqmaaaabaaaabqaaaonpvtayjflamivqe7lkrebaf51xiyxswe3": 21, "3a2": 21, "skraf3rcj4amusdrnuqyzepeqkaiel2yjflapnjrtrlkredpz1u2mixswjolubo5skrastaten": 21, "parkfalse622236745729540095aqmaaaabaaaakqaaalwoybscjvlap1unpuxhrebfzkk2ei1swer4syrwr0ranzq4rnonuscw1mwdbuheqk": 21, "0pqj": 21, "jvla9zj74brireay0mttho1swm": 21, "feewrseraqdp8z4anusckdkn": 21, "d0heqno6osagjvla": 21, "gfrsq9ireckmx8": 21, "parkfalse622236745736323071aqmaaaabaaaafwaaaigoyrjgjvlahghtnnbjrebs9i": 21, "mp41swesygfbysurataejqzunusdufo4ph0leqfwy2k1ajvlax3l": 21, "eo9jredjj6yvqi1swediws2psurakcqp": 21, "ecnusczuhejjeleqdpt429bjvla": 21, "8avvitjrecuucm": 21, "parkfalse622236745921593343aqmaaaabaaaabgaaae9c1dkejflafrksc8dhrebzx4rxc4xswpflv8xkr0raszjxfnsmusbazmek5kdeqgdnr1udjflafsgbkofhrecyg4tkh4xswo3or7jmr0rat1zumosmusavgswlx0deqa": 21, "parkfalse622236746167582719aqmaaaabaaaabgaaae02j9mmjvlajh4gnu1hredtitlhcy1swpv8hafar0rafsj": 21, "n3qnuscvsri1aedeqhg6dbsjjvlamjzlownhrecjlbocjy1swbizewfor0rattyn2yynuscmfia1tudeqa": 21, "parkfalse622236745725313023aqmaaaabaaaacaaaakmcack3jflajqi4ym9hredemav": 21, "s4xswcv2lqvwr0raoggkckemusaoi2mciudeqb": 21, "mljflahnlvlothrebgsmcwroxswkzykbozr0rahuowjb2musdcsskyledeqfpaebbcjflabk2jqh9hrecpgmk": 21, "parkfalse622236745921036287aqmaaaabaaaadaaaacj9d6zejflaszncgqbirecd6uhiqixswkd1": 21, "6iaserasp9vkt2musbo2du7auheqn7n6oi5jfla86gvrgjirealtghqnoxswc": 21, "sruudsera6ds0bzsmusckpnqmbkheqnfvtsqyjflasmvosghirecqqzk": 21, "parkfalse622236745681829887aqmaaaabaaaabaaaadqjtwbni1laqf7mzr5lrecu2fk6x4tswffjbffas0ra89ltesslusbccgbtzkteqdqjtwbni1laqf7mzr5lrea": 21, "parktrue622236745673932799nullstaten": 21, "parkfalse622236745698508799aqmaaaabaaaacaaaaowkhlxiillaazlnyc5jrecy1qid4ipswmenlx4vsuraojq9vuckuscemtlnneleqcgxdlvgillayttvoevjrebrtn3l4ipswjm6vytvsurasv67heikusahj6myu0leqdsjpqjsillaw1ocqd5jredscoi": 21, "parkfalse622236746168467455aqmaaaabaaaabqaaaf3ydb1fjvlaay1oqgnhreamxfgtsi1swommg8rur0rauiiaok2nusanyz8md0deqbjvbx9cjvlaiy0": 21, "k3jhrebd8nw9x41swgsttkbjr0rastaten": 21, "parkfalse622236745672818687aqmaaaabaaaacaaaapvmf8oljflazv5vdmxkrea31z": 21, "rfoxswigabgbrskraxvulyrkmusdbxi3g5upeqflyw7ucjflaadrhv": 21, "vkrearqqmij4xswfxvabjyskrashdnacymuscsmrvu7kpeqhah0h4wjflawvry69tkred7zbc": 21, "parkfalse622236745758113791aqmaaaabaaaadqaaap": 21, "cb7v5illazduvknblr": 21, "7j2eipswijmzmfts0racqse0xikusdcdj9q1eteqje1r9x3illa4ceu4nllred8yekvd4pswjt2bnpfs0rabf7jzxakusamlesw5uteqf9qvlz2illa0rtovoplrebjd6i": 21, "parkfalse622236745679601663aqmaaaabaaaaiqaaaczmfz75jflaccgj7ddkrecfeilg6oxswc5oh": 21, "c8skra6ttabommusc": 21, "y8lfqupeqevvcqtpjfla1": 21, "1jr0fkred": 21, "dh1k6oxswe5d04zbskraruzc": 21, "oqmusafzjgpqkpeqagr94vrjflapwfgu0jkrecaqlu": 21, "parkfalse622236745696837631aqmaaaabaaaacaaaahpj38rzi1lar3": 21, "medxirebr46zxaitswlz28bdaserafuxfz2slusbwvr7wveheqkgzflpui1laclk5z2rireboi": 21, "ixfytswihgdtzfserarn8hiokluschldp9skheqivvort9i1laujwxq0nireb6y98": 21, "parkfalse622236745742876671aqmaaaabaaaacaaaalvpaxxtillae1pasvfmredzhwm13opsway7zkp2tera8gnuqdmkuscpqz8ec01eqf": 21, "2ifzjillayjw9": 21, "rpnreclgcsc5ipswafxvf4aturaatof3vkkusdajjcgfk1eqh9tomr3illadqwylafnrec1aw": 21, "parkfalse622236745735536639aqmaaaabaaaacqaaafverkgtjvla": 21, "gjxtsvjreaqrqbkho1swbhkf7hksurapuklqrqnusb0ubcl30leqeqvipykjvlamr": 21, "hae9jrebpnkz0m41swosiim7qsuraxgj8tjenusbl9": 21, "jz1kleqbupnlw3jvlalaqsz9vjreb": 21, "parkfalse622236745763782655aqmaaaabaaaabqaaagnglihlillaj5wo2": 21, "nkredbzi5tyipswg9it": 21, "ogs0rau1bxgc6kuscuvuzibeteqkimrg3tillaknzscpbkrebjyjyhy4pswi": 21, "vjtvjskrastaten": 21, "parkfalse622236745742319615aqmaaaabaaaacaaaai8a3mjzi1lazmc": 21, "n7lmreb5rknisotswmfauji": 21, "terarttkv0alusaxyjfz00xeqpwhzaxqi1la2tbavonmreauzbk9vytswhbhbc3hterahftwewolusbedtuyzkxeqe1c3xdki1lazg02gmlmrecpgtw": 21, "parkfalse622236745699393535aqmaaaabaaaabgaaabzxx": 21, "bzillaxj": 21, "c5btkredy2mhi2ipswgk2gsgpskraxnuajtekusagwsezqepeqctefjteillaaujovz5kred0gz": 21, "4opswaiy0h4pskraflfh5tmkusbcn8lkg0peqa": 21, "parkfalse622236745695723519aqmaaaabaaaacwaaamdptwddi1laozytz1tiredllc9": 21, "wytswalem3bcsera8v9t4lyluscxzjywx0heqlhp40u5i1la8j8uq2bireadbyswtytswiheuqdhserakoassrslusc60xrqyuheqggqrvmvi1laxrv4oxvirebplqi": 21, "parkfalse622236745770565631aqmaaaabaaaabgaa": 21, "m8qu7illabvi6n8bmred3i": 21, "bmuopswkqq99": 21, "hteraau9xw7ikusdru7c": 21, "3exeqayorku6illa97vqedtmrebudgu3v4pswigdnz": 21, "gterav4zxc7ukusafujo3wexeqa": 21, "parkfalse622236745692053503aqmaaaabaaaacaaaali": 21, "y7tii1lauxwdkxzirecmff9urytswabfylilserabr1rwu": 21, "lusari": 21, "yxnuheqjlopj5ei1layudhodbirebfjz": 21, "wx4tswiaszcyrseratcslel2lusdt3mqjkuheqf2yfk9ni1labw26shhirecyp2m": 21, "parktrue622236745691496447nullstaten": 21, "parkfalse622236745762668543aqmaaaabaaaadqaaamnmvqdsillagrrmc4bkrebm92bw0opswnjwgbgcskrapebssdkkusaxba": 21, "mhepeqabizi3sillapll8wyzkrecduvzl0ypswmtz76elskra5lxjsngkusaq": 21, "jmpjupeqazii43rillal38yf49kreamvom": 21, "parkfalse622236745698279423aqmaaaabaaaacaaaaadjdkxgillaksmkw7zjrebj23gm3opswjnmqbm3suraklotrd2kusbyv2fx0eleqhze3n7cilla": 21, "zyqa9pjreaza": 21, "h3ipswbchzi3esuraayrideakuschtfot20leqgegazjqilla2usto8zjreahyw4": 21, "parkfalse622236745769451519aqmaaaabaaaabqaaaoatahxeillazkleul9mrecihmijwopswi4iefl4terankmchckkusdqhaoveexeqnm7qxhhillavesovwnmredmk2h1xipswmyi3ljfterastaten": 21, "parkfalse622236745736421375aqmaaaabaaaakgaaapynytkljvlaomgf": 21, "yhkred1srz7fo1swk7tr": 21, "ytskraeibncrknusdu43hqqkpeqmjl": 21, "ugvjvlawxmyludkrebindmnf41swdo4wargskraaf87khenusbzhj6irkpeqkrtdvsxjvlakmamhkzkrebyxj4": 21, "parktrue622236745921691647nullstaten": 21, "parkfalse622236745681928191aqmaaaabaaaacqaaa": 21, "ks3cii1lakbvirsjmrecxiocqeytswddi4qynterasgubbxwluscb": 21, "rybpexeqomoyfp": 21, "i1lajg7myuxmreagk2z1hytswmlhavdkteraeo": 21, "1m4qlusborzhbqexeqbokhxcri1la14": 21, "f3tbmreaqaho": 21, "parktrue622236745696051199nullstaten": 21, "parkfalse622236745692381183aqmaaaabaaaacaaaadrnjz7sillalshqj0nirebde7vg3ypswmom": 21, "x9iserakxvcqnykusclj6hrs0heqalwkmvcillaqlnyemjireb0maoo44pswcque9dsseraeyozbvkkusbhaodez0heqjgg55d2illar4fqblnirea0zyc": 21, "parkfalse622236745763553279aqmaaaabaaaacqaaaikt8fzjillaydokewnkrealmiue1ypswj565qloskra9y6j9tokusas1tzwbupeqoeghijtillax5tjnhhkredjzl6g0opswik0zguaskraydgt5tqkusdclgxdjepeqfsmdcxpilla34yayodkrecnyzo": 21, "parkfalse622236746169122815aqmaaaabaaaahwaaahg6dbsjjvlamjzlownhreawyp83eo1swjvjejvor0ratisqr3wnusaif4unfudeqdcy3qoajvlaz4tz6oxhrebvqmjgjo1swdoho": 21, "hr0razcxrl4": 21, "nusagauglhedeqkucd7": 21, "pjvla2zrwoinhrealqhi": 21, "parkfalse622236745680257023aqmaaaabaaaacaaaamv1saj": 21, "jflacpoklq5krebk4": 21, "ojcixswbpc": 21, "cizskrah7mammumusd": 21, "kcocyepeqp19bo91jflaolu04tdkrebbrdjffoxswi5": 21, "sxfvskraf3rcj4amusdrnuqyzepeqfoxnvejjflatf": 21, "cdb5kredl9ba": 21, "parkfalse622236745672916991aqmaaaabaaaacaaaahnumr8ojflano3mwa1lred7oyxmcyxswlu7xpmps0raaica9gamusafuptqgkteqdmf8sqhjflaj": 21, "eezrllrecggi": 21, "ocyxswppcvqaxs0ratqafdgumusaxyef1feteqncrki0njflaogqixxflrebzbpo": 21, "parkfalse622236745690710015aqmaaaabaaaabqaaacb5oglcillaurrxke1iredfa6iq3ypswahivil9serajlqppn2kusd": 21, "mbeleqawysbjhillazwy7z": 21, "riream": 21, "thi3ipswfeuv5htserastaten": 21, "parkfalse622236745761882111aqmaaaabaaaacgaaalidtt2zilla7ddl": 21, "4flredrx5ceqypswbqapl2fs0ralwjc5qikusdu7qnlhuteqccu9q2iillatvg": 21, "m5flreadq0": 21, "noypswcvyn7ess0raqump0p": 21, "kusbiqpbnm0teqgu3kyaqilla9novrqtlrecilss": 21, "parkfalse622236745750872063aqmaaaabaaaabgaaaayorku6illa97vqedtmrebq73fbuipswotttz": 21, "cteraqv5njlskusdkygcwbe1eqfzyintaillakfo": 21, "nqbnrebr5ex": 21, "xipswatdxfvrterabg5eq7qkusd3u": 21, "p520xeqa": 21, "brooklyn133133kensingtontrue622236751937470463nullbrooklyn133133kensingtontrue622236751857385471nullbrooklyn133133kensingtontrue622236751873212415nullbrooklyn133133kensingtontrue622236751936913407nullbrooklyn133133kensingtontrue622236751933079551nullbrooklyn133133kensingtontrue622236751873376255nullbrooklyn133133kensingtontrue622236751937077247nullbrooklyn133133kensingtontrue622236751872098303nullbrooklyn133133kensingtontrue622236751872819199nullbrooklyn133133kensingtontrue622236751937241087nullbrooklyn133133kensingtontrue622236751936684031nullbrooklyn133133kensingtontrue622236751871705087nullbrooklyn133133kensingtontrue622236751938125823nullbrooklyn133133kensingtontrue622236751873146879nullbrooklyn133133kensingtontrue622236751937568767nullbrooklyn133133kensingtontrue622236751872589823nullbrooklyn133133kensingtontrue622236751933014015nullbrooklyn133133kensingtontrue622236751873310719nullbrooklyn133133kensingtontrue622236751937011711nullbrooklyn133133kensingtontrue622236751872032767nullbrooklyn133133kensingtontrue622236751872753663nullbrooklyn133133kensingtontrue622236751933177855nullbrooklyn133133kensingtontrue622236751937175551nullbrooklyn133133kensingtontrue622236751933341695nullbrooklyn133133kensingtontrue622236751871639551nullbrooklyn133133kensingtontrue622236751937339391nullbrooklyn133133kensingtontrue622236751938060287nullbrooklyn133133kensingtontrue622236751873081343nullbrooklyn133133kensingtontrue622236751871803391nullbrooklyn133133kensingtontrue622236751873245183nullbrooklyn133133kensingtontrue622236751936946175nullbrooklyn133133kensingtontrue622236751871967231nullbrooklyn133133kensingtontrue622236751872688127nullbrooklyn133133kensingtontrue622236751873409023nullbrooklyn133133kensingtontrue622236751937110015nullbrooklyn133133kensingtontrue622236751872851967nullbrooklyn133133kensingtontrue622236751937273855nullbrooklyn133133kensingtontrue622236751872294911nullbrooklyn133133kensingtontrue622236751937994751nullbrooklyn133133kensingtontrue622236751873015807nullbrooklyn133133kensingtontrue622236751936716799nullbrooklyn133133kensingtontrue622236751937437695nullbrooklyn133133kensingtontrue622236751871901695nullbrooklyn133133kensingtontrue622236751937601535nullbrooklyn133133kensingtontrue622236751933046783nullbrooklyn133133kensingtontrue622236751938322431nullbrooklyn133133kensingtontrue622236751873343487nullbrooklyn133133kensingtontrue622236751937044479nullbrooklyn133133kensingtontrue622236751872786431nullbrooklyn133133kensingtontrue622236751937208319nullbrooklyn133133kensingtontrue622236751871672319nullbrooklyn133133kensingtontrue622236751937372159nullbrooklyn133133kensingtontrue622236751936815103nullbrooklyn133133kensingtontrue622236751871836159nullbrooklyn133133kensingtontrue622236751872557055nullbrooklyn133133kensingtontrue622236751932981247nullbrooklyn133133kensingtontrue622236751938256895nullbrooklyn133133kensingtontrue622236751873277951nullbrooklyn133133kensingtontrue622236751936978943nullbrooklyn133133kensingtontrue622236751872720895nullbrooklyn133133kensingtontrue622236751872884735nullbrooklyn133133kensingtontrue622236751933308927nullbrooklyn133133kensingtontrue622236751937306623nullbrooklyn133133kensingtontrue622236751857221631nullbrooklyn133133kensingtontrue622236751873048575nullbrooklyn133133kensingtontrue622236751936749567nullbrooklyn133133kensingtontrue622236751871770623nullbrooklyn133133kensingtonfalse622236751617425407aqmaaaabaaaabwaaafuk1ft4fvlaamhh5nxrrecvvydy9h1swd3fi8d9uuradxbsx": 21, "d9usbojuzxklfeqaulzkp5fvlaun": 21, "aabrrectvndq": 21, "h1swnatcqcfuurab3jf6ab": 21, "usbq1q8nilfeqfuk1ft4fvlaamhh5nxrrea": 21, "brooklyn133133kensingtonfalse622236751877046271aqmaaaabaaaabwaaaegj2xvofllaoddu7bdsrecdgrjf4h5swcrldpadukraystmy9l": 21, "usbwjft5i1jeqo2jvnjtflla02sqbchsredwwrny1x5swgvruqsrukrahanr2or": 21, "usbt5ja": 21, "jljeqegj2xvofllaoddu7bdsrea": 21, "brooklyn133133kensingtonfalse622236751872458751aqmaaaabaaaabwaaanegxkx6fllaqcx68e1qreaznlrudx5swexm0yvvueras7lwpxf": 21, "usccdwrkbffeqcyjm4t7fllatkyktxrrrea4ygm": 21, "fn5swlnpy2otuurahy2b4n1": 21, "usa3gtsed1feqnegxkx6fllaqcx68e1qrea": 21, "brooklyn133133kensingtontrue622236751871999999nullbrooklyn133133kensingtonfalse622236751933276159aqmaaaabaaaabgaaajnwd1d8fvla0c0jaj9rreafc85d": 21, "x1swljf": 21, "wgguuraky60m": 21, "59usdj767lxffeqa27wgycfllahn": 21, "oxmnrreddciuebn5swayaouyuuurak1z3upx9usdqlqkan1feqa": 21, "brooklyn133133kensingtonfalse622236751876882431aqmaaaabaaaacaaaaayzegdpfllayhwa8bzsrebbo9sb6h5swkhxvowxukrahanr2or": 21, "jljeqfbi": 21, "ybvfllalunhqjzsrec0zlmm": 21, "n5swfigir0xukraliz1i": 21, "usafvwh9l1jeqlrsbafufllaqii0": 21, "rtsreams3g": 21, "brooklyn133133kensingtonfalse622236751938158591aqmaaaabaaaabgaaapoiyf1qfllabyz": 21, "nzfsrecujfqxqn5swdeve4qwukra3uhx7d5": 21, "usbjmlvqpfjeqnvh5kphfllaoys4i55sredgvfj3un5swhegoquuukra86jh": 21, "vb": 21, "usahjn6dkvjeqa": 21, "brooklyn133133kensingtonfalse622236751875506175aqmaaaabaaaacaaaah": 21, "ec4drfllaf7q8on9qreb2wvsuyh5swigh": 21, "jxjuerakikr8vt": 21, "usdtgiwu51beqagouapyfllafdblzplqrebvq2ryyn5swkmgklajuuras7lwpxf": 21, "usccdwrkbffeqbmcutr1fllarebri": 21, "9qreb": 21, "3g": 21, "brooklyn133133kensingtonfalse622236751936782335aqmaaaabaaaacqaaaczuak99fllaj2tl14jsredp": 21, "mvjbn5swo5dj8shukrabjhmmwp": 21, "uscstsqdnfjeqbh63i9ufllax9e8ykjsreae7b91dx5swnft2jghukraa4jwq4r": 21, "usbx1bnynvjeqml7w5iffllaocl0pj1sreb7rdw": 21, "brooklyn133133kensingtonfalse622236751857319935aqmaaaabaaaabgaaaiijiicff1la7": 21, "imfdsredton": 21, "4hh9swi1hwobhukraioc1ryd": 21, "usdinhzscvjeqhruuouxf1la1": 21, "bvcg5srebqbveyjn9swm4": 21, "8qfgukragimijx9": 21, "usdv74iyv1jeqa": 21, "brooklyn133133kensingtonfalse622236751933112319aqmaaaabaaaacaaaanq8ccgtfllayqzkezjsrecf3ugpdn5swdhjfpgzukradwxdvg9": 21, "usbaq8o4ofjeqhrwdzcsflla1fkx0u5srebdn7n3e35swb2ygndyukraugwc3hh": 21, "usbxi2zyvljeqiwkdxydflla4asp": 21, "0fsredavha": 21, "brooklyn133133kensingtonfalse622236751937535999aqmaaaabaaaabwaaagxd31o5fllaxhigjftrreb2j2sht35swftbm": 21, "j7uurajsumclj": 21, "usc2pqfbefjeqfd": 21, "jl68fllanhlrrcbsrebwl37cvh5swmo9bkmgukratyf": 21, "ibl": 21, "usagpxm0": 21, "vfeqgxd31o5fllaxhigjftrrea": 21, "brooklyn133133kensingtontrue622236751877013503nullbrooklyn133133kensingtonfalse622236751938289663aqmaaaabaaaabwaaah87dgtpflla3aflmshsrec9afoewh5swg2": 21, "aifnukraaufvpb1": 21, "usatcp2z2ljeqhjvohfofllabw1c2dzsredbgg": 21, "m1x5swlyebhxvukraibumsnz": 21, "usagq1l01fjeqh87dgtpflla3aflmshsrea": 21, "brooklyn133133kensingtonfalse622236751858368511aqmaaaabaaaabgaaagcgxjmpf1laayt6c6bsredi4m5nah9swb2ovfmkukracztnw": 21, "usbh": 21, "v3mtljeqmbbkouof1la6eexhqhsrebc": 21, "tc8en9swbue4iclukrayibgmw9": 21, "usadjpolofjeqa": 21, "brooklyn133133kensingtonfalse622236751872425983aqmaaaabaaaacaaaadhgyz9": 21, "fllas2nlahnrreasozole35swlsspe8uuurat47n83z": 21, "usdh3usnkvfeqo": 21, "jvkgbfllaneaxezlrrebzq4fsgx5swp17uem4uuraxlghnof": 21, "usdfpimbmlfeqn9": 21, "qs5": 21, "fllasfwlwcnrrea4ygm": 21, "brooklyn133133kensingtonfalse622236751933243391aqmaaaabaaaacqaaaa27wgycfllahn": 21, "oxmnrrectlrsb": 21, "n1swmnvruxeuurahmxui": 21, "99uscnhwvcy1feqcnt7qsafllafwfvi9nrreact22yan5swgnkb5djuuracqfuown": 21, "usc3": 21, "dj6vfeqaoyulwhfllagarpiehrreddmyi": 21, "brooklyn133133kensingtonfalse622236751877308415aqmaaaabaaaabwaaana9hiyyfllakss9mrbrredto16zq35swkgyjv": 21, "yuurahj0daqd": 21, "usc": 21, "hs83x1feqmcbxfcxfllawigci9drrecmc4qvtx5swbzsjlhvuuradjleb7n": 21, "usdj0u02uvfeqna9hiyyfllakss9mrbrrea": 21, "brooklyn133133kensingtonfalse622236751857287167aqmaaaabaaaacaaaahruuouxf1la1": 21, "bvcg5sreaiglvhj39swmiefmxxukraebm7scj": 21, "uscfj05fhljeqm4fhrqqf1law2pippjsreaoylmgp39swi": 21, "dazacukram3zi0j9": 21, "usdikdvuf1jeqlplttazf1la50prfxbsreb61fi": 21, "brooklyn133133kensingtonfalse622236751931244543aqmaaaabaaaabqaaadyy5w4yflla": 21, "he0c69srebfdwmzln5swm6tku": 21, "wukraitiofs5": 21, "usa1gjklsljeqi2xqw0xfllahlaukrbsrea2govumn5swpornauvukrabrooklyn133133kensingtontrue622236751937961983nullbrooklyn133133kensingtonfalse622236751937503231aqmaaaabaaaacgaaahcxfty8fllaw70eoybsrebq": 21, "4y": 21, "vh5swdry66wgukrag2nfj7h": 21, "uscdxtsfnvjeqkdrwhxcfllamjpdcuvsrecsl4vb0x5swei9syraukra1lq58tv": 21, "usblubqrk1jeqo2jvnjtflla02sqbchsred7twa": 21, "brooklyn133133kensingtonfalse622236751875309567aqmaaaabaaaabqaaai": 21, "jx15tfllatvntqtdqred0zje1ax5swf5t4ivbueradsl0rmb": 21, "uscbofo141beqh": 21, "ec4drfllaf7q8on9qrecpycdebx5swlvtbulxuerabrooklyn133133kensingtonfalse622236751857876991aqmaaaabaaaabaaaajt2yti": 21, "f1la4phvbn9sreanylmgp39swjddazacukraufhmh0f": 21, "uscng": 21, "8dgvjeqjt2yti": 21, "f1la4phvbn9srea": 21, "brooklyn133133kensingtonfalse622236751857418239aqmaaaabaaaabgaaabazu7aif1lahy9oryzsrecm": 21, "nbke39swfmquzklukrayibgmw9": 21, "usadjpolofjeqfz5mlwsf1lagotggkvsredobya0kn9swmnqskasukraebm7scj": 21, "uscfj05fhljeqa": 21, "brooklyn133133kensingtonfalse622236751934128127aqmaaaabaaaabwaaafifnn4yfllavyns2fzsrebdn7n3e35swb2ygndyukradq4u8bv": 21, "usav3obdzljeqc": 21, "lyeizfllan0xix31srecdr9muhn5swkwrrp17ukralzq0lcn": 21, "usdhi9bezljeqfifnn4yfllavyns2fzsrea": 21, "brooklyn133133kensingtonfalse622236751871934463aqmaaaabaaaacwaaadnjljfhflla9zpi": 21, "tqred5hwuiqn5swlu1s73": 21, "uerak673ezx": 21, "uscj8yhibvfeqgxub1k6flla491zgqdrreboslpkn35swml0nc0juurayll4rtn": 21, "usbqsqivdvfeqppox70wflla7g05exbrrebxmx0": 21, "brooklyn133133kensingtonfalse622236751877275647aqmaaaabaaaacqaaaitziq": 21, "1fllaflkmsdvrredhg1xqsx5swfibncpxuurazomyuax": 21, "uscpxvv861feqhapawe3fllavmez6ptrreblw99tux5swmyyocx7uura45": 21, "9brh": 21, "usarw": 21, "hc8lfeqpndute2fllasqczpufrrebtxsu": 21, "brooklyn133133kensingtonfalse622236751938093055aqmaaaabaaaacqaaac": 21, "qemk3flla3xgqnyzsrec3cgbjkh5swdjki4qlukracyqosyr": 21, "usbmcrbjofjeqev1azkufllazq2rt7bsrea2govumn5swpornauvukravsqkpzz": 21, "usduy92dq1jeqn7ocew": 21, "fllayzc76qrsrecujfq": 21, "brooklyn133133kensingtontrue622236751937634303nullbrooklyn133133kensingtonfalse622236751875440639aqmaaaabaaaabwaaajiikffbflla7bolrudqredodgm9w35swes4c1joueraz": 21, "nu8eh": 21, "usbaybih": 21, "vbeqdnjljfhflla9ppi": 21, "tqrec0da4lsx5swf56wfh": 21, "ueraca64clh": 21, "usb8nuvk": 21, "vbeqjiikffbflla7bolrudqrea": 21, "brooklyn133133kensingtonfalse622236751857254399aqmaaaabaaaacaaaaopvgj0mf1laiyi1yebsrebjx15bch9swcxi4khbukracrdsxan": 21, "usbhsvsbvljeqljgermof1lau8g9bwzsredton": 21, "4hh9swi1hwobhukragimijx9": 21, "usdv74iyv1jeqbohz": 21, "0yf1lalnl4cvbsredj7xo": 21, "brooklyn133133kensingtonfalse622236751938387967aqmaaaabaaaabgaaamin7pqcflladdqknljsredu5sdwln5swazhw660ukrauy2l6pl": 21, "usaeur0o2ljeqlebelkifllaqip2yddsredizizppn5swkayqyjcukrawg3umpx": 21, "usb11aqcsljeqa": 21, "brooklyn133133kensingtonfalse622236751872983039aqmaaaabaaaabgaaagxjw5qdfllay2ycskzrreajhtuffx5swnam5yzjuurajly2lxh": 21, "usddcrsab1feqnj2xuojflla0gdedmtrrecd": 21, "mfij35swcuxkp5wuurabgpdlb1": 21, "usdlbjyyrlfeqa": 21, "brooklyn133133kensingtonfalse622236751872065535aqmaaaabaaaabwaaappox70wflla7g05exbrrecttlztin5swpmvk7gduuralibbvrp": 21, "usahwls8jvfeqjy3yywifllakytl2jfrrec70jmrmx5swlatfe4suuraczsdqtv": 21, "usatwuqvgffeqppox70wflla7g05exbrrea": 21, "brooklyn133133kensingtonfalse622236751876947967aqmaaaabaaaacaaaacygdyv": 21, "fllah71ofs9srec0zlmm": 21, "n5swfigir0xukrascdewwh": 21, "usassocoqvjeqopvgj0mf1laiyi1yebsreaskbjmc39swl1netu": 21, "ukrab6ucegn": 21, "usbmui": 21, "knvjeqbeaunh": 21, "flla6ayz0y9sreashnu": 21, "brooklyn133133kensingtonfalse622236751938224127aqmaaaabaaaacqaaak9apc": 21, "1fllapti": 21, "m71sredizizppn5swkayqyjcukrasrssuqj": 21, "uscqknzh11jeqhgzhyanfllai": 21, "mza99srebyyxbfqx5swpfanuzeukragdicf71": 21, "usdgpcsi2ljeqafbbz29fllaewqdmdpsrec9afo": 21, "brooklyn133133kensingtonfalse622236751936847871aqmaaaabaaaacaaaajj82": 21, "owflla4o2": 21, "1o1sreb7rdz9h35swjl9nmosukrawvtbmiv": 21, "usa4ivsknvjeqptplditfllaijoikjpsredu5sdwln5swazhw660ukrawg3umpx": 21, "usb11aqcsljeqk4kzjkhfllaumnqwp1sreci": 21, "brooklyn133133kensingtonfalse622236751858302975aqmaaaabaaaacaaaaemo": 21, "v71fllafrjpdzvsrec9rakz535swndeqfqzukraa": 21, "3ogej": 21, "4d": 21, "trljeqos4nddsfllaopfkv75sreaauqtd9n5swmiy65": 21, "7ukracztnw": 21, "v3mtljeqolgzk0af1lahahv": 21, "arsrebddv4": 21, "brooklyn133133kensingtonfalse622236751934095359aqmaaaabaaaacaaaaj1h2zqefllarbgunxtsreav5chcgx5swj9fyf99ukraho2dqxl": 21, "usab0ca4gfjeqhuwdmsdfllayu": 21, "qvjlsreb0mrmfhn5swki26ekiukracyqosyr": 21, "usbmcrbjofjeqlckbumofllaooqjiotsrecdr9k": 21, "brooklyn133133kensingtonfalse622236751872360447aqmaaaabaaaacaaaaaamdjqufllacwfuuiprreczj3pipx5switvz5qnuuram1m0s6f": 21, "usbyiwrzolfeqo2jxpmrfllaobilx7jrredqpr4ssn5swcrevtkwuuratgz9blf": 21, "usdnfl0ppffeqid6xbuvfllagunwwzdrreagjaw": 21, "brooklyn133133kensingtonfalse622236751873114111aqmaaaabaaaabgaaacvdmoosfllaiazihhdrred7shf9cx5swhf8jan5uuraw6tuvph9usbowehmfffeqg9yregafllaatavj4prrealblpnd35swklpetufuurak90w6hj": 21, "usahpmicd1feqa": 21, "brooklyn133133kensingtonfalse622236751872196607aqmaaaabaaaabgaaaihy58spfllarzzohfzrrea": 21, "9d3nl35swgcifcpzuuras3mjnjz": 21, "usambfarwlfeqhammsugfllaemqz1mhrreci9nweq35swn4w1ddluuraihlnxkl": 21, "uscvnk4cvlfeqa": 21, "brooklyn133133kensingtonfalse622236751871737855aqmaaaabaaaacgaaakvcckp8fllagyh0601rredlkdffbx5swjduldhsuuraltjslwl": 21, "usdll": 21, "iwz1feqc": 21, "su3tzfllaycjinhdrrealjqthgn5swctxhlbyuuratp5b": 21, "iz": 21, "uscpk6vxxvfeqad4rr6gfllamctufv1rred2f9a": 21, "brooklyn133133kensingtonfalse622236751931179007aqmaaaabaaaabwaaaamekeskfllazneqy6bsreb0mrmfhn5swkm26ekiukrak9x9fyf": 21, "uschkx": 21, "ds1jeqidu3kiifllaz6nzilxsreahokgvln5swdaakqwyukrarxvpms5": 21, "usdorzfpsfjeqamekeskfllazneqy6bsrea": 21, "brooklyn133133kensingtontrue622236751877079039nullbrooklyn133133kensingtonfalse622236751938355199aqmaaaabaaaabqaaalebelkifllaqip2yddsrec7lyvqmx5swas6vsjaukrasa5zrzp": 21, "uscnebch4ljeqhgzhyanfllai": 21, "mza99srecxgxjson5swkoqdmhxukrabrooklyn133133kensingtontrue622236751937437695nullbrooklyn133133kensingtonfalse622236751858434047aqmaaaabaaaacqaaaaptzohifllav": 21, "hf065sredbnsab035swccxdsgzukrafzt2bm9": 21, "usddouuayfjeqigbprdwfllaienzdnrsrecpvtwo3n5swgeizytoukramleyrop": 21, "uscopswcxfjeqaz957lrflla4znv0cnsredroj0": 21, "brooklyn133133kensingtonfalse622236751872950271aqmaaaabaaaacqaaanj2xuojflla0gdedmtrrealxlaxgh5swmqjgwbvuuraerq": 21, "pbl": 21, "usdgx1lddvfeqcvdmoosfllaiazihhdrrealblpnd35swklpetufuuraaappgxp": 21, "usccg5inlvfeqn": 21, "c2gapfllahshao5brred9vx4": 21, "brooklyn133133kensingtonfalse622236751616376831aqmaaaabaaaabgaaac4gqvuafllab8c0vcvrrebudinuen5swai2hkotuuracr01brv": 21, "usdwpuwgsvfeqgxjw5qdfllay2ycskzrrecwn2msin5swjmrzdoxuuralibbvrp": 21, "usahwls8jvfeqa": 21, "brooklyn133133kensingtonfalse622236751937732607aqmaaaabaaaabqaaag4xzdfqfllakk0qnzxsrecwop": 21, "3yn5swl1ktwcfukraeoojkmn": 21, "uscitvyzpvjeqbh63i9ufllax9e8ykjsrebumcwxan5swjjnkp2cukrabrooklyn133133kensingtonfalse622236751858270207aqmaaaabaaaabaaaaag6q0p2fllayllrn7tsredroj3q7h5swdqx5l": 21, "ukrabn3nsut": 21, "usdjm2": 21, "rw1jeqag6q0p2fllayllrn7tsrea": 21, "brooklyn133133kensingtontrue622236751857352703nullbrooklyn133133kensingtonfalse622236751872327679aqmaaaabaaaacaaaaln5izywflladaxwevprrecwemfxin5swd": 21, "xnbfcuuratp5b": 21, "uscpk6vxxvfeqaslc2gcfllajnccshjrredvkwqvjh5swhkz35ucuurahardljt": 21, "usdulrmvfvfeqhammsugfllaemqz1mhrreczeyk": 21, "brooklyn133133kensingtonfalse622236751933145087aqmaaaabaaaacaaaan1tv3infllaypxjtg1sreby0l8hcx5swmzublsoukray7o7ogp": 21, "usao5urrgfjeqi63eqkmflla6oqa5sjsrecf3ugpdn5swdhjfpgzukra2rxwkbn": 21, "usdkpkotmljeqeior8axflla4c": 21, "doh1sreddbvc": 21, "brooklyn133133kensingtonfalse622236751938027519aqmaaaabaaaadqaaagjad3tkfllawfvi13dsreairrwvvx5swfmdicr8ukra86jh": 21, "usahjn6dkvjeqobuwpdsfllacsa6q5rsreawjstpwh5swduwwvwqukrat4sy9vx": 21, "usafeowcjfjeqm3k3ylgflladnftpylsreagm": 21, "brooklyn133133kensingtonfalse622236751875375103aqmaaaabaaaabgaaac7mujd3flla2iidps1qrecpycdebx5swlvtbulxueraf94lh2t": 21, "usaxtdyg31beqbmcutr1fllarebri": 21, "9qredrifysen5swehf": 21, "vhtueralua4l3d": 21, "usdygh2mzvbeqa": 21, "brooklyn133133kensingtontrue622236751936651263nullbrooklyn133133kensingtonfalse622236751872622591aqyaaaacaaaaaqmaaaabaaaabqaaahorh9kbflla": 21, "xu54zhrredvo75bgx5swj3mlxm5uurapvxwqnx": 21, "uscdiftrtvfeqhjxmrgffllarfh55lprrebzq4fsgx5swp17uem4uuraaqmaaaabaaaabaaaalaqwxgkfllap9edsvw": 21, "brooklyn133133kensingtonfalse622236751872163839aqmaaaabaaaacaaaakl2fb6rflla3hbun2vrreb2ppkroh5swhpqmdzouurahardljt": 21, "usdulrmvfvfeqjknc": 21, "klfllai1xpmo1rreagjayarn5swhmh7rikuurapgb": 21, "rk5": 21, "usbx7tz": 21, "hlfeqky81p6sfllatfgybxzrreci9nw": 21, "brooklyn133133kensingtonfalse622236751933439999aqmaaaabaaaabgaaaaoyulwhfllagarpiehrreajb9sja35swlf74oppuurawnjfiql": 21, "usdgvgy7dljeqn1tv3infllaypxjtg1sreb1jswken5swcctsxx4uurachhqvad": 21, "uscabgmj6ffeqa": 21, "manhattan236236upp": 21, "side": 21, "northtrue622236722201296895nullmanhattan236236upp": 21, "northtrue622236722202345471nullmanhattan236236upp": 21, "northtrue622236722201591807nullmanhattan236236upp": 21, "northtrue622236722202116095nullmanhattan236236upp": 21, "northtrue622236722202640383nullmanhattan236236upp": 21, "northtrue622236722210209791nullmanhattan236236upp": 21, "northtrue622236722210504703nullmanhattan236236upp": 21, "northtrue622236722201133055nullmanhattan236236upp": 21, "northtrue622236722202181631nullmanhattan236236upp": 21, "northtrue622236722204803071nullmanhattan236236upp": 21, "northtrue622236722201952255nullmanhattan236236upp": 21, "northtrue622236722210045951nullmanhattan236236upp": 21, "northtrue622236722201493503nullmanhattan236236upp": 21, "northtrue622236722202017791nullmanhattan236236upp": 21, "northtrue622236722202542079nullmanhattan236236upp": 21, "northtrue622236722201264127nullmanhattan236236upp": 21, "northtrue622236722202312703nullmanhattan236236upp": 21, "northtrue622236722210406399nullmanhattan236236upp": 21, "northtrue622236722202083327nullmanhattan236236upp": 21, "northtrue622236722210177023nullmanhattan236236upp": 21, "northtrue622236722201329663nullmanhattan236236upp": 21, "northtrue622236722202378239nullmanhattan236236upp": 21, "northtrue622236722204999679nullmanhattan236236upp": 21, "northtrue622236722210242559nullmanhattan236236upp": 21, "northtrue622236722201395199nullmanhattan236236upp": 21, "northtrue622236722201919487nullmanhattan236236upp": 21, "northtrue622236722202443775nullmanhattan236236upp": 21, "northtrue622236722201165823nullmanhattan236236upp": 21, "northtrue622236722202214399nullmanhattan236236upp": 21, "northtrue622236722210308095nullmanhattan236236upp": 21, "northtrue622236722201460735nullmanhattan236236upp": 21, "northtrue622236722202509311nullmanhattan236236upp": 21, "northtrue622236722210078719nullmanhattan236236upp": 21, "northtrue622236722201231359nullmanhattan236236upp": 21, "northtrue622236722202279935nullmanhattan236236upp": 21, "northtrue622236722210373631nullmanhattan236236upp": 21, "northtrue622236722202050559nullmanhattan236236upp": 21, "northtrue622236722209619967nullmanhattan236236upp": 21, "northtrue622236722210144255nullmanhattan236236upp": 21, "northfalse622236722202476543aqmaaaabaaaacqaaap": 21, "f8": 21, "yzfvla8jo5mjhjrebrkmj": 21, "fn1swmbmvvwzy0rasm2upbz9usc69jommmneqgvaqbeofvla": 21, "oxhcbbjred4yyvzcn1swojopqc5y0rank6ovhb9usbsi3bzwwneqdoh0k8ffvlaqgtmbr1jreceoo": 21, "northfalse622236722214010879aqmaaaabaaaabwaaaflqf9difvlazzwixkfkrebahol2vh1swnn": 21, "wongzera36ny2k99usc1piplw2reqcwd": 21, "h5wfvlau": 21, "pdemvkrecsbjoewx1swnvjze9dzera0qvfugb9usb": 21, "bpqnsgreqflqf9difvlazzwixkfkrea": 21, "northfalse622236722201985023aqmaaaabaaaacqaaanvekw": 21, "gfvlagsja2gtjredskrj": 21, "kx1swhgiamzwy0ratieb44x9usb2o9enhwneqgwvqzixfvlaqenhm5vjrec": 21, "95uyo31swiug": 21, "lcry0raiigaj6v9usby2": 21, "xrimneqhtdfzwqfvlard06vn5jredqm9u": 21, "northfalse622236722201821183aqmaaaabaaaacqaaacjlj5ysfvlae3tmfapjrec4": 21, "iarg31swpa60mqvy0ramog9d399usa7n11mxgneqbxregwjfvlahf9wqnrjreb2aa0di31swmfo57fty0rajrmewo59usaejzbqywneqnrp5mgwfvlaidrhibrjredq": 21, "a8": 21, "northfalse622236722210340863aqmaaaabaaaacaaaaicx9jt4fflaokhto": 21, "bjrebuepbj9nxswg8xyfzxy0rar2jake98usbkfc56bgreqoufj07qfflada11mbjkrebw": 21, "ktc73xswbuvvgyazerauyuxtf58usda9v15fwreqcha": 21, "kcfvla": 21, "gvwlwbkrechf": 21, "northfalse622236722208505855aqmaaaabaaaabqaaacdllxo3fvlaigrobkrjrectcvf7s31swnpz0qlsy0rapexaclh9usdu": 21, "mvkwgneqftec3c9fvlaj7n5ykljreans5ctt31swcietgzey0ramanhattan236236upp": 21, "northfalse622236722215190527aqmaaaabaaaabwaaaftpihgufvlafpvn2rnkreaqu8agh31swnonhce4zeragfdtlbt9usbeyq5": 21, "zgreqfvkzhqrfvlasnilxdpkrebvjajim31swjckhbjdzerasnixuzv9usd28r1wvmreqftpihgufvlafpvn2rnkrea": 21, "northfalse622236722204835839aqmaaaabaaaabwaaaajlpg5ufvlal601h": 21, "birebjmmn": 21, "th1swodmsfify0rawgscr0x9uscgxivobwneqftqeybtfvlajqiddxfjrebw5svxyn1swjadvyemy0ranyhut2v9usdxnkag": 21, "2jeqajlpg5ufvlal601h": 21, "birea": 21, "northfalse622236722209849343aqmaaaabaaaabaaaaetav5lyfflaqhrp2ejkreb7c9kv1nxswiaybmtjzeracxj8mdd8uscz8vowswreqetav5lyfflaqhrp2ejkrea": 21, "northfalse622236722209685503aqmaaaabaaaabqaaacp6oozjfflartbqbgxkredwlmxzwxxswb7bwdwbzerawpirzcl8usc8nfurh2reqgwr9": 21, "jnfflaiqkf2xjkreaqejqmyxxswebquarszeramanhattan236236upp": 21, "northfalse622236722202836991aqmaaaabaaaabqaaae9fuezqfvla9hmewstkrecbllqeah1swmqgnbqszeraqr5kkgr9uscq4lowpmreqeyo6vbnfvla": 21, "ptb4tnkrebprbnman1swprzhserzeramanhattan236236upp": 21, "northfalse622236722209521663aqmaaaabaaaabwaaalgbmurcfflay7lc7g1krebsk": 21, "f4zxxswikcn9lyzerawpirzcl8usc8nfurh2reqabcfavaffla9gdymjvkrearz0mj4nxswf7assoszeradbbep": 21, "d8usc3e4zhfwreqlgbmurcfflay7lc7g1krea": 21, "northfalse622236722204344319aqmaaaabaaaabgaaah8u7di": 21, "fvlagoypusljrebsl4srph1swi6fmbgyy0racktmodz9usdndjvmqwneqnma": 21, "1c7fvlawr": 21, "mvj9jreahzexzp31swpg9xd0qy0rafxtsnj99usccji": 21, "5kwneqa": 21, "northfalse622236722211192831aqmaaaabaaaabwaaaeacwjevfvla": 21, "k0qhkrec51zo": 21, "bn1swj3f5r": 21, "tzeraxx7u0qn9usc": 21, "5lq": 21, "ugreqo9klaurfvlag0ol2cnkrecb91msg31swf7jdn": 21, "mzerakrvghh99usdtp4xhugreqeacwjevfvla": 21, "k0qhkrea": 21, "northfalse622236722208866303aqmaaaabaaaacaaaanfqu6sqfvlaqaw8nsnjrebjjsclhn1swokucrwny0rad": 21, "4acif9uscw3e79o2neqpshnmwlfvlawnqo8utjrebaufy1mn1swgc0panhy0rahv6uuz99uscb": 21, "08immneqi7ztuocfvlagu4way1jredrul": 21, "northfalse622236722212208639aqmaaaabaaaabgaaajotuisefvlasyl2q4njreas8xnshx1swbfw1d": 21, "fy0rabcpifxz9usdatfvvmwneqp": 21, "yzfvla8jo5mjhjrebd5qythn1swajia": 21, "dy0rami1qix59usblkxzdg2neqa": 21, "northfalse622236722201690111aqmaaaabaaaabgaaal73lrijfvlai4b8sjfjrebsl0m4l31swknpx5uvy0rakowpnjj9usate0x9qmneqor9r16xfvlafpfk1bfjrecukyl6nx1swiisamofy0ravvevgkn9usclhvywkwneqa": 21, "northtrue622236722201526271nullmanhattan236236upp": 21, "northtrue622236722204868607nullmanhattan236236upp": 21, "northfalse622236722215059455aqmaaaabaaaacaaaai2cdgzcfvlaqtmzc5pkredh8scum31swm": 21, "oi": 21, "iezeravomiec59usb": 21, "lu3as2reqln4l1m1fvla9vedcl5krecu58fgon1swkb4tfwvzerancvsp0j9usdxegqwm2reqc63lwlcfvlars0kpjpkrecngni": 21, "northfalse622236722201198591aqmaaaabaaaacqaaajqbvq9": 21, "fvlaozddtmrjrecm96aech1swny20tnjy0ravvpbgmt9uscdnwib3mneqfuteth1fvlagjcod": 21, "5jreautiygg31swjmv1rbpy0ralneyeid9usarqyor3mneqicc9zkhfvlatmjom95jreav6xa": 21, "northfalse622236722209718271aqmaaaabaaaabgaaacvpsapifflaxsbkw5jkreafwhql2nxswpyhcpivzeraa": 21, "tt8usdn9sw9l2reqngx03tsfflaideodkvkredztij47hxswgrhh7iizerak89jo": 21, "j8usbewerdkmreqa": 21, "northfalse622236722202869759aqmaaaabaaaacaaaaarqmdxxfvlate008qjkrebxpolkyn1swe3lon4hzeraajnxrl19usagkk3ahgreqjsuvarofvlaxaadtcxkreborbnman1swprzhserzerajttawg99usaipmsnh2reql9w7q92fvlanpcwxatkreaeuda": 21, "northfalse622236722209554431aqmaaaabaaaacqaaaal4": 21, "dhxfflamffafklkreb7c9kv1nxswiaybmtjzeraf3rlbdf8usdejd6fvmreqn8om": 21, "rjffla2lkyawtkreaqejqmyxxswebquarszerabcv3": 21, "m18uscjap": 21, "zcmreqlgbmurcfflay7lc7g1kreabybi": 21, "northfalse622236722208899071aqmaaaabaaaacaaaahf3aat8fvla1dou0xjjrealvsk2e31swejuoigxy0rasy7hc4z9usdplgkcj2neqnfqu6sqfvlaqaw8nsnjr": 21, "1eczin1swfgplyqey0ra0rvy0yh9usbe4jcmhwneqmp4vw2hfvlasz0ckrtjreb392k": 21, "northfalse622236722208735231aqmaaaabaaaabaaaai7ztuocfvlagu4way1jrea": 21, "prrn31swih7tyiyy0ratr0xjkf9usay3g6imwneqi7ztuocfvlagu4way1jrea": 21, "northfalse622236722201559039aqmaaaabaaaabwaaakpasjorfvlambukbl9jrea80azkjx1swetyjw1wy0rami1qix59usbkkxzdg2neqepldjmefvlacmhot4njreagoaqelx1swdofugj": 21, "y0raafanidj9usasiwabawneqkpasjorfvlambukbl9jrea": 21, "northfalse622236722204901375aqmaaaabaaaabwaaaj8h7k9lfvla1zsgip9irebw5svxyn1swjadvyemy0ra3twtxmx9usdvmjovhgneqau": 21, "wrz7fvlaso46kbdjreb392mrfh1swnqzrtmsy0rawilks259usbarom5bmneqj8h7k9lfvla1zsgip9irea": 21, "northfalse622236722213257215aqmaaaabaaaabqaaaansrin7fflae3qcqunjrecnz9v59nxswb": 21, "kjbfvy0rabnqqi": 21, "z8usbvmwbc8wneqicx9jt4fflaokhto": 21, "bjreadbesj": 21, "3xswbn0akljy0ramanhattan236236upp": 21, "northtrue622236722209587199nullshow": 21, "insid": 21, "kepler_df": 21, "simpler": 21, "mosaic_joined_df": 21, "114": 21, "greenwich": 21, "villag": 21, "249": 21, "113": 21, "158": 21, "meatpack": 21, "144": 21, "itali": 21, "nolita": 21, "231": 21, "tribeca": 21, "civic": 21, "center": 21, "261": 21, "trade": 21, "209": 21, "seaport": 21, "87": 21, "financi": 21, "distric": 21, "008626": 21, "7042": 21, "981636": 21, "758581": 21, "622236750650671103": 21, "622236723500384255": 21, "88": 21, "012115": 21, "707623": 21, "999272": 21, "734073": 21, "622236750639693823": 21, "622236723433013247": 21, "By": 21, "wrap": 21, "trips_mdf": 21, "set_index_resolut": 21, "apply_index": 21, "hand": 22, "becom": 22, "attribut": 22, "abstract": 22, "pre": 22, "requisit": 22, "test": 22}, "objects": {"": [[7, 0, 1, "", "flatten_polygons"], [8, 0, 1, "", "grid_boundary"], [8, 0, 1, "", "grid_boundaryaswkb"], [8, 0, 1, "", "grid_cell_intersection"], [6, 0, 1, "", "grid_cell_intersection_agg"], [8, 0, 1, "", "grid_cell_union"], [6, 0, 1, "", "grid_cell_union_agg"], [8, 0, 1, "", "grid_cellarea"], [8, 0, 1, "", "grid_cellkloop"], [8, 0, 1, "", "grid_cellkloopexplode"], [8, 0, 1, "", "grid_cellkring"], [8, 0, 1, "", "grid_cellkringexplode"], [8, 0, 1, "", "grid_geometrykloop"], [8, 0, 1, "", "grid_geometrykloopexplode"], [8, 0, 1, "", "grid_geometrykring"], [8, 0, 1, "", "grid_geometrykringexplode"], [8, 0, 1, "", "grid_longlatascellid"], [8, 0, 1, "", "grid_pointascellid"], [8, 0, 1, "", "grid_polyfill"], [8, 0, 1, "", "grid_tessellate"], [8, 0, 1, "", "grid_tessellateexplode"], [8, 0, 1, "", "mosaic_explode"], [8, 0, 1, "", "mosaicfill"], [8, 0, 1, "", "point_index_geom"], [8, 0, 1, "", "point_index_lonlat"], [8, 0, 1, "", "polyfill"], [4, 0, 1, "", "rst_bandmetadata"], [4, 0, 1, "", "rst_boundingbox"], [4, 0, 1, "", "rst_clip"], [4, 0, 1, "", "rst_combineavg"], [4, 0, 1, "", "rst_combineavgagg"], [4, 0, 1, "", "rst_frombands"], [4, 0, 1, "", "rst_fromfile"], [4, 0, 1, "", "rst_georeference"], [4, 0, 1, "", "rst_getnodata"], [4, 0, 1, "", "rst_getsubdataset"], [4, 0, 1, "", "rst_height"], [4, 0, 1, "", "rst_initnodata"], [4, 0, 1, "", "rst_isempty"], [4, 0, 1, "", "rst_memsize"], [4, 0, 1, "", "rst_merge"], [4, 0, 1, "", "rst_mergeagg"], [4, 0, 1, "", "rst_metadata"], [4, 0, 1, "", "rst_ndvi"], [4, 0, 1, "", "rst_numbands"], [4, 0, 1, "", "rst_pixelheight"], [4, 0, 1, "", "rst_pixelwidth"], [4, 0, 1, "", "rst_rastertogridavg"], [4, 0, 1, "", "rst_rastertogridcount"], [4, 0, 1, "", "rst_rastertogridmax"], [4, 0, 1, "", "rst_rastertogridmedian"], [4, 0, 1, "", "rst_rastertogridmin"], [4, 0, 1, "id0", "rst_rastertoworldcoord"], [4, 0, 1, "", "rst_rastertoworldcoordy"], [4, 0, 1, "", "rst_retile"], [4, 0, 1, "", "rst_rotation"], [4, 0, 1, "", "rst_scalex"], [4, 0, 1, "", "rst_scaley"], [4, 0, 1, "", "rst_setnodata"], [4, 0, 1, "id1", "rst_skewx"], [4, 0, 1, "", "rst_srid"], [4, 0, 1, "", "rst_subdatasets"], [4, 0, 1, "", "rst_subdivide"], [4, 0, 1, "", "rst_summary"], [4, 0, 1, "", "rst_tessellate"], [4, 0, 1, "", "rst_tooverlappingtiles"], [4, 0, 1, "", "rst_tryopen"], [4, 0, 1, "", "rst_upperleftx"], [4, 0, 1, "", "rst_upperlefty"], [4, 0, 1, "", "rst_width"], [4, 0, 1, "", "rst_worldtorastercoord"], [4, 0, 1, "", "rst_worldtorastercoordx"], [4, 0, 1, "", "rst_worldtorastercoordy"], [7, 0, 1, "", "st_area"], [1, 0, 1, "", "st_asbinary"], [1, 0, 1, "", "st_asgeojson"], [1, 0, 1, "", "st_astext"], [1, 0, 1, "", "st_aswkb"], [1, 0, 1, "", "st_aswkt"], [7, 0, 1, "", "st_buffer"], [7, 0, 1, "", "st_bufferloop"], [7, 0, 1, "", "st_centroid"], [7, 0, 1, "", "st_centroid2D"], [9, 0, 1, "", "st_contains"], [7, 0, 1, "", "st_convexhull"], [7, 0, 1, "", "st_difference"], [7, 0, 1, "", "st_dimension"], [7, 0, 1, "", "st_distance"], [7, 0, 1, "", "st_dump"], [7, 0, 1, "", "st_envelope"], [7, 0, 1, "", "st_geometrytype"], [2, 0, 1, "", "st_geomfromgeojson"], [2, 0, 1, "", "st_geomfromwkb"], [2, 0, 1, "", "st_geomfromwkt"], [7, 0, 1, "", "st_hasvalidcoordinates"], [7, 0, 1, "", "st_haversine"], [7, 0, 1, "", "st_intersection"], [6, 0, 1, "", "st_intersection_aggregate"], [9, 0, 1, "", "st_intersects"], [6, 0, 1, "", "st_intersects_aggregate"], [7, 0, 1, "", "st_isvalid"], [7, 0, 1, "", "st_length"], [2, 0, 1, "", "st_makeline"], [2, 0, 1, "", "st_makepolygon"], [7, 0, 1, "", "st_numpoints"], [7, 0, 1, "", "st_perimeter"], [2, 0, 1, "", "st_point"], [7, 0, 1, "", "st_rotate"], [7, 0, 1, "", "st_scale"], [7, 0, 1, "", "st_setsrid"], [7, 0, 1, "", "st_simplify"], [7, 0, 1, "", "st_srid"], [7, 0, 1, "", "st_transform"], [7, 0, 1, "", "st_translate"], [7, 0, 1, "", "st_unaryunion"], [7, 0, 1, "", "st_union"], [6, 0, 1, "", "st_union_agg"], [9, 0, 1, "", "st_within"], [7, 0, 1, "", "st_x"], [7, 0, 1, "", "st_xmax"], [7, 0, 1, "", "st_xmin"], [7, 0, 1, "", "st_y"], [7, 0, 1, "", "st_ymax"], [7, 0, 1, "", "st_ymin"], [7, 0, 1, "", "st_zmax"], [7, 0, 1, "", "st_zmin"]], "mos": [[3, 0, 1, "", "read"]], "read": [[10, 0, 1, "id2", "format"]], "spark.read": [[3, 0, 1, "", "format"]]}, "objtypes": {"0": "py:function"}, "objnames": {"0": ["py", "function", "Python function"]}, "titleterms": {"api": 0, "document": [0, 11], "geometri": [1, 2, 20, 21], "accessor": 1, "st_asbinari": 1, "st_asgeojson": 1, "st_astext": 1, "st_aswkb": 1, "st_aswkt": 1, "constructor": [2, 21], "st_point": 2, "st_makelin": 2, "st_makepolygon": 2, "st_geomfromwkt": 2, "st_geomfromwkb": 2, "st_geomfromgeojson": 2, "raster": [3, 4, 5], "format": [3, 10, 21], "reader": [3, 10], "intro": [3, 4, 5, 10, 14, 17], "spark": [3, 10, 20], "read": [3, 10, 16, 21], "gdal": [3, 18], "mo": [3, 10], "raster_to_grid": 3, "function": [4, 6, 7, 19], "rst_bandmetadata": 4, "rst_boundingbox": 4, "rst_clip": 4, "rst_combineavg": 4, "rst_combineavgagg": 4, "rst_fromband": 4, "rst_fromfil": 4, "rst_georefer": 4, "rest_getnodata": 4, "rst_getsubdataset": 4, "rst_height": 4, "rst_initnodata": 4, "rst_isempti": 4, "rst_memsiz": 4, "rst_merg": 4, "rst_mergeagg": 4, "rst_metadata": 4, "rst_ndvi": 4, "rst_numband": 4, "rst_pixelheight": 4, "rst_pixelwidth": 4, "rst_rastertogridavg": 4, "rst_rastertogridcount": 4, "rst_rastertogridmax": 4, "rst_rastertogridmedian": 4, "rst_rastertogridmin": 4, "rst_rastertoworldcoord": 4, "rst_rastertoworldcoordx": 4, "rst_rastertoworldcoordi": 4, "rst_retil": 4, "rst_rotat": 4, "rst_scalex": 4, "rst_scalei": 4, "rst_setnodata": 4, "rst_skewx": 4, "rst_skewi": 4, "rst_srid": 4, "rst_subdataset": 4, "rst_subdivid": 4, "rst_summari": 4, "rst_tessel": 4, "rst_tooverlappingtil": 4, "rst_tryopen": 4, "rst_upperleftx": 4, "rst_upperlefti": 4, "rst_width": 4, "rst_worldtorastercoord": 4, "rst_worldtorastercoordx": 4, "rst_worldtorastercoordi": 4, "rasterio": 5, "udf": 5, "plot": [5, 20], "exampl": [5, 20], "comput": [5, 16, 21], "band": 5, "statist": 5, "ndvi": 5, "write": 5, "file": [5, 18], "disk": 5, "spatial": [6, 7, 8, 9, 14, 21], "aggreg": 6, "st_intersects_aggreg": 6, "st_intersection_aggreg": 6, "st_union_agg": 6, "grid_cell_intersection_agg": 6, "grid_cell_union_agg": 6, "flatten_polygon": 7, "st_area": 7, "st_buffer": 7, "st_bufferloop": 7, "st_centroid2d": 7, "deprec": [7, 8], "st_centroid": 7, "st_convexhul": 7, "st_differ": 7, "st_dimens": 7, "st_distanc": 7, "st_dump": 7, "st_envelop": 7, "st_geometrytyp": 7, "st_haversin": 7, "st_hasvalidcoordin": 7, "st_intersect": [7, 9], "st_isvalid": 7, "st_length": 7, "st_numpoint": 7, "st_perimet": 7, "st_rotat": 7, "st_scale": 7, "st_setsrid": 7, "st_simplifi": 7, "st_srid": 7, "st_transform": 7, "st_translat": 7, "st_union": 7, "st_unaryunion": 7, "st_x": 7, "st_xmax": 7, "st_xmin": 7, "st_y": 7, "st_ymax": 7, "st_ymin": 7, "st_zmax": 7, "st_zmin": 7, "grid": [8, 16, 17], "index": [8, 16, 20, 21], "grid_longlatascellid": 8, "grid_pointascellid": 8, "grid_polyfil": 8, "grid_boundaryaswkb": 8, "grid_boundari": 8, "grid_tessel": 8, "grid_tessellateexplod": 8, "grid_cellarea": 8, "grid_cellkr": 8, "grid_cellkringexplod": 8, "grid_cell_intersect": 8, "grid_cell_union": 8, "grid_cellkloop": 8, "grid_cellkloopexplod": 8, "grid_geometrykr": 8, "grid_geometrykringexplod": 8, "grid_geometrykloop": 8, "grid_geometrykloopexplod": 8, "mosaic_explod": 8, "mosaicfil": 8, "point_index_geom": 8, "point_index_lonlat": 8, "polyfil": 8, "predic": 9, "st_contain": 9, "st_within": 9, "vector": 10, "ogr": 10, "multi_read_ogr": 10, "geo_db": 10, "shapefil": 10, "content": 11, "indic": [11, 16], "tabl": [11, 20], "project": 11, "support": [11, 18, 19], "mosaic": [12, 16, 19, 21], "video": 12, "talk": 12, "model": [13, 14], "k": 14, "nearest": 14, "neighbour": 14, "knn": 14, "join": [14, 16, 21], "relat": 14, "an": [14, 21], "iter": 14, "transform": 14, "paramet": 14, "usag": [14, 19, 22], "visualis": 14, "mlflow": 14, "integr": 14, "serialis": 14, "shape": [14, 20], "awar": 14, "hex": 14, "ring": 14, "automat": 15, "sql": [15, 19], "registr": [15, 19], "pre": 15, "requisit": 15, "instal": [15, 18, 19], "test": 15, "us": 16, "system": [16, 17], "1": 16, "sourc": 16, "point": 16, "polygon": 16, "dataset": [16, 20], "2": 16, "resolut": 16, "requir": 16, "optim": [16, 21], "3": 16, "appli": 16, "set": 16, "your": 16, "left": 16, "hand": 16, "datafram": 16, "4": 16, "fulli": 16, "cover": 16, "each": 16, "right": 16, "5": 16, "explod": 16, "becom": 16, "row": 16, "new": 16, "6": 16, "directli": 16, "final": 16, "note": 16, "bng": 17, "british": 17, "nation": 17, "configur": [17, 18], "coordin": 17, "refer": 17, "guid": [18, 19], "platform": [18, 19], "setup": 18, "script": 18, "init": 18, "enabl": [18, 19, 21], "notebook": [18, 21], "packag": 19, "from": [19, 20, 21], "pypi": 19, "releas": 19, "artifact": 19, "autom": 19, "kepler": 20, "visual": 20, "download": 20, "intern": [20, 21], "type": 20, "wkt": 20, "wkb": 20, "view": 20, "h3": 20, "chip": 20, "quickstart": 21, "clip": 21, "without": 21, "geojson": 21, "some": 21, "basic": 21, "attribut": 21, "mosaicfram": 21, "abstract": 21, "simpl": 21}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "nbsphinx": 4, "sphinx.ext.todo": 2, "sphinx": 57}, "alltitles": {"API Documentation": [[0, "api-documentation"]], "Geometry accessors": [[1, "geometry-accessors"]], "st_asbinary": [[1, "st-asbinary"]], "st_asgeojson": [[1, "st-asgeojson"]], "st_astext": [[1, "st-astext"]], "st_aswkb": [[1, "st-aswkb"]], "st_aswkt": [[1, "st-aswkt"]], "Geometry constructors": [[2, "geometry-constructors"]], "st_point": [[2, "st-point"]], "st_makeline": [[2, "st-makeline"]], "st_makepolygon": [[2, "st-makepolygon"]], "st_geomfromwkt": [[2, "st-geomfromwkt"]], "st_geomfromwkb": [[2, "st-geomfromwkb"]], "st_geomfromgeojson": [[2, "st-geomfromgeojson"]], "Raster Format Readers": [[3, "raster-format-readers"]], "Intro": [[3, "intro"], [4, "intro"], [5, "intro"], [10, "intro"], [14, "intro"], [17, "intro"]], "spark.read.format(\u201cgdal\u201d)": [[3, "spark-read-format-gdal"]], "mos.read().format(\u201craster_to_grid\u201d)": [[3, "mos-read-format-raster-to-grid"]], "Raster functions": [[4, "raster-functions"]], "rst_bandmetadata": [[4, "rst-bandmetadata"]], "rst_boundingbox": [[4, "rst-boundingbox"]], "rst_clip": [[4, "rst-clip"]], "rst_combineavg": [[4, "rst-combineavg"]], "rst_combineavgagg": [[4, "rst-combineavgagg"]], "rst_frombands": [[4, "rst-frombands"]], "rst_fromfile": [[4, "rst-fromfile"]], "rst_georeference": [[4, "rst-georeference"]], "rest_getnodata": [[4, "rest-getnodata"]], "rst_getsubdataset": [[4, "rst-getsubdataset"]], "rst_height": [[4, "rst-height"]], "rst_initnodata": [[4, "rst-initnodata"]], "rst_isempty": [[4, "rst-isempty"]], "rst_memsize": [[4, "rst-memsize"]], "rst_merge": [[4, "rst-merge"]], "rst_mergeagg": [[4, "rst-mergeagg"]], "rst_metadata": [[4, "rst-metadata"]], "rst_ndvi": [[4, "rst-ndvi"]], "rst_numbands": [[4, "rst-numbands"]], "rst_pixelheight": [[4, "rst-pixelheight"]], "rst_pixelwidth": [[4, "rst-pixelwidth"]], "rst_rastertogridavg": [[4, "rst-rastertogridavg"]], "rst_rastertogridcount": [[4, "rst-rastertogridcount"]], "rst_rastertogridmax": [[4, "rst-rastertogridmax"]], "rst_rastertogridmedian": [[4, "rst-rastertogridmedian"]], "rst_rastertogridmin": [[4, "rst-rastertogridmin"]], "rst_rastertoworldcoord": [[4, "rst-rastertoworldcoord"]], "rst_rastertoworldcoordx": [[4, "rst-rastertoworldcoordx"]], "rst_rastertoworldcoordy": [[4, "rst-rastertoworldcoordy"]], "rst_retile": [[4, "rst-retile"]], "rst_rotation": [[4, "rst-rotation"]], "rst_scalex": [[4, "rst-scalex"]], "rst_scaley": [[4, "rst-scaley"]], "rst_setnodata": [[4, "rst-setnodata"]], "rst_skewx": [[4, "rst-skewx"]], "rst_skewy": [[4, "rst-skewy"]], "rst_srid": [[4, "rst-srid"]], "rst_subdatasets": [[4, "rst-subdatasets"]], "rst_subdivide": [[4, "rst-subdivide"]], "rst_summary": [[4, "rst-summary"]], "rst_tessellate": [[4, "rst-tessellate"]], "rst_tooverlappingtiles": [[4, "rst-tooverlappingtiles"]], "rst_tryopen": [[4, "rst-tryopen"]], "rst_upperleftx": [[4, "rst-upperleftx"]], "rst_upperlefty": [[4, "rst-upperlefty"]], "rst_width": [[4, "rst-width"]], "rst_worldtorastercoord": [[4, "rst-worldtorastercoord"]], "rst_worldtorastercoordx": [[4, "rst-worldtorastercoordx"]], "rst_worldtorastercoordy": [[4, "rst-worldtorastercoordy"]], "Rasterio UDFs": [[5, "rasterio-udfs"]], "Rasterio raster plotting": [[5, "rasterio-raster-plotting"]], "UDF example for computing band statistics": [[5, "udf-example-for-computing-band-statistics"]], "UDF example for computing NDVI": [[5, "udf-example-for-computing-ndvi"]], "UDF example for writing raster files to disk": [[5, "udf-example-for-writing-raster-files-to-disk"]], "Spatial aggregation functions": [[6, "spatial-aggregation-functions"]], "st_intersects_aggregate": [[6, "st-intersects-aggregate"]], "st_intersection_aggregate": [[6, "st-intersection-aggregate"]], "st_union_agg": [[6, "st-union-agg"]], "grid_cell_intersection_agg": [[6, "grid-cell-intersection-agg"]], "grid_cell_union_agg": [[6, "grid-cell-union-agg"]], "Spatial functions": [[7, "spatial-functions"]], "flatten_polygons": [[7, "flatten-polygons"]], "st_area": [[7, "st-area"]], "st_buffer": [[7, "st-buffer"]], "st_bufferloop": [[7, "st-bufferloop"]], "st_centroid2D [Deprecated]": [[7, "st-centroid2d-deprecated"]], "st_centroid": [[7, "st-centroid"]], "st_convexhull": [[7, "st-convexhull"]], "st_difference": [[7, "st-difference"]], "st_dimension": [[7, "st-dimension"]], "st_distance": [[7, "st-distance"]], "st_dump": [[7, "st-dump"]], "st_envelope": [[7, "st-envelope"]], "st_geometrytype": [[7, "st-geometrytype"]], "st_haversine": [[7, "st-haversine"]], "st_hasvalidcoordinates": [[7, "st-hasvalidcoordinates"]], "st_intersection": [[7, "st-intersection"]], "st_isvalid": [[7, "st-isvalid"]], "st_length": [[7, "st-length"]], "st_numpoints": [[7, "st-numpoints"]], "st_perimeter": [[7, "st-perimeter"]], "st_rotate": [[7, "st-rotate"]], "st_scale": [[7, "st-scale"]], "st_setsrid": [[7, "st-setsrid"]], "st_simplify": [[7, "st-simplify"]], "st_srid": [[7, "st-srid"]], "st_transform": [[7, "st-transform"]], "st_translate": [[7, "st-translate"]], "st_union": [[7, "st-union"]], "st_unaryunion": [[7, "st-unaryunion"]], "st_x": [[7, "st-x"]], "st_xmax": [[7, "st-xmax"]], "st_xmin": [[7, "st-xmin"]], "st_y": [[7, "st-y"]], "st_ymax": [[7, "st-ymax"]], "st_ymin": [[7, "st-ymin"]], "st_zmax": [[7, "st-zmax"]], "st_zmin": [[7, "st-zmin"]], "Spatial grid indexing": [[8, "spatial-grid-indexing"]], "grid_longlatascellid": [[8, "grid-longlatascellid"]], "grid_pointascellid": [[8, "grid-pointascellid"]], "grid_polyfill": [[8, "grid-polyfill"]], "grid_boundaryaswkb": [[8, "grid-boundaryaswkb"]], "grid_boundary": [[8, "grid-boundary"]], "grid_tessellate": [[8, "grid-tessellate"]], "grid_tessellateexplode": [[8, "grid-tessellateexplode"]], "grid_cellarea": [[8, "grid-cellarea"]], "grid_cellkring": [[8, "grid-cellkring"]], "grid_cellkringexplode": [[8, "grid-cellkringexplode"]], "grid_cell_intersection": [[8, "grid-cell-intersection"]], "grid_cell_union": [[8, "grid-cell-union"]], "grid_cellkloop": [[8, "grid-cellkloop"]], "grid_cellkloopexplode": [[8, "grid-cellkloopexplode"]], "grid_geometrykring": [[8, "grid-geometrykring"]], "grid_geometrykringexplode": [[8, "grid-geometrykringexplode"]], "grid_geometrykloop": [[8, "grid-geometrykloop"]], "grid_geometrykloopexplode": [[8, "grid-geometrykloopexplode"]], "mosaic_explode [Deprecated]": [[8, "mosaic-explode-deprecated"]], "mosaicfill [Deprecated]": [[8, "mosaicfill-deprecated"]], "point_index_geom [Deprecated]": [[8, "point-index-geom-deprecated"]], "point_index_lonlat [Deprecated]": [[8, "point-index-lonlat-deprecated"]], "polyfill [Deprecated]": [[8, "polyfill-deprecated"]], "Spatial predicates": [[9, "spatial-predicates"]], "st_contains": [[9, "st-contains"]], "st_intersects": [[9, "st-intersects"]], "st_within": [[9, "st-within"]], "Vector Format Readers": [[10, "vector-format-readers"]], "spark.read.format(\u201cogr\u201d)": [[10, "spark-read-format-ogr"]], "mos.read().format(\u201cmulti_read_ogr\u201d)": [[10, "mos-read-format-multi-read-ogr"]], "spark.read().format(\u201cgeo_db\u201d)": [[10, "spark-read-format-geo-db"]], "spark.read().format(\u201cshapefile\u201d)": [[10, "spark-read-format-shapefile"]], "Documentation": [[11, "documentation"]], "Contents:": [[11, null]], "Indices and tables": [[11, "indices-and-tables"]], "Project Support": [[11, "project-support"]], "Mosaic Videos and Talks": [[12, "mosaic-videos-and-talks"]], "Models": [[13, "models"]], "Spatial K Nearest Neighbours": [[14, "spatial-k-nearest-neighbours"]], "Spatial KNN as a Join Relation": [[14, "spatial-knn-as-a-join-relation"]], "Spatial KNN as an Iterative Transformation": [[14, "spatial-knn-as-an-iterative-transformation"]], "Parameters": [[14, "parameters"]], "Usage": [[14, "usage"], [22, "usage"]], "Visualisation": [[14, "visualisation"]], "Mlflow Integration": [[14, "mlflow-integration"]], "Model serialisation": [[14, "model-serialisation"]], "Shape Aware Hex Rings": [[14, "shape-aware-hex-rings"]], "Automatic SQL registration": [[15, "automatic-sql-registration"]], "Pre-requisites": [[15, "pre-requisites"]], "Installation": [[15, "installation"]], "Testing": [[15, "testing"]], "Using grid index systems in Mosaic": [[16, "Using-grid-index-systems-in-Mosaic"]], "1. Read the source point and polygon datasets.": [[16, "1.-Read-the-source-point-and-polygon-datasets."]], "2. Compute the resolution of index required to optimize the join.": [[16, "2.-Compute-the-resolution-of-index-required-to-optimize-the-join."]], "3. Apply the index to the set of points in your left-hand dataframe.": [[16, "3.-Apply-the-index-to-the-set-of-points-in-your-left-hand-dataframe."]], "4. Compute the set of indices that fully covers each polygon in the right-hand dataframe": [[16, "4.-Compute-the-set-of-indices-that-fully-covers-each-polygon-in-the-right-hand-dataframe"]], "5. \u2018Explode\u2019 the polygon index dataframe, such that each polygon index becomes a row in a new dataframe.": [[16, "5.-\u2018Explode\u2019-the-polygon-index-dataframe,-such-that-each-polygon-index-becomes-a-row-in-a-new-dataframe."]], "6. Join the new left- and right-hand dataframes directly on the index.": [[16, "6.-Join-the-new-left--and-right-hand-dataframes-directly-on-the-index."]], "Final notes": [[16, "Final-notes"]], "BNG - British National Grid": [[17, "bng-british-national-grid"]], "Configuring BNG": [[17, "configuring-bng"]], "Coordinate Reference System": [[17, "coordinate-reference-system"]], "GDAL Installation guide": [[18, "gdal-installation-guide"]], "Supported platforms": [[18, "supported-platforms"], [19, "supported-platforms"]], "GDAL Installation": [[18, "gdal-installation"]], "Setup GDAL files and scripts": [[18, "setup-gdal-files-and-scripts"]], "Configure the init script": [[18, "configure-the-init-script"]], "Enable GDAL for a notebook": [[18, "enable-gdal-for-a-notebook"]], "Installation guide": [[19, "installation-guide"]], "Package installation": [[19, "package-installation"]], "Installation from PyPI": [[19, "installation-from-pypi"]], "Installation from release artifacts": [[19, "installation-from-release-artifacts"]], "Automated SQL registration": [[19, "automated-sql-registration"]], "Enabling the Mosaic functions": [[19, "enabling-the-mosaic-functions"]], "SQL usage": [[19, "sql-usage"]], "Kepler visualizations": [[20, "Kepler-visualizations"]], "Examples": [[20, "Examples"]], "Download example shapes": [[20, "Download-example-shapes"]], "Plot geometries from Spark dataset": [[20, "Plot-geometries-from-Spark-dataset"]], "Internal geometry type": [[20, "Internal-geometry-type"]], "WKT geometry type": [[20, "WKT-geometry-type"]], "WKB geometry type": [[20, "WKB-geometry-type"]], "Plot geometries from table/view": [[20, "Plot-geometries-from-table/view"]], "Plot H3 indexes": [[20, "Plot-H3-indexes"]], "Plot H3 chips": [[20, "Plot-H3-chips"]], "Quickstart notebook": [[21, "Quickstart-notebook"]], "Enable Mosaic in the notebook": [[21, "Enable-Mosaic-in-the-notebook"]], "Geometry constructors and the Mosaic internal geometry format": [[21, "Geometry-constructors-and-the-Mosaic-internal-geometry-format"]], "Geometry clipping without an index": [[21, "Geometry-clipping-without-an-index"]], "Read from GeoJson, compute some basic geometry attributes": [[21, "Read-from-GeoJson,-compute-some-basic-geometry-attributes"]], "Mosaic spatial join optimizations": [[21, "Mosaic-spatial-join-optimizations"]], "MosaicFrame abstraction for simple indexing and joins": [[21, "MosaicFrame-abstraction-for-simple-indexing-and-joins"]]}, "indexentries": {"built-in function": [[1, "st_asbinary"], [1, "st_asgeojson"], [1, "st_astext"], [1, "st_aswkb"], [1, "st_aswkt"], [2, "st_geomfromgeojson"], [2, "st_geomfromwkb"], [2, "st_geomfromwkt"], [2, "st_makeline"], [2, "st_makepolygon"], [2, "st_point"], [3, "mos.read"], [3, "spark.read.format"], [4, "id0"], [4, "id1"], [4, "rst_bandmetadata"], [4, "rst_boundingbox"], [4, "rst_clip"], [4, "rst_combineavg"], [4, "rst_combineavgagg"], [4, "rst_frombands"], [4, "rst_fromfile"], [4, "rst_georeference"], [4, "rst_getnodata"], [4, "rst_getsubdataset"], [4, "rst_height"], [4, "rst_initnodata"], [4, "rst_isempty"], [4, "rst_memsize"], [4, "rst_merge"], [4, "rst_mergeagg"], [4, "rst_metadata"], [4, "rst_ndvi"], [4, "rst_numbands"], [4, "rst_pixelheight"], [4, "rst_pixelwidth"], [4, "rst_rastertogridavg"], [4, "rst_rastertogridcount"], [4, "rst_rastertogridmax"], [4, "rst_rastertogridmedian"], [4, "rst_rastertogridmin"], [4, "rst_rastertoworldcoord"], [4, "rst_rastertoworldcoordy"], [4, "rst_retile"], [4, "rst_rotation"], [4, "rst_scalex"], [4, "rst_scaley"], [4, "rst_setnodata"], [4, "rst_skewx"], [4, "rst_srid"], [4, "rst_subdatasets"], [4, "rst_subdivide"], [4, "rst_summary"], [4, "rst_tessellate"], [4, "rst_tooverlappingtiles"], [4, "rst_tryopen"], [4, "rst_upperleftx"], [4, "rst_upperlefty"], [4, "rst_width"], [4, "rst_worldtorastercoord"], [4, "rst_worldtorastercoordx"], [4, "rst_worldtorastercoordy"], [6, "grid_cell_intersection_agg"], [6, "grid_cell_union_agg"], [6, "st_intersection_aggregate"], [6, "st_intersects_aggregate"], [6, "st_union_agg"], [7, "flatten_polygons"], [7, "st_area"], [7, "st_buffer"], [7, "st_bufferloop"], [7, "st_centroid"], [7, "st_centroid2D"], [7, "st_convexhull"], [7, "st_difference"], [7, "st_dimension"], [7, "st_distance"], [7, "st_dump"], [7, "st_envelope"], [7, "st_geometrytype"], [7, "st_hasvalidcoordinates"], [7, "st_haversine"], [7, "st_intersection"], [7, "st_isvalid"], [7, "st_length"], [7, "st_numpoints"], [7, "st_perimeter"], [7, "st_rotate"], [7, "st_scale"], [7, "st_setsrid"], [7, "st_simplify"], [7, "st_srid"], [7, "st_transform"], [7, "st_translate"], [7, "st_unaryunion"], [7, "st_union"], [7, "st_x"], [7, "st_xmax"], [7, "st_xmin"], [7, "st_y"], [7, "st_ymax"], [7, "st_ymin"], [7, "st_zmax"], [7, "st_zmin"], [8, "grid_boundary"], [8, "grid_boundaryaswkb"], [8, "grid_cell_intersection"], [8, "grid_cell_union"], [8, "grid_cellarea"], [8, "grid_cellkloop"], [8, "grid_cellkloopexplode"], [8, "grid_cellkring"], [8, "grid_cellkringexplode"], [8, "grid_geometrykloop"], [8, "grid_geometrykloopexplode"], [8, "grid_geometrykring"], [8, "grid_geometrykringexplode"], [8, "grid_longlatascellid"], [8, "grid_pointascellid"], [8, "grid_polyfill"], [8, "grid_tessellate"], [8, "grid_tessellateexplode"], [8, "mosaic_explode"], [8, "mosaicfill"], [8, "point_index_geom"], [8, "point_index_lonlat"], [8, "polyfill"], [9, "st_contains"], [9, "st_intersects"], [9, "st_within"], [10, "id0"], [10, "id1"], [10, "id2"], [10, "read.format"]], "st_asbinary()": [[1, "st_asbinary"]], "st_asgeojson()": [[1, "st_asgeojson"]], "st_astext()": [[1, "st_astext"]], "st_aswkb()": [[1, "st_aswkb"]], "st_aswkt()": [[1, "st_aswkt"]], "st_geomfromgeojson()": [[2, "st_geomfromgeojson"]], "st_geomfromwkb()": [[2, "st_geomfromwkb"]], "st_geomfromwkt()": [[2, "st_geomfromwkt"]], "st_makeline()": [[2, "st_makeline"]], "st_makepolygon()": [[2, "st_makepolygon"]], "st_point()": [[2, "st_point"]], "mos.read()": [[3, "mos.read"]], "spark.read.format()": [[3, "spark.read.format"]], "rst_bandmetadata()": [[4, "rst_bandmetadata"]], "rst_boundingbox()": [[4, "rst_boundingbox"]], "rst_clip()": [[4, "rst_clip"]], "rst_combineavg()": [[4, "rst_combineavg"]], "rst_combineavgagg()": [[4, "rst_combineavgagg"]], "rst_frombands()": [[4, "rst_frombands"]], "rst_fromfile()": [[4, "rst_fromfile"]], "rst_georeference()": [[4, "rst_georeference"]], "rst_getnodata()": [[4, "rst_getnodata"]], "rst_getsubdataset()": [[4, "rst_getsubdataset"]], "rst_height()": [[4, "rst_height"]], "rst_initnodata()": [[4, "rst_initnodata"]], "rst_isempty()": [[4, "rst_isempty"]], "rst_memsize()": [[4, "rst_memsize"]], "rst_merge()": [[4, "rst_merge"]], "rst_mergeagg()": [[4, "rst_mergeagg"]], "rst_metadata()": [[4, "rst_metadata"]], "rst_ndvi()": [[4, "rst_ndvi"]], "rst_numbands()": [[4, "rst_numbands"]], "rst_pixelheight()": [[4, "rst_pixelheight"]], "rst_pixelwidth()": [[4, "rst_pixelwidth"]], "rst_rastertogridavg()": [[4, "rst_rastertogridavg"]], "rst_rastertogridcount()": [[4, "rst_rastertogridcount"]], "rst_rastertogridmax()": [[4, "rst_rastertogridmax"]], "rst_rastertogridmedian()": [[4, "rst_rastertogridmedian"]], "rst_rastertogridmin()": [[4, "rst_rastertogridmin"]], "rst_rastertoworldcoord()": [[4, "id0"], [4, "rst_rastertoworldcoord"]], "rst_rastertoworldcoordy()": [[4, "rst_rastertoworldcoordy"]], "rst_retile()": [[4, "rst_retile"]], "rst_rotation()": [[4, "rst_rotation"]], "rst_scalex()": [[4, "rst_scalex"]], "rst_scaley()": [[4, "rst_scaley"]], "rst_setnodata()": [[4, "rst_setnodata"]], "rst_skewx()": [[4, "id1"], [4, "rst_skewx"]], "rst_srid()": [[4, "rst_srid"]], "rst_subdatasets()": [[4, "rst_subdatasets"]], "rst_subdivide()": [[4, "rst_subdivide"]], "rst_summary()": [[4, "rst_summary"]], "rst_tessellate()": [[4, "rst_tessellate"]], "rst_tooverlappingtiles()": [[4, "rst_tooverlappingtiles"]], "rst_tryopen()": [[4, "rst_tryopen"]], "rst_upperleftx()": [[4, "rst_upperleftx"]], "rst_upperlefty()": [[4, "rst_upperlefty"]], "rst_width()": [[4, "rst_width"]], "rst_worldtorastercoord()": [[4, "rst_worldtorastercoord"]], "rst_worldtorastercoordx()": [[4, "rst_worldtorastercoordx"]], "rst_worldtorastercoordy()": [[4, "rst_worldtorastercoordy"]], "grid_cell_intersection_agg()": [[6, "grid_cell_intersection_agg"]], "grid_cell_union_agg()": [[6, "grid_cell_union_agg"]], "st_intersection_aggregate()": [[6, "st_intersection_aggregate"]], "st_intersects_aggregate()": [[6, "st_intersects_aggregate"]], "st_union_agg()": [[6, "st_union_agg"]], "flatten_polygons()": [[7, "flatten_polygons"]], "st_area()": [[7, "st_area"]], "st_buffer()": [[7, "st_buffer"]], "st_bufferloop()": [[7, "st_bufferloop"]], "st_centroid()": [[7, "st_centroid"]], "st_centroid2d()": [[7, "st_centroid2D"]], "st_convexhull()": [[7, "st_convexhull"]], "st_difference()": [[7, "st_difference"]], "st_dimension()": [[7, "st_dimension"]], "st_distance()": [[7, "st_distance"]], "st_dump()": [[7, "st_dump"]], "st_envelope()": [[7, "st_envelope"]], "st_geometrytype()": [[7, "st_geometrytype"]], "st_hasvalidcoordinates()": [[7, "st_hasvalidcoordinates"]], "st_haversine()": [[7, "st_haversine"]], "st_intersection()": [[7, "st_intersection"]], "st_isvalid()": [[7, "st_isvalid"]], "st_length()": [[7, "st_length"]], "st_numpoints()": [[7, "st_numpoints"]], "st_perimeter()": [[7, "st_perimeter"]], "st_rotate()": [[7, "st_rotate"]], "st_scale()": [[7, "st_scale"]], "st_setsrid()": [[7, "st_setsrid"]], "st_simplify()": [[7, "st_simplify"]], "st_srid()": [[7, "st_srid"]], "st_transform()": [[7, "st_transform"]], "st_translate()": [[7, "st_translate"]], "st_unaryunion()": [[7, "st_unaryunion"]], "st_union()": [[7, "st_union"]], "st_x()": [[7, "st_x"]], "st_xmax()": [[7, "st_xmax"]], "st_xmin()": [[7, "st_xmin"]], "st_y()": [[7, "st_y"]], "st_ymax()": [[7, "st_ymax"]], "st_ymin()": [[7, "st_ymin"]], "st_zmax()": [[7, "st_zmax"]], "st_zmin()": [[7, "st_zmin"]], "grid_boundary()": [[8, "grid_boundary"]], "grid_boundaryaswkb()": [[8, "grid_boundaryaswkb"]], "grid_cell_intersection()": [[8, "grid_cell_intersection"]], "grid_cell_union()": [[8, "grid_cell_union"]], "grid_cellarea()": [[8, "grid_cellarea"]], "grid_cellkloop()": [[8, "grid_cellkloop"]], "grid_cellkloopexplode()": [[8, "grid_cellkloopexplode"]], "grid_cellkring()": [[8, "grid_cellkring"]], "grid_cellkringexplode()": [[8, "grid_cellkringexplode"]], "grid_geometrykloop()": [[8, "grid_geometrykloop"]], "grid_geometrykloopexplode()": [[8, "grid_geometrykloopexplode"]], "grid_geometrykring()": [[8, "grid_geometrykring"]], "grid_geometrykringexplode()": [[8, "grid_geometrykringexplode"]], "grid_longlatascellid()": [[8, "grid_longlatascellid"]], "grid_pointascellid()": [[8, "grid_pointascellid"]], "grid_polyfill()": [[8, "grid_polyfill"]], "grid_tessellate()": [[8, "grid_tessellate"]], "grid_tessellateexplode()": [[8, "grid_tessellateexplode"]], "mosaic_explode()": [[8, "mosaic_explode"]], "mosaicfill()": [[8, "mosaicfill"]], "point_index_geom()": [[8, "point_index_geom"]], "point_index_lonlat()": [[8, "point_index_lonlat"]], "polyfill()": [[8, "polyfill"]], "st_contains()": [[9, "st_contains"]], "st_intersects()": [[9, "st_intersects"]], "st_within()": [[9, "st_within"]], "read.format()": [[10, "id0"], [10, "id1"], [10, "id2"], [10, "read.format"]]}}) \ No newline at end of file diff --git a/v0.3.x/usage/automatic-sql-registration.html b/v0.3.x/usage/automatic-sql-registration.html deleted file mode 100644 index e98e1b8d2..000000000 --- a/v0.3.x/usage/automatic-sql-registration.html +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - - Automatic SQL registration — Mosaic - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Automatic SQL registration

-

If you are looking to use only the SQL functions exposed by Mosaic, without the need -to execute any Python or Scala set-up code, this can be achieved through the automatic SQL -registration process described on this page.

-

An example of when this might be useful would be connecting a business intelligence tool -to your Spark / Databricks cluster to perform spatial queries or integrating Spark -with a geospatial middleware component such as [Geoserver](https://geoserver.org/).

-
-

Pre-requisites

-

In order to use Mosaic, you must have access to a Databricks cluster running -Databricks Runtime 10.0 or higher (11.2 with photon or higher is recommended). -If you have cluster creation permissions in your Databricks -workspace, you can create a cluster using the instructions -here.

-

You will also need “Can Manage” permissions on this cluster in order to attach init script -to your cluster. A workspace administrator will be able to grant -these permissions and more information about cluster permissions can be found -in our documentation -here.

-
-
-

Installation

-

To install Mosaic on your Databricks cluster, take the following steps:

-
    -
  1. Upload Mosaic jar to a dedicated dbfs location. E.g. dbfs:/FileStore/mosaic/jars/.

  2. -
  3. Create an init script that fetches the mosaic jar and copies it to databricks/jars.

    -
    -
    %sh
    -
    -# Create init script directory for Mosaic
    -mkdir -p /dbfs/FileStore/mosaic/scripts
    -
    -# Create init script
    -cat > /dbfs/FileStore/mosaic/scripts/mosaic-init.sh <<'EOF'
    -#!/bin/bash
    -#
    -# File: mosaic-init.sh
    -# On cluster startup, this script will copy the Mosaic jars to the cluster's default jar directory.
    -
    -cp /dbfs/FileStore/mosaic/jars/*.jar /databricks/jars
    -
    -EOF
    -
    -
    -
    -
  4. -
  5. Configure the init script for the cluster following the instructions here.

  6. -
  7. Add the following spark configuration values for your cluster following the instructions here.

    -
    -
    # H3 or BNG
    -spark.databricks.labs.mosaic.index.system H3
    -# JTS only
    -spark.databricks.labs.mosaic.geometry.api JTS
    -# MosaicSQL or MosaicSQLDefault, MosaicSQLDefault corresponds to (H3, JTS)
    -spark.sql.extensions com.databricks.labs.mosaic.sql.extensions.MosaicSQL
    -
    -
    -
    -
  8. -
-
-
-

Testing

-

To test the installation, create a new Python notebook and run the following command:

-
spark.sql("""show functions""").where("startswith(function, 'st_')").display()
-
-
-

You should see all the supported functions registered by Mosaic appear in the output.

-
-

Warning

-

Issue 317: https://github.com/databrickslabs/mosaic/issues/317 -Mosaic jar needs to be installed via init script and not through the cluster UI. -Automatic SQL registration needs to happen at the cluster start up time when Spark context is created. -Cluster UI installed libraries are made available too late and the Automatic SQL registration -will not work, but there is no way to print an Error message in that case.

-
-
-

Warning

-

Issue 297: https://github.com/databrickslabs/mosaic/issues/297 -Since Mosaic V0.3.6 Automatic SQL Registration can fail with the following error message: -“java.lang.Exception: spark.databricks.labs.mosaic.raster.api”. This is due to a missing key in the spark -configuration. The issue has been fixed since Mosaic V0.3.10. For releases between V0.3.6 and V0.3.10 -please add the following configuration to your cluster spark configs: (spark.databricks.labs.mosaic.raster.api, “GDAL”), -or alternatively in python/scala code: spark.conf.set(“spark.databricks.labs.mosaic.raster.api”, “GDAL”)

-
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/v0.3.x/usage/grid-indexes-bng.html b/v0.3.x/usage/grid-indexes-bng.html deleted file mode 100644 index 3ecdd5564..000000000 --- a/v0.3.x/usage/grid-indexes-bng.html +++ /dev/null @@ -1,214 +0,0 @@ - - - - - - - BNG - British National Grid — Mosaic - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

BNG - British National Grid

-
-

Intro

-

The Ordnance Survey National Grid reference system -also known as the British National Grid (BNG) is a grid index system defined over the territory of Great Britain and -is extensively being used by many organizations in UK for indexing their geospatial data. -Mosaic supports multiple different grid indexes. One of the supported index systems is the British National Grid. -All of the operations that can be performed on H3 grid system are transferable to BNG grid system, and in general, are -transferable to a generic index system.

-Ordnance Survey British National Grid -
-
-

Configuring BNG

-

The default index system for Mosaic is H3. If the users wish to use BNG instead, this can be achieved using spark -configurations. Spark provides an easy way to supply configuration parameters using spark.conf.set API.

-
-
import mosaic as mos
-
-spark.conf.set("spark.databricks.labs.mosaic.index.system", "BNG")
-mos.enable_mosaic(spark, dbutils)
-
-
-
-
-
-

Coordinate Reference System

-

British National Grid (BNG) expects that coordinates are provided in EPSG:27700 coordinate reference system. -EPSG:27700 CRS is also referred to as “OSGB36 / British National Grid – United Kingdom Ordnance Survey”. -For more information on the CRS you can visit EPSG:27700.

-

If your data in is not provided in EPSG:27700 we would recommend to either switch the indexing strategy to H3 -or to reproject the data from source CRS to EPSG:27700. Mosaic provides the functionality to set CRS ID -even for geometries that arrive as WKT and WKB (the formats do not capture the CRS information and this information -has to be set manually).

-
-
### CRS codes assume EPSG
-df = df.withColumn("geometry", mos.st_setsrid("geometry", 4326))
-df = df.withColumn("geometry", mos.st_transform("geometry", 27700))
-
-
-
-

Mosaic provides functionality to verify provided geometries have all of their vertices within bounds of the -specified CRS. If the CRS isn’t EPSG:4326 then the functionality allows to prefer checks on the coordinates -before and/or after reprojection. This allows the end users to filter out geometries that would not be -possible to index with BNG.

-
-
df = df.withColumn("is_within_bng_bounds", st_hasvalidcoordinates(geometry, 'EPSG:27700', 'reprojected_bounds'))
-
-
-
-

Mosaic supports all indexing operations for both H3 and BNG. -Please see Spatial Indexing for supported indexing operations.

-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/v0.3.x/usage/grid-indexes.html b/v0.3.x/usage/grid-indexes.html deleted file mode 100644 index 922b47316..000000000 --- a/v0.3.x/usage/grid-indexes.html +++ /dev/null @@ -1,613 +0,0 @@ - - - - - - - Using grid index systems in Mosaic — Mosaic - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Using grid index systems in Mosaic

-
-
[ ]:
-
-
-
from pyspark.sql.functions import *
-from mosaic import enable_mosaic
-enable_mosaic(spark, dbutils)
-
-
-
-
-
-
-
- -
-
-

Set operations over big geospatial datasets become very expensive without some form of spatial indexing.

-

Spatial indexes not only allow operations like point-in-polygon joins to be partitioned but, if only approximate results are required, can be used to reduce these to deterministic SQL joins directly on the indexes.

-

example h3 point-in-poly image

-

The workflow for a point-in-poly spatial join might look like the following:

-
-

1. Read the source point and polygon datasets.

-
-
[ ]:
-
-
-
drop_cols = [
-  "rate_code_id", "store_and_fwd_flag", "dropoff_longitude",
-  "dropoff_latitude", "payment_type", "fare_amount",
-  "extra", "mta_tax", "tip_amount", "tolls_amount",
-  "total_amount"
-]
-
-trips = (
-  spark.table("delta.`/databricks-datasets/nyctaxi/tables/nyctaxi_yellow`")
-  .drop(*drop_cols)
-  .limit(5_000_000)
-  .repartition(sc.defaultParallelism * 20)
-)
-
-trips.show()
-
-
-
-
-
-
-
- -
+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+ -vendor_id| pickup_datetime| dropoff_datetime|passenger_count|trip_distance|pickup_longitude|pickup_latitude| -+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+ - CMT|2009-01-01 20:07:33|2009-01-01 20:12:28| 1| 0.8| -74.001041| 40.731| - CMT|2009-01-06 15:29:12|2009-01-06 15:51:57| 2| 3.3| -73.996489| 40.725742| - CMT|2010-02-14 17:42:16|2010-02-14 17:55:03| 1| 3.4| -74.002949| 40.734254| - CMT|2010-02-11 18:19:01|2010-02-11 18:27:54| 1| 1.5| -73.998133| 40.682463| - VTS|2009-04-29 12:26:00|2009-04-29 12:35:00| 3| 2.05| -74.001332| 40.72006| - VTS|2009-04-24 15:03:00|2009-04-24 15:23:00| 2| 2.89| -73.989952| 40.734625| - CMT|2010-02-28 13:55:44|2010-02-28 14:02:37| 1| 1.2| -74.006015| 40.735279| - VTS|2009-09-27 08:46:00|2009-09-27 08:59:00| 1| 3.97| -74.000148| 40.717468| - CMT|2010-02-18 09:48:52|2010-02-18 10:08:38| 1| 3.0| -73.995177| 40.725297| - CMT|2009-04-09 20:33:44|2009-04-09 20:39:33| 2| 0.6| -73.990133| 40.729321| - CMT|2010-02-13 22:41:10|2010-02-13 23:07:04| 1| 4.2| -74.009175| 40.706284| - CMT|2009-01-25 20:06:51|2009-01-25 20:12:37| 1| 1.3| -74.007384| 40.717929| - VTS|2010-02-27 18:19:00|2010-02-27 18:38:00| 1| 4.2| -74.011512| 40.710588| - VTS|2010-02-15 10:17:00|2010-02-15 10:24:00| 1| 1.74| -74.016442| 40.711617| - CMT|2009-12-26 18:45:49|2009-12-26 18:59:08| 1| 4.8| -74.01014| 40.712263| - CMT|2009-12-06 01:00:07|2009-12-06 01:11:41| 2| 4.2| -74.002505| 40.729001| - VTS|2009-10-04 14:36:00|2009-10-04 14:42:00| 1| 1.13| -74.006767| 40.718942| - CMT|2009-01-18 00:20:50|2009-01-18 00:36:29| 3| 2.1| -73.993258| 40.721401| - VTS|2009-05-18 13:24:00|2009-05-18 13:33:00| 1| 1.91| -73.992785| 40.730412| - VTS|2009-11-11 21:51:00|2009-11-11 22:13:00| 5| 4.71| -74.010065| 40.733383| -+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+ -only showing top 20 rows - -
-
-
-
[ ]:
-
-
-
from mosaic import st_geomfromgeojson
-
-user = spark.sql("select current_user() as user").collect()[0]["user"]
-
-neighbourhoods = (
-  spark.read.format("json")
-  .load(f"dbfs:/FileStore/shared_uploads/{user}/NYC_Taxi_Zones.geojson")
-  .repartition(sc.defaultParallelism)
-  .withColumn("geometry", st_geomfromgeojson(to_json(col("geometry"))))
-  .select("properties.*", "geometry")
-  .drop("shape_area", "shape_leng")
-)
-
-neighbourhoods.show()
-
-
-
-
-
-
-
- -
+-------------+-----------+--------+-------------------+--------------------+ - borough|location_id|objectid| zone| geometry| -+-------------+-----------+--------+-------------------+--------------------+ - Brooklyn| 123| 123| Homecrest|{6, 4326, [[[-73....| - Manhattan| 153| 153| Marble Hill|{6, 4326, [[[-73....| - Brooklyn| 112| 112| Greenpoint|{6, 4326, [[[-73....| - Manhattan| 233| 233|UN/Turtle Bay South|{6, 4326, [[[-73....| - Manhattan| 43| 43| Central Park|{6, 4326, [[[-73....| - Queens| 201| 201| Rockaway Park|{6, 4326, [[[-73....| - Queens| 131| 131| Jamaica Estates|{6, 4326, [[[-73....| - Brooklyn| 111| 111|Green-Wood Cemetery|{6, 4326, [[[-73....| - Queens| 226| 226| Sunnyside|{6, 4326, [[[-73....| - Queens| 129| 129| Jackson Heights|{6, 4326, [[[-73....| - Manhattan| 120| 120| Highbridge Park|{6, 4326, [[[-73....| - Brooklyn| 76| 76| East New York|{6, 4326, [[[-73....| - Manhattan| 24| 24| Bloomingdale|{6, 4326, [[[-73....| - Manhattan| 202| 202| Roosevelt Island|{6, 4326, [[[-73....| - Manhattan| 100| 100| Garment District|{6, 4326, [[[-73....| -Staten Island| 251| 251| Westerleigh|{6, 4326, [[[-74....| - Manhattan| 74| 74| East Harlem North|{6, 4326, [[[-73....| - Queens| 98| 98| Fresh Meadows|{6, 4326, [[[-73....| - Manhattan| 211| 211| SoHo|{6, 4326, [[[-74....| - Bronx| 174| 174| Norwood|{6, 4326, [[[-73....| -+-------------+-----------+--------+-------------------+--------------------+ -only showing top 20 rows - -
-
-
-
-

2. Compute the resolution of index required to optimize the join.

-
-
[ ]:
-
-
-
from mosaic import MosaicFrame
-
-neighbourhoods_mdf = MosaicFrame(neighbourhoods, "geometry")
-help(neighbourhoods_mdf.get_optimal_resolution)
-
-
-
-
-
-
-
- -
Help on method get_optimal_resolution in module mosaic.core.mosaic_frame: - -get_optimal_resolution(sample_rows: Union[int, NoneType] = None, sample_fraction: Union[float, NoneType] = None) -> int method of mosaic.core.mosaic_frame.MosaicFrame instance - Analyzes the geometries in the currently selected geometry column and proposes an optimal - grid-index resolution. - - Provide either `sample_rows` or `sample_fraction` parameters to control how much data is passed to the analyzer. - (Providing too little data to the analyzer may result in a `NotEnoughGeometriesException`) - - Parameters - ---------- - sample_rows: int, optional - The number of rows to sample. - sample_fraction: float, optional - The proportion of rows to sample. - - Returns - ------- - int - The recommended grid-index resolution to apply to this MosaicFrame. - -
-
-
-
[ ]:
-
-
-
(resolution := neighbourhoods_mdf.get_optimal_resolution(sample_fraction=1.))
-
-
-
-
-
-
-
- -
Out[15]: 9
-
-
-
-

3. Apply the index to the set of points in your left-hand dataframe.

-

This will generate an index value that corresponds to the grid ‘cell’ that this point occupies.

-
-
[ ]:
-
-
-
from mosaic import grid_longlatascellid
-indexed_trips = trips.withColumn("ix", grid_longlatascellid(lon="pickup_longitude", lat="pickup_latitude", resolution=lit(resolution)))
-indexed_trips.show()
-
-
-
-
-
-
-
- -
+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------------+ -vendor_id| pickup_datetime| dropoff_datetime|passenger_count|trip_distance|pickup_longitude|pickup_latitude| ix| -+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------------+ - DDS|2009-01-17 18:49:57|2009-01-17 18:56:29| 3| 1.2| -74.004043| 40.733409|617733151092113407| - DDS|2009-12-01 00:47:52|2009-12-01 01:00:16| 1| 3.4| -73.991702| 40.726342|617733151087132671| - CMT|2009-02-09 16:50:21|2009-02-09 17:02:47| 1| 2.6| -73.999673| 40.733586|617733123805806591| - CMT|2009-12-07 07:15:47|2009-12-07 07:32:07| 1| 3.8| -74.01211| 40.716893|617733151084773375| - VTS|2009-10-16 22:02:00|2009-10-16 22:08:00| 1| 1.1| -74.010903| 40.71624|617733151084773375| - VTS|2009-12-23 22:13:00|2009-12-23 22:18:00| 1| 0.37| -74.002343| 40.73366|617733151092113407| - VTS|2009-12-12 01:24:00|2009-12-12 01:38:00| 2| 3.55| -74.002565| 40.728188|617733151091326975| - CMT|2009-12-07 13:10:37|2009-12-07 13:13:45| 1| 0.5| -73.999184| 40.73428|617733123805806591| - CMT|2009-11-08 22:20:44|2009-11-08 22:31:23| 1| 1.9| -74.003029| 40.733385|617733151092113407| - VTS|2009-12-27 20:01:00|2009-12-27 20:04:00| 1| 1.04| -74.000227| 40.732603|617733151092375551| - VTS|2009-02-13 14:33:00|2009-02-13 14:50:00| 3| 1.59| -74.006535| 40.732303|617733151092637695| - CMT|2009-11-15 21:13:32|2009-11-15 21:25:56| 3| 3.0| -73.998795| 40.730621|617733151092375551| - VTS|2009-01-08 18:13:00|2009-01-08 18:33:00| 2| 4.18| -74.0079| 40.712012|617733151021334527| - CMT|2009-11-30 13:30:13|2009-11-30 13:41:55| 1| 1.6| -74.004487| 40.734072|617733151092637695| - CMT|2009-01-11 20:02:22|2009-01-11 20:08:15| 1| 1.0| -74.004493| 40.713349|617733151020810239| - CMT|2009-12-30 18:46:08|2009-12-30 19:02:23| 1| 2.3| -74.010798| 40.716717|617733151084773375| - CMT|2009-11-18 21:50:12|2009-11-18 22:05:19| 1| 5.8| -73.992515| 40.694106|617733151038111743| - VTS|2009-11-21 12:51:00|2009-11-21 13:27:00| 1| 14.18| -73.9923| 40.715218|617733151109414911| - CMT|2009-01-20 09:34:49|2009-01-20 09:37:15| 1| 0.4| -74.0027| 40.733479|617733151092113407| - VTS|2009-01-03 07:07:00|2009-01-03 07:18:00| 1| 7.81| -73.994358| 40.690345|617733151037325311| -+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------------+ -only showing top 20 rows - -
-
-
-
-

4. Compute the set of indices that fully covers each polygon in the right-hand dataframe

-

This is commonly referred to as a polyfill operation.

-
-
[ ]:
-
-
-
from mosaic import grid_polyfill
-
-indexed_neighbourhoods = (
-  neighbourhoods
-  .select("*", grid_polyfill("geometry", lit(resolution)).alias("ix_set"))
-  .drop("geometry")
-)
-
-indexed_neighbourhoods.show()
-
-
-
-
-
-
-
- -
+-------------+-----------+--------+-------------------+--------------------+ - borough|location_id|objectid| zone| ix_set| -+-------------+-----------+--------+-------------------+--------------------+ - Brooklyn| 123| 123| Homecrest|[6177331514226769...| - Manhattan| 153| 153| Marble Hill|[6177331229858201...| - Brooklyn| 112| 112| Greenpoint|[6177331237832622...| - Manhattan| 233| 233|UN/Turtle Bay South|[6177331238679347...| - Manhattan| 43| 43| Central Park|[6177331225792348...| - Queens| 201| 201| Rockaway Park|[6177331357831659...| - Queens| 131| 131| Jamaica Estates|[6177331242658693...| - Brooklyn| 111| 111|Green-Wood Cemetery|[6177331522277212...| - Queens| 226| 226| Sunnyside|[6177331238566625...| - Queens| 129| 129| Jackson Heights|[6177331243222302...| - Manhattan| 120| 120| Highbridge Park|[6177331231976325...| - Brooklyn| 76| 76| East New York|[6177331236938711...| - Manhattan| 24| 24| Bloomingdale|[6177331226458193...| - Manhattan| 202| 202| Roosevelt Island|[6177331237777571...| - Manhattan| 100| 100| Garment District|[6177331509717893...| -Staten Island| 251| 251| Westerleigh|[6177331466128588...| - Manhattan| 74| 74| East Harlem North|[6177331226508001...| - Queens| 98| 98| Fresh Meadows|[6177331242448977...| - Manhattan| 211| 211| SoHo|[6177331510784819...| - Bronx| 174| 174| Norwood|[6177331205497159...| -+-------------+-----------+--------+-------------------+--------------------+ -only showing top 20 rows - -
-
-
-
-

5. ‘Explode’ the polygon index dataframe, such that each polygon index becomes a row in a new dataframe.

-
-
[ ]:
-
-
-
exploded_indexed_neighbourhoods = (
-  indexed_neighbourhoods
-  .withColumn("ix", explode("ix_set"))
-  .drop("ix_set")
-)
-
-exploded_indexed_neighbourhoods.show()
-
-
-
-
-
-
-
- -
+--------+-----------+--------+---------+------------------+ - borough|location_id|objectid| zone| ix| -+--------+-----------+--------+---------+------------------+ -Brooklyn| 123| 123|Homecrest|617733151422676991| -Brooklyn| 123| 123|Homecrest|617733151503417343| -Brooklyn| 123| 123|Homecrest|617733151502893055| -Brooklyn| 123| 123|Homecrest|617733151502368767| -Brooklyn| 123| 123|Homecrest|617733151492407295| -Brooklyn| 123| 123|Homecrest|617733151488737279| -Brooklyn| 123| 123|Homecrest|617733151484542975| -Brooklyn| 123| 123|Homecrest|617733151484018687| -Brooklyn| 123| 123|Homecrest|617733151483494399| -Brooklyn| 123| 123|Homecrest|617733151425560575| -Brooklyn| 123| 123|Homecrest|617733151424511999| -Brooklyn| 123| 123|Homecrest|617733151423463423| -Brooklyn| 123| 123|Homecrest|617733151511019519| -Brooklyn| 123| 123|Homecrest|617733151505776639| -Brooklyn| 123| 123|Homecrest|617733151505252351| -Brooklyn| 123| 123|Homecrest|617733151504203775| -Brooklyn| 123| 123|Homecrest|617733151503679487| -Brooklyn| 123| 123|Homecrest|617733151503155199| -Brooklyn| 123| 123|Homecrest|617733151502630911| -Brooklyn| 123| 123|Homecrest|617733151502106623| -+--------+-----------+--------+---------+------------------+ -only showing top 20 rows - -
-
-
-
-

6. Join the new left- and right-hand dataframes directly on the index.

-
-
[ ]:
-
-
-
joined_df = (
-  indexed_trips.alias("t")
-  .join(exploded_indexed_neighbourhoods.alias("n"), on="ix", how="inner"))
-joined_df.count()
-
-
-
-
-
-
-
- -
Out[25]: 4934937
-
-
-
-

Final notes

-

Mosaic provides support for Uber’s H3 spatial indexing library as a core part of the API, but we plan to add support for other index systems, including S2 and British National Grid in due course.

-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/v0.3.x/usage/grid-indexes.ipynb b/v0.3.x/usage/grid-indexes.ipynb deleted file mode 100644 index 8b9f0b9dd..000000000 --- a/v0.3.x/usage/grid-indexes.ipynb +++ /dev/null @@ -1,829 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "1deecb01-8ded-4750-a112-5847e410846b", - "showTitle": false, - "title": "" - } - }, - "source": [ - "# Using grid index systems in Mosaic" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "f6311e22-f0a8-4025-b612-4367b5f1cac2", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "from pyspark.sql.functions import *\n", - "from mosaic import enable_mosaic\n", - "enable_mosaic(spark, dbutils)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "e5603057-662b-4bf3-9517-84b35ad7a8b5", - "showTitle": false, - "title": "" - } - }, - "source": [ - "Set operations over big geospatial datasets become very expensive without some form of spatial indexing.\n", - "\n", - "Spatial indexes not only allow operations like point-in-polygon joins to be partitioned but, if only approximate results are required, can be used to reduce these to deterministic SQL joins directly on the indexes." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "c8199fdd-1372-43a4-8edf-f96129f4195a", - "showTitle": false, - "title": "" - } - }, - "source": [ - "![example h3 point-in-poly image](https://databricks.com/wp-content/uploads/2021/01/blog-geospatial-3.jpg)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "39e3cf64-61c9-4930-be5e-91b254cf0984", - "showTitle": false, - "title": "" - } - }, - "source": [ - "The workflow for a point-in-poly spatial join might look like the following:" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "947d6e33-06b5-4ea0-bc55-0fdb5b8e8524", - "showTitle": false, - "title": "" - } - }, - "source": [ - "## 1. Read the source point and polygon datasets." - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "f1474a53-da53-4955-b944-083fdf3a22a1", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+\n", - "vendor_id| pickup_datetime| dropoff_datetime|passenger_count|trip_distance|pickup_longitude|pickup_latitude|\n", - "+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+\n", - " CMT|2009-01-01 20:07:33|2009-01-01 20:12:28| 1| 0.8| -74.001041| 40.731|\n", - " CMT|2009-01-06 15:29:12|2009-01-06 15:51:57| 2| 3.3| -73.996489| 40.725742|\n", - " CMT|2010-02-14 17:42:16|2010-02-14 17:55:03| 1| 3.4| -74.002949| 40.734254|\n", - " CMT|2010-02-11 18:19:01|2010-02-11 18:27:54| 1| 1.5| -73.998133| 40.682463|\n", - " VTS|2009-04-29 12:26:00|2009-04-29 12:35:00| 3| 2.05| -74.001332| 40.72006|\n", - " VTS|2009-04-24 15:03:00|2009-04-24 15:23:00| 2| 2.89| -73.989952| 40.734625|\n", - " CMT|2010-02-28 13:55:44|2010-02-28 14:02:37| 1| 1.2| -74.006015| 40.735279|\n", - " VTS|2009-09-27 08:46:00|2009-09-27 08:59:00| 1| 3.97| -74.000148| 40.717468|\n", - " CMT|2010-02-18 09:48:52|2010-02-18 10:08:38| 1| 3.0| -73.995177| 40.725297|\n", - " CMT|2009-04-09 20:33:44|2009-04-09 20:39:33| 2| 0.6| -73.990133| 40.729321|\n", - " CMT|2010-02-13 22:41:10|2010-02-13 23:07:04| 1| 4.2| -74.009175| 40.706284|\n", - " CMT|2009-01-25 20:06:51|2009-01-25 20:12:37| 1| 1.3| -74.007384| 40.717929|\n", - " VTS|2010-02-27 18:19:00|2010-02-27 18:38:00| 1| 4.2| -74.011512| 40.710588|\n", - " VTS|2010-02-15 10:17:00|2010-02-15 10:24:00| 1| 1.74| -74.016442| 40.711617|\n", - " CMT|2009-12-26 18:45:49|2009-12-26 18:59:08| 1| 4.8| -74.01014| 40.712263|\n", - " CMT|2009-12-06 01:00:07|2009-12-06 01:11:41| 2| 4.2| -74.002505| 40.729001|\n", - " VTS|2009-10-04 14:36:00|2009-10-04 14:42:00| 1| 1.13| -74.006767| 40.718942|\n", - " CMT|2009-01-18 00:20:50|2009-01-18 00:36:29| 3| 2.1| -73.993258| 40.721401|\n", - " VTS|2009-05-18 13:24:00|2009-05-18 13:33:00| 1| 1.91| -73.992785| 40.730412|\n", - " VTS|2009-11-11 21:51:00|2009-11-11 22:13:00| 5| 4.71| -74.010065| 40.733383|\n", - "+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+\n", - "only showing top 20 rows\n", - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+\n|vendor_id| pickup_datetime| dropoff_datetime|passenger_count|trip_distance|pickup_longitude|pickup_latitude|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+\n| CMT|2009-01-01 20:07:33|2009-01-01 20:12:28| 1| 0.8| -74.001041| 40.731|\n| CMT|2009-01-06 15:29:12|2009-01-06 15:51:57| 2| 3.3| -73.996489| 40.725742|\n| CMT|2010-02-14 17:42:16|2010-02-14 17:55:03| 1| 3.4| -74.002949| 40.734254|\n| CMT|2010-02-11 18:19:01|2010-02-11 18:27:54| 1| 1.5| -73.998133| 40.682463|\n| VTS|2009-04-29 12:26:00|2009-04-29 12:35:00| 3| 2.05| -74.001332| 40.72006|\n| VTS|2009-04-24 15:03:00|2009-04-24 15:23:00| 2| 2.89| -73.989952| 40.734625|\n| CMT|2010-02-28 13:55:44|2010-02-28 14:02:37| 1| 1.2| -74.006015| 40.735279|\n| VTS|2009-09-27 08:46:00|2009-09-27 08:59:00| 1| 3.97| -74.000148| 40.717468|\n| CMT|2010-02-18 09:48:52|2010-02-18 10:08:38| 1| 3.0| -73.995177| 40.725297|\n| CMT|2009-04-09 20:33:44|2009-04-09 20:39:33| 2| 0.6| -73.990133| 40.729321|\n| CMT|2010-02-13 22:41:10|2010-02-13 23:07:04| 1| 4.2| -74.009175| 40.706284|\n| CMT|2009-01-25 20:06:51|2009-01-25 20:12:37| 1| 1.3| -74.007384| 40.717929|\n| VTS|2010-02-27 18:19:00|2010-02-27 18:38:00| 1| 4.2| -74.011512| 40.710588|\n| VTS|2010-02-15 10:17:00|2010-02-15 10:24:00| 1| 1.74| -74.016442| 40.711617|\n| CMT|2009-12-26 18:45:49|2009-12-26 18:59:08| 1| 4.8| -74.01014| 40.712263|\n| CMT|2009-12-06 01:00:07|2009-12-06 01:11:41| 2| 4.2| -74.002505| 40.729001|\n| VTS|2009-10-04 14:36:00|2009-10-04 14:42:00| 1| 1.13| -74.006767| 40.718942|\n| CMT|2009-01-18 00:20:50|2009-01-18 00:36:29| 3| 2.1| -73.993258| 40.721401|\n| VTS|2009-05-18 13:24:00|2009-05-18 13:33:00| 1| 1.91| -73.992785| 40.730412|\n| VTS|2009-11-11 21:51:00|2009-11-11 22:13:00| 5| 4.71| -74.010065| 40.733383|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+\nonly showing top 20 rows\n\n
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "drop_cols = [\n", - " \"rate_code_id\", \"store_and_fwd_flag\", \"dropoff_longitude\",\n", - " \"dropoff_latitude\", \"payment_type\", \"fare_amount\",\n", - " \"extra\", \"mta_tax\", \"tip_amount\", \"tolls_amount\",\n", - " \"total_amount\"\n", - "]\n", - "\n", - "trips = (\n", - " spark.table(\"delta.`/databricks-datasets/nyctaxi/tables/nyctaxi_yellow`\")\n", - " .drop(*drop_cols)\n", - " .limit(5_000_000)\n", - " .repartition(sc.defaultParallelism * 20)\n", - ")\n", - "\n", - "trips.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "e3a366bf-4d60-4356-8b7b-eedb0beabc8d", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
+-------------+-----------+--------+-------------------+--------------------+\n", - " borough|location_id|objectid| zone| geometry|\n", - "+-------------+-----------+--------+-------------------+--------------------+\n", - " Brooklyn| 123| 123| Homecrest|{6, 4326, [[[-73....|\n", - " Manhattan| 153| 153| Marble Hill|{6, 4326, [[[-73....|\n", - " Brooklyn| 112| 112| Greenpoint|{6, 4326, [[[-73....|\n", - " Manhattan| 233| 233|UN/Turtle Bay South|{6, 4326, [[[-73....|\n", - " Manhattan| 43| 43| Central Park|{6, 4326, [[[-73....|\n", - " Queens| 201| 201| Rockaway Park|{6, 4326, [[[-73....|\n", - " Queens| 131| 131| Jamaica Estates|{6, 4326, [[[-73....|\n", - " Brooklyn| 111| 111|Green-Wood Cemetery|{6, 4326, [[[-73....|\n", - " Queens| 226| 226| Sunnyside|{6, 4326, [[[-73....|\n", - " Queens| 129| 129| Jackson Heights|{6, 4326, [[[-73....|\n", - " Manhattan| 120| 120| Highbridge Park|{6, 4326, [[[-73....|\n", - " Brooklyn| 76| 76| East New York|{6, 4326, [[[-73....|\n", - " Manhattan| 24| 24| Bloomingdale|{6, 4326, [[[-73....|\n", - " Manhattan| 202| 202| Roosevelt Island|{6, 4326, [[[-73....|\n", - " Manhattan| 100| 100| Garment District|{6, 4326, [[[-73....|\n", - "Staten Island| 251| 251| Westerleigh|{6, 4326, [[[-74....|\n", - " Manhattan| 74| 74| East Harlem North|{6, 4326, [[[-73....|\n", - " Queens| 98| 98| Fresh Meadows|{6, 4326, [[[-73....|\n", - " Manhattan| 211| 211| SoHo|{6, 4326, [[[-74....|\n", - " Bronx| 174| 174| Norwood|{6, 4326, [[[-73....|\n", - "+-------------+-----------+--------+-------------------+--------------------+\n", - "only showing top 20 rows\n", - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
+-------------+-----------+--------+-------------------+--------------------+\n| borough|location_id|objectid| zone| geometry|\n+-------------+-----------+--------+-------------------+--------------------+\n| Brooklyn| 123| 123| Homecrest|{6, 4326, [[[-73....|\n| Manhattan| 153| 153| Marble Hill|{6, 4326, [[[-73....|\n| Brooklyn| 112| 112| Greenpoint|{6, 4326, [[[-73....|\n| Manhattan| 233| 233|UN/Turtle Bay South|{6, 4326, [[[-73....|\n| Manhattan| 43| 43| Central Park|{6, 4326, [[[-73....|\n| Queens| 201| 201| Rockaway Park|{6, 4326, [[[-73....|\n| Queens| 131| 131| Jamaica Estates|{6, 4326, [[[-73....|\n| Brooklyn| 111| 111|Green-Wood Cemetery|{6, 4326, [[[-73....|\n| Queens| 226| 226| Sunnyside|{6, 4326, [[[-73....|\n| Queens| 129| 129| Jackson Heights|{6, 4326, [[[-73....|\n| Manhattan| 120| 120| Highbridge Park|{6, 4326, [[[-73....|\n| Brooklyn| 76| 76| East New York|{6, 4326, [[[-73....|\n| Manhattan| 24| 24| Bloomingdale|{6, 4326, [[[-73....|\n| Manhattan| 202| 202| Roosevelt Island|{6, 4326, [[[-73....|\n| Manhattan| 100| 100| Garment District|{6, 4326, [[[-73....|\n|Staten Island| 251| 251| Westerleigh|{6, 4326, [[[-74....|\n| Manhattan| 74| 74| East Harlem North|{6, 4326, [[[-73....|\n| Queens| 98| 98| Fresh Meadows|{6, 4326, [[[-73....|\n| Manhattan| 211| 211| SoHo|{6, 4326, [[[-74....|\n| Bronx| 174| 174| Norwood|{6, 4326, [[[-73....|\n+-------------+-----------+--------+-------------------+--------------------+\nonly showing top 20 rows\n\n
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "from mosaic import st_geomfromgeojson\n", - "\n", - "user = spark.sql(\"select current_user() as user\").collect()[0][\"user\"]\n", - "\n", - "neighbourhoods = (\n", - " spark.read.format(\"json\")\n", - " .load(f\"dbfs:/FileStore/shared_uploads/{user}/NYC_Taxi_Zones.geojson\")\n", - " .repartition(sc.defaultParallelism)\n", - " .withColumn(\"geometry\", st_geomfromgeojson(to_json(col(\"geometry\"))))\n", - " .select(\"properties.*\", \"geometry\")\n", - " .drop(\"shape_area\", \"shape_leng\")\n", - ")\n", - "\n", - "neighbourhoods.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "ae8cc184-574e-458f-9613-d2225b7a73e8", - "showTitle": false, - "title": "" - } - }, - "source": [ - "## 2. Compute the resolution of index required to optimize the join." - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "08dc48c1-9da2-4f8a-a233-aae456cac972", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
Help on method get_optimal_resolution in module mosaic.core.mosaic_frame:\n", - "\n", - "get_optimal_resolution(sample_rows: Union[int, NoneType] = None, sample_fraction: Union[float, NoneType] = None) -> int method of mosaic.core.mosaic_frame.MosaicFrame instance\n", - " Analyzes the geometries in the currently selected geometry column and proposes an optimal\n", - " grid-index resolution.\n", - " \n", - " Provide either `sample_rows` or `sample_fraction` parameters to control how much data is passed to the analyzer.\n", - " (Providing too little data to the analyzer may result in a `NotEnoughGeometriesException`)\n", - " \n", - " Parameters\n", - " ----------\n", - " sample_rows: int, optional\n", - " The number of rows to sample.\n", - " sample_fraction: float, optional\n", - " The proportion of rows to sample.\n", - " \n", - " Returns\n", - " -------\n", - " int\n", - " The recommended grid-index resolution to apply to this MosaicFrame.\n", - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
Help on method get_optimal_resolution in module mosaic.core.mosaic_frame:\n\nget_optimal_resolution(sample_rows: Union[int, NoneType] = None, sample_fraction: Union[float, NoneType] = None) -> int method of mosaic.core.mosaic_frame.MosaicFrame instance\n Analyzes the geometries in the currently selected geometry column and proposes an optimal\n grid-index resolution.\n \n Provide either `sample_rows` or `sample_fraction` parameters to control how much data is passed to the analyzer.\n (Providing too little data to the analyzer may result in a `NotEnoughGeometriesException`)\n \n Parameters\n ----------\n sample_rows: int, optional\n The number of rows to sample.\n sample_fraction: float, optional\n The proportion of rows to sample.\n \n Returns\n -------\n int\n The recommended grid-index resolution to apply to this MosaicFrame.\n\n
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "from mosaic import MosaicFrame\n", - "\n", - "neighbourhoods_mdf = MosaicFrame(neighbourhoods, \"geometry\")\n", - "help(neighbourhoods_mdf.get_optimal_resolution)" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "50ed9fb7-3521-40fe-856c-8d5ed9b182d3", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
Out[15]: 9
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
Out[15]: 9
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "(resolution := neighbourhoods_mdf.get_optimal_resolution(sample_fraction=1.))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "fccff6d5-da76-44c6-b015-749d3dcad3ca", - "showTitle": false, - "title": "" - } - }, - "source": [ - "## 3. Apply the index to the set of points in your left-hand dataframe.\n", - "This will generate an index value that corresponds to the grid ‘cell’ that this point occupies." - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "aad98fce-a22b-47d0-961d-62007acc23dd", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------------+\n", - "vendor_id| pickup_datetime| dropoff_datetime|passenger_count|trip_distance|pickup_longitude|pickup_latitude| ix|\n", - "+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------------+\n", - " DDS|2009-01-17 18:49:57|2009-01-17 18:56:29| 3| 1.2| -74.004043| 40.733409|617733151092113407|\n", - " DDS|2009-12-01 00:47:52|2009-12-01 01:00:16| 1| 3.4| -73.991702| 40.726342|617733151087132671|\n", - " CMT|2009-02-09 16:50:21|2009-02-09 17:02:47| 1| 2.6| -73.999673| 40.733586|617733123805806591|\n", - " CMT|2009-12-07 07:15:47|2009-12-07 07:32:07| 1| 3.8| -74.01211| 40.716893|617733151084773375|\n", - " VTS|2009-10-16 22:02:00|2009-10-16 22:08:00| 1| 1.1| -74.010903| 40.71624|617733151084773375|\n", - " VTS|2009-12-23 22:13:00|2009-12-23 22:18:00| 1| 0.37| -74.002343| 40.73366|617733151092113407|\n", - " VTS|2009-12-12 01:24:00|2009-12-12 01:38:00| 2| 3.55| -74.002565| 40.728188|617733151091326975|\n", - " CMT|2009-12-07 13:10:37|2009-12-07 13:13:45| 1| 0.5| -73.999184| 40.73428|617733123805806591|\n", - " CMT|2009-11-08 22:20:44|2009-11-08 22:31:23| 1| 1.9| -74.003029| 40.733385|617733151092113407|\n", - " VTS|2009-12-27 20:01:00|2009-12-27 20:04:00| 1| 1.04| -74.000227| 40.732603|617733151092375551|\n", - " VTS|2009-02-13 14:33:00|2009-02-13 14:50:00| 3| 1.59| -74.006535| 40.732303|617733151092637695|\n", - " CMT|2009-11-15 21:13:32|2009-11-15 21:25:56| 3| 3.0| -73.998795| 40.730621|617733151092375551|\n", - " VTS|2009-01-08 18:13:00|2009-01-08 18:33:00| 2| 4.18| -74.0079| 40.712012|617733151021334527|\n", - " CMT|2009-11-30 13:30:13|2009-11-30 13:41:55| 1| 1.6| -74.004487| 40.734072|617733151092637695|\n", - " CMT|2009-01-11 20:02:22|2009-01-11 20:08:15| 1| 1.0| -74.004493| 40.713349|617733151020810239|\n", - " CMT|2009-12-30 18:46:08|2009-12-30 19:02:23| 1| 2.3| -74.010798| 40.716717|617733151084773375|\n", - " CMT|2009-11-18 21:50:12|2009-11-18 22:05:19| 1| 5.8| -73.992515| 40.694106|617733151038111743|\n", - " VTS|2009-11-21 12:51:00|2009-11-21 13:27:00| 1| 14.18| -73.9923| 40.715218|617733151109414911|\n", - " CMT|2009-01-20 09:34:49|2009-01-20 09:37:15| 1| 0.4| -74.0027| 40.733479|617733151092113407|\n", - " VTS|2009-01-03 07:07:00|2009-01-03 07:18:00| 1| 7.81| -73.994358| 40.690345|617733151037325311|\n", - "+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------------+\n", - "only showing top 20 rows\n", - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------------+\n|vendor_id| pickup_datetime| dropoff_datetime|passenger_count|trip_distance|pickup_longitude|pickup_latitude| ix|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------------+\n| DDS|2009-01-17 18:49:57|2009-01-17 18:56:29| 3| 1.2| -74.004043| 40.733409|617733151092113407|\n| DDS|2009-12-01 00:47:52|2009-12-01 01:00:16| 1| 3.4| -73.991702| 40.726342|617733151087132671|\n| CMT|2009-02-09 16:50:21|2009-02-09 17:02:47| 1| 2.6| -73.999673| 40.733586|617733123805806591|\n| CMT|2009-12-07 07:15:47|2009-12-07 07:32:07| 1| 3.8| -74.01211| 40.716893|617733151084773375|\n| VTS|2009-10-16 22:02:00|2009-10-16 22:08:00| 1| 1.1| -74.010903| 40.71624|617733151084773375|\n| VTS|2009-12-23 22:13:00|2009-12-23 22:18:00| 1| 0.37| -74.002343| 40.73366|617733151092113407|\n| VTS|2009-12-12 01:24:00|2009-12-12 01:38:00| 2| 3.55| -74.002565| 40.728188|617733151091326975|\n| CMT|2009-12-07 13:10:37|2009-12-07 13:13:45| 1| 0.5| -73.999184| 40.73428|617733123805806591|\n| CMT|2009-11-08 22:20:44|2009-11-08 22:31:23| 1| 1.9| -74.003029| 40.733385|617733151092113407|\n| VTS|2009-12-27 20:01:00|2009-12-27 20:04:00| 1| 1.04| -74.000227| 40.732603|617733151092375551|\n| VTS|2009-02-13 14:33:00|2009-02-13 14:50:00| 3| 1.59| -74.006535| 40.732303|617733151092637695|\n| CMT|2009-11-15 21:13:32|2009-11-15 21:25:56| 3| 3.0| -73.998795| 40.730621|617733151092375551|\n| VTS|2009-01-08 18:13:00|2009-01-08 18:33:00| 2| 4.18| -74.0079| 40.712012|617733151021334527|\n| CMT|2009-11-30 13:30:13|2009-11-30 13:41:55| 1| 1.6| -74.004487| 40.734072|617733151092637695|\n| CMT|2009-01-11 20:02:22|2009-01-11 20:08:15| 1| 1.0| -74.004493| 40.713349|617733151020810239|\n| CMT|2009-12-30 18:46:08|2009-12-30 19:02:23| 1| 2.3| -74.010798| 40.716717|617733151084773375|\n| CMT|2009-11-18 21:50:12|2009-11-18 22:05:19| 1| 5.8| -73.992515| 40.694106|617733151038111743|\n| VTS|2009-11-21 12:51:00|2009-11-21 13:27:00| 1| 14.18| -73.9923| 40.715218|617733151109414911|\n| CMT|2009-01-20 09:34:49|2009-01-20 09:37:15| 1| 0.4| -74.0027| 40.733479|617733151092113407|\n| VTS|2009-01-03 07:07:00|2009-01-03 07:18:00| 1| 7.81| -73.994358| 40.690345|617733151037325311|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------------+\nonly showing top 20 rows\n\n
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "from mosaic import grid_longlatascellid\n", - "indexed_trips = trips.withColumn(\"ix\", grid_longlatascellid(lon=\"pickup_longitude\", lat=\"pickup_latitude\", resolution=lit(resolution)))\n", - "indexed_trips.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "e127e5be-30e4-4507-8aa9-59399290b8f7", - "showTitle": false, - "title": "" - } - }, - "source": [ - "## 4. Compute the set of indices that fully covers each polygon in the right-hand dataframe\n", - "This is commonly referred to as a polyfill operation." - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "06e1f722-8530-47c2-aec5-f0a6cb4f9301", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
+-------------+-----------+--------+-------------------+--------------------+\n", - " borough|location_id|objectid| zone| ix_set|\n", - "+-------------+-----------+--------+-------------------+--------------------+\n", - " Brooklyn| 123| 123| Homecrest|[6177331514226769...|\n", - " Manhattan| 153| 153| Marble Hill|[6177331229858201...|\n", - " Brooklyn| 112| 112| Greenpoint|[6177331237832622...|\n", - " Manhattan| 233| 233|UN/Turtle Bay South|[6177331238679347...|\n", - " Manhattan| 43| 43| Central Park|[6177331225792348...|\n", - " Queens| 201| 201| Rockaway Park|[6177331357831659...|\n", - " Queens| 131| 131| Jamaica Estates|[6177331242658693...|\n", - " Brooklyn| 111| 111|Green-Wood Cemetery|[6177331522277212...|\n", - " Queens| 226| 226| Sunnyside|[6177331238566625...|\n", - " Queens| 129| 129| Jackson Heights|[6177331243222302...|\n", - " Manhattan| 120| 120| Highbridge Park|[6177331231976325...|\n", - " Brooklyn| 76| 76| East New York|[6177331236938711...|\n", - " Manhattan| 24| 24| Bloomingdale|[6177331226458193...|\n", - " Manhattan| 202| 202| Roosevelt Island|[6177331237777571...|\n", - " Manhattan| 100| 100| Garment District|[6177331509717893...|\n", - "Staten Island| 251| 251| Westerleigh|[6177331466128588...|\n", - " Manhattan| 74| 74| East Harlem North|[6177331226508001...|\n", - " Queens| 98| 98| Fresh Meadows|[6177331242448977...|\n", - " Manhattan| 211| 211| SoHo|[6177331510784819...|\n", - " Bronx| 174| 174| Norwood|[6177331205497159...|\n", - "+-------------+-----------+--------+-------------------+--------------------+\n", - "only showing top 20 rows\n", - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
+-------------+-----------+--------+-------------------+--------------------+\n| borough|location_id|objectid| zone| ix_set|\n+-------------+-----------+--------+-------------------+--------------------+\n| Brooklyn| 123| 123| Homecrest|[6177331514226769...|\n| Manhattan| 153| 153| Marble Hill|[6177331229858201...|\n| Brooklyn| 112| 112| Greenpoint|[6177331237832622...|\n| Manhattan| 233| 233|UN/Turtle Bay South|[6177331238679347...|\n| Manhattan| 43| 43| Central Park|[6177331225792348...|\n| Queens| 201| 201| Rockaway Park|[6177331357831659...|\n| Queens| 131| 131| Jamaica Estates|[6177331242658693...|\n| Brooklyn| 111| 111|Green-Wood Cemetery|[6177331522277212...|\n| Queens| 226| 226| Sunnyside|[6177331238566625...|\n| Queens| 129| 129| Jackson Heights|[6177331243222302...|\n| Manhattan| 120| 120| Highbridge Park|[6177331231976325...|\n| Brooklyn| 76| 76| East New York|[6177331236938711...|\n| Manhattan| 24| 24| Bloomingdale|[6177331226458193...|\n| Manhattan| 202| 202| Roosevelt Island|[6177331237777571...|\n| Manhattan| 100| 100| Garment District|[6177331509717893...|\n|Staten Island| 251| 251| Westerleigh|[6177331466128588...|\n| Manhattan| 74| 74| East Harlem North|[6177331226508001...|\n| Queens| 98| 98| Fresh Meadows|[6177331242448977...|\n| Manhattan| 211| 211| SoHo|[6177331510784819...|\n| Bronx| 174| 174| Norwood|[6177331205497159...|\n+-------------+-----------+--------+-------------------+--------------------+\nonly showing top 20 rows\n\n
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "from mosaic import grid_polyfill\n", - "\n", - "indexed_neighbourhoods = (\n", - " neighbourhoods\n", - " .select(\"*\", grid_polyfill(\"geometry\", lit(resolution)).alias(\"ix_set\"))\n", - " .drop(\"geometry\")\n", - ")\n", - "\n", - "indexed_neighbourhoods.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "be2c88fd-9307-4b9a-ada8-fd714142d2d0", - "showTitle": false, - "title": "" - } - }, - "source": [ - "## 5. ‘Explode’ the polygon index dataframe, such that each polygon index becomes a row in a new dataframe." - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "132de00e-753f-49d6-ab3f-82517eef296a", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
+--------+-----------+--------+---------+------------------+\n", - " borough|location_id|objectid| zone| ix|\n", - "+--------+-----------+--------+---------+------------------+\n", - "Brooklyn| 123| 123|Homecrest|617733151422676991|\n", - "Brooklyn| 123| 123|Homecrest|617733151503417343|\n", - "Brooklyn| 123| 123|Homecrest|617733151502893055|\n", - "Brooklyn| 123| 123|Homecrest|617733151502368767|\n", - "Brooklyn| 123| 123|Homecrest|617733151492407295|\n", - "Brooklyn| 123| 123|Homecrest|617733151488737279|\n", - "Brooklyn| 123| 123|Homecrest|617733151484542975|\n", - "Brooklyn| 123| 123|Homecrest|617733151484018687|\n", - "Brooklyn| 123| 123|Homecrest|617733151483494399|\n", - "Brooklyn| 123| 123|Homecrest|617733151425560575|\n", - "Brooklyn| 123| 123|Homecrest|617733151424511999|\n", - "Brooklyn| 123| 123|Homecrest|617733151423463423|\n", - "Brooklyn| 123| 123|Homecrest|617733151511019519|\n", - "Brooklyn| 123| 123|Homecrest|617733151505776639|\n", - "Brooklyn| 123| 123|Homecrest|617733151505252351|\n", - "Brooklyn| 123| 123|Homecrest|617733151504203775|\n", - "Brooklyn| 123| 123|Homecrest|617733151503679487|\n", - "Brooklyn| 123| 123|Homecrest|617733151503155199|\n", - "Brooklyn| 123| 123|Homecrest|617733151502630911|\n", - "Brooklyn| 123| 123|Homecrest|617733151502106623|\n", - "+--------+-----------+--------+---------+------------------+\n", - "only showing top 20 rows\n", - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
+--------+-----------+--------+---------+------------------+\n| borough|location_id|objectid| zone| ix|\n+--------+-----------+--------+---------+------------------+\n|Brooklyn| 123| 123|Homecrest|617733151422676991|\n|Brooklyn| 123| 123|Homecrest|617733151503417343|\n|Brooklyn| 123| 123|Homecrest|617733151502893055|\n|Brooklyn| 123| 123|Homecrest|617733151502368767|\n|Brooklyn| 123| 123|Homecrest|617733151492407295|\n|Brooklyn| 123| 123|Homecrest|617733151488737279|\n|Brooklyn| 123| 123|Homecrest|617733151484542975|\n|Brooklyn| 123| 123|Homecrest|617733151484018687|\n|Brooklyn| 123| 123|Homecrest|617733151483494399|\n|Brooklyn| 123| 123|Homecrest|617733151425560575|\n|Brooklyn| 123| 123|Homecrest|617733151424511999|\n|Brooklyn| 123| 123|Homecrest|617733151423463423|\n|Brooklyn| 123| 123|Homecrest|617733151511019519|\n|Brooklyn| 123| 123|Homecrest|617733151505776639|\n|Brooklyn| 123| 123|Homecrest|617733151505252351|\n|Brooklyn| 123| 123|Homecrest|617733151504203775|\n|Brooklyn| 123| 123|Homecrest|617733151503679487|\n|Brooklyn| 123| 123|Homecrest|617733151503155199|\n|Brooklyn| 123| 123|Homecrest|617733151502630911|\n|Brooklyn| 123| 123|Homecrest|617733151502106623|\n+--------+-----------+--------+---------+------------------+\nonly showing top 20 rows\n\n
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "exploded_indexed_neighbourhoods = (\n", - " indexed_neighbourhoods\n", - " .withColumn(\"ix\", explode(\"ix_set\"))\n", - " .drop(\"ix_set\")\n", - ")\n", - "\n", - "exploded_indexed_neighbourhoods.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "a369d19f-2917-4320-ab4a-e701953db7b5", - "showTitle": false, - "title": "" - } - }, - "source": [ - "## 6. Join the new left- and right-hand dataframes directly on the index." - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "09a92bb5-4c72-4757-8176-01e14dbc3504", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
Out[25]: 4934937
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
Out[25]: 4934937
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "joined_df = (\n", - " indexed_trips.alias(\"t\")\n", - " .join(exploded_indexed_neighbourhoods.alias(\"n\"), on=\"ix\", how=\"inner\"))\n", - "joined_df.count()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "9825374a-d5d3-407f-9c0d-94c7514edacf", - "showTitle": false, - "title": "" - } - }, - "source": [ - "## Final notes\n", - "Mosaic provides support for Uber’s H3 spatial indexing library as a core part of the API, but we plan to add support for other index systems, including S2 and British National Grid in due course." - ] - } - ], - "metadata": { - "application/vnd.databricks.v1+notebook": { - "dashboards": [], - "language": "python", - "notebookMetadata": { - "pythonIndentUnit": 2 - }, - "notebookName": "spatial-indexes", - "notebookOrigID": 4066942804256643, - "widgets": {} - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/v0.3.x/usage/install-gdal.html b/v0.3.x/usage/install-gdal.html deleted file mode 100644 index 6c4c26310..000000000 --- a/v0.3.x/usage/install-gdal.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - GDAL Installation guide — Mosaic - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

GDAL Installation guide

-
-

Supported platforms

-

In order to use Mosaic, you must have access to a Databricks cluster running -Databricks Runtime 11.3 or higher. -If you have cluster creation permissions in your Databricks -workspace, you can create a cluster using the instructions -here.

-

You will also need “Can Manage” permissions on this cluster in order to attach the -Mosaic library to your cluster. A workspace administrator will be able to grant -these permissions and more information about cluster permissions can be found -in our documentation -here.

-
-
-

GDAL Installation

-
-

Setup GDAL files and scripts

-

Mosaic requires GDAL to be installed on the cluster. The easiest way to do this is to use the -the mos.setup_gdal() function. This function will extract the GDAL files and scripts from the -mosaic library and place them in the /dbfs/FileStore/geospatial/mosaic/gdal/ directory. -This call is no longer needed in versions >= 0.3.12. The shared objects are now included in the -databricks-mosaic-gdal pip installable bundle.

-
import mosaic as mos
-
-mos.enable_mosaic(spark, dbutils)
-mos.setup_gdal(spark)
-GDAL setup complete.
-Shared objects (*.so) stored in: /dbfs/FileStore/geospatial/mosaic/gdal/.
-Init script stored in: /dbfs/FileStore/geospatial/mosaic/gdal/.
-Please restart the cluster with the generated init script to complete the setup.
-
-
-
-
-

Configure the init script

-

After the mos.setup_gdal() function has been run, you will need to configure the cluster to use the -init script. For versions >= 0.3.12, we are required to use the following init script: -here. -The init script can be set by clicking on the “Edit” button on the cluster page and adding -the following to the “Advanced Options” section:

-
-../_images/init_script.png -
-

Fig 1. Init script configuration

-
-
-
-
-

Enable GDAL for a notebook

-

Once the cluster has been restarted, you can enable GDAL for a notebook by running the following -code at the top of the notebook:

-
import mosaic as mos
-
-mos.enable_mosaic(spark, dbutils)
-mos.enable_gdal(spark)
-GDAL enabled.
-GDAL 3.4.3, released 2022/04/22
-
-
-
-
-
- - -
-
- -
-
-
-
- - - - diff --git a/v0.3.x/usage/installation.html b/v0.3.x/usage/installation.html deleted file mode 100644 index 44e1b87d3..000000000 --- a/v0.3.x/usage/installation.html +++ /dev/null @@ -1,228 +0,0 @@ - - - - - - - Installation guide — Mosaic - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Installation guide

-
-

Supported platforms

-
-

Warning

-
-
From versions after 0.3.x, Mosaic will require either
    -
  • Databricks Runtime 11.2+ with Photon enabled

  • -
  • Databricks Runtime for ML 11.2+

  • -
-
-
-

Mosaic 0.3 series does not support DBR 13 (coming soon); -also, DBR 10 is no longer supported in Mosaic.

-
-

We recommend using Databricks Runtime versions 11.3 LTS or 12.2 LTS with Photon enabled; -this will leverage the Databricks H3 expressions when using H3 grid system. -As of the 0.3.11 release, Mosaic issues the following warning when initialized on a cluster -that is neither Photon Runtime nor Databricks Runtime ML [ADB | AWS | GCP]:

-
-

DEPRECATION WARNING: Mosaic is not supported on the selected Databricks Runtime. Mosaic will stop working on this cluster after v0.3.x. Please use a Databricks Photon-enabled Runtime (for performance benefits) or Runtime ML (for spatial AI benefits).

-
-

If you are receiving this warning in v0.3.11+, you will want to begin to plan for a supported runtime. -The reason we are making this change is that we are streamlining Mosaic -internals to be more aligned with future product APIs which are powered by Photon. Along this direction -of change, Mosaic will be standardizing to JTS as its default and supported Vector Geometry Provider.

-

If you have cluster creation permissions in your Databricks -workspace, you can create a cluster using the instructions -here.

-

You will also need “Can Manage” permissions on this cluster in order to attach the -Mosaic library to your cluster. A workspace administrator will be able to grant -these permissions and more information about cluster permissions can be found -in our documentation -here.

-
-
-

Package installation

-
-

Installation from PyPI

-

Python users can install the library directly from PyPI -using the instructions here -or from within a Databricks notebook using the %pip magic command, e.g.

-
%pip install databricks-mosaic
-
-
-
-
-

Installation from release artifacts

-

Alternatively, you can access the latest release artifacts here -and manually attach the appropriate library to your cluster.

-

Which artifact you choose to attach will depend on the language API you intend to use.

-
    -
  • For Python API users, choose the Python .whl file.

  • -
  • For Scala users, take the Scala JAR (packaged with all necessary dependencies).

  • -
  • For R users, download the Scala JAR and the R bindings library [see the sparkR readme](R/sparkR-mosaic/README.md).

  • -
-

Instructions for how to attach libraries to a Databricks cluster can be found here.

-
-
-

Automated SQL registration

-

If you would like to use Mosaic’s functions in pure SQL (in a SQL notebook, from a business intelligence tool, -or via a middleware layer such as Geoserver, perhaps) then you can configure -“Automatic SQL Registration” using the instructions here.

-
-
-
-

Enabling the Mosaic functions

-

The mechanism for enabling the Mosaic functions varies by language:

-
-
from mosaic import enable_mosaic
-enable_mosaic(spark, dbutils)
-
-
-
-
-

SQL usage

-

If you have not employed Automatic SQL registration, you will need to -register the Mosaic SQL functions in your SparkSession from a Scala notebook cell:

-
import com.databricks.labs.mosaic.functions.MosaicContext
-import com.databricks.labs.mosaic.H3
-import com.databricks.labs.mosaic.JTS
-
-val mosaicContext = MosaicContext.build(H3, JTS)
-mosaicContext.register(spark)
-
-
-
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/v0.3.x/usage/kepler.html b/v0.3.x/usage/kepler.html deleted file mode 100644 index a5beeaa5e..000000000 --- a/v0.3.x/usage/kepler.html +++ /dev/null @@ -1,751 +0,0 @@ - - - - - - - Kepler visualizations — Mosaic - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Kepler visualizations

-

You can use the %%mosaic_kepler magic function to visualise data using Kepler.gl.

-

The mosaic_kepler magic function accepts four parameters:

-
    -
  1. dataset: Can be a Spark dataset or a string representing a table/view name

  2. -
  3. column_name: The column that needs to be plotted, can be either a geometry column (WKT, WKB or Mosaic internal format) or a column containing a spatial grid index ID

  4. -
  5. feature_type: The type of data to be plotted. Valid values are geometry (if SRID=4326), geometry(<SRID>) (where <SRID> is the SRID used by the geometry column) and h3

  6. -
  7. limit: The maximum number of objects to plot. The default limit is 1000

  8. -
-

Usage:

-
%%mosaic_kepler
-dataset column_name feature_type [limit]
-
-
-

This magic function is only available in python. It can be used from notebooks with other default languages by storing the intermediate result in a temporary view, and then adding a python cell that uses the mosaic_kepler with the temporary view created from another language.

-
-

Examples

-
-
[ ]:
-
-
-
%pip install databricks-mosaic --quiet
-
-
-
-
-
-
-
- -
Python interpreter will be restarted. -Python interpreter will be restarted. -
-
-
-
[ ]:
-
-
-
from pyspark.sql.functions import *
-import mosaic as mos
-mos.enable_mosaic(spark, dbutils)
-
-
-
-
-
-
-
- -
-
-
-

Download example shapes

-
-
[ ]:
-
-
-
import requests
-
-req = requests.get('https://data.cityofnewyork.us/api/geospatial/d3c5-ddgc?method=export&format=GeoJSON')
-with open('/dbfs/tmp/nyc_taxi_zones.geojson', 'wb') as f:
-  f.write(req.content)
-
-
-
-
-
-
-
- -
-
-
-
[ ]:
-
-
-
neighbourhoods = (
-  spark.read
-    .option("multiline", "true")
-    .format("json")
-    .load("dbfs:/tmp/nyc_taxi_zones.geojson")
-
-    # Extract geoJSON values for shapes
-    .select("type", explode(col("features")).alias("feature"))
-    .select("type", col("feature.properties").alias("properties"), to_json(col("feature.geometry")).alias("geom_json"))
-
-    # Mosaic internal representation
-    .withColumn("geom_internal", mos.st_geomfromgeojson("geom_json"))
-
-    # WKT representation
-    .withColumn("geom_wkt", mos.st_aswkt(col("geom_internal")))
-
-    # WKB representation
-    .withColumn("geom_wkb", mos.st_aswkb(col("geom_internal")))
-
-   # Limit to only 1 shape
-   .limit(1)
-)
-
-neighbourhoods.show()
-
-
-
-
-
-
-
- -
+-----------------+--------------------+--------------------+--------------------+--------------------+--------------------+ - type| properties| geom_json| geom_internal| geom_wkt| geom_wkb| -+-----------------+--------------------+--------------------+--------------------+--------------------+--------------------+ -FeatureCollection|{EWR, 1, 1, 0.000...|{"coordinates":[[...|{6, 4326, [[[-74....|MULTIPOLYGON (((-...|[01 06 00 00 00 0...| -+-----------------+--------------------+--------------------+--------------------+--------------------+--------------------+ - -
-
-
-
-

Plot geometries from Spark dataset

-
-

Internal geometry type

-
-
[ ]:
-
-
-
%%mosaic_kepler
-neighbourhoods "geom_internal" "geometry"
-
-
-
-
-
-
-
- -
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter -
-
-
-
-
-
-
-
-
-
-
-
-Kepler.gl
-
-

mosaic kepler map example geometry

-
-
-

WKT geometry type

-
-
[ ]:
-
-
-
%%mosaic_kepler
-neighbourhoods "geom_wkt" "geometry"
-
-
-
-
-
-
-
- -
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter -
-
-
-
-
-
-
-
-
-
-
-
-Kepler.gl
-
-

mosaic kepler map example geometry

-
-
-

WKB geometry type

-
-
[ ]:
-
-
-
%%mosaic_kepler
-neighbourhoods "geom_wkb" "geometry"
-
-
-
-
-
-
-
- -
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter -
-
-
-
-
-
-
-
-
-
-
-
-Kepler.gl
-
-

mosaic kepler map example geometry

-
-
-
-

Plot geometries from table/view

-
-
[ ]:
-
-
-
neighbourhoods.createOrReplaceTempView("temp_view_neighbourhoods")
-
-
-
-
-
-
-
- -
-
-
-
[ ]:
-
-
-
%%mosaic_kepler
-"temp_view_neighbourhoods" "geom_wkt" "geometry"
-
-
-
-
-
-
-
- -
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter -
-
-
-
-
-
-
-
-
-
-
-
-Kepler.gl
-
-

mosaic kepler map example geometry

-
-
-

Plot H3 indexes

-
-
[ ]:
-
-
-
neighbourhood_chips = (neighbourhoods
-                       .limit(1)
-                       .select(mos.grid_tessellateexplode("geom_internal", lit(9)))
-                       .select("index.*")
-                    )
-
-neighbourhood_chips.show()
-
-
-
-
-
-
-
- -
+-------+------------------+--------------------+ -is_core| index_id| wkb| -+-------+------------------+--------------------+ - true|617733150781997055|[01 03 00 00 00 0...| - true|617733150856445951|[01 03 00 00 00 0...| - true|617733150856970239|[01 03 00 00 00 0...| - true|617733150784094207|[01 03 00 00 00 0...| - true|617733150843600895|[01 03 00 00 00 0...| - true|617733150843863039|[01 03 00 00 00 0...| - true|617733150844125183|[01 03 00 00 00 0...| - true|617733150784880639|[01 03 00 00 00 0...| - true|617733150844387327|[01 03 00 00 00 0...| - true|617733150844649471|[01 03 00 00 00 0...| - true|617733150785404927|[01 03 00 00 00 0...| - true|617733150844911615|[01 03 00 00 00 0...| - true|617733150785667071|[01 03 00 00 00 0...| - true|617733150845173759|[01 03 00 00 00 0...| - true|617733150785929215|[01 03 00 00 00 0...| - true|617733150786453503|[01 03 00 00 00 0...| - true|617733150846222335|[01 03 00 00 00 0...| - true|617733150847270911|[01 03 00 00 00 0...| - true|617733150847795199|[01 03 00 00 00 0...| - true|617733150848057343|[01 03 00 00 00 0...| -+-------+------------------+--------------------+ -only showing top 20 rows - -
-
-
-
[ ]:
-
-
-
%%mosaic_kepler
-neighbourhood_chips "index_id" "h3"
-
-
-
-
-
-
-
- -
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter -
-
-
-
-
-
-
-
-
-
-
-
-Kepler.gl
-
-

mosaic kepler map example H3 indexes

-
-
-

Plot H3 chips

-
-
[ ]:
-
-
-
%%mosaic_kepler
-neighbourhood_chips "wkb" "geometry"
-
-
-
-
-
-
-
- -
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter -
-
-
-
-
-
-
-
-
-
-
-
-Kepler.gl
-
-

mosaic kepler map example h3 chips

-
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/v0.3.x/usage/kepler.ipynb b/v0.3.x/usage/kepler.ipynb deleted file mode 100644 index eca875cfc..000000000 --- a/v0.3.x/usage/kepler.ipynb +++ /dev/null @@ -1,1279 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "5dbca100-ca8d-4cb3-be39-72d2aeb85077", - "showTitle": false, - "title": "" - } - }, - "source": [ - "# Kepler visualizations" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "a2712c52-9c84-427e-bff8-814b9fa35d86", - "showTitle": false, - "title": "" - } - }, - "source": [ - "You can use the `%%mosaic_kepler` magic function to visualise data using [Kepler.gl](https://kepler.gl/).\n", - "\n", - "The mosaic_kepler magic function accepts four parameters:\n", - "\n", - "1) `dataset`: Can be a Spark dataset or a string representing a table/view name\n", - "\n", - "2) `column_name`: The column that needs to be plotted, can be either a geometry column (`WKT`, `WKB` or Mosaic internal format) or a column containing a spatial grid index ID\n", - "\n", - "3) `feature_type`: The type of data to be plotted. Valid values are `geometry` (if SRID=4326), `geometry()` (where `` is the SRID used by the geometry column) and `h3`\n", - "\n", - "4) `limit`: The maximum number of objects to plot. The default limit is `1000`\n", - "\n", - "Usage:\n", - "```\n", - "%%mosaic_kepler\n", - "dataset column_name feature_type [limit]\n", - "```\n", - "\n", - "This magic function is only available in python. It can be used from notebooks with other default languages by storing the intermediate result in a temporary view, and then adding a python cell that uses the `mosaic_kepler` with the temporary view created from another language." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "573fa05d-6dfd-414e-84c4-6f3618540b60", - "showTitle": false, - "title": "" - } - }, - "source": [ - "## Examples" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "c73e5956-dec2-4206-be2d-99bca42d2c93", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
Python interpreter will be restarted.\n", - "Python interpreter will be restarted.\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
Python interpreter will be restarted.\nPython interpreter will be restarted.\n
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "%pip install databricks-mosaic --quiet" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "a18dcbe7-1a01-45f2-a961-dd0f0284cf9c", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "from pyspark.sql.functions import *\n", - "import mosaic as mos\n", - "mos.enable_mosaic(spark, dbutils)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "2a997c83-5aff-4463-8c64-a1dc7a55d7d3", - "showTitle": false, - "title": "" - } - }, - "source": [ - "### Download example shapes" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "93072805-dd95-4518-9099-47ca7e85b62d", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "import requests\n", - "\n", - "req = requests.get('https://data.cityofnewyork.us/api/geospatial/d3c5-ddgc?method=export&format=GeoJSON')\n", - "with open('/dbfs/tmp/nyc_taxi_zones.geojson', 'wb') as f:\n", - " f.write(req.content)" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "eb739b60-a368-4dc9-9cf7-2f4346ffb06a", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
+-----------------+--------------------+--------------------+--------------------+--------------------+--------------------+\n", - " type| properties| geom_json| geom_internal| geom_wkt| geom_wkb|\n", - "+-----------------+--------------------+--------------------+--------------------+--------------------+--------------------+\n", - "FeatureCollection|{EWR, 1, 1, 0.000...|{"coordinates":[[...|{6, 4326, [[[-74....|MULTIPOLYGON (((-...|[01 06 00 00 00 0...|\n", - "+-----------------+--------------------+--------------------+--------------------+--------------------+--------------------+\n", - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
+-----------------+--------------------+--------------------+--------------------+--------------------+--------------------+\n| type| properties| geom_json| geom_internal| geom_wkt| geom_wkb|\n+-----------------+--------------------+--------------------+--------------------+--------------------+--------------------+\n|FeatureCollection|{EWR, 1, 1, 0.000...|{"coordinates":[[...|{6, 4326, [[[-74....|MULTIPOLYGON (((-...|[01 06 00 00 00 0...|\n+-----------------+--------------------+--------------------+--------------------+--------------------+--------------------+\n\n
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "neighbourhoods = (\n", - " spark.read\n", - " .option(\"multiline\", \"true\")\n", - " .format(\"json\")\n", - " .load(\"dbfs:/tmp/nyc_taxi_zones.geojson\")\n", - " \n", - " # Extract geoJSON values for shapes\n", - " .select(\"type\", explode(col(\"features\")).alias(\"feature\"))\n", - " .select(\"type\", col(\"feature.properties\").alias(\"properties\"), to_json(col(\"feature.geometry\")).alias(\"geom_json\"))\n", - " \n", - " # Mosaic internal representation\n", - " .withColumn(\"geom_internal\", mos.st_geomfromgeojson(\"geom_json\"))\n", - " \n", - " # WKT representation\n", - " .withColumn(\"geom_wkt\", mos.st_aswkt(col(\"geom_internal\")))\n", - " \n", - " # WKB representation\n", - " .withColumn(\"geom_wkb\", mos.st_aswkb(col(\"geom_internal\")))\n", - " \n", - " # Limit to only 1 shape\n", - " .limit(1)\n", - ")\n", - "\n", - "neighbourhoods.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "0c74d4f1-dbe6-4117-b752-4761b6a5d692", - "showTitle": false, - "title": "" - } - }, - "source": [ - "### Plot geometries from Spark dataset" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "4109bf9f-479e-47f1-aea5-fb881136c49e", - "showTitle": false, - "title": "" - } - }, - "source": [ - "#### Internal geometry type" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "99be3b7a-3678-44bc-8d4a-ac35346cd724", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter\n
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "textData": null, - "type": "htmlSandbox" - } - }, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "Kepler.gl
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "Kepler.gl
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "textData": null, - "type": "htmlSandbox" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "%%mosaic_kepler\n", - "neighbourhoods \"geom_internal\" \"geometry\"" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "34b3328f-2966-4b6f-859f-325eeec04619", - "showTitle": false, - "title": "" - } - }, - "source": [ - "![mosaic kepler map example geometry](../images/kepler-1.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "f6d1c289-b007-4e40-b354-4c59fef9c2c4", - "showTitle": false, - "title": "" - } - }, - "source": [ - "#### WKT geometry type" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "84ee5934-ed9c-4ee8-affd-dd347f375eec", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter\n
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "textData": null, - "type": "htmlSandbox" - } - }, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "Kepler.gl
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "Kepler.gl
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "textData": null, - "type": "htmlSandbox" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "%%mosaic_kepler\n", - "neighbourhoods \"geom_wkt\" \"geometry\"" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "b81a56b6-3d7c-4c87-91b2-fecc2f77333c", - "showTitle": false, - "title": "" - } - }, - "source": [ - "![mosaic kepler map example geometry](../images/kepler-1.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "2acdd70b-decd-4654-8927-9f821e728864", - "showTitle": false, - "title": "" - } - }, - "source": [ - "#### WKB geometry type" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "0ddd1cad-dabf-4a9d-9e89-4406e2fda6e4", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter\n
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "textData": null, - "type": "htmlSandbox" - } - }, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "Kepler.gl
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "Kepler.gl
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "textData": null, - "type": "htmlSandbox" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "%%mosaic_kepler\n", - "neighbourhoods \"geom_wkb\" \"geometry\"" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "0f0deddf-3408-470d-8e9a-a6d066d23697", - "showTitle": false, - "title": "" - } - }, - "source": [ - "![mosaic kepler map example geometry](../images/kepler-1.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "590cb32e-2b3f-4ad7-b609-ffef9ae17967", - "showTitle": false, - "title": "" - } - }, - "source": [ - "### Plot geometries from table/view" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "782fcc2e-d868-4819-bb01-9c4ea4bafb36", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "neighbourhoods.createOrReplaceTempView(\"temp_view_neighbourhoods\")" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "fe84fa59-998d-4b9a-82c5-f280393ae244", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter\n
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "textData": null, - "type": "htmlSandbox" - } - }, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "Kepler.gl
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "Kepler.gl
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "textData": null, - "type": "htmlSandbox" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "%%mosaic_kepler\n", - "\"temp_view_neighbourhoods\" \"geom_wkt\" \"geometry\"" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "9d7dd0c3-64c5-43bb-aecd-287635929970", - "showTitle": false, - "title": "" - } - }, - "source": [ - "![mosaic kepler map example geometry](../images/kepler-1.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "d34979d6-45e5-4a6f-a12a-52e46cb1e946", - "showTitle": false, - "title": "" - } - }, - "source": [ - "### Plot H3 indexes" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "86cdd4f3-34c5-4365-8108-303ca63d97af", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
+-------+------------------+--------------------+\n", - "is_core| index_id| wkb|\n", - "+-------+------------------+--------------------+\n", - " true|617733150781997055|[01 03 00 00 00 0...|\n", - " true|617733150856445951|[01 03 00 00 00 0...|\n", - " true|617733150856970239|[01 03 00 00 00 0...|\n", - " true|617733150784094207|[01 03 00 00 00 0...|\n", - " true|617733150843600895|[01 03 00 00 00 0...|\n", - " true|617733150843863039|[01 03 00 00 00 0...|\n", - " true|617733150844125183|[01 03 00 00 00 0...|\n", - " true|617733150784880639|[01 03 00 00 00 0...|\n", - " true|617733150844387327|[01 03 00 00 00 0...|\n", - " true|617733150844649471|[01 03 00 00 00 0...|\n", - " true|617733150785404927|[01 03 00 00 00 0...|\n", - " true|617733150844911615|[01 03 00 00 00 0...|\n", - " true|617733150785667071|[01 03 00 00 00 0...|\n", - " true|617733150845173759|[01 03 00 00 00 0...|\n", - " true|617733150785929215|[01 03 00 00 00 0...|\n", - " true|617733150786453503|[01 03 00 00 00 0...|\n", - " true|617733150846222335|[01 03 00 00 00 0...|\n", - " true|617733150847270911|[01 03 00 00 00 0...|\n", - " true|617733150847795199|[01 03 00 00 00 0...|\n", - " true|617733150848057343|[01 03 00 00 00 0...|\n", - "+-------+------------------+--------------------+\n", - "only showing top 20 rows\n", - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
+-------+------------------+--------------------+\n|is_core| index_id| wkb|\n+-------+------------------+--------------------+\n| true|617733150781997055|[01 03 00 00 00 0...|\n| true|617733150856445951|[01 03 00 00 00 0...|\n| true|617733150856970239|[01 03 00 00 00 0...|\n| true|617733150784094207|[01 03 00 00 00 0...|\n| true|617733150843600895|[01 03 00 00 00 0...|\n| true|617733150843863039|[01 03 00 00 00 0...|\n| true|617733150844125183|[01 03 00 00 00 0...|\n| true|617733150784880639|[01 03 00 00 00 0...|\n| true|617733150844387327|[01 03 00 00 00 0...|\n| true|617733150844649471|[01 03 00 00 00 0...|\n| true|617733150785404927|[01 03 00 00 00 0...|\n| true|617733150844911615|[01 03 00 00 00 0...|\n| true|617733150785667071|[01 03 00 00 00 0...|\n| true|617733150845173759|[01 03 00 00 00 0...|\n| true|617733150785929215|[01 03 00 00 00 0...|\n| true|617733150786453503|[01 03 00 00 00 0...|\n| true|617733150846222335|[01 03 00 00 00 0...|\n| true|617733150847270911|[01 03 00 00 00 0...|\n| true|617733150847795199|[01 03 00 00 00 0...|\n| true|617733150848057343|[01 03 00 00 00 0...|\n+-------+------------------+--------------------+\nonly showing top 20 rows\n\n
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "neighbourhood_chips = (neighbourhoods\n", - " .limit(1)\n", - " .select(mos.grid_tessellateexplode(\"geom_internal\", lit(9)))\n", - " .select(\"index.*\")\n", - " )\n", - "\n", - "neighbourhood_chips.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "84f6d1d7-b270-498b-b1fe-fe6d17e0e713", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter\n
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "textData": null, - "type": "htmlSandbox" - } - }, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "Kepler.gl
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "Kepler.gl
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "textData": null, - "type": "htmlSandbox" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "%%mosaic_kepler\n", - "neighbourhood_chips \"index_id\" \"h3\"" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "a9d921cb-5994-42a9-9518-626486cd1227", - "showTitle": false, - "title": "" - } - }, - "source": [ - "![mosaic kepler map example H3 indexes](../images/kepler-2.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "64cb0e7f-be2e-48f9-bea8-35a147e3f60c", - "showTitle": false, - "title": "" - } - }, - "source": [ - "### Plot H3 chips" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "dbe03c2b-a2c2-4b17-a44c-16891e81d3d0", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter\n
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "textData": null, - "type": "htmlSandbox" - } - }, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "Kepler.gl
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "Kepler.gl
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "textData": null, - "type": "htmlSandbox" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "%%mosaic_kepler\n", - "neighbourhood_chips \"wkb\" \"geometry\"" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "6c8244f4-4c03-4d12-9d06-d5174ef94626", - "showTitle": false, - "title": "" - } - }, - "source": [ - "![mosaic kepler map example h3 chips](../images/kepler-3.png)" - ] - } - ], - "metadata": { - "application/vnd.databricks.v1+notebook": { - "dashboards": [], - "language": "python", - "notebookMetadata": { - "pythonIndentUnit": 2 - }, - "notebookName": "kepler", - "notebookOrigID": 2874007245243191, - "widgets": {} - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/v0.3.x/usage/quickstart.html b/v0.3.x/usage/quickstart.html deleted file mode 100644 index 0bc129507..000000000 --- a/v0.3.x/usage/quickstart.html +++ /dev/null @@ -1,1220 +0,0 @@ - - - - - - - Quickstart notebook — Mosaic - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- -
-
-
- -
-
-
-
- -
-

Quickstart notebook

-

The example code here shows how to get up and running with Mosaic using the Python API.

-
-
[ ]:
-
-
-
from pyspark.sql.functions import *
-
-
-
-
-
-
-
- -
-
-
-

Enable Mosaic in the notebook

-

To get started, you’ll need to attach the python library to your cluster and execute the enable_mosaic function.

-
-
[ ]:
-
-
-
from mosaic import enable_mosaic
-enable_mosaic(spark, dbutils)
-
-
-
-
-
-
-
- -
-
-

Mosaic has extra configuration options. Check the docs for more details.

-
-
[ ]:
-
-
-
help(enable_mosaic)
-
-
-
-
-
-
-
- -
Help on function enable_mosaic in module mosaic.api.enable: - -enable_mosaic(spark: pyspark.sql.session.SparkSession, dbutils=None) -> None - Enable Mosaic functions. - - Use this function at the start of your workflow to ensure all of the required dependencies are installed and - Mosaic is configured according to your needs. - - Parameters - ---------- - spark : pyspark.sql.SparkSession - The active SparkSession. - dbutils : dbruntime.dbutils.DBUtils - The dbutils object used for `display` and `displayHTML` functions. - Optional, only applicable to Databricks users. - - Returns - ------- - - Notes - ----- - Users can control various aspects of Mosaic's operation with the following Spark confs: - - - `spark.databricks.labs.mosaic.jar.autoattach`: 'true' (default) or 'false' - Automatically attach the Mosaic JAR to the Databricks cluster? (Optional) - - `spark.databricks.labs.mosaic.jar.location` - Explicitly specify the path to the Mosaic JAR. - (Optional and not required at all in a standard Databricks environment). - - `spark.databricks.labs.mosaic.geometry.api`: 'OGC' (default) or 'JTS' - Explicitly specify the underlying geometry library to use for spatial operations. (Optional) - - `spark.databricks.labs.mosaic.index.system`: 'H3' (default) - Explicitly specify the index system to use for optimized spatial joins. (Optional) - -
-
-
-
-

Geometry constructors and the Mosaic internal geometry format

-

Mosaic allows users to create new Point geometries from a pair of Spark DoubleType columns.

-
-
[ ]:
-
-
-
from mosaic import st_point
-
-lons = [-80., -80., -70., -70., -80.]
-lats = [ 35.,  45.,  45.,  35.,  35.]
-
-bounds_df = (
-  spark
-  .createDataFrame({"lon": lon, "lat": lat} for lon, lat in zip(lons, lats))
-  .coalesce(1)
-  .withColumn("point_geom", st_point("lon", "lat"))
-)
-bounds_df.show()
-
-
-
-
-
-
-
- -
+----+-----+--------------------+ - lat| lon| point_geom| -+----+-----+--------------------+ -35.0|-80.0|{1, [[[-80.0, 35....| -45.0|-80.0|{1, [[[-80.0, 45....| -45.0|-70.0|{1, [[[-70.0, 45....| -35.0|-70.0|{1, [[[-70.0, 35....| -35.0|-80.0|{1, [[[-80.0, 35....| -+----+-----+--------------------+ - -
-
-

Mosaic Point geometries can be aggregated into LineString and Polygon geometries using the respective constructors.

-
-
[ ]:
-
-
-
from mosaic import st_makeline
-
-bounds_df = (
-  bounds_df
-  .groupBy()
-  .agg(collect_list("point_geom").alias("bounding_coords"))
-  .select(st_makeline("bounding_coords").alias("bounding_ring"))
-)
-bounds_df.show()
-
-
-
-
-
-
-
- -
+--------------------+ - bounding_ring| -+--------------------+ -{3, [[[-80.0, 35....| -+--------------------+ - -
-
-
-
[ ]:
-
-
-
from mosaic import st_makepolygon
-
-bounds_df = bounds_df.select(st_makepolygon("bounding_ring").alias("bounds"))
-bounds_df.show()
-
-
-
-
-
-
-
- -
+--------------------+ - bounds| -+--------------------+ -{5, [[[-80.0, 35....| -+--------------------+ - -
-
-
-
-

Geometry clipping without an index

-

Mosaic implements set intersection functions: contains, intersects, overlaps etc. Here you can see st_contains being used to clip points by a polygon geometry.

-
-
[ ]:
-
-
-
tripsTable = spark.table("delta.`/databricks-datasets/nyctaxi/tables/nyctaxi_yellow`")
-
-
-
-
-
-
-
- -
-
-
-
[ ]:
-
-
-
from mosaic import st_contains
-trips = (
-  tripsTable
-  .limit(5_000_000)
-  .repartition(sc.defaultParallelism * 20)
-  .drop("vendorId", "rateCodeId", "store_and_fwd_flag", "payment_type")
-  .withColumn("pickup_geom", st_point("pickup_longitude", "pickup_latitude"))
-  .withColumn("dropoff_geom", st_point("dropoff_longitude", "dropoff_latitude"))
-  .crossJoin(bounds_df)
-  .where(st_contains("bounds", "pickup_geom"))
-  .where(st_contains("bounds", "dropoff_geom"))
-  .cache()
-)
-
-
-
-
-
-
-
- -
-
-
-
[ ]:
-
-
-
trips.show()
-
-
-
-
-
-
-
- -
+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+ -vendor_id| pickup_datetime| dropoff_datetime|passenger_count|trip_distance|pickup_longitude|pickup_latitude|rate_code_id|dropoff_longitude|dropoff_latitude|fare_amount|extra|mta_tax|tip_amount|tolls_amount|total_amount| pickup_geom| dropoff_geom| bounds| -+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+ - CMT|2009-10-12 19:35:21|2009-10-12 19:44:36| 1| 1.4| -74.000018| 40.720534| null| -73.995008| 40.734112| 6.5| 0.0| null| 0.0| 0.0| 6.5|{1, [[[-74.000018...|{1, [[[-73.995008...|{5, [[[-80.0, 35....| - CMT|2010-09-02 07:37:40|2010-09-02 07:53:17| 1| 6.8| -74.016477| 40.70971| 1| -73.97509| 40.759392| 17.3| 0.0| 0.5| 1.0| 0.0| 18.8|{1, [[[-74.016477...|{1, [[[-73.97509,...|{5, [[[-80.0, 35....| - CMT|2009-11-28 13:00:00|2009-11-28 13:01:57| 1| 0.5| -73.999666| 40.733384| null| -73.991751| 40.730273| 3.3| 0.0| 0.5| 0.0| 0.0| 3.8|{1, [[[-73.999666...|{1, [[[-73.991751...|{5, [[[-80.0, 35....| - CMT|2009-11-30 07:49:13|2009-11-30 08:12:38| 1| 12.9| -74.007033| 40.734931| null| -73.87277| 40.774319| 29.7| 0.0| 0.5| 6.04| 0.0| 36.24|{1, [[[-74.007033...|{1, [[[-73.87277,...|{5, [[[-80.0, 35....| - VTS|2009-01-03 01:55:00|2009-01-03 02:04:00| 5| 2.09| -73.993217| 40.72416| null| -73.9944| 40.74624| 7.7| 0.5| null| 0.0| 0.0| 8.2|{1, [[[-73.993217...|{1, [[[-73.9944, ...|{5, [[[-80.0, 35....| - VTS|2009-11-09 17:21:00|2009-11-09 17:32:00| 1| 5.19| -74.010003| 40.707022| null| -73.963853| 40.75677| 13.3| 1.0| 0.5| 0.0| 0.0| 14.8|{1, [[[-74.010003...|{1, [[[-73.963853...|{5, [[[-80.0, 35....| - VTS|2010-06-09 01:13:00|2010-06-09 01:27:00| 1| 8.09| -74.008697| 40.707335| 1| -73.949605| 40.78761| 19.7| 0.5| 0.5| 0.0| 0.0| 20.7|{1, [[[-74.008697...|{1, [[[-73.949605...|{5, [[[-80.0, 35....| - VTS|2009-01-28 18:36:00|2009-01-28 18:50:00| 1| 2.92| -74.008823| 40.72089| null| -73.994055| 40.747588| 10.1| 1.0| null| 3.0| 0.0| 14.1|{1, [[[-74.008823...|{1, [[[-73.994055...|{5, [[[-80.0, 35....| - CMT|2010-06-02 14:21:05|2010-06-02 14:28:43| 1| 5.0| -74.011653| 40.702604| 1| -73.971851| 40.749807| 12.5| 0.0| 0.5| 2.6| 0.0| 15.6|{1, [[[-74.011653...|{1, [[[-73.971851...|{5, [[[-80.0, 35....| - VTS|2009-11-26 15:38:00|2009-11-26 15:47:00| 5| 2.36| -73.997208| 40.722108| null| -73.99647| 40.748185| 8.1| 0.0| 0.5| 2.0| 0.0| 10.6|{1, [[[-73.997208...|{1, [[[-73.99647,...|{5, [[[-80.0, 35....| - CMT|2009-12-07 10:36:06|2009-12-07 10:42:26| 1| 1.3| -73.99067| 40.73065| null| -73.975539| 40.741353| 6.1| 0.0| 0.5| 0.0| 0.0| 6.6|{1, [[[-73.99067,...|{1, [[[-73.975539...|{5, [[[-80.0, 35....| - CMT|2009-11-15 09:11:42|2009-11-15 09:26:34| 1| 3.7| -73.990065| 40.687341| null| -73.999566| 40.730219| 12.1| 0.0| 0.5| 0.0| 0.0| 12.6|{1, [[[-73.990065...|{1, [[[-73.999566...|{5, [[[-80.0, 35....| - CMT|2010-06-27 17:27:25|2010-06-27 17:47:44| 2| 5.0| -74.008459| 40.712233| 1| -73.9516| 40.718877| 15.7| 0.0| 0.5| 3.0| 0.0| 19.2|{1, [[[-74.008459...|{1, [[[-73.9516, ...|{5, [[[-80.0, 35....| - VTS|2009-01-30 21:05:00|2009-01-30 21:34:00| 1| 5.99| -73.994397| 40.694843| null| -73.921257| 40.685107| 18.9| 0.5| null| 0.6| 0.0| 20.0|{1, [[[-73.994397...|{1, [[[-73.921257...|{5, [[[-80.0, 35....| - CMT|2009-01-14 07:43:53|2009-01-14 07:55:14| 2| 2.9| -74.007602| 40.725098| null| -73.977846| 40.751608| 9.3| 0.0| null| 0.0| 0.0| 9.3|{1, [[[-74.007602...|{1, [[[-73.977846...|{5, [[[-80.0, 35....| - VTS|2010-05-11 16:33:00|2010-05-11 16:41:00| 1| 0.99| -74.011205| 40.715468| 1| -74.011072| 40.708882| 5.7| 1.0| 0.5| 0.0| 0.0| 7.2|{1, [[[-74.011205...|{1, [[[-74.011072...|{5, [[[-80.0, 35....| - VTS|2009-01-19 09:43:00|2009-01-19 09:47:00| 1| 0.56| -73.991123| 40.731297| null| -73.98681| 40.736703| 4.1| 0.0| null| 0.0| 0.0| 4.1|{1, [[[-73.991123...|{1, [[[-73.98681,...|{5, [[[-80.0, 35....| - CMT|2009-11-14 15:46:36|2009-11-14 15:51:01| 2| 1.2| -74.008448| 40.734271| null| -74.006075| 40.720237| 4.9| 0.0| 0.5| 0.0| 0.0| 5.4|{1, [[[-74.008448...|{1, [[[-74.006075...|{5, [[[-80.0, 35....| - CMT|2009-11-17 16:50:35|2009-11-17 17:01:34| 1| 1.6| -74.00679| 40.730546| null| -73.9904| 40.73815| 7.7| 1.0| 0.5| 1.5| 0.0| 10.7|{1, [[[-74.00679,...|{1, [[[-73.9904, ...|{5, [[[-80.0, 35....| - CMT|2009-11-30 23:30:43|2009-11-30 23:42:54| 2| 2.9| -74.009605| 40.710155| null| -73.993875| 40.741554| 10.1| 0.5| 0.5| 2.22| 0.0| 13.32|{1, [[[-74.009605...|{1, [[[-73.993875...|{5, [[[-80.0, 35....| -+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+ -only showing top 20 rows - -
-
-
-
-

Read from GeoJson, compute some basic geometry attributes

-

You’ve seen how Mosaic can create geometries from Spark native data types but it also provides functions to translate Well Known Text (WKT), Well Known Binary (WKB) and GeoJSON representations to Mosaic geometries.

-
-
[ ]:
-
-
-
from mosaic import st_geomfromgeojson
-
-geoJsonDF = (
-  spark.read.format("json")
-  .load("dbfs:/FileStore/shared_uploads/stuart.lynn@databricks.com/NYC_Taxi_Zones.geojson")
-  .withColumn("geometry", st_geomfromgeojson(to_json(col("geometry"))))
-  .select("properties.*", "geometry")
-  .drop("shape_area", "shape_leng")
-)
-
-geoJsonDF.show()
-
-
-
-
-
-
-
- -
+-------------+-----------+--------+--------------------+--------------------+ - borough|location_id|objectid| zone| geometry| -+-------------+-----------+--------+--------------------+--------------------+ - EWR| 1| 1| Newark Airport|{6, [[[-74.184452...| - Queens| 2| 2| Jamaica Bay|{6, [[[-73.823375...| - Bronx| 3| 3|Allerton/Pelham G...|{6, [[[-73.847926...| - Manhattan| 4| 4| Alphabet City|{6, [[[-73.971774...| -Staten Island| 5| 5| Arden Heights|{6, [[[-74.174217...| -Staten Island| 6| 6|Arrochar/Fort Wad...|{6, [[[-74.063673...| - Queens| 7| 7| Astoria|{6, [[[-73.904136...| - Queens| 8| 8| Astoria Park|{6, [[[-73.923340...| - Queens| 9| 9| Auburndale|{6, [[[-73.785024...| - Manhattan| 24| 24| Bloomingdale|{6, [[[-73.959536...| - Queens| 10| 10| Baisley Park|{6, [[[-73.783266...| - Brooklyn| 11| 11| Bath Beach|{6, [[[-74.001098...| - Manhattan| 12| 12| Battery Park|{6, [[[-74.015657...| - Manhattan| 13| 13| Battery Park City|{6, [[[-74.012441...| - Bronx| 18| 18| Bedford Park|{6, [[[-73.885139...| - Brooklyn| 25| 25| Boerum Hill|{6, [[[-73.981552...| - Brooklyn| 14| 14| Bay Ridge|{6, [[[-74.034073...| - Queens| 15| 15|Bay Terrace/Fort ...|{6, [[[-73.777403...| - Brooklyn| 22| 22| Bensonhurst West|{6, [[[-73.992549...| -Staten Island| 23| 23|Bloomfield/Emerso...|{6, [[[-74.195686...| -+-------------+-----------+--------+--------------------+--------------------+ -only showing top 20 rows - -
-
-

Mosaic provides a number of functions for extracting the properties of geometries. Here are some that are relevant to Polygon geometries:

-
-
[ ]:
-
-
-
from mosaic import st_area, st_length
-(
-  geoJsonDF
-  .withColumn("calculatedArea", abs(st_area("geometry")))
-  .withColumn("calculatedLength", st_length("geometry"))
-  .select("geometry", "calculatedArea", "calculatedLength")
-).show()
-
-
-
-
-
-
-
- -
+--------------------+--------------------+--------------------+ - geometry| calculatedArea| calculatedLength| -+--------------------+--------------------+--------------------+ -{6, [[[-74.184452...|7.823067885002562E-4| 0.1163574531886787| -{6, [[[-73.823375...|0.001422779097814599| 0.8431218810128789| -{6, [[[-73.847926...|3.144141568206508E-4| 0.08434110590105784| -{6, [[[-73.971774...| 7.94539194214528E-5| 0.03559982116907461| -{6, [[[-74.174217...|4.979574893632193E-4| 0.09214648985735088| -{6, [[[-74.063673...|4.046076598541714E-4| 0.12905753305870837| -{6, [[[-73.904136...|3.897879892739018...| 0.10741717112348065| -{6, [[[-73.923340...|2.658771690499072E-5|0.027590691195158792| -{6, [[[-73.785024...|3.384438031986125...| 0.0997840924710119| -{6, [[[-73.959536...|4.193691000471793E-5|0.034022318280805826| -{6, [[[-73.783266...|4.358238180810105...| 0.09983947941552027| -{6, [[[-74.001098...|2.029913532381591E-4| 0.07243934539937844| -{6, [[[-74.015657...|1.078595394871048...| 0.01759380786230351| -{6, [[[-74.012441...|4.874002713725957E-5| 0.04726120195723124| -{6, [[[-73.885139...|1.488501639473639E-4| 0.06979954985700013| -{6, [[[-73.981552...|1.241682673558662...| 0.04714581993191898| -{6, [[[-74.034073...|6.636590898190788E-4| 0.13622530962992194| -{6, [[[-73.777403...|4.588438269978550...| 0.1295148763926726| -{6, [[[-73.992549...|4.613649657988681...| 0.11844001178496774| -{6, [[[-74.195686...|0.002090822778761513| 0.3007595308122533| -+--------------------+--------------------+--------------------+ -only showing top 20 rows - -
-
-
-
[ ]:
-
-
-
geoJsonDF.count()
-
-
-
-
-
-
-
- -
Out[12]: 263
-
-

## Example point-in-poly with indexing

-

Mosaic has built-in support for the popular spatial indexing library, H3. The user has access to functions for generating point indices and the sets of indices covering polygons, allowing point-in-polygon joins to be transformed into deterministic SQL joins.

-
-
[ ]:
-
-
-
from mosaic import grid_longlatascellid
-
-trips_with_geom = (
-  trips
-  .withColumn("pickup_h3", grid_longlatascellid(lon="pickup_longitude", lat="pickup_latitude", resolution=lit(10)))
-  .withColumn("dropoff_h3", grid_longlatascellid(lon="dropoff_longitude", lat="dropoff_latitude", resolution=lit(10)))
-)
-
-trips_with_geom.show()
-
-
-
-
-
-
-
- -
+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+------------------+------------------+ -vendor_id| pickup_datetime| dropoff_datetime|passenger_count|trip_distance|pickup_longitude|pickup_latitude|rate_code_id|dropoff_longitude|dropoff_latitude|fare_amount|extra|mta_tax|tip_amount|tolls_amount|total_amount| pickup_geom| dropoff_geom| bounds| pickup_h3| dropoff_h3| -+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+------------------+------------------+ - CMT|2009-10-12 19:35:21|2009-10-12 19:44:36| 1| 1.4| -74.000018| 40.720534| null| -73.995008| 40.734112| 6.5| 0.0| null| 0.0| 0.0| 6.5|{1, [[[-74.000018...|{1, [[[-73.995008...|{5, [[[-80.0, 35....|622236750705885183|622236723432488959| - CMT|2010-09-02 07:37:40|2010-09-02 07:53:17| 1| 6.8| -74.016477| 40.70971| 1| -73.97509| 40.759392| 17.3| 0.0| 0.5| 1.0| 0.0| 18.8|{1, [[[-74.016477...|{1, [[[-73.97509,...|{5, [[[-80.0, 35....|622236750651359231|622236723493961727| - CMT|2009-11-28 13:00:00|2009-11-28 13:01:57| 1| 0.5| -73.999666| 40.733384| null| -73.991751| 40.730273| 3.3| 0.0| 0.5| 0.0| 0.0| 3.8|{1, [[[-73.999666...|{1, [[[-73.991751...|{5, [[[-80.0, 35....|622236723433046015|622236750715092991| - CMT|2009-11-30 07:49:13|2009-11-30 08:12:38| 1| 12.9| -74.007033| 40.734931| null| -73.87277| 40.774319| 29.7| 0.0| 0.5| 6.04| 0.0| 36.24|{1, [[[-74.007033...|{1, [[[-73.87277,...|{5, [[[-80.0, 35....|622236750719975423|622236724015759359| - VTS|2009-01-03 01:55:00|2009-01-03 02:04:00| 5| 2.09| -73.993217| 40.72416| null| -73.9944| 40.74624| 7.7| 0.5| null| 0.0| 0.0| 8.2|{1, [[[-73.993217...|{1, [[[-73.9944, ...|{5, [[[-80.0, 35....|622236750717878271|622236723431276543| - VTS|2009-11-09 17:21:00|2009-11-09 17:32:00| 1| 5.19| -74.010003| 40.707022| null| -73.963853| 40.75677| 13.3| 1.0| 0.5| 0.0| 0.0| 14.8|{1, [[[-74.010003...|{1, [[[-73.963853...|{5, [[[-80.0, 35....|622236750647689215|622236723504381951| - VTS|2010-06-09 01:13:00|2010-06-09 01:27:00| 1| 8.09| -74.008697| 40.707335| 1| -73.949605| 40.78761| 19.7| 0.5| 0.5| 0.0| 0.0| 20.7|{1, [[[-74.008697...|{1, [[[-73.949605...|{5, [[[-80.0, 35....|622236750647820287|622236722210668543| - VTS|2009-01-28 18:36:00|2009-01-28 18:50:00| 1| 2.92| -74.008823| 40.72089| null| -73.994055| 40.747588| 10.1| 1.0| null| 3.0| 0.0| 14.1|{1, [[[-74.008823...|{1, [[[-73.994055...|{5, [[[-80.0, 35....|622236750713159679|622236723439304703| - CMT|2010-06-02 14:21:05|2010-06-02 14:28:43| 1| 5.0| -74.011653| 40.702604| 1| -73.971851| 40.749807| 12.5| 0.0| 0.5| 2.6| 0.0| 15.6|{1, [[[-74.011653...|{1, [[[-73.971851...|{5, [[[-80.0, 35....|622236750639857663|622236723496026111| - VTS|2009-11-26 15:38:00|2009-11-26 15:47:00| 5| 2.36| -73.997208| 40.722108| null| -73.99647| 40.748185| 8.1| 0.0| 0.5| 2.0| 0.0| 10.6|{1, [[[-73.997208...|{1, [[[-73.99647,...|{5, [[[-80.0, 35....|622236750706966527|622236723431309311| - CMT|2009-12-07 10:36:06|2009-12-07 10:42:26| 1| 1.3| -73.99067| 40.73065| null| -73.975539| 40.741353| 6.1| 0.0| 0.5| 0.0| 0.0| 6.6|{1, [[[-73.99067,...|{1, [[[-73.975539...|{5, [[[-80.0, 35....|622236750715092991|622236723437502463| - CMT|2009-11-15 09:11:42|2009-11-15 09:26:34| 1| 3.7| -73.990065| 40.687341| null| -73.999566| 40.730219| 12.1| 0.0| 0.5| 0.0| 0.0| 12.6|{1, [[[-73.990065...|{1, [[[-73.999566...|{5, [[[-80.0, 35....|622236750667481087|622236750719549439| - CMT|2010-06-27 17:27:25|2010-06-27 17:47:44| 2| 5.0| -74.008459| 40.712233| 1| -73.9516| 40.718877| 15.7| 0.0| 0.5| 3.0| 0.0| 19.2|{1, [[[-74.008459...|{1, [[[-73.9516, ...|{5, [[[-80.0, 35....|622236750648639487|622236723415482367| - VTS|2009-01-30 21:05:00|2009-01-30 21:34:00| 1| 5.99| -73.994397| 40.694843| null| -73.921257| 40.685107| 18.9| 0.5| null| 0.6| 0.0| 20.0|{1, [[[-73.994397...|{1, [[[-73.921257...|{5, [[[-80.0, 35....|622236750665449471|622236723618283519| - CMT|2009-01-14 07:43:53|2009-01-14 07:55:14| 2| 2.9| -74.007602| 40.725098| null| -73.977846| 40.751608| 9.3| 0.0| null| 0.0| 0.0| 9.3|{1, [[[-74.007602...|{1, [[[-73.977846...|{5, [[[-80.0, 35....|622236750711291903|622236723435503615| - VTS|2010-05-11 16:33:00|2010-05-11 16:41:00| 1| 0.99| -74.011205| 40.715468| 1| -74.011072| 40.708882| 5.7| 1.0| 0.5| 0.0| 0.0| 7.2|{1, [[[-74.011205...|{1, [[[-74.011072...|{5, [[[-80.0, 35....|622236750712831999|622236750647459839| - VTS|2009-01-19 09:43:00|2009-01-19 09:47:00| 1| 0.56| -73.991123| 40.731297| null| -73.98681| 40.736703| 4.1| 0.0| null| 0.0| 0.0| 4.1|{1, [[[-73.991123...|{1, [[[-73.98681,...|{5, [[[-80.0, 35....|622236750715060223|622236723429539839| - CMT|2009-11-14 15:46:36|2009-11-14 15:51:01| 2| 1.2| -74.008448| 40.734271| null| -74.006075| 40.720237| 4.9| 0.0| 0.5| 0.0| 0.0| 5.4|{1, [[[-74.008448...|{1, [[[-74.006075...|{5, [[[-80.0, 35....|622236750719844351|622236750713126911| - CMT|2009-11-17 16:50:35|2009-11-17 17:01:34| 1| 1.6| -74.00679| 40.730546| null| -73.9904| 40.73815| 7.7| 1.0| 0.5| 1.5| 0.0| 10.7|{1, [[[-74.00679,...|{1, [[[-73.9904, ...|{5, [[[-80.0, 35....|622236750718894079|622236723426754559| - CMT|2009-11-30 23:30:43|2009-11-30 23:42:54| 2| 2.9| -74.009605| 40.710155| null| -73.993875| 40.741554| 10.1| 0.5| 0.5| 2.22| 0.0| 13.32|{1, [[[-74.009605...|{1, [[[-73.993875...|{5, [[[-80.0, 35....|622236750646968319|622236723430490111| -+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+------------------+------------------+ -only showing top 20 rows - -
-
-
-
[ ]:
-
-
-
from mosaic import grid_polyfill
-
-neighbourhoods = (
-  geoJsonDF
-  .repartition(sc.defaultParallelism)
-  .select("*", explode(grid_polyfill("geometry", lit(10))).alias("h3"))
-  .drop("geometry")
-)
-
-neighbourhoods.show()
-
-
-
-
-
-
-
- -
+-------------+-----------+--------+---------------+------------------+ - borough|location_id|objectid| zone| h3| -+-------------+-----------+--------+---------------+------------------+ -Staten Island| 99| 99|Freshkills Park|622236745731309567| -Staten Island| 99| 99|Freshkills Park|622236745690841087| -Staten Island| 99| 99|Freshkills Park|622236745723674623| -Staten Island| 99| 99|Freshkills Park|622236745683206143| -Staten Island| 99| 99|Freshkills Park|622236745691987967| -Staten Island| 99| 99|Freshkills Park|622236745684353023| -Staten Island| 99| 99|Freshkills Park|622236745733603327| -Staten Island| 99| 99|Freshkills Park|622236745725968383| -Staten Island| 99| 99|Freshkills Park|622236745701916671| -Staten Island| 99| 99|Freshkills Park|622236745734750207| -Staten Island| 99| 99|Freshkills Park|622236745694281727| -Staten Island| 99| 99|Freshkills Park|622236745703063551| -Staten Island| 99| 99|Freshkills Park|622236745679011839| -Staten Island| 99| 99|Freshkills Park|622236745761095679| -Staten Island| 99| 99|Freshkills Park|622236745680158719| -Staten Island| 99| 99|Freshkills Park|622236745696575487| -Staten Island| 99| 99|Freshkills Park|622236745762242559| -Staten Island| 99| 99|Freshkills Park|622236745681305599| -Staten Island| 99| 99|Freshkills Park|622236745730555903| -Staten Island| 99| 99|Freshkills Park|622236745690087423| -+-------------+-----------+--------+---------------+------------------+ -only showing top 20 rows - -
-
-
-
[ ]:
-
-
-
joined_df = trips_with_geom.alias("t").join(neighbourhoods.alias("n"), on=expr("t.pickup_h3 = n.h3"), how="inner")
-joined_df.count()
-
-
-
-
-
-
-
- -
Out[15]: 4934151
-
-
-
-

Mosaic spatial join optimizations

-

Mosaic provides easy access to the optimized spatial join technique described in this blog post.

-
-
[ ]:
-
-
-
from mosaic import grid_tessellateexplode
-
-mosaic_neighbourhoods = (
-  geoJsonDF
-  .repartition(sc.defaultParallelism)
-  .select("*", grid_tessellateexplode("geometry", lit(10)))
-  .drop("geometry")
-)
-
-mosaic_neighbourhoods.show()
-
-
-
-
-
-
-
- -
+-------------+-----------+--------+---------------+-------+------------------+----+ - borough|location_id|objectid| zone|is_core| h3| wkb| -+-------------+-----------+--------+---------------+-------+------------------+----+ -Staten Island| 99| 99|Freshkills Park| true|622236745694314495|null| -Staten Island| 99| 99|Freshkills Park| true|622236745679077375|null| -Staten Island| 99| 99|Freshkills Park| true|622236745734160383|null| -Staten Island| 99| 99|Freshkills Park| true|622236745762275327|null| -Staten Island| 99| 99|Freshkills Park| true|622236745731801087|null| -Staten Island| 99| 99|Freshkills Park| true|622236745725935615|null| -Staten Island| 99| 99|Freshkills Park| true|622236745680224255|null| -Staten Island| 99| 99|Freshkills Park| true|622236745689595903|null| -Staten Island| 99| 99|Freshkills Park| true|622236745683730431|null| -Staten Island| 99| 99|Freshkills Park| true|622236745723576319|null| -Staten Island| 99| 99|Freshkills Park| true|622236745763422207|null| -Staten Island| 99| 99|Freshkills Park| true|622236745693102079|null| -Staten Island| 99| 99|Freshkills Park| true|622236745732947967|null| -Staten Island| 99| 99|Freshkills Park| true|622236745702473727|null| -Staten Island| 99| 99|Freshkills Park| true|622236745696608255|null| -Staten Island| 99| 99|Freshkills Park| true|622236745736454143|null| -Staten Island| 99| 99|Freshkills Park| true|622236745761062911|null| -Staten Island| 99| 99|Freshkills Park| true|622236745690742783|null| -Staten Island| 99| 99|Freshkills Park| true|622236745675505663|null| -Staten Island| 99| 99|Freshkills Park| true|622236745730588671|null| -+-------------+-----------+--------+---------------+-------+------------------+----+ -only showing top 20 rows - -
-
-

Mosaic also includes a convenience function for displaying dataframes with geometry columns.

-
-
[ ]:
-
-
-
from mosaic import displayMosaic
-displayMosaic(mosaic_neighbourhoods)
-
-
-
-
-
-
-
-
boroughlocation_idobjectidzoneis_coreh3wkb
Staten Island9999Freshkills Parktrue622236745694314495null
Staten Island9999Freshkills Parktrue622236745679077375null
Staten Island9999Freshkills Parktrue622236745734160383null
Staten Island9999Freshkills Parktrue622236745762275327null
Staten Island9999Freshkills Parktrue622236745731801087null
Staten Island9999Freshkills Parktrue622236745725935615null
Staten Island9999Freshkills Parktrue622236745680224255null
Staten Island9999Freshkills Parktrue622236745689595903null
Staten Island9999Freshkills Parktrue622236745683730431null
Staten Island9999Freshkills Parktrue622236745723576319null
Staten Island9999Freshkills Parktrue622236745763422207null
Staten Island9999Freshkills Parktrue622236745693102079null
Staten Island9999Freshkills Parktrue622236745732947967null
Staten Island9999Freshkills Parktrue622236745702473727null
Staten Island9999Freshkills Parktrue622236745696608255null
Staten Island9999Freshkills Parktrue622236745736454143null
Staten Island9999Freshkills Parktrue622236745761062911null
Staten Island9999Freshkills Parktrue622236745690742783null
Staten Island9999Freshkills Parktrue622236745675505663null
Staten Island9999Freshkills Parktrue622236745730588671null
Staten Island9999Freshkills Parktrue622236745694248959null
Staten Island9999Freshkills Parktrue622236745679011839null
Staten Island9999Freshkills Parktrue622236745734094847null
Staten Island9999Freshkills Parktrue622236745762209791null
Staten Island9999Freshkills Parktrue622236745731735551null
Staten Island9999Freshkills Parktrue622236745725870079null
Staten Island9999Freshkills Parktrue622236745680158719null
Staten Island9999Freshkills Parktrue622236745689530367null
Staten Island9999Freshkills Parktrue622236745683664895null
Staten Island9999Freshkills Parktrue622236745763356671null
Staten Island9999Freshkills Parktrue622236745693036543null
Staten Island9999Freshkills Parktrue622236745732882431null
Staten Island9999Freshkills Parktrue622236745702408191null
Staten Island9999Freshkills Parktrue622236745681305599null
Staten Island9999Freshkills Parktrue622236745760997375null
Staten Island9999Freshkills Parktrue622236745675440127null
Staten Island9999Freshkills Parktrue622236745730523135null
Staten Island9999Freshkills Parktrue622236745703555071null
Staten Island9999Freshkills Parktrue622236745762144255null
Staten Island9999Freshkills Parktrue622236745725804543null
Staten Island9999Freshkills Parktrue622236745680093183null
Staten Island9999Freshkills Parktrue622236745683599359null
Staten Island9999Freshkills Parktrue622236745763291135null
Staten Island9999Freshkills Parktrue622236745692971007null
Staten Island9999Freshkills Parktrue622236745732816895null
Staten Island9999Freshkills Parktrue622236745913303039null
Staten Island9999Freshkills Parktrue622236745702342655null
Staten Island9999Freshkills Parktrue622236745681240063null
Staten Island9999Freshkills Parktrue622236745690611711null
Staten Island9999Freshkills Parktrue622236745675374591null
Staten Island9999Freshkills Parktrue622236745694117887null
Staten Island9999Freshkills Parktrue622236745733963775null
Staten Island9999Freshkills Parktrue622236745703489535null
Staten Island9999Freshkills Parktrue622236745731604479null
Staten Island9999Freshkills Parktrue622236745689399295null
Staten Island9999Freshkills Parktrue622236745683533823null
Staten Island9999Freshkills Parktrue622236745763225599null
Staten Island9999Freshkills Parktrue622236745692905471null
Staten Island9999Freshkills Parktrue622236745732751359null
Staten Island9999Freshkills Parktrue622236745913237503null
Staten Island9999Freshkills Parktrue622236745702277119null
Staten Island9999Freshkills Parktrue622236745742123007null
Staten Island9999Freshkills Parktrue622236745681174527null
Staten Island9999Freshkills Parktrue622236745760866303null
Staten Island9999Freshkills Parktrue622236745730392063null
Staten Island9999Freshkills Parktrue622236745684680703null
Staten Island9999Freshkills Parktrue622236745724526591null
Staten Island9999Freshkills Parktrue622236745764372479null
Staten Island9999Freshkills Parktrue622236745694052351null
Staten Island9999Freshkills Parktrue622236745733898239null
Staten Island9999Freshkills Parktrue622236745703423999null
Staten Island9999Freshkills Parktrue622236745682321407null
Staten Island9999Freshkills Parktrue622236745731538943null
Staten Island9999Freshkills Parktrue622236745725673471null
Staten Island9999Freshkills Parktrue622236745695199231null
Staten Island9999Freshkills Parktrue622236745735045119null
Staten Island9999Freshkills Parktrue622236745689333759null
Staten Island9999Freshkills Parktrue622236745683468287null
Staten Island9999Freshkills Parktrue622236745763160063null
Staten Island9999Freshkills Parktrue622236745732685823null
Staten Island9999Freshkills Parktrue622236745702211583null
Staten Island9999Freshkills Parktrue622236745742057471null
Staten Island9999Freshkills Parktrue622236745681108991null
Staten Island9999Freshkills Parktrue622236745760800767null
Staten Island9999Freshkills Parktrue622236745690480639null
Staten Island9999Freshkills Parktrue622236745675243519null
Staten Island9999Freshkills Parktrue622236745684615167null
Staten Island9999Freshkills Parktrue622236745764306943null
Staten Island9999Freshkills Parktrue622236745693986815null
Staten Island9999Freshkills Parktrue622236745733832703null
Staten Island9999Freshkills Parktrue622236745672884223null
Staten Island9999Freshkills Parktrue622236745682255871null
Staten Island9999Freshkills Parktrue622236746168631295null
Staten Island9999Freshkills Parktrue622236745761947647null
Staten Island9999Freshkills Parktrue622236745731473407null
Staten Island9999Freshkills Parktrue622236745725607935null
Staten Island9999Freshkills Parktrue622236745695133695null
Staten Island9999Freshkills Parktrue622236745734979583null
Staten Island9999Freshkills Parktrue622236745689268223null
Staten Island9999Freshkills Parktrue622236745683402751null
Staten Island9999Freshkills Parktrue622236745723248639null
Staten Island9999Freshkills Parktrue622236745732620287null
Staten Island9999Freshkills Parktrue622236745702146047null
Staten Island9999Freshkills Parktrue622236745741991935null
Staten Island9999Freshkills Parktrue622236745760735231null
Staten Island9999Freshkills Parktrue622236745690415103null
Staten Island9999Freshkills Parktrue622236745675177983null
Staten Island9999Freshkills Parktrue622236745684549631null
Staten Island9999Freshkills Parktrue622236745724395519null
Staten Island9999Freshkills Parktrue622236745764241407null
Staten Island9999Freshkills Parktrue622236745703292927null
Staten Island9999Freshkills Parktrue622236745682190335null
Staten Island9999Freshkills Parktrue622236746168565759null
Staten Island9999Freshkills Parktrue622236745676324863null
Staten Island9999Freshkills Parktrue622236745725542399null
Staten Island9999Freshkills Parktrue622236745695068159null
Staten Island9999Freshkills Parktrue622236745734914047null
Staten Island9999Freshkills Parktrue622236745683337215null
Staten Island9999Freshkills Parktrue622236745723183103null
Staten Island9999Freshkills Parktrue622236745732554751null
Staten Island9999Freshkills Parktrue622236745702080511null
Staten Island9999Freshkills Parktrue622236745741926399null
Staten Island9999Freshkills Parktrue622236745760669695null
Staten Island9999Freshkills Parktrue622236745690349567null
Staten Island9999Freshkills Parktrue622236745675112447null
Staten Island9999Freshkills Parktrue622236745693855743null
Staten Island9999Freshkills Parktrue622236745703227391null
Staten Island9999Freshkills Parktrue622236745743073279null
Staten Island9999Freshkills Parktrue622236745672753151null
Staten Island9999Freshkills Parktrue622236746168500223null
Staten Island9999Freshkills Parktrue622236745676259327null
Staten Island9999Freshkills Parktrue622236745731342335null
Staten Island9999Freshkills Parktrue622236745725476863null
Staten Island9999Freshkills Parktrue622236745695002623null
Staten Island9999Freshkills Parktrue622236745734848511null
Staten Island9999Freshkills Parktrue622236745673900031null
Staten Island9999Freshkills Parktrue622236745683271679null
Staten Island9999Freshkills Parktrue622236745723117567null
Staten Island9999Freshkills Parktrue622236745732489215null
Staten Island9999Freshkills Parktrue622236745702014975null
Staten Island9999Freshkills Parktrue622236745741860863null
Staten Island9999Freshkills Parktrue622236745726623743null
Staten Island9999Freshkills Parktrue622236745760604159null
Staten Island9999Freshkills Parktrue622236745690284031null
Staten Island9999Freshkills Parktrue622236745684418559null
Staten Island9999Freshkills Parktrue622236745724264447null
Staten Island9999Freshkills Parktrue622236745693790207null
Staten Island9999Freshkills Parktrue622236745733636095null
Staten Island9999Freshkills Parktrue622236745703161855null
Staten Island9999Freshkills Parktrue622236745743007743null
Staten Island9999Freshkills Parktrue622236745697296383null
Staten Island9999Freshkills Parktrue622236746168434687null
Staten Island9999Freshkills Parktrue622236745676193791null
Staten Island9999Freshkills Parktrue622236745731276799null
Staten Island9999Freshkills Parktrue622236745725411327null
Staten Island9999Freshkills Parktrue622236745694937087null
Staten Island9999Freshkills Parktrue622236745679699967null
Staten Island9999Freshkills Parktrue622236745734782975null
Staten Island9999Freshkills Parktrue622236745683206143null
Staten Island9999Freshkills Parktrue622236745723052031null
Staten Island9999Freshkills Parktrue622236745692577791null
Staten Island9999Freshkills Parktrue622236745732423679null
Staten Island9999Freshkills Parktrue622236745701949439null
Staten Island9999Freshkills Parktrue622236745741795327null
Staten Island9999Freshkills Parktrue622236745726558207null
Staten Island9999Freshkills Parktrue622236745760538623null
Staten Island9999Freshkills Parktrue622236745690218495null
Staten Island9999Freshkills Parktrue622236745674981375null
Staten Island9999Freshkills Parktrue622236745684353023null
Staten Island9999Freshkills Parktrue622236745724198911null
Staten Island9999Freshkills Parktrue622236745693724671null
Staten Island9999Freshkills Parktrue622236745697230847null
Staten Island9999Freshkills Parktrue622236745761685503null
Staten Island9999Freshkills Parktrue622236745676128255null
Staten Island9999Freshkills Parktrue622236745731211263null
Staten Island9999Freshkills Parktrue622236745725345791null
Staten Island9999Freshkills Parktrue622236745694871551null
Staten Island9999Freshkills Parktrue622236745734717439null
Staten Island9999Freshkills Parktrue622236745683140607null
Staten Island9999Freshkills Parktrue622236745722986495null
Staten Island9999Freshkills Parktrue622236745732358143null
Staten Island9999Freshkills Parktrue622236745701883903null
Staten Island9999Freshkills Parktrue622236745741729791null
Staten Island9999Freshkills Parktrue622236745726492671null
Staten Island9999Freshkills Parktrue622236745690152959null
Staten Island9999Freshkills Parktrue622236745674915839null
Staten Island9999Freshkills Parktrue622236745684287487null
Staten Island9999Freshkills Parktrue622236745724133375null
Staten Island9999Freshkills Parktrue622236745703030783null
Staten Island9999Freshkills Parktrue622236745697165311null
Staten Island9999Freshkills Parktrue622236745761619967null
Staten Island9999Freshkills Parktrue622236745676062719null
Staten Island9999Freshkills Parktrue622236745725280255null
Staten Island9999Freshkills Parktrue622236745694806015null
Staten Island9999Freshkills Parktrue622236745734651903null
Staten Island9999Freshkills Parktrue622236745683075071null
Staten Island9999Freshkills Parktrue622236745722920959null
Staten Island9999Freshkills Parktrue622236745692446719null
Staten Island9999Freshkills Parktrue622236745732292607null
Staten Island9999Freshkills Parktrue622236745701818367null
Staten Island9999Freshkills Parktrue622236745741664255null
Staten Island9999Freshkills Parktrue622236745735798783null
Staten Island9999Freshkills Parktrue622236745690087423null
Staten Island9999Freshkills Parktrue622236745674850303null
Staten Island9999Freshkills Parktrue622236745693593599null
Staten Island9999Freshkills Parktrue622236745733439487null
Staten Island9999Freshkills Parktrue622236745702965247null
Staten Island9999Freshkills Parktrue622236745742811135null
Staten Island9999Freshkills Parktrue622236745697099775null
Staten Island9999Freshkills Parktrue622236745675997183null
Staten Island9999Freshkills Parktrue622236745725214719null
Staten Island9999Freshkills Parktrue622236745694740479null
Staten Island9999Freshkills Parktrue622236745734586367null
Staten Island9999Freshkills Parktrue622236745698246655null
Staten Island9999Freshkills Parktrue622236745683009535null
Staten Island9999Freshkills Parktrue622236745722855423null
Staten Island9999Freshkills Parktrue622236745762701311null
Staten Island9999Freshkills Parktrue622236745732227071null
Staten Island9999Freshkills Parktrue622236745726361599null
Staten Island9999Freshkills Parktrue622236745735733247null
Staten Island9999Freshkills Parktrue622236745690021887null
Staten Island9999Freshkills Parktrue622236745684156415null
Staten Island9999Freshkills Parktrue622236745724002303null
Staten Island9999Freshkills Parktrue622236745693528063null
Staten Island9999Freshkills Parktrue622236745733373951null
Staten Island9999Freshkills Parktrue622236745702899711null
Staten Island9999Freshkills Parktrue622236745742745599null
Staten Island9999Freshkills Parktrue622236745697034239null
Staten Island9999Freshkills Parktrue622236745681797119null
Staten Island9999Freshkills Parktrue622236745736880127null
Staten Island9999Freshkills Parktrue622236745761488895null
Staten Island9999Freshkills Parktrue622236745675931647null
Staten Island9999Freshkills Parktrue622236745725149183null
Staten Island9999Freshkills Parktrue622236745694674943null
Staten Island9999Freshkills Parktrue622236745734520831null
Staten Island9999Freshkills Parktrue622236745682943999null
Staten Island9999Freshkills Parktrue622236745722789887null
Staten Island9999Freshkills Parktrue622236745732161535null
Staten Island9999Freshkills Parktrue622236745726296063null
Staten Island9999Freshkills Parktrue622236745735667711null
Staten Island9999Freshkills Parktrue622236745689956351null
Staten Island9999Freshkills Parktrue622236745674719231null
Staten Island9999Freshkills Parktrue622236745684090879null
Staten Island9999Freshkills Parktrue622236745723936767null
Staten Island9999Freshkills Parktrue622236745693462527null
Staten Island9999Freshkills Parktrue622236745733308415null
Staten Island9999Freshkills Parktrue622236745696968703null
Staten Island9999Freshkills Parktrue622236745736814591null
Staten Island9999Freshkills Parktrue622236745761423359null
Staten Island9999Freshkills Parktrue622236745675866111null
Staten Island9999Freshkills Parktrue622236745725083647null
Staten Island9999Freshkills Parktrue622236745694609407null
Staten Island9999Freshkills Parktrue622236745734455295null
Staten Island9999Freshkills Parktrue622236745732095999null
Staten Island9999Freshkills Parktrue622236745726230527null
Staten Island9999Freshkills Parktrue622236745689890815null
Staten Island9999Freshkills Parktrue622236745674653695null
Staten Island9999Freshkills Parktrue622236745684025343null
Staten Island9999Freshkills Parktrue622236745723871231null
Staten Island9999Freshkills Parktrue622236745702768639null
Staten Island9999Freshkills Parktrue622236745742614527null
Staten Island9999Freshkills Parktrue622236745681666047null
Staten Island9999Freshkills Parktrue622236745736749055null
Staten Island9999Freshkills Parktrue622236745761357823null
Staten Island9999Freshkills Parktrue622236745675800575null
Staten Island9999Freshkills Parktrue622236745725018111null
Staten Island9999Freshkills Parktrue622236745694543871null
Staten Island9999Freshkills Parktrue622236745734389759null
Staten Island9999Freshkills Parktrue622236745732030463null
Staten Island9999Freshkills Parktrue622236745689825279null
Staten Island9999Freshkills Parktrue622236745674588159null
Staten Island9999Freshkills Parktrue622236745702703103null
Staten Island9999Freshkills Parktrue622236745742548991null
Staten Island9999Freshkills Parktrue622236745736683519null
Staten Island9999Freshkills Parktrue622236745690972159null
Staten Island9999Freshkills Parktrue622236745675735039null
Staten Island9999Freshkills Parktrue622236745724952575null
Staten Island9999Freshkills Parktrue622236745694478335null
Staten Island9999Freshkills Parktrue622236745734324223null
Staten Island9999Freshkills Parktrue622236745731964927null
Staten Island9999Freshkills Parktrue622236745726099455null
Staten Island9999Freshkills Parktrue622236745689759743null
Staten Island9999Freshkills Parktrue622236745683894271null
Staten Island9999Freshkills Parktrue622236745723740159null
Staten Island9999Freshkills Parktrue622236745702637567null
Staten Island9999Freshkills Parktrue622236745742483455null
Staten Island9999Freshkills Parktrue622236745696772095null
Staten Island9999Freshkills Parktrue622236745761226751null
Staten Island9999Freshkills Parktrue622236745690906623null
Staten Island9999Freshkills Parktrue622236745675669503null
Staten Island9999Freshkills Parktrue622236745724887039null
Staten Island9999Freshkills Parktrue622236745694412799null
Staten Island9999Freshkills Parktrue622236745679175679null
Staten Island9999Freshkills Parktrue622236745734258687null
Staten Island9999Freshkills Parktrue622236745731899391null
Staten Island9999Freshkills Parktrue622236745726033919null
Staten Island9999Freshkills Parktrue622236745689694207null
Staten Island9999Freshkills Parktrue622236745683828735null
Staten Island9999Freshkills Parktrue622236745723674623null
Staten Island9999Freshkills Parktrue622236745763520511null
Staten Island9999Freshkills Parktrue622236745696706559null
Staten Island9999Freshkills Parktrue622236745761161215null
Staten Island9999Freshkills Parktrue622236745690841087null
Staten Island9999Freshkills Parktrue622236745675603967null
Staten Island9999Freshkills Parktrue622236745694347263null
Staten Island9999Freshkills Parktrue622236745679110143null
Staten Island9999Freshkills Parktrue622236745734193151null
Staten Island9999Freshkills Parktrue622236745762308095null
Staten Island9999Freshkills Parktrue622236745731833855null
Staten Island9999Freshkills Parktrue622236745725968383null
Staten Island9999Freshkills Parktrue622236745689628671null
Staten Island9999Freshkills Parktrue622236745729474559null
Staten Island9999Freshkills Parktrue622236745683763199null
Staten Island9999Freshkills Parktrue622236745723609087null
Staten Island9999Freshkills Parktrue622236745763454975null
Staten Island9999Freshkills Parktrue622236745702506495null
Staten Island9999Freshkills Parktrue622236745742352383null
Staten Island9999Freshkills Parktrue622236745696641023null
Staten Island9999Freshkills Parktrue622236745761095679null
Staten Island9999Freshkills Parktrue622236745675538431null
Staten Island9999Freshkills Parktrue622236745694281727null
Staten Island9999Freshkills Parktrue622236745679044607null
Staten Island9999Freshkills Parktrue622236745734127615null
Staten Island9999Freshkills Parktrue622236745762242559null
Staten Island9999Freshkills Parktrue622236745731768319null
Staten Island9999Freshkills Parktrue622236745680191487null
Staten Island9999Freshkills Parktrue622236745689563135null
Staten Island9999Freshkills Parktrue622236745693069311null
Staten Island9999Freshkills Parktrue622236745732915199null
Staten Island9999Freshkills Parktrue622236745702440959null
Staten Island9999Freshkills Parktrue622236745696575487null
Staten Island9999Freshkills Parktrue622236745675472895null
Staten Island9999Freshkills Parktrue622236745730555903null
Staten Island9999Freshkills Parktrue622236745694216191null
Staten Island9999Freshkills Parktrue622236745734062079null
Staten Island9999Freshkills Parktrue622236745703587839null
Staten Island9999Freshkills Parktrue622236745762177023null
Staten Island9999Freshkills Parktrue622236745731702783null
Staten Island9999Freshkills Parktrue622236745725837311null
Staten Island9999Freshkills Parktrue622236745689497599null
Staten Island9999Freshkills Parktrue622236745683632127null
Staten Island9999Freshkills Parktrue622236745723478015null
Staten Island9999Freshkills Parktrue622236745763323903null
Staten Island9999Freshkills Parktrue622236745693003775null
Staten Island9999Freshkills Parktrue622236745732849663null
Staten Island9999Freshkills Parktrue622236745702375423null
Staten Island9999Freshkills Parktrue622236745681272831null
Staten Island9999Freshkills Parktrue622236745690644479null
Staten Island9999Freshkills Parktrue622236745675407359null
Staten Island9999Freshkills Parktrue622236745730490367null
Staten Island9999Freshkills Parktrue622236745694150655null
Staten Island9999Freshkills Parktrue622236745733996543null
Staten Island9999Freshkills Parktrue622236745703522303null
Staten Island9999Freshkills Parktrue622236745762111487null
Staten Island9999Freshkills Parktrue622236745731637247null
Staten Island9999Freshkills Parktrue622236745680060415null
Staten Island9999Freshkills Parktrue622236745689432063null
Staten Island9999Freshkills Parktrue622236745683566591null
Staten Island9999Freshkills Parktrue622236745763258367null
Staten Island9999Freshkills Parktrue622236745692938239null
Staten Island9999Freshkills Parktrue622236745732784127null
Staten Island9999Freshkills Parktrue622236745681207295null
Staten Island9999Freshkills Parktrue622236745760899071null
Staten Island9999Freshkills Parktrue622236745675341823null
Staten Island9999Freshkills Parktrue622236745730424831null
Staten Island9999Freshkills Parktrue622236745684713471null
Staten Island9999Freshkills Parktrue622236745764405247null
Staten Island9999Freshkills Parktrue622236745694085119null
Staten Island9999Freshkills Parktrue622236745733931007null
Staten Island9999Freshkills Parktrue622236745703456767null
Staten Island9999Freshkills Parktrue622236745682354175null
Staten Island9999Freshkills Parktrue622236745762045951null
Staten Island9999Freshkills Parktrue622236745731571711null
Staten Island9999Freshkills Parktrue622236745725706239null
Staten Island9999Freshkills Parktrue622236745689366527null
Staten Island9999Freshkills Parktrue622236745683501055null
Staten Island9999Freshkills Parktrue622236745763192831null
Staten Island9999Freshkills Parktrue622236745702244351null
Staten Island9999Freshkills Parktrue622236745742090239null
Staten Island9999Freshkills Parktrue622236745681141759null
Staten Island9999Freshkills Parktrue622236745675276287null
Staten Island9999Freshkills Parktrue622236745684647935null
Staten Island9999Freshkills Parktrue622236745724493823null
Staten Island9999Freshkills Parktrue622236745764339711null
Staten Island9999Freshkills Parktrue622236745694019583null
Staten Island9999Freshkills Parktrue622236745678782463null
Staten Island9999Freshkills Parktrue622236745733865471null
Staten Island9999Freshkills Parktrue622236745703391231null
Staten Island9999Freshkills Parktrue622236745682288639null
Staten Island9999Freshkills Parktrue622236745761980415null
Staten Island9999Freshkills Parktrue622236745731506175null
Staten Island9999Freshkills Parktrue622236745695166463null
Staten Island9999Freshkills Parktrue622236745735012351null
Staten Island9999Freshkills Parktrue622236745689300991null
Staten Island9999Freshkills Parktrue622236745732653055null
Staten Island9999Freshkills Parktrue622236745702178815null
Staten Island9999Freshkills Parktrue622236745742024703null
Staten Island9999Freshkills Parktrue622236745690447871null
Staten Island9999Freshkills Parktrue622236745675210751null
Staten Island9999Freshkills Parktrue622236745684582399null
Staten Island9999Freshkills Parktrue622236745764274175null
Staten Island9999Freshkills Parktrue622236745693954047null
Staten Island9999Freshkills Parktrue622236745733799935null
Staten Island9999Freshkills Parktrue622236745703325695null
Staten Island9999Freshkills Parktrue622236745743171583null
Staten Island9999Freshkills Parktrue622236745682223103null
Staten Island9999Freshkills Parktrue622236745761914879null
Staten Island9999Freshkills Parktrue622236745731440639null
Staten Island9999Freshkills Parktrue622236745725575167null
Staten Island9999Freshkills Parktrue622236745695100927null
Staten Island9999Freshkills Parktrue622236745734946815null
Staten Island9999Freshkills Parktrue622236745689235455null
Staten Island9999Freshkills Parktrue622236745683369983null
Staten Island9999Freshkills Parktrue622236745723215871null
Staten Island9999Freshkills Parktrue622236745732587519null
Staten Island9999Freshkills Parktrue622236745702113279null
Staten Island9999Freshkills Parktrue622236745741959167null
Staten Island9999Freshkills Parktrue622236745696247807null
Staten Island9999Freshkills Parktrue622236745681010687null
Staten Island9999Freshkills Parktrue622236745760702463null
Staten Island9999Freshkills Parktrue622236745690382335null
Staten Island9999Freshkills Parktrue622236745675145215null
Staten Island9999Freshkills Parktrue622236745684516863null
Staten Island9999Freshkills Parktrue622236745724362751null
Staten Island9999Freshkills Parktrue622236745764208639null
Staten Island9999Freshkills Parktrue622236745693888511null
Staten Island9999Freshkills Parktrue622236745733734399null
Staten Island9999Freshkills Parktrue622236745703260159null
Staten Island9999Freshkills Parktrue622236745743106047null
Staten Island9999Freshkills Parktrue622236745682157567null
Staten Island9999Freshkills Parktrue622236745761849343null
Staten Island9999Freshkills Parktrue622236745691529215null
Staten Island9999Freshkills Parktrue622236745676292095null
Staten Island9999Freshkills Parktrue622236745731375103null
Staten Island9999Freshkills Parktrue622236745725509631null
Staten Island9999Freshkills Parktrue622236745695035391null
Staten Island9999Freshkills Parktrue622236745734881279null
Staten Island9999Freshkills Parktrue622236745683304447null
Staten Island9999Freshkills Parktrue622236745723150335null
Staten Island9999Freshkills Parktrue622236745732521983null
Staten Island9999Freshkills Parktrue622236745726656511null
Staten Island9999Freshkills Parktrue622236745696182271null
Staten Island9999Freshkills Parktrue622236745760636927null
Staten Island9999Freshkills Parktrue622236745690316799null
Staten Island9999Freshkills Parktrue622236745675079679null
Staten Island9999Freshkills Parktrue622236745684451327null
Staten Island9999Freshkills Parktrue622236745724297215null
Staten Island9999Freshkills Parktrue622236745693822975null
Staten Island9999Freshkills Parktrue622236745733668863null
Staten Island9999Freshkills Parktrue622236745703194623null
Staten Island9999Freshkills Parktrue622236745743040511null
Staten Island9999Freshkills Parktrue622236745761783807null
Staten Island9999Freshkills Parktrue622236745691463679null
Staten Island9999Freshkills Parktrue622236745676226559null
Staten Island9999Freshkills Parktrue622236745731309567null
Staten Island9999Freshkills Parktrue622236745725444095null
Staten Island9999Freshkills Parktrue622236745683238911null
Staten Island9999Freshkills Parktrue622236745723084799null
Staten Island9999Freshkills Parktrue622236745701982207null
Staten Island9999Freshkills Parktrue622236745741828095null
Staten Island9999Freshkills Parktrue622236745726590975null
Staten Island9999Freshkills Parktrue622236745696116735null
Staten Island9999Freshkills Parktrue622236745760571391null
Staten Island9999Freshkills Parktrue622236745675014143null
Staten Island9999Freshkills Parktrue622236745684385791null
Staten Island9999Freshkills Parktrue622236745724231679null
Staten Island9999Freshkills Parktrue622236745693757439null
Staten Island9999Freshkills Parktrue622236745733603327null
Staten Island9999Freshkills Parktrue622236745703129087null
Staten Island9999Freshkills Parktrue622236745742974975null
Staten Island9999Freshkills Parktrue622236745697263615null
Staten Island9999Freshkills Parktrue622236745676161023null
Staten Island9999Freshkills Parktrue622236745731244031null
Staten Island9999Freshkills Parktrue622236745694904319null
Staten Island9999Freshkills Parktrue622236745734750207null
Staten Island9999Freshkills Parktrue622236745732390911null
Staten Island9999Freshkills Parktrue622236745701916671null
Staten Island9999Freshkills Parktrue622236745741762559null
Staten Island9999Freshkills Parktrue622236745726525439null
Staten Island9999Freshkills Parktrue622236745690185727null
Staten Island9999Freshkills Parktrue622236745674948607null
Staten Island9999Freshkills Parktrue622236745684320255null
Staten Island9999Freshkills Parktrue622236745724166143null
Staten Island9999Freshkills Parktrue622236745693691903null
Staten Island9999Freshkills Parktrue622236745733537791null
Staten Island9999Freshkills Parktrue622236745703063551null
Staten Island9999Freshkills Parktrue622236745697198079null
Staten Island9999Freshkills Parktrue622236745761652735null
Staten Island9999Freshkills Parktrue622236745731178495null
Staten Island9999Freshkills Parktrue622236745694838783null
Staten Island9999Freshkills Parktrue622236745734684671null
Staten Island9999Freshkills Parktrue622236745698344959null
Staten Island9999Freshkills Parktrue622236745683107839null
Staten Island9999Freshkills Parktrue622236745722953727null
Staten Island9999Freshkills Parktrue622236745692479487null
Staten Island9999Freshkills Parktrue622236745732325375null
Staten Island9999Freshkills Parktrue622236745701851135null
Staten Island9999Freshkills Parktrue622236745741697023null
Staten Island9999Freshkills Parktrue622236745726459903null
Staten Island9999Freshkills Parktrue622236745735831551null
Staten Island9999Freshkills Parktrue622236745690120191null
Staten Island9999Freshkills Parktrue622236745674883071null
Staten Island9999Freshkills Parktrue622236745684254719null
Staten Island9999Freshkills Parktrue622236745724100607null
Staten Island9999Freshkills Parktrue622236745693626367null
Staten Island9999Freshkills Parktrue622236745733472255null
Staten Island9999Freshkills Parktrue622236745702998015null
Staten Island9999Freshkills Parktrue622236745697132543null
Staten Island9999Freshkills Parktrue622236745676029951null
Staten Island9999Freshkills Parktrue622236745725247487null
Staten Island9999Freshkills Parktrue622236745694773247null
Staten Island9999Freshkills Parktrue622236745734619135null
Staten Island9999Freshkills Parktrue622236745683042303null
Staten Island9999Freshkills Parktrue622236745722888191null
Staten Island9999Freshkills Parktrue622236745762734079null
Staten Island9999Freshkills Parktrue622236745732259839null
Staten Island9999Freshkills Parktrue622236745726394367null
Staten Island9999Freshkills Parktrue622236745735766015null
Staten Island9999Freshkills Parktrue622236745690054655null
Staten Island9999Freshkills Parktrue622236745674817535null
Staten Island9999Freshkills Parktrue622236745684189183null
Staten Island9999Freshkills Parktrue622236745724035071null
Staten Island9999Freshkills Parktrue622236745693560831null
Staten Island9999Freshkills Parktrue622236745733406719null
Staten Island9999Freshkills Parktrue622236745702932479null
Staten Island9999Freshkills Parktrue622236745761521663null
Staten Island9999Freshkills Parktrue622236745675964415null
Staten Island9999Freshkills Parktrue622236745698213887null
Staten Island9999Freshkills Parktrue622236745682976767null
Staten Island9999Freshkills Parktrue622236745722822655null
Staten Island9999Freshkills Parktrue622236745726328831null
Staten Island9999Freshkills Parktrue622236745674751999null
Staten Island9999Freshkills Parktrue622236745684123647null
Staten Island9999Freshkills Parktrue622236745723969535null
Staten Island9999Freshkills Parktrue622236745693495295null
Staten Island9999Freshkills Parktrue622236745733341183null
Staten Island9999Freshkills Parktrue622236745702866943null
Staten Island9999Freshkills Parktrue622236745736847359null
Staten Island9999Freshkills Parktrue622236745761456127null
Staten Island9999Freshkills Parktrue622236745675898879null
Staten Island9999Freshkills Parktrue622236745694642175null
Staten Island9999Freshkills Parktrue622236745734488063null
Staten Island9999Freshkills Parktrue622236745698148351null
Staten Island9999Freshkills Parktrue622236745732128767null
Staten Island9999Freshkills Parktrue622236745726263295null
Staten Island9999Freshkills Parktrue622236745735634943null
Staten Island9999Freshkills Parktrue622236745689923583null
Staten Island9999Freshkills Parktrue622236745674686463null
Staten Island9999Freshkills Parktrue622236745684058111null
Staten Island9999Freshkills Parktrue622236745723903999null
Staten Island9999Freshkills Parktrue622236745693429759null
Staten Island9999Freshkills Parktrue622236745733275647null
Staten Island9999Freshkills Parktrue622236745702801407null
Staten Island9999Freshkills Parktrue622236745742647295null
Staten Island9999Freshkills Parktrue622236745736781823null
Staten Island9999Freshkills Parktrue622236745761390591null
Staten Island9999Freshkills Parktrue622236745725050879null
Staten Island9999Freshkills Parktrue622236745694576639null
Staten Island9999Freshkills Parktrue622236745734422527null
Staten Island9999Freshkills Parktrue622236745732063231null
Staten Island9999Freshkills Parktrue622236745726197759null
Staten Island9999Freshkills Parktrue622236745689858047null
Staten Island9999Freshkills Parktrue622236745674620927null
Staten Island9999Freshkills Parktrue622236745683992575null
Staten Island9999Freshkills Parktrue622236745723838463null
Staten Island9999Freshkills Parktrue622236745702735871null
Staten Island9999Freshkills Parktrue622236745742581759null
Staten Island9999Freshkills Parktrue622236745736716287null
Staten Island9999Freshkills Parktrue622236745761325055null
Staten Island9999Freshkills Parktrue622236745691004927null
Staten Island9999Freshkills Parktrue622236745675767807null
Staten Island9999Freshkills Parktrue622236745724985343null
Staten Island9999Freshkills Parktrue622236745694511103null
Staten Island9999Freshkills Parktrue622236745734356991null
Staten Island9999Freshkills Parktrue622236745731997695null
Staten Island9999Freshkills Parktrue622236745726132223null
Staten Island9999Freshkills Parktrue622236745689792511null
Staten Island9999Freshkills Parktrue622236745674555391null
Staten Island9999Freshkills Parktrue622236745683927039null
Staten Island9999Freshkills Parktrue622236745723772927null
Staten Island9999Freshkills Parktrue622236745763618815null
Staten Island9999Freshkills Parktrue622236745702670335null
Staten Island9999Freshkills Parktrue622236745742516223null
Staten Island9999Freshkills Parktrue622236745761259519null
Staten Island9999Freshkills Parktrue622236745690939391null
Staten Island9999Freshkills Parktrue622236745675702271null
Staten Island9999Freshkills Parktrue622236745724919807null
Staten Island9999Freshkills Parktrue622236745679208447null
Staten Island9999Freshkills Parktrue622236745726066687null
Staten Island9999Freshkills Parktrue622236745683861503null
Staten Island9999Freshkills Parktrue622236745723707391null
Staten Island9999Freshkills Parktrue622236745702604799null
Staten Island9999Freshkills Parktrue622236745742450687null
Staten Island9999Freshkills Parktrue622236745696739327null
Staten Island9999Freshkills Parktrue622236745761193983null
Staten Island9999Freshkills Parktrue622236745690873855null
Staten Island9999Freshkills Parktrue622236745675636735null
Staten Island9999Freshkills Parktrue622236745694380031null
Staten Island9999Freshkills Parktrue622236745679142911null
Staten Island9999Freshkills Parktrue622236745734225919null
Staten Island9999Freshkills Parktrue622236745731866623null
Staten Island9999Freshkills Parktrue622236745726001151null
Staten Island9999Freshkills Parktrue622236745689661439null
Staten Island9999Freshkills Parktrue622236745729507327null
Staten Island9999Freshkills Parktrue622236745683795967null
Staten Island9999Freshkills Parktrue622236745723641855null
Staten Island9999Freshkills Parktrue622236745763487743null
Staten Island9999Freshkills Parktrue622236745702539263null
Staten Island9999Freshkills Parktrue622236745696673791null
Staten Island9999Freshkills Parktrue622236745761128447null
Staten Island9999Freshkills Parktrue622236745690808319null
Staten Island9999Freshkills Parktrue622236745725739007null
Staten Island9999Freshkills Parkfalse622236745696935935AQMAAAABAAAABAAAAIzvORt9i1LAUzWXQ0NIRECs3yEigotSwIct0/1KSERAz1Bl94WLUsD10IC1SUhEQIzvORt9i1LAUzWXQ0NIREA=
Staten Island9999Freshkills Parkfalse622236746167451647AQMAAAABAAAABQAAALLLamedjVLA7PTzHUVHREBNNifZjI1SwIx+IDVNR0RAo5WznI2NUsAYmXlhTkdEQOZxFHmcjVLAepg7ZklHRECyy2pnnY1SwOz08x1FR0RA
Staten Island9999Freshkills Parkfalse622236745725181951AQMAAAABAAAACAAAAKO97SfLjFLAIFImkFVHRECDqWsmwIxSwIgY7T9ZR0RAaiCr/7mMUsAVstwXZUdEQKmCacK3jFLAJQi4Ym9HREBTwBAWwoxSwGytiUB/R0RAlcOy8tCMUsB7rxhGekdEQE9Ql3vVjFLA5tnfbWVHRECjve0= (truncated)
Staten Island9999Freshkills Parkfalse622236745692708863AQMAAAABAAAACgAAABxTRq7gilLAmdfeuPlHREDD33S73YpSwKGHSLX6R0RAyUDDbd2KUsAKqHCXDEhEQHoKDC7dilLAXpp1LhtIRECzsMwt3YpSwIA5Dj0bSERAJM9mHN2KUsARqtk4H0hEQKbuUhbdilLAAg+akiFIREAwyi0= (truncated)
Staten Island9999Freshkills Parkfalse622236745763880959AQMAAAABAAAABAAAAMJtrBbEilLAuXWkiSxLREAKJ7ZcwYpSwLrfZjFBS0RAuOwva8WKUsAVGCeVLktEQMJtrBbEilLAuXWkiSxLREA=
Staten Island9999Freshkills Parkfalse622236745673801727AQMAAAABAAAAEAAAAEusd47ri1LARkK8hxlLREB67WSv3ItSwK+/oIEeS0RAiTnvJNiLUsC9w3NbM0tEQKosoHnii1LAw55wO0NLRECON47p6otSwA05smhAS0RAQTKHHt2LUsCWtkiYMUtEQGXeF4jfi1LAns6gKjFLREAkqVc= (truncated)
Staten Island9999Freshkills Parkfalse622236745762766847AQMAAAABAAAABAAAABHqBw3NilLA5PFQ+cpKREA20j3kzIpSwHeLCgrNSkRAic/LRM2KUsBDJg1Py0pEQBHqBw3NilLA5PFQ+cpKREA=
Staten Island9999Freshkills Parkfalse622236745769549823AQMAAAABAAAACAAAAEsfeSjQilLAvI5xoTlMREBSSHP3yYpSwGY4QrM7TERAOPSwLMWKUsBX9gTsV0xEQOaTaHXEilLAzKLeUl9MREDTO0MRx4pSwLxEjlVjTERAUghS8dWKUsAn/qZcXkxEQAYG43zailLAFXeRgklMREBLH3k= (truncated)
Staten Island9999Freshkills Parkfalse622236746168893439AQMAAAABAAAACgAAAEFnNV4qjVLAwD4mP1tHREBSQQgeKo1SwJ1uO2ZcR0RAZL/3cTSNUsCXXLZDbEdEQMYbEV82jVLAcXR5nmtHREBx/B14P41SwJ9IGV9eR0RAd4R8yzqNUsDHj1iuXkdEQDyyRxU2jVLAdJqzbl5HREDzpns= (truncated)
Staten Island9999Freshkills Parkfalse622236745673244671AQYAAAACAAAAAQMAAAABAAAABQAAAGfnWjFYjFLAcCT/1uFKREBEWyhGUYxSwCD74ifkSkRAow3VNFKMUsA4U1F95kpEQD0y/b9ZjFLAYpJwO+RKREBn51oxWIxSwHAk/9bhSkRAAQMAAAABAAAABQAAALTRzktOjFLAkEgTJ+U= (truncated)
Staten Island9999Freshkills Parkfalse622236745730293759AQMAAAABAAAADwAAAHsrqeBrjVLALNBqRGhIREC72IoDXY1SwL+PlD9tSERAycTpeliNUsAWLoUYgkhEQF/qes9ijVLAaVta9pFIREB0K4b3bo1SwMamceONSERAC8KjXG+NUsBsmGihjEhEQKB950BwjVLAOz81o4lIREDlS8k= (truncated)
Staten Island9999Freshkills Parkfalse622236745757982719AQMAAAABAAAACAAAAFvg22aMilLANALWn7VLREB+k+jbiopSwE9M1CO2S0RAGDjhCnqKUsDZZAofz0tEQO+Cb7V5ilLATtUVkNBLREBwrGJPg4pSwGznOlPfS0RAL1ApL5KKUsBiUqda2ktEQNP227qWilLAaLPtgMVLREBb4Ns= (truncated)
Staten Island9999Freshkills Parkfalse622236745736519679AQMAAAABAAAABgAAABIxNdUtjVLALY8s+hJKRECy44BiKo1SwHiQ5CEUSkRA9g1i2SWNUsCgwZ/7KEpEQBUkeHMujVLAEIjHMTZKREByI0BpLo1SwE8n89smSkRAEjE11S2NUsAtjyz6EkpEQA==
Staten Island9999Freshkills Parktrue622236745678913535null
Staten Island9999Freshkills Parkfalse622236745682026495AQMAAAABAAAABwAAABhV/Kp6i1LAh31HSGFMRECUDmrva4tSwAQrrjVmTERABZFSZGeLUsARqwQQe0xEQKfzQ7lxi1LAY4jX8IpMRED1jqXhcotSwCtxt42KTERAYIM7BnqLUsBWLJGmYkxEQBhV/Kp6i1LAh31HSGFMREA=
Staten Island9999Freshkills Parkfalse622236745735405567AQMAAAABAAAALAAAACBtiIU+jVLASpeWu6xJREC8PLExMo1SwFki59ywSURAVV6sqC2NUsD4YnG2xUlEQFL7/MY3jVLATD7rQNVJREBHH4DjN41SwDCgssfTSURAIsTaMjiNUsBjWkyr0UlEQI02BZ04jVLAtALEwc9JRED26fE= (truncated)
Staten Island9999Freshkills Parkfalse622236745696149503AQMAAAABAAAACQAAAORf+0wejFLAur1XzyRIRECcUfVWHYxSwICcAXIlSERA39+yMxqMUsA/LFb4JkhEQMyzxCgEjFLA7KJzdS9IRECy6bdfA4xSwLMk9RAzSERAMuo1sw2MUsD2iZTvQkhEQLzpcZAcjFLAsm3J9T1IRECArRk= (truncated)
Staten Island9999Freshkills Parkfalse622236745742188543AQMAAAABAAAACAAAAIprKi5ti1LAwRpDy59MREAWlwtOXotSwFh5zcSkTERAjxrcwlmLUsBkxz+fuUxEQE1c3xdki1LAZg02gMlMREAFjWoXZ4tSwK+BhX/ITERAVAUJCGiLUsDfm3gqx0xEQOtdaKtui1LA144nFaJMRECKayo= (truncated)
Staten Island9999Freshkills Parkfalse622236745699262463AQMAAAABAAAACQAAAJjNyNXrilLAKAnxzP9JREDMTz333IpSwFwbsMUESkRA/2kpzNqKUsC/hKG4DkpEQJ1M8g/ailLAz8UH5RlKREAWV8fm2YpSwFyfwuQbSkRA9IGfv+KKUsAImNB+KUpEQB9AQZ7xilLAEb4HhiRKRECw80s= (truncated)
Staten Island9999Freshkills Parkfalse622236745695592447AQMAAAABAAAAFAAAACHyBz3Zi1LAvWeqxEVIREAEgGFh14tSwOf3dj5ISERATDZXYNeLUsCOiL8/SEhEQOccQV/Xi1LAvJIdQUhIRECJnmNZ04tSwD3fZQVNSERAwUAYJM+LUsD72D9wUUhEQC2BQSPPi1LAkpgWcVFIREBFkXY= (truncated)
Staten Island9999Freshkills Parkfalse622236745912778751AQMAAAABAAAABAAAAGogq/+5jFLAFbLcF2VHREDDmav/s4xSwCv2LqVwR0RAqYJpwreMUsAlCLhib0dEQGogq/+5jFLAFbLcF2VHREA=
Staten Island9999Freshkills Parkfalse622236745769877503AQMAAAABAAAABAAAAAESmsN+ilLAN0D7LPRLRECZpv25fIpSwPYgS9v0S0RAJSoxv3+KUsA+gcyv9UtEQAESmsN+ilLAN0D7LPRLREA=
Staten Island9999Freshkills Parkfalse622236745691365375AQMAAAABAAAACwAAAGozUIn1ilLAEKQIQdlHREAw8SYW9IpSwMcGf+jfR0RALiPBaP6KUsDAqrbH70dEQBJ93QEMi1LA/HtxO+tHREA3kig6BotSwLZ1sPHlR0RAxGtyuQCLUsAGDz7t4EdEQAg8IJ7/ilLA9ibo6t9HREDs7PU= (truncated)
Staten Island9999Freshkills Parkfalse622236745736290303AQMAAAABAAAABgAAAO0EkPJDjVLAR0N/nJ5JREBBXEPvQo1SwJNXp0SjSURA56I3SkONUsBSb/DdoklEQNmKbSVEjVLAIcjG8KFJRECgZKwxRI1SwIaCYj+gSURA7QSQ8kONUsBHQ3+cnklEQA==
Staten Island9999Freshkills Parktrue622236745921560575null
Staten Island9999Freshkills Parkfalse622236745913106431AQMAAAABAAAAEAAAAIIWNIjqjFLAZ2Od0SZHREBZDm1g6IxSwLkJSe8mR0RAA+xnOuaMUsDe2MI4J0dEQNYVpRfkjFLAj2zZrSdHREA05cPV4oxSwDR9Fg0oR0RAKXtIjd6MUsChDoq9O0dEQJJi9ODojFLA9Hgrm0tHREDMPG8= (truncated)
Staten Island9999Freshkills Parkfalse622236745698476031AQMAAAABAAAACQAAALL+ux3oilLAISejGFNJREBRTn3L4IpSwJM6VYtVSURAr2wazOCKUsAX3FEnVklEQKdUfongilLARGuvEmdJRED8vVvz34pSwAZAevV3SURAzrEi0N+KUsB9ldCGfElEQEwaBObtilLAFHgZ0XdJREBOsPA= (truncated)
Staten Island9999Freshkills Parkfalse622236745769648127AQMAAAABAAAABwAAAJ5JnIXCilLA0IWqL3hMRECiHMIJwopSwI4IEFl4TERA/atadMCKUsCS30q4iExEQO271ie+ilLAeH+vT6BMREBgDW9OyIpSwLcrH+ucTERAEwwY2syKUsCQ2O0QiExEQJ5JnIXCilLA0IWqL3hMREA=
Staten Island9999Freshkills Parkfalse622236746168991743AQMAAAABAAAAbgAAAOZxFHmcjVLAepg7ZklHRECjlbOcjY1SwBiZeWFOR0RAeDp0FImNUsAwnOU5Y0dEQNRjiUWTjVLAJcIu4XJHRED/Zstpk41SwACBE3xyR0RAaf7Oo5ONUsAQfUPlcUdEQB0fx+CTjVLAt2EwUXFHRED02aI= (truncated)
Staten Island9999Freshkills Parkfalse622236745673342975AQMAAAABAAAACQAAAB+zGpprjFLA/inKAshKRECwB1G7XIxSwNN6Kv3MSkRAZ+daMViMUsBwJP/W4UpEQD0y/b9ZjFLAYpJwO+RKREDd+3RsX4xSwLrmzYjiSkRArimgTm6MUsBukC0X5kpEQBjpkTV0jFLAQxtKzt9KRED9fQQ= (truncated)
Staten Island9999Freshkills Parktrue622236745680125951null
Staten Island9999Freshkills Parkfalse622236745672785919AQMAAAABAAAABwAAACtBCaInjFLAVe8AGPJKREBS8sO1HIxSwGna4b/1SkRArQe3bRuMUsDdVY+i+0pEQACZCuIdjFLA31deePlKREB6WJ8NIYxSwBYZS+72SkRASHDjSSSMUsDgOSWX9EpEQCtBCaInjFLAVe8AGPJKREA=
Staten Island9999Freshkills Parkfalse622236745690578943AQMAAAABAAAACQAAADmf/S3qilLA0p0dH8tIREDeljZq24pSwFzACA/QSERAHQuVdduKUsDBMc0y00hEQP7D8CDcilLA/mL9X+hIREAm+Thi3IpSwFEUV5HtSERABbJIGOGKUsBnDLvP9EhEQA6OJ/bvilLAP+gT1+9IREBuE/g= (truncated)
Staten Island9999Freshkills Parkfalse622236745761751039AQMAAAABAAAACAAAAIfQ/ZbEilLAbsZnK/BLRECF0TG3tYpSwH21MST1S0RAZUAtzbGKUsAxnLUYB0xEQIMkNPu8ilLAoHafRg5MREA7iZpExYpSwPaBRZsWTERAImKyX8qKUsAJfFzmFExEQDhHP+vOilLAxBlxDABMRECH0P0= (truncated)
Staten Island9999Freshkills Parktrue622236745679568895null
Staten Island9999Freshkills Parkfalse622236745743400959AQMAAAABAAAACAAAAG3Nwusyi1LABCIZR+1MREAhLGkLJItSwLFPb0DyTERAyND3fx+LUsBWzvUaB01EQJsA9NQpi1LAtHY0/BZNREC4lME/MotSwGymuysUTURAS5QPEDuLUsB9Dzo1B01EQNZYwUA9i1LAkKk/KP1MREBtzcI= (truncated)
Staten Island9999Freshkills Parkfalse622236745742843903AQMAAAABAAAABwAAAAEzn97yilLA2oyXBhZNREClgCsC5IpSwAfxVf4aTURA2LgymeuKUsAqkB94HE1EQCuus3/wilLAjowFRh1NREDVFnRh9YpSwF42raweTURAx31npfmKUsB65hRxIE1EQAEzn97yilLA2oyXBhZNREA=
Staten Island9999Freshkills Parkfalse622236745735503871AQMAAAABAAAAJwAAAGmcpnQzjVLA6wiKbupJREBKr4qWJI1SwJq/oWnvSURAfd5tDSCNUsBt20dDBEpEQLLjgGIqjVLAeJDkIRRKREASMTXVLY1SwC2PLPoSSkRAUz3cvy2NUsD9FD0cEEpEQKFRPQkujVLABAdpMg5KREAF9AY= (truncated)
Staten Island9999Freshkills Parkfalse622236745763749887AQMAAAABAAAACAAAALtW8YHOilLArlVM4gRLREDBzi5tyIpSwG9it+oGS0RA4J4bi8eKUsBsOitdEktEQMJtrBbEilLAuHWkiSxLREC47C9rxYpSwBUYJ5UuS0RAq7F7StSKUsCSfmGcKUtEQKxz0tXYilLAjfHswhRLREC7VvE= (truncated)
Staten Island9999Freshkills Parkfalse622236745742286847AQMAAAABAAAABQAAAPWOpeFyi1LAK3G3jYpMRECn80O5cYtSwGOI1/CKTERAimsqLm2LUsDBGkPLn0xEQOpdaKtui1LA1o4nFaJMRED1jqXhcotSwCtxt42KTERA
Staten Island9999Freshkills Parkfalse622236745762635775AQMAAAABAAAABwAAAHYlWVvWilLAhyqUnKFKREBbb3kU0IpSwFIVyLWjSkRAEeoHDc2KUsDk8VD5ykpEQInPy0TNilLAQyYNT8tKRECketcj3IpSwOq4SVbGSkRA5zIUr+CKUsBhDwZ9sUpEQHYlWVvWilLAhyqUnKFKREA=
Staten Island9999Freshkills Parkfalse622236745730162687AQMAAAABAAAAGgAAAIWgZ8V9jVLAs+4/8U5IREDJVDRpcI1SwFX6gGtTSERAeyup4GuNUsAs0GpEaEhEQJIooa11jVLAxTnhUXdIREArfNixdY1SwDytwUR3SERAuryaHHaNUsDfR6badUhEQHJmIY12jVLAAyiXwHNIRECYmyg= (truncated)
Staten Island9999Freshkills Parkfalse622236745760964607AQMAAAABAAAADwAAAA6xuwjBilLASTCfrUNLREAMPY6+wIpSwIpDl99FS0RADlNtYMCKUsASCxWsSUtEQDbSl+C/ilLA1AOZb01LREC/N2w/v4pSwAJlaydRS0RAwVRcfb6KUsC3/NzQVEtEQOpFM529ilLA4aMZP1hLREAiICs= (truncated)
Staten Island9999Freshkills Parkfalse622236745681895423AQMAAAABAAAABAAAACCTZnWFi1LAwuEBV0pMREDpjmBaf4tSwCRuzGFMTERAFEPU6XqLUsBUWqrCYExEQCCTZnWFi1LAwuEBV0pMREA=
Staten Island9999Freshkills Parkfalse622236745913204735AQMAAAABAAAACwAAABXjZov2jFLAiJgF+yhHREBY9ydG/IxSwGiLbMgxR0RARIHViAONUsD2Ja9ZL0dEQP5xVegCjVLAOz+bzi5HRECGIiypAY1SwJeud90tR0RAGzyPYQCNUsCfkFYILUdEQEWuBTf+jFLARiql8CtHRECeYPs= (truncated)
Staten Island9999Freshkills Parkfalse622236745691791359AQMAAAABAAAADAAAACoGIm3eilLAkiWYz9FHREAB8qRI3opSwD3ytDXaR0RAQqf0OOWKUsCSOQ7h5EdEQDDxJhb0ilLAxwZ/6N9HREBqM1CJ9YpSwBCkCEHZR0RAJkRisPKKUsB/rkns10dEQHVLi13vilLAjx6hh9ZHRECs1T8= (truncated)
Staten Island9999Freshkills Parkfalse622236745762963455AQMAAAABAAAABAAAANaM/WrUilLANt5z9mZKRED0jon204pSwBTVNlZtSkRAJZolHtWKUsCeeuUJaEpEQNaM/WrUilLANt5z9mZKREA=
Staten Island9999Freshkills Parkfalse622236745912647679AQMAAAABAAAABwAAANhuy9LNjFLAokyR2T1HREBeY4fGzYxSwL/8KPI9R0RAxheJEMSMUsCuK4O2UUdEQISpaybAjFLAhxjtP1lHRECjve0ny4xSwCBSJpBVR0RA40TQsM+MUsBWlAK4QEdEQNhuy9LNjFLAokyR2T1HREA=
Staten Island9999Freshkills Parkfalse622236745769746431AQMAAAABAAAACAAAAC9QKS+SilLAYlKnWtpLREBwrGJPg4pSwGznOlPfS0RAARKaw36KUsA3QPss9EtEQCUqMb9/ilLAPoHMr/VLREDbr8BfhYpSwEVfuDv3S0RA56Ztm5iKUsBVd9Ul/EtEQMadPYOcilLALk/KO+pLREAvUCk= (truncated)
Staten Island9999Freshkills Parkfalse622236746169090047AQMAAAABAAAAWQAAAG9CaOCOjVLAOgej74dHREAwmN0DgI1SwM+E2eqMR0RA6FCGe3uNUsAlamHDoUdEQHGZzc+FjVLAnx/BoLFHREDG46MAiY1SwK+q9o6wR0RArlsIMomNUsDMdGTwr0dEQNW/eIWJjVLAbZaq8K5HRECmLPQ= (truncated)
Staten Island9999Freshkills Parkfalse622236746168532991AQMAAAABAAAABwAAANOJOWFxjVLA9XyFoVpHREBd8nW9X41SwGstTkBjR0RAGO8Ff1yNUsAjLT8rckdEQM57ItNmjVLAvnCgCIJHREBMhKqvdY1SwAgXhQ19R0RAFsj/N3qNUsCVSRI1aEdEQNOJOWFxjVLA9XyFoVpHREA=
Staten Island9999Freshkills Parkfalse622236745690677247AQMAAAABAAAABwAAAJaTnyPeilLAwauyGAxJREAEAkaS3opSwJtPO5QSSURAs//Tnd+KUsAmHsVpI0lEQJfWoh3gilLAx6cvHi9JREDsCoZV4opSwAM5TWAuSURA4olu4OaKUsDtgduHGUlEQJaTnyPeilLAwauyGAxJREA=
Staten Island9999Freshkills Parkfalse622236745679667199AQMAAAABAAAABwAAAMOqaqPMjFLAADEi3UZKRECt/ALFvYxSwIZS2ddLSkRA44l6O7mMUsCOL4yxYEpEQNmtbZDDjFLAVzyWkHBKRECI/Em7y4xSwP8/YdRtSkRAJAV3dNGMUsDK4jpDTkpEQMOqaqPMjFLAADEi3UZKREA=
Staten Island9999Freshkills Parkfalse622236745750839295AQMAAAABAAAABgAAAFzYInTAilLAKfO+NQBNREBB/k2MtIpSwMpgZzAETURAyb1QWLOKUsBkYsfNEE1EQCMFdJHJilLAtfyqqxVNREAm6djIyopSwNdDPBcQTURAXNgidMCKUsAp8741AE1EQA==
Staten Island9999Freshkills Parktrue622236745729376255null
Staten Island9999Freshkills Parkfalse622236745696903167AQMAAAABAAAABwAAAM9QZfeFi1LA9tCAtUlIRECs3yEigotSwIct0/1KSERAaMvol32LUsCB4A7WX0hEQO0eHOuHi1LAnRMdtW9IREAy4IrIlotSwAp217tqSERAF8kzsZqLUsDi+w3JWEhEQM9QZfeFi1LA9tCAtUlIREA=
Staten Island9999Freshkills Parkfalse622236745757065215AQMAAAABAAAABQAAAB2rT82hilLAK9g3t5JLREAufZ0+nIpSwPDVNVCcS0RAoABJppuKUsAe8X8ynUtEQKlDKdKfilLAYkKWzZtLREAdq0/NoYpSwCvYN7eSS0RA
Staten Island9999Freshkills Parkfalse622236745742385151AQMAAAABAAAABAAAAAWNahdni1LAroGFf8hMREBNXN8XZItSwGYNNoDJTERAhFTWEWOLUsBFdtUyzkxEQAWNahdni1LAroGFf8hMREA=
Staten Island9999Freshkills Parkfalse622236745673768959AQMAAAABAAAACAAAAI43junqi1LADDmyaEBLRECqLKB54otSwMOecDtDS0RAuW8o792LUsCLtlgVWEtEQDyb7UPoi1LAvdlg9WdLREBL45x39otSwD0i0TRjS0RATkGm0feLUsDL/C7aX0tEQOKa9+v6i1LAfkZ+mlFLRECON44= (truncated)
Staten Island9999Freshkills Parktrue622236745769517055null
Staten Island9999Freshkills Parkfalse622236745730260991AQMAAAABAAAAJgAAAHUrhvdujVLAxqZx441IREBf6nrPYo1SwGlbWvaRSERAa9LXRl6NUsCgEGDPpkhEQCQuXl9mjVLAFu6JPrNIRECqx/yQZo1SwKFpRfiySERA89HMMmeNUsDb/RiHskhEQMQxL5dnjVLAgs8Jg7JIREDFrU4= (truncated)
Staten Island9999Freshkills Parkfalse622236745743269887AQMAAAABAAAACAAAAEU7ZFdGi1LAF8oxc9NMRECSMx53N4tSwNddmWzYTERAbc3C6zKLUsAEIhlH7UxEQNZYwUA9i1LAkKk/KP1MREB8ENtiQ4tSwFa2PBv7TERA10BbHU+LUsAOw4d76kxEQPwhZaxQi1LA2TBAVONMREBFO2Q= (truncated)
Staten Island9999Freshkills Parkfalse622236745700343807AQMAAAABAAAACAAAAF424J3eilLALDWSr4FIREDzmPH+24pSwM2v64+CSERALwjLvNuKUsD5/EBKkEhEQKkTtzrbilLAQoMUz6hIREBjPyg624pSwFetVXipSERAb9flZeSKUsBWt0dnpkhEQP5FsvDoilLAZgAcj5FIREBeNuA= (truncated)
Staten Island9999Freshkills Parkfalse622236745678880767AQMAAAABAAAABgAAANJGsZ6rjFLA33bcPp9KRECeJwzAnIxSwMGtejmkSkRA6c9VNpiMUsCaJVATuUpEQKAIEl2YjFLApnjRTrlKREDlerXBrYxSwCmzKoeiSkRA0kaxnquMUsDfdtw+n0pEQA==
Staten Island9999Freshkills Parkfalse622236745742712831AQMAAAABAAAACgAAAAz8pEoGi1LAyBTvMvxMREB/bTpq94pSwA6sGCwBTURAATOf3vKKUsDajJcGFk1EQMd9Z6X5ilLAeuYUcSBNREBJ5nIy+opSwDKGhKsgTURA/wLa5v6KUsBkDCo/I01EQCtf+PEAi1LA3S+QpyRNREAaRQM= (truncated)
Staten Island9999Freshkills Parkfalse622236745735372799AQMAAAABAAAAJAAAAMRo/LY3jVLAZffo2dZJREBpnKZ0M41SwOsIim7qSURA+d1JyzSNUsD6t8l87ElEQDOCDd40jVLAKUIqbuxJREACiayTNY1SwJK7PRLsSURAMcec9zWNUsC0/EBQ60lEQG9eIGI2jVLAxnHpRupJRECXcwE= (truncated)
Staten Island9999Freshkills Parkfalse622236745920643071AQMAAAABAAAABgAAANgYEA6VjFLAkR28UKlHREBPXNQyhIxSwBUZLAvHR0RAmBuE5IeMUsDtzke4zEdEQEHcYMGWjFLAZtQKvsdHREA1JodKm4xSwMaoveWyR0RA2BgQDpWMUsCRHbxQqUdEQA==
Staten Island9999Freshkills Parktrue622236745680879615null
Staten Island9999Freshkills Parkfalse622236745691332607AQMAAAABAAAACAAAABJ93QEMi1LA/HtxO+tHREAuI8Fo/opSwMCqtsfvR0RA7q8m3vmKUsCTnpWfBEhEQCAT1TAEi1LAk5HYfhRIREDBRCAOE4tSwIZzJIYPSERA1NammBeLUsAwKjeu+kdEQKCuRdAPi1LAtqLotu5HREASfd0= (truncated)
Staten Island9999Freshkills Parktrue622236745733701631null
Staten Island9999Freshkills Parktrue622236745750937599null
Staten Island9999Freshkills Parktrue622236745697001471null
Staten Island9999Freshkills Parkfalse622236745760833535AQMAAAABAAAACAAAAKuxe0rUilLAkn5hnClLREC47C9rxYpSwBUYJ5UuS0RACie2XMGKUsC632YxQUtEQA+xuwjBilLASTCfrUNLREBEL7Yzy4pSwLZnZk9TS0RA7DYYE9qKUsB2BpdWTktEQPoEcZ7eilLAFWYNfTlLRECrsXs= (truncated)
Staten Island9999Freshkills Parkfalse622236745735700479AQMAAAABAAAAEwAAALQHo0M7jVLA7nzuKYdJRED5LMdlLI1SwMHtAyWMSURAWFPE3CeNUsCnGHn+oElEQLw8sTEyjVLAWSLn3LBJREAgbYiFPo1SwEqXlrusSURAcUhlED+NUsAdsK/OqklEQKg1mTlBjVLAWq13QqVJRECkwDw= (truncated)
Staten Island9999Freshkills Parkfalse622236745681764351AQMAAAABAAAACAAAAIwmheW8i1LA9Z0od7BLRECoGgsGrotSwGaO7HC1S0RAbX5Pe6mLUsAx9f1KyktEQPfWIdCzi1LAuMBZK9pLREBb/ekiwItSwL+n7gvWS0RA89LTEsSLUsBCCgbTzktEQJTYWTrHi1LAUUlsV8BLRECMJoU= (truncated)
Staten Island9999Freshkills Parkfalse622236745762832383AQMAAAABAAAACAAAAKR61yPcilLA6rhJVsZKRECJz8tEzYpSwEMmDU/LSkRAN9I95MyKUsB0iwoKzUpEQGNgliHLilLAj5WO2+NKRECiDEYN04pSwCjc7AjwSkRArPln7OGKUsATpx8Q60pEQNS9pnfmilLAx+nGNtZKRECketc= (truncated)
Staten Island9999Freshkills Parkfalse622236746168958975AQMAAAABAAAABgAAAM3Ma5ePjVLABgLhpYRHREBvQmjgjo1SwDoHo++HR0RAaOCiCI+NUsBKW2wtiEdEQEa8qCGPjVLAAsfclIdHRECeZNxxj41SwKi7GpuFR0RAzcxrl4+NUsAGAuGlhEdEQA==
Staten Island9999Freshkills Parkfalse622236745690546175AQMAAAABAAAACAAAAA6OJ/bvilLAP+gT1+9IREAFskgY4YpSwGcMu8/0SERAjlqPpN2KUsD/cP+mBElEQJaTnyPeilLAwauyGAxJREDiiW7g5opSwO2B24cZSURAQ6RjvvWKUsA/liqPFElEQPk0Nkn6ilLARJ6/tv9IREAOjic= (truncated)
Staten Island9999Freshkills Parkfalse622236745761718271AQMAAAABAAAABwAAACJisl/KilLACXxc5hRMREA6iZpExYpSwPeBRZsWTERAM5Feqc6KUsC21skMIExEQFNIc/fJilLAZjhCsztMREBLH3ko0IpSwLyOcaE5TERAtBAItNSKUsABGnHHJExEQCJisl/KilLACXxc5hRMREA=
Staten Island9999Freshkills Parkfalse622236745679536127AQMAAAABAAAAJQAAAMpDMQvgjFLAkZqtCC1KREDVLt0s0YxSwLIXdgMySkRAw6pqo8yMUsAAMSLdRkpEQCQFd3TRjFLAy+I6Q05KREDMy6rN1IxSwH/qWMs7SkRAsvtiPdWMUsAl1UwkPEpEQDNcjp7VjFLAviqGWjxKRECH/M4= (truncated)
Staten Island9999Freshkills Parktrue622236745736585215null
Staten Island9999Freshkills Parkfalse622236745729245183AQMAAAABAAAALAAAADLQxNOGjVLAz4V57BFIRECv9KUCfo1SwPc4++AUSERAULkyenmNUsCkLsm5KUhEQDva5neBjVLAiAm1/zVIREDhkTR5gY1SwLvnIvo1SERAjqF22YGNUsBbvuRsNEhEQKLNoDyCjVLA1TJT4TJIREAoKbI= (truncated)
Staten Island9999Freshkills Parkfalse622236745743368191AQMAAAABAAAABQAAALiUwT8yi1LAbKa7KxRNRECbAPTUKYtSwLR2NPwWTURAqtP19CiLUsA8pAQAG01EQP+oH2Qxi1LAZxLDbhVNREC4lME/MotSwGymuysUTURA
Staten Island9999Freshkills Parkfalse622236745756934143AQMAAAABAAAABwAAABc4Zze2ilLAMPCOuGpLREDAxvqotIpSwA3YGShuS0RAlKxE5a6KUsAfGV4bektEQNHHlx6pilLAGoA+XYVLRECyHU09s4pSwO3XS/uBS0RABtHRyLeKUsDPwLQhbUtEQBc4Zze2ilLAMPCOuGpLREA=
Staten Island9999Freshkills Parkfalse622236745696215039AQMAAAABAAAACwAAALXuThv0i1LAX6sObDdIRECpl7jr64tSwJZhodE7SERAviuZm+OLUsCvTCm8P0hEQCZswprji1LAt++JvD9IRECwmeqZ44tSwLKS6rw/SERA/9ZrM9uLUsDnWTwnQ0hEQCHyBz3Zi1LAvWeqxEVIREDXEmA= (truncated)
Staten Island9999Freshkills Parkfalse622236745692545023AQMAAAABAAAABAAAACgicrTcilLA83wbF0dIREArG9yo3IpSwKOPqGtLSERAQxO1YN2KUsDDjPsfSEhEQCgicrTcilLA83wbF0dIREA=
Staten Island9999Freshkills Parkfalse622236745724461055AQMAAAABAAAACgAAAJkOOndRjVLA525JvwtJREB5rTCbR41SwEbzBw0PSURAGLZdEkONUsDlZEXmI0lEQHzYJmdNjVLAyKNsxDNJREDHUhhOT41SwGiaQiEzSURAVbkEolKNUsDNYIVVDUlEQBEZy0dSjVLAsnLBeQxJREDOZYg= (truncated)
Staten Island9999Freshkills Parkfalse622236745695657983AQMAAAABAAAADgAAABfJM7Gai1LA4vsNyVhIREAy4IrIlotSwAp217tqSERAAcDUG6GLUsAf2NiaekhEQGgqRvmvi1LAXRV4oXVIRECQ4BJKtItSwLrTGtBhSERAV+uEyrGLUsCmx90dYkhEQNwdcPWti1LAPRtxCGJIREAleDs= (truncated)
Staten Island9999Freshkills Parkfalse622236745691987967AQMAAAABAAAACAAAAKooeOkvi1LAZfYDlQlIREAcETM+LItSwNxVi2waSERAQI0OkTaLUsBkq7RLKkhEQIwUX25Fi1LAAEXKUiVIRECyP2O7SItSwFMVnSsWSERAGWXJvjmLUsDyC945D0hEQCyKW1sxi1LA8nYzsgpIRECqKHg= (truncated)
Staten Island9999Freshkills Parkfalse622236745680977919AQMAAAABAAAABwAAANOw7Nqbi1LA+8pp2QhMREA2MDX7jItSwAXBFNMNTERAT6RLcIiLUsCRtUitIkxEQCoAeomRi1LAx5K2qDBMREAKMIfLlItSwMZjWLspTERA4lHgu6CLUsD3hrhYEExEQNOw7Nqbi1LA+8pp2QhMREA=
Staten Island9999Freshkills Parkfalse622236745691430911AQMAAAABAAAABQAAAKGuRdAPi1LAt6Lotu5HREDU1qaYF4tSwDAqN676R0RANvJdkBuLUsBQenpa+UdEQERPK2Eai1LAqpOQYfhHREChrkXQD4tSwLei6LbuR0RA
Staten Island9999Freshkills Parkfalse622236745723346943AQMAAAABAAAAHAAAAGvS10ZejVLAoBBgz6ZIREDprY9pT41SwNBJgsqrSERA0KrW4EqNUsAEx46jwEhEQE+zeTVVjVLA1lmHgdBIREAyjfLbX41SwFCY5O/MSERAe70cJGCNUsDujN4AzEhEQFS6eo1gjVLAyM+DecpIREA8O1w= (truncated)
Staten Island9999Freshkills Parkfalse622236745921626111AQMAAAABAAAAEQAAALDgyKhgjFLA/P5Tsv9HREAmjv71XIxSwJoITWsDSERALyUTaVuMUsDV0oQvBEhEQHb+39FZjFLAiBZRugRIREB0ovMzWIxSwJm8fgoFSERArsftklaMUsCQYVkfBUhEQO6VdPJUjFLAy8ax+ARIREBH/Co= (truncated)
Staten Island9999Freshkills Parkfalse622236745743138815AQMAAAABAAAABwAAAGANb07IilLAtysf65xMREDuu9YnvopSwHh/r0+gTERAv4zxC7uKUsAFUjo3wExEQG4OBTe/ilLAgZ2dn8ZMREB3/VMXzopSwJUttKbBTERAnAj/otKKUsB5yG3MrExEQGANb07IilLAtysf65xMREA=
Staten Island9999Freshkills Parktrue622236745760931839null
Staten Island9999Freshkills Parkfalse622236745678749695AQMAAAABAAAABgAAANo04wa/jFLANC5eaoVKREAJr1EosIxSwNDBDWWKSkRA0kaxnquMUsDfdtw+n0pEQOV6tcGtjFLAKbMqh6JKREATkUgmw4xSwD9Zlb+LSkRA2jTjBr+MUsA0Ll5qhUpEQA==
Staten Island9999Freshkills Parkfalse622236745920511999AQMAAAABAAAABgAAAB+VN+mljFLAHNlvlotHREDYGBAOlYxSwJEdvFCpR0RANSaHSpuMUsDGqL3lskdEQGtSUCeqjFLAWFdv661HREBgsmCwroxSwKzyKBOZR0RAH5U36aWMUsAc2W+Wi0dEQA==
Staten Island9999Freshkills Parkfalse622236745913171967AQMAAAABAAAADwAAAESB1YgDjVLA9iWvWS9HREBY9ydG/IxSwGiLbMgxR0RAzDxvvfeMUsBI0JegRkdEQNurMRECjVLA62YsflZHRECtKa/tEI1SwCGbfYNRR0RA4we/chONUsD4CLrtRUdEQOQrAhUOjVLAbjrjPT9HREDV1s8= (truncated)
Staten Island9999Freshkills Parkfalse622236745673965567AQMAAAABAAAABgAAAEvjnHf2i1LAPSLRNGNLREA8m+1D6ItSwL3ZYPVnS0RAVdVzueOLUsAaBV7PfEtEQFNTPCboi1LAeowAnINLREAh5ikQ9YtSwJ9Au7BmS0RAS+Ocd/aLUsA9ItE0Y0tEQA==
Staten Island9999Freshkills Parkfalse622236745673408511AQMAAAABAAAACAAAALu+rP0+jFLAFZO+8dZKREBwIdIeMIxSwFla8uvbSkRAsHDnACyMUsCsmrvU7kpEQD17KOM1jFLA0yHRc+dKREDaHSmNPoxSwP+vXF34SkRA6nN7k0eMUsBq4qLW7kpEQPSifVJJjFLAABdO0eZKREC7vqw= (truncated)
Staten Island9999Freshkills Parkfalse622236745730457599AQMAAAABAAAAFgAAAFC5Mnp5jVLApC7JuSlIRECCNz6dao1SwMdz+rQuSERAAxK1FGaNUsB/Ms+NQ0hEQMlUNGlwjVLAVfqAa1NIRECGoGfFfY1SwLPuP/FOSERAJLS19n2NUsCxrrQ2TUhEQG7V+1p+jVLAQGxP70lIREBH65U= (truncated)
Staten Island9999Freshkills Parktrue622236745733570559null
Staten Island9999Freshkills Parkfalse622236745672851455AQMAAAABAAAADwAAAKGV1vf+i1LAVCD6s/9KREAkb9cY8ItSwL79760ES0RAS6x3juuLUsBGQryHGUtEQGwbygf0i1LAJW8njSZLRECDK1bD9ItSwG9lkhwmS0RA+S3loviLUsClnVOJJUtEQHh2Qfb6i1LACQXJVCRLREB4iTo= (truncated)
Staten Island9999Freshkills Parktrue622236745679634431null
Staten Island9999Freshkills Parkfalse622236745729343487AQMAAAABAAAAMAAAALZOdEeBjVLAuBxeecZHRECt1b9qco1SwHIWjXTLR0RAkaFQ4m2NUsA83TBN4EdEQF/MqTZ4jVLASvizKvBHREC1qGG0go1SwD9bjabsR0RA/if6toKNUsDrgP2F7EdEQFP048mCjVLAMdgQxutHREB3w1Q= (truncated)
Staten Island9999Freshkills Parkfalse622236745696870399AQMAAAABAAAABgAAAEWNn5Zfi1LAgCxlxitIRECZTqSeXotSwGFA4TgwSERAUeOs8WiLUsC89vAXQEhEQHlj38Rzi1LAr3/MeDxIREBIZEZ1Y4tSwFVgYpswSERARY2fll+LUsCALGXGK0hEQA==
Staten Island9999Freshkills Parkfalse622236745742909439AQMAAAABAAAABwAAABpFAxQMi1LAKc7H7iBNREArX/jxAItSwN0vkKckTURAt+MycwOLUsDWUVVhJk1EQFn34MwHi1LAdi8zCSpNREDxR4LqC4tSwO4heSsuTURAVQ/kDRKLUsBEojUeKk1EQBpFAxQMi1LAKc7H7iBNREA=
Staten Island9999Freshkills Parkfalse622236745724559359AQMAAAABAAAABwAAALzcUd5IjVLAoCu/nUhJREC81p8AOo1SwFsl3JhNSURAlu60dzWNUsAEdDVyYklEQGz0j8w/jVLASxiAUHJJRECAqMkSRo1SwIYIUzZwSURADEdtl0yNUsBlF5tVTklEQLzcUd5IjVLAoCu/nUhJREA=
Staten Island9999Freshkills Parkfalse622236745681633279AQMAAAABAAAACAAAAHFDkU/Qi1LA+6JIo5ZLREBo0CpwwYtSwD31HZ2bS0RAjCaF5byLUsD1nSh3sEtEQJTYWTrHi1LAUUlsV8BLREA6o7cGzYtSwEBezGa+S0RAtPl/1dGLUsCbaA+VtUtEQKNTumjZi1LA7hZenqRLREBxQ5E= (truncated)
Staten Island9999Freshkills Parkfalse622236745723445247AQMAAAABAAAAIgAAAP+rvqxQjVLAp+2oWuVIREDrtEzPQY1SwKyfw1XqSERA9sF7Rj2NUsDw+usu/0hEQHmtMJtHjVLARvMHDQ9JRECZDjp3UY1SwOduSb8LSURAmy3qFFGNUsC8VxJ1C0lEQGJCHqRQjVLAXAF+CQtJREBL7aw= (truncated)
Staten Island9999Freshkills Parkfalse622236745698312191AQMAAAABAAAABgAAAG08OvjeilLAAk6WhphJREAXiRYn3opSwHp3p6WzSURASdt4DN6KUsCTTEAZt0lEQAdjDkXgilLAksMkW7ZJREC98xLQ5IpSwK4ObYKhSURAbTw6+N6KUsACTpaGmElEQA==
Staten Island9999Freshkills Parkfalse622236746168827903AQMAAAABAAAACwAAAOMHv3ITjVLA+Ai67UVHRECtKa/tEI1SwCGbfYNRR0RASSCIQRuNUsCoXQVhYUdEQFJBCB4qjVLAnW47ZlxHREBBZzVeKo1SwL8+Jj9bR0RAEqjAJyiNUsBQpshPWkdEQGmfbbkjjVLAMafh2ldHRECVqug= (truncated)
Staten Island9999Freshkills Parkfalse622236745679962111AQMAAAABAAAABAAAAFysMkV+jFLAjn+zF9VKRED9fQTvdYxSwKC1NOLXSkRAGOmRNXSMUsBEG0rO30pEQFysMkV+jFLAjn+zF9VKREA=
Staten Island9999Freshkills Parktrue622236745761587199null
Staten Island9999Freshkills Parkfalse622236745743237119AQMAAAABAAAABQAAAHwQ22JDi1LAVrY8G/tMREDWWMFAPYtSwJCpPyj9TERAS5QPEDuLUsB8Dzo1B01EQIhW+cFAi1LAdqb41P5MREB8ENtiQ4tSwFa2PBv7TERA
Staten Island9999Freshkills Parkfalse622236745700311039AQMAAAABAAAABwAAAG/X5WXkilLAVrdHZ6ZIREBjPyg624pSwFetVXipSERARaTUKNuKUsDEqJYAvkhEQN6WNmrbilLAW8AID9BIREA5n/0t6opSwNKdHR/LSERANhnMuO6KUsAT0dxGtkhEQG/X5WXkilLAVrdHZ6ZIREA=
Staten Island9999Freshkills Parkfalse622236745678847999AQMAAAABAAAABgAAAIj8SbvLjFLA/z9h1G1KREDZrW2Qw4xSwFc8lpBwSkRA2jTjBr+MUsA0Ll5qhUpEQBORSCbDjFLAP1mVv4tKREAyXwIQx4xSwCYt7JSHSkRAiPxJu8uMUsD/P2HUbUpEQA==
Staten Island9999Freshkills Parkfalse622236745921167359AQMAAAABAAAAEAAAAKpBmSoxjFLAVBV0KgpIRED1+tsXMIxSwFhnw8cLSERApyPfVi6MUsDCi142D0hEQMWNn+ksjFLAf5uV5RJIREDhGj3pKoxSwHFZtOIWSERACuO+oCiMUsBPdzyYGkhEQP3niRcmjFLAunh29B1IREBiNAs= (truncated)
Staten Island9999Freshkills Parkfalse622236745696083967AQMAAAABAAAABwAAAMyzxCgEjFLA7KJzdS9IREBu3gM3/ItSwO2BqIQySERASSVnIfSLUsB7p8hoN0hEQLXuThv0i1LAX6sObDdIRECckX6C9ItSwBocpQo4SERAsum3XwOMUsCzJPUQM0hEQMyzxCgEjFLA7KJzdS9IREA=
Staten Island9999Freshkills Parkfalse622236745692413951AQMAAAABAAAACgAAADDKLXbmilLAKU0UcB5IRECm7lIW3YpSwAIPmpIhSERAH2+7+9yKUsCZ6njbK0hEQOuxW87cilLApw88aD1IREAE2tXF3IpSwEW4R5dASERAKCJytNyKUsDzfBsXR0hEQEMTtWDdilLAw4z7H0hIREA0Zyc= (truncated)
Staten Island9999Freshkills Parkfalse622236745763586047AQMAAAABAAAABwAAACTefjTeilLAaUjOVz5KREBedQAm14pSwAbCx7NASkRA1oz9atSKUsA23nP2ZkpEQCWaJR7VilLAnnrlCWhKRECJLfH844pSwGA6JBFjSkRAId0TiOiKUsC8dRE4TkpEQCTefjTeilLAaUjOVz5KREA=
Staten Island9999Freshkills Parkfalse622236745913270271AQMAAAABAAAADgAAADTlw9XijFLANH0WDShHRECJpqD54YxSwC4EOU4oR0RAlFrR4d+MUsAMQHYZKUdEQEjurdHdjFLAvhj/DipHREALh6TK24xSwD4NLC4rR0RA2usdztmMUsBZZjV2LEdEQJ+QvQ7XjFLAZJ+IVy9HREC48dQ= (truncated)
Staten Island9999Freshkills Parkfalse622236745699196927AQMAAAABAAAABQAAALrsGn7bilLAuFfbgQJKRECdmFAc24pSwJ6EgfYJSkRA/2kpzNqKUsC/hKG4DkpEQMxPPffcilLAXBuwxQRKREC67Bp+24pSwLhX24ECSkRA
Staten Island9999Freshkills Parkfalse622236745695526911AQMAAAABAAAABQAAAIRo44zDi1LALs7IBFtIRECnGKKbwYtSwLNuDmBcSERA5S3Pf8GLUsACxJtwXEhEQMdPtWDDi1LAoZytz1tIRECEaOOMw4tSwC7OyARbSERA
Staten Island9999Freshkills Parkfalse622236745680846847AQMAAAABAAAABwAAABMxZEWvi1LAlzqABe9LRECXScBloItSwJGTPP/zS0RA07Ds2puLUsD7ymnZCExEQOJR4Lugi1LA94a4WBBMREAQZNodo4tSwNinvkcLTERA+pIzCrGLUsBy1VS98UtEQBMxZEWvi1LAlzqABe9LREA=
Staten Island9999Freshkills Parkfalse622236745769811967AQMAAAABAAAABwAAAFbvBmOrilLANo0bQ+VLREDGnT2DnIpSwC5PyjvqS0RA56Ztm5iKUsBVd9Ul/EtEQG61ciKmilLAQ0i3mv9LREBlQC3NsYpSwDKctRgHTERAhdExt7WKUsB9tTEk9UtEQFbvBmOrilLANo0bQ+VLREA=
Staten Island9999Freshkills Parkfalse622236746168598527AQYAAAACAAAAAQMAAAABAAAABAAAAMYbEV82jVLAcHR5nmtHREBkv/dxNI1SwJdctkNsR0RA1WQIwjONUsCPAKtsb0dEQMYbEV82jVLAcHR5nmtHREABAwAAAAEAAAAHAAAAJsRYLUiNUsDiJhvEbkdEQPRca30xjVLAU6dZ2nk= (truncated)
Staten Island9999Freshkills Parkfalse622236745750904831AQMAAAABAAAABgAAAPBjVKnZilLAqUM/HgtNREAm6djIyopSwNdDPBcQTURAIwV0kcmKUsC1/KqrFU1EQPpPG/vQilLAY0o+SxdNREBfton844pSwGCcPf0aTURA8GNUqdmKUsCpQz8eC01EQA==
Staten Island9999Freshkills Parkfalse622236746168041471AQMAAAABAAAAKQAAALlJtLqljVLATwxtDEFHRECyy2pnnY1SwOz08x1FR0RA5nEUeZyNUsB6mDtmSUdEQEx0E7ihjVLA5SbidFFHREDc8I68oY1SwC+Lt25RR0RAZ42B8qGNUsBV3b8dUUdEQBLr4S6ijVLAvRVN0VBHRED9au0= (truncated)
Staten Island9999Freshkills Parkfalse622236745729441791AQMAAAABAAAARQAAAMbjowCJjVLAr6r2jrBHREBxmc3PhY1SwJ8fwaCxR0RAtk50R4GNUsC4HF55xkdEQILDmUyGjVLADwMzL85HREBCxyVMho1SwFOq+gvOR0RAB4btRoaNUsBkrEybzUdEQEuJ9T2GjVLAxewqK81HREBtW0M= (truncated)
Staten Island9999Freshkills Parkfalse622236745725771775AQMAAAABAAAACgAAAFJBCB4qjVLAnW47ZlxHREBJIIhBG41SwKhdBWFhR0RAFkXhuBaNUsCFCVQ5dkdEQGpvzgwhjVLALRXnFoZHREDEyGTpL41SwD5XExyBR0RA9FxrfTGNUsBTp1naeUdEQGAQxh8qjVLA7wfWc31HREDVZAg= (truncated)
Staten Island9999Freshkills Parkfalse622236745921495039AQMAAAABAAAADgAAAFlfhFdzjFLA98u/xeRHREBmDkG8a4xSwLzO+y/yR0RAwYsfP2iMUsD/Vnzg9kdEQG5Dez5ojFLAohZT4fZHREAf+9Y9aIxSwOI2EuL2R0RAqA5AnWSMUsC/VRtS+0dEQBSyNJxkjFLAIAxmU/tHREAbjiw= (truncated)
Staten Island9999Freshkills Parkfalse622236745692741631AQMAAAABAAAABQAAAAHypEjeilLAPfK0NdpHREDE33S73YpSwKCHSLX6R0RAHFNGruCKUsCZ1964+UdEQEKn9DjlilLAkjkO4eRHREAB8qRI3opSwD3ytDXaR0RA
Staten Island9999Freshkills Parkfalse622236745681731583AQMAAAABAAAABgAAAFXVc7nji1LAGgVez3xLREAv+yDa1ItSwLy4RMmBS0RAcUORT9CLUsD7okijlktEQKNTumjZi1LA7hZenqRLREBSUzwm6ItSwHmMAJyDS0RAVdVzueOLUsAaBV7PfEtEQA==
Staten Island9999Freshkills Parkfalse622236745673834495AQMAAAABAAAABAAAAOKa9+v6i1LAfkZ+mlFLREBOQabR94tSwMz8LtpfS0RA7geSw/yLUsAOyQGVU0tEQOKa9+v6i1LAfkZ+mlFLREA=
Staten Island9999Freshkills Parkfalse622236745673277439AQMAAAABAAAACgAAACvMfWZSjFLAqBazHb1KRECTx7aHQ4xSwGY8+BfCSkRAu76s/T6MUsAVk77x1kpEQPSifVJJjFLAABdO0eZKREC00c5LToxSwJBIEyflSkRAPBFL/U6MUsCHseZv3kpEQERbKEZRjFLAIPviJ+RKREBn51o= (truncated)
Staten Island9999Freshkills Parkfalse622236745672720383AQMAAAABAAAADAAAAMb1C2ESjFLAwV4t4OVKRECjZyCCA4xSwL2bNNrqSkRAoZXW9/6LUsBUIPqz/0pEQPs5jEwJjFLAu7vGkw9LREBzbpq/DoxSwJzt5sANS0RAx10I9RGMUsDA5h+HBUtEQOl6uNAUjFLAw0fzPAJLREARTko= (truncated)
Staten Island9999Freshkills Parkfalse622236745758015487AQMAAAABAAAABAAAACGkevmMilLAdpNQ/7JLREB+k+jbiopSwE9M1CO2S0RAW+DbZoyKUsA0AtaftUtEQCGkevmMilLAdpNQ/7JLREA=
Staten Island9999Freshkills Parkfalse622236745736552447AQMAAAABAAAAEwAAABCG53ESjVLA7uNx0EJKREBIKI6TA41SwD21cMtHSkRAz+HDFwONUsAsgW4ESkpEQNhqxDYDjVLAFwaoE0pKRECpDesZBI1SwP/FAJ1KSkRANEitAgWNUsA42e4tS0pEQIxZd6UFjVLAmzLynUtKREB/wbU= (truncated)
Staten Island9999Freshkills Parkfalse622236745743335423AQMAAAABAAAABAAAABTMGT1Vi1LAduFtzeFMRED8IWWsUItSwNkwQFTjTERA10BbHU+LUsAOw4d76kxEQBTMGT1Vi1LAduFtzeFMREA=
Staten Island9999Freshkills Parkfalse622236745742778367AQMAAAABAAAABwAAAMjQ938fi1LAVs71GgdNREDnlYqfEItSwHeVOhQMTURAGkUDFAyLUsApzsfuIE1EQFUP5A0Si1LARKI1HipNRECq0/X0KItSwD2kBAAbTURAmwD01CmLUsC0djT8Fk1EQMjQ938fi1LAVs71GgdNREA=
Staten Island9999Freshkills Parkfalse622236745682059263AQMAAAABAAAACAAAAEoLgQV1i1LAgfkcgTxMREB+WKIlZotSwFEopXpBTERAh+WMmmGLUsDtleZUVkxEQJQOau9ri1LABCuuNWZMREAXVfyqeotSwIh9R0hhTERAFEPU6XqLUsBTWqrCYExEQOmOYFp/i1LAJG7MYUxMREBKC4E= (truncated)
Staten Island9999Freshkills Parkfalse622236745692512255AQMAAAABAAAABwAAAALwKmvcilLAqbNYemJIREB2vJ853IpSwNmdr/50SERAWHcvAdyKUsBCN9QYgkhEQPOY8f7bilLAza/rj4JIREBeNuCd3opSwCw1kq+BSERAdJmqKOOKUsAqlHvXbEhEQALwKmvcilLAqbNYemJIREA=
Staten Island9999Freshkills Parkfalse622236745724428287AQMAAAABAAAABgAAAMZSGE5PjVLAaJpCITNJREB82CZnTY1SwMijbMQzSURAvNxR3kiNUsCgK7+dSElEQAxHbZdMjVLAZRebVU5JRECrqaUtTY1SwHvM1khLSURAxlIYTk+NUsBomkIhM0lEQA==
Staten Island9999Freshkills Parktrue622236745742221311null
Staten Island9999Freshkills Parkfalse622236745699295231AQMAAAABAAAACQAAAAGEYg3milLAh7X6E9tJREAZaS/H3IpSwBcHzi3eSURAuf/rg9yKUsBGXMgC6klEQPc6uO3bilLAfz1k//lJREC67Bp+24pSwLhX24ECSkRAzE8999yKUsBcG7DFBEpEQJjNyNXrilLAKAnxzP9JRECWddE= (truncated)
Staten Island9999Freshkills Parkfalse622236745680945151AQMAAAABAAAABQAAAFz96SLAi1LAv6fuC9ZLRED31iHQs4tSwLjAWSvaS0RAEzFkRa+LUsCXOoAF70tEQPqSMwqxi1LAc9VUvfFLREBc/ekiwItSwL+n7gvWS0RA
Staten Island9999Freshkills Parkfalse622236745691398143AQMAAAABAAAACAAAADbyXZAbi1LAUHp6WvlHREDU1qaYF4tSwDAqN676R0RAwUQgDhOLUsCGcySGD0hEQHg05WAdi1LAAJhaZR9IREAcETM+LItSwNxVi2waSERAqih46S+LUsBl9gOVCUhEQIlyqGAmi1LAkGwjOwJIREA28l0= (truncated)
Staten Island9999Freshkills Parkfalse622236745723314175AQMAAAABAAAAKwAAADKN8ttfjVLAUJjk78xIREBPs3k1VY1SwNZZh4HQSERA/6u+rFCNUsCn7aha5UhEQKQUpW5ZjVLAaqP9zfJIREAdsel8WY1SwFHP2pzySERAloK+AlqNUsC/MdhB8UhEQOsjZ41ajVLArDxZTPBIREBNQOs= (truncated)
Staten Island9999Freshkills Parkfalse622236745698181119AQMAAAABAAAABwAAAEwaBObtilLAFHgZ0XdJREDPsSLQ34pSwH2V0IZ8SURAbTw6+N6KUsADTpaGmElEQL3zEtDkilLArg5tgqFJREAPXl6u84pSwHArsImcSURAhv9MOfiKUsDgNP+wh0lEQEwaBObtilLAFHgZ0XdJREA=
Staten Island9999Freshkills Parkfalse622236745762013183AQMAAAABAAAACAAAAKlDKdKfilLAYkKWzZtLRECgAEmmm4pSwB7xfzKdS0RAIaR6+YyKUsB2k1D/sktEQFvg22aMilLANALWn7VLREDT9tu6lopSwGiz7YDFS0RAUASPmqWKUsCzuEiIwEtEQGu3KyaqilLA9NOVrqtLRECpQyk= (truncated)
Staten Island9999Freshkills Parkfalse622236745679831039AQMAAAABAAAABQAAAOnPVTaYjFLAmiVQE7lKREBaF51XiYxSwE3/3A2+SkRAf3rCJ4aMUsDRNUqyzEpEQKAIEl2YjFLApnjRTrlKREDpz1U2mIxSwJolUBO5SkRA
Staten Island9999Freshkills Parkfalse622236745729540095AQMAAAABAAAAKQAAALWoYbSCjVLAP1uNpuxHREBfzKk2eI1SwEr4syrwR0RAnZQ4rnONUsCW1mwDBUhEQK/0pQJ+jVLA9zj74BRIREAy0MTTho1SwM+FeewRSERAqDP8z4aNUsCKDkn/D0hEQNO6OsaGjVLA+gFRSQ9IRECKmx8= (truncated)
Staten Island9999Freshkills Parkfalse622236745736323071AQMAAAABAAAAFwAAAIGoyRJGjVLAhghTNnBJREBs9I/MP41SwEsYgFBySURAtAejQzuNUsDufO4ph0lEQFwy2K1AjVLAX3L/eo9JREDjJ6yvQI1SwEDIwS2PSURAKCQp/ECNUsCZuHejjElEQDpT429BjVLA+8AvVItJRECuUCM= (truncated)
Staten Island9999Freshkills Parkfalse622236745921593343AQMAAAABAAAABgAAAE9c1DKEjFLAFRksC8dHREBZX4RXc4xSwPfLv8XkR0RASZJXfnSMUsBAZMeK5kdEQGDnR1uDjFLAFsGbkOFHRECYG4Tkh4xSwO3OR7jMR0RAT1zUMoSMUsAVGSwLx0dEQA==
Staten Island9999Freshkills Parkfalse622236746167582719AQMAAAABAAAABgAAAE02J9mMjVLAjH4gNU1HREDTiTlhcY1SwPV8haFaR0RAFsj/N3qNUsCVSRI1aEdEQHg6dBSJjVLAMJzlOWNHRECjlbOcjY1SwBiZeWFOR0RATTYn2YyNUsCMfiA1TUdEQA==
Staten Island9999Freshkills Parkfalse622236745725313023AQMAAAABAAAACAAAAKmCacK3jFLAJQi4Ym9HREDEmav/s4xSwCv2LqVwR0RAOggkCKeMUsAoi2mciUdEQB+VN+mljFLAHNlvlotHREBgsmCwroxSwKzyKBOZR0RAHUoWjb2MUsDCSskYlEdEQFPAEBbCjFLAbK2JQH9HRECpgmk= (truncated)
Staten Island9999Freshkills Parkfalse622236745921036287AQMAAAABAAAADAAAACj9D6ZEjFLASZNCgQBIRECd6uHiQIxSwKd1+6IASERAsP9vKT2MUsBo2DU7AUhEQN7N6oI5jFLA86gvRgJIREALTGHqNoxSwC+sruUDSERA6dS0bzSMUsCkpNQMBkhEQNFvTSQyjFLASmvOsghIRECqQZk= (truncated)
Staten Island9999Freshkills Parkfalse622236745681829887AQMAAAABAAAABAAAADqjtwbNi1LAQF7MZr5LRECU2Fk6x4tSwFFJbFfAS0RA89LTEsSLUsBCCgbTzktEQDqjtwbNi1LAQF7MZr5LREA=
Staten Island9999Freshkills Parktrue622236745673932799null
Staten Island9999Freshkills Parkfalse622236745698508799AQMAAAABAAAACAAAAOwKhlXiilLAAzlNYC5JRECY1qId4IpSwMenLx4vSURAojQ9VuCKUsCemTlNNElEQCGXDLvgilLAyTTvOEVJREBRTn3L4IpSwJM6VYtVSURAsv67HeiKUsAhJ6MYU0lEQDSJpqjsilLAw1ocQD5JREDsCoY= (truncated)
Staten Island9999Freshkills Parkfalse622236746168467455AQMAAAABAAAABQAAAF3ydb1fjVLAay1OQGNHREAmxFgtSI1SwOMmG8RuR0RAuIiAok2NUsAnYz8md0dEQBjvBX9cjVLAIy0/K3JHREBd8nW9X41SwGstTkBjR0RA
Staten Island9999Freshkills Parkfalse622236745672818687AQMAAAABAAAACAAAAPvMF8oljFLAZv5VDMxKREA31z/rFoxSwIGabgbRSkRAxvULYRKMUsDBXi3g5UpEQFLyw7UcjFLAadrhv/VKREArQQmiJ4xSwFXvABjySkRAsHDnACyMUsCsmrvU7kpEQHAh0h4wjFLAWVry69tKRED7zBc= (truncated)
Staten Island9999Freshkills Parkfalse622236745758113791AQMAAAABAAAADQAAAP+Cb7V5ilLAZdUVkNBLREDS+7j2eIpSwIjMzMfTS0RAcQsE0XiKUsDcdJ9q1EtEQJE1R9x3ilLA4cEU4NlLRED8yekvd4pSwJt2BnPfS0RAbF7jzXaKUsAmLEsW5UtEQF9QvLZ2ilLA0RtOvOpLREBJd6Y= (truncated)
Staten Island9999Freshkills Parkfalse622236745679601663AQMAAAABAAAAIQAAACzMfz75jFLACcGj7DdKRECfEilg6oxSwC5oh+c8SkRA6TTabOmMUsC/y8lFQUpEQEvVcqTpjFLA1/1jR0FKRED+DH1K6oxSwE5D04ZBSkRArUzC/OqMUsAfZjgpQkpEQAgR94vrjFLApwFgu0JKRECaQlU= (truncated)
Staten Island9999Freshkills Parkfalse622236745696837631AQMAAAABAAAACAAAAHpj38Rzi1LAr3/MeDxIREBR46zxaItSwLz28BdASERAfuxfZ2SLUsBWVR7wVEhEQKGzfLpui1LAClk5z2RIREBoy+iXfYtSwIHgDtZfSERArN8hIoKLUsCHLdP9SkhEQIvvORt9i1LAUjWXQ0NIREB6Y98= (truncated)
Staten Island9999Freshkills Parkfalse622236745742876671AQMAAAABAAAACAAAALVpaxXtilLAe1PASvFMREDZhwM13opSwAy7zkP2TERA8GNUqdmKUsCpQz8eC01EQF+2ifzjilLAYJw9/RpNREClgCsC5IpSwAfxVf4aTURAATOf3vKKUsDajJcGFk1EQH9tOmr3ilLADqwYLAFNREC1aWs= (truncated)
Staten Island9999Freshkills Parkfalse622236745735536639AQMAAAABAAAACQAAAFVerKgtjVLA+GJxtsVJREAQrqbKHo1SwBhKf7HKSURAPuKLQRqNUsB0UBCL30lEQEqvipYkjVLAmr+hae9JREBpnKZ0M41SwOsIim7qSURAxGj8tjeNUsBl9+jZ1klEQBupNLw3jVLAlaqSz9VJREBS+/w= (truncated)
Staten Island9999Freshkills Parkfalse622236745763782655AQMAAAABAAAABQAAAGNgliHLilLAj5WO2+NKREDBzi5tyIpSwG9it+oGS0RAu1bxgc6KUsCuVUziBEtEQKIMRg3TilLAKNzsCPBKREBjYJYhy4pSwI+VjtvjSkRA
Staten Island9999Freshkills Parkfalse622236745742319615AQMAAAABAAAACAAAAI8a3MJZi1LAZMc/n7lMREB5rKniSotSwMfAuJi+TERARTtkV0aLUsAXyjFz00xEQPwhZaxQi1LA2TBAVONMREAUzBk9VYtSwHbhbc3hTERAhFTWEWOLUsBEdtUyzkxEQE1c3xdki1LAZg02gMlMRECPGtw= (truncated)
Staten Island9999Freshkills Parkfalse622236745699393535AQMAAAABAAAABgAAABZXx+bZilLAXJ/C5BtKREDY2MHI2IpSwGK2GsgpSkRAXnUAJteKUsAGwsezQEpEQCTefjTeilLAaUjOVz5KRED0gZ+/4opSwAiY0H4pSkRAFlfH5tmKUsBcn8LkG0pEQA==
Staten Island9999Freshkills Parkfalse622236745695723519AQMAAAABAAAACwAAAMdPtWDDi1LAoZytz1tIREDlLc9/wYtSwALEm3BcSERA8V9t4LyLUsCXZJYwX0hEQLhP40u5i1LA8J8uq2BIREAdbySWtYtSwIHEuqdhSERAkOASSrSLUsC60xrQYUhEQGgqRvmvi1LAXRV4oXVIREBplqY= (truncated)
Staten Island9999Freshkills Parkfalse622236745770565631AQMAAAABAAAABgAAAL+M8Qu7ilLABVI6N8BMRED3i+BMuopSwKqQ99/HTERAau9xW7iKUsDrU7c/3ExEQAYORKu6ilLA97vqedtMREBuDgU3v4pSwIGdnZ/GTERAv4zxC7uKUsAFUjo3wExEQA==
Staten Island9999Freshkills Parkfalse622236745692053503AQMAAAABAAAACAAAALI/Y7tIi1LAUxWdKxZIRECMFF9uRYtSwABFylIlSERABR1RwU+LUsAry+YxNUhEQJlOpJ5ei1LAYUDhODBIREBFjZ+WX4tSwIAsZcYrSERATCsLel2LUsDt3mQjKUhEQF2Yfk9Ni1LAbw26ShhIRECyP2M= (truncated)
Staten Island9999Freshkills Parktrue622236745691496447null
Staten Island9999Freshkills Parkfalse622236745762668543AQMAAAABAAAADQAAAMnMvqDSilLAgrRmC4BKREBM92Bw0opSwNJWGbGCSkRApebsSdKKUsAXBA/MhEpEQABiZi3SilLAPll8WYZKRECduvzL0YpSwMTZ76eLSkRA5LxJsNGKUsAQ+JMpjUpEQAzII43RilLAL38yF49KREAmVOM= (truncated)
Staten Island9999Freshkills Parkfalse622236745698279423AQMAAAABAAAACAAAAAdjDkXgilLAksMkW7ZJREBJ23gM3opSwJNMQBm3SURAKLotRd2KUsBYv2fx0ElEQHze3N7cilLA+ZyQA9pJREAZaS/H3IpSwBcHzi3eSURAAYRiDeaKUsCHtfoT20lEQGEgaZjqilLA2ustO8ZJREAHYw4= (truncated)
Staten Island9999Freshkills Parkfalse622236745769451519AQMAAAABAAAABQAAAOaTaHXEilLAzKLeUl9MRECiHMIJwopSwI4IEFl4TERAnkmchcKKUsDQhaoveExEQNM7QxHHilLAvESOVWNMREDmk2h1xIpSwMyi3lJfTERA
Staten Island9999Freshkills Parkfalse622236745736421375AQMAAAABAAAAKgAAAPYNYtkljVLAoMGf+yhKRED1SRz7Fo1SwK7tr/YtSkRAEIbncRKNUsDu43HQQkpEQMJl/UgVjVLAWxMyLUdKREBindMnF41SwDO4waRGSkRAAF87kheNUsBzHJ6iRkpEQKRTDvsXjVLAkmamhkZKREBYXJ4= (truncated)
Staten Island9999Freshkills Parktrue622236745921691647null
Staten Island9999Freshkills Parkfalse622236745681928191AQMAAAABAAAACQAAAE+kS3CIi1LAkbVIrSJMRECXioCQeYtSwDdI4qYnTERASguBBXWLUsCB+RyBPExEQOmOYFp/i1LAJG7MYUxMREAgk2Z1hYtSwMLhAVdKTERAEo+1M4qLUsBorzhBQExEQBOkhXCRi1LA14/F3TBMREAqAHo= (truncated)
Staten Island9999Freshkills Parktrue622236745696051199null
Staten Island9999Freshkills Parkfalse622236745692381183AQMAAAABAAAACAAAADRnJz7silLALShqJ0NIREBDE7Vg3YpSwMOM+x9ISERAKxvcqNyKUsClj6hrS0hEQALwKmvcilLAqLNYemJIREB0maoo44pSwCqUe9dsSERAeyozBvKKUsBHaODeZ0hEQJGg55D2ilLAR4fQBlNIREA0Zyc= (truncated)
Staten Island9999Freshkills Parkfalse622236745763553279AQMAAAABAAAACQAAAIkt8fzjilLAYDokEWNKREAlmiUe1YpSwJ565QloSkRA9Y6J9tOKUsAS1TZWbUpEQOeGhijTilLAx5TjnHhKREDJzL6g0opSwIK0ZguASkRAydGT5tqKUsDclGXDjEpEQFSmdcXpilLA34yayodKRECnYZo= (truncated)
Staten Island9999Freshkills Parkfalse622236746169122815AQMAAAABAAAAHwAAAHg6dBSJjVLAMJzlOWNHREAWyP83eo1SwJVJEjVoR0RATISqr3WNUsAIF4UNfUdEQDCY3QOAjVLAz4TZ6oxHREBvQmjgjo1SwDoHo++HR0RAzcxrl4+NUsAGAuGlhEdEQKUCd7+PjVLA2zRwoINHREALQHY= (truncated)
Staten Island9999Freshkills Parkfalse622236745680257023AQMAAAABAAAACAAAAMv1sAJ/jFLAcpOKLq5KREBk4/ojcIxSwBpC/CizSkRAH7MammuMUsD+KcoCyEpEQP19BO91jFLAoLU04tdKREBbrDJFfoxSwI5/sxfVSkRAf3rCJ4aMUsDRNUqyzEpEQFoXnVeJjFLATf/cDb5KREDL9bA= (truncated)
Staten Island9999Freshkills Parkfalse622236745672916991AQMAAAABAAAACAAAAHNumr8OjFLAnO3mwA1LRED7OYxMCYxSwLu7xpMPS0RAaicA9gaMUsAFuptQGktEQDmF8sQHjFLAJ/EeZRlLRECgGY+oCYxSwPpCVQAXS0RATQaFdguMUsAxYeF1FEtEQNcrki0NjFLAOGqIxxFLREBzbpo= (truncated)
Staten Island9999Freshkills Parkfalse622236745690710015AQMAAAABAAAABQAAACb5OGLcilLAURRXke1IREDfA6Iq3YpSwAHiVIL9SERAjlqPpN2KUsD/cP+mBElEQAWySBjhilLAZwy7z/RIREAm+Thi3IpSwFEUV5HtSERA
Staten Island9999Freshkills Parkfalse622236745761882111AQMAAAABAAAACgAAALIdTT2zilLA7ddL+4FLREDRx5ceqYpSwBqAPl2FS0RAlwJC5qiKUsDU7QnLhUtEQCcu9q2iilLAtVg/M5FLREAdq0/NoYpSwCvYN7eSS0RAqUMp0p+KUsBiQpbNm0tEQGu3KyaqilLA9NOVrqtLRECiLss= (truncated)
Staten Island9999Freshkills Parkfalse622236745750872063AQMAAAABAAAABgAAAAYORKu6ilLA97vqedtMREBq73FbuIpSwOtTtz/cTERAQv5NjLSKUsDKYGcwBE1EQFzYInTAilLAKfO+NQBNREBr5eX/xIpSwATDXFvrTERABg5Eq7qKUsD3u+p520xEQA==
Brooklyn133133Kensingtontrue622236751937470463null
Brooklyn133133Kensingtontrue622236751857385471null
Brooklyn133133Kensingtontrue622236751873212415null
Brooklyn133133Kensingtontrue622236751936913407null
Brooklyn133133Kensingtontrue622236751933079551null
Brooklyn133133Kensingtontrue622236751873376255null
Brooklyn133133Kensingtontrue622236751937077247null
Brooklyn133133Kensingtontrue622236751872098303null
Brooklyn133133Kensingtontrue622236751872819199null
Brooklyn133133Kensingtontrue622236751937241087null
Brooklyn133133Kensingtontrue622236751936684031null
Brooklyn133133Kensingtontrue622236751871705087null
Brooklyn133133Kensingtontrue622236751938125823null
Brooklyn133133Kensingtontrue622236751873146879null
Brooklyn133133Kensingtontrue622236751937568767null
Brooklyn133133Kensingtontrue622236751872589823null
Brooklyn133133Kensingtontrue622236751933014015null
Brooklyn133133Kensingtontrue622236751873310719null
Brooklyn133133Kensingtontrue622236751937011711null
Brooklyn133133Kensingtontrue622236751872032767null
Brooklyn133133Kensingtontrue622236751872753663null
Brooklyn133133Kensingtontrue622236751933177855null
Brooklyn133133Kensingtontrue622236751937175551null
Brooklyn133133Kensingtontrue622236751933341695null
Brooklyn133133Kensingtontrue622236751871639551null
Brooklyn133133Kensingtontrue622236751937339391null
Brooklyn133133Kensingtontrue622236751938060287null
Brooklyn133133Kensingtontrue622236751873081343null
Brooklyn133133Kensingtontrue622236751871803391null
Brooklyn133133Kensingtontrue622236751873245183null
Brooklyn133133Kensingtontrue622236751936946175null
Brooklyn133133Kensingtontrue622236751871967231null
Brooklyn133133Kensingtontrue622236751872688127null
Brooklyn133133Kensingtontrue622236751873409023null
Brooklyn133133Kensingtontrue622236751937110015null
Brooklyn133133Kensingtontrue622236751872851967null
Brooklyn133133Kensingtontrue622236751937273855null
Brooklyn133133Kensingtontrue622236751872294911null
Brooklyn133133Kensingtontrue622236751937994751null
Brooklyn133133Kensingtontrue622236751873015807null
Brooklyn133133Kensingtontrue622236751936716799null
Brooklyn133133Kensingtontrue622236751937437695null
Brooklyn133133Kensingtontrue622236751871901695null
Brooklyn133133Kensingtontrue622236751937601535null
Brooklyn133133Kensingtontrue622236751933046783null
Brooklyn133133Kensingtontrue622236751938322431null
Brooklyn133133Kensingtontrue622236751873343487null
Brooklyn133133Kensingtontrue622236751937044479null
Brooklyn133133Kensingtontrue622236751872786431null
Brooklyn133133Kensingtontrue622236751937208319null
Brooklyn133133Kensingtontrue622236751871672319null
Brooklyn133133Kensingtontrue622236751937372159null
Brooklyn133133Kensingtontrue622236751936815103null
Brooklyn133133Kensingtontrue622236751871836159null
Brooklyn133133Kensingtontrue622236751872557055null
Brooklyn133133Kensingtontrue622236751932981247null
Brooklyn133133Kensingtontrue622236751938256895null
Brooklyn133133Kensingtontrue622236751873277951null
Brooklyn133133Kensingtontrue622236751936978943null
Brooklyn133133Kensingtontrue622236751872720895null
Brooklyn133133Kensingtontrue622236751872884735null
Brooklyn133133Kensingtontrue622236751933308927null
Brooklyn133133Kensingtontrue622236751937306623null
Brooklyn133133Kensingtontrue622236751857221631null
Brooklyn133133Kensingtontrue622236751873048575null
Brooklyn133133Kensingtontrue622236751936749567null
Brooklyn133133Kensingtontrue622236751871770623null
Brooklyn133133Kensingtonfalse622236751617425407AQMAAAABAAAABwAAAFuk1FT4fVLAaMHh5nxRRECVVYdY9H1SwD3Fi8d9UURADxBsX/d9UsBOjuzxklFEQAULzkP5fVLAuN//AaBRRECTVndQ/H1SwNAtCQCfUURAb3JF6AB+UsBq1q8nilFEQFuk1FT4fVLAaMHh5nxRREA=
Brooklyn133133Kensingtonfalse622236751877046271AQMAAAABAAAABwAAAEGj2xvoflLAoddU7BdSRECDgRJf4H5SwCrlDPAdUkRAYSTMy9l+UsBwJFt5I1JEQO2jvNjTflLA02SqbChSREDWWrny1X5SwGVRuqsrUkRAHANr2OR+UsBt5Ja+JlJEQEGj2xvoflLAoddU7BdSREA=
Brooklyn133133Kensingtonfalse622236751872458751AQMAAAABAAAABwAAANEgXKx6flLAQcX68e1QREAZnLrUdX5SwEXm0YvvUERAs7lwPXF+UsCcDwRkBFFEQCyjM4t7flLAtKykTxRRREA4YGM/fn5SwLNpy2oTUURAhY2b4n1+UsA3GTSeD1FEQNEgXKx6flLAQcX68e1QREA=
Brooklyn133133Kensingtontrue622236751871999999null
Brooklyn133133Kensingtonfalse622236751933276159AQMAAAABAAAABgAAAJNWd1D8fVLA0C0JAJ9RREAFC85D+X1SwLjf/wGgUURAky60m/59UsDJ767lxFFEQA27WgYCflLAhN+oxMNRREDdCiueBn5SwAyAOuyuUURAk1Z3UPx9UsDQLQkAn1FEQA==
Brooklyn133133Kensingtonfalse622236751876882431AQMAAAABAAAACAAAAAyzeGDpflLAYhwA8BZSREBBo9sb6H5SwKHXVOwXUkRAHANr2OR+UsBt5Ja+JlJEQFBI/ybvflLAlUNhqjZSREC0zLMM/n5SwFigIr0xUkRALIZ1i/5+UsAfvWh9L1JEQLRsbafuflLAqiI0+RtSREAMs3g= (truncated)
Brooklyn133133Kensingtonfalse622236751938158591AQMAAAABAAAABgAAAPOiYf1QflLAByZ+nZFSRECuJFQXQn5SwDEvE4qWUkRA3uhx7D5+UsBjMLvqpFJEQNvH5kpHflLAoYs4I55SREDgVFj3Un5SwHEgOquUUkRA86Jh/VB+UsAHJn6dkVJEQA==
Brooklyn133133Kensingtonfalse622236751875506175AQMAAAABAAAACAAAAH/eC4drflLAF7Q8oN9QREB2wvSuYH5SwIGh+jXjUERAkiKR8Vt+UsDtGiWu51BEQAgOuApYflLAfDblZPlQREBvQ2RYYn5SwKmGklAJUURAs7lwPXF+UsCcDwRkBFFEQBmcutR1flLARebRi+9QREB/3gs= (truncated)
Brooklyn133133Kensingtonfalse622236751936782335AQMAAAABAAAACQAAACzUaK99flLAJ2tl14JSREDP+mvJbn5SwO5DJ8SHUkRAbjHMMWp+UsCSTSqdnFJEQBH63i9uflLAX9E8yKJSREAE7b91dX5SwNFT2jGhUkRAA4jWq4R+UsBX1BnYnVJEQML7W5iFflLAOCL0pJ1SREB7Rdw= (truncated)
Brooklyn133133Kensingtonfalse622236751857319935AQMAAAABAAAABgAAAIIjIicff1LA7++ImFdSREDtoN/4HH9SwI1HWoBhUkRAIoC1Ryd/UsDInhZscVJEQHrUUoUxf1LA1/bvCG5SREBqbveYJn9SwM4+8qFgUkRAgiMiJx9/UsDv74iYV1JEQA==
Brooklyn133133Kensingtonfalse622236751933112319AQMAAAABAAAACAAAANq8cCgTflLAyqZKEzJSRECf3uGPDn5SwDhJFpgzUkRAdwxdVg9+UsBaq8O4OFJEQHrwDZcSflLA1fkX0U5SREBdN7n3E35SwB2yGndYUkRAUgWc3hh+UsBXI2zYVlJEQIwkdXYdflLA4aSp/0FSREDavHA= (truncated)
Brooklyn133133Kensingtonfalse622236751937535999AQMAAAABAAAABwAAAGXD31O5flLAxhigJftRREB2j2sHt35SwFTBM+j7UURAJSUmcLJ+UsC2pQfBEFJEQFD/jL68flLANHLrrCBSREBwl37cvH5SwMO9BKMgUkRATYF/ibl+UsAGpXM0/VFEQGXD31O5flLAxhigJftRREA=
Brooklyn133133Kensingtontrue622236751877013503null
Brooklyn133133Kensingtonfalse622236751938289663AQMAAAABAAAABwAAAH87dgTPflLA3aFLmshSREC9aFoewH5SwG2/aIfNUkRAAUFvPb1+UsATCp2Z2lJEQHJVohfOflLAbw1c2dZSREDBgg/m1X5SwLyEbhXVUkRAiBumsNZ+UsAgQ1l01FJEQH87dgTPflLA3aFLmshSREA=
Brooklyn133133Kensingtonfalse622236751858368511AQMAAAABAAAABgAAAGCGxjMPf1LAAyT6C6BSREDi4M5NAH9SwB2oVfmkUkRAcztnW/x+UsBh+V3mtlJEQMbBKOUOf1LA6EEXhqhSREBc+TC8En9SwBuE4IClUkRAYIbGMw9/UsADJPoLoFJEQA==
Brooklyn133133Kensingtonfalse622236751872425983AQMAAAABAAAACAAAADhgYz9+flLAs2nLahNRREAsozOLe35SwLSspE8UUURAT47n83Z+UsDh3usnKVFEQO+jvkGBflLAneaXEzlRREBzq4fSgX5SwP17ueM4UURAxlGhNoF+UsDFpImBMlFEQN9+Qs5/flLAsfwLwCNRREA4YGM= (truncated)
Brooklyn133133Kensingtonfalse622236751933243391AQMAAAABAAAACQAAAA27WgYCflLAhN+oxMNRRECTLrSb/n1SwMnvruXEUURAHMxUi/99UsCnHwVcy1FEQCnT7qsAflLAFwFvI9NRREAct22yAn5SwGnKB5DjUURACQfUowN+UsC3++Dj6VFEQAoYULwHflLAgARpiehRREDDmyI= (truncated)
Brooklyn133133Kensingtonfalse622236751877308415AQMAAAABAAAABwAAANA9HiyyflLAKsS9MrBRREDto16Zq35SwKGyJV+yUURAhJ0dAqd+UsC+hs83x1FEQMcbXFCxflLAWIGcI9dRRECMc4qvtX5SwBZSjLHVUURADJleB7N+UsDJ0u02uVFEQNA9HiyyflLAKsS9MrBRREA=
Brooklyn133133Kensingtonfalse622236751857287167AQMAAAABAAAACAAAAHrUUoUxf1LA1/bvCG5SREAigLVHJ39SwMieFmxxUkRAEBm7sCJ/UsCFj05FhlJEQM4FhrQqf1LAw2pIppJSREAOYLMgP39SwI/dAZaCUkRAm3Zi0j9/UsDikdVuf1JEQLpltTAzf1LA50pRFXBSREB61FI= (truncated)
Brooklyn133133Kensingtonfalse622236751931244543AQMAAAABAAAABQAAADYY5W4yflLA+hE0C69SREBFdWmZLn5SwM6tkU+wUkRAITioFS5+UsA1gJKlslJEQI2xqw0xflLAhlAUKrBSREA2GOVuMn5SwPoRNAuvUkRA
Brooklyn133133Kensingtontrue622236751937961983null
Brooklyn133133Kensingtonfalse622236751937503231AQMAAAABAAAACgAAAHCXfty8flLAw70EoyBSREBQ/4y+vH5SwDRy66wgUkRAG2NFJ7h+UsCDXtSFNVJEQKdrwHXCflLAmJPDcUVSRECsl4Vb0X5SwEi9sYRAUkRA1lq58tV+UsBlUbqrK1JEQO2jvNjTflLA02SqbChSRED7TwA= (truncated)
Brooklyn133133Kensingtonfalse622236751875309567AQMAAAABAAAABQAAAI/Jx15tflLAtVNtQtdQRED0ZJE1aX5SwF5T4ivbUERAdsL0rmB+UsCBofo141BEQH/eC4drflLAF7Q8oN9QRECPycdebX5SwLVTbULXUERA
Brooklyn133133Kensingtonfalse622236751857876991AQMAAAABAAAABAAAAJt2YtI/f1LA4pHVbn9SREANYLMgP39SwJDdAZaCUkRAUfHMH0F/UsCnG/8DgVJEQJt2YtI/f1LA4pHVbn9SREA=
Brooklyn133133Kensingtonfalse622236751857418239AQMAAAABAAAABgAAABAZu7Aif1LAhY9ORYZSRECM+NbKE39SwFmquzKLUkRAYIbGMw9/UsADJPoLoFJEQFz5MLwSf1LAGoTggKVSREDOBYa0Kn9SwMNqSKaSUkRAEBm7sCJ/UsCFj05FhlJEQA==
Brooklyn133133Kensingtonfalse622236751934128127AQMAAAABAAAABwAAAFIFnN4YflLAVyNs2FZSREBdN7n3E35SwB2yGndYUkRADq4U8BV+UsAv3oBDZlJEQC/lyEIZflLAn0XIX31SRECdR9mUHn5SwKwRrp17UkRAlZq0LCN+UsDHi9bEZlJEQFIFnN4YflLAVyNs2FZSREA=
Brooklyn133133Kensingtonfalse622236751871934463AQMAAAABAAAACwAAADNjLjFHflLA9ZPyS/tQRED5HWuIQn5SwLU1S73/UERAk673Ezx+UsCJ8yHiBVFEQGxUb1k6flLA491zgQdRREBoSLPkN35SwMl0Nc0JUURAYLL4rTN+UsBQSQivDVFEQPPOX70wflLA7G05exBRREBxmx0= (truncated)
Brooklyn133133Kensingtonfalse622236751877275647AQMAAAABAAAACQAAAItziq+1flLAFlKMsdVRREDHG1xQsX5SwFiBnCPXUURAZOMYuax+UsCpXVv861FEQHaPawe3flLAVMEz6PtRREBlw99TuX5SwMYYoCX7UURA45/9brh+UsArw/hc8lFEQPNdute2flLASqcZPuFRREBTxsU= (truncated)
Brooklyn133133Kensingtonfalse622236751938093055AQMAAAABAAAACQAAAC+qEMk3flLA3xGqnYZSREC3CgbjKH5SwDjkI4qLUkRACYQoSyR+UsBmcRBjoFJEQEV1aZkuflLAzq2RT7BSREA2GOVuMn5SwPoRNAuvUkRAVSQkpzZ+UsDuy92dq1JEQN7ocew+flLAYzC76qRSRECuJFQ= (truncated)
Brooklyn133133Kensingtontrue622236751937634303null
Brooklyn133133Kensingtonfalse622236751875440639AQMAAAABAAAABwAAAJIikfFbflLA7BolrudQREDoDGM9W35SwES4C1joUERAz+nU8Eh+UsBaYBih+VBEQDNjLjFHflLA9pPyS/tQREC0da4lSX5SwF56WFH+UERACA64Clh+UsB8NuVk+VBEQJIikfFbflLA7BolrudQREA=
Brooklyn133133Kensingtonfalse622236751857254399AQMAAAABAAAACAAAAOPvGj0Mf1LAIyI1YEBSREBJx15bCH9SwCxI4KhBUkRACrdSxAN/UsBhsvSBVlJEQLjgERMOf1LAu8G9bWZSREDtoN/4HH9SwI1HWoBhUkRAgiMiJx9/UsDv74iYV1JEQBohZ+0Yf1LALNL4CVBSREDj7xo= (truncated)
Brooklyn133133Kensingtonfalse622236751938387967AQMAAAABAAAABgAAAMIN7pqcflLAddQKnLJSREDu5sdWln5SwAzhW660UkRAuy2L6pl+UsAEur0o2lJEQLEbElKiflLAqip2YddSREDiZIzppn5SwKAYQYjCUkRAwg3umpx+UsB11AqcslJEQA==
Brooklyn133133Kensingtonfalse622236751872983039AQMAAAABAAAABgAAAGxjw5QdflLAy2ycskZRREAJHTUFFX5SwNam5YZJUURAJly2lxh+UsDDCRsAb1FEQNj2xUojflLA0GDedmtRRECD/mfiJ35SwCUXkp5WUURAbGPDlB1+UsDLbJyyRlFEQA==
Brooklyn133133Kensingtonfalse622236751872065535AQMAAAABAAAABwAAAPPOX70wflLA7G05exBRRECTTLzTIn5SwPmVk7gdUURALiBBVRp+UsAHwLS8JVFEQJY3YywiflLAkytl2jFRREC70JMRMX5SwLATFe4sUURAcZsdqTV+UsATWuQVGFFEQPPOX70wflLA7G05exBRREA=
Brooklyn133133Kensingtonfalse622236751876947967AQMAAAABAAAACAAAACyGdYv+flLAH71ofS9SREC0zLMM/n5SwFigIr0xUkRAScdeWwh/UsAsSOCoQVJEQOPvGj0Mf1LAIyI1YEBSREASkbjMC39SwL1netU/UkRAb6UCegN/UsBMUi+kNVJEQBeAuNH+flLA6ayz0y9SREAshnU= (truncated)
Brooklyn133133Kensingtonfalse622236751938224127AQMAAAABAAAACQAAAK9apc+1flLApTI/m71SREDiZIzppn5SwKAYQYjCUkRAsRsSUqJ+UsCqKnZh11JEQHGZHYanflLAy/Mza99SREByYXbfqX5SwPFANuzeUkRAGdIcF71+UsDgpCSi2lJEQAFBbz29flLAEwqdmdpSREC9aFo= (truncated)
Brooklyn133133Kensingtonfalse622236751936847871AQMAAAABAAAACAAAAJj82+OWflLA4O2/1o1SREB7Rdz9h35SwJL9nMOSUkRAwvtbmIV+UsA4IvSknVJEQPTpldiTflLAIjoIkJpSREDu5sdWln5SwAzhW660UkRAwg3umpx+UsB11AqcslJEQK4kZjKhflLAuMnqwp1SRECY/Ns= (truncated)
Brooklyn133133Kensingtonfalse622236751858302975AQMAAAABAAAACAAAAEMO/v71flLAFRJpDZVSREC9RAkZ535SwNdeqfqZUkRAA+3OgeJ+UsC/4d/TrlJEQOs4ndDsflLAOpfkv75SREAAuqtD9n5SwMiy65+7UkRAcztnW/x+UsBh+V3mtlJEQOLgzk0Af1LAHahV+aRSREBDDv4= (truncated)
Brooklyn133133Kensingtonfalse622236751934095359AQMAAAABAAAACAAAAJ1H2ZQeflLArBGunXtSREAv5chCGX5SwJ9FyF99UkRAHo2Dqxl+UsAb0CA4gFJEQHuwDmsdflLAyU+QvJlSREB0mRmfHn5SwKi26EKiUkRACYQoSyR+UsBmcRBjoFJEQLcKBuMoflLAOOQjiotSRECdR9k= (truncated)
Brooklyn133133Kensingtonfalse622236751872360447AQMAAAABAAAACAAAAAaMDJquflLAcwfuuIpRRECZJ3PipX5SwItVz5qNUURAM1M0S6F+UsBYIWRzolFEQO2jXpmrflLAobIlX7JRREDQPR4ssn5SwCrEvTKwUURATgz9BLF+UsDnFL0PpFFEQID6xbuvflLAgunWWZdRREAGjAw= (truncated)
Brooklyn133133Kensingtonfalse622236751873114111AQMAAAABAAAABgAAACvdMOoSflLAIaZiHHdRRED7Shf9CX5SwHF8jAN5UURAW6TUVPh9UsBoweHmfFFEQG9yRegAflLAatavJ4pRREAlbLPND35SwKlPeTuFUURAK90w6hJ+UsAhpmIcd1FEQA==
Brooklyn133133Kensingtonfalse622236751872196607AQMAAAABAAAABgAAAIhy58SpflLArzZOHFZRREA/9d3nl35SwGcifcpZUURAs3mJnJZ+UsAMBfARWlFEQHammSugflLAemqZ1mhRRECi9nweq35SwN4W1DdlUURAiHLnxKl+UsCvNk4cVlFEQA==
Brooklyn133133Kensingtonfalse622236751871737855AQMAAAABAAAACgAAAKVccKp8flLAgyH0601RREDlKDfFbX5SwJDUldhSUURALtjSLWl+UsDll/iwZ1FEQC+Su3tzflLAYCjInHdRREALJQthgn5SwCTXHLByUURAtp5b+IZ+UsCpk6vXXVFEQAD4Rr6GflLAmcTufV1RRED2F9A= (truncated)
Brooklyn133133Kensingtonfalse622236751931179007AQMAAAABAAAABwAAAAmEKEskflLAZnEQY6BSREB0mRmfHn5SwKm26EKiUkRAK9x9FyF+UsChkx/Ds1JEQIdU3kIiflLAz6NziLxSREAhOKgVLn5SwDaAkqWyUkRARXVpmS5+UsDOrZFPsFJEQAmEKEskflLAZnEQY6BSREA=
Brooklyn133133Kensingtontrue622236751877079039null
Brooklyn133133Kensingtonfalse622236751938355199AQMAAAABAAAABQAAALEbElKiflLAqip2YddSREC7LYvqmX5SwAS6vSjaUkRAsa5ZrZp+UsCNebch4lJEQHGZHYanflLAy/Mza99SRECxGxJSon5SwKoqdmHXUkRA
Brooklyn133133Kensingtontrue622236751937437695null
Brooklyn133133Kensingtonfalse622236751858434047AQMAAAABAAAACQAAAAPtzoHiflLAv+Hf065SREDbnsab035SwCCXDsGzUkRAfzt2BM9+UsDdoUuayFJEQIgbprDWflLAIENZdNRSRECpvTwo3n5SwGeIZYTOUkRAMLeyrOp+UsCOpsWcxFJEQAZ957LrflLA4zNv0cNSREDrOJ0= (truncated)
Brooklyn133133Kensingtonfalse622236751872950271AQMAAAABAAAACQAAANj2xUojflLA0GDedmtRREAlXLaXGH5SwMQJGwBvUURAeRq/PBl+UsDgx1LDdVFEQCvdMOoSflLAIaZiHHdRREAlbLPND35SwKlPeTuFUURAAappGxp+UsCcg5InlVFEQN+C2gApflLAhshAO5BRRED9vX4= (truncated)
Brooklyn133133Kensingtonfalse622236751616376831AQMAAAABAAAABgAAAC4gQVUaflLAB8C0vCVRREBUdiNUEn5SwAI2hkotUURACR01BRV+UsDWpuWGSVFEQGxjw5QdflLAy2ycskZRRECWN2MsIn5SwJMrZdoxUURALiBBVRp+UsAHwLS8JVFEQA==
Brooklyn133133Kensingtonfalse622236751937732607AQMAAAABAAAABQAAAG4xzDFqflLAkk0qnZxSRECWOp/3Yn5SwL1ktwCfUkRAeOOJkmN+UsCItVYZpVJEQBH63i9uflLAX9E8yKJSREBuMcwxan5SwJJNKp2cUkRA
Brooklyn133133Kensingtonfalse622236751858270207AQMAAAABAAAABAAAAAG6q0P2flLAyLLrn7tSREDrOJ3Q7H5SwDqX5L++UkRABn3nsut+UsDjM2/Rw1JEQAG6q0P2flLAyLLrn7tSREA=
Brooklyn133133Kensingtontrue622236751857352703null
Brooklyn133133Kensingtonfalse622236751872327679AQMAAAABAAAACAAAALN5iZyWflLADAXwEVpRRECwEMFxin5SwD/XnbFcUURAtp5b+IZ+UsCpk6vXXVFEQAslC2GCflLAJNccsHJRREDVkwqvjH5SwHKz35uCUURAHARdlJt+UsDULRmvfVFEQHammSugflLAemqZ1mhRRECzeYk= (truncated)
Brooklyn133133Kensingtonfalse622236751933145087AQMAAAABAAAACAAAAN1tV3INflLAYpxJTg1SREBY0l8hCX5SwMZUbLsOUkRAy7o7ogp+UsAo5urRGFJEQI63eQkMflLA6OQA5SJSRECf3uGPDn5SwDhJFpgzUkRA2rxwKBN+UsDKpkoTMlJEQEioR8AXflLA4C+dOh1SREDdbVc= (truncated)
Brooklyn133133Kensingtonfalse622236751938027519AQMAAAABAAAADQAAAGJAD3tkflLAWfvi13dSREAiRRWVVX5SwFmdicR8UkRA86Jh/VB+UsAHJn6dkVJEQOBUWPdSflLAcSA6q5RSREAwJStPWH5SwDUwwVWQUkRAT4sy9Vx+UsAFeOWCjFJEQM3k3YlgflLADNFTPYlSREAgm+s= (truncated)
Brooklyn133133Kensingtonfalse622236751875375103AQMAAAABAAAABgAAAC7muJd3flLA2IIdps1QRECPycdebX5SwLVTbULXUERAf94Lh2t+UsAXtDyg31BEQBmcutR1flLARebRi+9QREDRIFysen5SwEHF+vHtUERALua4l3d+UsDYgh2mzVBEQA==
Brooklyn133133Kensingtontrue622236751936651263null
Brooklyn133133Kensingtonfalse622236751872622591AQYAAAACAAAAAQMAAAABAAAABQAAAHOrh9KBflLA/Xu54zhRREDvo75BgX5SwJ3mlxM5UURApVxwqnx+UsCDIfTrTVFEQHJxMRGFflLArfH55lpRREBzq4fSgX5SwP17ueM4UURAAQMAAAABAAAABAAAALAQwXGKflLAP9edsVw= (truncated)
Brooklyn133133Kensingtonfalse622236751872163839AQMAAAABAAAACAAAAKL2fB6rflLA3hbUN2VRREB2ppkroH5SwHpqmdZoUURAHARdlJt+UsDULRmvfVFEQJknc+KlflLAi1XPmo1RREAGjAyarn5SwHMH7riKUURApgB+RK5+UsBx7Tz+hlFEQKy81p6sflLATfgyBXZRRECi9nw= (truncated)
Brooklyn133133Kensingtonfalse622236751933439999AQMAAAABAAAABgAAAAoYULwHflLAgARpiehRREAJB9SjA35SwLf74OPpUURAWNJfIQl+UsDGVGy7DlJEQN1tV3INflLAYpxJTg1SREB1JSwKEn5SwCctsXX4UURAChhQvAd+UsCABGmJ6FFEQA==
Manhattan236236Upper East Side Northtrue622236722201296895null
Manhattan236236Upper East Side Northtrue622236722202345471null
Manhattan236236Upper East Side Northtrue622236722201591807null
Manhattan236236Upper East Side Northtrue622236722202116095null
Manhattan236236Upper East Side Northtrue622236722202640383null
Manhattan236236Upper East Side Northtrue622236722210209791null
Manhattan236236Upper East Side Northtrue622236722210504703null
Manhattan236236Upper East Side Northtrue622236722201133055null
Manhattan236236Upper East Side Northtrue622236722202181631null
Manhattan236236Upper East Side Northtrue622236722204803071null
Manhattan236236Upper East Side Northtrue622236722201952255null
Manhattan236236Upper East Side Northtrue622236722210045951null
Manhattan236236Upper East Side Northtrue622236722201493503null
Manhattan236236Upper East Side Northtrue622236722202017791null
Manhattan236236Upper East Side Northtrue622236722202542079null
Manhattan236236Upper East Side Northtrue622236722201264127null
Manhattan236236Upper East Side Northtrue622236722202312703null
Manhattan236236Upper East Side Northtrue622236722210406399null
Manhattan236236Upper East Side Northtrue622236722202083327null
Manhattan236236Upper East Side Northtrue622236722210177023null
Manhattan236236Upper East Side Northtrue622236722201329663null
Manhattan236236Upper East Side Northtrue622236722202378239null
Manhattan236236Upper East Side Northtrue622236722204999679null
Manhattan236236Upper East Side Northtrue622236722210242559null
Manhattan236236Upper East Side Northtrue622236722201395199null
Manhattan236236Upper East Side Northtrue622236722201919487null
Manhattan236236Upper East Side Northtrue622236722202443775null
Manhattan236236Upper East Side Northtrue622236722201165823null
Manhattan236236Upper East Side Northtrue622236722202214399null
Manhattan236236Upper East Side Northtrue622236722210308095null
Manhattan236236Upper East Side Northtrue622236722201460735null
Manhattan236236Upper East Side Northtrue622236722202509311null
Manhattan236236Upper East Side Northtrue622236722210078719null
Manhattan236236Upper East Side Northtrue622236722201231359null
Manhattan236236Upper East Side Northtrue622236722202279935null
Manhattan236236Upper East Side Northtrue622236722210373631null
Manhattan236236Upper East Side Northtrue622236722202050559null
Manhattan236236Upper East Side Northtrue622236722209619967null
Manhattan236236Upper East Side Northtrue622236722210144255null
Manhattan236236Upper East Side Northfalse622236722202476543AQMAAAABAAAACQAAAP+f8/YZfVLA8JO5MJhjREBrKmJ/Fn1SwMBMVVWZY0RASm2uPBZ9UsC69joMmmNEQGVAqBEOfVLA+OxhcbBjRED4yyvzCn1SwOJopQC5Y0RANK6ovhB9UsBSi3bzwWNEQDoh0K8ffVLAqGtmBr1jRECEoOs= (truncated)
Manhattan236236Upper East Side Northfalse622236722214010879AQMAAAABAAAABwAAAFlqf9difVLAzzwixkFkREBAHOl2VH1SwNN+woNGZERA36nY2k99UsC1pIplW2REQCWD/h5WfVLAU/pDEmVkRECsbjoEWX1SwNVJZE9dZERA0QvFUGB9UsB/BPqnSGREQFlqf9difVLAzzwixkFkREA=
Manhattan236236Upper East Side Northfalse622236722201985023AQMAAAABAAAACQAAANVekW+gfVLAgSja2GtjREDskrJ+kX1SwHgIaMZwY0RATIEB44x9UsB2o9enhWNEQGwvQziXfVLAqenHm5VjREC+95UYo31SwIuG/LCRY0RAiigaj6V9UsBy2+XrimNEQHTdfzWqfVLArD06Vn5jREDqm9U= (truncated)
Manhattan236236Upper East Side Northfalse622236722201821183AQMAAAABAAAACQAAACjlj5ySfVLAE3tMfapjREC4+Iarg31SwPA60mqvY0RAmoG9D399UsA7N11MxGNEQBXrEGWJfVLAHf9wQNRjREB2AA0Di31SwMfO57fTY0RAJrmEwo59UsAejzBqyWNEQNrP5mGWfVLAiDRhibRjREDq/a8= (truncated)
Manhattan236236Upper East Side Northfalse622236722210340863AQMAAAABAAAACAAAAIcX9JT4fFLAoKhTo/BjREBuepBj9nxSwG8xYFzxY0RAR2JAke98UsBKfc56BGREQOufj07qfFLADa11mBJkREBW+ktc73xSwBUvVGYaZERAUyuxTf58UsDa9V15FWREQChA++kCfVLA+GvWlwBkRECHF/Q= (truncated)
Manhattan236236Upper East Side Northfalse622236722208505855AQMAAAABAAAABQAAACdLlxO3fVLAIgROBkRjRECtcvf7s31SwNpZ0QlSY0RAPeXACLh9UsDu+mVKWGNEQFteC3C9fVLAJ7n5YkljREAnS5cTt31SwCIETgZEY0RA
Manhattan236236Upper East Side Northfalse622236722215190527AQMAAAABAAAABwAAAFTpiHgufVLAfpVN2rNkREAqu8aGH31SwNOnhce4ZERAgfdTLBt9UsBeyQ5/zGREQFvKzHQrfVLASNILXdpkREBvJaJiM31SwJCKHbjDZERAsniXUzV9UsD28R1wvmREQFTpiHgufVLAfpVN2rNkREA=
Manhattan236236Upper East Side Northfalse622236722204835839AQMAAAABAAAABwAAAAJLPg5UfVLAl601h/BiREBJMmN+TH1SwODmSFIFY0RAWgScR0x9UsCgxivoBWNEQFTqeYBTfVLAJQIDDxFjREBw5SVxYn1SwJAdvyEMY0RAnyHuT2V9UsDXNKAg/2JEQAJLPg5UfVLAl601h/BiREA=
Manhattan236236Upper East Side Northfalse622236722209849343AQMAAAABAAAABAAAAETav5LYfFLAQhrp2EJkREB7C9kv1nxSwIaybmtJZERACXj8Mdd8UsCZ8VoWSWREQETav5LYfFLAQhrp2EJkREA=
Manhattan236236Upper East Side Northfalse622236722209685503AQMAAAABAAAABQAAACp6OozJfFLARtBQBGxkREDWlMXZwXxSwB7BWDWBZERAwPirZcl8UsC8nFuRh2REQGwr9/jNfFLAiQKf2XJkREAqejqMyXxSwEbQUARsZERA
Manhattan236236Upper East Side Northfalse622236722202836991AQMAAAABAAAABQAAAE9FueZqfVLA9HMewStkRECbLlQEaH1SwMQGnbQsZERAqR5kKGR9UsCq4lowPmREQEyO6vBnfVLA+PTb4TNkREBPRbnman1SwPRzHsErZERA
Manhattan236236Upper East Side Northfalse622236722209521663AQMAAAABAAAABwAAALgbmurcfFLAY7LC7G1kREBsK/f4zXxSwIkCn9lyZERAwPirZcl8UsC8nFuRh2REQAbCFAvafFLA9gdymJVkREArz0mj4nxSwF7ASsOSZERAdbbEP+d8UsC3e4zhfWREQLgbmurcfFLAY7LC7G1kREA=
Manhattan236236Upper East Side Northfalse622236722204344319AQMAAAABAAAABgAAAH8U7DY/fVLAgoyPuSljREBSL4srPH1SwI6fmBgyY0RAckTMoDZ9UsDndJVMQWNEQNMa+1c7fVLAWr+Mvj9jREAHzeXzP31SwPG9Xd0qY0RAfxTsNj99UsCCjI+5KWNEQA==
Manhattan236236Upper East Side Northfalse622236722211192831AQMAAAABAAAABwAAAEAcWjEVfVLAES/K0qhkREC51Zo/Bn1SwJ3f5r+tZERAxX7u0QN9UsC/5lq/uGREQO9KLAURfVLAg0OL2cNkRECB91MsG31SwF7JDn/MZERAKrvGhh99UsDTp4XHuGREQEAcWjEVfVLAES/K0qhkREA=
Manhattan236236Upper East Side Northfalse622236722208866303AQMAAAABAAAACAAAANFQu6SQfVLAQaw8nSNjREBJjscLhn1SwOkuCRwnY0RAD+4acIF9UsCw3E79O2NEQPsHNMWLfVLAwnQo8UtjREBAUfy1mn1SwGc0pANHY0RAHv6UUZ99UsCB+08iMmNEQI7ZtUOcfVLAGU4way1jREDRULs= (truncated)
Manhattan236236Upper East Side Northfalse622236722212208639AQMAAAABAAAABgAAAJotUIsefVLASyl2Q4NjREAS8XnSHX1SwBFw1D+FY0RAbCpifxZ9UsDATFVVmWNEQP+f8/YZfVLA8JO5MJhjREBD5QyTHn1SwAjIaE+DY0RAmi1Qix59UsBLKXZDg2NEQA==
Manhattan236236Upper East Side Northfalse622236722201690111AQMAAAABAAAABgAAAL73lRijfVLAi4b8sJFjREBsL0M4l31SwKnpx5uVY0RAKOWPnJJ9UsATe0x9qmNEQOr9r16XfVLAfpfk1bFjRECuKyL6nX1SwIiSAMOfY0RAvveVGKN9UsCLhvywkWNEQA==
Manhattan236236Upper East Side Northtrue622236722201526271null
Manhattan236236Upper East Side Northtrue622236722204868607null
Manhattan236236Upper East Side Northfalse622236722215059455AQMAAAABAAAACAAAAI2CdgZCfVLAQtMZC5pkREDH8scUM31SwM+oY/ieZERAVOmIeC59UsB+lU3as2REQLN4l1M1fVLA9vEdcL5kRECU58fgOn1SwKB4tFWvZERANcvSP0J9UsDxeGQWm2REQC63lWlCfVLARS0kpJpkRECNgnY= (truncated)
Manhattan236236Upper East Side Northfalse622236722201198591AQMAAAABAAAACQAAAJqBvQ9/fVLAOzddTMRjRECM96AecH1SwNY20TnJY0RAVVPBgmt9UsCdnWIb3mNEQFUtEth1fVLAgJCOD+5jREAUtiYGg31SwJmV1rbpY0RALneyEId9UsARqYOR3mNEQIcc9zKHfVLATmJOM95jREAV6xA= (truncated)
Manhattan236236Upper East Side Northfalse622236722209718271AQMAAAABAAAABgAAACvPSaPifFLAXsBKw5JkREAFwhQL2nxSwPYHcpiVZERAAItY/tt8UsDn9Sw9l2REQNGx03TsfFLAideODKVkREDZtIj47HxSwGrhH7iiZERAK89Jo+J8UsBewErDkmREQA==
Manhattan236236Upper East Side Northfalse622236722202869759AQMAAAABAAAACAAAAARQMDxxfVLATe008QJkREBXpOlKYn1SwE3LoN4HZERAaJnxrl19UsAGkk3AHGREQJsuVARofVLAxAadtCxkREBORbnman1SwPRzHsErZERAjTtAWG99UsAipMSNH2REQL9W7q92fVLANpcWXAtkREAEUDA= (truncated)
Manhattan236236Upper East Side Northfalse622236722209554431AQMAAAABAAAACQAAAAl4/DHXfFLAmfFaFklkREB7C9kv1nxSwIaybmtJZERAf3rlbdF8UsDeJd6FVmREQN8oM+rJfFLA2lKYAWtkREAqejqMyXxSwEbQUARsZERAbCv3+M18UsCJAp/ZcmREQLgbmurcfFLAY7LC7G1kREAbyBI= (truncated)
Manhattan236236Upper East Side Northfalse622236722208899071AQMAAAABAAAACAAAAHf3aat8fVLA1DOu0xJjREALvsK2e31SwEjuOigXY0RASY7HC4Z9UsDpLgkcJ2NEQNFQu6SQfVLAQaw8nSNjRED/1eCZin1SwFgpLYQeY0RA0RvY0Yh9UsBE4JcMHWNEQMp4Vw2HfVLAsz0CkRtjREB392k= (truncated)
Manhattan236236Upper East Side Northfalse622236722208735231AQMAAAABAAAABAAAAI7ZtUOcfVLAGU4way1jREAe/pRRn31SwIH7TyIyY0RATr0XJKF9UsAY3G6IMWNEQI7ZtUOcfVLAGU4way1jREA=
Manhattan236236Upper East Side Northfalse622236722201559039AQMAAAABAAAABwAAAKPASJorfVLAMBukbl9jREA80aZkJX1SwEtyJW1wY0RAmi1Qix59UsBKKXZDg2NEQEPlDJMefVLACMhoT4NjREAGOAqELX1SwDOFUGJ+Y0RAaFANIDJ9UsASIwaBaWNEQKPASJorfVLAMBukbl9jREA=
Manhattan236236Upper East Side Northfalse622236722204901375AQMAAAABAAAABwAAAJ8h7k9lfVLA1zSgIP9iREBw5SVxYn1SwJAdvyEMY0RA3twTxmx9UsDvMJoVHGNEQAu+wrZ7fVLASO46KBdjREB392mrfH1SwNQzrtMSY0RAwIlKS259UsBarOm5BmNEQJ8h7k9lfVLA1zSgIP9iREA=
Manhattan236236Upper East Side Northfalse622236722213257215AQMAAAABAAAABQAAAANsRIn7fFLAE3QCQuNjRECNZ9v59nxSwB+kJbfvY0RAbnqQY/Z8UsBvMWBc8WNEQIcX9JT4fFLAoKhTo/BjREADbESJ+3xSwBN0AkLjY0RA
Manhattan236236Upper East Side Northtrue622236722209587199null
Showing the first 1000 rows.
-
-

This also extends to plotting maps inside the notebook using the kepler.gl visualisation library using a notebook magic %%mosaic_kepler.

-
-
[ ]:
-
-
-
from mosaic import st_aswkt
-(
-  mosaic_neighbourhoods
-  .select(st_aswkt(col("index.wkb")).alias("wkt"), col("index.index_id").alias("h3"))
-).createOrReplaceTempView("kepler_df")
-
-
-
-
-
-
-
- -
-
-
-
[ ]:
-
-
-
%%mosaic_kepler
-"kepler_df" "h3" "h3"
-
-
-
-
-
-
-
- -
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter -
-
-
-
-
-
-
-
-
-
-
-
-Kepler.gl
-
-

mosaic kepler map example

-

Now the two datasets can be joined first on H3 index, with any false positives removed through a contains filter on a much simpler geometry.

-
-
[ ]:
-
-
-
mosaic_joined_df = (
-  trips_with_geom.alias("t")
-  .join(mosaic_neighbourhoods.alias("n"), on=expr("t.pickup_h3 = n.index.index_id"), how="inner")
-  .where(
-    ~col("index.is_core") |
-    st_contains("index.wkb", "pickup_geom")
-  )
-)
-
-mosaic_joined_df.show()
-
-
-
-
-
-
-
- -
+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+------------------+------------------+---------+-----------+--------+--------------------+-------+------------------+--------------------+ -vendor_id| pickup_datetime| dropoff_datetime|passenger_count|trip_distance|pickup_longitude|pickup_latitude|rate_code_id|dropoff_longitude|dropoff_latitude|fare_amount|extra|mta_tax|tip_amount|tolls_amount|total_amount| pickup_geom| dropoff_geom| bounds| pickup_h3| dropoff_h3| borough|location_id|objectid| zone|is_core| h3| wkb| -+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+------------------+------------------+---------+-----------+--------+--------------------+-------+------------------+--------------------+ - CMT|2009-11-28 13:00:00|2009-11-28 13:01:57| 1| 0.5| -73.999666| 40.733384| null| -73.991751| 40.730273| 3.3| 0.0| 0.5| 0.0| 0.0| 3.8|{1, [[[-73.999666...|{1, [[[-73.991751...|{5, [[[-80.0, 35....|622236723433046015|622236750715092991|Manhattan| 114| 114|Greenwich Village...| false|622236723433046015|[01 03 00 00 00 0...| - CMT|2009-11-28 13:00:00|2009-11-28 13:01:57| 1| 0.5| -73.999666| 40.733384| null| -73.991751| 40.730273| 3.3| 0.0| 0.5| 0.0| 0.0| 3.8|{1, [[[-73.999666...|{1, [[[-73.991751...|{5, [[[-80.0, 35....|622236723433046015|622236750715092991|Manhattan| 249| 249| West Village| false|622236723433046015|[01 03 00 00 00 0...| - CMT|2009-11-28 13:00:00|2009-11-28 13:01:57| 1| 0.5| -73.999666| 40.733384| null| -73.991751| 40.730273| 3.3| 0.0| 0.5| 0.0| 0.0| 3.8|{1, [[[-73.999666...|{1, [[[-73.991751...|{5, [[[-80.0, 35....|622236723433046015|622236750715092991|Manhattan| 113| 113|Greenwich Village...| false|622236723433046015|[01 03 00 00 00 0...| - CMT|2009-11-30 07:49:13|2009-11-30 08:12:38| 1| 12.9| -74.007033| 40.734931| null| -73.87277| 40.774319| 29.7| 0.0| 0.5| 6.04| 0.0| 36.24|{1, [[[-74.007033...|{1, [[[-73.87277,...|{5, [[[-80.0, 35....|622236750719975423|622236724015759359|Manhattan| 249| 249| West Village| false|622236750719975423|[01 03 00 00 00 0...| - CMT|2009-11-30 07:49:13|2009-11-30 08:12:38| 1| 12.9| -74.007033| 40.734931| null| -73.87277| 40.774319| 29.7| 0.0| 0.5| 6.04| 0.0| 36.24|{1, [[[-74.007033...|{1, [[[-73.87277,...|{5, [[[-80.0, 35....|622236750719975423|622236724015759359|Manhattan| 158| 158|Meatpacking/West ...| false|622236750719975423|[01 03 00 00 00 0...| - VTS|2009-01-03 01:55:00|2009-01-03 02:04:00| 5| 2.09| -73.993217| 40.72416| null| -73.9944| 40.74624| 7.7| 0.5| null| 0.0| 0.0| 8.2|{1, [[[-73.993217...|{1, [[[-73.9944, ...|{5, [[[-80.0, 35....|622236750717878271|622236723431276543|Manhattan| 114| 114|Greenwich Village...| false|622236750717878271|[01 03 00 00 00 0...| - VTS|2009-01-03 01:55:00|2009-01-03 02:04:00| 5| 2.09| -73.993217| 40.72416| null| -73.9944| 40.74624| 7.7| 0.5| null| 0.0| 0.0| 8.2|{1, [[[-73.993217...|{1, [[[-73.9944, ...|{5, [[[-80.0, 35....|622236750717878271|622236723431276543|Manhattan| 144| 144| Little Italy/NoLiTa| false|622236750717878271|[01 03 00 00 00 0...| - CMT|2009-12-07 10:36:06|2009-12-07 10:42:26| 1| 1.3| -73.99067| 40.73065| null| -73.975539| 40.741353| 6.1| 0.0| 0.5| 0.0| 0.0| 6.6|{1, [[[-73.99067,...|{1, [[[-73.975539...|{5, [[[-80.0, 35....|622236750715092991|622236723437502463|Manhattan| 113| 113|Greenwich Village...| false|622236750715092991|[01 03 00 00 00 0...| - CMT|2009-12-07 10:36:06|2009-12-07 10:42:26| 1| 1.3| -73.99067| 40.73065| null| -73.975539| 40.741353| 6.1| 0.0| 0.5| 0.0| 0.0| 6.6|{1, [[[-73.99067,...|{1, [[[-73.975539...|{5, [[[-80.0, 35....|622236750715092991|622236723437502463|Manhattan| 79| 79| East Village| false|622236750715092991|[01 03 00 00 00 0...| - CMT|2010-06-27 17:27:25|2010-06-27 17:47:44| 2| 5.0| -74.008459| 40.712233| 1| -73.9516| 40.718877| 15.7| 0.0| 0.5| 3.0| 0.0| 19.2|{1, [[[-74.008459...|{1, [[[-73.9516, ...|{5, [[[-80.0, 35....|622236750648639487|622236723415482367|Manhattan| 231| 231|TriBeCa/Civic Center| false|622236750648639487|[01 03 00 00 00 0...| - CMT|2010-06-27 17:27:25|2010-06-27 17:47:44| 2| 5.0| -74.008459| 40.712233| 1| -73.9516| 40.718877| 15.7| 0.0| 0.5| 3.0| 0.0| 19.2|{1, [[[-74.008459...|{1, [[[-73.9516, ...|{5, [[[-80.0, 35....|622236750648639487|622236723415482367|Manhattan| 261| 261| World Trade Center| false|622236750648639487|[01 03 00 00 00 0...| - CMT|2010-06-27 17:27:25|2010-06-27 17:47:44| 2| 5.0| -74.008459| 40.712233| 1| -73.9516| 40.718877| 15.7| 0.0| 0.5| 3.0| 0.0| 19.2|{1, [[[-74.008459...|{1, [[[-73.9516, ...|{5, [[[-80.0, 35....|622236750648639487|622236723415482367|Manhattan| 209| 209| Seaport| false|622236750648639487|[01 03 00 00 00 0...| - CMT|2009-11-17 16:50:35|2009-11-17 17:01:34| 1| 1.6| -74.00679| 40.730546| null| -73.9904| 40.73815| 7.7| 1.0| 0.5| 1.5| 0.0| 10.7|{1, [[[-74.00679,...|{1, [[[-73.9904, ...|{5, [[[-80.0, 35....|622236750718894079|622236723426754559|Manhattan| 249| 249| West Village| false|622236750718894079|[01 03 00 00 00 0...| - CMT|2009-11-17 16:50:35|2009-11-17 17:01:34| 1| 1.6| -74.00679| 40.730546| null| -73.9904| 40.73815| 7.7| 1.0| 0.5| 1.5| 0.0| 10.7|{1, [[[-74.00679,...|{1, [[[-73.9904, ...|{5, [[[-80.0, 35....|622236750718894079|622236723426754559|Manhattan| 158| 158|Meatpacking/West ...| false|622236750718894079|[01 03 00 00 00 0...| - CMT|2009-11-30 23:30:43|2009-11-30 23:42:54| 2| 2.9| -74.009605| 40.710155| null| -73.993875| 40.741554| 10.1| 0.5| 0.5| 2.22| 0.0| 13.32|{1, [[[-74.009605...|{1, [[[-73.993875...|{5, [[[-80.0, 35....|622236750646968319|622236723430490111|Manhattan| 87| 87|Financial Distric...| false|622236750646968319|[01 03 00 00 00 0...| - CMT|2009-11-30 23:30:43|2009-11-30 23:42:54| 2| 2.9| -74.009605| 40.710155| null| -73.993875| 40.741554| 10.1| 0.5| 0.5| 2.22| 0.0| 13.32|{1, [[[-74.009605...|{1, [[[-73.993875...|{5, [[[-80.0, 35....|622236750646968319|622236723430490111|Manhattan| 261| 261| World Trade Center| false|622236750646968319|[01 03 00 00 00 0...| - CMT|2010-09-21 07:44:41|2010-09-21 08:07:03| 1| 4.2| -74.008626| 40.7042| 1| -73.981636| 40.758581| 14.5| 0.0| 0.5| 1.2| 0.0| 16.2|{1, [[[-74.008626...|{1, [[[-73.981636...|{5, [[[-80.0, 35....|622236750650671103|622236723500384255|Manhattan| 87| 87|Financial Distric...| false|622236750650671103|[01 03 00 00 00 0...| - CMT|2010-09-21 07:44:41|2010-09-21 08:07:03| 1| 4.2| -74.008626| 40.7042| 1| -73.981636| 40.758581| 14.5| 0.0| 0.5| 1.2| 0.0| 16.2|{1, [[[-74.008626...|{1, [[[-73.981636...|{5, [[[-80.0, 35....|622236750650671103|622236723500384255|Manhattan| 88| 88|Financial Distric...| false|622236750650671103|[01 03 00 00 00 0...| - VTS|2010-10-10 08:56:00|2010-10-10 09:01:00| 1| 1.96| -74.012115| 40.707623| 1| -73.999272| 40.734073| 6.5| 0.0| 0.5| 0.0| 0.0| 7.0|{1, [[[-74.012115...|{1, [[[-73.999272...|{5, [[[-80.0, 35....|622236750639693823|622236723433013247|Manhattan| 87| 87|Financial Distric...| false|622236750639693823|[01 03 00 00 00 0...| - VTS|2010-10-10 08:56:00|2010-10-10 09:01:00| 1| 1.96| -74.012115| 40.707623| 1| -73.999272| 40.734073| 6.5| 0.0| 0.5| 0.0| 0.0| 7.0|{1, [[[-74.012115...|{1, [[[-73.999272...|{5, [[[-80.0, 35....|622236750639693823|622236723433013247|Manhattan| 261| 261| World Trade Center| false|622236750639693823|[01 03 00 00 00 0...| -+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+------------------+------------------+---------+-----------+--------+--------------------+-------+------------------+--------------------+ -only showing top 20 rows - -
-
-
-
-

MosaicFrame abstraction for simple indexing and joins

-

By wrapping our Spark DataFrames with MosaicFrame, we can simplify the join process. For example:

-
-
[ ]:
-
-
-
from mosaic import MosaicFrame
-
-
-
-
-
-
-
- -
-
-
-
[ ]:
-
-
-
trips_mdf = MosaicFrame(trips, "pickup_geom")
-neighbourhoods_mdf = MosaicFrame(geoJsonDF, "geometry")
-
-
-
-
-
-
-
- -
-
-
-
[ ]:
-
-
-
(
-  trips_mdf
-  .set_index_resolution(10)
-  .apply_index()
-  .join(
-    neighbourhoods_mdf
-    .set_index_resolution(10)
-    .apply_index()
-  )
-).show()
-
-
-
-
-
-
-
- -
+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+ -vendor_id| pickup_datetime| dropoff_datetime|passenger_count|trip_distance|pickup_longitude|pickup_latitude|rate_code_id|dropoff_longitude|dropoff_latitude|fare_amount|extra|mta_tax|tip_amount|tolls_amount|total_amount| pickup_geom| dropoff_geom| bounds| -+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+ - CMT|2009-10-12 19:35:21|2009-10-12 19:44:36| 1| 1.4| -74.000018| 40.720534| null| -73.995008| 40.734112| 6.5| 0.0| null| 0.0| 0.0| 6.5|{1, [[[-74.000018...|{1, [[[-73.995008...|{5, [[[-80.0, 35....| - CMT|2010-09-02 07:37:40|2010-09-02 07:53:17| 1| 6.8| -74.016477| 40.70971| 1| -73.97509| 40.759392| 17.3| 0.0| 0.5| 1.0| 0.0| 18.8|{1, [[[-74.016477...|{1, [[[-73.97509,...|{5, [[[-80.0, 35....| - CMT|2009-11-28 13:00:00|2009-11-28 13:01:57| 1| 0.5| -73.999666| 40.733384| null| -73.991751| 40.730273| 3.3| 0.0| 0.5| 0.0| 0.0| 3.8|{1, [[[-73.999666...|{1, [[[-73.991751...|{5, [[[-80.0, 35....| - CMT|2009-11-30 07:49:13|2009-11-30 08:12:38| 1| 12.9| -74.007033| 40.734931| null| -73.87277| 40.774319| 29.7| 0.0| 0.5| 6.04| 0.0| 36.24|{1, [[[-74.007033...|{1, [[[-73.87277,...|{5, [[[-80.0, 35....| - VTS|2009-01-03 01:55:00|2009-01-03 02:04:00| 5| 2.09| -73.993217| 40.72416| null| -73.9944| 40.74624| 7.7| 0.5| null| 0.0| 0.0| 8.2|{1, [[[-73.993217...|{1, [[[-73.9944, ...|{5, [[[-80.0, 35....| - VTS|2009-11-09 17:21:00|2009-11-09 17:32:00| 1| 5.19| -74.010003| 40.707022| null| -73.963853| 40.75677| 13.3| 1.0| 0.5| 0.0| 0.0| 14.8|{1, [[[-74.010003...|{1, [[[-73.963853...|{5, [[[-80.0, 35....| - VTS|2010-06-09 01:13:00|2010-06-09 01:27:00| 1| 8.09| -74.008697| 40.707335| 1| -73.949605| 40.78761| 19.7| 0.5| 0.5| 0.0| 0.0| 20.7|{1, [[[-74.008697...|{1, [[[-73.949605...|{5, [[[-80.0, 35....| - VTS|2009-01-28 18:36:00|2009-01-28 18:50:00| 1| 2.92| -74.008823| 40.72089| null| -73.994055| 40.747588| 10.1| 1.0| null| 3.0| 0.0| 14.1|{1, [[[-74.008823...|{1, [[[-73.994055...|{5, [[[-80.0, 35....| - CMT|2010-06-02 14:21:05|2010-06-02 14:28:43| 1| 5.0| -74.011653| 40.702604| 1| -73.971851| 40.749807| 12.5| 0.0| 0.5| 2.6| 0.0| 15.6|{1, [[[-74.011653...|{1, [[[-73.971851...|{5, [[[-80.0, 35....| - VTS|2009-11-26 15:38:00|2009-11-26 15:47:00| 5| 2.36| -73.997208| 40.722108| null| -73.99647| 40.748185| 8.1| 0.0| 0.5| 2.0| 0.0| 10.6|{1, [[[-73.997208...|{1, [[[-73.99647,...|{5, [[[-80.0, 35....| - CMT|2009-12-07 10:36:06|2009-12-07 10:42:26| 1| 1.3| -73.99067| 40.73065| null| -73.975539| 40.741353| 6.1| 0.0| 0.5| 0.0| 0.0| 6.6|{1, [[[-73.99067,...|{1, [[[-73.975539...|{5, [[[-80.0, 35....| - CMT|2009-11-15 09:11:42|2009-11-15 09:26:34| 1| 3.7| -73.990065| 40.687341| null| -73.999566| 40.730219| 12.1| 0.0| 0.5| 0.0| 0.0| 12.6|{1, [[[-73.990065...|{1, [[[-73.999566...|{5, [[[-80.0, 35....| - CMT|2010-06-27 17:27:25|2010-06-27 17:47:44| 2| 5.0| -74.008459| 40.712233| 1| -73.9516| 40.718877| 15.7| 0.0| 0.5| 3.0| 0.0| 19.2|{1, [[[-74.008459...|{1, [[[-73.9516, ...|{5, [[[-80.0, 35....| - VTS|2009-01-30 21:05:00|2009-01-30 21:34:00| 1| 5.99| -73.994397| 40.694843| null| -73.921257| 40.685107| 18.9| 0.5| null| 0.6| 0.0| 20.0|{1, [[[-73.994397...|{1, [[[-73.921257...|{5, [[[-80.0, 35....| - CMT|2009-01-14 07:43:53|2009-01-14 07:55:14| 2| 2.9| -74.007602| 40.725098| null| -73.977846| 40.751608| 9.3| 0.0| null| 0.0| 0.0| 9.3|{1, [[[-74.007602...|{1, [[[-73.977846...|{5, [[[-80.0, 35....| - VTS|2010-05-11 16:33:00|2010-05-11 16:41:00| 1| 0.99| -74.011205| 40.715468| 1| -74.011072| 40.708882| 5.7| 1.0| 0.5| 0.0| 0.0| 7.2|{1, [[[-74.011205...|{1, [[[-74.011072...|{5, [[[-80.0, 35....| - VTS|2009-01-19 09:43:00|2009-01-19 09:47:00| 1| 0.56| -73.991123| 40.731297| null| -73.98681| 40.736703| 4.1| 0.0| null| 0.0| 0.0| 4.1|{1, [[[-73.991123...|{1, [[[-73.98681,...|{5, [[[-80.0, 35....| - CMT|2009-11-14 15:46:36|2009-11-14 15:51:01| 2| 1.2| -74.008448| 40.734271| null| -74.006075| 40.720237| 4.9| 0.0| 0.5| 0.0| 0.0| 5.4|{1, [[[-74.008448...|{1, [[[-74.006075...|{5, [[[-80.0, 35....| - CMT|2009-11-17 16:50:35|2009-11-17 17:01:34| 1| 1.6| -74.00679| 40.730546| null| -73.9904| 40.73815| 7.7| 1.0| 0.5| 1.5| 0.0| 10.7|{1, [[[-74.00679,...|{1, [[[-73.9904, ...|{5, [[[-80.0, 35....| - CMT|2009-11-30 23:30:43|2009-11-30 23:42:54| 2| 2.9| -74.009605| 40.710155| null| -73.993875| 40.741554| 10.1| 0.5| 0.5| 2.22| 0.0| 13.32|{1, [[[-74.009605...|{1, [[[-73.993875...|{5, [[[-80.0, 35....| -+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+ -only showing top 20 rows - -
-
-
-
- - -
-
- -
-
-
-
- - - - \ No newline at end of file diff --git a/v0.3.x/usage/quickstart.ipynb b/v0.3.x/usage/quickstart.ipynb deleted file mode 100644 index 2ba3c8b63..000000000 --- a/v0.3.x/usage/quickstart.ipynb +++ /dev/null @@ -1,10959 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "c247678b-66ab-4879-b331-bb0532826530", - "showTitle": false, - "title": "" - } - }, - "source": [ - "# Quickstart notebook\n", - "The example code here shows how to get up and running with Mosaic using the Python API." - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "aaf89a78-8b1f-4e27-8cc8-3fa382ff8210", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "from pyspark.sql.functions import *" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "ec0b86d5-e58c-478a-824b-e1165fb267de", - "showTitle": false, - "title": "" - } - }, - "source": [ - "## Enable Mosaic in the notebook\n", - "To get started, you'll need to attach the python library to your cluster and execute the `enable_mosaic` function." - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "ecb6237c-050b-47c6-98ed-6942a50472e3", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "from mosaic import enable_mosaic\n", - "enable_mosaic(spark, dbutils)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "d774f893-1152-41de-adde-bdad37e755f7", - "showTitle": false, - "title": "" - } - }, - "source": [ - "Mosaic has extra configuration options. Check the docs for more details." - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "10776858-768a-450f-9281-6a00e80d04c2", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
Help on function enable_mosaic in module mosaic.api.enable:\n", - "\n", - "enable_mosaic(spark: pyspark.sql.session.SparkSession, dbutils=None) -> None\n", - " Enable Mosaic functions.\n", - " \n", - " Use this function at the start of your workflow to ensure all of the required dependencies are installed and\n", - " Mosaic is configured according to your needs.\n", - " \n", - " Parameters\n", - " ----------\n", - " spark : pyspark.sql.SparkSession\n", - " The active SparkSession.\n", - " dbutils : dbruntime.dbutils.DBUtils\n", - " The dbutils object used for `display` and `displayHTML` functions.\n", - " Optional, only applicable to Databricks users.\n", - " \n", - " Returns\n", - " -------\n", - " \n", - " Notes\n", - " -----\n", - " Users can control various aspects of Mosaic's operation with the following Spark confs:\n", - " \n", - " - `spark.databricks.labs.mosaic.jar.autoattach`: 'true' (default) or 'false'\n", - " Automatically attach the Mosaic JAR to the Databricks cluster? (Optional)\n", - " - `spark.databricks.labs.mosaic.jar.location`\n", - " Explicitly specify the path to the Mosaic JAR.\n", - " (Optional and not required at all in a standard Databricks environment).\n", - " - `spark.databricks.labs.mosaic.geometry.api`: 'OGC' (default) or 'JTS'\n", - " Explicitly specify the underlying geometry library to use for spatial operations. (Optional)\n", - " - `spark.databricks.labs.mosaic.index.system`: 'H3' (default)\n", - " Explicitly specify the index system to use for optimized spatial joins. (Optional)\n", - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
Help on function enable_mosaic in module mosaic.api.enable:\n\nenable_mosaic(spark: pyspark.sql.session.SparkSession, dbutils=None) -> None\n Enable Mosaic functions.\n \n Use this function at the start of your workflow to ensure all of the required dependencies are installed and\n Mosaic is configured according to your needs.\n \n Parameters\n ----------\n spark : pyspark.sql.SparkSession\n The active SparkSession.\n dbutils : dbruntime.dbutils.DBUtils\n The dbutils object used for `display` and `displayHTML` functions.\n Optional, only applicable to Databricks users.\n \n Returns\n -------\n \n Notes\n -----\n Users can control various aspects of Mosaic's operation with the following Spark confs:\n \n - `spark.databricks.labs.mosaic.jar.autoattach`: 'true' (default) or 'false'\n Automatically attach the Mosaic JAR to the Databricks cluster? (Optional)\n - `spark.databricks.labs.mosaic.jar.location`\n Explicitly specify the path to the Mosaic JAR.\n (Optional and not required at all in a standard Databricks environment).\n - `spark.databricks.labs.mosaic.geometry.api`: 'OGC' (default) or 'JTS'\n Explicitly specify the underlying geometry library to use for spatial operations. (Optional)\n - `spark.databricks.labs.mosaic.index.system`: 'H3' (default)\n Explicitly specify the index system to use for optimized spatial joins. (Optional)\n\n
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "help(enable_mosaic)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "ac3649d8-5561-4370-b5d3-a36bf5068fd1", - "showTitle": false, - "title": "" - } - }, - "source": [ - "## Geometry constructors and the Mosaic internal geometry format" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "c9e64d22-ebbc-4ea7-97aa-2dd6e240c9ad", - "showTitle": false, - "title": "" - } - }, - "source": [ - "Mosaic allows users to create new Point geometries from a pair of Spark DoubleType columns." - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "aa85d1b2-8ec1-4879-87b4-cf55eb12820c", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
+----+-----+--------------------+\n", - " lat| lon| point_geom|\n", - "+----+-----+--------------------+\n", - "35.0|-80.0|{1, [[[-80.0, 35....|\n", - "45.0|-80.0|{1, [[[-80.0, 45....|\n", - "45.0|-70.0|{1, [[[-70.0, 45....|\n", - "35.0|-70.0|{1, [[[-70.0, 35....|\n", - "35.0|-80.0|{1, [[[-80.0, 35....|\n", - "+----+-----+--------------------+\n", - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
+----+-----+--------------------+\n| lat| lon| point_geom|\n+----+-----+--------------------+\n|35.0|-80.0|{1, [[[-80.0, 35....|\n|45.0|-80.0|{1, [[[-80.0, 45....|\n|45.0|-70.0|{1, [[[-70.0, 45....|\n|35.0|-70.0|{1, [[[-70.0, 35....|\n|35.0|-80.0|{1, [[[-80.0, 35....|\n+----+-----+--------------------+\n\n
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "from mosaic import st_point\n", - "\n", - "lons = [-80., -80., -70., -70., -80.]\n", - "lats = [ 35., 45., 45., 35., 35.]\n", - "\n", - "bounds_df = (\n", - " spark\n", - " .createDataFrame({\"lon\": lon, \"lat\": lat} for lon, lat in zip(lons, lats))\n", - " .coalesce(1)\n", - " .withColumn(\"point_geom\", st_point(\"lon\", \"lat\"))\n", - ")\n", - "bounds_df.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "e0229f66-1fe7-4218-905f-6fe265fd2441", - "showTitle": false, - "title": "" - } - }, - "source": [ - "Mosaic Point geometries can be aggregated into LineString and Polygon geometries using the respective constructors." - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "c143e704-333d-4c15-800d-7dcefc924f71", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
+--------------------+\n", - " bounding_ring|\n", - "+--------------------+\n", - "{3, [[[-80.0, 35....|\n", - "+--------------------+\n", - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
+--------------------+\n| bounding_ring|\n+--------------------+\n|{3, [[[-80.0, 35....|\n+--------------------+\n\n
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "from mosaic import st_makeline\n", - "\n", - "bounds_df = (\n", - " bounds_df\n", - " .groupBy()\n", - " .agg(collect_list(\"point_geom\").alias(\"bounding_coords\"))\n", - " .select(st_makeline(\"bounding_coords\").alias(\"bounding_ring\"))\n", - ")\n", - "bounds_df.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "0282fcbd-f9b1-4708-b015-dc9e0fac9072", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
+--------------------+\n", - " bounds|\n", - "+--------------------+\n", - "{5, [[[-80.0, 35....|\n", - "+--------------------+\n", - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
+--------------------+\n| bounds|\n+--------------------+\n|{5, [[[-80.0, 35....|\n+--------------------+\n\n
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "from mosaic import st_makepolygon\n", - "\n", - "bounds_df = bounds_df.select(st_makepolygon(\"bounding_ring\").alias(\"bounds\"))\n", - "bounds_df.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "459a46e8-e7cb-4bb0-a167-e359889d15a9", - "showTitle": false, - "title": "" - } - }, - "source": [ - "## Geometry clipping without an index" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "02d90b72-81b4-48a9-b117-b7976bca13aa", - "showTitle": false, - "title": "" - } - }, - "source": [ - "Mosaic implements set intersection functions: contains, intersects, overlaps etc. Here you can see `st_contains` being used to clip points by a polygon geometry." - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "e5ec8d70-8d6b-44b9-ad2a-ef593e2011bd", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "tripsTable = spark.table(\"delta.`/databricks-datasets/nyctaxi/tables/nyctaxi_yellow`\")" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "ad0e72a9-4e2e-45fe-ba39-d2933859154d", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "from mosaic import st_contains\n", - "trips = (\n", - " tripsTable\n", - " .limit(5_000_000)\n", - " .repartition(sc.defaultParallelism * 20)\n", - " .drop(\"vendorId\", \"rateCodeId\", \"store_and_fwd_flag\", \"payment_type\")\n", - " .withColumn(\"pickup_geom\", st_point(\"pickup_longitude\", \"pickup_latitude\"))\n", - " .withColumn(\"dropoff_geom\", st_point(\"dropoff_longitude\", \"dropoff_latitude\"))\n", - " .crossJoin(bounds_df)\n", - " .where(st_contains(\"bounds\", \"pickup_geom\"))\n", - " .where(st_contains(\"bounds\", \"dropoff_geom\"))\n", - " .cache()\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "9aa22657-47c6-4de6-8e48-733a150b00a0", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+\n", - "vendor_id| pickup_datetime| dropoff_datetime|passenger_count|trip_distance|pickup_longitude|pickup_latitude|rate_code_id|dropoff_longitude|dropoff_latitude|fare_amount|extra|mta_tax|tip_amount|tolls_amount|total_amount| pickup_geom| dropoff_geom| bounds|\n", - "+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+\n", - " CMT|2009-10-12 19:35:21|2009-10-12 19:44:36| 1| 1.4| -74.000018| 40.720534| null| -73.995008| 40.734112| 6.5| 0.0| null| 0.0| 0.0| 6.5|{1, [[[-74.000018...|{1, [[[-73.995008...|{5, [[[-80.0, 35....|\n", - " CMT|2010-09-02 07:37:40|2010-09-02 07:53:17| 1| 6.8| -74.016477| 40.70971| 1| -73.97509| 40.759392| 17.3| 0.0| 0.5| 1.0| 0.0| 18.8|{1, [[[-74.016477...|{1, [[[-73.97509,...|{5, [[[-80.0, 35....|\n", - " CMT|2009-11-28 13:00:00|2009-11-28 13:01:57| 1| 0.5| -73.999666| 40.733384| null| -73.991751| 40.730273| 3.3| 0.0| 0.5| 0.0| 0.0| 3.8|{1, [[[-73.999666...|{1, [[[-73.991751...|{5, [[[-80.0, 35....|\n", - " CMT|2009-11-30 07:49:13|2009-11-30 08:12:38| 1| 12.9| -74.007033| 40.734931| null| -73.87277| 40.774319| 29.7| 0.0| 0.5| 6.04| 0.0| 36.24|{1, [[[-74.007033...|{1, [[[-73.87277,...|{5, [[[-80.0, 35....|\n", - " VTS|2009-01-03 01:55:00|2009-01-03 02:04:00| 5| 2.09| -73.993217| 40.72416| null| -73.9944| 40.74624| 7.7| 0.5| null| 0.0| 0.0| 8.2|{1, [[[-73.993217...|{1, [[[-73.9944, ...|{5, [[[-80.0, 35....|\n", - " VTS|2009-11-09 17:21:00|2009-11-09 17:32:00| 1| 5.19| -74.010003| 40.707022| null| -73.963853| 40.75677| 13.3| 1.0| 0.5| 0.0| 0.0| 14.8|{1, [[[-74.010003...|{1, [[[-73.963853...|{5, [[[-80.0, 35....|\n", - " VTS|2010-06-09 01:13:00|2010-06-09 01:27:00| 1| 8.09| -74.008697| 40.707335| 1| -73.949605| 40.78761| 19.7| 0.5| 0.5| 0.0| 0.0| 20.7|{1, [[[-74.008697...|{1, [[[-73.949605...|{5, [[[-80.0, 35....|\n", - " VTS|2009-01-28 18:36:00|2009-01-28 18:50:00| 1| 2.92| -74.008823| 40.72089| null| -73.994055| 40.747588| 10.1| 1.0| null| 3.0| 0.0| 14.1|{1, [[[-74.008823...|{1, [[[-73.994055...|{5, [[[-80.0, 35....|\n", - " CMT|2010-06-02 14:21:05|2010-06-02 14:28:43| 1| 5.0| -74.011653| 40.702604| 1| -73.971851| 40.749807| 12.5| 0.0| 0.5| 2.6| 0.0| 15.6|{1, [[[-74.011653...|{1, [[[-73.971851...|{5, [[[-80.0, 35....|\n", - " VTS|2009-11-26 15:38:00|2009-11-26 15:47:00| 5| 2.36| -73.997208| 40.722108| null| -73.99647| 40.748185| 8.1| 0.0| 0.5| 2.0| 0.0| 10.6|{1, [[[-73.997208...|{1, [[[-73.99647,...|{5, [[[-80.0, 35....|\n", - " CMT|2009-12-07 10:36:06|2009-12-07 10:42:26| 1| 1.3| -73.99067| 40.73065| null| -73.975539| 40.741353| 6.1| 0.0| 0.5| 0.0| 0.0| 6.6|{1, [[[-73.99067,...|{1, [[[-73.975539...|{5, [[[-80.0, 35....|\n", - " CMT|2009-11-15 09:11:42|2009-11-15 09:26:34| 1| 3.7| -73.990065| 40.687341| null| -73.999566| 40.730219| 12.1| 0.0| 0.5| 0.0| 0.0| 12.6|{1, [[[-73.990065...|{1, [[[-73.999566...|{5, [[[-80.0, 35....|\n", - " CMT|2010-06-27 17:27:25|2010-06-27 17:47:44| 2| 5.0| -74.008459| 40.712233| 1| -73.9516| 40.718877| 15.7| 0.0| 0.5| 3.0| 0.0| 19.2|{1, [[[-74.008459...|{1, [[[-73.9516, ...|{5, [[[-80.0, 35....|\n", - " VTS|2009-01-30 21:05:00|2009-01-30 21:34:00| 1| 5.99| -73.994397| 40.694843| null| -73.921257| 40.685107| 18.9| 0.5| null| 0.6| 0.0| 20.0|{1, [[[-73.994397...|{1, [[[-73.921257...|{5, [[[-80.0, 35....|\n", - " CMT|2009-01-14 07:43:53|2009-01-14 07:55:14| 2| 2.9| -74.007602| 40.725098| null| -73.977846| 40.751608| 9.3| 0.0| null| 0.0| 0.0| 9.3|{1, [[[-74.007602...|{1, [[[-73.977846...|{5, [[[-80.0, 35....|\n", - " VTS|2010-05-11 16:33:00|2010-05-11 16:41:00| 1| 0.99| -74.011205| 40.715468| 1| -74.011072| 40.708882| 5.7| 1.0| 0.5| 0.0| 0.0| 7.2|{1, [[[-74.011205...|{1, [[[-74.011072...|{5, [[[-80.0, 35....|\n", - " VTS|2009-01-19 09:43:00|2009-01-19 09:47:00| 1| 0.56| -73.991123| 40.731297| null| -73.98681| 40.736703| 4.1| 0.0| null| 0.0| 0.0| 4.1|{1, [[[-73.991123...|{1, [[[-73.98681,...|{5, [[[-80.0, 35....|\n", - " CMT|2009-11-14 15:46:36|2009-11-14 15:51:01| 2| 1.2| -74.008448| 40.734271| null| -74.006075| 40.720237| 4.9| 0.0| 0.5| 0.0| 0.0| 5.4|{1, [[[-74.008448...|{1, [[[-74.006075...|{5, [[[-80.0, 35....|\n", - " CMT|2009-11-17 16:50:35|2009-11-17 17:01:34| 1| 1.6| -74.00679| 40.730546| null| -73.9904| 40.73815| 7.7| 1.0| 0.5| 1.5| 0.0| 10.7|{1, [[[-74.00679,...|{1, [[[-73.9904, ...|{5, [[[-80.0, 35....|\n", - " CMT|2009-11-30 23:30:43|2009-11-30 23:42:54| 2| 2.9| -74.009605| 40.710155| null| -73.993875| 40.741554| 10.1| 0.5| 0.5| 2.22| 0.0| 13.32|{1, [[[-74.009605...|{1, [[[-73.993875...|{5, [[[-80.0, 35....|\n", - "+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+\n", - "only showing top 20 rows\n", - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+\n|vendor_id| pickup_datetime| dropoff_datetime|passenger_count|trip_distance|pickup_longitude|pickup_latitude|rate_code_id|dropoff_longitude|dropoff_latitude|fare_amount|extra|mta_tax|tip_amount|tolls_amount|total_amount| pickup_geom| dropoff_geom| bounds|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+\n| CMT|2009-10-12 19:35:21|2009-10-12 19:44:36| 1| 1.4| -74.000018| 40.720534| null| -73.995008| 40.734112| 6.5| 0.0| null| 0.0| 0.0| 6.5|{1, [[[-74.000018...|{1, [[[-73.995008...|{5, [[[-80.0, 35....|\n| CMT|2010-09-02 07:37:40|2010-09-02 07:53:17| 1| 6.8| -74.016477| 40.70971| 1| -73.97509| 40.759392| 17.3| 0.0| 0.5| 1.0| 0.0| 18.8|{1, [[[-74.016477...|{1, [[[-73.97509,...|{5, [[[-80.0, 35....|\n| CMT|2009-11-28 13:00:00|2009-11-28 13:01:57| 1| 0.5| -73.999666| 40.733384| null| -73.991751| 40.730273| 3.3| 0.0| 0.5| 0.0| 0.0| 3.8|{1, [[[-73.999666...|{1, [[[-73.991751...|{5, [[[-80.0, 35....|\n| CMT|2009-11-30 07:49:13|2009-11-30 08:12:38| 1| 12.9| -74.007033| 40.734931| null| -73.87277| 40.774319| 29.7| 0.0| 0.5| 6.04| 0.0| 36.24|{1, [[[-74.007033...|{1, [[[-73.87277,...|{5, [[[-80.0, 35....|\n| VTS|2009-01-03 01:55:00|2009-01-03 02:04:00| 5| 2.09| -73.993217| 40.72416| null| -73.9944| 40.74624| 7.7| 0.5| null| 0.0| 0.0| 8.2|{1, [[[-73.993217...|{1, [[[-73.9944, ...|{5, [[[-80.0, 35....|\n| VTS|2009-11-09 17:21:00|2009-11-09 17:32:00| 1| 5.19| -74.010003| 40.707022| null| -73.963853| 40.75677| 13.3| 1.0| 0.5| 0.0| 0.0| 14.8|{1, [[[-74.010003...|{1, [[[-73.963853...|{5, [[[-80.0, 35....|\n| VTS|2010-06-09 01:13:00|2010-06-09 01:27:00| 1| 8.09| -74.008697| 40.707335| 1| -73.949605| 40.78761| 19.7| 0.5| 0.5| 0.0| 0.0| 20.7|{1, [[[-74.008697...|{1, [[[-73.949605...|{5, [[[-80.0, 35....|\n| VTS|2009-01-28 18:36:00|2009-01-28 18:50:00| 1| 2.92| -74.008823| 40.72089| null| -73.994055| 40.747588| 10.1| 1.0| null| 3.0| 0.0| 14.1|{1, [[[-74.008823...|{1, [[[-73.994055...|{5, [[[-80.0, 35....|\n| CMT|2010-06-02 14:21:05|2010-06-02 14:28:43| 1| 5.0| -74.011653| 40.702604| 1| -73.971851| 40.749807| 12.5| 0.0| 0.5| 2.6| 0.0| 15.6|{1, [[[-74.011653...|{1, [[[-73.971851...|{5, [[[-80.0, 35....|\n| VTS|2009-11-26 15:38:00|2009-11-26 15:47:00| 5| 2.36| -73.997208| 40.722108| null| -73.99647| 40.748185| 8.1| 0.0| 0.5| 2.0| 0.0| 10.6|{1, [[[-73.997208...|{1, [[[-73.99647,...|{5, [[[-80.0, 35....|\n| CMT|2009-12-07 10:36:06|2009-12-07 10:42:26| 1| 1.3| -73.99067| 40.73065| null| -73.975539| 40.741353| 6.1| 0.0| 0.5| 0.0| 0.0| 6.6|{1, [[[-73.99067,...|{1, [[[-73.975539...|{5, [[[-80.0, 35....|\n| CMT|2009-11-15 09:11:42|2009-11-15 09:26:34| 1| 3.7| -73.990065| 40.687341| null| -73.999566| 40.730219| 12.1| 0.0| 0.5| 0.0| 0.0| 12.6|{1, [[[-73.990065...|{1, [[[-73.999566...|{5, [[[-80.0, 35....|\n| CMT|2010-06-27 17:27:25|2010-06-27 17:47:44| 2| 5.0| -74.008459| 40.712233| 1| -73.9516| 40.718877| 15.7| 0.0| 0.5| 3.0| 0.0| 19.2|{1, [[[-74.008459...|{1, [[[-73.9516, ...|{5, [[[-80.0, 35....|\n| VTS|2009-01-30 21:05:00|2009-01-30 21:34:00| 1| 5.99| -73.994397| 40.694843| null| -73.921257| 40.685107| 18.9| 0.5| null| 0.6| 0.0| 20.0|{1, [[[-73.994397...|{1, [[[-73.921257...|{5, [[[-80.0, 35....|\n| CMT|2009-01-14 07:43:53|2009-01-14 07:55:14| 2| 2.9| -74.007602| 40.725098| null| -73.977846| 40.751608| 9.3| 0.0| null| 0.0| 0.0| 9.3|{1, [[[-74.007602...|{1, [[[-73.977846...|{5, [[[-80.0, 35....|\n| VTS|2010-05-11 16:33:00|2010-05-11 16:41:00| 1| 0.99| -74.011205| 40.715468| 1| -74.011072| 40.708882| 5.7| 1.0| 0.5| 0.0| 0.0| 7.2|{1, [[[-74.011205...|{1, [[[-74.011072...|{5, [[[-80.0, 35....|\n| VTS|2009-01-19 09:43:00|2009-01-19 09:47:00| 1| 0.56| -73.991123| 40.731297| null| -73.98681| 40.736703| 4.1| 0.0| null| 0.0| 0.0| 4.1|{1, [[[-73.991123...|{1, [[[-73.98681,...|{5, [[[-80.0, 35....|\n| CMT|2009-11-14 15:46:36|2009-11-14 15:51:01| 2| 1.2| -74.008448| 40.734271| null| -74.006075| 40.720237| 4.9| 0.0| 0.5| 0.0| 0.0| 5.4|{1, [[[-74.008448...|{1, [[[-74.006075...|{5, [[[-80.0, 35....|\n| CMT|2009-11-17 16:50:35|2009-11-17 17:01:34| 1| 1.6| -74.00679| 40.730546| null| -73.9904| 40.73815| 7.7| 1.0| 0.5| 1.5| 0.0| 10.7|{1, [[[-74.00679,...|{1, [[[-73.9904, ...|{5, [[[-80.0, 35....|\n| CMT|2009-11-30 23:30:43|2009-11-30 23:42:54| 2| 2.9| -74.009605| 40.710155| null| -73.993875| 40.741554| 10.1| 0.5| 0.5| 2.22| 0.0| 13.32|{1, [[[-74.009605...|{1, [[[-73.993875...|{5, [[[-80.0, 35....|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+\nonly showing top 20 rows\n\n
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "trips.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "c9353ac7-aa07-4d75-8b16-0031803ea31e", - "showTitle": false, - "title": "" - } - }, - "source": [ - "## Read from GeoJson, compute some basic geometry attributes" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "db5daf84-fc48-45ce-81a7-5af76b7b6010", - "showTitle": false, - "title": "" - } - }, - "source": [ - "You've seen how Mosaic can create geometries from Spark native data types but it also provides functions to translate Well Known Text (WKT), Well Known Binary (WKB) and GeoJSON representations to Mosaic geometries." - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "49505635-4e84-480e-9892-e3e816af2226", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
+-------------+-----------+--------+--------------------+--------------------+\n", - " borough|location_id|objectid| zone| geometry|\n", - "+-------------+-----------+--------+--------------------+--------------------+\n", - " EWR| 1| 1| Newark Airport|{6, [[[-74.184452...|\n", - " Queens| 2| 2| Jamaica Bay|{6, [[[-73.823375...|\n", - " Bronx| 3| 3|Allerton/Pelham G...|{6, [[[-73.847926...|\n", - " Manhattan| 4| 4| Alphabet City|{6, [[[-73.971774...|\n", - "Staten Island| 5| 5| Arden Heights|{6, [[[-74.174217...|\n", - "Staten Island| 6| 6|Arrochar/Fort Wad...|{6, [[[-74.063673...|\n", - " Queens| 7| 7| Astoria|{6, [[[-73.904136...|\n", - " Queens| 8| 8| Astoria Park|{6, [[[-73.923340...|\n", - " Queens| 9| 9| Auburndale|{6, [[[-73.785024...|\n", - " Manhattan| 24| 24| Bloomingdale|{6, [[[-73.959536...|\n", - " Queens| 10| 10| Baisley Park|{6, [[[-73.783266...|\n", - " Brooklyn| 11| 11| Bath Beach|{6, [[[-74.001098...|\n", - " Manhattan| 12| 12| Battery Park|{6, [[[-74.015657...|\n", - " Manhattan| 13| 13| Battery Park City|{6, [[[-74.012441...|\n", - " Bronx| 18| 18| Bedford Park|{6, [[[-73.885139...|\n", - " Brooklyn| 25| 25| Boerum Hill|{6, [[[-73.981552...|\n", - " Brooklyn| 14| 14| Bay Ridge|{6, [[[-74.034073...|\n", - " Queens| 15| 15|Bay Terrace/Fort ...|{6, [[[-73.777403...|\n", - " Brooklyn| 22| 22| Bensonhurst West|{6, [[[-73.992549...|\n", - "Staten Island| 23| 23|Bloomfield/Emerso...|{6, [[[-74.195686...|\n", - "+-------------+-----------+--------+--------------------+--------------------+\n", - "only showing top 20 rows\n", - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
+-------------+-----------+--------+--------------------+--------------------+\n| borough|location_id|objectid| zone| geometry|\n+-------------+-----------+--------+--------------------+--------------------+\n| EWR| 1| 1| Newark Airport|{6, [[[-74.184452...|\n| Queens| 2| 2| Jamaica Bay|{6, [[[-73.823375...|\n| Bronx| 3| 3|Allerton/Pelham G...|{6, [[[-73.847926...|\n| Manhattan| 4| 4| Alphabet City|{6, [[[-73.971774...|\n|Staten Island| 5| 5| Arden Heights|{6, [[[-74.174217...|\n|Staten Island| 6| 6|Arrochar/Fort Wad...|{6, [[[-74.063673...|\n| Queens| 7| 7| Astoria|{6, [[[-73.904136...|\n| Queens| 8| 8| Astoria Park|{6, [[[-73.923340...|\n| Queens| 9| 9| Auburndale|{6, [[[-73.785024...|\n| Manhattan| 24| 24| Bloomingdale|{6, [[[-73.959536...|\n| Queens| 10| 10| Baisley Park|{6, [[[-73.783266...|\n| Brooklyn| 11| 11| Bath Beach|{6, [[[-74.001098...|\n| Manhattan| 12| 12| Battery Park|{6, [[[-74.015657...|\n| Manhattan| 13| 13| Battery Park City|{6, [[[-74.012441...|\n| Bronx| 18| 18| Bedford Park|{6, [[[-73.885139...|\n| Brooklyn| 25| 25| Boerum Hill|{6, [[[-73.981552...|\n| Brooklyn| 14| 14| Bay Ridge|{6, [[[-74.034073...|\n| Queens| 15| 15|Bay Terrace/Fort ...|{6, [[[-73.777403...|\n| Brooklyn| 22| 22| Bensonhurst West|{6, [[[-73.992549...|\n|Staten Island| 23| 23|Bloomfield/Emerso...|{6, [[[-74.195686...|\n+-------------+-----------+--------+--------------------+--------------------+\nonly showing top 20 rows\n\n
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "from mosaic import st_geomfromgeojson\n", - "\n", - "geoJsonDF = (\n", - " spark.read.format(\"json\")\n", - " .load(\"dbfs:/FileStore/shared_uploads/stuart.lynn@databricks.com/NYC_Taxi_Zones.geojson\")\n", - " .withColumn(\"geometry\", st_geomfromgeojson(to_json(col(\"geometry\"))))\n", - " .select(\"properties.*\", \"geometry\")\n", - " .drop(\"shape_area\", \"shape_leng\")\n", - ")\n", - "\n", - "geoJsonDF.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "880c5fb4-c0b2-456b-9167-cb6327876dbd", - "showTitle": false, - "title": "" - } - }, - "source": [ - "Mosaic provides a number of functions for extracting the properties of geometries. Here are some that are relevant to Polygon geometries:" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "939d35fd-d868-4e73-8338-3cb8142fffe9", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
+--------------------+--------------------+--------------------+\n", - " geometry| calculatedArea| calculatedLength|\n", - "+--------------------+--------------------+--------------------+\n", - "{6, [[[-74.184452...|7.823067885002562E-4| 0.1163574531886787|\n", - "{6, [[[-73.823375...|0.001422779097814599| 0.8431218810128789|\n", - "{6, [[[-73.847926...|3.144141568206508E-4| 0.08434110590105784|\n", - "{6, [[[-73.971774...| 7.94539194214528E-5| 0.03559982116907461|\n", - "{6, [[[-74.174217...|4.979574893632193E-4| 0.09214648985735088|\n", - "{6, [[[-74.063673...|4.046076598541714E-4| 0.12905753305870837|\n", - "{6, [[[-73.904136...|3.897879892739018...| 0.10741717112348065|\n", - "{6, [[[-73.923340...|2.658771690499072E-5|0.027590691195158792|\n", - "{6, [[[-73.785024...|3.384438031986125...| 0.0997840924710119|\n", - "{6, [[[-73.959536...|4.193691000471793E-5|0.034022318280805826|\n", - "{6, [[[-73.783266...|4.358238180810105...| 0.09983947941552027|\n", - "{6, [[[-74.001098...|2.029913532381591E-4| 0.07243934539937844|\n", - "{6, [[[-74.015657...|1.078595394871048...| 0.01759380786230351|\n", - "{6, [[[-74.012441...|4.874002713725957E-5| 0.04726120195723124|\n", - "{6, [[[-73.885139...|1.488501639473639E-4| 0.06979954985700013|\n", - "{6, [[[-73.981552...|1.241682673558662...| 0.04714581993191898|\n", - "{6, [[[-74.034073...|6.636590898190788E-4| 0.13622530962992194|\n", - "{6, [[[-73.777403...|4.588438269978550...| 0.1295148763926726|\n", - "{6, [[[-73.992549...|4.613649657988681...| 0.11844001178496774|\n", - "{6, [[[-74.195686...|0.002090822778761513| 0.3007595308122533|\n", - "+--------------------+--------------------+--------------------+\n", - "only showing top 20 rows\n", - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
+--------------------+--------------------+--------------------+\n| geometry| calculatedArea| calculatedLength|\n+--------------------+--------------------+--------------------+\n|{6, [[[-74.184452...|7.823067885002562E-4| 0.1163574531886787|\n|{6, [[[-73.823375...|0.001422779097814599| 0.8431218810128789|\n|{6, [[[-73.847926...|3.144141568206508E-4| 0.08434110590105784|\n|{6, [[[-73.971774...| 7.94539194214528E-5| 0.03559982116907461|\n|{6, [[[-74.174217...|4.979574893632193E-4| 0.09214648985735088|\n|{6, [[[-74.063673...|4.046076598541714E-4| 0.12905753305870837|\n|{6, [[[-73.904136...|3.897879892739018...| 0.10741717112348065|\n|{6, [[[-73.923340...|2.658771690499072E-5|0.027590691195158792|\n|{6, [[[-73.785024...|3.384438031986125...| 0.0997840924710119|\n|{6, [[[-73.959536...|4.193691000471793E-5|0.034022318280805826|\n|{6, [[[-73.783266...|4.358238180810105...| 0.09983947941552027|\n|{6, [[[-74.001098...|2.029913532381591E-4| 0.07243934539937844|\n|{6, [[[-74.015657...|1.078595394871048...| 0.01759380786230351|\n|{6, [[[-74.012441...|4.874002713725957E-5| 0.04726120195723124|\n|{6, [[[-73.885139...|1.488501639473639E-4| 0.06979954985700013|\n|{6, [[[-73.981552...|1.241682673558662...| 0.04714581993191898|\n|{6, [[[-74.034073...|6.636590898190788E-4| 0.13622530962992194|\n|{6, [[[-73.777403...|4.588438269978550...| 0.1295148763926726|\n|{6, [[[-73.992549...|4.613649657988681...| 0.11844001178496774|\n|{6, [[[-74.195686...|0.002090822778761513| 0.3007595308122533|\n+--------------------+--------------------+--------------------+\nonly showing top 20 rows\n\n
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "from mosaic import st_area, st_length\n", - "(\n", - " geoJsonDF\n", - " .withColumn(\"calculatedArea\", abs(st_area(\"geometry\")))\n", - " .withColumn(\"calculatedLength\", st_length(\"geometry\"))\n", - " .select(\"geometry\", \"calculatedArea\", \"calculatedLength\")\n", - ").show()" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "920599a2-6c52-40e4-8547-a99f757406a6", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
Out[12]: 263
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
Out[12]: 263
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "geoJsonDF.count()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "e0d34f66-7498-4a86-9dd3-b2664ebc535c", - "showTitle": false, - "title": "" - } - }, - "source": [ - "## Example point-in-poly with indexing" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "cb687786-0494-468d-b2e4-dbe847ea887b", - "showTitle": false, - "title": "" - } - }, - "source": [ - "Mosaic has built-in support for the popular spatial indexing library, H3. The user has access to functions for generating point indices and the sets of indices covering polygons, allowing point-in-polygon joins to be transformed into deterministic SQL joins." - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "0ef8a536-fda8-4a9a-a2e6-58ad0c39cc8b", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+------------------+------------------+\n", - "vendor_id| pickup_datetime| dropoff_datetime|passenger_count|trip_distance|pickup_longitude|pickup_latitude|rate_code_id|dropoff_longitude|dropoff_latitude|fare_amount|extra|mta_tax|tip_amount|tolls_amount|total_amount| pickup_geom| dropoff_geom| bounds| pickup_h3| dropoff_h3|\n", - "+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+------------------+------------------+\n", - " CMT|2009-10-12 19:35:21|2009-10-12 19:44:36| 1| 1.4| -74.000018| 40.720534| null| -73.995008| 40.734112| 6.5| 0.0| null| 0.0| 0.0| 6.5|{1, [[[-74.000018...|{1, [[[-73.995008...|{5, [[[-80.0, 35....|622236750705885183|622236723432488959|\n", - " CMT|2010-09-02 07:37:40|2010-09-02 07:53:17| 1| 6.8| -74.016477| 40.70971| 1| -73.97509| 40.759392| 17.3| 0.0| 0.5| 1.0| 0.0| 18.8|{1, [[[-74.016477...|{1, [[[-73.97509,...|{5, [[[-80.0, 35....|622236750651359231|622236723493961727|\n", - " CMT|2009-11-28 13:00:00|2009-11-28 13:01:57| 1| 0.5| -73.999666| 40.733384| null| -73.991751| 40.730273| 3.3| 0.0| 0.5| 0.0| 0.0| 3.8|{1, [[[-73.999666...|{1, [[[-73.991751...|{5, [[[-80.0, 35....|622236723433046015|622236750715092991|\n", - " CMT|2009-11-30 07:49:13|2009-11-30 08:12:38| 1| 12.9| -74.007033| 40.734931| null| -73.87277| 40.774319| 29.7| 0.0| 0.5| 6.04| 0.0| 36.24|{1, [[[-74.007033...|{1, [[[-73.87277,...|{5, [[[-80.0, 35....|622236750719975423|622236724015759359|\n", - " VTS|2009-01-03 01:55:00|2009-01-03 02:04:00| 5| 2.09| -73.993217| 40.72416| null| -73.9944| 40.74624| 7.7| 0.5| null| 0.0| 0.0| 8.2|{1, [[[-73.993217...|{1, [[[-73.9944, ...|{5, [[[-80.0, 35....|622236750717878271|622236723431276543|\n", - " VTS|2009-11-09 17:21:00|2009-11-09 17:32:00| 1| 5.19| -74.010003| 40.707022| null| -73.963853| 40.75677| 13.3| 1.0| 0.5| 0.0| 0.0| 14.8|{1, [[[-74.010003...|{1, [[[-73.963853...|{5, [[[-80.0, 35....|622236750647689215|622236723504381951|\n", - " VTS|2010-06-09 01:13:00|2010-06-09 01:27:00| 1| 8.09| -74.008697| 40.707335| 1| -73.949605| 40.78761| 19.7| 0.5| 0.5| 0.0| 0.0| 20.7|{1, [[[-74.008697...|{1, [[[-73.949605...|{5, [[[-80.0, 35....|622236750647820287|622236722210668543|\n", - " VTS|2009-01-28 18:36:00|2009-01-28 18:50:00| 1| 2.92| -74.008823| 40.72089| null| -73.994055| 40.747588| 10.1| 1.0| null| 3.0| 0.0| 14.1|{1, [[[-74.008823...|{1, [[[-73.994055...|{5, [[[-80.0, 35....|622236750713159679|622236723439304703|\n", - " CMT|2010-06-02 14:21:05|2010-06-02 14:28:43| 1| 5.0| -74.011653| 40.702604| 1| -73.971851| 40.749807| 12.5| 0.0| 0.5| 2.6| 0.0| 15.6|{1, [[[-74.011653...|{1, [[[-73.971851...|{5, [[[-80.0, 35....|622236750639857663|622236723496026111|\n", - " VTS|2009-11-26 15:38:00|2009-11-26 15:47:00| 5| 2.36| -73.997208| 40.722108| null| -73.99647| 40.748185| 8.1| 0.0| 0.5| 2.0| 0.0| 10.6|{1, [[[-73.997208...|{1, [[[-73.99647,...|{5, [[[-80.0, 35....|622236750706966527|622236723431309311|\n", - " CMT|2009-12-07 10:36:06|2009-12-07 10:42:26| 1| 1.3| -73.99067| 40.73065| null| -73.975539| 40.741353| 6.1| 0.0| 0.5| 0.0| 0.0| 6.6|{1, [[[-73.99067,...|{1, [[[-73.975539...|{5, [[[-80.0, 35....|622236750715092991|622236723437502463|\n", - " CMT|2009-11-15 09:11:42|2009-11-15 09:26:34| 1| 3.7| -73.990065| 40.687341| null| -73.999566| 40.730219| 12.1| 0.0| 0.5| 0.0| 0.0| 12.6|{1, [[[-73.990065...|{1, [[[-73.999566...|{5, [[[-80.0, 35....|622236750667481087|622236750719549439|\n", - " CMT|2010-06-27 17:27:25|2010-06-27 17:47:44| 2| 5.0| -74.008459| 40.712233| 1| -73.9516| 40.718877| 15.7| 0.0| 0.5| 3.0| 0.0| 19.2|{1, [[[-74.008459...|{1, [[[-73.9516, ...|{5, [[[-80.0, 35....|622236750648639487|622236723415482367|\n", - " VTS|2009-01-30 21:05:00|2009-01-30 21:34:00| 1| 5.99| -73.994397| 40.694843| null| -73.921257| 40.685107| 18.9| 0.5| null| 0.6| 0.0| 20.0|{1, [[[-73.994397...|{1, [[[-73.921257...|{5, [[[-80.0, 35....|622236750665449471|622236723618283519|\n", - " CMT|2009-01-14 07:43:53|2009-01-14 07:55:14| 2| 2.9| -74.007602| 40.725098| null| -73.977846| 40.751608| 9.3| 0.0| null| 0.0| 0.0| 9.3|{1, [[[-74.007602...|{1, [[[-73.977846...|{5, [[[-80.0, 35....|622236750711291903|622236723435503615|\n", - " VTS|2010-05-11 16:33:00|2010-05-11 16:41:00| 1| 0.99| -74.011205| 40.715468| 1| -74.011072| 40.708882| 5.7| 1.0| 0.5| 0.0| 0.0| 7.2|{1, [[[-74.011205...|{1, [[[-74.011072...|{5, [[[-80.0, 35....|622236750712831999|622236750647459839|\n", - " VTS|2009-01-19 09:43:00|2009-01-19 09:47:00| 1| 0.56| -73.991123| 40.731297| null| -73.98681| 40.736703| 4.1| 0.0| null| 0.0| 0.0| 4.1|{1, [[[-73.991123...|{1, [[[-73.98681,...|{5, [[[-80.0, 35....|622236750715060223|622236723429539839|\n", - " CMT|2009-11-14 15:46:36|2009-11-14 15:51:01| 2| 1.2| -74.008448| 40.734271| null| -74.006075| 40.720237| 4.9| 0.0| 0.5| 0.0| 0.0| 5.4|{1, [[[-74.008448...|{1, [[[-74.006075...|{5, [[[-80.0, 35....|622236750719844351|622236750713126911|\n", - " CMT|2009-11-17 16:50:35|2009-11-17 17:01:34| 1| 1.6| -74.00679| 40.730546| null| -73.9904| 40.73815| 7.7| 1.0| 0.5| 1.5| 0.0| 10.7|{1, [[[-74.00679,...|{1, [[[-73.9904, ...|{5, [[[-80.0, 35....|622236750718894079|622236723426754559|\n", - " CMT|2009-11-30 23:30:43|2009-11-30 23:42:54| 2| 2.9| -74.009605| 40.710155| null| -73.993875| 40.741554| 10.1| 0.5| 0.5| 2.22| 0.0| 13.32|{1, [[[-74.009605...|{1, [[[-73.993875...|{5, [[[-80.0, 35....|622236750646968319|622236723430490111|\n", - "+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+------------------+------------------+\n", - "only showing top 20 rows\n", - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+------------------+------------------+\n|vendor_id| pickup_datetime| dropoff_datetime|passenger_count|trip_distance|pickup_longitude|pickup_latitude|rate_code_id|dropoff_longitude|dropoff_latitude|fare_amount|extra|mta_tax|tip_amount|tolls_amount|total_amount| pickup_geom| dropoff_geom| bounds| pickup_h3| dropoff_h3|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+------------------+------------------+\n| CMT|2009-10-12 19:35:21|2009-10-12 19:44:36| 1| 1.4| -74.000018| 40.720534| null| -73.995008| 40.734112| 6.5| 0.0| null| 0.0| 0.0| 6.5|{1, [[[-74.000018...|{1, [[[-73.995008...|{5, [[[-80.0, 35....|622236750705885183|622236723432488959|\n| CMT|2010-09-02 07:37:40|2010-09-02 07:53:17| 1| 6.8| -74.016477| 40.70971| 1| -73.97509| 40.759392| 17.3| 0.0| 0.5| 1.0| 0.0| 18.8|{1, [[[-74.016477...|{1, [[[-73.97509,...|{5, [[[-80.0, 35....|622236750651359231|622236723493961727|\n| CMT|2009-11-28 13:00:00|2009-11-28 13:01:57| 1| 0.5| -73.999666| 40.733384| null| -73.991751| 40.730273| 3.3| 0.0| 0.5| 0.0| 0.0| 3.8|{1, [[[-73.999666...|{1, [[[-73.991751...|{5, [[[-80.0, 35....|622236723433046015|622236750715092991|\n| CMT|2009-11-30 07:49:13|2009-11-30 08:12:38| 1| 12.9| -74.007033| 40.734931| null| -73.87277| 40.774319| 29.7| 0.0| 0.5| 6.04| 0.0| 36.24|{1, [[[-74.007033...|{1, [[[-73.87277,...|{5, [[[-80.0, 35....|622236750719975423|622236724015759359|\n| VTS|2009-01-03 01:55:00|2009-01-03 02:04:00| 5| 2.09| -73.993217| 40.72416| null| -73.9944| 40.74624| 7.7| 0.5| null| 0.0| 0.0| 8.2|{1, [[[-73.993217...|{1, [[[-73.9944, ...|{5, [[[-80.0, 35....|622236750717878271|622236723431276543|\n| VTS|2009-11-09 17:21:00|2009-11-09 17:32:00| 1| 5.19| -74.010003| 40.707022| null| -73.963853| 40.75677| 13.3| 1.0| 0.5| 0.0| 0.0| 14.8|{1, [[[-74.010003...|{1, [[[-73.963853...|{5, [[[-80.0, 35....|622236750647689215|622236723504381951|\n| VTS|2010-06-09 01:13:00|2010-06-09 01:27:00| 1| 8.09| -74.008697| 40.707335| 1| -73.949605| 40.78761| 19.7| 0.5| 0.5| 0.0| 0.0| 20.7|{1, [[[-74.008697...|{1, [[[-73.949605...|{5, [[[-80.0, 35....|622236750647820287|622236722210668543|\n| VTS|2009-01-28 18:36:00|2009-01-28 18:50:00| 1| 2.92| -74.008823| 40.72089| null| -73.994055| 40.747588| 10.1| 1.0| null| 3.0| 0.0| 14.1|{1, [[[-74.008823...|{1, [[[-73.994055...|{5, [[[-80.0, 35....|622236750713159679|622236723439304703|\n| CMT|2010-06-02 14:21:05|2010-06-02 14:28:43| 1| 5.0| -74.011653| 40.702604| 1| -73.971851| 40.749807| 12.5| 0.0| 0.5| 2.6| 0.0| 15.6|{1, [[[-74.011653...|{1, [[[-73.971851...|{5, [[[-80.0, 35....|622236750639857663|622236723496026111|\n| VTS|2009-11-26 15:38:00|2009-11-26 15:47:00| 5| 2.36| -73.997208| 40.722108| null| -73.99647| 40.748185| 8.1| 0.0| 0.5| 2.0| 0.0| 10.6|{1, [[[-73.997208...|{1, [[[-73.99647,...|{5, [[[-80.0, 35....|622236750706966527|622236723431309311|\n| CMT|2009-12-07 10:36:06|2009-12-07 10:42:26| 1| 1.3| -73.99067| 40.73065| null| -73.975539| 40.741353| 6.1| 0.0| 0.5| 0.0| 0.0| 6.6|{1, [[[-73.99067,...|{1, [[[-73.975539...|{5, [[[-80.0, 35....|622236750715092991|622236723437502463|\n| CMT|2009-11-15 09:11:42|2009-11-15 09:26:34| 1| 3.7| -73.990065| 40.687341| null| -73.999566| 40.730219| 12.1| 0.0| 0.5| 0.0| 0.0| 12.6|{1, [[[-73.990065...|{1, [[[-73.999566...|{5, [[[-80.0, 35....|622236750667481087|622236750719549439|\n| CMT|2010-06-27 17:27:25|2010-06-27 17:47:44| 2| 5.0| -74.008459| 40.712233| 1| -73.9516| 40.718877| 15.7| 0.0| 0.5| 3.0| 0.0| 19.2|{1, [[[-74.008459...|{1, [[[-73.9516, ...|{5, [[[-80.0, 35....|622236750648639487|622236723415482367|\n| VTS|2009-01-30 21:05:00|2009-01-30 21:34:00| 1| 5.99| -73.994397| 40.694843| null| -73.921257| 40.685107| 18.9| 0.5| null| 0.6| 0.0| 20.0|{1, [[[-73.994397...|{1, [[[-73.921257...|{5, [[[-80.0, 35....|622236750665449471|622236723618283519|\n| CMT|2009-01-14 07:43:53|2009-01-14 07:55:14| 2| 2.9| -74.007602| 40.725098| null| -73.977846| 40.751608| 9.3| 0.0| null| 0.0| 0.0| 9.3|{1, [[[-74.007602...|{1, [[[-73.977846...|{5, [[[-80.0, 35....|622236750711291903|622236723435503615|\n| VTS|2010-05-11 16:33:00|2010-05-11 16:41:00| 1| 0.99| -74.011205| 40.715468| 1| -74.011072| 40.708882| 5.7| 1.0| 0.5| 0.0| 0.0| 7.2|{1, [[[-74.011205...|{1, [[[-74.011072...|{5, [[[-80.0, 35....|622236750712831999|622236750647459839|\n| VTS|2009-01-19 09:43:00|2009-01-19 09:47:00| 1| 0.56| -73.991123| 40.731297| null| -73.98681| 40.736703| 4.1| 0.0| null| 0.0| 0.0| 4.1|{1, [[[-73.991123...|{1, [[[-73.98681,...|{5, [[[-80.0, 35....|622236750715060223|622236723429539839|\n| CMT|2009-11-14 15:46:36|2009-11-14 15:51:01| 2| 1.2| -74.008448| 40.734271| null| -74.006075| 40.720237| 4.9| 0.0| 0.5| 0.0| 0.0| 5.4|{1, [[[-74.008448...|{1, [[[-74.006075...|{5, [[[-80.0, 35....|622236750719844351|622236750713126911|\n| CMT|2009-11-17 16:50:35|2009-11-17 17:01:34| 1| 1.6| -74.00679| 40.730546| null| -73.9904| 40.73815| 7.7| 1.0| 0.5| 1.5| 0.0| 10.7|{1, [[[-74.00679,...|{1, [[[-73.9904, ...|{5, [[[-80.0, 35....|622236750718894079|622236723426754559|\n| CMT|2009-11-30 23:30:43|2009-11-30 23:42:54| 2| 2.9| -74.009605| 40.710155| null| -73.993875| 40.741554| 10.1| 0.5| 0.5| 2.22| 0.0| 13.32|{1, [[[-74.009605...|{1, [[[-73.993875...|{5, [[[-80.0, 35....|622236750646968319|622236723430490111|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+------------------+------------------+\nonly showing top 20 rows\n\n
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "from mosaic import grid_longlatascellid\n", - "\n", - "trips_with_geom = (\n", - " trips\n", - " .withColumn(\"pickup_h3\", grid_longlatascellid(lon=\"pickup_longitude\", lat=\"pickup_latitude\", resolution=lit(10)))\n", - " .withColumn(\"dropoff_h3\", grid_longlatascellid(lon=\"dropoff_longitude\", lat=\"dropoff_latitude\", resolution=lit(10)))\n", - ")\n", - "\n", - "trips_with_geom.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "21627a45-71e0-4286-907b-94de6f04ec43", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
+-------------+-----------+--------+---------------+------------------+\n", - " borough|location_id|objectid| zone| h3|\n", - "+-------------+-----------+--------+---------------+------------------+\n", - "Staten Island| 99| 99|Freshkills Park|622236745731309567|\n", - "Staten Island| 99| 99|Freshkills Park|622236745690841087|\n", - "Staten Island| 99| 99|Freshkills Park|622236745723674623|\n", - "Staten Island| 99| 99|Freshkills Park|622236745683206143|\n", - "Staten Island| 99| 99|Freshkills Park|622236745691987967|\n", - "Staten Island| 99| 99|Freshkills Park|622236745684353023|\n", - "Staten Island| 99| 99|Freshkills Park|622236745733603327|\n", - "Staten Island| 99| 99|Freshkills Park|622236745725968383|\n", - "Staten Island| 99| 99|Freshkills Park|622236745701916671|\n", - "Staten Island| 99| 99|Freshkills Park|622236745734750207|\n", - "Staten Island| 99| 99|Freshkills Park|622236745694281727|\n", - "Staten Island| 99| 99|Freshkills Park|622236745703063551|\n", - "Staten Island| 99| 99|Freshkills Park|622236745679011839|\n", - "Staten Island| 99| 99|Freshkills Park|622236745761095679|\n", - "Staten Island| 99| 99|Freshkills Park|622236745680158719|\n", - "Staten Island| 99| 99|Freshkills Park|622236745696575487|\n", - "Staten Island| 99| 99|Freshkills Park|622236745762242559|\n", - "Staten Island| 99| 99|Freshkills Park|622236745681305599|\n", - "Staten Island| 99| 99|Freshkills Park|622236745730555903|\n", - "Staten Island| 99| 99|Freshkills Park|622236745690087423|\n", - "+-------------+-----------+--------+---------------+------------------+\n", - "only showing top 20 rows\n", - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
+-------------+-----------+--------+---------------+------------------+\n| borough|location_id|objectid| zone| h3|\n+-------------+-----------+--------+---------------+------------------+\n|Staten Island| 99| 99|Freshkills Park|622236745731309567|\n|Staten Island| 99| 99|Freshkills Park|622236745690841087|\n|Staten Island| 99| 99|Freshkills Park|622236745723674623|\n|Staten Island| 99| 99|Freshkills Park|622236745683206143|\n|Staten Island| 99| 99|Freshkills Park|622236745691987967|\n|Staten Island| 99| 99|Freshkills Park|622236745684353023|\n|Staten Island| 99| 99|Freshkills Park|622236745733603327|\n|Staten Island| 99| 99|Freshkills Park|622236745725968383|\n|Staten Island| 99| 99|Freshkills Park|622236745701916671|\n|Staten Island| 99| 99|Freshkills Park|622236745734750207|\n|Staten Island| 99| 99|Freshkills Park|622236745694281727|\n|Staten Island| 99| 99|Freshkills Park|622236745703063551|\n|Staten Island| 99| 99|Freshkills Park|622236745679011839|\n|Staten Island| 99| 99|Freshkills Park|622236745761095679|\n|Staten Island| 99| 99|Freshkills Park|622236745680158719|\n|Staten Island| 99| 99|Freshkills Park|622236745696575487|\n|Staten Island| 99| 99|Freshkills Park|622236745762242559|\n|Staten Island| 99| 99|Freshkills Park|622236745681305599|\n|Staten Island| 99| 99|Freshkills Park|622236745730555903|\n|Staten Island| 99| 99|Freshkills Park|622236745690087423|\n+-------------+-----------+--------+---------------+------------------+\nonly showing top 20 rows\n\n
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "from mosaic import grid_polyfill\n", - "\n", - "neighbourhoods = (\n", - " geoJsonDF\n", - " .repartition(sc.defaultParallelism)\n", - " .select(\"*\", explode(grid_polyfill(\"geometry\", lit(10))).alias(\"h3\"))\n", - " .drop(\"geometry\")\n", - ")\n", - "\n", - "neighbourhoods.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "c3e68351-52d4-4a8b-8ce6-4898dedd0ecc", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
Out[15]: 4934151
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
Out[15]: 4934151
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "joined_df = trips_with_geom.alias(\"t\").join(neighbourhoods.alias(\"n\"), on=expr(\"t.pickup_h3 = n.h3\"), how=\"inner\")\n", - "joined_df.count()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "c4fb8772-94b2-4fbe-aaf9-6e261609b009", - "showTitle": false, - "title": "" - } - }, - "source": [ - "## Mosaic spatial join optimizations" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "c7696c95-820a-434e-9535-48807e1fb27c", - "showTitle": false, - "title": "" - } - }, - "source": [ - "Mosaic provides easy access to the optimized spatial join technique described in [this](https://databricks.com/blog/2021/10/11/efficient-point-in-polygon-joins-via-pyspark-and-bng-geospatial-indexing.html) blog post." - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "1319c9ca-149c-4208-8512-f035ffff467b", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
+-------------+-----------+--------+---------------+-------+------------------+----+\n", - " borough|location_id|objectid| zone|is_core| h3| wkb|\n", - "+-------------+-----------+--------+---------------+-------+------------------+----+\n", - "Staten Island| 99| 99|Freshkills Park| true|622236745694314495|null|\n", - "Staten Island| 99| 99|Freshkills Park| true|622236745679077375|null|\n", - "Staten Island| 99| 99|Freshkills Park| true|622236745734160383|null|\n", - "Staten Island| 99| 99|Freshkills Park| true|622236745762275327|null|\n", - "Staten Island| 99| 99|Freshkills Park| true|622236745731801087|null|\n", - "Staten Island| 99| 99|Freshkills Park| true|622236745725935615|null|\n", - "Staten Island| 99| 99|Freshkills Park| true|622236745680224255|null|\n", - "Staten Island| 99| 99|Freshkills Park| true|622236745689595903|null|\n", - "Staten Island| 99| 99|Freshkills Park| true|622236745683730431|null|\n", - "Staten Island| 99| 99|Freshkills Park| true|622236745723576319|null|\n", - "Staten Island| 99| 99|Freshkills Park| true|622236745763422207|null|\n", - "Staten Island| 99| 99|Freshkills Park| true|622236745693102079|null|\n", - "Staten Island| 99| 99|Freshkills Park| true|622236745732947967|null|\n", - "Staten Island| 99| 99|Freshkills Park| true|622236745702473727|null|\n", - "Staten Island| 99| 99|Freshkills Park| true|622236745696608255|null|\n", - "Staten Island| 99| 99|Freshkills Park| true|622236745736454143|null|\n", - "Staten Island| 99| 99|Freshkills Park| true|622236745761062911|null|\n", - "Staten Island| 99| 99|Freshkills Park| true|622236745690742783|null|\n", - "Staten Island| 99| 99|Freshkills Park| true|622236745675505663|null|\n", - "Staten Island| 99| 99|Freshkills Park| true|622236745730588671|null|\n", - "+-------------+-----------+--------+---------------+-------+------------------+----+\n", - "only showing top 20 rows\n", - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
+-------------+-----------+--------+---------------+-------+------------------+----+\n| borough|location_id|objectid| zone|is_core| h3| wkb|\n+-------------+-----------+--------+---------------+-------+------------------+----+\n|Staten Island| 99| 99|Freshkills Park| true|622236745694314495|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745679077375|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745734160383|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745762275327|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745731801087|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745725935615|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745680224255|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745689595903|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745683730431|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745723576319|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745763422207|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745693102079|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745732947967|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745702473727|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745696608255|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745736454143|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745761062911|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745690742783|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745675505663|null|\n|Staten Island| 99| 99|Freshkills Park| true|622236745730588671|null|\n+-------------+-----------+--------+---------------+-------+------------------+----+\nonly showing top 20 rows\n\n
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "from mosaic import grid_tessellateexplode\n", - "\n", - "mosaic_neighbourhoods = (\n", - " geoJsonDF\n", - " .repartition(sc.defaultParallelism)\n", - " .select(\"*\", grid_tessellateexplode(\"geometry\", lit(10)))\n", - " .drop(\"geometry\")\n", - ")\n", - "\n", - "mosaic_neighbourhoods.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "ee5d5a0a-2f2f-4095-9ec8-ce3ba0af6eaa", - "showTitle": false, - "title": "" - } - }, - "source": [ - "Mosaic also includes a convenience function for displaying dataframes with geometry columns." - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "162fc850-a289-416f-af6d-2dd73f30e93e", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "
boroughlocation_idobjectidzoneis_coreh3wkb
Staten Island9999Freshkills Parktrue622236745694314495null
Staten Island9999Freshkills Parktrue622236745679077375null
Staten Island9999Freshkills Parktrue622236745734160383null
Staten Island9999Freshkills Parktrue622236745762275327null
Staten Island9999Freshkills Parktrue622236745731801087null
Staten Island9999Freshkills Parktrue622236745725935615null
Staten Island9999Freshkills Parktrue622236745680224255null
Staten Island9999Freshkills Parktrue622236745689595903null
Staten Island9999Freshkills Parktrue622236745683730431null
Staten Island9999Freshkills Parktrue622236745723576319null
Staten Island9999Freshkills Parktrue622236745763422207null
Staten Island9999Freshkills Parktrue622236745693102079null
Staten Island9999Freshkills Parktrue622236745732947967null
Staten Island9999Freshkills Parktrue622236745702473727null
Staten Island9999Freshkills Parktrue622236745696608255null
Staten Island9999Freshkills Parktrue622236745736454143null
Staten Island9999Freshkills Parktrue622236745761062911null
Staten Island9999Freshkills Parktrue622236745690742783null
Staten Island9999Freshkills Parktrue622236745675505663null
Staten Island9999Freshkills Parktrue622236745730588671null
Staten Island9999Freshkills Parktrue622236745694248959null
Staten Island9999Freshkills Parktrue622236745679011839null
Staten Island9999Freshkills Parktrue622236745734094847null
Staten Island9999Freshkills Parktrue622236745762209791null
Staten Island9999Freshkills Parktrue622236745731735551null
Staten Island9999Freshkills Parktrue622236745725870079null
Staten Island9999Freshkills Parktrue622236745680158719null
Staten Island9999Freshkills Parktrue622236745689530367null
Staten Island9999Freshkills Parktrue622236745683664895null
Staten Island9999Freshkills Parktrue622236745763356671null
Staten Island9999Freshkills Parktrue622236745693036543null
Staten Island9999Freshkills Parktrue622236745732882431null
Staten Island9999Freshkills Parktrue622236745702408191null
Staten Island9999Freshkills Parktrue622236745681305599null
Staten Island9999Freshkills Parktrue622236745760997375null
Staten Island9999Freshkills Parktrue622236745675440127null
Staten Island9999Freshkills Parktrue622236745730523135null
Staten Island9999Freshkills Parktrue622236745703555071null
Staten Island9999Freshkills Parktrue622236745762144255null
Staten Island9999Freshkills Parktrue622236745725804543null
Staten Island9999Freshkills Parktrue622236745680093183null
Staten Island9999Freshkills Parktrue622236745683599359null
Staten Island9999Freshkills Parktrue622236745763291135null
Staten Island9999Freshkills Parktrue622236745692971007null
Staten Island9999Freshkills Parktrue622236745732816895null
Staten Island9999Freshkills Parktrue622236745913303039null
Staten Island9999Freshkills Parktrue622236745702342655null
Staten Island9999Freshkills Parktrue622236745681240063null
Staten Island9999Freshkills Parktrue622236745690611711null
Staten Island9999Freshkills Parktrue622236745675374591null
Staten Island9999Freshkills Parktrue622236745694117887null
Staten Island9999Freshkills Parktrue622236745733963775null
Staten Island9999Freshkills Parktrue622236745703489535null
Staten Island9999Freshkills Parktrue622236745731604479null
Staten Island9999Freshkills Parktrue622236745689399295null
Staten Island9999Freshkills Parktrue622236745683533823null
Staten Island9999Freshkills Parktrue622236745763225599null
Staten Island9999Freshkills Parktrue622236745692905471null
Staten Island9999Freshkills Parktrue622236745732751359null
Staten Island9999Freshkills Parktrue622236745913237503null
Staten Island9999Freshkills Parktrue622236745702277119null
Staten Island9999Freshkills Parktrue622236745742123007null
Staten Island9999Freshkills Parktrue622236745681174527null
Staten Island9999Freshkills Parktrue622236745760866303null
Staten Island9999Freshkills Parktrue622236745730392063null
Staten Island9999Freshkills Parktrue622236745684680703null
Staten Island9999Freshkills Parktrue622236745724526591null
Staten Island9999Freshkills Parktrue622236745764372479null
Staten Island9999Freshkills Parktrue622236745694052351null
Staten Island9999Freshkills Parktrue622236745733898239null
Staten Island9999Freshkills Parktrue622236745703423999null
Staten Island9999Freshkills Parktrue622236745682321407null
Staten Island9999Freshkills Parktrue622236745731538943null
Staten Island9999Freshkills Parktrue622236745725673471null
Staten Island9999Freshkills Parktrue622236745695199231null
Staten Island9999Freshkills Parktrue622236745735045119null
Staten Island9999Freshkills Parktrue622236745689333759null
Staten Island9999Freshkills Parktrue622236745683468287null
Staten Island9999Freshkills Parktrue622236745763160063null
Staten Island9999Freshkills Parktrue622236745732685823null
Staten Island9999Freshkills Parktrue622236745702211583null
Staten Island9999Freshkills Parktrue622236745742057471null
Staten Island9999Freshkills Parktrue622236745681108991null
Staten Island9999Freshkills Parktrue622236745760800767null
Staten Island9999Freshkills Parktrue622236745690480639null
Staten Island9999Freshkills Parktrue622236745675243519null
Staten Island9999Freshkills Parktrue622236745684615167null
Staten Island9999Freshkills Parktrue622236745764306943null
Staten Island9999Freshkills Parktrue622236745693986815null
Staten Island9999Freshkills Parktrue622236745733832703null
Staten Island9999Freshkills Parktrue622236745672884223null
Staten Island9999Freshkills Parktrue622236745682255871null
Staten Island9999Freshkills Parktrue622236746168631295null
Staten Island9999Freshkills Parktrue622236745761947647null
Staten Island9999Freshkills Parktrue622236745731473407null
Staten Island9999Freshkills Parktrue622236745725607935null
Staten Island9999Freshkills Parktrue622236745695133695null
Staten Island9999Freshkills Parktrue622236745734979583null
Staten Island9999Freshkills Parktrue622236745689268223null
Staten Island9999Freshkills Parktrue622236745683402751null
Staten Island9999Freshkills Parktrue622236745723248639null
Staten Island9999Freshkills Parktrue622236745732620287null
Staten Island9999Freshkills Parktrue622236745702146047null
Staten Island9999Freshkills Parktrue622236745741991935null
Staten Island9999Freshkills Parktrue622236745760735231null
Staten Island9999Freshkills Parktrue622236745690415103null
Staten Island9999Freshkills Parktrue622236745675177983null
Staten Island9999Freshkills Parktrue622236745684549631null
Staten Island9999Freshkills Parktrue622236745724395519null
Staten Island9999Freshkills Parktrue622236745764241407null
Staten Island9999Freshkills Parktrue622236745703292927null
Staten Island9999Freshkills Parktrue622236745682190335null
Staten Island9999Freshkills Parktrue622236746168565759null
Staten Island9999Freshkills Parktrue622236745676324863null
Staten Island9999Freshkills Parktrue622236745725542399null
Staten Island9999Freshkills Parktrue622236745695068159null
Staten Island9999Freshkills Parktrue622236745734914047null
Staten Island9999Freshkills Parktrue622236745683337215null
Staten Island9999Freshkills Parktrue622236745723183103null
Staten Island9999Freshkills Parktrue622236745732554751null
Staten Island9999Freshkills Parktrue622236745702080511null
Staten Island9999Freshkills Parktrue622236745741926399null
Staten Island9999Freshkills Parktrue622236745760669695null
Staten Island9999Freshkills Parktrue622236745690349567null
Staten Island9999Freshkills Parktrue622236745675112447null
Staten Island9999Freshkills Parktrue622236745693855743null
Staten Island9999Freshkills Parktrue622236745703227391null
Staten Island9999Freshkills Parktrue622236745743073279null
Staten Island9999Freshkills Parktrue622236745672753151null
Staten Island9999Freshkills Parktrue622236746168500223null
Staten Island9999Freshkills Parktrue622236745676259327null
Staten Island9999Freshkills Parktrue622236745731342335null
Staten Island9999Freshkills Parktrue622236745725476863null
Staten Island9999Freshkills Parktrue622236745695002623null
Staten Island9999Freshkills Parktrue622236745734848511null
Staten Island9999Freshkills Parktrue622236745673900031null
Staten Island9999Freshkills Parktrue622236745683271679null
Staten Island9999Freshkills Parktrue622236745723117567null
Staten Island9999Freshkills Parktrue622236745732489215null
Staten Island9999Freshkills Parktrue622236745702014975null
Staten Island9999Freshkills Parktrue622236745741860863null
Staten Island9999Freshkills Parktrue622236745726623743null
Staten Island9999Freshkills Parktrue622236745760604159null
Staten Island9999Freshkills Parktrue622236745690284031null
Staten Island9999Freshkills Parktrue622236745684418559null
Staten Island9999Freshkills Parktrue622236745724264447null
Staten Island9999Freshkills Parktrue622236745693790207null
Staten Island9999Freshkills Parktrue622236745733636095null
Staten Island9999Freshkills Parktrue622236745703161855null
Staten Island9999Freshkills Parktrue622236745743007743null
Staten Island9999Freshkills Parktrue622236745697296383null
Staten Island9999Freshkills Parktrue622236746168434687null
Staten Island9999Freshkills Parktrue622236745676193791null
Staten Island9999Freshkills Parktrue622236745731276799null
Staten Island9999Freshkills Parktrue622236745725411327null
Staten Island9999Freshkills Parktrue622236745694937087null
Staten Island9999Freshkills Parktrue622236745679699967null
Staten Island9999Freshkills Parktrue622236745734782975null
Staten Island9999Freshkills Parktrue622236745683206143null
Staten Island9999Freshkills Parktrue622236745723052031null
Staten Island9999Freshkills Parktrue622236745692577791null
Staten Island9999Freshkills Parktrue622236745732423679null
Staten Island9999Freshkills Parktrue622236745701949439null
Staten Island9999Freshkills Parktrue622236745741795327null
Staten Island9999Freshkills Parktrue622236745726558207null
Staten Island9999Freshkills Parktrue622236745760538623null
Staten Island9999Freshkills Parktrue622236745690218495null
Staten Island9999Freshkills Parktrue622236745674981375null
Staten Island9999Freshkills Parktrue622236745684353023null
Staten Island9999Freshkills Parktrue622236745724198911null
Staten Island9999Freshkills Parktrue622236745693724671null
Staten Island9999Freshkills Parktrue622236745697230847null
Staten Island9999Freshkills Parktrue622236745761685503null
Staten Island9999Freshkills Parktrue622236745676128255null
Staten Island9999Freshkills Parktrue622236745731211263null
Staten Island9999Freshkills Parktrue622236745725345791null
Staten Island9999Freshkills Parktrue622236745694871551null
Staten Island9999Freshkills Parktrue622236745734717439null
Staten Island9999Freshkills Parktrue622236745683140607null
Staten Island9999Freshkills Parktrue622236745722986495null
Staten Island9999Freshkills Parktrue622236745732358143null
Staten Island9999Freshkills Parktrue622236745701883903null
Staten Island9999Freshkills Parktrue622236745741729791null
Staten Island9999Freshkills Parktrue622236745726492671null
Staten Island9999Freshkills Parktrue622236745690152959null
Staten Island9999Freshkills Parktrue622236745674915839null
Staten Island9999Freshkills Parktrue622236745684287487null
Staten Island9999Freshkills Parktrue622236745724133375null
Staten Island9999Freshkills Parktrue622236745703030783null
Staten Island9999Freshkills Parktrue622236745697165311null
Staten Island9999Freshkills Parktrue622236745761619967null
Staten Island9999Freshkills Parktrue622236745676062719null
Staten Island9999Freshkills Parktrue622236745725280255null
Staten Island9999Freshkills Parktrue622236745694806015null
Staten Island9999Freshkills Parktrue622236745734651903null
Staten Island9999Freshkills Parktrue622236745683075071null
Staten Island9999Freshkills Parktrue622236745722920959null
Staten Island9999Freshkills Parktrue622236745692446719null
Staten Island9999Freshkills Parktrue622236745732292607null
Staten Island9999Freshkills Parktrue622236745701818367null
Staten Island9999Freshkills Parktrue622236745741664255null
Staten Island9999Freshkills Parktrue622236745735798783null
Staten Island9999Freshkills Parktrue622236745690087423null
Staten Island9999Freshkills Parktrue622236745674850303null
Staten Island9999Freshkills Parktrue622236745693593599null
Staten Island9999Freshkills Parktrue622236745733439487null
Staten Island9999Freshkills Parktrue622236745702965247null
Staten Island9999Freshkills Parktrue622236745742811135null
Staten Island9999Freshkills Parktrue622236745697099775null
Staten Island9999Freshkills Parktrue622236745675997183null
Staten Island9999Freshkills Parktrue622236745725214719null
Staten Island9999Freshkills Parktrue622236745694740479null
Staten Island9999Freshkills Parktrue622236745734586367null
Staten Island9999Freshkills Parktrue622236745698246655null
Staten Island9999Freshkills Parktrue622236745683009535null
Staten Island9999Freshkills Parktrue622236745722855423null
Staten Island9999Freshkills Parktrue622236745762701311null
Staten Island9999Freshkills Parktrue622236745732227071null
Staten Island9999Freshkills Parktrue622236745726361599null
Staten Island9999Freshkills Parktrue622236745735733247null
Staten Island9999Freshkills Parktrue622236745690021887null
Staten Island9999Freshkills Parktrue622236745684156415null
Staten Island9999Freshkills Parktrue622236745724002303null
Staten Island9999Freshkills Parktrue622236745693528063null
Staten Island9999Freshkills Parktrue622236745733373951null
Staten Island9999Freshkills Parktrue622236745702899711null
Staten Island9999Freshkills Parktrue622236745742745599null
Staten Island9999Freshkills Parktrue622236745697034239null
Staten Island9999Freshkills Parktrue622236745681797119null
Staten Island9999Freshkills Parktrue622236745736880127null
Staten Island9999Freshkills Parktrue622236745761488895null
Staten Island9999Freshkills Parktrue622236745675931647null
Staten Island9999Freshkills Parktrue622236745725149183null
Staten Island9999Freshkills Parktrue622236745694674943null
Staten Island9999Freshkills Parktrue622236745734520831null
Staten Island9999Freshkills Parktrue622236745682943999null
Staten Island9999Freshkills Parktrue622236745722789887null
Staten Island9999Freshkills Parktrue622236745732161535null
Staten Island9999Freshkills Parktrue622236745726296063null
Staten Island9999Freshkills Parktrue622236745735667711null
Staten Island9999Freshkills Parktrue622236745689956351null
Staten Island9999Freshkills Parktrue622236745674719231null
Staten Island9999Freshkills Parktrue622236745684090879null
Staten Island9999Freshkills Parktrue622236745723936767null
Staten Island9999Freshkills Parktrue622236745693462527null
Staten Island9999Freshkills Parktrue622236745733308415null
Staten Island9999Freshkills Parktrue622236745696968703null
Staten Island9999Freshkills Parktrue622236745736814591null
Staten Island9999Freshkills Parktrue622236745761423359null
Staten Island9999Freshkills Parktrue622236745675866111null
Staten Island9999Freshkills Parktrue622236745725083647null
Staten Island9999Freshkills Parktrue622236745694609407null
Staten Island9999Freshkills Parktrue622236745734455295null
Staten Island9999Freshkills Parktrue622236745732095999null
Staten Island9999Freshkills Parktrue622236745726230527null
Staten Island9999Freshkills Parktrue622236745689890815null
Staten Island9999Freshkills Parktrue622236745674653695null
Staten Island9999Freshkills Parktrue622236745684025343null
Staten Island9999Freshkills Parktrue622236745723871231null
Staten Island9999Freshkills Parktrue622236745702768639null
Staten Island9999Freshkills Parktrue622236745742614527null
Staten Island9999Freshkills Parktrue622236745681666047null
Staten Island9999Freshkills Parktrue622236745736749055null
Staten Island9999Freshkills Parktrue622236745761357823null
Staten Island9999Freshkills Parktrue622236745675800575null
Staten Island9999Freshkills Parktrue622236745725018111null
Staten Island9999Freshkills Parktrue622236745694543871null
Staten Island9999Freshkills Parktrue622236745734389759null
Staten Island9999Freshkills Parktrue622236745732030463null
Staten Island9999Freshkills Parktrue622236745689825279null
Staten Island9999Freshkills Parktrue622236745674588159null
Staten Island9999Freshkills Parktrue622236745702703103null
Staten Island9999Freshkills Parktrue622236745742548991null
Staten Island9999Freshkills Parktrue622236745736683519null
Staten Island9999Freshkills Parktrue622236745690972159null
Staten Island9999Freshkills Parktrue622236745675735039null
Staten Island9999Freshkills Parktrue622236745724952575null
Staten Island9999Freshkills Parktrue622236745694478335null
Staten Island9999Freshkills Parktrue622236745734324223null
Staten Island9999Freshkills Parktrue622236745731964927null
Staten Island9999Freshkills Parktrue622236745726099455null
Staten Island9999Freshkills Parktrue622236745689759743null
Staten Island9999Freshkills Parktrue622236745683894271null
Staten Island9999Freshkills Parktrue622236745723740159null
Staten Island9999Freshkills Parktrue622236745702637567null
Staten Island9999Freshkills Parktrue622236745742483455null
Staten Island9999Freshkills Parktrue622236745696772095null
Staten Island9999Freshkills Parktrue622236745761226751null
Staten Island9999Freshkills Parktrue622236745690906623null
Staten Island9999Freshkills Parktrue622236745675669503null
Staten Island9999Freshkills Parktrue622236745724887039null
Staten Island9999Freshkills Parktrue622236745694412799null
Staten Island9999Freshkills Parktrue622236745679175679null
Staten Island9999Freshkills Parktrue622236745734258687null
Staten Island9999Freshkills Parktrue622236745731899391null
Staten Island9999Freshkills Parktrue622236745726033919null
Staten Island9999Freshkills Parktrue622236745689694207null
Staten Island9999Freshkills Parktrue622236745683828735null
Staten Island9999Freshkills Parktrue622236745723674623null
Staten Island9999Freshkills Parktrue622236745763520511null
Staten Island9999Freshkills Parktrue622236745696706559null
Staten Island9999Freshkills Parktrue622236745761161215null
Staten Island9999Freshkills Parktrue622236745690841087null
Staten Island9999Freshkills Parktrue622236745675603967null
Staten Island9999Freshkills Parktrue622236745694347263null
Staten Island9999Freshkills Parktrue622236745679110143null
Staten Island9999Freshkills Parktrue622236745734193151null
Staten Island9999Freshkills Parktrue622236745762308095null
Staten Island9999Freshkills Parktrue622236745731833855null
Staten Island9999Freshkills Parktrue622236745725968383null
Staten Island9999Freshkills Parktrue622236745689628671null
Staten Island9999Freshkills Parktrue622236745729474559null
Staten Island9999Freshkills Parktrue622236745683763199null
Staten Island9999Freshkills Parktrue622236745723609087null
Staten Island9999Freshkills Parktrue622236745763454975null
Staten Island9999Freshkills Parktrue622236745702506495null
Staten Island9999Freshkills Parktrue622236745742352383null
Staten Island9999Freshkills Parktrue622236745696641023null
Staten Island9999Freshkills Parktrue622236745761095679null
Staten Island9999Freshkills Parktrue622236745675538431null
Staten Island9999Freshkills Parktrue622236745694281727null
Staten Island9999Freshkills Parktrue622236745679044607null
Staten Island9999Freshkills Parktrue622236745734127615null
Staten Island9999Freshkills Parktrue622236745762242559null
Staten Island9999Freshkills Parktrue622236745731768319null
Staten Island9999Freshkills Parktrue622236745680191487null
Staten Island9999Freshkills Parktrue622236745689563135null
Staten Island9999Freshkills Parktrue622236745693069311null
Staten Island9999Freshkills Parktrue622236745732915199null
Staten Island9999Freshkills Parktrue622236745702440959null
Staten Island9999Freshkills Parktrue622236745696575487null
Staten Island9999Freshkills Parktrue622236745675472895null
Staten Island9999Freshkills Parktrue622236745730555903null
Staten Island9999Freshkills Parktrue622236745694216191null
Staten Island9999Freshkills Parktrue622236745734062079null
Staten Island9999Freshkills Parktrue622236745703587839null
Staten Island9999Freshkills Parktrue622236745762177023null
Staten Island9999Freshkills Parktrue622236745731702783null
Staten Island9999Freshkills Parktrue622236745725837311null
Staten Island9999Freshkills Parktrue622236745689497599null
Staten Island9999Freshkills Parktrue622236745683632127null
Staten Island9999Freshkills Parktrue622236745723478015null
Staten Island9999Freshkills Parktrue622236745763323903null
Staten Island9999Freshkills Parktrue622236745693003775null
Staten Island9999Freshkills Parktrue622236745732849663null
Staten Island9999Freshkills Parktrue622236745702375423null
Staten Island9999Freshkills Parktrue622236745681272831null
Staten Island9999Freshkills Parktrue622236745690644479null
Staten Island9999Freshkills Parktrue622236745675407359null
Staten Island9999Freshkills Parktrue622236745730490367null
Staten Island9999Freshkills Parktrue622236745694150655null
Staten Island9999Freshkills Parktrue622236745733996543null
Staten Island9999Freshkills Parktrue622236745703522303null
Staten Island9999Freshkills Parktrue622236745762111487null
Staten Island9999Freshkills Parktrue622236745731637247null
Staten Island9999Freshkills Parktrue622236745680060415null
Staten Island9999Freshkills Parktrue622236745689432063null
Staten Island9999Freshkills Parktrue622236745683566591null
Staten Island9999Freshkills Parktrue622236745763258367null
Staten Island9999Freshkills Parktrue622236745692938239null
Staten Island9999Freshkills Parktrue622236745732784127null
Staten Island9999Freshkills Parktrue622236745681207295null
Staten Island9999Freshkills Parktrue622236745760899071null
Staten Island9999Freshkills Parktrue622236745675341823null
Staten Island9999Freshkills Parktrue622236745730424831null
Staten Island9999Freshkills Parktrue622236745684713471null
Staten Island9999Freshkills Parktrue622236745764405247null
Staten Island9999Freshkills Parktrue622236745694085119null
Staten Island9999Freshkills Parktrue622236745733931007null
Staten Island9999Freshkills Parktrue622236745703456767null
Staten Island9999Freshkills Parktrue622236745682354175null
Staten Island9999Freshkills Parktrue622236745762045951null
Staten Island9999Freshkills Parktrue622236745731571711null
Staten Island9999Freshkills Parktrue622236745725706239null
Staten Island9999Freshkills Parktrue622236745689366527null
Staten Island9999Freshkills Parktrue622236745683501055null
Staten Island9999Freshkills Parktrue622236745763192831null
Staten Island9999Freshkills Parktrue622236745702244351null
Staten Island9999Freshkills Parktrue622236745742090239null
Staten Island9999Freshkills Parktrue622236745681141759null
Staten Island9999Freshkills Parktrue622236745675276287null
Staten Island9999Freshkills Parktrue622236745684647935null
Staten Island9999Freshkills Parktrue622236745724493823null
Staten Island9999Freshkills Parktrue622236745764339711null
Staten Island9999Freshkills Parktrue622236745694019583null
Staten Island9999Freshkills Parktrue622236745678782463null
Staten Island9999Freshkills Parktrue622236745733865471null
Staten Island9999Freshkills Parktrue622236745703391231null
Staten Island9999Freshkills Parktrue622236745682288639null
Staten Island9999Freshkills Parktrue622236745761980415null
Staten Island9999Freshkills Parktrue622236745731506175null
Staten Island9999Freshkills Parktrue622236745695166463null
Staten Island9999Freshkills Parktrue622236745735012351null
Staten Island9999Freshkills Parktrue622236745689300991null
Staten Island9999Freshkills Parktrue622236745732653055null
Staten Island9999Freshkills Parktrue622236745702178815null
Staten Island9999Freshkills Parktrue622236745742024703null
Staten Island9999Freshkills Parktrue622236745690447871null
Staten Island9999Freshkills Parktrue622236745675210751null
Staten Island9999Freshkills Parktrue622236745684582399null
Staten Island9999Freshkills Parktrue622236745764274175null
Staten Island9999Freshkills Parktrue622236745693954047null
Staten Island9999Freshkills Parktrue622236745733799935null
Staten Island9999Freshkills Parktrue622236745703325695null
Staten Island9999Freshkills Parktrue622236745743171583null
Staten Island9999Freshkills Parktrue622236745682223103null
Staten Island9999Freshkills Parktrue622236745761914879null
Staten Island9999Freshkills Parktrue622236745731440639null
Staten Island9999Freshkills Parktrue622236745725575167null
Staten Island9999Freshkills Parktrue622236745695100927null
Staten Island9999Freshkills Parktrue622236745734946815null
Staten Island9999Freshkills Parktrue622236745689235455null
Staten Island9999Freshkills Parktrue622236745683369983null
Staten Island9999Freshkills Parktrue622236745723215871null
Staten Island9999Freshkills Parktrue622236745732587519null
Staten Island9999Freshkills Parktrue622236745702113279null
Staten Island9999Freshkills Parktrue622236745741959167null
Staten Island9999Freshkills Parktrue622236745696247807null
Staten Island9999Freshkills Parktrue622236745681010687null
Staten Island9999Freshkills Parktrue622236745760702463null
Staten Island9999Freshkills Parktrue622236745690382335null
Staten Island9999Freshkills Parktrue622236745675145215null
Staten Island9999Freshkills Parktrue622236745684516863null
Staten Island9999Freshkills Parktrue622236745724362751null
Staten Island9999Freshkills Parktrue622236745764208639null
Staten Island9999Freshkills Parktrue622236745693888511null
Staten Island9999Freshkills Parktrue622236745733734399null
Staten Island9999Freshkills Parktrue622236745703260159null
Staten Island9999Freshkills Parktrue622236745743106047null
Staten Island9999Freshkills Parktrue622236745682157567null
Staten Island9999Freshkills Parktrue622236745761849343null
Staten Island9999Freshkills Parktrue622236745691529215null
Staten Island9999Freshkills Parktrue622236745676292095null
Staten Island9999Freshkills Parktrue622236745731375103null
Staten Island9999Freshkills Parktrue622236745725509631null
Staten Island9999Freshkills Parktrue622236745695035391null
Staten Island9999Freshkills Parktrue622236745734881279null
Staten Island9999Freshkills Parktrue622236745683304447null
Staten Island9999Freshkills Parktrue622236745723150335null
Staten Island9999Freshkills Parktrue622236745732521983null
Staten Island9999Freshkills Parktrue622236745726656511null
Staten Island9999Freshkills Parktrue622236745696182271null
Staten Island9999Freshkills Parktrue622236745760636927null
Staten Island9999Freshkills Parktrue622236745690316799null
Staten Island9999Freshkills Parktrue622236745675079679null
Staten Island9999Freshkills Parktrue622236745684451327null
Staten Island9999Freshkills Parktrue622236745724297215null
Staten Island9999Freshkills Parktrue622236745693822975null
Staten Island9999Freshkills Parktrue622236745733668863null
Staten Island9999Freshkills Parktrue622236745703194623null
Staten Island9999Freshkills Parktrue622236745743040511null
Staten Island9999Freshkills Parktrue622236745761783807null
Staten Island9999Freshkills Parktrue622236745691463679null
Staten Island9999Freshkills Parktrue622236745676226559null
Staten Island9999Freshkills Parktrue622236745731309567null
Staten Island9999Freshkills Parktrue622236745725444095null
Staten Island9999Freshkills Parktrue622236745683238911null
Staten Island9999Freshkills Parktrue622236745723084799null
Staten Island9999Freshkills Parktrue622236745701982207null
Staten Island9999Freshkills Parktrue622236745741828095null
Staten Island9999Freshkills Parktrue622236745726590975null
Staten Island9999Freshkills Parktrue622236745696116735null
Staten Island9999Freshkills Parktrue622236745760571391null
Staten Island9999Freshkills Parktrue622236745675014143null
Staten Island9999Freshkills Parktrue622236745684385791null
Staten Island9999Freshkills Parktrue622236745724231679null
Staten Island9999Freshkills Parktrue622236745693757439null
Staten Island9999Freshkills Parktrue622236745733603327null
Staten Island9999Freshkills Parktrue622236745703129087null
Staten Island9999Freshkills Parktrue622236745742974975null
Staten Island9999Freshkills Parktrue622236745697263615null
Staten Island9999Freshkills Parktrue622236745676161023null
Staten Island9999Freshkills Parktrue622236745731244031null
Staten Island9999Freshkills Parktrue622236745694904319null
Staten Island9999Freshkills Parktrue622236745734750207null
Staten Island9999Freshkills Parktrue622236745732390911null
Staten Island9999Freshkills Parktrue622236745701916671null
Staten Island9999Freshkills Parktrue622236745741762559null
Staten Island9999Freshkills Parktrue622236745726525439null
Staten Island9999Freshkills Parktrue622236745690185727null
Staten Island9999Freshkills Parktrue622236745674948607null
Staten Island9999Freshkills Parktrue622236745684320255null
Staten Island9999Freshkills Parktrue622236745724166143null
Staten Island9999Freshkills Parktrue622236745693691903null
Staten Island9999Freshkills Parktrue622236745733537791null
Staten Island9999Freshkills Parktrue622236745703063551null
Staten Island9999Freshkills Parktrue622236745697198079null
Staten Island9999Freshkills Parktrue622236745761652735null
Staten Island9999Freshkills Parktrue622236745731178495null
Staten Island9999Freshkills Parktrue622236745694838783null
Staten Island9999Freshkills Parktrue622236745734684671null
Staten Island9999Freshkills Parktrue622236745698344959null
Staten Island9999Freshkills Parktrue622236745683107839null
Staten Island9999Freshkills Parktrue622236745722953727null
Staten Island9999Freshkills Parktrue622236745692479487null
Staten Island9999Freshkills Parktrue622236745732325375null
Staten Island9999Freshkills Parktrue622236745701851135null
Staten Island9999Freshkills Parktrue622236745741697023null
Staten Island9999Freshkills Parktrue622236745726459903null
Staten Island9999Freshkills Parktrue622236745735831551null
Staten Island9999Freshkills Parktrue622236745690120191null
Staten Island9999Freshkills Parktrue622236745674883071null
Staten Island9999Freshkills Parktrue622236745684254719null
Staten Island9999Freshkills Parktrue622236745724100607null
Staten Island9999Freshkills Parktrue622236745693626367null
Staten Island9999Freshkills Parktrue622236745733472255null
Staten Island9999Freshkills Parktrue622236745702998015null
Staten Island9999Freshkills Parktrue622236745697132543null
Staten Island9999Freshkills Parktrue622236745676029951null
Staten Island9999Freshkills Parktrue622236745725247487null
Staten Island9999Freshkills Parktrue622236745694773247null
Staten Island9999Freshkills Parktrue622236745734619135null
Staten Island9999Freshkills Parktrue622236745683042303null
Staten Island9999Freshkills Parktrue622236745722888191null
Staten Island9999Freshkills Parktrue622236745762734079null
Staten Island9999Freshkills Parktrue622236745732259839null
Staten Island9999Freshkills Parktrue622236745726394367null
Staten Island9999Freshkills Parktrue622236745735766015null
Staten Island9999Freshkills Parktrue622236745690054655null
Staten Island9999Freshkills Parktrue622236745674817535null
Staten Island9999Freshkills Parktrue622236745684189183null
Staten Island9999Freshkills Parktrue622236745724035071null
Staten Island9999Freshkills Parktrue622236745693560831null
Staten Island9999Freshkills Parktrue622236745733406719null
Staten Island9999Freshkills Parktrue622236745702932479null
Staten Island9999Freshkills Parktrue622236745761521663null
Staten Island9999Freshkills Parktrue622236745675964415null
Staten Island9999Freshkills Parktrue622236745698213887null
Staten Island9999Freshkills Parktrue622236745682976767null
Staten Island9999Freshkills Parktrue622236745722822655null
Staten Island9999Freshkills Parktrue622236745726328831null
Staten Island9999Freshkills Parktrue622236745674751999null
Staten Island9999Freshkills Parktrue622236745684123647null
Staten Island9999Freshkills Parktrue622236745723969535null
Staten Island9999Freshkills Parktrue622236745693495295null
Staten Island9999Freshkills Parktrue622236745733341183null
Staten Island9999Freshkills Parktrue622236745702866943null
Staten Island9999Freshkills Parktrue622236745736847359null
Staten Island9999Freshkills Parktrue622236745761456127null
Staten Island9999Freshkills Parktrue622236745675898879null
Staten Island9999Freshkills Parktrue622236745694642175null
Staten Island9999Freshkills Parktrue622236745734488063null
Staten Island9999Freshkills Parktrue622236745698148351null
Staten Island9999Freshkills Parktrue622236745732128767null
Staten Island9999Freshkills Parktrue622236745726263295null
Staten Island9999Freshkills Parktrue622236745735634943null
Staten Island9999Freshkills Parktrue622236745689923583null
Staten Island9999Freshkills Parktrue622236745674686463null
Staten Island9999Freshkills Parktrue622236745684058111null
Staten Island9999Freshkills Parktrue622236745723903999null
Staten Island9999Freshkills Parktrue622236745693429759null
Staten Island9999Freshkills Parktrue622236745733275647null
Staten Island9999Freshkills Parktrue622236745702801407null
Staten Island9999Freshkills Parktrue622236745742647295null
Staten Island9999Freshkills Parktrue622236745736781823null
Staten Island9999Freshkills Parktrue622236745761390591null
Staten Island9999Freshkills Parktrue622236745725050879null
Staten Island9999Freshkills Parktrue622236745694576639null
Staten Island9999Freshkills Parktrue622236745734422527null
Staten Island9999Freshkills Parktrue622236745732063231null
Staten Island9999Freshkills Parktrue622236745726197759null
Staten Island9999Freshkills Parktrue622236745689858047null
Staten Island9999Freshkills Parktrue622236745674620927null
Staten Island9999Freshkills Parktrue622236745683992575null
Staten Island9999Freshkills Parktrue622236745723838463null
Staten Island9999Freshkills Parktrue622236745702735871null
Staten Island9999Freshkills Parktrue622236745742581759null
Staten Island9999Freshkills Parktrue622236745736716287null
Staten Island9999Freshkills Parktrue622236745761325055null
Staten Island9999Freshkills Parktrue622236745691004927null
Staten Island9999Freshkills Parktrue622236745675767807null
Staten Island9999Freshkills Parktrue622236745724985343null
Staten Island9999Freshkills Parktrue622236745694511103null
Staten Island9999Freshkills Parktrue622236745734356991null
Staten Island9999Freshkills Parktrue622236745731997695null
Staten Island9999Freshkills Parktrue622236745726132223null
Staten Island9999Freshkills Parktrue622236745689792511null
Staten Island9999Freshkills Parktrue622236745674555391null
Staten Island9999Freshkills Parktrue622236745683927039null
Staten Island9999Freshkills Parktrue622236745723772927null
Staten Island9999Freshkills Parktrue622236745763618815null
Staten Island9999Freshkills Parktrue622236745702670335null
Staten Island9999Freshkills Parktrue622236745742516223null
Staten Island9999Freshkills Parktrue622236745761259519null
Staten Island9999Freshkills Parktrue622236745690939391null
Staten Island9999Freshkills Parktrue622236745675702271null
Staten Island9999Freshkills Parktrue622236745724919807null
Staten Island9999Freshkills Parktrue622236745679208447null
Staten Island9999Freshkills Parktrue622236745726066687null
Staten Island9999Freshkills Parktrue622236745683861503null
Staten Island9999Freshkills Parktrue622236745723707391null
Staten Island9999Freshkills Parktrue622236745702604799null
Staten Island9999Freshkills Parktrue622236745742450687null
Staten Island9999Freshkills Parktrue622236745696739327null
Staten Island9999Freshkills Parktrue622236745761193983null
Staten Island9999Freshkills Parktrue622236745690873855null
Staten Island9999Freshkills Parktrue622236745675636735null
Staten Island9999Freshkills Parktrue622236745694380031null
Staten Island9999Freshkills Parktrue622236745679142911null
Staten Island9999Freshkills Parktrue622236745734225919null
Staten Island9999Freshkills Parktrue622236745731866623null
Staten Island9999Freshkills Parktrue622236745726001151null
Staten Island9999Freshkills Parktrue622236745689661439null
Staten Island9999Freshkills Parktrue622236745729507327null
Staten Island9999Freshkills Parktrue622236745683795967null
Staten Island9999Freshkills Parktrue622236745723641855null
Staten Island9999Freshkills Parktrue622236745763487743null
Staten Island9999Freshkills Parktrue622236745702539263null
Staten Island9999Freshkills Parktrue622236745696673791null
Staten Island9999Freshkills Parktrue622236745761128447null
Staten Island9999Freshkills Parktrue622236745690808319null
Staten Island9999Freshkills Parktrue622236745725739007null
Staten Island9999Freshkills Parkfalse622236745696935935AQMAAAABAAAABAAAAIzvORt9i1LAUzWXQ0NIRECs3yEigotSwIct0/1KSERAz1Bl94WLUsD10IC1SUhEQIzvORt9i1LAUzWXQ0NIREA=
Staten Island9999Freshkills Parkfalse622236746167451647AQMAAAABAAAABQAAALLLamedjVLA7PTzHUVHREBNNifZjI1SwIx+IDVNR0RAo5WznI2NUsAYmXlhTkdEQOZxFHmcjVLAepg7ZklHRECyy2pnnY1SwOz08x1FR0RA
Staten Island9999Freshkills Parkfalse622236745725181951AQMAAAABAAAACAAAAKO97SfLjFLAIFImkFVHRECDqWsmwIxSwIgY7T9ZR0RAaiCr/7mMUsAVstwXZUdEQKmCacK3jFLAJQi4Ym9HREBTwBAWwoxSwGytiUB/R0RAlcOy8tCMUsB7rxhGekdEQE9Ql3vVjFLA5tnfbWVHRECjve0= (truncated)
Staten Island9999Freshkills Parkfalse622236745692708863AQMAAAABAAAACgAAABxTRq7gilLAmdfeuPlHREDD33S73YpSwKGHSLX6R0RAyUDDbd2KUsAKqHCXDEhEQHoKDC7dilLAXpp1LhtIRECzsMwt3YpSwIA5Dj0bSERAJM9mHN2KUsARqtk4H0hEQKbuUhbdilLAAg+akiFIREAwyi0= (truncated)
Staten Island9999Freshkills Parkfalse622236745763880959AQMAAAABAAAABAAAAMJtrBbEilLAuXWkiSxLREAKJ7ZcwYpSwLrfZjFBS0RAuOwva8WKUsAVGCeVLktEQMJtrBbEilLAuXWkiSxLREA=
Staten Island9999Freshkills Parkfalse622236745673801727AQMAAAABAAAAEAAAAEusd47ri1LARkK8hxlLREB67WSv3ItSwK+/oIEeS0RAiTnvJNiLUsC9w3NbM0tEQKosoHnii1LAw55wO0NLRECON47p6otSwA05smhAS0RAQTKHHt2LUsCWtkiYMUtEQGXeF4jfi1LAns6gKjFLREAkqVc= (truncated)
Staten Island9999Freshkills Parkfalse622236745762766847AQMAAAABAAAABAAAABHqBw3NilLA5PFQ+cpKREA20j3kzIpSwHeLCgrNSkRAic/LRM2KUsBDJg1Py0pEQBHqBw3NilLA5PFQ+cpKREA=
Staten Island9999Freshkills Parkfalse622236745769549823AQMAAAABAAAACAAAAEsfeSjQilLAvI5xoTlMREBSSHP3yYpSwGY4QrM7TERAOPSwLMWKUsBX9gTsV0xEQOaTaHXEilLAzKLeUl9MREDTO0MRx4pSwLxEjlVjTERAUghS8dWKUsAn/qZcXkxEQAYG43zailLAFXeRgklMREBLH3k= (truncated)
Staten Island9999Freshkills Parkfalse622236746168893439AQMAAAABAAAACgAAAEFnNV4qjVLAwD4mP1tHREBSQQgeKo1SwJ1uO2ZcR0RAZL/3cTSNUsCXXLZDbEdEQMYbEV82jVLAcXR5nmtHREBx/B14P41SwJ9IGV9eR0RAd4R8yzqNUsDHj1iuXkdEQDyyRxU2jVLAdJqzbl5HREDzpns= (truncated)
Staten Island9999Freshkills Parkfalse622236745673244671AQYAAAACAAAAAQMAAAABAAAABQAAAGfnWjFYjFLAcCT/1uFKREBEWyhGUYxSwCD74ifkSkRAow3VNFKMUsA4U1F95kpEQD0y/b9ZjFLAYpJwO+RKREBn51oxWIxSwHAk/9bhSkRAAQMAAAABAAAABQAAALTRzktOjFLAkEgTJ+U= (truncated)
Staten Island9999Freshkills Parkfalse622236745730293759AQMAAAABAAAADwAAAHsrqeBrjVLALNBqRGhIREC72IoDXY1SwL+PlD9tSERAycTpeliNUsAWLoUYgkhEQF/qes9ijVLAaVta9pFIREB0K4b3bo1SwMamceONSERAC8KjXG+NUsBsmGihjEhEQKB950BwjVLAOz81o4lIREDlS8k= (truncated)
Staten Island9999Freshkills Parkfalse622236745757982719AQMAAAABAAAACAAAAFvg22aMilLANALWn7VLREB+k+jbiopSwE9M1CO2S0RAGDjhCnqKUsDZZAofz0tEQO+Cb7V5ilLATtUVkNBLREBwrGJPg4pSwGznOlPfS0RAL1ApL5KKUsBiUqda2ktEQNP227qWilLAaLPtgMVLREBb4Ns= (truncated)
Staten Island9999Freshkills Parkfalse622236745736519679AQMAAAABAAAABgAAABIxNdUtjVLALY8s+hJKRECy44BiKo1SwHiQ5CEUSkRA9g1i2SWNUsCgwZ/7KEpEQBUkeHMujVLAEIjHMTZKREByI0BpLo1SwE8n89smSkRAEjE11S2NUsAtjyz6EkpEQA==
Staten Island9999Freshkills Parktrue622236745678913535null
Staten Island9999Freshkills Parkfalse622236745682026495AQMAAAABAAAABwAAABhV/Kp6i1LAh31HSGFMRECUDmrva4tSwAQrrjVmTERABZFSZGeLUsARqwQQe0xEQKfzQ7lxi1LAY4jX8IpMRED1jqXhcotSwCtxt42KTERAYIM7BnqLUsBWLJGmYkxEQBhV/Kp6i1LAh31HSGFMREA=
Staten Island9999Freshkills Parkfalse622236745735405567AQMAAAABAAAALAAAACBtiIU+jVLASpeWu6xJREC8PLExMo1SwFki59ywSURAVV6sqC2NUsD4YnG2xUlEQFL7/MY3jVLATD7rQNVJREBHH4DjN41SwDCgssfTSURAIsTaMjiNUsBjWkyr0UlEQI02BZ04jVLAtALEwc9JRED26fE= (truncated)
Staten Island9999Freshkills Parkfalse622236745696149503AQMAAAABAAAACQAAAORf+0wejFLAur1XzyRIRECcUfVWHYxSwICcAXIlSERA39+yMxqMUsA/LFb4JkhEQMyzxCgEjFLA7KJzdS9IRECy6bdfA4xSwLMk9RAzSERAMuo1sw2MUsD2iZTvQkhEQLzpcZAcjFLAsm3J9T1IRECArRk= (truncated)
Staten Island9999Freshkills Parkfalse622236745742188543AQMAAAABAAAACAAAAIprKi5ti1LAwRpDy59MREAWlwtOXotSwFh5zcSkTERAjxrcwlmLUsBkxz+fuUxEQE1c3xdki1LAZg02gMlMREAFjWoXZ4tSwK+BhX/ITERAVAUJCGiLUsDfm3gqx0xEQOtdaKtui1LA144nFaJMRECKayo= (truncated)
Staten Island9999Freshkills Parkfalse622236745699262463AQMAAAABAAAACQAAAJjNyNXrilLAKAnxzP9JREDMTz333IpSwFwbsMUESkRA/2kpzNqKUsC/hKG4DkpEQJ1M8g/ailLAz8UH5RlKREAWV8fm2YpSwFyfwuQbSkRA9IGfv+KKUsAImNB+KUpEQB9AQZ7xilLAEb4HhiRKRECw80s= (truncated)
Staten Island9999Freshkills Parkfalse622236745695592447AQMAAAABAAAAFAAAACHyBz3Zi1LAvWeqxEVIREAEgGFh14tSwOf3dj5ISERATDZXYNeLUsCOiL8/SEhEQOccQV/Xi1LAvJIdQUhIRECJnmNZ04tSwD3fZQVNSERAwUAYJM+LUsD72D9wUUhEQC2BQSPPi1LAkpgWcVFIREBFkXY= (truncated)
Staten Island9999Freshkills Parkfalse622236745912778751AQMAAAABAAAABAAAAGogq/+5jFLAFbLcF2VHREDDmav/s4xSwCv2LqVwR0RAqYJpwreMUsAlCLhib0dEQGogq/+5jFLAFbLcF2VHREA=
Staten Island9999Freshkills Parkfalse622236745769877503AQMAAAABAAAABAAAAAESmsN+ilLAN0D7LPRLRECZpv25fIpSwPYgS9v0S0RAJSoxv3+KUsA+gcyv9UtEQAESmsN+ilLAN0D7LPRLREA=
Staten Island9999Freshkills Parkfalse622236745691365375AQMAAAABAAAACwAAAGozUIn1ilLAEKQIQdlHREAw8SYW9IpSwMcGf+jfR0RALiPBaP6KUsDAqrbH70dEQBJ93QEMi1LA/HtxO+tHREA3kig6BotSwLZ1sPHlR0RAxGtyuQCLUsAGDz7t4EdEQAg8IJ7/ilLA9ibo6t9HREDs7PU= (truncated)
Staten Island9999Freshkills Parkfalse622236745736290303AQMAAAABAAAABgAAAO0EkPJDjVLAR0N/nJ5JREBBXEPvQo1SwJNXp0SjSURA56I3SkONUsBSb/DdoklEQNmKbSVEjVLAIcjG8KFJRECgZKwxRI1SwIaCYj+gSURA7QSQ8kONUsBHQ3+cnklEQA==
Staten Island9999Freshkills Parktrue622236745921560575null
Staten Island9999Freshkills Parkfalse622236745913106431AQMAAAABAAAAEAAAAIIWNIjqjFLAZ2Od0SZHREBZDm1g6IxSwLkJSe8mR0RAA+xnOuaMUsDe2MI4J0dEQNYVpRfkjFLAj2zZrSdHREA05cPV4oxSwDR9Fg0oR0RAKXtIjd6MUsChDoq9O0dEQJJi9ODojFLA9Hgrm0tHREDMPG8= (truncated)
Staten Island9999Freshkills Parkfalse622236745698476031AQMAAAABAAAACQAAALL+ux3oilLAISejGFNJREBRTn3L4IpSwJM6VYtVSURAr2wazOCKUsAX3FEnVklEQKdUfongilLARGuvEmdJRED8vVvz34pSwAZAevV3SURAzrEi0N+KUsB9ldCGfElEQEwaBObtilLAFHgZ0XdJREBOsPA= (truncated)
Staten Island9999Freshkills Parkfalse622236745769648127AQMAAAABAAAABwAAAJ5JnIXCilLA0IWqL3hMRECiHMIJwopSwI4IEFl4TERA/atadMCKUsCS30q4iExEQO271ie+ilLAeH+vT6BMREBgDW9OyIpSwLcrH+ucTERAEwwY2syKUsCQ2O0QiExEQJ5JnIXCilLA0IWqL3hMREA=
Staten Island9999Freshkills Parkfalse622236746168991743AQMAAAABAAAAbgAAAOZxFHmcjVLAepg7ZklHRECjlbOcjY1SwBiZeWFOR0RAeDp0FImNUsAwnOU5Y0dEQNRjiUWTjVLAJcIu4XJHRED/Zstpk41SwACBE3xyR0RAaf7Oo5ONUsAQfUPlcUdEQB0fx+CTjVLAt2EwUXFHRED02aI= (truncated)
Staten Island9999Freshkills Parkfalse622236745673342975AQMAAAABAAAACQAAAB+zGpprjFLA/inKAshKRECwB1G7XIxSwNN6Kv3MSkRAZ+daMViMUsBwJP/W4UpEQD0y/b9ZjFLAYpJwO+RKREDd+3RsX4xSwLrmzYjiSkRArimgTm6MUsBukC0X5kpEQBjpkTV0jFLAQxtKzt9KRED9fQQ= (truncated)
Staten Island9999Freshkills Parktrue622236745680125951null
Staten Island9999Freshkills Parkfalse622236745672785919AQMAAAABAAAABwAAACtBCaInjFLAVe8AGPJKREBS8sO1HIxSwGna4b/1SkRArQe3bRuMUsDdVY+i+0pEQACZCuIdjFLA31deePlKREB6WJ8NIYxSwBYZS+72SkRASHDjSSSMUsDgOSWX9EpEQCtBCaInjFLAVe8AGPJKREA=
Staten Island9999Freshkills Parkfalse622236745690578943AQMAAAABAAAACQAAADmf/S3qilLA0p0dH8tIREDeljZq24pSwFzACA/QSERAHQuVdduKUsDBMc0y00hEQP7D8CDcilLA/mL9X+hIREAm+Thi3IpSwFEUV5HtSERABbJIGOGKUsBnDLvP9EhEQA6OJ/bvilLAP+gT1+9IREBuE/g= (truncated)
Staten Island9999Freshkills Parkfalse622236745761751039AQMAAAABAAAACAAAAIfQ/ZbEilLAbsZnK/BLRECF0TG3tYpSwH21MST1S0RAZUAtzbGKUsAxnLUYB0xEQIMkNPu8ilLAoHafRg5MREA7iZpExYpSwPaBRZsWTERAImKyX8qKUsAJfFzmFExEQDhHP+vOilLAxBlxDABMRECH0P0= (truncated)
Staten Island9999Freshkills Parktrue622236745679568895null
Staten Island9999Freshkills Parkfalse622236745743400959AQMAAAABAAAACAAAAG3Nwusyi1LABCIZR+1MREAhLGkLJItSwLFPb0DyTERAyND3fx+LUsBWzvUaB01EQJsA9NQpi1LAtHY0/BZNREC4lME/MotSwGymuysUTURAS5QPEDuLUsB9Dzo1B01EQNZYwUA9i1LAkKk/KP1MREBtzcI= (truncated)
Staten Island9999Freshkills Parkfalse622236745742843903AQMAAAABAAAABwAAAAEzn97yilLA2oyXBhZNREClgCsC5IpSwAfxVf4aTURA2LgymeuKUsAqkB94HE1EQCuus3/wilLAjowFRh1NREDVFnRh9YpSwF42raweTURAx31npfmKUsB65hRxIE1EQAEzn97yilLA2oyXBhZNREA=
Staten Island9999Freshkills Parkfalse622236745735503871AQMAAAABAAAAJwAAAGmcpnQzjVLA6wiKbupJREBKr4qWJI1SwJq/oWnvSURAfd5tDSCNUsBt20dDBEpEQLLjgGIqjVLAeJDkIRRKREASMTXVLY1SwC2PLPoSSkRAUz3cvy2NUsD9FD0cEEpEQKFRPQkujVLABAdpMg5KREAF9AY= (truncated)
Staten Island9999Freshkills Parkfalse622236745763749887AQMAAAABAAAACAAAALtW8YHOilLArlVM4gRLREDBzi5tyIpSwG9it+oGS0RA4J4bi8eKUsBsOitdEktEQMJtrBbEilLAuHWkiSxLREC47C9rxYpSwBUYJ5UuS0RAq7F7StSKUsCSfmGcKUtEQKxz0tXYilLAjfHswhRLREC7VvE= (truncated)
Staten Island9999Freshkills Parkfalse622236745742286847AQMAAAABAAAABQAAAPWOpeFyi1LAK3G3jYpMRECn80O5cYtSwGOI1/CKTERAimsqLm2LUsDBGkPLn0xEQOpdaKtui1LA1o4nFaJMRED1jqXhcotSwCtxt42KTERA
Staten Island9999Freshkills Parkfalse622236745762635775AQMAAAABAAAABwAAAHYlWVvWilLAhyqUnKFKREBbb3kU0IpSwFIVyLWjSkRAEeoHDc2KUsDk8VD5ykpEQInPy0TNilLAQyYNT8tKRECketcj3IpSwOq4SVbGSkRA5zIUr+CKUsBhDwZ9sUpEQHYlWVvWilLAhyqUnKFKREA=
Staten Island9999Freshkills Parkfalse622236745730162687AQMAAAABAAAAGgAAAIWgZ8V9jVLAs+4/8U5IREDJVDRpcI1SwFX6gGtTSERAeyup4GuNUsAs0GpEaEhEQJIooa11jVLAxTnhUXdIREArfNixdY1SwDytwUR3SERAuryaHHaNUsDfR6badUhEQHJmIY12jVLAAyiXwHNIRECYmyg= (truncated)
Staten Island9999Freshkills Parkfalse622236745760964607AQMAAAABAAAADwAAAA6xuwjBilLASTCfrUNLREAMPY6+wIpSwIpDl99FS0RADlNtYMCKUsASCxWsSUtEQDbSl+C/ilLA1AOZb01LREC/N2w/v4pSwAJlaydRS0RAwVRcfb6KUsC3/NzQVEtEQOpFM529ilLA4aMZP1hLREAiICs= (truncated)
Staten Island9999Freshkills Parkfalse622236745681895423AQMAAAABAAAABAAAACCTZnWFi1LAwuEBV0pMREDpjmBaf4tSwCRuzGFMTERAFEPU6XqLUsBUWqrCYExEQCCTZnWFi1LAwuEBV0pMREA=
Staten Island9999Freshkills Parkfalse622236745913204735AQMAAAABAAAACwAAABXjZov2jFLAiJgF+yhHREBY9ydG/IxSwGiLbMgxR0RARIHViAONUsD2Ja9ZL0dEQP5xVegCjVLAOz+bzi5HRECGIiypAY1SwJeud90tR0RAGzyPYQCNUsCfkFYILUdEQEWuBTf+jFLARiql8CtHRECeYPs= (truncated)
Staten Island9999Freshkills Parkfalse622236745691791359AQMAAAABAAAADAAAACoGIm3eilLAkiWYz9FHREAB8qRI3opSwD3ytDXaR0RAQqf0OOWKUsCSOQ7h5EdEQDDxJhb0ilLAxwZ/6N9HREBqM1CJ9YpSwBCkCEHZR0RAJkRisPKKUsB/rkns10dEQHVLi13vilLAjx6hh9ZHRECs1T8= (truncated)
Staten Island9999Freshkills Parkfalse622236745762963455AQMAAAABAAAABAAAANaM/WrUilLANt5z9mZKRED0jon204pSwBTVNlZtSkRAJZolHtWKUsCeeuUJaEpEQNaM/WrUilLANt5z9mZKREA=
Staten Island9999Freshkills Parkfalse622236745912647679AQMAAAABAAAABwAAANhuy9LNjFLAokyR2T1HREBeY4fGzYxSwL/8KPI9R0RAxheJEMSMUsCuK4O2UUdEQISpaybAjFLAhxjtP1lHRECjve0ny4xSwCBSJpBVR0RA40TQsM+MUsBWlAK4QEdEQNhuy9LNjFLAokyR2T1HREA=
Staten Island9999Freshkills Parkfalse622236745769746431AQMAAAABAAAACAAAAC9QKS+SilLAYlKnWtpLREBwrGJPg4pSwGznOlPfS0RAARKaw36KUsA3QPss9EtEQCUqMb9/ilLAPoHMr/VLREDbr8BfhYpSwEVfuDv3S0RA56Ztm5iKUsBVd9Ul/EtEQMadPYOcilLALk/KO+pLREAvUCk= (truncated)
Staten Island9999Freshkills Parkfalse622236746169090047AQMAAAABAAAAWQAAAG9CaOCOjVLAOgej74dHREAwmN0DgI1SwM+E2eqMR0RA6FCGe3uNUsAlamHDoUdEQHGZzc+FjVLAnx/BoLFHREDG46MAiY1SwK+q9o6wR0RArlsIMomNUsDMdGTwr0dEQNW/eIWJjVLAbZaq8K5HRECmLPQ= (truncated)
Staten Island9999Freshkills Parkfalse622236746168532991AQMAAAABAAAABwAAANOJOWFxjVLA9XyFoVpHREBd8nW9X41SwGstTkBjR0RAGO8Ff1yNUsAjLT8rckdEQM57ItNmjVLAvnCgCIJHREBMhKqvdY1SwAgXhQ19R0RAFsj/N3qNUsCVSRI1aEdEQNOJOWFxjVLA9XyFoVpHREA=
Staten Island9999Freshkills Parkfalse622236745690677247AQMAAAABAAAABwAAAJaTnyPeilLAwauyGAxJREAEAkaS3opSwJtPO5QSSURAs//Tnd+KUsAmHsVpI0lEQJfWoh3gilLAx6cvHi9JREDsCoZV4opSwAM5TWAuSURA4olu4OaKUsDtgduHGUlEQJaTnyPeilLAwauyGAxJREA=
Staten Island9999Freshkills Parkfalse622236745679667199AQMAAAABAAAABwAAAMOqaqPMjFLAADEi3UZKRECt/ALFvYxSwIZS2ddLSkRA44l6O7mMUsCOL4yxYEpEQNmtbZDDjFLAVzyWkHBKRECI/Em7y4xSwP8/YdRtSkRAJAV3dNGMUsDK4jpDTkpEQMOqaqPMjFLAADEi3UZKREA=
Staten Island9999Freshkills Parkfalse622236745750839295AQMAAAABAAAABgAAAFzYInTAilLAKfO+NQBNREBB/k2MtIpSwMpgZzAETURAyb1QWLOKUsBkYsfNEE1EQCMFdJHJilLAtfyqqxVNREAm6djIyopSwNdDPBcQTURAXNgidMCKUsAp8741AE1EQA==
Staten Island9999Freshkills Parktrue622236745729376255null
Staten Island9999Freshkills Parkfalse622236745696903167AQMAAAABAAAABwAAAM9QZfeFi1LA9tCAtUlIRECs3yEigotSwIct0/1KSERAaMvol32LUsCB4A7WX0hEQO0eHOuHi1LAnRMdtW9IREAy4IrIlotSwAp217tqSERAF8kzsZqLUsDi+w3JWEhEQM9QZfeFi1LA9tCAtUlIREA=
Staten Island9999Freshkills Parkfalse622236745757065215AQMAAAABAAAABQAAAB2rT82hilLAK9g3t5JLREAufZ0+nIpSwPDVNVCcS0RAoABJppuKUsAe8X8ynUtEQKlDKdKfilLAYkKWzZtLREAdq0/NoYpSwCvYN7eSS0RA
Staten Island9999Freshkills Parkfalse622236745742385151AQMAAAABAAAABAAAAAWNahdni1LAroGFf8hMREBNXN8XZItSwGYNNoDJTERAhFTWEWOLUsBFdtUyzkxEQAWNahdni1LAroGFf8hMREA=
Staten Island9999Freshkills Parkfalse622236745673768959AQMAAAABAAAACAAAAI43junqi1LADDmyaEBLRECqLKB54otSwMOecDtDS0RAuW8o792LUsCLtlgVWEtEQDyb7UPoi1LAvdlg9WdLREBL45x39otSwD0i0TRjS0RATkGm0feLUsDL/C7aX0tEQOKa9+v6i1LAfkZ+mlFLRECON44= (truncated)
Staten Island9999Freshkills Parktrue622236745769517055null
Staten Island9999Freshkills Parkfalse622236745730260991AQMAAAABAAAAJgAAAHUrhvdujVLAxqZx441IREBf6nrPYo1SwGlbWvaRSERAa9LXRl6NUsCgEGDPpkhEQCQuXl9mjVLAFu6JPrNIRECqx/yQZo1SwKFpRfiySERA89HMMmeNUsDb/RiHskhEQMQxL5dnjVLAgs8Jg7JIREDFrU4= (truncated)
Staten Island9999Freshkills Parkfalse622236745743269887AQMAAAABAAAACAAAAEU7ZFdGi1LAF8oxc9NMRECSMx53N4tSwNddmWzYTERAbc3C6zKLUsAEIhlH7UxEQNZYwUA9i1LAkKk/KP1MREB8ENtiQ4tSwFa2PBv7TERA10BbHU+LUsAOw4d76kxEQPwhZaxQi1LA2TBAVONMREBFO2Q= (truncated)
Staten Island9999Freshkills Parkfalse622236745700343807AQMAAAABAAAACAAAAF424J3eilLALDWSr4FIREDzmPH+24pSwM2v64+CSERALwjLvNuKUsD5/EBKkEhEQKkTtzrbilLAQoMUz6hIREBjPyg624pSwFetVXipSERAb9flZeSKUsBWt0dnpkhEQP5FsvDoilLAZgAcj5FIREBeNuA= (truncated)
Staten Island9999Freshkills Parkfalse622236745678880767AQMAAAABAAAABgAAANJGsZ6rjFLA33bcPp9KRECeJwzAnIxSwMGtejmkSkRA6c9VNpiMUsCaJVATuUpEQKAIEl2YjFLApnjRTrlKREDlerXBrYxSwCmzKoeiSkRA0kaxnquMUsDfdtw+n0pEQA==
Staten Island9999Freshkills Parkfalse622236745742712831AQMAAAABAAAACgAAAAz8pEoGi1LAyBTvMvxMREB/bTpq94pSwA6sGCwBTURAATOf3vKKUsDajJcGFk1EQMd9Z6X5ilLAeuYUcSBNREBJ5nIy+opSwDKGhKsgTURA/wLa5v6KUsBkDCo/I01EQCtf+PEAi1LA3S+QpyRNREAaRQM= (truncated)
Staten Island9999Freshkills Parkfalse622236745735372799AQMAAAABAAAAJAAAAMRo/LY3jVLAZffo2dZJREBpnKZ0M41SwOsIim7qSURA+d1JyzSNUsD6t8l87ElEQDOCDd40jVLAKUIqbuxJREACiayTNY1SwJK7PRLsSURAMcec9zWNUsC0/EBQ60lEQG9eIGI2jVLAxnHpRupJRECXcwE= (truncated)
Staten Island9999Freshkills Parkfalse622236745920643071AQMAAAABAAAABgAAANgYEA6VjFLAkR28UKlHREBPXNQyhIxSwBUZLAvHR0RAmBuE5IeMUsDtzke4zEdEQEHcYMGWjFLAZtQKvsdHREA1JodKm4xSwMaoveWyR0RA2BgQDpWMUsCRHbxQqUdEQA==
Staten Island9999Freshkills Parktrue622236745680879615null
Staten Island9999Freshkills Parkfalse622236745691332607AQMAAAABAAAACAAAABJ93QEMi1LA/HtxO+tHREAuI8Fo/opSwMCqtsfvR0RA7q8m3vmKUsCTnpWfBEhEQCAT1TAEi1LAk5HYfhRIREDBRCAOE4tSwIZzJIYPSERA1NammBeLUsAwKjeu+kdEQKCuRdAPi1LAtqLotu5HREASfd0= (truncated)
Staten Island9999Freshkills Parktrue622236745733701631null
Staten Island9999Freshkills Parktrue622236745750937599null
Staten Island9999Freshkills Parktrue622236745697001471null
Staten Island9999Freshkills Parkfalse622236745760833535AQMAAAABAAAACAAAAKuxe0rUilLAkn5hnClLREC47C9rxYpSwBUYJ5UuS0RACie2XMGKUsC632YxQUtEQA+xuwjBilLASTCfrUNLREBEL7Yzy4pSwLZnZk9TS0RA7DYYE9qKUsB2BpdWTktEQPoEcZ7eilLAFWYNfTlLRECrsXs= (truncated)
Staten Island9999Freshkills Parkfalse622236745735700479AQMAAAABAAAAEwAAALQHo0M7jVLA7nzuKYdJRED5LMdlLI1SwMHtAyWMSURAWFPE3CeNUsCnGHn+oElEQLw8sTEyjVLAWSLn3LBJREAgbYiFPo1SwEqXlrusSURAcUhlED+NUsAdsK/OqklEQKg1mTlBjVLAWq13QqVJRECkwDw= (truncated)
Staten Island9999Freshkills Parkfalse622236745681764351AQMAAAABAAAACAAAAIwmheW8i1LA9Z0od7BLRECoGgsGrotSwGaO7HC1S0RAbX5Pe6mLUsAx9f1KyktEQPfWIdCzi1LAuMBZK9pLREBb/ekiwItSwL+n7gvWS0RA89LTEsSLUsBCCgbTzktEQJTYWTrHi1LAUUlsV8BLRECMJoU= (truncated)
Staten Island9999Freshkills Parkfalse622236745762832383AQMAAAABAAAACAAAAKR61yPcilLA6rhJVsZKRECJz8tEzYpSwEMmDU/LSkRAN9I95MyKUsB0iwoKzUpEQGNgliHLilLAj5WO2+NKRECiDEYN04pSwCjc7AjwSkRArPln7OGKUsATpx8Q60pEQNS9pnfmilLAx+nGNtZKRECketc= (truncated)
Staten Island9999Freshkills Parkfalse622236746168958975AQMAAAABAAAABgAAAM3Ma5ePjVLABgLhpYRHREBvQmjgjo1SwDoHo++HR0RAaOCiCI+NUsBKW2wtiEdEQEa8qCGPjVLAAsfclIdHRECeZNxxj41SwKi7GpuFR0RAzcxrl4+NUsAGAuGlhEdEQA==
Staten Island9999Freshkills Parkfalse622236745690546175AQMAAAABAAAACAAAAA6OJ/bvilLAP+gT1+9IREAFskgY4YpSwGcMu8/0SERAjlqPpN2KUsD/cP+mBElEQJaTnyPeilLAwauyGAxJREDiiW7g5opSwO2B24cZSURAQ6RjvvWKUsA/liqPFElEQPk0Nkn6ilLARJ6/tv9IREAOjic= (truncated)
Staten Island9999Freshkills Parkfalse622236745761718271AQMAAAABAAAABwAAACJisl/KilLACXxc5hRMREA6iZpExYpSwPeBRZsWTERAM5Feqc6KUsC21skMIExEQFNIc/fJilLAZjhCsztMREBLH3ko0IpSwLyOcaE5TERAtBAItNSKUsABGnHHJExEQCJisl/KilLACXxc5hRMREA=
Staten Island9999Freshkills Parkfalse622236745679536127AQMAAAABAAAAJQAAAMpDMQvgjFLAkZqtCC1KREDVLt0s0YxSwLIXdgMySkRAw6pqo8yMUsAAMSLdRkpEQCQFd3TRjFLAy+I6Q05KREDMy6rN1IxSwH/qWMs7SkRAsvtiPdWMUsAl1UwkPEpEQDNcjp7VjFLAviqGWjxKRECH/M4= (truncated)
Staten Island9999Freshkills Parktrue622236745736585215null
Staten Island9999Freshkills Parkfalse622236745729245183AQMAAAABAAAALAAAADLQxNOGjVLAz4V57BFIRECv9KUCfo1SwPc4++AUSERAULkyenmNUsCkLsm5KUhEQDva5neBjVLAiAm1/zVIREDhkTR5gY1SwLvnIvo1SERAjqF22YGNUsBbvuRsNEhEQKLNoDyCjVLA1TJT4TJIREAoKbI= (truncated)
Staten Island9999Freshkills Parkfalse622236745743368191AQMAAAABAAAABQAAALiUwT8yi1LAbKa7KxRNRECbAPTUKYtSwLR2NPwWTURAqtP19CiLUsA8pAQAG01EQP+oH2Qxi1LAZxLDbhVNREC4lME/MotSwGymuysUTURA
Staten Island9999Freshkills Parkfalse622236745756934143AQMAAAABAAAABwAAABc4Zze2ilLAMPCOuGpLREDAxvqotIpSwA3YGShuS0RAlKxE5a6KUsAfGV4bektEQNHHlx6pilLAGoA+XYVLRECyHU09s4pSwO3XS/uBS0RABtHRyLeKUsDPwLQhbUtEQBc4Zze2ilLAMPCOuGpLREA=
Staten Island9999Freshkills Parkfalse622236745696215039AQMAAAABAAAACwAAALXuThv0i1LAX6sObDdIRECpl7jr64tSwJZhodE7SERAviuZm+OLUsCvTCm8P0hEQCZswprji1LAt++JvD9IRECwmeqZ44tSwLKS6rw/SERA/9ZrM9uLUsDnWTwnQ0hEQCHyBz3Zi1LAvWeqxEVIREDXEmA= (truncated)
Staten Island9999Freshkills Parkfalse622236745692545023AQMAAAABAAAABAAAACgicrTcilLA83wbF0dIREArG9yo3IpSwKOPqGtLSERAQxO1YN2KUsDDjPsfSEhEQCgicrTcilLA83wbF0dIREA=
Staten Island9999Freshkills Parkfalse622236745724461055AQMAAAABAAAACgAAAJkOOndRjVLA525JvwtJREB5rTCbR41SwEbzBw0PSURAGLZdEkONUsDlZEXmI0lEQHzYJmdNjVLAyKNsxDNJREDHUhhOT41SwGiaQiEzSURAVbkEolKNUsDNYIVVDUlEQBEZy0dSjVLAsnLBeQxJREDOZYg= (truncated)
Staten Island9999Freshkills Parkfalse622236745695657983AQMAAAABAAAADgAAABfJM7Gai1LA4vsNyVhIREAy4IrIlotSwAp217tqSERAAcDUG6GLUsAf2NiaekhEQGgqRvmvi1LAXRV4oXVIRECQ4BJKtItSwLrTGtBhSERAV+uEyrGLUsCmx90dYkhEQNwdcPWti1LAPRtxCGJIREAleDs= (truncated)
Staten Island9999Freshkills Parkfalse622236745691987967AQMAAAABAAAACAAAAKooeOkvi1LAZfYDlQlIREAcETM+LItSwNxVi2waSERAQI0OkTaLUsBkq7RLKkhEQIwUX25Fi1LAAEXKUiVIRECyP2O7SItSwFMVnSsWSERAGWXJvjmLUsDyC945D0hEQCyKW1sxi1LA8nYzsgpIRECqKHg= (truncated)
Staten Island9999Freshkills Parkfalse622236745680977919AQMAAAABAAAABwAAANOw7Nqbi1LA+8pp2QhMREA2MDX7jItSwAXBFNMNTERAT6RLcIiLUsCRtUitIkxEQCoAeomRi1LAx5K2qDBMREAKMIfLlItSwMZjWLspTERA4lHgu6CLUsD3hrhYEExEQNOw7Nqbi1LA+8pp2QhMREA=
Staten Island9999Freshkills Parkfalse622236745691430911AQMAAAABAAAABQAAAKGuRdAPi1LAt6Lotu5HREDU1qaYF4tSwDAqN676R0RANvJdkBuLUsBQenpa+UdEQERPK2Eai1LAqpOQYfhHREChrkXQD4tSwLei6LbuR0RA
Staten Island9999Freshkills Parkfalse622236745723346943AQMAAAABAAAAHAAAAGvS10ZejVLAoBBgz6ZIREDprY9pT41SwNBJgsqrSERA0KrW4EqNUsAEx46jwEhEQE+zeTVVjVLA1lmHgdBIREAyjfLbX41SwFCY5O/MSERAe70cJGCNUsDujN4AzEhEQFS6eo1gjVLAyM+DecpIREA8O1w= (truncated)
Staten Island9999Freshkills Parkfalse622236745921626111AQMAAAABAAAAEQAAALDgyKhgjFLA/P5Tsv9HREAmjv71XIxSwJoITWsDSERALyUTaVuMUsDV0oQvBEhEQHb+39FZjFLAiBZRugRIREB0ovMzWIxSwJm8fgoFSERArsftklaMUsCQYVkfBUhEQO6VdPJUjFLAy8ax+ARIREBH/Co= (truncated)
Staten Island9999Freshkills Parkfalse622236745743138815AQMAAAABAAAABwAAAGANb07IilLAtysf65xMREDuu9YnvopSwHh/r0+gTERAv4zxC7uKUsAFUjo3wExEQG4OBTe/ilLAgZ2dn8ZMREB3/VMXzopSwJUttKbBTERAnAj/otKKUsB5yG3MrExEQGANb07IilLAtysf65xMREA=
Staten Island9999Freshkills Parktrue622236745760931839null
Staten Island9999Freshkills Parkfalse622236745678749695AQMAAAABAAAABgAAANo04wa/jFLANC5eaoVKREAJr1EosIxSwNDBDWWKSkRA0kaxnquMUsDfdtw+n0pEQOV6tcGtjFLAKbMqh6JKREATkUgmw4xSwD9Zlb+LSkRA2jTjBr+MUsA0Ll5qhUpEQA==
Staten Island9999Freshkills Parkfalse622236745920511999AQMAAAABAAAABgAAAB+VN+mljFLAHNlvlotHREDYGBAOlYxSwJEdvFCpR0RANSaHSpuMUsDGqL3lskdEQGtSUCeqjFLAWFdv661HREBgsmCwroxSwKzyKBOZR0RAH5U36aWMUsAc2W+Wi0dEQA==
Staten Island9999Freshkills Parkfalse622236745913171967AQMAAAABAAAADwAAAESB1YgDjVLA9iWvWS9HREBY9ydG/IxSwGiLbMgxR0RAzDxvvfeMUsBI0JegRkdEQNurMRECjVLA62YsflZHRECtKa/tEI1SwCGbfYNRR0RA4we/chONUsD4CLrtRUdEQOQrAhUOjVLAbjrjPT9HREDV1s8= (truncated)
Staten Island9999Freshkills Parkfalse622236745673965567AQMAAAABAAAABgAAAEvjnHf2i1LAPSLRNGNLREA8m+1D6ItSwL3ZYPVnS0RAVdVzueOLUsAaBV7PfEtEQFNTPCboi1LAeowAnINLREAh5ikQ9YtSwJ9Au7BmS0RAS+Ocd/aLUsA9ItE0Y0tEQA==
Staten Island9999Freshkills Parkfalse622236745673408511AQMAAAABAAAACAAAALu+rP0+jFLAFZO+8dZKREBwIdIeMIxSwFla8uvbSkRAsHDnACyMUsCsmrvU7kpEQD17KOM1jFLA0yHRc+dKREDaHSmNPoxSwP+vXF34SkRA6nN7k0eMUsBq4qLW7kpEQPSifVJJjFLAABdO0eZKREC7vqw= (truncated)
Staten Island9999Freshkills Parkfalse622236745730457599AQMAAAABAAAAFgAAAFC5Mnp5jVLApC7JuSlIRECCNz6dao1SwMdz+rQuSERAAxK1FGaNUsB/Ms+NQ0hEQMlUNGlwjVLAVfqAa1NIRECGoGfFfY1SwLPuP/FOSERAJLS19n2NUsCxrrQ2TUhEQG7V+1p+jVLAQGxP70lIREBH65U= (truncated)
Staten Island9999Freshkills Parktrue622236745733570559null
Staten Island9999Freshkills Parkfalse622236745672851455AQMAAAABAAAADwAAAKGV1vf+i1LAVCD6s/9KREAkb9cY8ItSwL79760ES0RAS6x3juuLUsBGQryHGUtEQGwbygf0i1LAJW8njSZLRECDK1bD9ItSwG9lkhwmS0RA+S3loviLUsClnVOJJUtEQHh2Qfb6i1LACQXJVCRLREB4iTo= (truncated)
Staten Island9999Freshkills Parktrue622236745679634431null
Staten Island9999Freshkills Parkfalse622236745729343487AQMAAAABAAAAMAAAALZOdEeBjVLAuBxeecZHRECt1b9qco1SwHIWjXTLR0RAkaFQ4m2NUsA83TBN4EdEQF/MqTZ4jVLASvizKvBHREC1qGG0go1SwD9bjabsR0RA/if6toKNUsDrgP2F7EdEQFP048mCjVLAMdgQxutHREB3w1Q= (truncated)
Staten Island9999Freshkills Parkfalse622236745696870399AQMAAAABAAAABgAAAEWNn5Zfi1LAgCxlxitIRECZTqSeXotSwGFA4TgwSERAUeOs8WiLUsC89vAXQEhEQHlj38Rzi1LAr3/MeDxIREBIZEZ1Y4tSwFVgYpswSERARY2fll+LUsCALGXGK0hEQA==
Staten Island9999Freshkills Parkfalse622236745742909439AQMAAAABAAAABwAAABpFAxQMi1LAKc7H7iBNREArX/jxAItSwN0vkKckTURAt+MycwOLUsDWUVVhJk1EQFn34MwHi1LAdi8zCSpNREDxR4LqC4tSwO4heSsuTURAVQ/kDRKLUsBEojUeKk1EQBpFAxQMi1LAKc7H7iBNREA=
Staten Island9999Freshkills Parkfalse622236745724559359AQMAAAABAAAABwAAALzcUd5IjVLAoCu/nUhJREC81p8AOo1SwFsl3JhNSURAlu60dzWNUsAEdDVyYklEQGz0j8w/jVLASxiAUHJJRECAqMkSRo1SwIYIUzZwSURADEdtl0yNUsBlF5tVTklEQLzcUd5IjVLAoCu/nUhJREA=
Staten Island9999Freshkills Parkfalse622236745681633279AQMAAAABAAAACAAAAHFDkU/Qi1LA+6JIo5ZLREBo0CpwwYtSwD31HZ2bS0RAjCaF5byLUsD1nSh3sEtEQJTYWTrHi1LAUUlsV8BLREA6o7cGzYtSwEBezGa+S0RAtPl/1dGLUsCbaA+VtUtEQKNTumjZi1LA7hZenqRLREBxQ5E= (truncated)
Staten Island9999Freshkills Parkfalse622236745723445247AQMAAAABAAAAIgAAAP+rvqxQjVLAp+2oWuVIREDrtEzPQY1SwKyfw1XqSERA9sF7Rj2NUsDw+usu/0hEQHmtMJtHjVLARvMHDQ9JRECZDjp3UY1SwOduSb8LSURAmy3qFFGNUsC8VxJ1C0lEQGJCHqRQjVLAXAF+CQtJREBL7aw= (truncated)
Staten Island9999Freshkills Parkfalse622236745698312191AQMAAAABAAAABgAAAG08OvjeilLAAk6WhphJREAXiRYn3opSwHp3p6WzSURASdt4DN6KUsCTTEAZt0lEQAdjDkXgilLAksMkW7ZJREC98xLQ5IpSwK4ObYKhSURAbTw6+N6KUsACTpaGmElEQA==
Staten Island9999Freshkills Parkfalse622236746168827903AQMAAAABAAAACwAAAOMHv3ITjVLA+Ai67UVHRECtKa/tEI1SwCGbfYNRR0RASSCIQRuNUsCoXQVhYUdEQFJBCB4qjVLAnW47ZlxHREBBZzVeKo1SwL8+Jj9bR0RAEqjAJyiNUsBQpshPWkdEQGmfbbkjjVLAMafh2ldHRECVqug= (truncated)
Staten Island9999Freshkills Parkfalse622236745679962111AQMAAAABAAAABAAAAFysMkV+jFLAjn+zF9VKRED9fQTvdYxSwKC1NOLXSkRAGOmRNXSMUsBEG0rO30pEQFysMkV+jFLAjn+zF9VKREA=
Staten Island9999Freshkills Parktrue622236745761587199null
Staten Island9999Freshkills Parkfalse622236745743237119AQMAAAABAAAABQAAAHwQ22JDi1LAVrY8G/tMREDWWMFAPYtSwJCpPyj9TERAS5QPEDuLUsB8Dzo1B01EQIhW+cFAi1LAdqb41P5MREB8ENtiQ4tSwFa2PBv7TERA
Staten Island9999Freshkills Parkfalse622236745700311039AQMAAAABAAAABwAAAG/X5WXkilLAVrdHZ6ZIREBjPyg624pSwFetVXipSERARaTUKNuKUsDEqJYAvkhEQN6WNmrbilLAW8AID9BIREA5n/0t6opSwNKdHR/LSERANhnMuO6KUsAT0dxGtkhEQG/X5WXkilLAVrdHZ6ZIREA=
Staten Island9999Freshkills Parkfalse622236745678847999AQMAAAABAAAABgAAAIj8SbvLjFLA/z9h1G1KREDZrW2Qw4xSwFc8lpBwSkRA2jTjBr+MUsA0Ll5qhUpEQBORSCbDjFLAP1mVv4tKREAyXwIQx4xSwCYt7JSHSkRAiPxJu8uMUsD/P2HUbUpEQA==
Staten Island9999Freshkills Parkfalse622236745921167359AQMAAAABAAAAEAAAAKpBmSoxjFLAVBV0KgpIRED1+tsXMIxSwFhnw8cLSERApyPfVi6MUsDCi142D0hEQMWNn+ksjFLAf5uV5RJIREDhGj3pKoxSwHFZtOIWSERACuO+oCiMUsBPdzyYGkhEQP3niRcmjFLAunh29B1IREBiNAs= (truncated)
Staten Island9999Freshkills Parkfalse622236745696083967AQMAAAABAAAABwAAAMyzxCgEjFLA7KJzdS9IREBu3gM3/ItSwO2BqIQySERASSVnIfSLUsB7p8hoN0hEQLXuThv0i1LAX6sObDdIRECckX6C9ItSwBocpQo4SERAsum3XwOMUsCzJPUQM0hEQMyzxCgEjFLA7KJzdS9IREA=
Staten Island9999Freshkills Parkfalse622236745692413951AQMAAAABAAAACgAAADDKLXbmilLAKU0UcB5IRECm7lIW3YpSwAIPmpIhSERAH2+7+9yKUsCZ6njbK0hEQOuxW87cilLApw88aD1IREAE2tXF3IpSwEW4R5dASERAKCJytNyKUsDzfBsXR0hEQEMTtWDdilLAw4z7H0hIREA0Zyc= (truncated)
Staten Island9999Freshkills Parkfalse622236745763586047AQMAAAABAAAABwAAACTefjTeilLAaUjOVz5KREBedQAm14pSwAbCx7NASkRA1oz9atSKUsA23nP2ZkpEQCWaJR7VilLAnnrlCWhKRECJLfH844pSwGA6JBFjSkRAId0TiOiKUsC8dRE4TkpEQCTefjTeilLAaUjOVz5KREA=
Staten Island9999Freshkills Parkfalse622236745913270271AQMAAAABAAAADgAAADTlw9XijFLANH0WDShHRECJpqD54YxSwC4EOU4oR0RAlFrR4d+MUsAMQHYZKUdEQEjurdHdjFLAvhj/DipHREALh6TK24xSwD4NLC4rR0RA2usdztmMUsBZZjV2LEdEQJ+QvQ7XjFLAZJ+IVy9HREC48dQ= (truncated)
Staten Island9999Freshkills Parkfalse622236745699196927AQMAAAABAAAABQAAALrsGn7bilLAuFfbgQJKRECdmFAc24pSwJ6EgfYJSkRA/2kpzNqKUsC/hKG4DkpEQMxPPffcilLAXBuwxQRKREC67Bp+24pSwLhX24ECSkRA
Staten Island9999Freshkills Parkfalse622236745695526911AQMAAAABAAAABQAAAIRo44zDi1LALs7IBFtIRECnGKKbwYtSwLNuDmBcSERA5S3Pf8GLUsACxJtwXEhEQMdPtWDDi1LAoZytz1tIRECEaOOMw4tSwC7OyARbSERA
Staten Island9999Freshkills Parkfalse622236745680846847AQMAAAABAAAABwAAABMxZEWvi1LAlzqABe9LRECXScBloItSwJGTPP/zS0RA07Ds2puLUsD7ymnZCExEQOJR4Lugi1LA94a4WBBMREAQZNodo4tSwNinvkcLTERA+pIzCrGLUsBy1VS98UtEQBMxZEWvi1LAlzqABe9LREA=
Staten Island9999Freshkills Parkfalse622236745769811967AQMAAAABAAAABwAAAFbvBmOrilLANo0bQ+VLREDGnT2DnIpSwC5PyjvqS0RA56Ztm5iKUsBVd9Ul/EtEQG61ciKmilLAQ0i3mv9LREBlQC3NsYpSwDKctRgHTERAhdExt7WKUsB9tTEk9UtEQFbvBmOrilLANo0bQ+VLREA=
Staten Island9999Freshkills Parkfalse622236746168598527AQYAAAACAAAAAQMAAAABAAAABAAAAMYbEV82jVLAcHR5nmtHREBkv/dxNI1SwJdctkNsR0RA1WQIwjONUsCPAKtsb0dEQMYbEV82jVLAcHR5nmtHREABAwAAAAEAAAAHAAAAJsRYLUiNUsDiJhvEbkdEQPRca30xjVLAU6dZ2nk= (truncated)
Staten Island9999Freshkills Parkfalse622236745750904831AQMAAAABAAAABgAAAPBjVKnZilLAqUM/HgtNREAm6djIyopSwNdDPBcQTURAIwV0kcmKUsC1/KqrFU1EQPpPG/vQilLAY0o+SxdNREBfton844pSwGCcPf0aTURA8GNUqdmKUsCpQz8eC01EQA==
Staten Island9999Freshkills Parkfalse622236746168041471AQMAAAABAAAAKQAAALlJtLqljVLATwxtDEFHRECyy2pnnY1SwOz08x1FR0RA5nEUeZyNUsB6mDtmSUdEQEx0E7ihjVLA5SbidFFHREDc8I68oY1SwC+Lt25RR0RAZ42B8qGNUsBV3b8dUUdEQBLr4S6ijVLAvRVN0VBHRED9au0= (truncated)
Staten Island9999Freshkills Parkfalse622236745729441791AQMAAAABAAAARQAAAMbjowCJjVLAr6r2jrBHREBxmc3PhY1SwJ8fwaCxR0RAtk50R4GNUsC4HF55xkdEQILDmUyGjVLADwMzL85HREBCxyVMho1SwFOq+gvOR0RAB4btRoaNUsBkrEybzUdEQEuJ9T2GjVLAxewqK81HREBtW0M= (truncated)
Staten Island9999Freshkills Parkfalse622236745725771775AQMAAAABAAAACgAAAFJBCB4qjVLAnW47ZlxHREBJIIhBG41SwKhdBWFhR0RAFkXhuBaNUsCFCVQ5dkdEQGpvzgwhjVLALRXnFoZHREDEyGTpL41SwD5XExyBR0RA9FxrfTGNUsBTp1naeUdEQGAQxh8qjVLA7wfWc31HREDVZAg= (truncated)
Staten Island9999Freshkills Parkfalse622236745921495039AQMAAAABAAAADgAAAFlfhFdzjFLA98u/xeRHREBmDkG8a4xSwLzO+y/yR0RAwYsfP2iMUsD/Vnzg9kdEQG5Dez5ojFLAohZT4fZHREAf+9Y9aIxSwOI2EuL2R0RAqA5AnWSMUsC/VRtS+0dEQBSyNJxkjFLAIAxmU/tHREAbjiw= (truncated)
Staten Island9999Freshkills Parkfalse622236745692741631AQMAAAABAAAABQAAAAHypEjeilLAPfK0NdpHREDE33S73YpSwKCHSLX6R0RAHFNGruCKUsCZ1964+UdEQEKn9DjlilLAkjkO4eRHREAB8qRI3opSwD3ytDXaR0RA
Staten Island9999Freshkills Parkfalse622236745681731583AQMAAAABAAAABgAAAFXVc7nji1LAGgVez3xLREAv+yDa1ItSwLy4RMmBS0RAcUORT9CLUsD7okijlktEQKNTumjZi1LA7hZenqRLREBSUzwm6ItSwHmMAJyDS0RAVdVzueOLUsAaBV7PfEtEQA==
Staten Island9999Freshkills Parkfalse622236745673834495AQMAAAABAAAABAAAAOKa9+v6i1LAfkZ+mlFLREBOQabR94tSwMz8LtpfS0RA7geSw/yLUsAOyQGVU0tEQOKa9+v6i1LAfkZ+mlFLREA=
Staten Island9999Freshkills Parkfalse622236745673277439AQMAAAABAAAACgAAACvMfWZSjFLAqBazHb1KRECTx7aHQ4xSwGY8+BfCSkRAu76s/T6MUsAVk77x1kpEQPSifVJJjFLAABdO0eZKREC00c5LToxSwJBIEyflSkRAPBFL/U6MUsCHseZv3kpEQERbKEZRjFLAIPviJ+RKREBn51o= (truncated)
Staten Island9999Freshkills Parkfalse622236745672720383AQMAAAABAAAADAAAAMb1C2ESjFLAwV4t4OVKRECjZyCCA4xSwL2bNNrqSkRAoZXW9/6LUsBUIPqz/0pEQPs5jEwJjFLAu7vGkw9LREBzbpq/DoxSwJzt5sANS0RAx10I9RGMUsDA5h+HBUtEQOl6uNAUjFLAw0fzPAJLREARTko= (truncated)
Staten Island9999Freshkills Parkfalse622236745758015487AQMAAAABAAAABAAAACGkevmMilLAdpNQ/7JLREB+k+jbiopSwE9M1CO2S0RAW+DbZoyKUsA0AtaftUtEQCGkevmMilLAdpNQ/7JLREA=
Staten Island9999Freshkills Parkfalse622236745736552447AQMAAAABAAAAEwAAABCG53ESjVLA7uNx0EJKREBIKI6TA41SwD21cMtHSkRAz+HDFwONUsAsgW4ESkpEQNhqxDYDjVLAFwaoE0pKRECpDesZBI1SwP/FAJ1KSkRANEitAgWNUsA42e4tS0pEQIxZd6UFjVLAmzLynUtKREB/wbU= (truncated)
Staten Island9999Freshkills Parkfalse622236745743335423AQMAAAABAAAABAAAABTMGT1Vi1LAduFtzeFMRED8IWWsUItSwNkwQFTjTERA10BbHU+LUsAOw4d76kxEQBTMGT1Vi1LAduFtzeFMREA=
Staten Island9999Freshkills Parkfalse622236745742778367AQMAAAABAAAABwAAAMjQ938fi1LAVs71GgdNREDnlYqfEItSwHeVOhQMTURAGkUDFAyLUsApzsfuIE1EQFUP5A0Si1LARKI1HipNRECq0/X0KItSwD2kBAAbTURAmwD01CmLUsC0djT8Fk1EQMjQ938fi1LAVs71GgdNREA=
Staten Island9999Freshkills Parkfalse622236745682059263AQMAAAABAAAACAAAAEoLgQV1i1LAgfkcgTxMREB+WKIlZotSwFEopXpBTERAh+WMmmGLUsDtleZUVkxEQJQOau9ri1LABCuuNWZMREAXVfyqeotSwIh9R0hhTERAFEPU6XqLUsBTWqrCYExEQOmOYFp/i1LAJG7MYUxMREBKC4E= (truncated)
Staten Island9999Freshkills Parkfalse622236745692512255AQMAAAABAAAABwAAAALwKmvcilLAqbNYemJIREB2vJ853IpSwNmdr/50SERAWHcvAdyKUsBCN9QYgkhEQPOY8f7bilLAza/rj4JIREBeNuCd3opSwCw1kq+BSERAdJmqKOOKUsAqlHvXbEhEQALwKmvcilLAqbNYemJIREA=
Staten Island9999Freshkills Parkfalse622236745724428287AQMAAAABAAAABgAAAMZSGE5PjVLAaJpCITNJREB82CZnTY1SwMijbMQzSURAvNxR3kiNUsCgK7+dSElEQAxHbZdMjVLAZRebVU5JRECrqaUtTY1SwHvM1khLSURAxlIYTk+NUsBomkIhM0lEQA==
Staten Island9999Freshkills Parktrue622236745742221311null
Staten Island9999Freshkills Parkfalse622236745699295231AQMAAAABAAAACQAAAAGEYg3milLAh7X6E9tJREAZaS/H3IpSwBcHzi3eSURAuf/rg9yKUsBGXMgC6klEQPc6uO3bilLAfz1k//lJREC67Bp+24pSwLhX24ECSkRAzE8999yKUsBcG7DFBEpEQJjNyNXrilLAKAnxzP9JRECWddE= (truncated)
Staten Island9999Freshkills Parkfalse622236745680945151AQMAAAABAAAABQAAAFz96SLAi1LAv6fuC9ZLRED31iHQs4tSwLjAWSvaS0RAEzFkRa+LUsCXOoAF70tEQPqSMwqxi1LAc9VUvfFLREBc/ekiwItSwL+n7gvWS0RA
Staten Island9999Freshkills Parkfalse622236745691398143AQMAAAABAAAACAAAADbyXZAbi1LAUHp6WvlHREDU1qaYF4tSwDAqN676R0RAwUQgDhOLUsCGcySGD0hEQHg05WAdi1LAAJhaZR9IREAcETM+LItSwNxVi2waSERAqih46S+LUsBl9gOVCUhEQIlyqGAmi1LAkGwjOwJIREA28l0= (truncated)
Staten Island9999Freshkills Parkfalse622236745723314175AQMAAAABAAAAKwAAADKN8ttfjVLAUJjk78xIREBPs3k1VY1SwNZZh4HQSERA/6u+rFCNUsCn7aha5UhEQKQUpW5ZjVLAaqP9zfJIREAdsel8WY1SwFHP2pzySERAloK+AlqNUsC/MdhB8UhEQOsjZ41ajVLArDxZTPBIREBNQOs= (truncated)
Staten Island9999Freshkills Parkfalse622236745698181119AQMAAAABAAAABwAAAEwaBObtilLAFHgZ0XdJREDPsSLQ34pSwH2V0IZ8SURAbTw6+N6KUsADTpaGmElEQL3zEtDkilLArg5tgqFJREAPXl6u84pSwHArsImcSURAhv9MOfiKUsDgNP+wh0lEQEwaBObtilLAFHgZ0XdJREA=
Staten Island9999Freshkills Parkfalse622236745762013183AQMAAAABAAAACAAAAKlDKdKfilLAYkKWzZtLRECgAEmmm4pSwB7xfzKdS0RAIaR6+YyKUsB2k1D/sktEQFvg22aMilLANALWn7VLREDT9tu6lopSwGiz7YDFS0RAUASPmqWKUsCzuEiIwEtEQGu3KyaqilLA9NOVrqtLRECpQyk= (truncated)
Staten Island9999Freshkills Parkfalse622236745679831039AQMAAAABAAAABQAAAOnPVTaYjFLAmiVQE7lKREBaF51XiYxSwE3/3A2+SkRAf3rCJ4aMUsDRNUqyzEpEQKAIEl2YjFLApnjRTrlKREDpz1U2mIxSwJolUBO5SkRA
Staten Island9999Freshkills Parkfalse622236745729540095AQMAAAABAAAAKQAAALWoYbSCjVLAP1uNpuxHREBfzKk2eI1SwEr4syrwR0RAnZQ4rnONUsCW1mwDBUhEQK/0pQJ+jVLA9zj74BRIREAy0MTTho1SwM+FeewRSERAqDP8z4aNUsCKDkn/D0hEQNO6OsaGjVLA+gFRSQ9IRECKmx8= (truncated)
Staten Island9999Freshkills Parkfalse622236745736323071AQMAAAABAAAAFwAAAIGoyRJGjVLAhghTNnBJREBs9I/MP41SwEsYgFBySURAtAejQzuNUsDufO4ph0lEQFwy2K1AjVLAX3L/eo9JREDjJ6yvQI1SwEDIwS2PSURAKCQp/ECNUsCZuHejjElEQDpT429BjVLA+8AvVItJRECuUCM= (truncated)
Staten Island9999Freshkills Parkfalse622236745921593343AQMAAAABAAAABgAAAE9c1DKEjFLAFRksC8dHREBZX4RXc4xSwPfLv8XkR0RASZJXfnSMUsBAZMeK5kdEQGDnR1uDjFLAFsGbkOFHRECYG4Tkh4xSwO3OR7jMR0RAT1zUMoSMUsAVGSwLx0dEQA==
Staten Island9999Freshkills Parkfalse622236746167582719AQMAAAABAAAABgAAAE02J9mMjVLAjH4gNU1HREDTiTlhcY1SwPV8haFaR0RAFsj/N3qNUsCVSRI1aEdEQHg6dBSJjVLAMJzlOWNHRECjlbOcjY1SwBiZeWFOR0RATTYn2YyNUsCMfiA1TUdEQA==
Staten Island9999Freshkills Parkfalse622236745725313023AQMAAAABAAAACAAAAKmCacK3jFLAJQi4Ym9HREDEmav/s4xSwCv2LqVwR0RAOggkCKeMUsAoi2mciUdEQB+VN+mljFLAHNlvlotHREBgsmCwroxSwKzyKBOZR0RAHUoWjb2MUsDCSskYlEdEQFPAEBbCjFLAbK2JQH9HRECpgmk= (truncated)
Staten Island9999Freshkills Parkfalse622236745921036287AQMAAAABAAAADAAAACj9D6ZEjFLASZNCgQBIRECd6uHiQIxSwKd1+6IASERAsP9vKT2MUsBo2DU7AUhEQN7N6oI5jFLA86gvRgJIREALTGHqNoxSwC+sruUDSERA6dS0bzSMUsCkpNQMBkhEQNFvTSQyjFLASmvOsghIRECqQZk= (truncated)
Staten Island9999Freshkills Parkfalse622236745681829887AQMAAAABAAAABAAAADqjtwbNi1LAQF7MZr5LRECU2Fk6x4tSwFFJbFfAS0RA89LTEsSLUsBCCgbTzktEQDqjtwbNi1LAQF7MZr5LREA=
Staten Island9999Freshkills Parktrue622236745673932799null
Staten Island9999Freshkills Parkfalse622236745698508799AQMAAAABAAAACAAAAOwKhlXiilLAAzlNYC5JRECY1qId4IpSwMenLx4vSURAojQ9VuCKUsCemTlNNElEQCGXDLvgilLAyTTvOEVJREBRTn3L4IpSwJM6VYtVSURAsv67HeiKUsAhJ6MYU0lEQDSJpqjsilLAw1ocQD5JREDsCoY= (truncated)
Staten Island9999Freshkills Parkfalse622236746168467455AQMAAAABAAAABQAAAF3ydb1fjVLAay1OQGNHREAmxFgtSI1SwOMmG8RuR0RAuIiAok2NUsAnYz8md0dEQBjvBX9cjVLAIy0/K3JHREBd8nW9X41SwGstTkBjR0RA
Staten Island9999Freshkills Parkfalse622236745672818687AQMAAAABAAAACAAAAPvMF8oljFLAZv5VDMxKREA31z/rFoxSwIGabgbRSkRAxvULYRKMUsDBXi3g5UpEQFLyw7UcjFLAadrhv/VKREArQQmiJ4xSwFXvABjySkRAsHDnACyMUsCsmrvU7kpEQHAh0h4wjFLAWVry69tKRED7zBc= (truncated)
Staten Island9999Freshkills Parkfalse622236745758113791AQMAAAABAAAADQAAAP+Cb7V5ilLAZdUVkNBLREDS+7j2eIpSwIjMzMfTS0RAcQsE0XiKUsDcdJ9q1EtEQJE1R9x3ilLA4cEU4NlLRED8yekvd4pSwJt2BnPfS0RAbF7jzXaKUsAmLEsW5UtEQF9QvLZ2ilLA0RtOvOpLREBJd6Y= (truncated)
Staten Island9999Freshkills Parkfalse622236745679601663AQMAAAABAAAAIQAAACzMfz75jFLACcGj7DdKRECfEilg6oxSwC5oh+c8SkRA6TTabOmMUsC/y8lFQUpEQEvVcqTpjFLA1/1jR0FKRED+DH1K6oxSwE5D04ZBSkRArUzC/OqMUsAfZjgpQkpEQAgR94vrjFLApwFgu0JKRECaQlU= (truncated)
Staten Island9999Freshkills Parkfalse622236745696837631AQMAAAABAAAACAAAAHpj38Rzi1LAr3/MeDxIREBR46zxaItSwLz28BdASERAfuxfZ2SLUsBWVR7wVEhEQKGzfLpui1LAClk5z2RIREBoy+iXfYtSwIHgDtZfSERArN8hIoKLUsCHLdP9SkhEQIvvORt9i1LAUjWXQ0NIREB6Y98= (truncated)
Staten Island9999Freshkills Parkfalse622236745742876671AQMAAAABAAAACAAAALVpaxXtilLAe1PASvFMREDZhwM13opSwAy7zkP2TERA8GNUqdmKUsCpQz8eC01EQF+2ifzjilLAYJw9/RpNREClgCsC5IpSwAfxVf4aTURAATOf3vKKUsDajJcGFk1EQH9tOmr3ilLADqwYLAFNREC1aWs= (truncated)
Staten Island9999Freshkills Parkfalse622236745735536639AQMAAAABAAAACQAAAFVerKgtjVLA+GJxtsVJREAQrqbKHo1SwBhKf7HKSURAPuKLQRqNUsB0UBCL30lEQEqvipYkjVLAmr+hae9JREBpnKZ0M41SwOsIim7qSURAxGj8tjeNUsBl9+jZ1klEQBupNLw3jVLAlaqSz9VJREBS+/w= (truncated)
Staten Island9999Freshkills Parkfalse622236745763782655AQMAAAABAAAABQAAAGNgliHLilLAj5WO2+NKREDBzi5tyIpSwG9it+oGS0RAu1bxgc6KUsCuVUziBEtEQKIMRg3TilLAKNzsCPBKREBjYJYhy4pSwI+VjtvjSkRA
Staten Island9999Freshkills Parkfalse622236745742319615AQMAAAABAAAACAAAAI8a3MJZi1LAZMc/n7lMREB5rKniSotSwMfAuJi+TERARTtkV0aLUsAXyjFz00xEQPwhZaxQi1LA2TBAVONMREAUzBk9VYtSwHbhbc3hTERAhFTWEWOLUsBEdtUyzkxEQE1c3xdki1LAZg02gMlMRECPGtw= (truncated)
Staten Island9999Freshkills Parkfalse622236745699393535AQMAAAABAAAABgAAABZXx+bZilLAXJ/C5BtKREDY2MHI2IpSwGK2GsgpSkRAXnUAJteKUsAGwsezQEpEQCTefjTeilLAaUjOVz5KRED0gZ+/4opSwAiY0H4pSkRAFlfH5tmKUsBcn8LkG0pEQA==
Staten Island9999Freshkills Parkfalse622236745695723519AQMAAAABAAAACwAAAMdPtWDDi1LAoZytz1tIREDlLc9/wYtSwALEm3BcSERA8V9t4LyLUsCXZJYwX0hEQLhP40u5i1LA8J8uq2BIREAdbySWtYtSwIHEuqdhSERAkOASSrSLUsC60xrQYUhEQGgqRvmvi1LAXRV4oXVIREBplqY= (truncated)
Staten Island9999Freshkills Parkfalse622236745770565631AQMAAAABAAAABgAAAL+M8Qu7ilLABVI6N8BMRED3i+BMuopSwKqQ99/HTERAau9xW7iKUsDrU7c/3ExEQAYORKu6ilLA97vqedtMREBuDgU3v4pSwIGdnZ/GTERAv4zxC7uKUsAFUjo3wExEQA==
Staten Island9999Freshkills Parkfalse622236745692053503AQMAAAABAAAACAAAALI/Y7tIi1LAUxWdKxZIRECMFF9uRYtSwABFylIlSERABR1RwU+LUsAry+YxNUhEQJlOpJ5ei1LAYUDhODBIREBFjZ+WX4tSwIAsZcYrSERATCsLel2LUsDt3mQjKUhEQF2Yfk9Ni1LAbw26ShhIRECyP2M= (truncated)
Staten Island9999Freshkills Parktrue622236745691496447null
Staten Island9999Freshkills Parkfalse622236745762668543AQMAAAABAAAADQAAAMnMvqDSilLAgrRmC4BKREBM92Bw0opSwNJWGbGCSkRApebsSdKKUsAXBA/MhEpEQABiZi3SilLAPll8WYZKRECduvzL0YpSwMTZ76eLSkRA5LxJsNGKUsAQ+JMpjUpEQAzII43RilLAL38yF49KREAmVOM= (truncated)
Staten Island9999Freshkills Parkfalse622236745698279423AQMAAAABAAAACAAAAAdjDkXgilLAksMkW7ZJREBJ23gM3opSwJNMQBm3SURAKLotRd2KUsBYv2fx0ElEQHze3N7cilLA+ZyQA9pJREAZaS/H3IpSwBcHzi3eSURAAYRiDeaKUsCHtfoT20lEQGEgaZjqilLA2ustO8ZJREAHYw4= (truncated)
Staten Island9999Freshkills Parkfalse622236745769451519AQMAAAABAAAABQAAAOaTaHXEilLAzKLeUl9MRECiHMIJwopSwI4IEFl4TERAnkmchcKKUsDQhaoveExEQNM7QxHHilLAvESOVWNMREDmk2h1xIpSwMyi3lJfTERA
Staten Island9999Freshkills Parkfalse622236745736421375AQMAAAABAAAAKgAAAPYNYtkljVLAoMGf+yhKRED1SRz7Fo1SwK7tr/YtSkRAEIbncRKNUsDu43HQQkpEQMJl/UgVjVLAWxMyLUdKREBindMnF41SwDO4waRGSkRAAF87kheNUsBzHJ6iRkpEQKRTDvsXjVLAkmamhkZKREBYXJ4= (truncated)
Staten Island9999Freshkills Parktrue622236745921691647null
Staten Island9999Freshkills Parkfalse622236745681928191AQMAAAABAAAACQAAAE+kS3CIi1LAkbVIrSJMRECXioCQeYtSwDdI4qYnTERASguBBXWLUsCB+RyBPExEQOmOYFp/i1LAJG7MYUxMREAgk2Z1hYtSwMLhAVdKTERAEo+1M4qLUsBorzhBQExEQBOkhXCRi1LA14/F3TBMREAqAHo= (truncated)
Staten Island9999Freshkills Parktrue622236745696051199null
Staten Island9999Freshkills Parkfalse622236745692381183AQMAAAABAAAACAAAADRnJz7silLALShqJ0NIREBDE7Vg3YpSwMOM+x9ISERAKxvcqNyKUsClj6hrS0hEQALwKmvcilLAqLNYemJIREB0maoo44pSwCqUe9dsSERAeyozBvKKUsBHaODeZ0hEQJGg55D2ilLAR4fQBlNIREA0Zyc= (truncated)
Staten Island9999Freshkills Parkfalse622236745763553279AQMAAAABAAAACQAAAIkt8fzjilLAYDokEWNKREAlmiUe1YpSwJ565QloSkRA9Y6J9tOKUsAS1TZWbUpEQOeGhijTilLAx5TjnHhKREDJzL6g0opSwIK0ZguASkRAydGT5tqKUsDclGXDjEpEQFSmdcXpilLA34yayodKRECnYZo= (truncated)
Staten Island9999Freshkills Parkfalse622236746169122815AQMAAAABAAAAHwAAAHg6dBSJjVLAMJzlOWNHREAWyP83eo1SwJVJEjVoR0RATISqr3WNUsAIF4UNfUdEQDCY3QOAjVLAz4TZ6oxHREBvQmjgjo1SwDoHo++HR0RAzcxrl4+NUsAGAuGlhEdEQKUCd7+PjVLA2zRwoINHREALQHY= (truncated)
Staten Island9999Freshkills Parkfalse622236745680257023AQMAAAABAAAACAAAAMv1sAJ/jFLAcpOKLq5KREBk4/ojcIxSwBpC/CizSkRAH7MammuMUsD+KcoCyEpEQP19BO91jFLAoLU04tdKREBbrDJFfoxSwI5/sxfVSkRAf3rCJ4aMUsDRNUqyzEpEQFoXnVeJjFLATf/cDb5KREDL9bA= (truncated)
Staten Island9999Freshkills Parkfalse622236745672916991AQMAAAABAAAACAAAAHNumr8OjFLAnO3mwA1LRED7OYxMCYxSwLu7xpMPS0RAaicA9gaMUsAFuptQGktEQDmF8sQHjFLAJ/EeZRlLRECgGY+oCYxSwPpCVQAXS0RATQaFdguMUsAxYeF1FEtEQNcrki0NjFLAOGqIxxFLREBzbpo= (truncated)
Staten Island9999Freshkills Parkfalse622236745690710015AQMAAAABAAAABQAAACb5OGLcilLAURRXke1IREDfA6Iq3YpSwAHiVIL9SERAjlqPpN2KUsD/cP+mBElEQAWySBjhilLAZwy7z/RIREAm+Thi3IpSwFEUV5HtSERA
Staten Island9999Freshkills Parkfalse622236745761882111AQMAAAABAAAACgAAALIdTT2zilLA7ddL+4FLREDRx5ceqYpSwBqAPl2FS0RAlwJC5qiKUsDU7QnLhUtEQCcu9q2iilLAtVg/M5FLREAdq0/NoYpSwCvYN7eSS0RAqUMp0p+KUsBiQpbNm0tEQGu3KyaqilLA9NOVrqtLRECiLss= (truncated)
Staten Island9999Freshkills Parkfalse622236745750872063AQMAAAABAAAABgAAAAYORKu6ilLA97vqedtMREBq73FbuIpSwOtTtz/cTERAQv5NjLSKUsDKYGcwBE1EQFzYInTAilLAKfO+NQBNREBr5eX/xIpSwATDXFvrTERABg5Eq7qKUsD3u+p520xEQA==
Brooklyn133133Kensingtontrue622236751937470463null
Brooklyn133133Kensingtontrue622236751857385471null
Brooklyn133133Kensingtontrue622236751873212415null
Brooklyn133133Kensingtontrue622236751936913407null
Brooklyn133133Kensingtontrue622236751933079551null
Brooklyn133133Kensingtontrue622236751873376255null
Brooklyn133133Kensingtontrue622236751937077247null
Brooklyn133133Kensingtontrue622236751872098303null
Brooklyn133133Kensingtontrue622236751872819199null
Brooklyn133133Kensingtontrue622236751937241087null
Brooklyn133133Kensingtontrue622236751936684031null
Brooklyn133133Kensingtontrue622236751871705087null
Brooklyn133133Kensingtontrue622236751938125823null
Brooklyn133133Kensingtontrue622236751873146879null
Brooklyn133133Kensingtontrue622236751937568767null
Brooklyn133133Kensingtontrue622236751872589823null
Brooklyn133133Kensingtontrue622236751933014015null
Brooklyn133133Kensingtontrue622236751873310719null
Brooklyn133133Kensingtontrue622236751937011711null
Brooklyn133133Kensingtontrue622236751872032767null
Brooklyn133133Kensingtontrue622236751872753663null
Brooklyn133133Kensingtontrue622236751933177855null
Brooklyn133133Kensingtontrue622236751937175551null
Brooklyn133133Kensingtontrue622236751933341695null
Brooklyn133133Kensingtontrue622236751871639551null
Brooklyn133133Kensingtontrue622236751937339391null
Brooklyn133133Kensingtontrue622236751938060287null
Brooklyn133133Kensingtontrue622236751873081343null
Brooklyn133133Kensingtontrue622236751871803391null
Brooklyn133133Kensingtontrue622236751873245183null
Brooklyn133133Kensingtontrue622236751936946175null
Brooklyn133133Kensingtontrue622236751871967231null
Brooklyn133133Kensingtontrue622236751872688127null
Brooklyn133133Kensingtontrue622236751873409023null
Brooklyn133133Kensingtontrue622236751937110015null
Brooklyn133133Kensingtontrue622236751872851967null
Brooklyn133133Kensingtontrue622236751937273855null
Brooklyn133133Kensingtontrue622236751872294911null
Brooklyn133133Kensingtontrue622236751937994751null
Brooklyn133133Kensingtontrue622236751873015807null
Brooklyn133133Kensingtontrue622236751936716799null
Brooklyn133133Kensingtontrue622236751937437695null
Brooklyn133133Kensingtontrue622236751871901695null
Brooklyn133133Kensingtontrue622236751937601535null
Brooklyn133133Kensingtontrue622236751933046783null
Brooklyn133133Kensingtontrue622236751938322431null
Brooklyn133133Kensingtontrue622236751873343487null
Brooklyn133133Kensingtontrue622236751937044479null
Brooklyn133133Kensingtontrue622236751872786431null
Brooklyn133133Kensingtontrue622236751937208319null
Brooklyn133133Kensingtontrue622236751871672319null
Brooklyn133133Kensingtontrue622236751937372159null
Brooklyn133133Kensingtontrue622236751936815103null
Brooklyn133133Kensingtontrue622236751871836159null
Brooklyn133133Kensingtontrue622236751872557055null
Brooklyn133133Kensingtontrue622236751932981247null
Brooklyn133133Kensingtontrue622236751938256895null
Brooklyn133133Kensingtontrue622236751873277951null
Brooklyn133133Kensingtontrue622236751936978943null
Brooklyn133133Kensingtontrue622236751872720895null
Brooklyn133133Kensingtontrue622236751872884735null
Brooklyn133133Kensingtontrue622236751933308927null
Brooklyn133133Kensingtontrue622236751937306623null
Brooklyn133133Kensingtontrue622236751857221631null
Brooklyn133133Kensingtontrue622236751873048575null
Brooklyn133133Kensingtontrue622236751936749567null
Brooklyn133133Kensingtontrue622236751871770623null
Brooklyn133133Kensingtonfalse622236751617425407AQMAAAABAAAABwAAAFuk1FT4fVLAaMHh5nxRRECVVYdY9H1SwD3Fi8d9UURADxBsX/d9UsBOjuzxklFEQAULzkP5fVLAuN//AaBRRECTVndQ/H1SwNAtCQCfUURAb3JF6AB+UsBq1q8nilFEQFuk1FT4fVLAaMHh5nxRREA=
Brooklyn133133Kensingtonfalse622236751877046271AQMAAAABAAAABwAAAEGj2xvoflLAoddU7BdSRECDgRJf4H5SwCrlDPAdUkRAYSTMy9l+UsBwJFt5I1JEQO2jvNjTflLA02SqbChSREDWWrny1X5SwGVRuqsrUkRAHANr2OR+UsBt5Ja+JlJEQEGj2xvoflLAoddU7BdSREA=
Brooklyn133133Kensingtonfalse622236751872458751AQMAAAABAAAABwAAANEgXKx6flLAQcX68e1QREAZnLrUdX5SwEXm0YvvUERAs7lwPXF+UsCcDwRkBFFEQCyjM4t7flLAtKykTxRRREA4YGM/fn5SwLNpy2oTUURAhY2b4n1+UsA3GTSeD1FEQNEgXKx6flLAQcX68e1QREA=
Brooklyn133133Kensingtontrue622236751871999999null
Brooklyn133133Kensingtonfalse622236751933276159AQMAAAABAAAABgAAAJNWd1D8fVLA0C0JAJ9RREAFC85D+X1SwLjf/wGgUURAky60m/59UsDJ767lxFFEQA27WgYCflLAhN+oxMNRREDdCiueBn5SwAyAOuyuUURAk1Z3UPx9UsDQLQkAn1FEQA==
Brooklyn133133Kensingtonfalse622236751876882431AQMAAAABAAAACAAAAAyzeGDpflLAYhwA8BZSREBBo9sb6H5SwKHXVOwXUkRAHANr2OR+UsBt5Ja+JlJEQFBI/ybvflLAlUNhqjZSREC0zLMM/n5SwFigIr0xUkRALIZ1i/5+UsAfvWh9L1JEQLRsbafuflLAqiI0+RtSREAMs3g= (truncated)
Brooklyn133133Kensingtonfalse622236751938158591AQMAAAABAAAABgAAAPOiYf1QflLAByZ+nZFSRECuJFQXQn5SwDEvE4qWUkRA3uhx7D5+UsBjMLvqpFJEQNvH5kpHflLAoYs4I55SREDgVFj3Un5SwHEgOquUUkRA86Jh/VB+UsAHJn6dkVJEQA==
Brooklyn133133Kensingtonfalse622236751875506175AQMAAAABAAAACAAAAH/eC4drflLAF7Q8oN9QREB2wvSuYH5SwIGh+jXjUERAkiKR8Vt+UsDtGiWu51BEQAgOuApYflLAfDblZPlQREBvQ2RYYn5SwKmGklAJUURAs7lwPXF+UsCcDwRkBFFEQBmcutR1flLARebRi+9QREB/3gs= (truncated)
Brooklyn133133Kensingtonfalse622236751936782335AQMAAAABAAAACQAAACzUaK99flLAJ2tl14JSREDP+mvJbn5SwO5DJ8SHUkRAbjHMMWp+UsCSTSqdnFJEQBH63i9uflLAX9E8yKJSREAE7b91dX5SwNFT2jGhUkRAA4jWq4R+UsBX1BnYnVJEQML7W5iFflLAOCL0pJ1SREB7Rdw= (truncated)
Brooklyn133133Kensingtonfalse622236751857319935AQMAAAABAAAABgAAAIIjIicff1LA7++ImFdSREDtoN/4HH9SwI1HWoBhUkRAIoC1Ryd/UsDInhZscVJEQHrUUoUxf1LA1/bvCG5SREBqbveYJn9SwM4+8qFgUkRAgiMiJx9/UsDv74iYV1JEQA==
Brooklyn133133Kensingtonfalse622236751933112319AQMAAAABAAAACAAAANq8cCgTflLAyqZKEzJSRECf3uGPDn5SwDhJFpgzUkRAdwxdVg9+UsBaq8O4OFJEQHrwDZcSflLA1fkX0U5SREBdN7n3E35SwB2yGndYUkRAUgWc3hh+UsBXI2zYVlJEQIwkdXYdflLA4aSp/0FSREDavHA= (truncated)
Brooklyn133133Kensingtonfalse622236751937535999AQMAAAABAAAABwAAAGXD31O5flLAxhigJftRREB2j2sHt35SwFTBM+j7UURAJSUmcLJ+UsC2pQfBEFJEQFD/jL68flLANHLrrCBSREBwl37cvH5SwMO9BKMgUkRATYF/ibl+UsAGpXM0/VFEQGXD31O5flLAxhigJftRREA=
Brooklyn133133Kensingtontrue622236751877013503null
Brooklyn133133Kensingtonfalse622236751938289663AQMAAAABAAAABwAAAH87dgTPflLA3aFLmshSREC9aFoewH5SwG2/aIfNUkRAAUFvPb1+UsATCp2Z2lJEQHJVohfOflLAbw1c2dZSREDBgg/m1X5SwLyEbhXVUkRAiBumsNZ+UsAgQ1l01FJEQH87dgTPflLA3aFLmshSREA=
Brooklyn133133Kensingtonfalse622236751858368511AQMAAAABAAAABgAAAGCGxjMPf1LAAyT6C6BSREDi4M5NAH9SwB2oVfmkUkRAcztnW/x+UsBh+V3mtlJEQMbBKOUOf1LA6EEXhqhSREBc+TC8En9SwBuE4IClUkRAYIbGMw9/UsADJPoLoFJEQA==
Brooklyn133133Kensingtonfalse622236751872425983AQMAAAABAAAACAAAADhgYz9+flLAs2nLahNRREAsozOLe35SwLSspE8UUURAT47n83Z+UsDh3usnKVFEQO+jvkGBflLAneaXEzlRREBzq4fSgX5SwP17ueM4UURAxlGhNoF+UsDFpImBMlFEQN9+Qs5/flLAsfwLwCNRREA4YGM= (truncated)
Brooklyn133133Kensingtonfalse622236751933243391AQMAAAABAAAACQAAAA27WgYCflLAhN+oxMNRRECTLrSb/n1SwMnvruXEUURAHMxUi/99UsCnHwVcy1FEQCnT7qsAflLAFwFvI9NRREAct22yAn5SwGnKB5DjUURACQfUowN+UsC3++Dj6VFEQAoYULwHflLAgARpiehRREDDmyI= (truncated)
Brooklyn133133Kensingtonfalse622236751877308415AQMAAAABAAAABwAAANA9HiyyflLAKsS9MrBRREDto16Zq35SwKGyJV+yUURAhJ0dAqd+UsC+hs83x1FEQMcbXFCxflLAWIGcI9dRRECMc4qvtX5SwBZSjLHVUURADJleB7N+UsDJ0u02uVFEQNA9HiyyflLAKsS9MrBRREA=
Brooklyn133133Kensingtonfalse622236751857287167AQMAAAABAAAACAAAAHrUUoUxf1LA1/bvCG5SREAigLVHJ39SwMieFmxxUkRAEBm7sCJ/UsCFj05FhlJEQM4FhrQqf1LAw2pIppJSREAOYLMgP39SwI/dAZaCUkRAm3Zi0j9/UsDikdVuf1JEQLpltTAzf1LA50pRFXBSREB61FI= (truncated)
Brooklyn133133Kensingtonfalse622236751931244543AQMAAAABAAAABQAAADYY5W4yflLA+hE0C69SREBFdWmZLn5SwM6tkU+wUkRAITioFS5+UsA1gJKlslJEQI2xqw0xflLAhlAUKrBSREA2GOVuMn5SwPoRNAuvUkRA
Brooklyn133133Kensingtontrue622236751937961983null
Brooklyn133133Kensingtonfalse622236751937503231AQMAAAABAAAACgAAAHCXfty8flLAw70EoyBSREBQ/4y+vH5SwDRy66wgUkRAG2NFJ7h+UsCDXtSFNVJEQKdrwHXCflLAmJPDcUVSRECsl4Vb0X5SwEi9sYRAUkRA1lq58tV+UsBlUbqrK1JEQO2jvNjTflLA02SqbChSRED7TwA= (truncated)
Brooklyn133133Kensingtonfalse622236751875309567AQMAAAABAAAABQAAAI/Jx15tflLAtVNtQtdQRED0ZJE1aX5SwF5T4ivbUERAdsL0rmB+UsCBofo141BEQH/eC4drflLAF7Q8oN9QRECPycdebX5SwLVTbULXUERA
Brooklyn133133Kensingtonfalse622236751857876991AQMAAAABAAAABAAAAJt2YtI/f1LA4pHVbn9SREANYLMgP39SwJDdAZaCUkRAUfHMH0F/UsCnG/8DgVJEQJt2YtI/f1LA4pHVbn9SREA=
Brooklyn133133Kensingtonfalse622236751857418239AQMAAAABAAAABgAAABAZu7Aif1LAhY9ORYZSRECM+NbKE39SwFmquzKLUkRAYIbGMw9/UsADJPoLoFJEQFz5MLwSf1LAGoTggKVSREDOBYa0Kn9SwMNqSKaSUkRAEBm7sCJ/UsCFj05FhlJEQA==
Brooklyn133133Kensingtonfalse622236751934128127AQMAAAABAAAABwAAAFIFnN4YflLAVyNs2FZSREBdN7n3E35SwB2yGndYUkRADq4U8BV+UsAv3oBDZlJEQC/lyEIZflLAn0XIX31SRECdR9mUHn5SwKwRrp17UkRAlZq0LCN+UsDHi9bEZlJEQFIFnN4YflLAVyNs2FZSREA=
Brooklyn133133Kensingtonfalse622236751871934463AQMAAAABAAAACwAAADNjLjFHflLA9ZPyS/tQRED5HWuIQn5SwLU1S73/UERAk673Ezx+UsCJ8yHiBVFEQGxUb1k6flLA491zgQdRREBoSLPkN35SwMl0Nc0JUURAYLL4rTN+UsBQSQivDVFEQPPOX70wflLA7G05exBRREBxmx0= (truncated)
Brooklyn133133Kensingtonfalse622236751877275647AQMAAAABAAAACQAAAItziq+1flLAFlKMsdVRREDHG1xQsX5SwFiBnCPXUURAZOMYuax+UsCpXVv861FEQHaPawe3flLAVMEz6PtRREBlw99TuX5SwMYYoCX7UURA45/9brh+UsArw/hc8lFEQPNdute2flLASqcZPuFRREBTxsU= (truncated)
Brooklyn133133Kensingtonfalse622236751938093055AQMAAAABAAAACQAAAC+qEMk3flLA3xGqnYZSREC3CgbjKH5SwDjkI4qLUkRACYQoSyR+UsBmcRBjoFJEQEV1aZkuflLAzq2RT7BSREA2GOVuMn5SwPoRNAuvUkRAVSQkpzZ+UsDuy92dq1JEQN7ocew+flLAYzC76qRSRECuJFQ= (truncated)
Brooklyn133133Kensingtontrue622236751937634303null
Brooklyn133133Kensingtonfalse622236751875440639AQMAAAABAAAABwAAAJIikfFbflLA7BolrudQREDoDGM9W35SwES4C1joUERAz+nU8Eh+UsBaYBih+VBEQDNjLjFHflLA9pPyS/tQREC0da4lSX5SwF56WFH+UERACA64Clh+UsB8NuVk+VBEQJIikfFbflLA7BolrudQREA=
Brooklyn133133Kensingtonfalse622236751857254399AQMAAAABAAAACAAAAOPvGj0Mf1LAIyI1YEBSREBJx15bCH9SwCxI4KhBUkRACrdSxAN/UsBhsvSBVlJEQLjgERMOf1LAu8G9bWZSREDtoN/4HH9SwI1HWoBhUkRAgiMiJx9/UsDv74iYV1JEQBohZ+0Yf1LALNL4CVBSREDj7xo= (truncated)
Brooklyn133133Kensingtonfalse622236751938387967AQMAAAABAAAABgAAAMIN7pqcflLAddQKnLJSREDu5sdWln5SwAzhW660UkRAuy2L6pl+UsAEur0o2lJEQLEbElKiflLAqip2YddSREDiZIzppn5SwKAYQYjCUkRAwg3umpx+UsB11AqcslJEQA==
Brooklyn133133Kensingtonfalse622236751872983039AQMAAAABAAAABgAAAGxjw5QdflLAy2ycskZRREAJHTUFFX5SwNam5YZJUURAJly2lxh+UsDDCRsAb1FEQNj2xUojflLA0GDedmtRRECD/mfiJ35SwCUXkp5WUURAbGPDlB1+UsDLbJyyRlFEQA==
Brooklyn133133Kensingtonfalse622236751872065535AQMAAAABAAAABwAAAPPOX70wflLA7G05exBRRECTTLzTIn5SwPmVk7gdUURALiBBVRp+UsAHwLS8JVFEQJY3YywiflLAkytl2jFRREC70JMRMX5SwLATFe4sUURAcZsdqTV+UsATWuQVGFFEQPPOX70wflLA7G05exBRREA=
Brooklyn133133Kensingtonfalse622236751876947967AQMAAAABAAAACAAAACyGdYv+flLAH71ofS9SREC0zLMM/n5SwFigIr0xUkRAScdeWwh/UsAsSOCoQVJEQOPvGj0Mf1LAIyI1YEBSREASkbjMC39SwL1netU/UkRAb6UCegN/UsBMUi+kNVJEQBeAuNH+flLA6ayz0y9SREAshnU= (truncated)
Brooklyn133133Kensingtonfalse622236751938224127AQMAAAABAAAACQAAAK9apc+1flLApTI/m71SREDiZIzppn5SwKAYQYjCUkRAsRsSUqJ+UsCqKnZh11JEQHGZHYanflLAy/Mza99SREByYXbfqX5SwPFANuzeUkRAGdIcF71+UsDgpCSi2lJEQAFBbz29flLAEwqdmdpSREC9aFo= (truncated)
Brooklyn133133Kensingtonfalse622236751936847871AQMAAAABAAAACAAAAJj82+OWflLA4O2/1o1SREB7Rdz9h35SwJL9nMOSUkRAwvtbmIV+UsA4IvSknVJEQPTpldiTflLAIjoIkJpSREDu5sdWln5SwAzhW660UkRAwg3umpx+UsB11AqcslJEQK4kZjKhflLAuMnqwp1SRECY/Ns= (truncated)
Brooklyn133133Kensingtonfalse622236751858302975AQMAAAABAAAACAAAAEMO/v71flLAFRJpDZVSREC9RAkZ535SwNdeqfqZUkRAA+3OgeJ+UsC/4d/TrlJEQOs4ndDsflLAOpfkv75SREAAuqtD9n5SwMiy65+7UkRAcztnW/x+UsBh+V3mtlJEQOLgzk0Af1LAHahV+aRSREBDDv4= (truncated)
Brooklyn133133Kensingtonfalse622236751934095359AQMAAAABAAAACAAAAJ1H2ZQeflLArBGunXtSREAv5chCGX5SwJ9FyF99UkRAHo2Dqxl+UsAb0CA4gFJEQHuwDmsdflLAyU+QvJlSREB0mRmfHn5SwKi26EKiUkRACYQoSyR+UsBmcRBjoFJEQLcKBuMoflLAOOQjiotSRECdR9k= (truncated)
Brooklyn133133Kensingtonfalse622236751872360447AQMAAAABAAAACAAAAAaMDJquflLAcwfuuIpRRECZJ3PipX5SwItVz5qNUURAM1M0S6F+UsBYIWRzolFEQO2jXpmrflLAobIlX7JRREDQPR4ssn5SwCrEvTKwUURATgz9BLF+UsDnFL0PpFFEQID6xbuvflLAgunWWZdRREAGjAw= (truncated)
Brooklyn133133Kensingtonfalse622236751873114111AQMAAAABAAAABgAAACvdMOoSflLAIaZiHHdRRED7Shf9CX5SwHF8jAN5UURAW6TUVPh9UsBoweHmfFFEQG9yRegAflLAatavJ4pRREAlbLPND35SwKlPeTuFUURAK90w6hJ+UsAhpmIcd1FEQA==
Brooklyn133133Kensingtonfalse622236751872196607AQMAAAABAAAABgAAAIhy58SpflLArzZOHFZRREA/9d3nl35SwGcifcpZUURAs3mJnJZ+UsAMBfARWlFEQHammSugflLAemqZ1mhRRECi9nweq35SwN4W1DdlUURAiHLnxKl+UsCvNk4cVlFEQA==
Brooklyn133133Kensingtonfalse622236751871737855AQMAAAABAAAACgAAAKVccKp8flLAgyH0601RREDlKDfFbX5SwJDUldhSUURALtjSLWl+UsDll/iwZ1FEQC+Su3tzflLAYCjInHdRREALJQthgn5SwCTXHLByUURAtp5b+IZ+UsCpk6vXXVFEQAD4Rr6GflLAmcTufV1RRED2F9A= (truncated)
Brooklyn133133Kensingtonfalse622236751931179007AQMAAAABAAAABwAAAAmEKEskflLAZnEQY6BSREB0mRmfHn5SwKm26EKiUkRAK9x9FyF+UsChkx/Ds1JEQIdU3kIiflLAz6NziLxSREAhOKgVLn5SwDaAkqWyUkRARXVpmS5+UsDOrZFPsFJEQAmEKEskflLAZnEQY6BSREA=
Brooklyn133133Kensingtontrue622236751877079039null
Brooklyn133133Kensingtonfalse622236751938355199AQMAAAABAAAABQAAALEbElKiflLAqip2YddSREC7LYvqmX5SwAS6vSjaUkRAsa5ZrZp+UsCNebch4lJEQHGZHYanflLAy/Mza99SRECxGxJSon5SwKoqdmHXUkRA
Brooklyn133133Kensingtontrue622236751937437695null
Brooklyn133133Kensingtonfalse622236751858434047AQMAAAABAAAACQAAAAPtzoHiflLAv+Hf065SREDbnsab035SwCCXDsGzUkRAfzt2BM9+UsDdoUuayFJEQIgbprDWflLAIENZdNRSRECpvTwo3n5SwGeIZYTOUkRAMLeyrOp+UsCOpsWcxFJEQAZ957LrflLA4zNv0cNSREDrOJ0= (truncated)
Brooklyn133133Kensingtonfalse622236751872950271AQMAAAABAAAACQAAANj2xUojflLA0GDedmtRREAlXLaXGH5SwMQJGwBvUURAeRq/PBl+UsDgx1LDdVFEQCvdMOoSflLAIaZiHHdRREAlbLPND35SwKlPeTuFUURAAappGxp+UsCcg5InlVFEQN+C2gApflLAhshAO5BRRED9vX4= (truncated)
Brooklyn133133Kensingtonfalse622236751616376831AQMAAAABAAAABgAAAC4gQVUaflLAB8C0vCVRREBUdiNUEn5SwAI2hkotUURACR01BRV+UsDWpuWGSVFEQGxjw5QdflLAy2ycskZRRECWN2MsIn5SwJMrZdoxUURALiBBVRp+UsAHwLS8JVFEQA==
Brooklyn133133Kensingtonfalse622236751937732607AQMAAAABAAAABQAAAG4xzDFqflLAkk0qnZxSRECWOp/3Yn5SwL1ktwCfUkRAeOOJkmN+UsCItVYZpVJEQBH63i9uflLAX9E8yKJSREBuMcwxan5SwJJNKp2cUkRA
Brooklyn133133Kensingtonfalse622236751858270207AQMAAAABAAAABAAAAAG6q0P2flLAyLLrn7tSREDrOJ3Q7H5SwDqX5L++UkRABn3nsut+UsDjM2/Rw1JEQAG6q0P2flLAyLLrn7tSREA=
Brooklyn133133Kensingtontrue622236751857352703null
Brooklyn133133Kensingtonfalse622236751872327679AQMAAAABAAAACAAAALN5iZyWflLADAXwEVpRRECwEMFxin5SwD/XnbFcUURAtp5b+IZ+UsCpk6vXXVFEQAslC2GCflLAJNccsHJRREDVkwqvjH5SwHKz35uCUURAHARdlJt+UsDULRmvfVFEQHammSugflLAemqZ1mhRRECzeYk= (truncated)
Brooklyn133133Kensingtonfalse622236751933145087AQMAAAABAAAACAAAAN1tV3INflLAYpxJTg1SREBY0l8hCX5SwMZUbLsOUkRAy7o7ogp+UsAo5urRGFJEQI63eQkMflLA6OQA5SJSRECf3uGPDn5SwDhJFpgzUkRA2rxwKBN+UsDKpkoTMlJEQEioR8AXflLA4C+dOh1SREDdbVc= (truncated)
Brooklyn133133Kensingtonfalse622236751938027519AQMAAAABAAAADQAAAGJAD3tkflLAWfvi13dSREAiRRWVVX5SwFmdicR8UkRA86Jh/VB+UsAHJn6dkVJEQOBUWPdSflLAcSA6q5RSREAwJStPWH5SwDUwwVWQUkRAT4sy9Vx+UsAFeOWCjFJEQM3k3YlgflLADNFTPYlSREAgm+s= (truncated)
Brooklyn133133Kensingtonfalse622236751875375103AQMAAAABAAAABgAAAC7muJd3flLA2IIdps1QRECPycdebX5SwLVTbULXUERAf94Lh2t+UsAXtDyg31BEQBmcutR1flLARebRi+9QREDRIFysen5SwEHF+vHtUERALua4l3d+UsDYgh2mzVBEQA==
Brooklyn133133Kensingtontrue622236751936651263null
Brooklyn133133Kensingtonfalse622236751872622591AQYAAAACAAAAAQMAAAABAAAABQAAAHOrh9KBflLA/Xu54zhRREDvo75BgX5SwJ3mlxM5UURApVxwqnx+UsCDIfTrTVFEQHJxMRGFflLArfH55lpRREBzq4fSgX5SwP17ueM4UURAAQMAAAABAAAABAAAALAQwXGKflLAP9edsVw= (truncated)
Brooklyn133133Kensingtonfalse622236751872163839AQMAAAABAAAACAAAAKL2fB6rflLA3hbUN2VRREB2ppkroH5SwHpqmdZoUURAHARdlJt+UsDULRmvfVFEQJknc+KlflLAi1XPmo1RREAGjAyarn5SwHMH7riKUURApgB+RK5+UsBx7Tz+hlFEQKy81p6sflLATfgyBXZRRECi9nw= (truncated)
Brooklyn133133Kensingtonfalse622236751933439999AQMAAAABAAAABgAAAAoYULwHflLAgARpiehRREAJB9SjA35SwLf74OPpUURAWNJfIQl+UsDGVGy7DlJEQN1tV3INflLAYpxJTg1SREB1JSwKEn5SwCctsXX4UURAChhQvAd+UsCABGmJ6FFEQA==
Manhattan236236Upper East Side Northtrue622236722201296895null
Manhattan236236Upper East Side Northtrue622236722202345471null
Manhattan236236Upper East Side Northtrue622236722201591807null
Manhattan236236Upper East Side Northtrue622236722202116095null
Manhattan236236Upper East Side Northtrue622236722202640383null
Manhattan236236Upper East Side Northtrue622236722210209791null
Manhattan236236Upper East Side Northtrue622236722210504703null
Manhattan236236Upper East Side Northtrue622236722201133055null
Manhattan236236Upper East Side Northtrue622236722202181631null
Manhattan236236Upper East Side Northtrue622236722204803071null
Manhattan236236Upper East Side Northtrue622236722201952255null
Manhattan236236Upper East Side Northtrue622236722210045951null
Manhattan236236Upper East Side Northtrue622236722201493503null
Manhattan236236Upper East Side Northtrue622236722202017791null
Manhattan236236Upper East Side Northtrue622236722202542079null
Manhattan236236Upper East Side Northtrue622236722201264127null
Manhattan236236Upper East Side Northtrue622236722202312703null
Manhattan236236Upper East Side Northtrue622236722210406399null
Manhattan236236Upper East Side Northtrue622236722202083327null
Manhattan236236Upper East Side Northtrue622236722210177023null
Manhattan236236Upper East Side Northtrue622236722201329663null
Manhattan236236Upper East Side Northtrue622236722202378239null
Manhattan236236Upper East Side Northtrue622236722204999679null
Manhattan236236Upper East Side Northtrue622236722210242559null
Manhattan236236Upper East Side Northtrue622236722201395199null
Manhattan236236Upper East Side Northtrue622236722201919487null
Manhattan236236Upper East Side Northtrue622236722202443775null
Manhattan236236Upper East Side Northtrue622236722201165823null
Manhattan236236Upper East Side Northtrue622236722202214399null
Manhattan236236Upper East Side Northtrue622236722210308095null
Manhattan236236Upper East Side Northtrue622236722201460735null
Manhattan236236Upper East Side Northtrue622236722202509311null
Manhattan236236Upper East Side Northtrue622236722210078719null
Manhattan236236Upper East Side Northtrue622236722201231359null
Manhattan236236Upper East Side Northtrue622236722202279935null
Manhattan236236Upper East Side Northtrue622236722210373631null
Manhattan236236Upper East Side Northtrue622236722202050559null
Manhattan236236Upper East Side Northtrue622236722209619967null
Manhattan236236Upper East Side Northtrue622236722210144255null
Manhattan236236Upper East Side Northfalse622236722202476543AQMAAAABAAAACQAAAP+f8/YZfVLA8JO5MJhjREBrKmJ/Fn1SwMBMVVWZY0RASm2uPBZ9UsC69joMmmNEQGVAqBEOfVLA+OxhcbBjRED4yyvzCn1SwOJopQC5Y0RANK6ovhB9UsBSi3bzwWNEQDoh0K8ffVLAqGtmBr1jRECEoOs= (truncated)
Manhattan236236Upper East Side Northfalse622236722214010879AQMAAAABAAAABwAAAFlqf9difVLAzzwixkFkREBAHOl2VH1SwNN+woNGZERA36nY2k99UsC1pIplW2REQCWD/h5WfVLAU/pDEmVkRECsbjoEWX1SwNVJZE9dZERA0QvFUGB9UsB/BPqnSGREQFlqf9difVLAzzwixkFkREA=
Manhattan236236Upper East Side Northfalse622236722201985023AQMAAAABAAAACQAAANVekW+gfVLAgSja2GtjREDskrJ+kX1SwHgIaMZwY0RATIEB44x9UsB2o9enhWNEQGwvQziXfVLAqenHm5VjREC+95UYo31SwIuG/LCRY0RAiigaj6V9UsBy2+XrimNEQHTdfzWqfVLArD06Vn5jREDqm9U= (truncated)
Manhattan236236Upper East Side Northfalse622236722201821183AQMAAAABAAAACQAAACjlj5ySfVLAE3tMfapjREC4+Iarg31SwPA60mqvY0RAmoG9D399UsA7N11MxGNEQBXrEGWJfVLAHf9wQNRjREB2AA0Di31SwMfO57fTY0RAJrmEwo59UsAejzBqyWNEQNrP5mGWfVLAiDRhibRjREDq/a8= (truncated)
Manhattan236236Upper East Side Northfalse622236722210340863AQMAAAABAAAACAAAAIcX9JT4fFLAoKhTo/BjREBuepBj9nxSwG8xYFzxY0RAR2JAke98UsBKfc56BGREQOufj07qfFLADa11mBJkREBW+ktc73xSwBUvVGYaZERAUyuxTf58UsDa9V15FWREQChA++kCfVLA+GvWlwBkRECHF/Q= (truncated)
Manhattan236236Upper East Side Northfalse622236722208505855AQMAAAABAAAABQAAACdLlxO3fVLAIgROBkRjRECtcvf7s31SwNpZ0QlSY0RAPeXACLh9UsDu+mVKWGNEQFteC3C9fVLAJ7n5YkljREAnS5cTt31SwCIETgZEY0RA
Manhattan236236Upper East Side Northfalse622236722215190527AQMAAAABAAAABwAAAFTpiHgufVLAfpVN2rNkREAqu8aGH31SwNOnhce4ZERAgfdTLBt9UsBeyQ5/zGREQFvKzHQrfVLASNILXdpkREBvJaJiM31SwJCKHbjDZERAsniXUzV9UsD28R1wvmREQFTpiHgufVLAfpVN2rNkREA=
Manhattan236236Upper East Side Northfalse622236722204835839AQMAAAABAAAABwAAAAJLPg5UfVLAl601h/BiREBJMmN+TH1SwODmSFIFY0RAWgScR0x9UsCgxivoBWNEQFTqeYBTfVLAJQIDDxFjREBw5SVxYn1SwJAdvyEMY0RAnyHuT2V9UsDXNKAg/2JEQAJLPg5UfVLAl601h/BiREA=
Manhattan236236Upper East Side Northfalse622236722209849343AQMAAAABAAAABAAAAETav5LYfFLAQhrp2EJkREB7C9kv1nxSwIaybmtJZERACXj8Mdd8UsCZ8VoWSWREQETav5LYfFLAQhrp2EJkREA=
Manhattan236236Upper East Side Northfalse622236722209685503AQMAAAABAAAABQAAACp6OozJfFLARtBQBGxkREDWlMXZwXxSwB7BWDWBZERAwPirZcl8UsC8nFuRh2REQGwr9/jNfFLAiQKf2XJkREAqejqMyXxSwEbQUARsZERA
Manhattan236236Upper East Side Northfalse622236722202836991AQMAAAABAAAABQAAAE9FueZqfVLA9HMewStkRECbLlQEaH1SwMQGnbQsZERAqR5kKGR9UsCq4lowPmREQEyO6vBnfVLA+PTb4TNkREBPRbnman1SwPRzHsErZERA
Manhattan236236Upper East Side Northfalse622236722209521663AQMAAAABAAAABwAAALgbmurcfFLAY7LC7G1kREBsK/f4zXxSwIkCn9lyZERAwPirZcl8UsC8nFuRh2REQAbCFAvafFLA9gdymJVkREArz0mj4nxSwF7ASsOSZERAdbbEP+d8UsC3e4zhfWREQLgbmurcfFLAY7LC7G1kREA=
Manhattan236236Upper East Side Northfalse622236722204344319AQMAAAABAAAABgAAAH8U7DY/fVLAgoyPuSljREBSL4srPH1SwI6fmBgyY0RAckTMoDZ9UsDndJVMQWNEQNMa+1c7fVLAWr+Mvj9jREAHzeXzP31SwPG9Xd0qY0RAfxTsNj99UsCCjI+5KWNEQA==
Manhattan236236Upper East Side Northfalse622236722211192831AQMAAAABAAAABwAAAEAcWjEVfVLAES/K0qhkREC51Zo/Bn1SwJ3f5r+tZERAxX7u0QN9UsC/5lq/uGREQO9KLAURfVLAg0OL2cNkRECB91MsG31SwF7JDn/MZERAKrvGhh99UsDTp4XHuGREQEAcWjEVfVLAES/K0qhkREA=
Manhattan236236Upper East Side Northfalse622236722208866303AQMAAAABAAAACAAAANFQu6SQfVLAQaw8nSNjREBJjscLhn1SwOkuCRwnY0RAD+4acIF9UsCw3E79O2NEQPsHNMWLfVLAwnQo8UtjREBAUfy1mn1SwGc0pANHY0RAHv6UUZ99UsCB+08iMmNEQI7ZtUOcfVLAGU4way1jREDRULs= (truncated)
Manhattan236236Upper East Side Northfalse622236722212208639AQMAAAABAAAABgAAAJotUIsefVLASyl2Q4NjREAS8XnSHX1SwBFw1D+FY0RAbCpifxZ9UsDATFVVmWNEQP+f8/YZfVLA8JO5MJhjREBD5QyTHn1SwAjIaE+DY0RAmi1Qix59UsBLKXZDg2NEQA==
Manhattan236236Upper East Side Northfalse622236722201690111AQMAAAABAAAABgAAAL73lRijfVLAi4b8sJFjREBsL0M4l31SwKnpx5uVY0RAKOWPnJJ9UsATe0x9qmNEQOr9r16XfVLAfpfk1bFjRECuKyL6nX1SwIiSAMOfY0RAvveVGKN9UsCLhvywkWNEQA==
Manhattan236236Upper East Side Northtrue622236722201526271null
Manhattan236236Upper East Side Northtrue622236722204868607null
Manhattan236236Upper East Side Northfalse622236722215059455AQMAAAABAAAACAAAAI2CdgZCfVLAQtMZC5pkREDH8scUM31SwM+oY/ieZERAVOmIeC59UsB+lU3as2REQLN4l1M1fVLA9vEdcL5kRECU58fgOn1SwKB4tFWvZERANcvSP0J9UsDxeGQWm2REQC63lWlCfVLARS0kpJpkRECNgnY= (truncated)
Manhattan236236Upper East Side Northfalse622236722201198591AQMAAAABAAAACQAAAJqBvQ9/fVLAOzddTMRjRECM96AecH1SwNY20TnJY0RAVVPBgmt9UsCdnWIb3mNEQFUtEth1fVLAgJCOD+5jREAUtiYGg31SwJmV1rbpY0RALneyEId9UsARqYOR3mNEQIcc9zKHfVLATmJOM95jREAV6xA= (truncated)
Manhattan236236Upper East Side Northfalse622236722209718271AQMAAAABAAAABgAAACvPSaPifFLAXsBKw5JkREAFwhQL2nxSwPYHcpiVZERAAItY/tt8UsDn9Sw9l2REQNGx03TsfFLAideODKVkREDZtIj47HxSwGrhH7iiZERAK89Jo+J8UsBewErDkmREQA==
Manhattan236236Upper East Side Northfalse622236722202869759AQMAAAABAAAACAAAAARQMDxxfVLATe008QJkREBXpOlKYn1SwE3LoN4HZERAaJnxrl19UsAGkk3AHGREQJsuVARofVLAxAadtCxkREBORbnman1SwPRzHsErZERAjTtAWG99UsAipMSNH2REQL9W7q92fVLANpcWXAtkREAEUDA= (truncated)
Manhattan236236Upper East Side Northfalse622236722209554431AQMAAAABAAAACQAAAAl4/DHXfFLAmfFaFklkREB7C9kv1nxSwIaybmtJZERAf3rlbdF8UsDeJd6FVmREQN8oM+rJfFLA2lKYAWtkREAqejqMyXxSwEbQUARsZERAbCv3+M18UsCJAp/ZcmREQLgbmurcfFLAY7LC7G1kREAbyBI= (truncated)
Manhattan236236Upper East Side Northfalse622236722208899071AQMAAAABAAAACAAAAHf3aat8fVLA1DOu0xJjREALvsK2e31SwEjuOigXY0RASY7HC4Z9UsDpLgkcJ2NEQNFQu6SQfVLAQaw8nSNjRED/1eCZin1SwFgpLYQeY0RA0RvY0Yh9UsBE4JcMHWNEQMp4Vw2HfVLAsz0CkRtjREB392k= (truncated)
Manhattan236236Upper East Side Northfalse622236722208735231AQMAAAABAAAABAAAAI7ZtUOcfVLAGU4way1jREAe/pRRn31SwIH7TyIyY0RATr0XJKF9UsAY3G6IMWNEQI7ZtUOcfVLAGU4way1jREA=
Manhattan236236Upper East Side Northfalse622236722201559039AQMAAAABAAAABwAAAKPASJorfVLAMBukbl9jREA80aZkJX1SwEtyJW1wY0RAmi1Qix59UsBKKXZDg2NEQEPlDJMefVLACMhoT4NjREAGOAqELX1SwDOFUGJ+Y0RAaFANIDJ9UsASIwaBaWNEQKPASJorfVLAMBukbl9jREA=
Manhattan236236Upper East Side Northfalse622236722204901375AQMAAAABAAAABwAAAJ8h7k9lfVLA1zSgIP9iREBw5SVxYn1SwJAdvyEMY0RA3twTxmx9UsDvMJoVHGNEQAu+wrZ7fVLASO46KBdjREB392mrfH1SwNQzrtMSY0RAwIlKS259UsBarOm5BmNEQJ8h7k9lfVLA1zSgIP9iREA=
Manhattan236236Upper East Side Northfalse622236722213257215AQMAAAABAAAABQAAAANsRIn7fFLAE3QCQuNjRECNZ9v59nxSwB+kJbfvY0RAbnqQY/Z8UsBvMWBc8WNEQIcX9JT4fFLAoKhTo/BjREADbESJ+3xSwBN0AkLjY0RA
Manhattan236236Upper East Side Northtrue622236722209587199null
Showing the first 1000 rows.
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "aggData": [], - "aggError": "", - "aggOverflow": false, - "aggSchema": [], - "aggSeriesLimitReached": false, - "aggType": "", - "arguments": {}, - "columnCustomDisplayInfos": {}, - "data": [ - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694314495, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745679077375, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734160383, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745762275327, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731801087, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725935615, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745680224255, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689595903, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683730431, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723576319, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745763422207, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693102079, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732947967, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702473727, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745696608255, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745736454143, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761062911, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690742783, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675505663, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745730588671, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694248959, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745679011839, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734094847, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745762209791, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731735551, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725870079, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745680158719, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689530367, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683664895, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745763356671, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693036543, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732882431, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702408191, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745681305599, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745760997375, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675440127, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745730523135, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703555071, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745762144255, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725804543, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745680093183, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683599359, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745763291135, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745692971007, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732816895, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745913303039, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702342655, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745681240063, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690611711, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675374591, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694117887, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733963775, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703489535, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731604479, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689399295, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683533823, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745763225599, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745692905471, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732751359, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745913237503, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702277119, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742123007, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745681174527, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745760866303, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745730392063, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684680703, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724526591, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745764372479, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694052351, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733898239, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703423999, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745682321407, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731538943, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725673471, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745695199231, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745735045119, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689333759, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683468287, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745763160063, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732685823, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702211583, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742057471, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745681108991, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745760800767, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690480639, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675243519, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684615167, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745764306943, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693986815, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733832703, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745672884223, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745682255871, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236746168631295, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761947647, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731473407, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725607935, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745695133695, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734979583, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689268223, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683402751, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723248639, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732620287, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702146047, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745741991935, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745760735231, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690415103, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675177983, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684549631, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724395519, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745764241407, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703292927, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745682190335, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236746168565759, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745676324863, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725542399, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745695068159, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734914047, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683337215, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723183103, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732554751, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702080511, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745741926399, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745760669695, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690349567, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675112447, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693855743, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703227391, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745743073279, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745672753151, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236746168500223, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745676259327, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731342335, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725476863, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745695002623, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734848511, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745673900031, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683271679, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723117567, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732489215, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702014975, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745741860863, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726623743, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745760604159, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690284031, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684418559, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724264447, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693790207, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733636095, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703161855, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745743007743, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745697296383, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236746168434687, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745676193791, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731276799, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725411327, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694937087, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745679699967, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734782975, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683206143, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723052031, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745692577791, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732423679, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745701949439, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745741795327, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726558207, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745760538623, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690218495, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745674981375, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684353023, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724198911, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693724671, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745697230847, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761685503, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745676128255, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731211263, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725345791, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694871551, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734717439, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683140607, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745722986495, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732358143, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745701883903, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745741729791, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726492671, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690152959, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745674915839, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684287487, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724133375, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703030783, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745697165311, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761619967, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745676062719, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725280255, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694806015, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734651903, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683075071, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745722920959, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745692446719, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732292607, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745701818367, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745741664255, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745735798783, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690087423, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745674850303, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693593599, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733439487, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702965247, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742811135, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745697099775, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675997183, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725214719, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694740479, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734586367, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745698246655, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683009535, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745722855423, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745762701311, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732227071, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726361599, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745735733247, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690021887, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684156415, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724002303, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693528063, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733373951, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702899711, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742745599, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745697034239, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745681797119, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745736880127, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761488895, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675931647, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725149183, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694674943, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734520831, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745682943999, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745722789887, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732161535, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726296063, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745735667711, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689956351, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745674719231, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684090879, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723936767, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693462527, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733308415, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745696968703, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745736814591, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761423359, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675866111, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725083647, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694609407, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734455295, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732095999, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726230527, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689890815, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745674653695, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684025343, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723871231, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702768639, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742614527, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745681666047, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745736749055, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761357823, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675800575, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725018111, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694543871, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734389759, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732030463, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689825279, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745674588159, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702703103, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742548991, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745736683519, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690972159, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675735039, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724952575, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694478335, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734324223, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731964927, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726099455, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689759743, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683894271, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723740159, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702637567, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742483455, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745696772095, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761226751, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690906623, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675669503, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724887039, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694412799, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745679175679, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734258687, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731899391, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726033919, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689694207, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683828735, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723674623, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745763520511, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745696706559, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761161215, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690841087, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675603967, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694347263, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745679110143, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734193151, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745762308095, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731833855, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725968383, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689628671, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745729474559, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683763199, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723609087, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745763454975, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702506495, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742352383, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745696641023, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761095679, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675538431, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694281727, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745679044607, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734127615, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745762242559, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731768319, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745680191487, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689563135, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693069311, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732915199, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702440959, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745696575487, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675472895, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745730555903, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694216191, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734062079, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703587839, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745762177023, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731702783, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725837311, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689497599, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683632127, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723478015, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745763323903, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693003775, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732849663, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702375423, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745681272831, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690644479, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675407359, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745730490367, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694150655, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733996543, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703522303, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745762111487, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731637247, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745680060415, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689432063, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683566591, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745763258367, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745692938239, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732784127, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745681207295, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745760899071, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675341823, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745730424831, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684713471, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745764405247, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694085119, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733931007, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703456767, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745682354175, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745762045951, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731571711, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725706239, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689366527, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683501055, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745763192831, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702244351, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742090239, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745681141759, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675276287, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684647935, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724493823, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745764339711, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694019583, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745678782463, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733865471, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703391231, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745682288639, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761980415, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731506175, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745695166463, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745735012351, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689300991, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732653055, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702178815, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742024703, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690447871, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675210751, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684582399, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745764274175, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693954047, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733799935, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703325695, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745743171583, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745682223103, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761914879, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731440639, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725575167, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745695100927, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734946815, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689235455, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683369983, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723215871, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732587519, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702113279, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745741959167, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745696247807, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745681010687, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745760702463, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690382335, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675145215, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684516863, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724362751, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745764208639, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693888511, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733734399, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703260159, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745743106047, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745682157567, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761849343, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745691529215, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745676292095, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731375103, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725509631, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745695035391, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734881279, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683304447, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723150335, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732521983, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726656511, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745696182271, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745760636927, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690316799, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675079679, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684451327, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724297215, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693822975, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733668863, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703194623, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745743040511, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761783807, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745691463679, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745676226559, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731309567, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725444095, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683238911, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723084799, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745701982207, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745741828095, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726590975, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745696116735, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745760571391, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675014143, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684385791, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724231679, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693757439, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733603327, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703129087, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742974975, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745697263615, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745676161023, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731244031, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694904319, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734750207, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732390911, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745701916671, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745741762559, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726525439, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690185727, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745674948607, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684320255, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724166143, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693691903, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733537791, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745703063551, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745697198079, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761652735, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731178495, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694838783, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734684671, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745698344959, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683107839, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745722953727, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745692479487, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732325375, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745701851135, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745741697023, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726459903, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745735831551, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690120191, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745674883071, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684254719, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724100607, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693626367, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733472255, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702998015, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745697132543, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745676029951, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725247487, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694773247, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734619135, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683042303, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745722888191, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745762734079, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732259839, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726394367, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745735766015, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690054655, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745674817535, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684189183, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724035071, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693560831, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733406719, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702932479, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761521663, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675964415, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745698213887, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745682976767, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745722822655, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726328831, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745674751999, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684123647, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723969535, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693495295, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733341183, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702866943, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745736847359, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761456127, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675898879, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694642175, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734488063, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745698148351, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732128767, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726263295, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745735634943, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689923583, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745674686463, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745684058111, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723903999, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745693429759, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733275647, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702801407, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742647295, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745736781823, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761390591, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725050879, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694576639, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734422527, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745732063231, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726197759, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689858047, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745674620927, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683992575, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723838463, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702735871, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742581759, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745736716287, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761325055, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745691004927, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675767807, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724985343, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694511103, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734356991, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731997695, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726132223, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689792511, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745674555391, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683927039, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723772927, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745763618815, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702670335, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742516223, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761259519, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690939391, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675702271, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745724919807, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745679208447, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726066687, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683861503, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723707391, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702604799, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742450687, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745696739327, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761193983, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690873855, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745675636735, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745694380031, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745679142911, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745734225919, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745731866623, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745726001151, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745689661439, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745729507327, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745683795967, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745723641855, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745763487743, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745702539263, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745696673791, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761128447, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745690808319, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745725739007, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745696935935, - "AQMAAAABAAAABAAAAIzvORt9i1LAUzWXQ0NIRECs3yEigotSwIct0/1KSERAz1Bl94WLUsD10IC1SUhEQIzvORt9i1LAUzWXQ0NIREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236746167451647, - "AQMAAAABAAAABQAAALLLamedjVLA7PTzHUVHREBNNifZjI1SwIx+IDVNR0RAo5WznI2NUsAYmXlhTkdEQOZxFHmcjVLAepg7ZklHRECyy2pnnY1SwOz08x1FR0RA" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745725181951, - "AQMAAAABAAAACAAAAKO97SfLjFLAIFImkFVHRECDqWsmwIxSwIgY7T9ZR0RAaiCr/7mMUsAVstwXZUdEQKmCacK3jFLAJQi4Ym9HREBTwBAWwoxSwGytiUB/R0RAlcOy8tCMUsB7rxhGekdEQE9Ql3vVjFLA5tnfbWVHRECjve0= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745692708863, - "AQMAAAABAAAACgAAABxTRq7gilLAmdfeuPlHREDD33S73YpSwKGHSLX6R0RAyUDDbd2KUsAKqHCXDEhEQHoKDC7dilLAXpp1LhtIRECzsMwt3YpSwIA5Dj0bSERAJM9mHN2KUsARqtk4H0hEQKbuUhbdilLAAg+akiFIREAwyi0= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745763880959, - "AQMAAAABAAAABAAAAMJtrBbEilLAuXWkiSxLREAKJ7ZcwYpSwLrfZjFBS0RAuOwva8WKUsAVGCeVLktEQMJtrBbEilLAuXWkiSxLREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745673801727, - "AQMAAAABAAAAEAAAAEusd47ri1LARkK8hxlLREB67WSv3ItSwK+/oIEeS0RAiTnvJNiLUsC9w3NbM0tEQKosoHnii1LAw55wO0NLRECON47p6otSwA05smhAS0RAQTKHHt2LUsCWtkiYMUtEQGXeF4jfi1LAns6gKjFLREAkqVc= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745762766847, - "AQMAAAABAAAABAAAABHqBw3NilLA5PFQ+cpKREA20j3kzIpSwHeLCgrNSkRAic/LRM2KUsBDJg1Py0pEQBHqBw3NilLA5PFQ+cpKREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745769549823, - "AQMAAAABAAAACAAAAEsfeSjQilLAvI5xoTlMREBSSHP3yYpSwGY4QrM7TERAOPSwLMWKUsBX9gTsV0xEQOaTaHXEilLAzKLeUl9MREDTO0MRx4pSwLxEjlVjTERAUghS8dWKUsAn/qZcXkxEQAYG43zailLAFXeRgklMREBLH3k= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236746168893439, - "AQMAAAABAAAACgAAAEFnNV4qjVLAwD4mP1tHREBSQQgeKo1SwJ1uO2ZcR0RAZL/3cTSNUsCXXLZDbEdEQMYbEV82jVLAcXR5nmtHREBx/B14P41SwJ9IGV9eR0RAd4R8yzqNUsDHj1iuXkdEQDyyRxU2jVLAdJqzbl5HREDzpns= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745673244671, - "AQYAAAACAAAAAQMAAAABAAAABQAAAGfnWjFYjFLAcCT/1uFKREBEWyhGUYxSwCD74ifkSkRAow3VNFKMUsA4U1F95kpEQD0y/b9ZjFLAYpJwO+RKREBn51oxWIxSwHAk/9bhSkRAAQMAAAABAAAABQAAALTRzktOjFLAkEgTJ+U= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745730293759, - "AQMAAAABAAAADwAAAHsrqeBrjVLALNBqRGhIREC72IoDXY1SwL+PlD9tSERAycTpeliNUsAWLoUYgkhEQF/qes9ijVLAaVta9pFIREB0K4b3bo1SwMamceONSERAC8KjXG+NUsBsmGihjEhEQKB950BwjVLAOz81o4lIREDlS8k= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745757982719, - "AQMAAAABAAAACAAAAFvg22aMilLANALWn7VLREB+k+jbiopSwE9M1CO2S0RAGDjhCnqKUsDZZAofz0tEQO+Cb7V5ilLATtUVkNBLREBwrGJPg4pSwGznOlPfS0RAL1ApL5KKUsBiUqda2ktEQNP227qWilLAaLPtgMVLREBb4Ns= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745736519679, - "AQMAAAABAAAABgAAABIxNdUtjVLALY8s+hJKRECy44BiKo1SwHiQ5CEUSkRA9g1i2SWNUsCgwZ/7KEpEQBUkeHMujVLAEIjHMTZKREByI0BpLo1SwE8n89smSkRAEjE11S2NUsAtjyz6EkpEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745678913535, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745682026495, - "AQMAAAABAAAABwAAABhV/Kp6i1LAh31HSGFMRECUDmrva4tSwAQrrjVmTERABZFSZGeLUsARqwQQe0xEQKfzQ7lxi1LAY4jX8IpMRED1jqXhcotSwCtxt42KTERAYIM7BnqLUsBWLJGmYkxEQBhV/Kp6i1LAh31HSGFMREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745735405567, - "AQMAAAABAAAALAAAACBtiIU+jVLASpeWu6xJREC8PLExMo1SwFki59ywSURAVV6sqC2NUsD4YnG2xUlEQFL7/MY3jVLATD7rQNVJREBHH4DjN41SwDCgssfTSURAIsTaMjiNUsBjWkyr0UlEQI02BZ04jVLAtALEwc9JRED26fE= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745696149503, - "AQMAAAABAAAACQAAAORf+0wejFLAur1XzyRIRECcUfVWHYxSwICcAXIlSERA39+yMxqMUsA/LFb4JkhEQMyzxCgEjFLA7KJzdS9IRECy6bdfA4xSwLMk9RAzSERAMuo1sw2MUsD2iZTvQkhEQLzpcZAcjFLAsm3J9T1IRECArRk= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745742188543, - "AQMAAAABAAAACAAAAIprKi5ti1LAwRpDy59MREAWlwtOXotSwFh5zcSkTERAjxrcwlmLUsBkxz+fuUxEQE1c3xdki1LAZg02gMlMREAFjWoXZ4tSwK+BhX/ITERAVAUJCGiLUsDfm3gqx0xEQOtdaKtui1LA144nFaJMRECKayo= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745699262463, - "AQMAAAABAAAACQAAAJjNyNXrilLAKAnxzP9JREDMTz333IpSwFwbsMUESkRA/2kpzNqKUsC/hKG4DkpEQJ1M8g/ailLAz8UH5RlKREAWV8fm2YpSwFyfwuQbSkRA9IGfv+KKUsAImNB+KUpEQB9AQZ7xilLAEb4HhiRKRECw80s= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745695592447, - "AQMAAAABAAAAFAAAACHyBz3Zi1LAvWeqxEVIREAEgGFh14tSwOf3dj5ISERATDZXYNeLUsCOiL8/SEhEQOccQV/Xi1LAvJIdQUhIRECJnmNZ04tSwD3fZQVNSERAwUAYJM+LUsD72D9wUUhEQC2BQSPPi1LAkpgWcVFIREBFkXY= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745912778751, - "AQMAAAABAAAABAAAAGogq/+5jFLAFbLcF2VHREDDmav/s4xSwCv2LqVwR0RAqYJpwreMUsAlCLhib0dEQGogq/+5jFLAFbLcF2VHREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745769877503, - "AQMAAAABAAAABAAAAAESmsN+ilLAN0D7LPRLRECZpv25fIpSwPYgS9v0S0RAJSoxv3+KUsA+gcyv9UtEQAESmsN+ilLAN0D7LPRLREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745691365375, - "AQMAAAABAAAACwAAAGozUIn1ilLAEKQIQdlHREAw8SYW9IpSwMcGf+jfR0RALiPBaP6KUsDAqrbH70dEQBJ93QEMi1LA/HtxO+tHREA3kig6BotSwLZ1sPHlR0RAxGtyuQCLUsAGDz7t4EdEQAg8IJ7/ilLA9ibo6t9HREDs7PU= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745736290303, - "AQMAAAABAAAABgAAAO0EkPJDjVLAR0N/nJ5JREBBXEPvQo1SwJNXp0SjSURA56I3SkONUsBSb/DdoklEQNmKbSVEjVLAIcjG8KFJRECgZKwxRI1SwIaCYj+gSURA7QSQ8kONUsBHQ3+cnklEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745921560575, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745913106431, - "AQMAAAABAAAAEAAAAIIWNIjqjFLAZ2Od0SZHREBZDm1g6IxSwLkJSe8mR0RAA+xnOuaMUsDe2MI4J0dEQNYVpRfkjFLAj2zZrSdHREA05cPV4oxSwDR9Fg0oR0RAKXtIjd6MUsChDoq9O0dEQJJi9ODojFLA9Hgrm0tHREDMPG8= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745698476031, - "AQMAAAABAAAACQAAALL+ux3oilLAISejGFNJREBRTn3L4IpSwJM6VYtVSURAr2wazOCKUsAX3FEnVklEQKdUfongilLARGuvEmdJRED8vVvz34pSwAZAevV3SURAzrEi0N+KUsB9ldCGfElEQEwaBObtilLAFHgZ0XdJREBOsPA= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745769648127, - "AQMAAAABAAAABwAAAJ5JnIXCilLA0IWqL3hMRECiHMIJwopSwI4IEFl4TERA/atadMCKUsCS30q4iExEQO271ie+ilLAeH+vT6BMREBgDW9OyIpSwLcrH+ucTERAEwwY2syKUsCQ2O0QiExEQJ5JnIXCilLA0IWqL3hMREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236746168991743, - "AQMAAAABAAAAbgAAAOZxFHmcjVLAepg7ZklHRECjlbOcjY1SwBiZeWFOR0RAeDp0FImNUsAwnOU5Y0dEQNRjiUWTjVLAJcIu4XJHRED/Zstpk41SwACBE3xyR0RAaf7Oo5ONUsAQfUPlcUdEQB0fx+CTjVLAt2EwUXFHRED02aI= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745673342975, - "AQMAAAABAAAACQAAAB+zGpprjFLA/inKAshKRECwB1G7XIxSwNN6Kv3MSkRAZ+daMViMUsBwJP/W4UpEQD0y/b9ZjFLAYpJwO+RKREDd+3RsX4xSwLrmzYjiSkRArimgTm6MUsBukC0X5kpEQBjpkTV0jFLAQxtKzt9KRED9fQQ= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745680125951, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745672785919, - "AQMAAAABAAAABwAAACtBCaInjFLAVe8AGPJKREBS8sO1HIxSwGna4b/1SkRArQe3bRuMUsDdVY+i+0pEQACZCuIdjFLA31deePlKREB6WJ8NIYxSwBYZS+72SkRASHDjSSSMUsDgOSWX9EpEQCtBCaInjFLAVe8AGPJKREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745690578943, - "AQMAAAABAAAACQAAADmf/S3qilLA0p0dH8tIREDeljZq24pSwFzACA/QSERAHQuVdduKUsDBMc0y00hEQP7D8CDcilLA/mL9X+hIREAm+Thi3IpSwFEUV5HtSERABbJIGOGKUsBnDLvP9EhEQA6OJ/bvilLAP+gT1+9IREBuE/g= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745761751039, - "AQMAAAABAAAACAAAAIfQ/ZbEilLAbsZnK/BLRECF0TG3tYpSwH21MST1S0RAZUAtzbGKUsAxnLUYB0xEQIMkNPu8ilLAoHafRg5MREA7iZpExYpSwPaBRZsWTERAImKyX8qKUsAJfFzmFExEQDhHP+vOilLAxBlxDABMRECH0P0= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745679568895, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745743400959, - "AQMAAAABAAAACAAAAG3Nwusyi1LABCIZR+1MREAhLGkLJItSwLFPb0DyTERAyND3fx+LUsBWzvUaB01EQJsA9NQpi1LAtHY0/BZNREC4lME/MotSwGymuysUTURAS5QPEDuLUsB9Dzo1B01EQNZYwUA9i1LAkKk/KP1MREBtzcI= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745742843903, - "AQMAAAABAAAABwAAAAEzn97yilLA2oyXBhZNREClgCsC5IpSwAfxVf4aTURA2LgymeuKUsAqkB94HE1EQCuus3/wilLAjowFRh1NREDVFnRh9YpSwF42raweTURAx31npfmKUsB65hRxIE1EQAEzn97yilLA2oyXBhZNREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745735503871, - "AQMAAAABAAAAJwAAAGmcpnQzjVLA6wiKbupJREBKr4qWJI1SwJq/oWnvSURAfd5tDSCNUsBt20dDBEpEQLLjgGIqjVLAeJDkIRRKREASMTXVLY1SwC2PLPoSSkRAUz3cvy2NUsD9FD0cEEpEQKFRPQkujVLABAdpMg5KREAF9AY= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745763749887, - "AQMAAAABAAAACAAAALtW8YHOilLArlVM4gRLREDBzi5tyIpSwG9it+oGS0RA4J4bi8eKUsBsOitdEktEQMJtrBbEilLAuHWkiSxLREC47C9rxYpSwBUYJ5UuS0RAq7F7StSKUsCSfmGcKUtEQKxz0tXYilLAjfHswhRLREC7VvE= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745742286847, - "AQMAAAABAAAABQAAAPWOpeFyi1LAK3G3jYpMRECn80O5cYtSwGOI1/CKTERAimsqLm2LUsDBGkPLn0xEQOpdaKtui1LA1o4nFaJMRED1jqXhcotSwCtxt42KTERA" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745762635775, - "AQMAAAABAAAABwAAAHYlWVvWilLAhyqUnKFKREBbb3kU0IpSwFIVyLWjSkRAEeoHDc2KUsDk8VD5ykpEQInPy0TNilLAQyYNT8tKRECketcj3IpSwOq4SVbGSkRA5zIUr+CKUsBhDwZ9sUpEQHYlWVvWilLAhyqUnKFKREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745730162687, - "AQMAAAABAAAAGgAAAIWgZ8V9jVLAs+4/8U5IREDJVDRpcI1SwFX6gGtTSERAeyup4GuNUsAs0GpEaEhEQJIooa11jVLAxTnhUXdIREArfNixdY1SwDytwUR3SERAuryaHHaNUsDfR6badUhEQHJmIY12jVLAAyiXwHNIRECYmyg= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745760964607, - "AQMAAAABAAAADwAAAA6xuwjBilLASTCfrUNLREAMPY6+wIpSwIpDl99FS0RADlNtYMCKUsASCxWsSUtEQDbSl+C/ilLA1AOZb01LREC/N2w/v4pSwAJlaydRS0RAwVRcfb6KUsC3/NzQVEtEQOpFM529ilLA4aMZP1hLREAiICs= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745681895423, - "AQMAAAABAAAABAAAACCTZnWFi1LAwuEBV0pMREDpjmBaf4tSwCRuzGFMTERAFEPU6XqLUsBUWqrCYExEQCCTZnWFi1LAwuEBV0pMREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745913204735, - "AQMAAAABAAAACwAAABXjZov2jFLAiJgF+yhHREBY9ydG/IxSwGiLbMgxR0RARIHViAONUsD2Ja9ZL0dEQP5xVegCjVLAOz+bzi5HRECGIiypAY1SwJeud90tR0RAGzyPYQCNUsCfkFYILUdEQEWuBTf+jFLARiql8CtHRECeYPs= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745691791359, - "AQMAAAABAAAADAAAACoGIm3eilLAkiWYz9FHREAB8qRI3opSwD3ytDXaR0RAQqf0OOWKUsCSOQ7h5EdEQDDxJhb0ilLAxwZ/6N9HREBqM1CJ9YpSwBCkCEHZR0RAJkRisPKKUsB/rkns10dEQHVLi13vilLAjx6hh9ZHRECs1T8= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745762963455, - "AQMAAAABAAAABAAAANaM/WrUilLANt5z9mZKRED0jon204pSwBTVNlZtSkRAJZolHtWKUsCeeuUJaEpEQNaM/WrUilLANt5z9mZKREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745912647679, - "AQMAAAABAAAABwAAANhuy9LNjFLAokyR2T1HREBeY4fGzYxSwL/8KPI9R0RAxheJEMSMUsCuK4O2UUdEQISpaybAjFLAhxjtP1lHRECjve0ny4xSwCBSJpBVR0RA40TQsM+MUsBWlAK4QEdEQNhuy9LNjFLAokyR2T1HREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745769746431, - "AQMAAAABAAAACAAAAC9QKS+SilLAYlKnWtpLREBwrGJPg4pSwGznOlPfS0RAARKaw36KUsA3QPss9EtEQCUqMb9/ilLAPoHMr/VLREDbr8BfhYpSwEVfuDv3S0RA56Ztm5iKUsBVd9Ul/EtEQMadPYOcilLALk/KO+pLREAvUCk= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236746169090047, - "AQMAAAABAAAAWQAAAG9CaOCOjVLAOgej74dHREAwmN0DgI1SwM+E2eqMR0RA6FCGe3uNUsAlamHDoUdEQHGZzc+FjVLAnx/BoLFHREDG46MAiY1SwK+q9o6wR0RArlsIMomNUsDMdGTwr0dEQNW/eIWJjVLAbZaq8K5HRECmLPQ= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236746168532991, - "AQMAAAABAAAABwAAANOJOWFxjVLA9XyFoVpHREBd8nW9X41SwGstTkBjR0RAGO8Ff1yNUsAjLT8rckdEQM57ItNmjVLAvnCgCIJHREBMhKqvdY1SwAgXhQ19R0RAFsj/N3qNUsCVSRI1aEdEQNOJOWFxjVLA9XyFoVpHREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745690677247, - "AQMAAAABAAAABwAAAJaTnyPeilLAwauyGAxJREAEAkaS3opSwJtPO5QSSURAs//Tnd+KUsAmHsVpI0lEQJfWoh3gilLAx6cvHi9JREDsCoZV4opSwAM5TWAuSURA4olu4OaKUsDtgduHGUlEQJaTnyPeilLAwauyGAxJREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745679667199, - "AQMAAAABAAAABwAAAMOqaqPMjFLAADEi3UZKRECt/ALFvYxSwIZS2ddLSkRA44l6O7mMUsCOL4yxYEpEQNmtbZDDjFLAVzyWkHBKRECI/Em7y4xSwP8/YdRtSkRAJAV3dNGMUsDK4jpDTkpEQMOqaqPMjFLAADEi3UZKREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745750839295, - "AQMAAAABAAAABgAAAFzYInTAilLAKfO+NQBNREBB/k2MtIpSwMpgZzAETURAyb1QWLOKUsBkYsfNEE1EQCMFdJHJilLAtfyqqxVNREAm6djIyopSwNdDPBcQTURAXNgidMCKUsAp8741AE1EQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745729376255, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745696903167, - "AQMAAAABAAAABwAAAM9QZfeFi1LA9tCAtUlIRECs3yEigotSwIct0/1KSERAaMvol32LUsCB4A7WX0hEQO0eHOuHi1LAnRMdtW9IREAy4IrIlotSwAp217tqSERAF8kzsZqLUsDi+w3JWEhEQM9QZfeFi1LA9tCAtUlIREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745757065215, - "AQMAAAABAAAABQAAAB2rT82hilLAK9g3t5JLREAufZ0+nIpSwPDVNVCcS0RAoABJppuKUsAe8X8ynUtEQKlDKdKfilLAYkKWzZtLREAdq0/NoYpSwCvYN7eSS0RA" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745742385151, - "AQMAAAABAAAABAAAAAWNahdni1LAroGFf8hMREBNXN8XZItSwGYNNoDJTERAhFTWEWOLUsBFdtUyzkxEQAWNahdni1LAroGFf8hMREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745673768959, - "AQMAAAABAAAACAAAAI43junqi1LADDmyaEBLRECqLKB54otSwMOecDtDS0RAuW8o792LUsCLtlgVWEtEQDyb7UPoi1LAvdlg9WdLREBL45x39otSwD0i0TRjS0RATkGm0feLUsDL/C7aX0tEQOKa9+v6i1LAfkZ+mlFLRECON44= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745769517055, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745730260991, - "AQMAAAABAAAAJgAAAHUrhvdujVLAxqZx441IREBf6nrPYo1SwGlbWvaRSERAa9LXRl6NUsCgEGDPpkhEQCQuXl9mjVLAFu6JPrNIRECqx/yQZo1SwKFpRfiySERA89HMMmeNUsDb/RiHskhEQMQxL5dnjVLAgs8Jg7JIREDFrU4= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745743269887, - "AQMAAAABAAAACAAAAEU7ZFdGi1LAF8oxc9NMRECSMx53N4tSwNddmWzYTERAbc3C6zKLUsAEIhlH7UxEQNZYwUA9i1LAkKk/KP1MREB8ENtiQ4tSwFa2PBv7TERA10BbHU+LUsAOw4d76kxEQPwhZaxQi1LA2TBAVONMREBFO2Q= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745700343807, - "AQMAAAABAAAACAAAAF424J3eilLALDWSr4FIREDzmPH+24pSwM2v64+CSERALwjLvNuKUsD5/EBKkEhEQKkTtzrbilLAQoMUz6hIREBjPyg624pSwFetVXipSERAb9flZeSKUsBWt0dnpkhEQP5FsvDoilLAZgAcj5FIREBeNuA= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745678880767, - "AQMAAAABAAAABgAAANJGsZ6rjFLA33bcPp9KRECeJwzAnIxSwMGtejmkSkRA6c9VNpiMUsCaJVATuUpEQKAIEl2YjFLApnjRTrlKREDlerXBrYxSwCmzKoeiSkRA0kaxnquMUsDfdtw+n0pEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745742712831, - "AQMAAAABAAAACgAAAAz8pEoGi1LAyBTvMvxMREB/bTpq94pSwA6sGCwBTURAATOf3vKKUsDajJcGFk1EQMd9Z6X5ilLAeuYUcSBNREBJ5nIy+opSwDKGhKsgTURA/wLa5v6KUsBkDCo/I01EQCtf+PEAi1LA3S+QpyRNREAaRQM= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745735372799, - "AQMAAAABAAAAJAAAAMRo/LY3jVLAZffo2dZJREBpnKZ0M41SwOsIim7qSURA+d1JyzSNUsD6t8l87ElEQDOCDd40jVLAKUIqbuxJREACiayTNY1SwJK7PRLsSURAMcec9zWNUsC0/EBQ60lEQG9eIGI2jVLAxnHpRupJRECXcwE= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745920643071, - "AQMAAAABAAAABgAAANgYEA6VjFLAkR28UKlHREBPXNQyhIxSwBUZLAvHR0RAmBuE5IeMUsDtzke4zEdEQEHcYMGWjFLAZtQKvsdHREA1JodKm4xSwMaoveWyR0RA2BgQDpWMUsCRHbxQqUdEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745680879615, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745691332607, - "AQMAAAABAAAACAAAABJ93QEMi1LA/HtxO+tHREAuI8Fo/opSwMCqtsfvR0RA7q8m3vmKUsCTnpWfBEhEQCAT1TAEi1LAk5HYfhRIREDBRCAOE4tSwIZzJIYPSERA1NammBeLUsAwKjeu+kdEQKCuRdAPi1LAtqLotu5HREASfd0= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733701631, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745750937599, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745697001471, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745760833535, - "AQMAAAABAAAACAAAAKuxe0rUilLAkn5hnClLREC47C9rxYpSwBUYJ5UuS0RACie2XMGKUsC632YxQUtEQA+xuwjBilLASTCfrUNLREBEL7Yzy4pSwLZnZk9TS0RA7DYYE9qKUsB2BpdWTktEQPoEcZ7eilLAFWYNfTlLRECrsXs= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745735700479, - "AQMAAAABAAAAEwAAALQHo0M7jVLA7nzuKYdJRED5LMdlLI1SwMHtAyWMSURAWFPE3CeNUsCnGHn+oElEQLw8sTEyjVLAWSLn3LBJREAgbYiFPo1SwEqXlrusSURAcUhlED+NUsAdsK/OqklEQKg1mTlBjVLAWq13QqVJRECkwDw= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745681764351, - "AQMAAAABAAAACAAAAIwmheW8i1LA9Z0od7BLRECoGgsGrotSwGaO7HC1S0RAbX5Pe6mLUsAx9f1KyktEQPfWIdCzi1LAuMBZK9pLREBb/ekiwItSwL+n7gvWS0RA89LTEsSLUsBCCgbTzktEQJTYWTrHi1LAUUlsV8BLRECMJoU= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745762832383, - "AQMAAAABAAAACAAAAKR61yPcilLA6rhJVsZKRECJz8tEzYpSwEMmDU/LSkRAN9I95MyKUsB0iwoKzUpEQGNgliHLilLAj5WO2+NKRECiDEYN04pSwCjc7AjwSkRArPln7OGKUsATpx8Q60pEQNS9pnfmilLAx+nGNtZKRECketc= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236746168958975, - "AQMAAAABAAAABgAAAM3Ma5ePjVLABgLhpYRHREBvQmjgjo1SwDoHo++HR0RAaOCiCI+NUsBKW2wtiEdEQEa8qCGPjVLAAsfclIdHRECeZNxxj41SwKi7GpuFR0RAzcxrl4+NUsAGAuGlhEdEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745690546175, - "AQMAAAABAAAACAAAAA6OJ/bvilLAP+gT1+9IREAFskgY4YpSwGcMu8/0SERAjlqPpN2KUsD/cP+mBElEQJaTnyPeilLAwauyGAxJREDiiW7g5opSwO2B24cZSURAQ6RjvvWKUsA/liqPFElEQPk0Nkn6ilLARJ6/tv9IREAOjic= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745761718271, - "AQMAAAABAAAABwAAACJisl/KilLACXxc5hRMREA6iZpExYpSwPeBRZsWTERAM5Feqc6KUsC21skMIExEQFNIc/fJilLAZjhCsztMREBLH3ko0IpSwLyOcaE5TERAtBAItNSKUsABGnHHJExEQCJisl/KilLACXxc5hRMREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745679536127, - "AQMAAAABAAAAJQAAAMpDMQvgjFLAkZqtCC1KREDVLt0s0YxSwLIXdgMySkRAw6pqo8yMUsAAMSLdRkpEQCQFd3TRjFLAy+I6Q05KREDMy6rN1IxSwH/qWMs7SkRAsvtiPdWMUsAl1UwkPEpEQDNcjp7VjFLAviqGWjxKRECH/M4= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745736585215, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745729245183, - "AQMAAAABAAAALAAAADLQxNOGjVLAz4V57BFIRECv9KUCfo1SwPc4++AUSERAULkyenmNUsCkLsm5KUhEQDva5neBjVLAiAm1/zVIREDhkTR5gY1SwLvnIvo1SERAjqF22YGNUsBbvuRsNEhEQKLNoDyCjVLA1TJT4TJIREAoKbI= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745743368191, - "AQMAAAABAAAABQAAALiUwT8yi1LAbKa7KxRNRECbAPTUKYtSwLR2NPwWTURAqtP19CiLUsA8pAQAG01EQP+oH2Qxi1LAZxLDbhVNREC4lME/MotSwGymuysUTURA" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745756934143, - "AQMAAAABAAAABwAAABc4Zze2ilLAMPCOuGpLREDAxvqotIpSwA3YGShuS0RAlKxE5a6KUsAfGV4bektEQNHHlx6pilLAGoA+XYVLRECyHU09s4pSwO3XS/uBS0RABtHRyLeKUsDPwLQhbUtEQBc4Zze2ilLAMPCOuGpLREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745696215039, - "AQMAAAABAAAACwAAALXuThv0i1LAX6sObDdIRECpl7jr64tSwJZhodE7SERAviuZm+OLUsCvTCm8P0hEQCZswprji1LAt++JvD9IRECwmeqZ44tSwLKS6rw/SERA/9ZrM9uLUsDnWTwnQ0hEQCHyBz3Zi1LAvWeqxEVIREDXEmA= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745692545023, - "AQMAAAABAAAABAAAACgicrTcilLA83wbF0dIREArG9yo3IpSwKOPqGtLSERAQxO1YN2KUsDDjPsfSEhEQCgicrTcilLA83wbF0dIREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745724461055, - "AQMAAAABAAAACgAAAJkOOndRjVLA525JvwtJREB5rTCbR41SwEbzBw0PSURAGLZdEkONUsDlZEXmI0lEQHzYJmdNjVLAyKNsxDNJREDHUhhOT41SwGiaQiEzSURAVbkEolKNUsDNYIVVDUlEQBEZy0dSjVLAsnLBeQxJREDOZYg= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745695657983, - "AQMAAAABAAAADgAAABfJM7Gai1LA4vsNyVhIREAy4IrIlotSwAp217tqSERAAcDUG6GLUsAf2NiaekhEQGgqRvmvi1LAXRV4oXVIRECQ4BJKtItSwLrTGtBhSERAV+uEyrGLUsCmx90dYkhEQNwdcPWti1LAPRtxCGJIREAleDs= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745691987967, - "AQMAAAABAAAACAAAAKooeOkvi1LAZfYDlQlIREAcETM+LItSwNxVi2waSERAQI0OkTaLUsBkq7RLKkhEQIwUX25Fi1LAAEXKUiVIRECyP2O7SItSwFMVnSsWSERAGWXJvjmLUsDyC945D0hEQCyKW1sxi1LA8nYzsgpIRECqKHg= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745680977919, - "AQMAAAABAAAABwAAANOw7Nqbi1LA+8pp2QhMREA2MDX7jItSwAXBFNMNTERAT6RLcIiLUsCRtUitIkxEQCoAeomRi1LAx5K2qDBMREAKMIfLlItSwMZjWLspTERA4lHgu6CLUsD3hrhYEExEQNOw7Nqbi1LA+8pp2QhMREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745691430911, - "AQMAAAABAAAABQAAAKGuRdAPi1LAt6Lotu5HREDU1qaYF4tSwDAqN676R0RANvJdkBuLUsBQenpa+UdEQERPK2Eai1LAqpOQYfhHREChrkXQD4tSwLei6LbuR0RA" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745723346943, - "AQMAAAABAAAAHAAAAGvS10ZejVLAoBBgz6ZIREDprY9pT41SwNBJgsqrSERA0KrW4EqNUsAEx46jwEhEQE+zeTVVjVLA1lmHgdBIREAyjfLbX41SwFCY5O/MSERAe70cJGCNUsDujN4AzEhEQFS6eo1gjVLAyM+DecpIREA8O1w= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745921626111, - "AQMAAAABAAAAEQAAALDgyKhgjFLA/P5Tsv9HREAmjv71XIxSwJoITWsDSERALyUTaVuMUsDV0oQvBEhEQHb+39FZjFLAiBZRugRIREB0ovMzWIxSwJm8fgoFSERArsftklaMUsCQYVkfBUhEQO6VdPJUjFLAy8ax+ARIREBH/Co= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745743138815, - "AQMAAAABAAAABwAAAGANb07IilLAtysf65xMREDuu9YnvopSwHh/r0+gTERAv4zxC7uKUsAFUjo3wExEQG4OBTe/ilLAgZ2dn8ZMREB3/VMXzopSwJUttKbBTERAnAj/otKKUsB5yG3MrExEQGANb07IilLAtysf65xMREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745760931839, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745678749695, - "AQMAAAABAAAABgAAANo04wa/jFLANC5eaoVKREAJr1EosIxSwNDBDWWKSkRA0kaxnquMUsDfdtw+n0pEQOV6tcGtjFLAKbMqh6JKREATkUgmw4xSwD9Zlb+LSkRA2jTjBr+MUsA0Ll5qhUpEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745920511999, - "AQMAAAABAAAABgAAAB+VN+mljFLAHNlvlotHREDYGBAOlYxSwJEdvFCpR0RANSaHSpuMUsDGqL3lskdEQGtSUCeqjFLAWFdv661HREBgsmCwroxSwKzyKBOZR0RAH5U36aWMUsAc2W+Wi0dEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745913171967, - "AQMAAAABAAAADwAAAESB1YgDjVLA9iWvWS9HREBY9ydG/IxSwGiLbMgxR0RAzDxvvfeMUsBI0JegRkdEQNurMRECjVLA62YsflZHRECtKa/tEI1SwCGbfYNRR0RA4we/chONUsD4CLrtRUdEQOQrAhUOjVLAbjrjPT9HREDV1s8= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745673965567, - "AQMAAAABAAAABgAAAEvjnHf2i1LAPSLRNGNLREA8m+1D6ItSwL3ZYPVnS0RAVdVzueOLUsAaBV7PfEtEQFNTPCboi1LAeowAnINLREAh5ikQ9YtSwJ9Au7BmS0RAS+Ocd/aLUsA9ItE0Y0tEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745673408511, - "AQMAAAABAAAACAAAALu+rP0+jFLAFZO+8dZKREBwIdIeMIxSwFla8uvbSkRAsHDnACyMUsCsmrvU7kpEQD17KOM1jFLA0yHRc+dKREDaHSmNPoxSwP+vXF34SkRA6nN7k0eMUsBq4qLW7kpEQPSifVJJjFLAABdO0eZKREC7vqw= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745730457599, - "AQMAAAABAAAAFgAAAFC5Mnp5jVLApC7JuSlIRECCNz6dao1SwMdz+rQuSERAAxK1FGaNUsB/Ms+NQ0hEQMlUNGlwjVLAVfqAa1NIRECGoGfFfY1SwLPuP/FOSERAJLS19n2NUsCxrrQ2TUhEQG7V+1p+jVLAQGxP70lIREBH65U= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745733570559, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745672851455, - "AQMAAAABAAAADwAAAKGV1vf+i1LAVCD6s/9KREAkb9cY8ItSwL79760ES0RAS6x3juuLUsBGQryHGUtEQGwbygf0i1LAJW8njSZLRECDK1bD9ItSwG9lkhwmS0RA+S3loviLUsClnVOJJUtEQHh2Qfb6i1LACQXJVCRLREB4iTo= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745679634431, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745729343487, - "AQMAAAABAAAAMAAAALZOdEeBjVLAuBxeecZHRECt1b9qco1SwHIWjXTLR0RAkaFQ4m2NUsA83TBN4EdEQF/MqTZ4jVLASvizKvBHREC1qGG0go1SwD9bjabsR0RA/if6toKNUsDrgP2F7EdEQFP048mCjVLAMdgQxutHREB3w1Q= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745696870399, - "AQMAAAABAAAABgAAAEWNn5Zfi1LAgCxlxitIRECZTqSeXotSwGFA4TgwSERAUeOs8WiLUsC89vAXQEhEQHlj38Rzi1LAr3/MeDxIREBIZEZ1Y4tSwFVgYpswSERARY2fll+LUsCALGXGK0hEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745742909439, - "AQMAAAABAAAABwAAABpFAxQMi1LAKc7H7iBNREArX/jxAItSwN0vkKckTURAt+MycwOLUsDWUVVhJk1EQFn34MwHi1LAdi8zCSpNREDxR4LqC4tSwO4heSsuTURAVQ/kDRKLUsBEojUeKk1EQBpFAxQMi1LAKc7H7iBNREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745724559359, - "AQMAAAABAAAABwAAALzcUd5IjVLAoCu/nUhJREC81p8AOo1SwFsl3JhNSURAlu60dzWNUsAEdDVyYklEQGz0j8w/jVLASxiAUHJJRECAqMkSRo1SwIYIUzZwSURADEdtl0yNUsBlF5tVTklEQLzcUd5IjVLAoCu/nUhJREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745681633279, - "AQMAAAABAAAACAAAAHFDkU/Qi1LA+6JIo5ZLREBo0CpwwYtSwD31HZ2bS0RAjCaF5byLUsD1nSh3sEtEQJTYWTrHi1LAUUlsV8BLREA6o7cGzYtSwEBezGa+S0RAtPl/1dGLUsCbaA+VtUtEQKNTumjZi1LA7hZenqRLREBxQ5E= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745723445247, - "AQMAAAABAAAAIgAAAP+rvqxQjVLAp+2oWuVIREDrtEzPQY1SwKyfw1XqSERA9sF7Rj2NUsDw+usu/0hEQHmtMJtHjVLARvMHDQ9JRECZDjp3UY1SwOduSb8LSURAmy3qFFGNUsC8VxJ1C0lEQGJCHqRQjVLAXAF+CQtJREBL7aw= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745698312191, - "AQMAAAABAAAABgAAAG08OvjeilLAAk6WhphJREAXiRYn3opSwHp3p6WzSURASdt4DN6KUsCTTEAZt0lEQAdjDkXgilLAksMkW7ZJREC98xLQ5IpSwK4ObYKhSURAbTw6+N6KUsACTpaGmElEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236746168827903, - "AQMAAAABAAAACwAAAOMHv3ITjVLA+Ai67UVHRECtKa/tEI1SwCGbfYNRR0RASSCIQRuNUsCoXQVhYUdEQFJBCB4qjVLAnW47ZlxHREBBZzVeKo1SwL8+Jj9bR0RAEqjAJyiNUsBQpshPWkdEQGmfbbkjjVLAMafh2ldHRECVqug= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745679962111, - "AQMAAAABAAAABAAAAFysMkV+jFLAjn+zF9VKRED9fQTvdYxSwKC1NOLXSkRAGOmRNXSMUsBEG0rO30pEQFysMkV+jFLAjn+zF9VKREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745761587199, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745743237119, - "AQMAAAABAAAABQAAAHwQ22JDi1LAVrY8G/tMREDWWMFAPYtSwJCpPyj9TERAS5QPEDuLUsB8Dzo1B01EQIhW+cFAi1LAdqb41P5MREB8ENtiQ4tSwFa2PBv7TERA" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745700311039, - "AQMAAAABAAAABwAAAG/X5WXkilLAVrdHZ6ZIREBjPyg624pSwFetVXipSERARaTUKNuKUsDEqJYAvkhEQN6WNmrbilLAW8AID9BIREA5n/0t6opSwNKdHR/LSERANhnMuO6KUsAT0dxGtkhEQG/X5WXkilLAVrdHZ6ZIREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745678847999, - "AQMAAAABAAAABgAAAIj8SbvLjFLA/z9h1G1KREDZrW2Qw4xSwFc8lpBwSkRA2jTjBr+MUsA0Ll5qhUpEQBORSCbDjFLAP1mVv4tKREAyXwIQx4xSwCYt7JSHSkRAiPxJu8uMUsD/P2HUbUpEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745921167359, - "AQMAAAABAAAAEAAAAKpBmSoxjFLAVBV0KgpIRED1+tsXMIxSwFhnw8cLSERApyPfVi6MUsDCi142D0hEQMWNn+ksjFLAf5uV5RJIREDhGj3pKoxSwHFZtOIWSERACuO+oCiMUsBPdzyYGkhEQP3niRcmjFLAunh29B1IREBiNAs= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745696083967, - "AQMAAAABAAAABwAAAMyzxCgEjFLA7KJzdS9IREBu3gM3/ItSwO2BqIQySERASSVnIfSLUsB7p8hoN0hEQLXuThv0i1LAX6sObDdIRECckX6C9ItSwBocpQo4SERAsum3XwOMUsCzJPUQM0hEQMyzxCgEjFLA7KJzdS9IREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745692413951, - "AQMAAAABAAAACgAAADDKLXbmilLAKU0UcB5IRECm7lIW3YpSwAIPmpIhSERAH2+7+9yKUsCZ6njbK0hEQOuxW87cilLApw88aD1IREAE2tXF3IpSwEW4R5dASERAKCJytNyKUsDzfBsXR0hEQEMTtWDdilLAw4z7H0hIREA0Zyc= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745763586047, - "AQMAAAABAAAABwAAACTefjTeilLAaUjOVz5KREBedQAm14pSwAbCx7NASkRA1oz9atSKUsA23nP2ZkpEQCWaJR7VilLAnnrlCWhKRECJLfH844pSwGA6JBFjSkRAId0TiOiKUsC8dRE4TkpEQCTefjTeilLAaUjOVz5KREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745913270271, - "AQMAAAABAAAADgAAADTlw9XijFLANH0WDShHRECJpqD54YxSwC4EOU4oR0RAlFrR4d+MUsAMQHYZKUdEQEjurdHdjFLAvhj/DipHREALh6TK24xSwD4NLC4rR0RA2usdztmMUsBZZjV2LEdEQJ+QvQ7XjFLAZJ+IVy9HREC48dQ= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745699196927, - "AQMAAAABAAAABQAAALrsGn7bilLAuFfbgQJKRECdmFAc24pSwJ6EgfYJSkRA/2kpzNqKUsC/hKG4DkpEQMxPPffcilLAXBuwxQRKREC67Bp+24pSwLhX24ECSkRA" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745695526911, - "AQMAAAABAAAABQAAAIRo44zDi1LALs7IBFtIRECnGKKbwYtSwLNuDmBcSERA5S3Pf8GLUsACxJtwXEhEQMdPtWDDi1LAoZytz1tIRECEaOOMw4tSwC7OyARbSERA" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745680846847, - "AQMAAAABAAAABwAAABMxZEWvi1LAlzqABe9LRECXScBloItSwJGTPP/zS0RA07Ds2puLUsD7ymnZCExEQOJR4Lugi1LA94a4WBBMREAQZNodo4tSwNinvkcLTERA+pIzCrGLUsBy1VS98UtEQBMxZEWvi1LAlzqABe9LREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745769811967, - "AQMAAAABAAAABwAAAFbvBmOrilLANo0bQ+VLREDGnT2DnIpSwC5PyjvqS0RA56Ztm5iKUsBVd9Ul/EtEQG61ciKmilLAQ0i3mv9LREBlQC3NsYpSwDKctRgHTERAhdExt7WKUsB9tTEk9UtEQFbvBmOrilLANo0bQ+VLREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236746168598527, - "AQYAAAACAAAAAQMAAAABAAAABAAAAMYbEV82jVLAcHR5nmtHREBkv/dxNI1SwJdctkNsR0RA1WQIwjONUsCPAKtsb0dEQMYbEV82jVLAcHR5nmtHREABAwAAAAEAAAAHAAAAJsRYLUiNUsDiJhvEbkdEQPRca30xjVLAU6dZ2nk= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745750904831, - "AQMAAAABAAAABgAAAPBjVKnZilLAqUM/HgtNREAm6djIyopSwNdDPBcQTURAIwV0kcmKUsC1/KqrFU1EQPpPG/vQilLAY0o+SxdNREBfton844pSwGCcPf0aTURA8GNUqdmKUsCpQz8eC01EQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236746168041471, - "AQMAAAABAAAAKQAAALlJtLqljVLATwxtDEFHRECyy2pnnY1SwOz08x1FR0RA5nEUeZyNUsB6mDtmSUdEQEx0E7ihjVLA5SbidFFHREDc8I68oY1SwC+Lt25RR0RAZ42B8qGNUsBV3b8dUUdEQBLr4S6ijVLAvRVN0VBHRED9au0= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745729441791, - "AQMAAAABAAAARQAAAMbjowCJjVLAr6r2jrBHREBxmc3PhY1SwJ8fwaCxR0RAtk50R4GNUsC4HF55xkdEQILDmUyGjVLADwMzL85HREBCxyVMho1SwFOq+gvOR0RAB4btRoaNUsBkrEybzUdEQEuJ9T2GjVLAxewqK81HREBtW0M= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745725771775, - "AQMAAAABAAAACgAAAFJBCB4qjVLAnW47ZlxHREBJIIhBG41SwKhdBWFhR0RAFkXhuBaNUsCFCVQ5dkdEQGpvzgwhjVLALRXnFoZHREDEyGTpL41SwD5XExyBR0RA9FxrfTGNUsBTp1naeUdEQGAQxh8qjVLA7wfWc31HREDVZAg= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745921495039, - "AQMAAAABAAAADgAAAFlfhFdzjFLA98u/xeRHREBmDkG8a4xSwLzO+y/yR0RAwYsfP2iMUsD/Vnzg9kdEQG5Dez5ojFLAohZT4fZHREAf+9Y9aIxSwOI2EuL2R0RAqA5AnWSMUsC/VRtS+0dEQBSyNJxkjFLAIAxmU/tHREAbjiw= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745692741631, - "AQMAAAABAAAABQAAAAHypEjeilLAPfK0NdpHREDE33S73YpSwKCHSLX6R0RAHFNGruCKUsCZ1964+UdEQEKn9DjlilLAkjkO4eRHREAB8qRI3opSwD3ytDXaR0RA" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745681731583, - "AQMAAAABAAAABgAAAFXVc7nji1LAGgVez3xLREAv+yDa1ItSwLy4RMmBS0RAcUORT9CLUsD7okijlktEQKNTumjZi1LA7hZenqRLREBSUzwm6ItSwHmMAJyDS0RAVdVzueOLUsAaBV7PfEtEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745673834495, - "AQMAAAABAAAABAAAAOKa9+v6i1LAfkZ+mlFLREBOQabR94tSwMz8LtpfS0RA7geSw/yLUsAOyQGVU0tEQOKa9+v6i1LAfkZ+mlFLREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745673277439, - "AQMAAAABAAAACgAAACvMfWZSjFLAqBazHb1KRECTx7aHQ4xSwGY8+BfCSkRAu76s/T6MUsAVk77x1kpEQPSifVJJjFLAABdO0eZKREC00c5LToxSwJBIEyflSkRAPBFL/U6MUsCHseZv3kpEQERbKEZRjFLAIPviJ+RKREBn51o= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745672720383, - "AQMAAAABAAAADAAAAMb1C2ESjFLAwV4t4OVKRECjZyCCA4xSwL2bNNrqSkRAoZXW9/6LUsBUIPqz/0pEQPs5jEwJjFLAu7vGkw9LREBzbpq/DoxSwJzt5sANS0RAx10I9RGMUsDA5h+HBUtEQOl6uNAUjFLAw0fzPAJLREARTko= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745758015487, - "AQMAAAABAAAABAAAACGkevmMilLAdpNQ/7JLREB+k+jbiopSwE9M1CO2S0RAW+DbZoyKUsA0AtaftUtEQCGkevmMilLAdpNQ/7JLREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745736552447, - "AQMAAAABAAAAEwAAABCG53ESjVLA7uNx0EJKREBIKI6TA41SwD21cMtHSkRAz+HDFwONUsAsgW4ESkpEQNhqxDYDjVLAFwaoE0pKRECpDesZBI1SwP/FAJ1KSkRANEitAgWNUsA42e4tS0pEQIxZd6UFjVLAmzLynUtKREB/wbU= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745743335423, - "AQMAAAABAAAABAAAABTMGT1Vi1LAduFtzeFMRED8IWWsUItSwNkwQFTjTERA10BbHU+LUsAOw4d76kxEQBTMGT1Vi1LAduFtzeFMREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745742778367, - "AQMAAAABAAAABwAAAMjQ938fi1LAVs71GgdNREDnlYqfEItSwHeVOhQMTURAGkUDFAyLUsApzsfuIE1EQFUP5A0Si1LARKI1HipNRECq0/X0KItSwD2kBAAbTURAmwD01CmLUsC0djT8Fk1EQMjQ938fi1LAVs71GgdNREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745682059263, - "AQMAAAABAAAACAAAAEoLgQV1i1LAgfkcgTxMREB+WKIlZotSwFEopXpBTERAh+WMmmGLUsDtleZUVkxEQJQOau9ri1LABCuuNWZMREAXVfyqeotSwIh9R0hhTERAFEPU6XqLUsBTWqrCYExEQOmOYFp/i1LAJG7MYUxMREBKC4E= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745692512255, - "AQMAAAABAAAABwAAAALwKmvcilLAqbNYemJIREB2vJ853IpSwNmdr/50SERAWHcvAdyKUsBCN9QYgkhEQPOY8f7bilLAza/rj4JIREBeNuCd3opSwCw1kq+BSERAdJmqKOOKUsAqlHvXbEhEQALwKmvcilLAqbNYemJIREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745724428287, - "AQMAAAABAAAABgAAAMZSGE5PjVLAaJpCITNJREB82CZnTY1SwMijbMQzSURAvNxR3kiNUsCgK7+dSElEQAxHbZdMjVLAZRebVU5JRECrqaUtTY1SwHvM1khLSURAxlIYTk+NUsBomkIhM0lEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745742221311, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745699295231, - "AQMAAAABAAAACQAAAAGEYg3milLAh7X6E9tJREAZaS/H3IpSwBcHzi3eSURAuf/rg9yKUsBGXMgC6klEQPc6uO3bilLAfz1k//lJREC67Bp+24pSwLhX24ECSkRAzE8999yKUsBcG7DFBEpEQJjNyNXrilLAKAnxzP9JRECWddE= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745680945151, - "AQMAAAABAAAABQAAAFz96SLAi1LAv6fuC9ZLRED31iHQs4tSwLjAWSvaS0RAEzFkRa+LUsCXOoAF70tEQPqSMwqxi1LAc9VUvfFLREBc/ekiwItSwL+n7gvWS0RA" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745691398143, - "AQMAAAABAAAACAAAADbyXZAbi1LAUHp6WvlHREDU1qaYF4tSwDAqN676R0RAwUQgDhOLUsCGcySGD0hEQHg05WAdi1LAAJhaZR9IREAcETM+LItSwNxVi2waSERAqih46S+LUsBl9gOVCUhEQIlyqGAmi1LAkGwjOwJIREA28l0= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745723314175, - "AQMAAAABAAAAKwAAADKN8ttfjVLAUJjk78xIREBPs3k1VY1SwNZZh4HQSERA/6u+rFCNUsCn7aha5UhEQKQUpW5ZjVLAaqP9zfJIREAdsel8WY1SwFHP2pzySERAloK+AlqNUsC/MdhB8UhEQOsjZ41ajVLArDxZTPBIREBNQOs= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745698181119, - "AQMAAAABAAAABwAAAEwaBObtilLAFHgZ0XdJREDPsSLQ34pSwH2V0IZ8SURAbTw6+N6KUsADTpaGmElEQL3zEtDkilLArg5tgqFJREAPXl6u84pSwHArsImcSURAhv9MOfiKUsDgNP+wh0lEQEwaBObtilLAFHgZ0XdJREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745762013183, - "AQMAAAABAAAACAAAAKlDKdKfilLAYkKWzZtLRECgAEmmm4pSwB7xfzKdS0RAIaR6+YyKUsB2k1D/sktEQFvg22aMilLANALWn7VLREDT9tu6lopSwGiz7YDFS0RAUASPmqWKUsCzuEiIwEtEQGu3KyaqilLA9NOVrqtLRECpQyk= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745679831039, - "AQMAAAABAAAABQAAAOnPVTaYjFLAmiVQE7lKREBaF51XiYxSwE3/3A2+SkRAf3rCJ4aMUsDRNUqyzEpEQKAIEl2YjFLApnjRTrlKREDpz1U2mIxSwJolUBO5SkRA" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745729540095, - "AQMAAAABAAAAKQAAALWoYbSCjVLAP1uNpuxHREBfzKk2eI1SwEr4syrwR0RAnZQ4rnONUsCW1mwDBUhEQK/0pQJ+jVLA9zj74BRIREAy0MTTho1SwM+FeewRSERAqDP8z4aNUsCKDkn/D0hEQNO6OsaGjVLA+gFRSQ9IRECKmx8= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745736323071, - "AQMAAAABAAAAFwAAAIGoyRJGjVLAhghTNnBJREBs9I/MP41SwEsYgFBySURAtAejQzuNUsDufO4ph0lEQFwy2K1AjVLAX3L/eo9JREDjJ6yvQI1SwEDIwS2PSURAKCQp/ECNUsCZuHejjElEQDpT429BjVLA+8AvVItJRECuUCM= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745921593343, - "AQMAAAABAAAABgAAAE9c1DKEjFLAFRksC8dHREBZX4RXc4xSwPfLv8XkR0RASZJXfnSMUsBAZMeK5kdEQGDnR1uDjFLAFsGbkOFHRECYG4Tkh4xSwO3OR7jMR0RAT1zUMoSMUsAVGSwLx0dEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236746167582719, - "AQMAAAABAAAABgAAAE02J9mMjVLAjH4gNU1HREDTiTlhcY1SwPV8haFaR0RAFsj/N3qNUsCVSRI1aEdEQHg6dBSJjVLAMJzlOWNHRECjlbOcjY1SwBiZeWFOR0RATTYn2YyNUsCMfiA1TUdEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745725313023, - "AQMAAAABAAAACAAAAKmCacK3jFLAJQi4Ym9HREDEmav/s4xSwCv2LqVwR0RAOggkCKeMUsAoi2mciUdEQB+VN+mljFLAHNlvlotHREBgsmCwroxSwKzyKBOZR0RAHUoWjb2MUsDCSskYlEdEQFPAEBbCjFLAbK2JQH9HRECpgmk= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745921036287, - "AQMAAAABAAAADAAAACj9D6ZEjFLASZNCgQBIRECd6uHiQIxSwKd1+6IASERAsP9vKT2MUsBo2DU7AUhEQN7N6oI5jFLA86gvRgJIREALTGHqNoxSwC+sruUDSERA6dS0bzSMUsCkpNQMBkhEQNFvTSQyjFLASmvOsghIRECqQZk= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745681829887, - "AQMAAAABAAAABAAAADqjtwbNi1LAQF7MZr5LRECU2Fk6x4tSwFFJbFfAS0RA89LTEsSLUsBCCgbTzktEQDqjtwbNi1LAQF7MZr5LREA=" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745673932799, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745698508799, - "AQMAAAABAAAACAAAAOwKhlXiilLAAzlNYC5JRECY1qId4IpSwMenLx4vSURAojQ9VuCKUsCemTlNNElEQCGXDLvgilLAyTTvOEVJREBRTn3L4IpSwJM6VYtVSURAsv67HeiKUsAhJ6MYU0lEQDSJpqjsilLAw1ocQD5JREDsCoY= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236746168467455, - "AQMAAAABAAAABQAAAF3ydb1fjVLAay1OQGNHREAmxFgtSI1SwOMmG8RuR0RAuIiAok2NUsAnYz8md0dEQBjvBX9cjVLAIy0/K3JHREBd8nW9X41SwGstTkBjR0RA" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745672818687, - "AQMAAAABAAAACAAAAPvMF8oljFLAZv5VDMxKREA31z/rFoxSwIGabgbRSkRAxvULYRKMUsDBXi3g5UpEQFLyw7UcjFLAadrhv/VKREArQQmiJ4xSwFXvABjySkRAsHDnACyMUsCsmrvU7kpEQHAh0h4wjFLAWVry69tKRED7zBc= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745758113791, - "AQMAAAABAAAADQAAAP+Cb7V5ilLAZdUVkNBLREDS+7j2eIpSwIjMzMfTS0RAcQsE0XiKUsDcdJ9q1EtEQJE1R9x3ilLA4cEU4NlLRED8yekvd4pSwJt2BnPfS0RAbF7jzXaKUsAmLEsW5UtEQF9QvLZ2ilLA0RtOvOpLREBJd6Y= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745679601663, - "AQMAAAABAAAAIQAAACzMfz75jFLACcGj7DdKRECfEilg6oxSwC5oh+c8SkRA6TTabOmMUsC/y8lFQUpEQEvVcqTpjFLA1/1jR0FKRED+DH1K6oxSwE5D04ZBSkRArUzC/OqMUsAfZjgpQkpEQAgR94vrjFLApwFgu0JKRECaQlU= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745696837631, - "AQMAAAABAAAACAAAAHpj38Rzi1LAr3/MeDxIREBR46zxaItSwLz28BdASERAfuxfZ2SLUsBWVR7wVEhEQKGzfLpui1LAClk5z2RIREBoy+iXfYtSwIHgDtZfSERArN8hIoKLUsCHLdP9SkhEQIvvORt9i1LAUjWXQ0NIREB6Y98= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745742876671, - "AQMAAAABAAAACAAAALVpaxXtilLAe1PASvFMREDZhwM13opSwAy7zkP2TERA8GNUqdmKUsCpQz8eC01EQF+2ifzjilLAYJw9/RpNREClgCsC5IpSwAfxVf4aTURAATOf3vKKUsDajJcGFk1EQH9tOmr3ilLADqwYLAFNREC1aWs= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745735536639, - "AQMAAAABAAAACQAAAFVerKgtjVLA+GJxtsVJREAQrqbKHo1SwBhKf7HKSURAPuKLQRqNUsB0UBCL30lEQEqvipYkjVLAmr+hae9JREBpnKZ0M41SwOsIim7qSURAxGj8tjeNUsBl9+jZ1klEQBupNLw3jVLAlaqSz9VJREBS+/w= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745763782655, - "AQMAAAABAAAABQAAAGNgliHLilLAj5WO2+NKREDBzi5tyIpSwG9it+oGS0RAu1bxgc6KUsCuVUziBEtEQKIMRg3TilLAKNzsCPBKREBjYJYhy4pSwI+VjtvjSkRA" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745742319615, - "AQMAAAABAAAACAAAAI8a3MJZi1LAZMc/n7lMREB5rKniSotSwMfAuJi+TERARTtkV0aLUsAXyjFz00xEQPwhZaxQi1LA2TBAVONMREAUzBk9VYtSwHbhbc3hTERAhFTWEWOLUsBEdtUyzkxEQE1c3xdki1LAZg02gMlMRECPGtw= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745699393535, - "AQMAAAABAAAABgAAABZXx+bZilLAXJ/C5BtKREDY2MHI2IpSwGK2GsgpSkRAXnUAJteKUsAGwsezQEpEQCTefjTeilLAaUjOVz5KRED0gZ+/4opSwAiY0H4pSkRAFlfH5tmKUsBcn8LkG0pEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745695723519, - "AQMAAAABAAAACwAAAMdPtWDDi1LAoZytz1tIREDlLc9/wYtSwALEm3BcSERA8V9t4LyLUsCXZJYwX0hEQLhP40u5i1LA8J8uq2BIREAdbySWtYtSwIHEuqdhSERAkOASSrSLUsC60xrQYUhEQGgqRvmvi1LAXRV4oXVIREBplqY= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745770565631, - "AQMAAAABAAAABgAAAL+M8Qu7ilLABVI6N8BMRED3i+BMuopSwKqQ99/HTERAau9xW7iKUsDrU7c/3ExEQAYORKu6ilLA97vqedtMREBuDgU3v4pSwIGdnZ/GTERAv4zxC7uKUsAFUjo3wExEQA==" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745692053503, - "AQMAAAABAAAACAAAALI/Y7tIi1LAUxWdKxZIRECMFF9uRYtSwABFylIlSERABR1RwU+LUsAry+YxNUhEQJlOpJ5ei1LAYUDhODBIREBFjZ+WX4tSwIAsZcYrSERATCsLel2LUsDt3mQjKUhEQF2Yfk9Ni1LAbw26ShhIRECyP2M= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745691496447, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745762668543, - "AQMAAAABAAAADQAAAMnMvqDSilLAgrRmC4BKREBM92Bw0opSwNJWGbGCSkRApebsSdKKUsAXBA/MhEpEQABiZi3SilLAPll8WYZKRECduvzL0YpSwMTZ76eLSkRA5LxJsNGKUsAQ+JMpjUpEQAzII43RilLAL38yF49KREAmVOM= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745698279423, - "AQMAAAABAAAACAAAAAdjDkXgilLAksMkW7ZJREBJ23gM3opSwJNMQBm3SURAKLotRd2KUsBYv2fx0ElEQHze3N7cilLA+ZyQA9pJREAZaS/H3IpSwBcHzi3eSURAAYRiDeaKUsCHtfoT20lEQGEgaZjqilLA2ustO8ZJREAHYw4= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745769451519, - "AQMAAAABAAAABQAAAOaTaHXEilLAzKLeUl9MRECiHMIJwopSwI4IEFl4TERAnkmchcKKUsDQhaoveExEQNM7QxHHilLAvESOVWNMREDmk2h1xIpSwMyi3lJfTERA" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745736421375, - "AQMAAAABAAAAKgAAAPYNYtkljVLAoMGf+yhKRED1SRz7Fo1SwK7tr/YtSkRAEIbncRKNUsDu43HQQkpEQMJl/UgVjVLAWxMyLUdKREBindMnF41SwDO4waRGSkRAAF87kheNUsBzHJ6iRkpEQKRTDvsXjVLAkmamhkZKREBYXJ4= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745921691647, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745681928191, - "AQMAAAABAAAACQAAAE+kS3CIi1LAkbVIrSJMRECXioCQeYtSwDdI4qYnTERASguBBXWLUsCB+RyBPExEQOmOYFp/i1LAJG7MYUxMREAgk2Z1hYtSwMLhAVdKTERAEo+1M4qLUsBorzhBQExEQBOkhXCRi1LA14/F3TBMREAqAHo= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - true, - 622236745696051199, - null - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745692381183, - "AQMAAAABAAAACAAAADRnJz7silLALShqJ0NIREBDE7Vg3YpSwMOM+x9ISERAKxvcqNyKUsClj6hrS0hEQALwKmvcilLAqLNYemJIREB0maoo44pSwCqUe9dsSERAeyozBvKKUsBHaODeZ0hEQJGg55D2ilLAR4fQBlNIREA0Zyc= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745763553279, - "AQMAAAABAAAACQAAAIkt8fzjilLAYDokEWNKREAlmiUe1YpSwJ565QloSkRA9Y6J9tOKUsAS1TZWbUpEQOeGhijTilLAx5TjnHhKREDJzL6g0opSwIK0ZguASkRAydGT5tqKUsDclGXDjEpEQFSmdcXpilLA34yayodKRECnYZo= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236746169122815, - "AQMAAAABAAAAHwAAAHg6dBSJjVLAMJzlOWNHREAWyP83eo1SwJVJEjVoR0RATISqr3WNUsAIF4UNfUdEQDCY3QOAjVLAz4TZ6oxHREBvQmjgjo1SwDoHo++HR0RAzcxrl4+NUsAGAuGlhEdEQKUCd7+PjVLA2zRwoINHREALQHY= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745680257023, - "AQMAAAABAAAACAAAAMv1sAJ/jFLAcpOKLq5KREBk4/ojcIxSwBpC/CizSkRAH7MammuMUsD+KcoCyEpEQP19BO91jFLAoLU04tdKREBbrDJFfoxSwI5/sxfVSkRAf3rCJ4aMUsDRNUqyzEpEQFoXnVeJjFLATf/cDb5KREDL9bA= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745672916991, - "AQMAAAABAAAACAAAAHNumr8OjFLAnO3mwA1LRED7OYxMCYxSwLu7xpMPS0RAaicA9gaMUsAFuptQGktEQDmF8sQHjFLAJ/EeZRlLRECgGY+oCYxSwPpCVQAXS0RATQaFdguMUsAxYeF1FEtEQNcrki0NjFLAOGqIxxFLREBzbpo= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745690710015, - "AQMAAAABAAAABQAAACb5OGLcilLAURRXke1IREDfA6Iq3YpSwAHiVIL9SERAjlqPpN2KUsD/cP+mBElEQAWySBjhilLAZwy7z/RIREAm+Thi3IpSwFEUV5HtSERA" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745761882111, - "AQMAAAABAAAACgAAALIdTT2zilLA7ddL+4FLREDRx5ceqYpSwBqAPl2FS0RAlwJC5qiKUsDU7QnLhUtEQCcu9q2iilLAtVg/M5FLREAdq0/NoYpSwCvYN7eSS0RAqUMp0p+KUsBiQpbNm0tEQGu3KyaqilLA9NOVrqtLRECiLss= (truncated)" - ], - [ - "Staten Island", - "99", - "99", - "Freshkills Park", - false, - 622236745750872063, - "AQMAAAABAAAABgAAAAYORKu6ilLA97vqedtMREBq73FbuIpSwOtTtz/cTERAQv5NjLSKUsDKYGcwBE1EQFzYInTAilLAKfO+NQBNREBr5eX/xIpSwATDXFvrTERABg5Eq7qKUsD3u+p520xEQA==" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937470463, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751857385471, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751873212415, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751936913407, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751933079551, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751873376255, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937077247, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751872098303, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751872819199, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937241087, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751936684031, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751871705087, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751938125823, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751873146879, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937568767, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751872589823, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751933014015, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751873310719, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937011711, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751872032767, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751872753663, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751933177855, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937175551, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751933341695, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751871639551, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937339391, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751938060287, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751873081343, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751871803391, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751873245183, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751936946175, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751871967231, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751872688127, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751873409023, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937110015, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751872851967, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937273855, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751872294911, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937994751, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751873015807, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751936716799, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937437695, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751871901695, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937601535, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751933046783, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751938322431, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751873343487, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937044479, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751872786431, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937208319, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751871672319, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937372159, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751936815103, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751871836159, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751872557055, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751932981247, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751938256895, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751873277951, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751936978943, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751872720895, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751872884735, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751933308927, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937306623, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751857221631, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751873048575, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751936749567, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751871770623, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751617425407, - "AQMAAAABAAAABwAAAFuk1FT4fVLAaMHh5nxRRECVVYdY9H1SwD3Fi8d9UURADxBsX/d9UsBOjuzxklFEQAULzkP5fVLAuN//AaBRRECTVndQ/H1SwNAtCQCfUURAb3JF6AB+UsBq1q8nilFEQFuk1FT4fVLAaMHh5nxRREA=" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751877046271, - "AQMAAAABAAAABwAAAEGj2xvoflLAoddU7BdSRECDgRJf4H5SwCrlDPAdUkRAYSTMy9l+UsBwJFt5I1JEQO2jvNjTflLA02SqbChSREDWWrny1X5SwGVRuqsrUkRAHANr2OR+UsBt5Ja+JlJEQEGj2xvoflLAoddU7BdSREA=" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751872458751, - "AQMAAAABAAAABwAAANEgXKx6flLAQcX68e1QREAZnLrUdX5SwEXm0YvvUERAs7lwPXF+UsCcDwRkBFFEQCyjM4t7flLAtKykTxRRREA4YGM/fn5SwLNpy2oTUURAhY2b4n1+UsA3GTSeD1FEQNEgXKx6flLAQcX68e1QREA=" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751871999999, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751933276159, - "AQMAAAABAAAABgAAAJNWd1D8fVLA0C0JAJ9RREAFC85D+X1SwLjf/wGgUURAky60m/59UsDJ767lxFFEQA27WgYCflLAhN+oxMNRREDdCiueBn5SwAyAOuyuUURAk1Z3UPx9UsDQLQkAn1FEQA==" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751876882431, - "AQMAAAABAAAACAAAAAyzeGDpflLAYhwA8BZSREBBo9sb6H5SwKHXVOwXUkRAHANr2OR+UsBt5Ja+JlJEQFBI/ybvflLAlUNhqjZSREC0zLMM/n5SwFigIr0xUkRALIZ1i/5+UsAfvWh9L1JEQLRsbafuflLAqiI0+RtSREAMs3g= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751938158591, - "AQMAAAABAAAABgAAAPOiYf1QflLAByZ+nZFSRECuJFQXQn5SwDEvE4qWUkRA3uhx7D5+UsBjMLvqpFJEQNvH5kpHflLAoYs4I55SREDgVFj3Un5SwHEgOquUUkRA86Jh/VB+UsAHJn6dkVJEQA==" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751875506175, - "AQMAAAABAAAACAAAAH/eC4drflLAF7Q8oN9QREB2wvSuYH5SwIGh+jXjUERAkiKR8Vt+UsDtGiWu51BEQAgOuApYflLAfDblZPlQREBvQ2RYYn5SwKmGklAJUURAs7lwPXF+UsCcDwRkBFFEQBmcutR1flLARebRi+9QREB/3gs= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751936782335, - "AQMAAAABAAAACQAAACzUaK99flLAJ2tl14JSREDP+mvJbn5SwO5DJ8SHUkRAbjHMMWp+UsCSTSqdnFJEQBH63i9uflLAX9E8yKJSREAE7b91dX5SwNFT2jGhUkRAA4jWq4R+UsBX1BnYnVJEQML7W5iFflLAOCL0pJ1SREB7Rdw= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751857319935, - "AQMAAAABAAAABgAAAIIjIicff1LA7++ImFdSREDtoN/4HH9SwI1HWoBhUkRAIoC1Ryd/UsDInhZscVJEQHrUUoUxf1LA1/bvCG5SREBqbveYJn9SwM4+8qFgUkRAgiMiJx9/UsDv74iYV1JEQA==" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751933112319, - "AQMAAAABAAAACAAAANq8cCgTflLAyqZKEzJSRECf3uGPDn5SwDhJFpgzUkRAdwxdVg9+UsBaq8O4OFJEQHrwDZcSflLA1fkX0U5SREBdN7n3E35SwB2yGndYUkRAUgWc3hh+UsBXI2zYVlJEQIwkdXYdflLA4aSp/0FSREDavHA= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751937535999, - "AQMAAAABAAAABwAAAGXD31O5flLAxhigJftRREB2j2sHt35SwFTBM+j7UURAJSUmcLJ+UsC2pQfBEFJEQFD/jL68flLANHLrrCBSREBwl37cvH5SwMO9BKMgUkRATYF/ibl+UsAGpXM0/VFEQGXD31O5flLAxhigJftRREA=" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751877013503, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751938289663, - "AQMAAAABAAAABwAAAH87dgTPflLA3aFLmshSREC9aFoewH5SwG2/aIfNUkRAAUFvPb1+UsATCp2Z2lJEQHJVohfOflLAbw1c2dZSREDBgg/m1X5SwLyEbhXVUkRAiBumsNZ+UsAgQ1l01FJEQH87dgTPflLA3aFLmshSREA=" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751858368511, - "AQMAAAABAAAABgAAAGCGxjMPf1LAAyT6C6BSREDi4M5NAH9SwB2oVfmkUkRAcztnW/x+UsBh+V3mtlJEQMbBKOUOf1LA6EEXhqhSREBc+TC8En9SwBuE4IClUkRAYIbGMw9/UsADJPoLoFJEQA==" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751872425983, - "AQMAAAABAAAACAAAADhgYz9+flLAs2nLahNRREAsozOLe35SwLSspE8UUURAT47n83Z+UsDh3usnKVFEQO+jvkGBflLAneaXEzlRREBzq4fSgX5SwP17ueM4UURAxlGhNoF+UsDFpImBMlFEQN9+Qs5/flLAsfwLwCNRREA4YGM= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751933243391, - "AQMAAAABAAAACQAAAA27WgYCflLAhN+oxMNRRECTLrSb/n1SwMnvruXEUURAHMxUi/99UsCnHwVcy1FEQCnT7qsAflLAFwFvI9NRREAct22yAn5SwGnKB5DjUURACQfUowN+UsC3++Dj6VFEQAoYULwHflLAgARpiehRREDDmyI= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751877308415, - "AQMAAAABAAAABwAAANA9HiyyflLAKsS9MrBRREDto16Zq35SwKGyJV+yUURAhJ0dAqd+UsC+hs83x1FEQMcbXFCxflLAWIGcI9dRRECMc4qvtX5SwBZSjLHVUURADJleB7N+UsDJ0u02uVFEQNA9HiyyflLAKsS9MrBRREA=" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751857287167, - "AQMAAAABAAAACAAAAHrUUoUxf1LA1/bvCG5SREAigLVHJ39SwMieFmxxUkRAEBm7sCJ/UsCFj05FhlJEQM4FhrQqf1LAw2pIppJSREAOYLMgP39SwI/dAZaCUkRAm3Zi0j9/UsDikdVuf1JEQLpltTAzf1LA50pRFXBSREB61FI= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751931244543, - "AQMAAAABAAAABQAAADYY5W4yflLA+hE0C69SREBFdWmZLn5SwM6tkU+wUkRAITioFS5+UsA1gJKlslJEQI2xqw0xflLAhlAUKrBSREA2GOVuMn5SwPoRNAuvUkRA" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937961983, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751937503231, - "AQMAAAABAAAACgAAAHCXfty8flLAw70EoyBSREBQ/4y+vH5SwDRy66wgUkRAG2NFJ7h+UsCDXtSFNVJEQKdrwHXCflLAmJPDcUVSRECsl4Vb0X5SwEi9sYRAUkRA1lq58tV+UsBlUbqrK1JEQO2jvNjTflLA02SqbChSRED7TwA= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751875309567, - "AQMAAAABAAAABQAAAI/Jx15tflLAtVNtQtdQRED0ZJE1aX5SwF5T4ivbUERAdsL0rmB+UsCBofo141BEQH/eC4drflLAF7Q8oN9QRECPycdebX5SwLVTbULXUERA" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751857876991, - "AQMAAAABAAAABAAAAJt2YtI/f1LA4pHVbn9SREANYLMgP39SwJDdAZaCUkRAUfHMH0F/UsCnG/8DgVJEQJt2YtI/f1LA4pHVbn9SREA=" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751857418239, - "AQMAAAABAAAABgAAABAZu7Aif1LAhY9ORYZSRECM+NbKE39SwFmquzKLUkRAYIbGMw9/UsADJPoLoFJEQFz5MLwSf1LAGoTggKVSREDOBYa0Kn9SwMNqSKaSUkRAEBm7sCJ/UsCFj05FhlJEQA==" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751934128127, - "AQMAAAABAAAABwAAAFIFnN4YflLAVyNs2FZSREBdN7n3E35SwB2yGndYUkRADq4U8BV+UsAv3oBDZlJEQC/lyEIZflLAn0XIX31SRECdR9mUHn5SwKwRrp17UkRAlZq0LCN+UsDHi9bEZlJEQFIFnN4YflLAVyNs2FZSREA=" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751871934463, - "AQMAAAABAAAACwAAADNjLjFHflLA9ZPyS/tQRED5HWuIQn5SwLU1S73/UERAk673Ezx+UsCJ8yHiBVFEQGxUb1k6flLA491zgQdRREBoSLPkN35SwMl0Nc0JUURAYLL4rTN+UsBQSQivDVFEQPPOX70wflLA7G05exBRREBxmx0= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751877275647, - "AQMAAAABAAAACQAAAItziq+1flLAFlKMsdVRREDHG1xQsX5SwFiBnCPXUURAZOMYuax+UsCpXVv861FEQHaPawe3flLAVMEz6PtRREBlw99TuX5SwMYYoCX7UURA45/9brh+UsArw/hc8lFEQPNdute2flLASqcZPuFRREBTxsU= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751938093055, - "AQMAAAABAAAACQAAAC+qEMk3flLA3xGqnYZSREC3CgbjKH5SwDjkI4qLUkRACYQoSyR+UsBmcRBjoFJEQEV1aZkuflLAzq2RT7BSREA2GOVuMn5SwPoRNAuvUkRAVSQkpzZ+UsDuy92dq1JEQN7ocew+flLAYzC76qRSRECuJFQ= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937634303, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751875440639, - "AQMAAAABAAAABwAAAJIikfFbflLA7BolrudQREDoDGM9W35SwES4C1joUERAz+nU8Eh+UsBaYBih+VBEQDNjLjFHflLA9pPyS/tQREC0da4lSX5SwF56WFH+UERACA64Clh+UsB8NuVk+VBEQJIikfFbflLA7BolrudQREA=" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751857254399, - "AQMAAAABAAAACAAAAOPvGj0Mf1LAIyI1YEBSREBJx15bCH9SwCxI4KhBUkRACrdSxAN/UsBhsvSBVlJEQLjgERMOf1LAu8G9bWZSREDtoN/4HH9SwI1HWoBhUkRAgiMiJx9/UsDv74iYV1JEQBohZ+0Yf1LALNL4CVBSREDj7xo= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751938387967, - "AQMAAAABAAAABgAAAMIN7pqcflLAddQKnLJSREDu5sdWln5SwAzhW660UkRAuy2L6pl+UsAEur0o2lJEQLEbElKiflLAqip2YddSREDiZIzppn5SwKAYQYjCUkRAwg3umpx+UsB11AqcslJEQA==" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751872983039, - "AQMAAAABAAAABgAAAGxjw5QdflLAy2ycskZRREAJHTUFFX5SwNam5YZJUURAJly2lxh+UsDDCRsAb1FEQNj2xUojflLA0GDedmtRRECD/mfiJ35SwCUXkp5WUURAbGPDlB1+UsDLbJyyRlFEQA==" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751872065535, - "AQMAAAABAAAABwAAAPPOX70wflLA7G05exBRRECTTLzTIn5SwPmVk7gdUURALiBBVRp+UsAHwLS8JVFEQJY3YywiflLAkytl2jFRREC70JMRMX5SwLATFe4sUURAcZsdqTV+UsATWuQVGFFEQPPOX70wflLA7G05exBRREA=" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751876947967, - "AQMAAAABAAAACAAAACyGdYv+flLAH71ofS9SREC0zLMM/n5SwFigIr0xUkRAScdeWwh/UsAsSOCoQVJEQOPvGj0Mf1LAIyI1YEBSREASkbjMC39SwL1netU/UkRAb6UCegN/UsBMUi+kNVJEQBeAuNH+flLA6ayz0y9SREAshnU= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751938224127, - "AQMAAAABAAAACQAAAK9apc+1flLApTI/m71SREDiZIzppn5SwKAYQYjCUkRAsRsSUqJ+UsCqKnZh11JEQHGZHYanflLAy/Mza99SREByYXbfqX5SwPFANuzeUkRAGdIcF71+UsDgpCSi2lJEQAFBbz29flLAEwqdmdpSREC9aFo= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751936847871, - "AQMAAAABAAAACAAAAJj82+OWflLA4O2/1o1SREB7Rdz9h35SwJL9nMOSUkRAwvtbmIV+UsA4IvSknVJEQPTpldiTflLAIjoIkJpSREDu5sdWln5SwAzhW660UkRAwg3umpx+UsB11AqcslJEQK4kZjKhflLAuMnqwp1SRECY/Ns= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751858302975, - "AQMAAAABAAAACAAAAEMO/v71flLAFRJpDZVSREC9RAkZ535SwNdeqfqZUkRAA+3OgeJ+UsC/4d/TrlJEQOs4ndDsflLAOpfkv75SREAAuqtD9n5SwMiy65+7UkRAcztnW/x+UsBh+V3mtlJEQOLgzk0Af1LAHahV+aRSREBDDv4= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751934095359, - "AQMAAAABAAAACAAAAJ1H2ZQeflLArBGunXtSREAv5chCGX5SwJ9FyF99UkRAHo2Dqxl+UsAb0CA4gFJEQHuwDmsdflLAyU+QvJlSREB0mRmfHn5SwKi26EKiUkRACYQoSyR+UsBmcRBjoFJEQLcKBuMoflLAOOQjiotSRECdR9k= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751872360447, - "AQMAAAABAAAACAAAAAaMDJquflLAcwfuuIpRRECZJ3PipX5SwItVz5qNUURAM1M0S6F+UsBYIWRzolFEQO2jXpmrflLAobIlX7JRREDQPR4ssn5SwCrEvTKwUURATgz9BLF+UsDnFL0PpFFEQID6xbuvflLAgunWWZdRREAGjAw= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751873114111, - "AQMAAAABAAAABgAAACvdMOoSflLAIaZiHHdRRED7Shf9CX5SwHF8jAN5UURAW6TUVPh9UsBoweHmfFFEQG9yRegAflLAatavJ4pRREAlbLPND35SwKlPeTuFUURAK90w6hJ+UsAhpmIcd1FEQA==" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751872196607, - "AQMAAAABAAAABgAAAIhy58SpflLArzZOHFZRREA/9d3nl35SwGcifcpZUURAs3mJnJZ+UsAMBfARWlFEQHammSugflLAemqZ1mhRRECi9nweq35SwN4W1DdlUURAiHLnxKl+UsCvNk4cVlFEQA==" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751871737855, - "AQMAAAABAAAACgAAAKVccKp8flLAgyH0601RREDlKDfFbX5SwJDUldhSUURALtjSLWl+UsDll/iwZ1FEQC+Su3tzflLAYCjInHdRREALJQthgn5SwCTXHLByUURAtp5b+IZ+UsCpk6vXXVFEQAD4Rr6GflLAmcTufV1RRED2F9A= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751931179007, - "AQMAAAABAAAABwAAAAmEKEskflLAZnEQY6BSREB0mRmfHn5SwKm26EKiUkRAK9x9FyF+UsChkx/Ds1JEQIdU3kIiflLAz6NziLxSREAhOKgVLn5SwDaAkqWyUkRARXVpmS5+UsDOrZFPsFJEQAmEKEskflLAZnEQY6BSREA=" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751877079039, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751938355199, - "AQMAAAABAAAABQAAALEbElKiflLAqip2YddSREC7LYvqmX5SwAS6vSjaUkRAsa5ZrZp+UsCNebch4lJEQHGZHYanflLAy/Mza99SRECxGxJSon5SwKoqdmHXUkRA" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751937437695, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751858434047, - "AQMAAAABAAAACQAAAAPtzoHiflLAv+Hf065SREDbnsab035SwCCXDsGzUkRAfzt2BM9+UsDdoUuayFJEQIgbprDWflLAIENZdNRSRECpvTwo3n5SwGeIZYTOUkRAMLeyrOp+UsCOpsWcxFJEQAZ957LrflLA4zNv0cNSREDrOJ0= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751872950271, - "AQMAAAABAAAACQAAANj2xUojflLA0GDedmtRREAlXLaXGH5SwMQJGwBvUURAeRq/PBl+UsDgx1LDdVFEQCvdMOoSflLAIaZiHHdRREAlbLPND35SwKlPeTuFUURAAappGxp+UsCcg5InlVFEQN+C2gApflLAhshAO5BRRED9vX4= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751616376831, - "AQMAAAABAAAABgAAAC4gQVUaflLAB8C0vCVRREBUdiNUEn5SwAI2hkotUURACR01BRV+UsDWpuWGSVFEQGxjw5QdflLAy2ycskZRRECWN2MsIn5SwJMrZdoxUURALiBBVRp+UsAHwLS8JVFEQA==" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751937732607, - "AQMAAAABAAAABQAAAG4xzDFqflLAkk0qnZxSRECWOp/3Yn5SwL1ktwCfUkRAeOOJkmN+UsCItVYZpVJEQBH63i9uflLAX9E8yKJSREBuMcwxan5SwJJNKp2cUkRA" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751858270207, - "AQMAAAABAAAABAAAAAG6q0P2flLAyLLrn7tSREDrOJ3Q7H5SwDqX5L++UkRABn3nsut+UsDjM2/Rw1JEQAG6q0P2flLAyLLrn7tSREA=" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751857352703, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751872327679, - "AQMAAAABAAAACAAAALN5iZyWflLADAXwEVpRRECwEMFxin5SwD/XnbFcUURAtp5b+IZ+UsCpk6vXXVFEQAslC2GCflLAJNccsHJRREDVkwqvjH5SwHKz35uCUURAHARdlJt+UsDULRmvfVFEQHammSugflLAemqZ1mhRRECzeYk= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751933145087, - "AQMAAAABAAAACAAAAN1tV3INflLAYpxJTg1SREBY0l8hCX5SwMZUbLsOUkRAy7o7ogp+UsAo5urRGFJEQI63eQkMflLA6OQA5SJSRECf3uGPDn5SwDhJFpgzUkRA2rxwKBN+UsDKpkoTMlJEQEioR8AXflLA4C+dOh1SREDdbVc= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751938027519, - "AQMAAAABAAAADQAAAGJAD3tkflLAWfvi13dSREAiRRWVVX5SwFmdicR8UkRA86Jh/VB+UsAHJn6dkVJEQOBUWPdSflLAcSA6q5RSREAwJStPWH5SwDUwwVWQUkRAT4sy9Vx+UsAFeOWCjFJEQM3k3YlgflLADNFTPYlSREAgm+s= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751875375103, - "AQMAAAABAAAABgAAAC7muJd3flLA2IIdps1QRECPycdebX5SwLVTbULXUERAf94Lh2t+UsAXtDyg31BEQBmcutR1flLARebRi+9QREDRIFysen5SwEHF+vHtUERALua4l3d+UsDYgh2mzVBEQA==" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - true, - 622236751936651263, - null - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751872622591, - "AQYAAAACAAAAAQMAAAABAAAABQAAAHOrh9KBflLA/Xu54zhRREDvo75BgX5SwJ3mlxM5UURApVxwqnx+UsCDIfTrTVFEQHJxMRGFflLArfH55lpRREBzq4fSgX5SwP17ueM4UURAAQMAAAABAAAABAAAALAQwXGKflLAP9edsVw= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751872163839, - "AQMAAAABAAAACAAAAKL2fB6rflLA3hbUN2VRREB2ppkroH5SwHpqmdZoUURAHARdlJt+UsDULRmvfVFEQJknc+KlflLAi1XPmo1RREAGjAyarn5SwHMH7riKUURApgB+RK5+UsBx7Tz+hlFEQKy81p6sflLATfgyBXZRRECi9nw= (truncated)" - ], - [ - "Brooklyn", - "133", - "133", - "Kensington", - false, - 622236751933439999, - "AQMAAAABAAAABgAAAAoYULwHflLAgARpiehRREAJB9SjA35SwLf74OPpUURAWNJfIQl+UsDGVGy7DlJEQN1tV3INflLAYpxJTg1SREB1JSwKEn5SwCctsXX4UURAChhQvAd+UsCABGmJ6FFEQA==" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722201296895, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722202345471, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722201591807, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722202116095, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722202640383, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722210209791, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722210504703, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722201133055, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722202181631, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722204803071, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722201952255, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722210045951, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722201493503, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722202017791, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722202542079, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722201264127, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722202312703, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722210406399, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722202083327, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722210177023, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722201329663, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722202378239, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722204999679, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722210242559, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722201395199, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722201919487, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722202443775, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722201165823, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722202214399, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722210308095, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722201460735, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722202509311, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722210078719, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722201231359, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722202279935, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722210373631, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722202050559, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722209619967, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722210144255, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722202476543, - "AQMAAAABAAAACQAAAP+f8/YZfVLA8JO5MJhjREBrKmJ/Fn1SwMBMVVWZY0RASm2uPBZ9UsC69joMmmNEQGVAqBEOfVLA+OxhcbBjRED4yyvzCn1SwOJopQC5Y0RANK6ovhB9UsBSi3bzwWNEQDoh0K8ffVLAqGtmBr1jRECEoOs= (truncated)" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722214010879, - "AQMAAAABAAAABwAAAFlqf9difVLAzzwixkFkREBAHOl2VH1SwNN+woNGZERA36nY2k99UsC1pIplW2REQCWD/h5WfVLAU/pDEmVkRECsbjoEWX1SwNVJZE9dZERA0QvFUGB9UsB/BPqnSGREQFlqf9difVLAzzwixkFkREA=" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722201985023, - "AQMAAAABAAAACQAAANVekW+gfVLAgSja2GtjREDskrJ+kX1SwHgIaMZwY0RATIEB44x9UsB2o9enhWNEQGwvQziXfVLAqenHm5VjREC+95UYo31SwIuG/LCRY0RAiigaj6V9UsBy2+XrimNEQHTdfzWqfVLArD06Vn5jREDqm9U= (truncated)" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722201821183, - "AQMAAAABAAAACQAAACjlj5ySfVLAE3tMfapjREC4+Iarg31SwPA60mqvY0RAmoG9D399UsA7N11MxGNEQBXrEGWJfVLAHf9wQNRjREB2AA0Di31SwMfO57fTY0RAJrmEwo59UsAejzBqyWNEQNrP5mGWfVLAiDRhibRjREDq/a8= (truncated)" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722210340863, - "AQMAAAABAAAACAAAAIcX9JT4fFLAoKhTo/BjREBuepBj9nxSwG8xYFzxY0RAR2JAke98UsBKfc56BGREQOufj07qfFLADa11mBJkREBW+ktc73xSwBUvVGYaZERAUyuxTf58UsDa9V15FWREQChA++kCfVLA+GvWlwBkRECHF/Q= (truncated)" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722208505855, - "AQMAAAABAAAABQAAACdLlxO3fVLAIgROBkRjRECtcvf7s31SwNpZ0QlSY0RAPeXACLh9UsDu+mVKWGNEQFteC3C9fVLAJ7n5YkljREAnS5cTt31SwCIETgZEY0RA" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722215190527, - "AQMAAAABAAAABwAAAFTpiHgufVLAfpVN2rNkREAqu8aGH31SwNOnhce4ZERAgfdTLBt9UsBeyQ5/zGREQFvKzHQrfVLASNILXdpkREBvJaJiM31SwJCKHbjDZERAsniXUzV9UsD28R1wvmREQFTpiHgufVLAfpVN2rNkREA=" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722204835839, - "AQMAAAABAAAABwAAAAJLPg5UfVLAl601h/BiREBJMmN+TH1SwODmSFIFY0RAWgScR0x9UsCgxivoBWNEQFTqeYBTfVLAJQIDDxFjREBw5SVxYn1SwJAdvyEMY0RAnyHuT2V9UsDXNKAg/2JEQAJLPg5UfVLAl601h/BiREA=" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722209849343, - "AQMAAAABAAAABAAAAETav5LYfFLAQhrp2EJkREB7C9kv1nxSwIaybmtJZERACXj8Mdd8UsCZ8VoWSWREQETav5LYfFLAQhrp2EJkREA=" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722209685503, - "AQMAAAABAAAABQAAACp6OozJfFLARtBQBGxkREDWlMXZwXxSwB7BWDWBZERAwPirZcl8UsC8nFuRh2REQGwr9/jNfFLAiQKf2XJkREAqejqMyXxSwEbQUARsZERA" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722202836991, - "AQMAAAABAAAABQAAAE9FueZqfVLA9HMewStkRECbLlQEaH1SwMQGnbQsZERAqR5kKGR9UsCq4lowPmREQEyO6vBnfVLA+PTb4TNkREBPRbnman1SwPRzHsErZERA" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722209521663, - "AQMAAAABAAAABwAAALgbmurcfFLAY7LC7G1kREBsK/f4zXxSwIkCn9lyZERAwPirZcl8UsC8nFuRh2REQAbCFAvafFLA9gdymJVkREArz0mj4nxSwF7ASsOSZERAdbbEP+d8UsC3e4zhfWREQLgbmurcfFLAY7LC7G1kREA=" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722204344319, - "AQMAAAABAAAABgAAAH8U7DY/fVLAgoyPuSljREBSL4srPH1SwI6fmBgyY0RAckTMoDZ9UsDndJVMQWNEQNMa+1c7fVLAWr+Mvj9jREAHzeXzP31SwPG9Xd0qY0RAfxTsNj99UsCCjI+5KWNEQA==" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722211192831, - "AQMAAAABAAAABwAAAEAcWjEVfVLAES/K0qhkREC51Zo/Bn1SwJ3f5r+tZERAxX7u0QN9UsC/5lq/uGREQO9KLAURfVLAg0OL2cNkRECB91MsG31SwF7JDn/MZERAKrvGhh99UsDTp4XHuGREQEAcWjEVfVLAES/K0qhkREA=" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722208866303, - "AQMAAAABAAAACAAAANFQu6SQfVLAQaw8nSNjREBJjscLhn1SwOkuCRwnY0RAD+4acIF9UsCw3E79O2NEQPsHNMWLfVLAwnQo8UtjREBAUfy1mn1SwGc0pANHY0RAHv6UUZ99UsCB+08iMmNEQI7ZtUOcfVLAGU4way1jREDRULs= (truncated)" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722212208639, - "AQMAAAABAAAABgAAAJotUIsefVLASyl2Q4NjREAS8XnSHX1SwBFw1D+FY0RAbCpifxZ9UsDATFVVmWNEQP+f8/YZfVLA8JO5MJhjREBD5QyTHn1SwAjIaE+DY0RAmi1Qix59UsBLKXZDg2NEQA==" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722201690111, - "AQMAAAABAAAABgAAAL73lRijfVLAi4b8sJFjREBsL0M4l31SwKnpx5uVY0RAKOWPnJJ9UsATe0x9qmNEQOr9r16XfVLAfpfk1bFjRECuKyL6nX1SwIiSAMOfY0RAvveVGKN9UsCLhvywkWNEQA==" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722201526271, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722204868607, - null - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722215059455, - "AQMAAAABAAAACAAAAI2CdgZCfVLAQtMZC5pkREDH8scUM31SwM+oY/ieZERAVOmIeC59UsB+lU3as2REQLN4l1M1fVLA9vEdcL5kRECU58fgOn1SwKB4tFWvZERANcvSP0J9UsDxeGQWm2REQC63lWlCfVLARS0kpJpkRECNgnY= (truncated)" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722201198591, - "AQMAAAABAAAACQAAAJqBvQ9/fVLAOzddTMRjRECM96AecH1SwNY20TnJY0RAVVPBgmt9UsCdnWIb3mNEQFUtEth1fVLAgJCOD+5jREAUtiYGg31SwJmV1rbpY0RALneyEId9UsARqYOR3mNEQIcc9zKHfVLATmJOM95jREAV6xA= (truncated)" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722209718271, - "AQMAAAABAAAABgAAACvPSaPifFLAXsBKw5JkREAFwhQL2nxSwPYHcpiVZERAAItY/tt8UsDn9Sw9l2REQNGx03TsfFLAideODKVkREDZtIj47HxSwGrhH7iiZERAK89Jo+J8UsBewErDkmREQA==" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722202869759, - "AQMAAAABAAAACAAAAARQMDxxfVLATe008QJkREBXpOlKYn1SwE3LoN4HZERAaJnxrl19UsAGkk3AHGREQJsuVARofVLAxAadtCxkREBORbnman1SwPRzHsErZERAjTtAWG99UsAipMSNH2REQL9W7q92fVLANpcWXAtkREAEUDA= (truncated)" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722209554431, - "AQMAAAABAAAACQAAAAl4/DHXfFLAmfFaFklkREB7C9kv1nxSwIaybmtJZERAf3rlbdF8UsDeJd6FVmREQN8oM+rJfFLA2lKYAWtkREAqejqMyXxSwEbQUARsZERAbCv3+M18UsCJAp/ZcmREQLgbmurcfFLAY7LC7G1kREAbyBI= (truncated)" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722208899071, - "AQMAAAABAAAACAAAAHf3aat8fVLA1DOu0xJjREALvsK2e31SwEjuOigXY0RASY7HC4Z9UsDpLgkcJ2NEQNFQu6SQfVLAQaw8nSNjRED/1eCZin1SwFgpLYQeY0RA0RvY0Yh9UsBE4JcMHWNEQMp4Vw2HfVLAsz0CkRtjREB392k= (truncated)" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722208735231, - "AQMAAAABAAAABAAAAI7ZtUOcfVLAGU4way1jREAe/pRRn31SwIH7TyIyY0RATr0XJKF9UsAY3G6IMWNEQI7ZtUOcfVLAGU4way1jREA=" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722201559039, - "AQMAAAABAAAABwAAAKPASJorfVLAMBukbl9jREA80aZkJX1SwEtyJW1wY0RAmi1Qix59UsBKKXZDg2NEQEPlDJMefVLACMhoT4NjREAGOAqELX1SwDOFUGJ+Y0RAaFANIDJ9UsASIwaBaWNEQKPASJorfVLAMBukbl9jREA=" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722204901375, - "AQMAAAABAAAABwAAAJ8h7k9lfVLA1zSgIP9iREBw5SVxYn1SwJAdvyEMY0RA3twTxmx9UsDvMJoVHGNEQAu+wrZ7fVLASO46KBdjREB392mrfH1SwNQzrtMSY0RAwIlKS259UsBarOm5BmNEQJ8h7k9lfVLA1zSgIP9iREA=" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - false, - 622236722213257215, - "AQMAAAABAAAABQAAAANsRIn7fFLAE3QCQuNjRECNZ9v59nxSwB+kJbfvY0RAbnqQY/Z8UsBvMWBc8WNEQIcX9JT4fFLAoKhTo/BjREADbESJ+3xSwBN0AkLjY0RA" - ], - [ - "Manhattan", - "236", - "236", - "Upper East Side North", - true, - 622236722209587199, - null - ] - ], - "datasetInfos": [], - "dbfsResultPath": null, - "isJsonSchema": true, - "metadata": {}, - "overflow": true, - "plotOptions": { - "customPlotOptions": {}, - "displayType": "table", - "pivotAggregation": null, - "pivotColumns": null, - "xColumns": null, - "yColumns": null - }, - "removedWidgets": [], - "schema": [ - { - "metadata": "{}", - "name": "borough", - "type": "\"string\"" - }, - { - "metadata": "{}", - "name": "location_id", - "type": "\"string\"" - }, - { - "metadata": "{}", - "name": "objectid", - "type": "\"string\"" - }, - { - "metadata": "{}", - "name": "zone", - "type": "\"string\"" - }, - { - "metadata": "{}", - "name": "is_core", - "type": "\"boolean\"" - }, - { - "metadata": "{}", - "name": "h3", - "type": "\"long\"" - }, - { - "metadata": "{}", - "name": "wkb", - "type": "\"binary\"" - } - ], - "type": "table" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "from mosaic import displayMosaic\n", - "displayMosaic(mosaic_neighbourhoods)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "a304589f-36a7-4bef-8cd2-932ddd3acba4", - "showTitle": false, - "title": "" - } - }, - "source": [ - "This also extends to plotting maps inside the notebook using the kepler.gl visualisation library using a notebook magic `%%mosaic_kepler`." - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "3be96bd5-e14d-40bd-9fc7-00dea16cb096", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "from mosaic import st_aswkt\n", - "(\n", - " mosaic_neighbourhoods\n", - " .select(st_aswkt(col(\"index.wkb\")).alias(\"wkt\"), col(\"index.index_id\").alias(\"h3\"))\n", - ").createOrReplaceTempView(\"kepler_df\")" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "ffe429bb-de6f-4118-8d7b-6484b6b2d678", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
User Guide: https://docs.kepler.gl/docs/keplergl-jupyter\n
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "textData": null, - "type": "htmlSandbox" - } - }, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "Kepler.gl
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "Kepler.gl
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "textData": null, - "type": "htmlSandbox" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "%%mosaic_kepler\n", - "\"kepler_df\" \"h3\" \"h3\"" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "4323fa2c-8495-43c6-afb2-9e239e5fb6fc", - "showTitle": false, - "title": "" - } - }, - "source": [ - "![mosaic kepler map example](../images/kepler-example.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "11933dab-085c-4503-8ba1-06365caa335c", - "showTitle": false, - "title": "" - } - }, - "source": [ - "Now the two datasets can be joined first on H3 index, with any false positives removed through a contains filter on a much simpler geometry." - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "98514998-1fe7-4a0c-b4f9-eebf38fb9d81", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+------------------+------------------+---------+-----------+--------+--------------------+-------+------------------+--------------------+\n", - "vendor_id| pickup_datetime| dropoff_datetime|passenger_count|trip_distance|pickup_longitude|pickup_latitude|rate_code_id|dropoff_longitude|dropoff_latitude|fare_amount|extra|mta_tax|tip_amount|tolls_amount|total_amount| pickup_geom| dropoff_geom| bounds| pickup_h3| dropoff_h3| borough|location_id|objectid| zone|is_core| h3| wkb|\n", - "+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+------------------+------------------+---------+-----------+--------+--------------------+-------+------------------+--------------------+\n", - " CMT|2009-11-28 13:00:00|2009-11-28 13:01:57| 1| 0.5| -73.999666| 40.733384| null| -73.991751| 40.730273| 3.3| 0.0| 0.5| 0.0| 0.0| 3.8|{1, [[[-73.999666...|{1, [[[-73.991751...|{5, [[[-80.0, 35....|622236723433046015|622236750715092991|Manhattan| 114| 114|Greenwich Village...| false|622236723433046015|[01 03 00 00 00 0...|\n", - " CMT|2009-11-28 13:00:00|2009-11-28 13:01:57| 1| 0.5| -73.999666| 40.733384| null| -73.991751| 40.730273| 3.3| 0.0| 0.5| 0.0| 0.0| 3.8|{1, [[[-73.999666...|{1, [[[-73.991751...|{5, [[[-80.0, 35....|622236723433046015|622236750715092991|Manhattan| 249| 249| West Village| false|622236723433046015|[01 03 00 00 00 0...|\n", - " CMT|2009-11-28 13:00:00|2009-11-28 13:01:57| 1| 0.5| -73.999666| 40.733384| null| -73.991751| 40.730273| 3.3| 0.0| 0.5| 0.0| 0.0| 3.8|{1, [[[-73.999666...|{1, [[[-73.991751...|{5, [[[-80.0, 35....|622236723433046015|622236750715092991|Manhattan| 113| 113|Greenwich Village...| false|622236723433046015|[01 03 00 00 00 0...|\n", - " CMT|2009-11-30 07:49:13|2009-11-30 08:12:38| 1| 12.9| -74.007033| 40.734931| null| -73.87277| 40.774319| 29.7| 0.0| 0.5| 6.04| 0.0| 36.24|{1, [[[-74.007033...|{1, [[[-73.87277,...|{5, [[[-80.0, 35....|622236750719975423|622236724015759359|Manhattan| 249| 249| West Village| false|622236750719975423|[01 03 00 00 00 0...|\n", - " CMT|2009-11-30 07:49:13|2009-11-30 08:12:38| 1| 12.9| -74.007033| 40.734931| null| -73.87277| 40.774319| 29.7| 0.0| 0.5| 6.04| 0.0| 36.24|{1, [[[-74.007033...|{1, [[[-73.87277,...|{5, [[[-80.0, 35....|622236750719975423|622236724015759359|Manhattan| 158| 158|Meatpacking/West ...| false|622236750719975423|[01 03 00 00 00 0...|\n", - " VTS|2009-01-03 01:55:00|2009-01-03 02:04:00| 5| 2.09| -73.993217| 40.72416| null| -73.9944| 40.74624| 7.7| 0.5| null| 0.0| 0.0| 8.2|{1, [[[-73.993217...|{1, [[[-73.9944, ...|{5, [[[-80.0, 35....|622236750717878271|622236723431276543|Manhattan| 114| 114|Greenwich Village...| false|622236750717878271|[01 03 00 00 00 0...|\n", - " VTS|2009-01-03 01:55:00|2009-01-03 02:04:00| 5| 2.09| -73.993217| 40.72416| null| -73.9944| 40.74624| 7.7| 0.5| null| 0.0| 0.0| 8.2|{1, [[[-73.993217...|{1, [[[-73.9944, ...|{5, [[[-80.0, 35....|622236750717878271|622236723431276543|Manhattan| 144| 144| Little Italy/NoLiTa| false|622236750717878271|[01 03 00 00 00 0...|\n", - " CMT|2009-12-07 10:36:06|2009-12-07 10:42:26| 1| 1.3| -73.99067| 40.73065| null| -73.975539| 40.741353| 6.1| 0.0| 0.5| 0.0| 0.0| 6.6|{1, [[[-73.99067,...|{1, [[[-73.975539...|{5, [[[-80.0, 35....|622236750715092991|622236723437502463|Manhattan| 113| 113|Greenwich Village...| false|622236750715092991|[01 03 00 00 00 0...|\n", - " CMT|2009-12-07 10:36:06|2009-12-07 10:42:26| 1| 1.3| -73.99067| 40.73065| null| -73.975539| 40.741353| 6.1| 0.0| 0.5| 0.0| 0.0| 6.6|{1, [[[-73.99067,...|{1, [[[-73.975539...|{5, [[[-80.0, 35....|622236750715092991|622236723437502463|Manhattan| 79| 79| East Village| false|622236750715092991|[01 03 00 00 00 0...|\n", - " CMT|2010-06-27 17:27:25|2010-06-27 17:47:44| 2| 5.0| -74.008459| 40.712233| 1| -73.9516| 40.718877| 15.7| 0.0| 0.5| 3.0| 0.0| 19.2|{1, [[[-74.008459...|{1, [[[-73.9516, ...|{5, [[[-80.0, 35....|622236750648639487|622236723415482367|Manhattan| 231| 231|TriBeCa/Civic Center| false|622236750648639487|[01 03 00 00 00 0...|\n", - " CMT|2010-06-27 17:27:25|2010-06-27 17:47:44| 2| 5.0| -74.008459| 40.712233| 1| -73.9516| 40.718877| 15.7| 0.0| 0.5| 3.0| 0.0| 19.2|{1, [[[-74.008459...|{1, [[[-73.9516, ...|{5, [[[-80.0, 35....|622236750648639487|622236723415482367|Manhattan| 261| 261| World Trade Center| false|622236750648639487|[01 03 00 00 00 0...|\n", - " CMT|2010-06-27 17:27:25|2010-06-27 17:47:44| 2| 5.0| -74.008459| 40.712233| 1| -73.9516| 40.718877| 15.7| 0.0| 0.5| 3.0| 0.0| 19.2|{1, [[[-74.008459...|{1, [[[-73.9516, ...|{5, [[[-80.0, 35....|622236750648639487|622236723415482367|Manhattan| 209| 209| Seaport| false|622236750648639487|[01 03 00 00 00 0...|\n", - " CMT|2009-11-17 16:50:35|2009-11-17 17:01:34| 1| 1.6| -74.00679| 40.730546| null| -73.9904| 40.73815| 7.7| 1.0| 0.5| 1.5| 0.0| 10.7|{1, [[[-74.00679,...|{1, [[[-73.9904, ...|{5, [[[-80.0, 35....|622236750718894079|622236723426754559|Manhattan| 249| 249| West Village| false|622236750718894079|[01 03 00 00 00 0...|\n", - " CMT|2009-11-17 16:50:35|2009-11-17 17:01:34| 1| 1.6| -74.00679| 40.730546| null| -73.9904| 40.73815| 7.7| 1.0| 0.5| 1.5| 0.0| 10.7|{1, [[[-74.00679,...|{1, [[[-73.9904, ...|{5, [[[-80.0, 35....|622236750718894079|622236723426754559|Manhattan| 158| 158|Meatpacking/West ...| false|622236750718894079|[01 03 00 00 00 0...|\n", - " CMT|2009-11-30 23:30:43|2009-11-30 23:42:54| 2| 2.9| -74.009605| 40.710155| null| -73.993875| 40.741554| 10.1| 0.5| 0.5| 2.22| 0.0| 13.32|{1, [[[-74.009605...|{1, [[[-73.993875...|{5, [[[-80.0, 35....|622236750646968319|622236723430490111|Manhattan| 87| 87|Financial Distric...| false|622236750646968319|[01 03 00 00 00 0...|\n", - " CMT|2009-11-30 23:30:43|2009-11-30 23:42:54| 2| 2.9| -74.009605| 40.710155| null| -73.993875| 40.741554| 10.1| 0.5| 0.5| 2.22| 0.0| 13.32|{1, [[[-74.009605...|{1, [[[-73.993875...|{5, [[[-80.0, 35....|622236750646968319|622236723430490111|Manhattan| 261| 261| World Trade Center| false|622236750646968319|[01 03 00 00 00 0...|\n", - " CMT|2010-09-21 07:44:41|2010-09-21 08:07:03| 1| 4.2| -74.008626| 40.7042| 1| -73.981636| 40.758581| 14.5| 0.0| 0.5| 1.2| 0.0| 16.2|{1, [[[-74.008626...|{1, [[[-73.981636...|{5, [[[-80.0, 35....|622236750650671103|622236723500384255|Manhattan| 87| 87|Financial Distric...| false|622236750650671103|[01 03 00 00 00 0...|\n", - " CMT|2010-09-21 07:44:41|2010-09-21 08:07:03| 1| 4.2| -74.008626| 40.7042| 1| -73.981636| 40.758581| 14.5| 0.0| 0.5| 1.2| 0.0| 16.2|{1, [[[-74.008626...|{1, [[[-73.981636...|{5, [[[-80.0, 35....|622236750650671103|622236723500384255|Manhattan| 88| 88|Financial Distric...| false|622236750650671103|[01 03 00 00 00 0...|\n", - " VTS|2010-10-10 08:56:00|2010-10-10 09:01:00| 1| 1.96| -74.012115| 40.707623| 1| -73.999272| 40.734073| 6.5| 0.0| 0.5| 0.0| 0.0| 7.0|{1, [[[-74.012115...|{1, [[[-73.999272...|{5, [[[-80.0, 35....|622236750639693823|622236723433013247|Manhattan| 87| 87|Financial Distric...| false|622236750639693823|[01 03 00 00 00 0...|\n", - " VTS|2010-10-10 08:56:00|2010-10-10 09:01:00| 1| 1.96| -74.012115| 40.707623| 1| -73.999272| 40.734073| 6.5| 0.0| 0.5| 0.0| 0.0| 7.0|{1, [[[-74.012115...|{1, [[[-73.999272...|{5, [[[-80.0, 35....|622236750639693823|622236723433013247|Manhattan| 261| 261| World Trade Center| false|622236750639693823|[01 03 00 00 00 0...|\n", - "+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+------------------+------------------+---------+-----------+--------+--------------------+-------+------------------+--------------------+\n", - "only showing top 20 rows\n", - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+------------------+------------------+---------+-----------+--------+--------------------+-------+------------------+--------------------+\n|vendor_id| pickup_datetime| dropoff_datetime|passenger_count|trip_distance|pickup_longitude|pickup_latitude|rate_code_id|dropoff_longitude|dropoff_latitude|fare_amount|extra|mta_tax|tip_amount|tolls_amount|total_amount| pickup_geom| dropoff_geom| bounds| pickup_h3| dropoff_h3| borough|location_id|objectid| zone|is_core| h3| wkb|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+------------------+------------------+---------+-----------+--------+--------------------+-------+------------------+--------------------+\n| CMT|2009-11-28 13:00:00|2009-11-28 13:01:57| 1| 0.5| -73.999666| 40.733384| null| -73.991751| 40.730273| 3.3| 0.0| 0.5| 0.0| 0.0| 3.8|{1, [[[-73.999666...|{1, [[[-73.991751...|{5, [[[-80.0, 35....|622236723433046015|622236750715092991|Manhattan| 114| 114|Greenwich Village...| false|622236723433046015|[01 03 00 00 00 0...|\n| CMT|2009-11-28 13:00:00|2009-11-28 13:01:57| 1| 0.5| -73.999666| 40.733384| null| -73.991751| 40.730273| 3.3| 0.0| 0.5| 0.0| 0.0| 3.8|{1, [[[-73.999666...|{1, [[[-73.991751...|{5, [[[-80.0, 35....|622236723433046015|622236750715092991|Manhattan| 249| 249| West Village| false|622236723433046015|[01 03 00 00 00 0...|\n| CMT|2009-11-28 13:00:00|2009-11-28 13:01:57| 1| 0.5| -73.999666| 40.733384| null| -73.991751| 40.730273| 3.3| 0.0| 0.5| 0.0| 0.0| 3.8|{1, [[[-73.999666...|{1, [[[-73.991751...|{5, [[[-80.0, 35....|622236723433046015|622236750715092991|Manhattan| 113| 113|Greenwich Village...| false|622236723433046015|[01 03 00 00 00 0...|\n| CMT|2009-11-30 07:49:13|2009-11-30 08:12:38| 1| 12.9| -74.007033| 40.734931| null| -73.87277| 40.774319| 29.7| 0.0| 0.5| 6.04| 0.0| 36.24|{1, [[[-74.007033...|{1, [[[-73.87277,...|{5, [[[-80.0, 35....|622236750719975423|622236724015759359|Manhattan| 249| 249| West Village| false|622236750719975423|[01 03 00 00 00 0...|\n| CMT|2009-11-30 07:49:13|2009-11-30 08:12:38| 1| 12.9| -74.007033| 40.734931| null| -73.87277| 40.774319| 29.7| 0.0| 0.5| 6.04| 0.0| 36.24|{1, [[[-74.007033...|{1, [[[-73.87277,...|{5, [[[-80.0, 35....|622236750719975423|622236724015759359|Manhattan| 158| 158|Meatpacking/West ...| false|622236750719975423|[01 03 00 00 00 0...|\n| VTS|2009-01-03 01:55:00|2009-01-03 02:04:00| 5| 2.09| -73.993217| 40.72416| null| -73.9944| 40.74624| 7.7| 0.5| null| 0.0| 0.0| 8.2|{1, [[[-73.993217...|{1, [[[-73.9944, ...|{5, [[[-80.0, 35....|622236750717878271|622236723431276543|Manhattan| 114| 114|Greenwich Village...| false|622236750717878271|[01 03 00 00 00 0...|\n| VTS|2009-01-03 01:55:00|2009-01-03 02:04:00| 5| 2.09| -73.993217| 40.72416| null| -73.9944| 40.74624| 7.7| 0.5| null| 0.0| 0.0| 8.2|{1, [[[-73.993217...|{1, [[[-73.9944, ...|{5, [[[-80.0, 35....|622236750717878271|622236723431276543|Manhattan| 144| 144| Little Italy/NoLiTa| false|622236750717878271|[01 03 00 00 00 0...|\n| CMT|2009-12-07 10:36:06|2009-12-07 10:42:26| 1| 1.3| -73.99067| 40.73065| null| -73.975539| 40.741353| 6.1| 0.0| 0.5| 0.0| 0.0| 6.6|{1, [[[-73.99067,...|{1, [[[-73.975539...|{5, [[[-80.0, 35....|622236750715092991|622236723437502463|Manhattan| 113| 113|Greenwich Village...| false|622236750715092991|[01 03 00 00 00 0...|\n| CMT|2009-12-07 10:36:06|2009-12-07 10:42:26| 1| 1.3| -73.99067| 40.73065| null| -73.975539| 40.741353| 6.1| 0.0| 0.5| 0.0| 0.0| 6.6|{1, [[[-73.99067,...|{1, [[[-73.975539...|{5, [[[-80.0, 35....|622236750715092991|622236723437502463|Manhattan| 79| 79| East Village| false|622236750715092991|[01 03 00 00 00 0...|\n| CMT|2010-06-27 17:27:25|2010-06-27 17:47:44| 2| 5.0| -74.008459| 40.712233| 1| -73.9516| 40.718877| 15.7| 0.0| 0.5| 3.0| 0.0| 19.2|{1, [[[-74.008459...|{1, [[[-73.9516, ...|{5, [[[-80.0, 35....|622236750648639487|622236723415482367|Manhattan| 231| 231|TriBeCa/Civic Center| false|622236750648639487|[01 03 00 00 00 0...|\n| CMT|2010-06-27 17:27:25|2010-06-27 17:47:44| 2| 5.0| -74.008459| 40.712233| 1| -73.9516| 40.718877| 15.7| 0.0| 0.5| 3.0| 0.0| 19.2|{1, [[[-74.008459...|{1, [[[-73.9516, ...|{5, [[[-80.0, 35....|622236750648639487|622236723415482367|Manhattan| 261| 261| World Trade Center| false|622236750648639487|[01 03 00 00 00 0...|\n| CMT|2010-06-27 17:27:25|2010-06-27 17:47:44| 2| 5.0| -74.008459| 40.712233| 1| -73.9516| 40.718877| 15.7| 0.0| 0.5| 3.0| 0.0| 19.2|{1, [[[-74.008459...|{1, [[[-73.9516, ...|{5, [[[-80.0, 35....|622236750648639487|622236723415482367|Manhattan| 209| 209| Seaport| false|622236750648639487|[01 03 00 00 00 0...|\n| CMT|2009-11-17 16:50:35|2009-11-17 17:01:34| 1| 1.6| -74.00679| 40.730546| null| -73.9904| 40.73815| 7.7| 1.0| 0.5| 1.5| 0.0| 10.7|{1, [[[-74.00679,...|{1, [[[-73.9904, ...|{5, [[[-80.0, 35....|622236750718894079|622236723426754559|Manhattan| 249| 249| West Village| false|622236750718894079|[01 03 00 00 00 0...|\n| CMT|2009-11-17 16:50:35|2009-11-17 17:01:34| 1| 1.6| -74.00679| 40.730546| null| -73.9904| 40.73815| 7.7| 1.0| 0.5| 1.5| 0.0| 10.7|{1, [[[-74.00679,...|{1, [[[-73.9904, ...|{5, [[[-80.0, 35....|622236750718894079|622236723426754559|Manhattan| 158| 158|Meatpacking/West ...| false|622236750718894079|[01 03 00 00 00 0...|\n| CMT|2009-11-30 23:30:43|2009-11-30 23:42:54| 2| 2.9| -74.009605| 40.710155| null| -73.993875| 40.741554| 10.1| 0.5| 0.5| 2.22| 0.0| 13.32|{1, [[[-74.009605...|{1, [[[-73.993875...|{5, [[[-80.0, 35....|622236750646968319|622236723430490111|Manhattan| 87| 87|Financial Distric...| false|622236750646968319|[01 03 00 00 00 0...|\n| CMT|2009-11-30 23:30:43|2009-11-30 23:42:54| 2| 2.9| -74.009605| 40.710155| null| -73.993875| 40.741554| 10.1| 0.5| 0.5| 2.22| 0.0| 13.32|{1, [[[-74.009605...|{1, [[[-73.993875...|{5, [[[-80.0, 35....|622236750646968319|622236723430490111|Manhattan| 261| 261| World Trade Center| false|622236750646968319|[01 03 00 00 00 0...|\n| CMT|2010-09-21 07:44:41|2010-09-21 08:07:03| 1| 4.2| -74.008626| 40.7042| 1| -73.981636| 40.758581| 14.5| 0.0| 0.5| 1.2| 0.0| 16.2|{1, [[[-74.008626...|{1, [[[-73.981636...|{5, [[[-80.0, 35....|622236750650671103|622236723500384255|Manhattan| 87| 87|Financial Distric...| false|622236750650671103|[01 03 00 00 00 0...|\n| CMT|2010-09-21 07:44:41|2010-09-21 08:07:03| 1| 4.2| -74.008626| 40.7042| 1| -73.981636| 40.758581| 14.5| 0.0| 0.5| 1.2| 0.0| 16.2|{1, [[[-74.008626...|{1, [[[-73.981636...|{5, [[[-80.0, 35....|622236750650671103|622236723500384255|Manhattan| 88| 88|Financial Distric...| false|622236750650671103|[01 03 00 00 00 0...|\n| VTS|2010-10-10 08:56:00|2010-10-10 09:01:00| 1| 1.96| -74.012115| 40.707623| 1| -73.999272| 40.734073| 6.5| 0.0| 0.5| 0.0| 0.0| 7.0|{1, [[[-74.012115...|{1, [[[-73.999272...|{5, [[[-80.0, 35....|622236750639693823|622236723433013247|Manhattan| 87| 87|Financial Distric...| false|622236750639693823|[01 03 00 00 00 0...|\n| VTS|2010-10-10 08:56:00|2010-10-10 09:01:00| 1| 1.96| -74.012115| 40.707623| 1| -73.999272| 40.734073| 6.5| 0.0| 0.5| 0.0| 0.0| 7.0|{1, [[[-74.012115...|{1, [[[-73.999272...|{5, [[[-80.0, 35....|622236750639693823|622236723433013247|Manhattan| 261| 261| World Trade Center| false|622236750639693823|[01 03 00 00 00 0...|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+------------------+------------------+---------+-----------+--------+--------------------+-------+------------------+--------------------+\nonly showing top 20 rows\n\n
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "mosaic_joined_df = (\n", - " trips_with_geom.alias(\"t\")\n", - " .join(mosaic_neighbourhoods.alias(\"n\"), on=expr(\"t.pickup_h3 = n.index.index_id\"), how=\"inner\")\n", - " .where(\n", - " ~col(\"index.is_core\") | \n", - " st_contains(\"index.wkb\", \"pickup_geom\")\n", - " )\n", - ")\n", - "\n", - "mosaic_joined_df.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "6ad416fa-3a36-4946-98f9-b8d306d31dc5", - "showTitle": false, - "title": "" - } - }, - "source": [ - "## MosaicFrame abstraction for simple indexing and joins" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "aba08cb2-fbbb-4de7-acdc-5eac0c12b91b", - "showTitle": false, - "title": "" - } - }, - "source": [ - "By wrapping our Spark DataFrames with `MosaicFrame`, we can simplify the join process. For example:" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "54194240-dc88-42dc-a7e0-8b4a97a496f8", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "from mosaic import MosaicFrame" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "94730cc1-afc1-4227-9c91-709a18bb6eec", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "trips_mdf = MosaicFrame(trips, \"pickup_geom\")\n", - "neighbourhoods_mdf = MosaicFrame(geoJsonDF, \"geometry\")" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "application/vnd.databricks.v1+cell": { - "inputWidgets": {}, - "nuid": "a33782bb-3d4f-44e8-a33b-faeb11d0de46", - "showTitle": false, - "title": "" - } - }, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+\n", - "vendor_id| pickup_datetime| dropoff_datetime|passenger_count|trip_distance|pickup_longitude|pickup_latitude|rate_code_id|dropoff_longitude|dropoff_latitude|fare_amount|extra|mta_tax|tip_amount|tolls_amount|total_amount| pickup_geom| dropoff_geom| bounds|\n", - "+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+\n", - " CMT|2009-10-12 19:35:21|2009-10-12 19:44:36| 1| 1.4| -74.000018| 40.720534| null| -73.995008| 40.734112| 6.5| 0.0| null| 0.0| 0.0| 6.5|{1, [[[-74.000018...|{1, [[[-73.995008...|{5, [[[-80.0, 35....|\n", - " CMT|2010-09-02 07:37:40|2010-09-02 07:53:17| 1| 6.8| -74.016477| 40.70971| 1| -73.97509| 40.759392| 17.3| 0.0| 0.5| 1.0| 0.0| 18.8|{1, [[[-74.016477...|{1, [[[-73.97509,...|{5, [[[-80.0, 35....|\n", - " CMT|2009-11-28 13:00:00|2009-11-28 13:01:57| 1| 0.5| -73.999666| 40.733384| null| -73.991751| 40.730273| 3.3| 0.0| 0.5| 0.0| 0.0| 3.8|{1, [[[-73.999666...|{1, [[[-73.991751...|{5, [[[-80.0, 35....|\n", - " CMT|2009-11-30 07:49:13|2009-11-30 08:12:38| 1| 12.9| -74.007033| 40.734931| null| -73.87277| 40.774319| 29.7| 0.0| 0.5| 6.04| 0.0| 36.24|{1, [[[-74.007033...|{1, [[[-73.87277,...|{5, [[[-80.0, 35....|\n", - " VTS|2009-01-03 01:55:00|2009-01-03 02:04:00| 5| 2.09| -73.993217| 40.72416| null| -73.9944| 40.74624| 7.7| 0.5| null| 0.0| 0.0| 8.2|{1, [[[-73.993217...|{1, [[[-73.9944, ...|{5, [[[-80.0, 35....|\n", - " VTS|2009-11-09 17:21:00|2009-11-09 17:32:00| 1| 5.19| -74.010003| 40.707022| null| -73.963853| 40.75677| 13.3| 1.0| 0.5| 0.0| 0.0| 14.8|{1, [[[-74.010003...|{1, [[[-73.963853...|{5, [[[-80.0, 35....|\n", - " VTS|2010-06-09 01:13:00|2010-06-09 01:27:00| 1| 8.09| -74.008697| 40.707335| 1| -73.949605| 40.78761| 19.7| 0.5| 0.5| 0.0| 0.0| 20.7|{1, [[[-74.008697...|{1, [[[-73.949605...|{5, [[[-80.0, 35....|\n", - " VTS|2009-01-28 18:36:00|2009-01-28 18:50:00| 1| 2.92| -74.008823| 40.72089| null| -73.994055| 40.747588| 10.1| 1.0| null| 3.0| 0.0| 14.1|{1, [[[-74.008823...|{1, [[[-73.994055...|{5, [[[-80.0, 35....|\n", - " CMT|2010-06-02 14:21:05|2010-06-02 14:28:43| 1| 5.0| -74.011653| 40.702604| 1| -73.971851| 40.749807| 12.5| 0.0| 0.5| 2.6| 0.0| 15.6|{1, [[[-74.011653...|{1, [[[-73.971851...|{5, [[[-80.0, 35....|\n", - " VTS|2009-11-26 15:38:00|2009-11-26 15:47:00| 5| 2.36| -73.997208| 40.722108| null| -73.99647| 40.748185| 8.1| 0.0| 0.5| 2.0| 0.0| 10.6|{1, [[[-73.997208...|{1, [[[-73.99647,...|{5, [[[-80.0, 35....|\n", - " CMT|2009-12-07 10:36:06|2009-12-07 10:42:26| 1| 1.3| -73.99067| 40.73065| null| -73.975539| 40.741353| 6.1| 0.0| 0.5| 0.0| 0.0| 6.6|{1, [[[-73.99067,...|{1, [[[-73.975539...|{5, [[[-80.0, 35....|\n", - " CMT|2009-11-15 09:11:42|2009-11-15 09:26:34| 1| 3.7| -73.990065| 40.687341| null| -73.999566| 40.730219| 12.1| 0.0| 0.5| 0.0| 0.0| 12.6|{1, [[[-73.990065...|{1, [[[-73.999566...|{5, [[[-80.0, 35....|\n", - " CMT|2010-06-27 17:27:25|2010-06-27 17:47:44| 2| 5.0| -74.008459| 40.712233| 1| -73.9516| 40.718877| 15.7| 0.0| 0.5| 3.0| 0.0| 19.2|{1, [[[-74.008459...|{1, [[[-73.9516, ...|{5, [[[-80.0, 35....|\n", - " VTS|2009-01-30 21:05:00|2009-01-30 21:34:00| 1| 5.99| -73.994397| 40.694843| null| -73.921257| 40.685107| 18.9| 0.5| null| 0.6| 0.0| 20.0|{1, [[[-73.994397...|{1, [[[-73.921257...|{5, [[[-80.0, 35....|\n", - " CMT|2009-01-14 07:43:53|2009-01-14 07:55:14| 2| 2.9| -74.007602| 40.725098| null| -73.977846| 40.751608| 9.3| 0.0| null| 0.0| 0.0| 9.3|{1, [[[-74.007602...|{1, [[[-73.977846...|{5, [[[-80.0, 35....|\n", - " VTS|2010-05-11 16:33:00|2010-05-11 16:41:00| 1| 0.99| -74.011205| 40.715468| 1| -74.011072| 40.708882| 5.7| 1.0| 0.5| 0.0| 0.0| 7.2|{1, [[[-74.011205...|{1, [[[-74.011072...|{5, [[[-80.0, 35....|\n", - " VTS|2009-01-19 09:43:00|2009-01-19 09:47:00| 1| 0.56| -73.991123| 40.731297| null| -73.98681| 40.736703| 4.1| 0.0| null| 0.0| 0.0| 4.1|{1, [[[-73.991123...|{1, [[[-73.98681,...|{5, [[[-80.0, 35....|\n", - " CMT|2009-11-14 15:46:36|2009-11-14 15:51:01| 2| 1.2| -74.008448| 40.734271| null| -74.006075| 40.720237| 4.9| 0.0| 0.5| 0.0| 0.0| 5.4|{1, [[[-74.008448...|{1, [[[-74.006075...|{5, [[[-80.0, 35....|\n", - " CMT|2009-11-17 16:50:35|2009-11-17 17:01:34| 1| 1.6| -74.00679| 40.730546| null| -73.9904| 40.73815| 7.7| 1.0| 0.5| 1.5| 0.0| 10.7|{1, [[[-74.00679,...|{1, [[[-73.9904, ...|{5, [[[-80.0, 35....|\n", - " CMT|2009-11-30 23:30:43|2009-11-30 23:42:54| 2| 2.9| -74.009605| 40.710155| null| -73.993875| 40.741554| 10.1| 0.5| 0.5| 2.22| 0.0| 13.32|{1, [[[-74.009605...|{1, [[[-73.993875...|{5, [[[-80.0, 35....|\n", - "+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+\n", - "only showing top 20 rows\n", - "\n", - "
" - ] - }, - "metadata": { - "application/vnd.databricks.v1+output": { - "addedWidgets": {}, - "arguments": {}, - "data": "
+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+\n|vendor_id| pickup_datetime| dropoff_datetime|passenger_count|trip_distance|pickup_longitude|pickup_latitude|rate_code_id|dropoff_longitude|dropoff_latitude|fare_amount|extra|mta_tax|tip_amount|tolls_amount|total_amount| pickup_geom| dropoff_geom| bounds|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+\n| CMT|2009-10-12 19:35:21|2009-10-12 19:44:36| 1| 1.4| -74.000018| 40.720534| null| -73.995008| 40.734112| 6.5| 0.0| null| 0.0| 0.0| 6.5|{1, [[[-74.000018...|{1, [[[-73.995008...|{5, [[[-80.0, 35....|\n| CMT|2010-09-02 07:37:40|2010-09-02 07:53:17| 1| 6.8| -74.016477| 40.70971| 1| -73.97509| 40.759392| 17.3| 0.0| 0.5| 1.0| 0.0| 18.8|{1, [[[-74.016477...|{1, [[[-73.97509,...|{5, [[[-80.0, 35....|\n| CMT|2009-11-28 13:00:00|2009-11-28 13:01:57| 1| 0.5| -73.999666| 40.733384| null| -73.991751| 40.730273| 3.3| 0.0| 0.5| 0.0| 0.0| 3.8|{1, [[[-73.999666...|{1, [[[-73.991751...|{5, [[[-80.0, 35....|\n| CMT|2009-11-30 07:49:13|2009-11-30 08:12:38| 1| 12.9| -74.007033| 40.734931| null| -73.87277| 40.774319| 29.7| 0.0| 0.5| 6.04| 0.0| 36.24|{1, [[[-74.007033...|{1, [[[-73.87277,...|{5, [[[-80.0, 35....|\n| VTS|2009-01-03 01:55:00|2009-01-03 02:04:00| 5| 2.09| -73.993217| 40.72416| null| -73.9944| 40.74624| 7.7| 0.5| null| 0.0| 0.0| 8.2|{1, [[[-73.993217...|{1, [[[-73.9944, ...|{5, [[[-80.0, 35....|\n| VTS|2009-11-09 17:21:00|2009-11-09 17:32:00| 1| 5.19| -74.010003| 40.707022| null| -73.963853| 40.75677| 13.3| 1.0| 0.5| 0.0| 0.0| 14.8|{1, [[[-74.010003...|{1, [[[-73.963853...|{5, [[[-80.0, 35....|\n| VTS|2010-06-09 01:13:00|2010-06-09 01:27:00| 1| 8.09| -74.008697| 40.707335| 1| -73.949605| 40.78761| 19.7| 0.5| 0.5| 0.0| 0.0| 20.7|{1, [[[-74.008697...|{1, [[[-73.949605...|{5, [[[-80.0, 35....|\n| VTS|2009-01-28 18:36:00|2009-01-28 18:50:00| 1| 2.92| -74.008823| 40.72089| null| -73.994055| 40.747588| 10.1| 1.0| null| 3.0| 0.0| 14.1|{1, [[[-74.008823...|{1, [[[-73.994055...|{5, [[[-80.0, 35....|\n| CMT|2010-06-02 14:21:05|2010-06-02 14:28:43| 1| 5.0| -74.011653| 40.702604| 1| -73.971851| 40.749807| 12.5| 0.0| 0.5| 2.6| 0.0| 15.6|{1, [[[-74.011653...|{1, [[[-73.971851...|{5, [[[-80.0, 35....|\n| VTS|2009-11-26 15:38:00|2009-11-26 15:47:00| 5| 2.36| -73.997208| 40.722108| null| -73.99647| 40.748185| 8.1| 0.0| 0.5| 2.0| 0.0| 10.6|{1, [[[-73.997208...|{1, [[[-73.99647,...|{5, [[[-80.0, 35....|\n| CMT|2009-12-07 10:36:06|2009-12-07 10:42:26| 1| 1.3| -73.99067| 40.73065| null| -73.975539| 40.741353| 6.1| 0.0| 0.5| 0.0| 0.0| 6.6|{1, [[[-73.99067,...|{1, [[[-73.975539...|{5, [[[-80.0, 35....|\n| CMT|2009-11-15 09:11:42|2009-11-15 09:26:34| 1| 3.7| -73.990065| 40.687341| null| -73.999566| 40.730219| 12.1| 0.0| 0.5| 0.0| 0.0| 12.6|{1, [[[-73.990065...|{1, [[[-73.999566...|{5, [[[-80.0, 35....|\n| CMT|2010-06-27 17:27:25|2010-06-27 17:47:44| 2| 5.0| -74.008459| 40.712233| 1| -73.9516| 40.718877| 15.7| 0.0| 0.5| 3.0| 0.0| 19.2|{1, [[[-74.008459...|{1, [[[-73.9516, ...|{5, [[[-80.0, 35....|\n| VTS|2009-01-30 21:05:00|2009-01-30 21:34:00| 1| 5.99| -73.994397| 40.694843| null| -73.921257| 40.685107| 18.9| 0.5| null| 0.6| 0.0| 20.0|{1, [[[-73.994397...|{1, [[[-73.921257...|{5, [[[-80.0, 35....|\n| CMT|2009-01-14 07:43:53|2009-01-14 07:55:14| 2| 2.9| -74.007602| 40.725098| null| -73.977846| 40.751608| 9.3| 0.0| null| 0.0| 0.0| 9.3|{1, [[[-74.007602...|{1, [[[-73.977846...|{5, [[[-80.0, 35....|\n| VTS|2010-05-11 16:33:00|2010-05-11 16:41:00| 1| 0.99| -74.011205| 40.715468| 1| -74.011072| 40.708882| 5.7| 1.0| 0.5| 0.0| 0.0| 7.2|{1, [[[-74.011205...|{1, [[[-74.011072...|{5, [[[-80.0, 35....|\n| VTS|2009-01-19 09:43:00|2009-01-19 09:47:00| 1| 0.56| -73.991123| 40.731297| null| -73.98681| 40.736703| 4.1| 0.0| null| 0.0| 0.0| 4.1|{1, [[[-73.991123...|{1, [[[-73.98681,...|{5, [[[-80.0, 35....|\n| CMT|2009-11-14 15:46:36|2009-11-14 15:51:01| 2| 1.2| -74.008448| 40.734271| null| -74.006075| 40.720237| 4.9| 0.0| 0.5| 0.0| 0.0| 5.4|{1, [[[-74.008448...|{1, [[[-74.006075...|{5, [[[-80.0, 35....|\n| CMT|2009-11-17 16:50:35|2009-11-17 17:01:34| 1| 1.6| -74.00679| 40.730546| null| -73.9904| 40.73815| 7.7| 1.0| 0.5| 1.5| 0.0| 10.7|{1, [[[-74.00679,...|{1, [[[-73.9904, ...|{5, [[[-80.0, 35....|\n| CMT|2009-11-30 23:30:43|2009-11-30 23:42:54| 2| 2.9| -74.009605| 40.710155| null| -73.993875| 40.741554| 10.1| 0.5| 0.5| 2.22| 0.0| 13.32|{1, [[[-74.009605...|{1, [[[-73.993875...|{5, [[[-80.0, 35....|\n+---------+-------------------+-------------------+---------------+-------------+----------------+---------------+------------+-----------------+----------------+-----------+-----+-------+----------+------------+------------+--------------------+--------------------+--------------------+\nonly showing top 20 rows\n\n
", - "datasetInfos": [], - "metadata": {}, - "removedWidgets": [], - "type": "html" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "(\n", - " trips_mdf\n", - " .set_index_resolution(10)\n", - " .apply_index()\n", - " .join(\n", - " neighbourhoods_mdf\n", - " .set_index_resolution(10)\n", - " .apply_index()\n", - " )\n", - ").show()" - ] - } - ], - "metadata": { - "application/vnd.databricks.v1+notebook": { - "dashboards": [], - "language": "python", - "notebookMetadata": { - "pythonIndentUnit": 2 - }, - "notebookName": "quickstart", - "notebookOrigID": 1935524762305611, - "widgets": {} - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/v0.3.x/usage/usage.html b/v0.3.x/usage/usage.html deleted file mode 100644 index bc7ae1590..000000000 --- a/v0.3.x/usage/usage.html +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - - Usage — Mosaic - - - - - - - - - - - - - - - - - - - - - - -
- - -
- - -
-
- - - - \ No newline at end of file