├── .github └── workflows │ └── test-run.yaml ├── .gitignore ├── LICENSE ├── README.md ├── overturemaps ├── __init__.py ├── cli.py ├── core.py └── examples │ └── geopandas_example.ipynb ├── poetry.lock └── pyproject.toml /.github/workflows/test-run.yaml: -------------------------------------------------------------------------------- 1 | name: CLI install test 2 | 3 | on: [push] 4 | 5 | jobs: 6 | build: 7 | runs-on: ubuntu-latest 8 | strategy: 9 | matrix: 10 | python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] 11 | steps: 12 | - uses: actions/checkout@v4 13 | - name: Set up Python ${{ matrix.python-version }} 14 | uses: actions/setup-python@v5 15 | with: 16 | python-version: ${{ matrix.python-version }} 17 | - name: Install Poetry 18 | run: pip3 install poetry 19 | - name: Build library and install deps 20 | run: poetry install 21 | - name: Test run 22 | run: poetry run overturemaps download --bbox=-71.068,42.353,-71.058,42.363 -f geojson --type=building -o boston.geojson 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Adapted from https://github.com/github/gitignore/blob/main/Python.gitignore 2 | 3 | # Byte-compiled / optimized / DLL files 4 | __pycache__/ 5 | *.py[cod] 6 | *$py.class 7 | 8 | # C extensions 9 | *.so 10 | 11 | # Distribution / packaging 12 | .Python 13 | build/ 14 | develop-eggs/ 15 | dist/ 16 | downloads/ 17 | eggs/ 18 | .eggs/ 19 | lib/ 20 | lib64/ 21 | parts/ 22 | sdist/ 23 | var/ 24 | wheels/ 25 | share/python-wheels/ 26 | *.egg-info/ 27 | .installed.cfg 28 | *.egg 29 | MANIFEST 30 | 31 | # PyInstaller 32 | # Usually these files are written by a python script from a template 33 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 34 | *.manifest 35 | *.spec 36 | 37 | # Installer logs 38 | pip-log.txt 39 | pip-delete-this-directory.txt 40 | 41 | # Unit test / coverage reports 42 | htmlcov/ 43 | .tox/ 44 | .nox/ 45 | .coverage 46 | .coverage.* 47 | .cache 48 | nosetests.xml 49 | coverage.xml 50 | *.cover 51 | *.py,cover 52 | .hypothesis/ 53 | .pytest_cache/ 54 | cover/ 55 | 56 | # Translations 57 | *.mo 58 | *.pot 59 | 60 | # Django stuff: 61 | *.log 62 | local_settings.py 63 | db.sqlite3 64 | db.sqlite3-journal 65 | 66 | # Flask stuff: 67 | instance/ 68 | .webassets-cache 69 | 70 | # Scrapy stuff: 71 | .scrapy 72 | 73 | # Sphinx documentation 74 | docs/_build/ 75 | 76 | # PyBuilder 77 | .pybuilder/ 78 | target/ 79 | 80 | # Jupyter Notebook 81 | .ipynb_checkpoints 82 | 83 | # IPython 84 | profile_default/ 85 | ipython_config.py 86 | 87 | # pdm 88 | # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. 89 | #pdm.lock 90 | # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it 91 | # in version control. 92 | # https://pdm.fming.dev/latest/usage/project/#working-with-version-control 93 | .pdm.toml 94 | .pdm-python 95 | .pdm-build/ 96 | 97 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm 98 | __pypackages__/ 99 | 100 | # Celery stuff 101 | celerybeat-schedule 102 | celerybeat.pid 103 | 104 | # SageMath parsed files 105 | *.sage.py 106 | 107 | # Environments 108 | .env 109 | .venv 110 | env/ 111 | venv/ 112 | ENV/ 113 | env.bak/ 114 | venv.bak/ 115 | 116 | # Spyder project settings 117 | .spyderproject 118 | .spyproject 119 | 120 | # Rope project settings 121 | .ropeproject 122 | 123 | # mkdocs documentation 124 | /site 125 | 126 | # mypy 127 | .mypy_cache/ 128 | .dmypy.json 129 | dmypy.json 130 | 131 | # Pyre type checker 132 | .pyre/ 133 | 134 | # pytype static type analyzer 135 | .pytype/ 136 | 137 | # Cython debug symbols 138 | cython_debug/ 139 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Overture Maps 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![PyPi](https://img.shields.io/pypi/v/overturemaps.svg)](https://pypi.python.org/pypi/overturemaps) 2 | 3 | # overturemaps-py 4 | 5 | Official Python command-line tool of the [Overture Maps Foundation](https://overturemaps.org) 6 | 7 | Overture Maps provides free and open geospatial map data, from many different sources and normalized to a 8 | [common schema](https://github.com/OvertureMaps/schema). This tool helps to download Overture data 9 | within a region of interest and converts it to a few different file formats. For more information about accessing 10 | Overture Maps data, see our official documentation site https://docs.overturemaps.org. 11 | 12 | Note: This repository and project are experimental. Things are likely change including the user interface 13 | until a stable release, but we will keep the documentation here up-to-date. 14 | 15 | ## Quick Start 16 | 17 | Download the building footprints for the specific bounding box as GeoJSON and save to a file named "boston.geojson" 18 | 19 | ``` 20 | $ overturemaps download --bbox=-71.068,42.353,-71.058,42.363 -f geojson --type=building -o boston.geojson 21 | ``` 22 | 23 | ## Usage 24 | 25 | #### `download` 26 | There is currently one option to the `overturemaps` utility, `download`. It will download Overture Maps data 27 | with an optional bounding box into the specified file format. When specifying a bounding box, 28 | only the minimum data is transferred. The result is streamed out and can handle arbitrarily 29 | large bounding boxes. 30 | 31 | Command-line options: 32 | * `--bbox` (optional): west, south, east, north longitude and latitude coordinates. When omitted the 33 | entire dataset for the specified type will be downloaded 34 | * `-f` (required: one of "geojson", "geojsonseq", "geoparquet"): output format 35 | * `--output`/`-o` (optional): Location of output file. When omitted output will be written to stdout. 36 | * `--type`/`-t` (required): The Overture map data type to be downloaded. Examples of types are `building` 37 | for building footprints, `place` for POI places data, etc. Run `overturemaps download --help` for the 38 | complete list of allowed types 39 | 40 | This downloads data directly from Overture's S3 bucket without interacting with any other servers. 41 | By including bounding box extents on each row in the Overture distribution, the underlying Parquet 42 | readers use the Parquet summary statistics to download the minimum amount of data 43 | necessary to extract data from the desired region. 44 | 45 | To help find bounding boxes of interest, we like this [bounding box tool](https://boundingbox.klokantech.com/) 46 | from [Klokantech](https://www.klokantech.com/). Choose the CSV format and copy the value directly into 47 | the `--bbox` field here. 48 | 49 | 50 | ## Installation 51 | 52 | To install overturemaps from [PyPi](https://pypi.org/project/overturemaps/) using pip 53 | 54 | ```shell 55 | pip install overturemaps 56 | ``` 57 | 58 | overturemaps is also on [conda-forge](https://anaconda.org/conda-forge/overturemaps) and can be installed using conda, mamba, or pixi. To install overturemaps using conda: 59 | 60 | ```shell 61 | conda install -c conda-forge overturemaps 62 | ``` 63 | -------------------------------------------------------------------------------- /overturemaps/__init__.py: -------------------------------------------------------------------------------- 1 | from .core import ( 2 | record_batch_reader, 3 | get_all_overture_types, 4 | ) 5 | -------------------------------------------------------------------------------- /overturemaps/cli.py: -------------------------------------------------------------------------------- 1 | """ 2 | Overture Maps (overturemaps.org) command line utility. 3 | 4 | Currently provides the ability to extract features from an Overture dataset in a 5 | specified bounding box in a few different file formats. 6 | 7 | """ 8 | import json 9 | import os 10 | import sys 11 | from typing import Optional 12 | 13 | import click 14 | import pyarrow as pa 15 | import pyarrow.dataset as ds 16 | import pyarrow.compute as pc 17 | import pyarrow.fs as fs 18 | import pyarrow.parquet as pq 19 | import shapely.wkb 20 | 21 | from . core import record_batch_reader, get_all_overture_types 22 | 23 | 24 | def get_writer(output_format, path, schema): 25 | if output_format == "geojson": 26 | writer = GeoJSONWriter(path) 27 | elif output_format == "geojsonseq": 28 | writer = GeoJSONSeqWriter(path) 29 | elif output_format == "geoparquet": 30 | # Update the geoparquet metadata to remove the file-level bbox which 31 | # will no longer apply to this file. Since we cannot write the field at 32 | # the end, just remove it as it's optional. Let the per-row bounding 33 | # boxes do all the work. 34 | metadata = schema.metadata 35 | # extract geo metadata 36 | geo = json.loads(metadata[b"geo"]) 37 | # the spec allows for multiple geom columns 38 | geo_columns = geo["columns"] 39 | if len(geo_columns) > 1: 40 | raise IOError("Expected single geom column but encountered multiple.") 41 | for geom_col_vals in geo_columns.values(): 42 | # geom level extents "bbox" is optional - remove if present 43 | # since extracted data will have different extents 44 | if "bbox" in geom_col_vals: 45 | geom_col_vals.pop("bbox") 46 | # add "covering" if there is a row level "bbox" column 47 | # this facilitates spatial filters e.g. geopandas read_parquet 48 | if "bbox" in schema.names: 49 | geom_col_vals["covering"] = { 50 | "bbox": { 51 | "xmin": ["bbox", "xmin"], 52 | "ymin": ["bbox", "ymin"], 53 | "xmax": ["bbox", "xmax"], 54 | "ymax": ["bbox", "ymax"], 55 | } 56 | } 57 | metadata[b"geo"] = json.dumps(geo).encode("utf-8") 58 | schema = schema.with_metadata(metadata) 59 | writer = pq.ParquetWriter(path, schema) 60 | return writer 61 | 62 | 63 | class BboxParamType(click.ParamType): 64 | name = "bbox" 65 | 66 | def convert(self, value, param, ctx): 67 | try: 68 | bbox = [float(x.strip()) for x in value.split(",")] 69 | fail = False 70 | except ValueError: # ValueError raised when passing non-numbers to float() 71 | fail = True 72 | 73 | if fail or len(bbox) != 4: 74 | self.fail( 75 | f"bbox must be 4 floating point numbers separated by commas. Got '{value}'" 76 | ) 77 | 78 | return bbox 79 | 80 | 81 | @click.group() 82 | def cli(): 83 | pass 84 | 85 | 86 | @cli.command() 87 | @click.option("--bbox", required=False, type=BboxParamType()) 88 | @click.option( 89 | "-f", 90 | "output_format", 91 | type=click.Choice(["geojson", "geojsonseq", "geoparquet"]), 92 | required=True, 93 | ) 94 | @click.option("-o", "--output", required=False, type=click.Path()) 95 | @click.option( 96 | "-t", 97 | "--type", 98 | "type_", 99 | type=click.Choice(get_all_overture_types()), 100 | required=True, 101 | ) 102 | def download(bbox, output_format, output, type_): 103 | if output is None: 104 | output = sys.stdout 105 | 106 | reader = record_batch_reader(type_, bbox) 107 | if reader is None: 108 | return 109 | 110 | with get_writer(output_format, output, schema=reader.schema) as writer: 111 | copy(reader, writer) 112 | 113 | 114 | def copy(reader, writer): 115 | while True: 116 | try: 117 | batch = reader.read_next_batch() 118 | except StopIteration: 119 | break 120 | if batch.num_rows > 0: 121 | writer.write_batch(batch) 122 | 123 | 124 | class BaseGeoJSONWriter: 125 | """ 126 | A base feature writer that manages either a file handle 127 | or output stream. Subclasses should implement write_feature() 128 | and finalize() if needed 129 | """ 130 | 131 | def __init__(self, where): 132 | self.file_handle = None 133 | if isinstance(where, str): 134 | self.file_handle = open(os.path.expanduser(where), "w") 135 | self.writer = self.file_handle 136 | else: 137 | self.writer = where 138 | self.is_open = True 139 | 140 | def __enter__(self): 141 | return self 142 | 143 | def __exit__(self, exc_type, value, traceback): 144 | self.close() 145 | 146 | def close(self): 147 | if not self.is_open: 148 | return 149 | self.finalize() 150 | if self.file_handle: 151 | self.file_handle.close() 152 | self.is_open = False 153 | 154 | def write_batch(self, batch): 155 | if batch.num_rows == 0: 156 | return 157 | 158 | for row in batch.to_pylist(): 159 | feature = self.row_to_feature(row) 160 | self.write_feature(feature) 161 | 162 | def write_feature(self, feature): 163 | pass 164 | 165 | def finalize(self): 166 | pass 167 | 168 | def row_to_feature(self, row): 169 | geometry = shapely.wkb.loads(row.pop("geometry")) 170 | row.pop("bbox") 171 | 172 | # This only removes null values in the top-level dictionary but will leave in 173 | # nulls in sub-properties 174 | properties = {k: v for k, v in row.items() if k != "bbox" and v is not None} 175 | return { 176 | "type": "Feature", 177 | "geometry": geometry.__geo_interface__, 178 | "properties": properties, 179 | } 180 | 181 | 182 | class GeoJSONSeqWriter(BaseGeoJSONWriter): 183 | def write_feature(self, feature): 184 | self.writer.write(json.dumps(feature, separators=(",", ":"))) 185 | self.writer.write("\n") 186 | 187 | 188 | class GeoJSONWriter(BaseGeoJSONWriter): 189 | def __init__(self, *args, **kwargs): 190 | super().__init__(*args, **kwargs) 191 | self._has_written_feature = False 192 | 193 | self.writer.write('{"type": "FeatureCollection", "features": [\n') 194 | 195 | def write_feature(self, feature): 196 | if self._has_written_feature: 197 | self.writer.write(",\n") 198 | self.writer.write(json.dumps(feature, separators=(",", ":"))) 199 | self._has_written_feature = True 200 | 201 | def finalize(self): 202 | self.writer.write("]}") 203 | 204 | 205 | if __name__ == "__main__": 206 | cli() 207 | -------------------------------------------------------------------------------- /overturemaps/core.py: -------------------------------------------------------------------------------- 1 | from typing import List, Optional 2 | 3 | import pyarrow as pa 4 | import pyarrow.compute as pc 5 | import pyarrow.dataset as ds 6 | import pyarrow.fs as fs 7 | 8 | # Allows for optional import of additional dependencies 9 | try: 10 | import geopandas as gpd 11 | from geopandas import GeoDataFrame 12 | HAS_GEOPANDAS = True 13 | except ImportError: 14 | HAS_GEOPANDAS = False 15 | GeoDataFrame = None 16 | 17 | def record_batch_reader(overture_type, bbox=None) -> Optional[pa.RecordBatchReader]: 18 | """ 19 | Return a pyarrow RecordBatchReader for the desired bounding box and s3 path 20 | """ 21 | path = _dataset_path(overture_type) 22 | 23 | if bbox: 24 | xmin, ymin, xmax, ymax = bbox 25 | filter = ( 26 | (pc.field("bbox", "xmin") < xmax) 27 | & (pc.field("bbox", "xmax") > xmin) 28 | & (pc.field("bbox", "ymin") < ymax) 29 | & (pc.field("bbox", "ymax") > ymin) 30 | ) 31 | else: 32 | filter = None 33 | 34 | dataset = ds.dataset( 35 | path, filesystem=fs.S3FileSystem(anonymous=True, region="us-west-2") 36 | ) 37 | batches = dataset.to_batches(filter=filter) 38 | 39 | # to_batches() can yield many batches with no rows. I've seen 40 | # this cause downstream crashes or other negative effects. For 41 | # example, the ParquetWriter will emit an empty row group for 42 | # each one bloating the size of a parquet file. Just omit 43 | # them so the RecordBatchReader only has non-empty ones. Use 44 | # the generator syntax so the batches are streamed out 45 | non_empty_batches = (b for b in batches if b.num_rows > 0) 46 | 47 | geoarrow_schema = geoarrow_schema_adapter(dataset.schema) 48 | reader = pa.RecordBatchReader.from_batches(geoarrow_schema, non_empty_batches) 49 | return reader 50 | 51 | def geodataframe(overture_type: str, bbox: (float, float, float, float) = None) -> GeoDataFrame: 52 | """ 53 | Loads geoparquet for specified type into a geopandas dataframe 54 | 55 | Parameters 56 | ---------- 57 | overture_type: type to load 58 | bbox: optional bounding box for data fetch (xmin, ymin, xmax, ymax) 59 | 60 | Returns 61 | ------- 62 | GeoDataFrame with the optionally filtered theme data 63 | 64 | """ 65 | if not HAS_GEOPANDAS: 66 | raise ImportError("geopandas is required to use this function") 67 | 68 | reader = record_batch_reader(overture_type, bbox) 69 | return gpd.GeoDataFrame.from_arrow(reader) 70 | 71 | def geoarrow_schema_adapter(schema: pa.Schema) -> pa.Schema: 72 | """ 73 | Convert a geoarrow-compatible schema to a proper geoarrow schema 74 | 75 | This assumes there is a single "geometry" column with WKB formatting 76 | 77 | Parameters 78 | ---------- 79 | schema: pa.Schema 80 | 81 | Returns 82 | ------- 83 | pa.Schema 84 | A copy of the input schema with the geometry field replaced with 85 | a new one with the proper geoarrow ARROW:extension metadata 86 | 87 | """ 88 | geometry_field_index = schema.get_field_index("geometry") 89 | geometry_field = schema.field(geometry_field_index) 90 | geoarrow_geometry_field = geometry_field.with_metadata( 91 | {b"ARROW:extension:name": b"geoarrow.wkb"} 92 | ) 93 | 94 | geoarrow_schema = schema.set(geometry_field_index, geoarrow_geometry_field) 95 | 96 | return geoarrow_schema 97 | 98 | 99 | type_theme_map = { 100 | "address": "addresses", 101 | "bathymetry": "base", 102 | "building": "buildings", 103 | "building_part": "buildings", 104 | "division": "divisions", 105 | "division_area": "divisions", 106 | "division_boundary": "divisions", 107 | "place": "places", 108 | "segment": "transportation", 109 | "connector": "transportation", 110 | "infrastructure": "base", 111 | "land": "base", 112 | "land_cover": "base", 113 | "land_use": "base", 114 | "water": "base", 115 | } 116 | 117 | 118 | def _dataset_path(overture_type: str) -> str: 119 | """ 120 | Returns the s3 path of the Overture dataset to use. This assumes overture_type has 121 | been validated, e.g. by the CLI 122 | 123 | """ 124 | # Map of sub-partition "type" to parent partition "theme" for forming the 125 | # complete s3 path. Could be discovered by reading from the top-level s3 126 | # location but this allows to only read the files in the necessary partition. 127 | theme = type_theme_map[overture_type] 128 | return f"overturemaps-us-west-2/release/2025-03-19.0/theme={theme}/type={overture_type}/" 129 | 130 | 131 | def get_all_overture_types() -> List[str]: 132 | return list(type_theme_map.keys()) 133 | -------------------------------------------------------------------------------- /overturemaps/examples/geopandas_example.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "vscode": { 8 | "languageId": "plaintext" 9 | } 10 | }, 11 | "outputs": [], 12 | "source": [ 13 | "from overturemaps import core" 14 | ] 15 | }, 16 | { 17 | "cell_type": "code", 18 | "execution_count": 2, 19 | "metadata": { 20 | "vscode": { 21 | "languageId": "plaintext" 22 | } 23 | }, 24 | "outputs": [], 25 | "source": [ 26 | "# Cambridge Kendall Square\n", 27 | "bbox = (-71.0886055604, 42.3606368124, -71.0766325984, 42.3606368124)" 28 | ] 29 | }, 30 | { 31 | "cell_type": "code", 32 | "execution_count": 3, 33 | "metadata": {}, 34 | "outputs": [], 35 | "source": [ 36 | "gdf = core.geodataframe(\"segment\", bbox=bbox)" 37 | ] 38 | }, 39 | { 40 | "cell_type": "code", 41 | "execution_count": 4, 42 | "metadata": {}, 43 | "outputs": [ 44 | { 45 | "data": { 46 | "text/html": [ 47 | "
\n", 48 | "\n", 61 | "\n", 62 | " \n", 63 | " \n", 64 | " \n", 65 | " \n", 66 | " \n", 67 | " \n", 68 | " \n", 69 | " \n", 70 | " \n", 71 | " \n", 72 | " \n", 73 | " \n", 74 | " \n", 75 | " \n", 76 | " \n", 77 | " \n", 78 | " \n", 79 | " \n", 80 | " \n", 81 | " \n", 82 | " \n", 83 | " \n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | " \n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | "
idgeometrybboxversionsourcessubtypeclassnamesconnector_idsroutesaccess_restrictionslevel_rulesprohibited_transitionsroad_surfaceroad_flagsspeed_limitswidth_rules
00852a3067fffffff0469ef7c3fc96601LINESTRING (-71.11551 42.37213, -71.11529 42.3...{'xmin': -71.11550903320312, 'xmax': -71.05274...0[{'property': '', 'dataset': 'OpenStreetMap', ...railNone{'primary': 'Red Line', 'common': None, 'rules...[08f2a3067184655b044bf7748f3e3876, 08f2a306718...NoneNoneNoneNoneNoneNoneNoneNone
10862a30667ffffff0479fdc40c5e8067LINESTRING (-71.10204 42.36441, -71.10201 42.3...{'xmin': -71.10204315185547, 'xmax': -71.08793...0NoneroadcyclewayNone[08f2a30662625bad045efa82cdf75d93, 08f2a306627...None[{'access_type': 'denied', 'when': {'during': ...[{'value': 1, 'between': [0.48834895, 0.496672...None[{'value': 'paved', 'between': [0.0, 0.7918249...[{'values': ['is_bridge'], 'between': [0.48834...NoneNone
20892a3066237ffff047bfa92b25f2bfcLINESTRING (-71.0888 42.36072, -71.08872 42.36...{'xmin': -71.08880615234375, 'xmax': -71.08824...0[{'property': '', 'dataset': 'OpenStreetMap', ...roadfootwayNone[08f2a30662343963044dfe87ba195288, 08f2a306623...None[{'access_type': 'allowed', 'when': {'during':...NoneNone[{'value': 'paved', 'between': None}]NoneNoneNone
30892a3066237ffff047eff9c52bc5736LINESTRING (-71.08855 42.3608, -71.08848 42.36...{'xmin': -71.08855438232422, 'xmax': -71.08799...0[{'property': '', 'dataset': 'OpenStreetMap', ...roadfootwayNone[08f2a30662341d8c0450ea91ce3396bc, 08f2a306623...None[{'access_type': 'allowed', 'when': {'during':...NoneNone[{'value': 'paved', 'between': None}]NoneNoneNone
40892a3066237ffff0442faa7187bc82cLINESTRING (-71.08773 42.35998, -71.08775 42.3...{'xmin': -71.08827209472656, 'xmax': -71.08773...0[{'property': '', 'dataset': 'OpenStreetMap', ...roadsidewalkNone[08f2a3066234d99d0470feb178e8c55e, 08f2a306623...NoneNoneNoneNone[{'value': 'paved', 'between': None}]NoneNoneNone
\n", 187 | "
" 188 | ], 189 | "text/plain": [ 190 | " id \\\n", 191 | "0 0852a3067fffffff0469ef7c3fc96601 \n", 192 | "1 0862a30667ffffff0479fdc40c5e8067 \n", 193 | "2 0892a3066237ffff047bfa92b25f2bfc \n", 194 | "3 0892a3066237ffff047eff9c52bc5736 \n", 195 | "4 0892a3066237ffff0442faa7187bc82c \n", 196 | "\n", 197 | " geometry \\\n", 198 | "0 LINESTRING (-71.11551 42.37213, -71.11529 42.3... \n", 199 | "1 LINESTRING (-71.10204 42.36441, -71.10201 42.3... \n", 200 | "2 LINESTRING (-71.0888 42.36072, -71.08872 42.36... \n", 201 | "3 LINESTRING (-71.08855 42.3608, -71.08848 42.36... \n", 202 | "4 LINESTRING (-71.08773 42.35998, -71.08775 42.3... \n", 203 | "\n", 204 | " bbox version \\\n", 205 | "0 {'xmin': -71.11550903320312, 'xmax': -71.05274... 0 \n", 206 | "1 {'xmin': -71.10204315185547, 'xmax': -71.08793... 0 \n", 207 | "2 {'xmin': -71.08880615234375, 'xmax': -71.08824... 0 \n", 208 | "3 {'xmin': -71.08855438232422, 'xmax': -71.08799... 0 \n", 209 | "4 {'xmin': -71.08827209472656, 'xmax': -71.08773... 0 \n", 210 | "\n", 211 | " sources subtype class \\\n", 212 | "0 [{'property': '', 'dataset': 'OpenStreetMap', ... rail None \n", 213 | "1 None road cycleway \n", 214 | "2 [{'property': '', 'dataset': 'OpenStreetMap', ... road footway \n", 215 | "3 [{'property': '', 'dataset': 'OpenStreetMap', ... road footway \n", 216 | "4 [{'property': '', 'dataset': 'OpenStreetMap', ... road sidewalk \n", 217 | "\n", 218 | " names \\\n", 219 | "0 {'primary': 'Red Line', 'common': None, 'rules... \n", 220 | "1 None \n", 221 | "2 None \n", 222 | "3 None \n", 223 | "4 None \n", 224 | "\n", 225 | " connector_ids routes \\\n", 226 | "0 [08f2a3067184655b044bf7748f3e3876, 08f2a306718... None \n", 227 | "1 [08f2a30662625bad045efa82cdf75d93, 08f2a306627... None \n", 228 | "2 [08f2a30662343963044dfe87ba195288, 08f2a306623... None \n", 229 | "3 [08f2a30662341d8c0450ea91ce3396bc, 08f2a306623... None \n", 230 | "4 [08f2a3066234d99d0470feb178e8c55e, 08f2a306623... None \n", 231 | "\n", 232 | " access_restrictions \\\n", 233 | "0 None \n", 234 | "1 [{'access_type': 'denied', 'when': {'during': ... \n", 235 | "2 [{'access_type': 'allowed', 'when': {'during':... \n", 236 | "3 [{'access_type': 'allowed', 'when': {'during':... \n", 237 | "4 None \n", 238 | "\n", 239 | " level_rules prohibited_transitions \\\n", 240 | "0 None None \n", 241 | "1 [{'value': 1, 'between': [0.48834895, 0.496672... None \n", 242 | "2 None None \n", 243 | "3 None None \n", 244 | "4 None None \n", 245 | "\n", 246 | " road_surface \\\n", 247 | "0 None \n", 248 | "1 [{'value': 'paved', 'between': [0.0, 0.7918249... \n", 249 | "2 [{'value': 'paved', 'between': None}] \n", 250 | "3 [{'value': 'paved', 'between': None}] \n", 251 | "4 [{'value': 'paved', 'between': None}] \n", 252 | "\n", 253 | " road_flags speed_limits width_rules \n", 254 | "0 None None None \n", 255 | "1 [{'values': ['is_bridge'], 'between': [0.48834... None None \n", 256 | "2 None None None \n", 257 | "3 None None None \n", 258 | "4 None None None " 259 | ] 260 | }, 261 | "execution_count": 4, 262 | "metadata": {}, 263 | "output_type": "execute_result" 264 | } 265 | ], 266 | "source": [ 267 | "gdf.head()" 268 | ] 269 | }, 270 | { 271 | "cell_type": "code", 272 | "execution_count": null, 273 | "metadata": {}, 274 | "outputs": [], 275 | "source": [] 276 | } 277 | ], 278 | "metadata": { 279 | "kernelspec": { 280 | "display_name": "Python 3 (ipykernel)", 281 | "language": "python", 282 | "name": "python3" 283 | }, 284 | "language_info": { 285 | "codemirror_mode": { 286 | "name": "ipython", 287 | "version": 3 288 | }, 289 | "file_extension": ".py", 290 | "mimetype": "text/x-python", 291 | "name": "python", 292 | "nbconvert_exporter": "python", 293 | "pygments_lexer": "ipython3", 294 | "version": "3.12.4" 295 | } 296 | }, 297 | "nbformat": 4, 298 | "nbformat_minor": 4 299 | } 300 | -------------------------------------------------------------------------------- /poetry.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. 2 | 3 | [[package]] 4 | name = "certifi" 5 | version = "2024.7.4" 6 | description = "Python package for providing Mozilla's CA Bundle." 7 | optional = true 8 | python-versions = ">=3.6" 9 | files = [ 10 | {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, 11 | {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, 12 | ] 13 | 14 | [[package]] 15 | name = "click" 16 | version = "8.1.7" 17 | description = "Composable command line interface toolkit" 18 | optional = false 19 | python-versions = ">=3.7" 20 | files = [ 21 | {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, 22 | {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, 23 | ] 24 | 25 | [package.dependencies] 26 | colorama = {version = "*", markers = "platform_system == \"Windows\""} 27 | 28 | [[package]] 29 | name = "colorama" 30 | version = "0.4.6" 31 | description = "Cross-platform colored terminal text." 32 | optional = false 33 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" 34 | files = [ 35 | {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, 36 | {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, 37 | ] 38 | 39 | [[package]] 40 | name = "geopandas" 41 | version = "1.0.1" 42 | description = "Geographic pandas extensions" 43 | optional = true 44 | python-versions = ">=3.9" 45 | files = [ 46 | {file = "geopandas-1.0.1-py3-none-any.whl", hash = "sha256:01e147d9420cc374d26f51fc23716ac307f32b49406e4bd8462c07e82ed1d3d6"}, 47 | {file = "geopandas-1.0.1.tar.gz", hash = "sha256:b8bf70a5534588205b7a56646e2082fb1de9a03599651b3d80c99ea4c2ca08ab"}, 48 | ] 49 | 50 | [package.dependencies] 51 | numpy = ">=1.22" 52 | packaging = "*" 53 | pandas = ">=1.4.0" 54 | pyogrio = ">=0.7.2" 55 | pyproj = ">=3.3.0" 56 | shapely = ">=2.0.0" 57 | 58 | [package.extras] 59 | all = ["GeoAlchemy2", "SQLAlchemy (>=1.3)", "folium", "geopy", "mapclassify", "matplotlib (>=3.5.0)", "psycopg-binary (>=3.1.0)", "pyarrow (>=8.0.0)", "xyzservices"] 60 | dev = ["black", "codecov", "pre-commit", "pytest (>=3.1.0)", "pytest-cov", "pytest-xdist"] 61 | 62 | [[package]] 63 | name = "numpy" 64 | version = "1.24.4" 65 | description = "Fundamental package for array computing in Python" 66 | optional = false 67 | python-versions = ">=3.8" 68 | files = [ 69 | {file = "numpy-1.24.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c0bfb52d2169d58c1cdb8cc1f16989101639b34c7d3ce60ed70b19c63eba0b64"}, 70 | {file = "numpy-1.24.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ed094d4f0c177b1b8e7aa9cba7d6ceed51c0e569a5318ac0ca9a090680a6a1b1"}, 71 | {file = "numpy-1.24.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79fc682a374c4a8ed08b331bef9c5f582585d1048fa6d80bc6c35bc384eee9b4"}, 72 | {file = "numpy-1.24.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ffe43c74893dbf38c2b0a1f5428760a1a9c98285553c89e12d70a96a7f3a4d6"}, 73 | {file = "numpy-1.24.4-cp310-cp310-win32.whl", hash = "sha256:4c21decb6ea94057331e111a5bed9a79d335658c27ce2adb580fb4d54f2ad9bc"}, 74 | {file = "numpy-1.24.4-cp310-cp310-win_amd64.whl", hash = "sha256:b4bea75e47d9586d31e892a7401f76e909712a0fd510f58f5337bea9572c571e"}, 75 | {file = "numpy-1.24.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f136bab9c2cfd8da131132c2cf6cc27331dd6fae65f95f69dcd4ae3c3639c810"}, 76 | {file = "numpy-1.24.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e2926dac25b313635e4d6cf4dc4e51c8c0ebfed60b801c799ffc4c32bf3d1254"}, 77 | {file = "numpy-1.24.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:222e40d0e2548690405b0b3c7b21d1169117391c2e82c378467ef9ab4c8f0da7"}, 78 | {file = "numpy-1.24.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7215847ce88a85ce39baf9e89070cb860c98fdddacbaa6c0da3ffb31b3350bd5"}, 79 | {file = "numpy-1.24.4-cp311-cp311-win32.whl", hash = "sha256:4979217d7de511a8d57f4b4b5b2b965f707768440c17cb70fbf254c4b225238d"}, 80 | {file = "numpy-1.24.4-cp311-cp311-win_amd64.whl", hash = "sha256:b7b1fc9864d7d39e28f41d089bfd6353cb5f27ecd9905348c24187a768c79694"}, 81 | {file = "numpy-1.24.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1452241c290f3e2a312c137a9999cdbf63f78864d63c79039bda65ee86943f61"}, 82 | {file = "numpy-1.24.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:04640dab83f7c6c85abf9cd729c5b65f1ebd0ccf9de90b270cd61935eef0197f"}, 83 | {file = "numpy-1.24.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5425b114831d1e77e4b5d812b69d11d962e104095a5b9c3b641a218abcc050e"}, 84 | {file = "numpy-1.24.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd80e219fd4c71fc3699fc1dadac5dcf4fd882bfc6f7ec53d30fa197b8ee22dc"}, 85 | {file = "numpy-1.24.4-cp38-cp38-win32.whl", hash = "sha256:4602244f345453db537be5314d3983dbf5834a9701b7723ec28923e2889e0bb2"}, 86 | {file = "numpy-1.24.4-cp38-cp38-win_amd64.whl", hash = "sha256:692f2e0f55794943c5bfff12b3f56f99af76f902fc47487bdfe97856de51a706"}, 87 | {file = "numpy-1.24.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2541312fbf09977f3b3ad449c4e5f4bb55d0dbf79226d7724211acc905049400"}, 88 | {file = "numpy-1.24.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9667575fb6d13c95f1b36aca12c5ee3356bf001b714fc354eb5465ce1609e62f"}, 89 | {file = "numpy-1.24.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a86ed21e4f87050382c7bc96571755193c4c1392490744ac73d660e8f564a9"}, 90 | {file = "numpy-1.24.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d11efb4dbecbdf22508d55e48d9c8384db795e1b7b51ea735289ff96613ff74d"}, 91 | {file = "numpy-1.24.4-cp39-cp39-win32.whl", hash = "sha256:6620c0acd41dbcb368610bb2f4d83145674040025e5536954782467100aa8835"}, 92 | {file = "numpy-1.24.4-cp39-cp39-win_amd64.whl", hash = "sha256:befe2bf740fd8373cf56149a5c23a0f601e82869598d41f8e188a0e9869926f8"}, 93 | {file = "numpy-1.24.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:31f13e25b4e304632a4619d0e0777662c2ffea99fcae2029556b17d8ff958aef"}, 94 | {file = "numpy-1.24.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95f7ac6540e95bc440ad77f56e520da5bf877f87dca58bd095288dce8940532a"}, 95 | {file = "numpy-1.24.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e98f220aa76ca2a977fe435f5b04d7b3470c0a2e6312907b37ba6068f26787f2"}, 96 | {file = "numpy-1.24.4.tar.gz", hash = "sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463"}, 97 | ] 98 | 99 | [[package]] 100 | name = "numpy" 101 | version = "2.0.1" 102 | description = "Fundamental package for array computing in Python" 103 | optional = false 104 | python-versions = ">=3.9" 105 | files = [ 106 | {file = "numpy-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0fbb536eac80e27a2793ffd787895242b7f18ef792563d742c2d673bfcb75134"}, 107 | {file = "numpy-2.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:69ff563d43c69b1baba77af455dd0a839df8d25e8590e79c90fcbe1499ebde42"}, 108 | {file = "numpy-2.0.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:1b902ce0e0a5bb7704556a217c4f63a7974f8f43e090aff03fcf262e0b135e02"}, 109 | {file = "numpy-2.0.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:f1659887361a7151f89e79b276ed8dff3d75877df906328f14d8bb40bb4f5101"}, 110 | {file = "numpy-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4658c398d65d1b25e1760de3157011a80375da861709abd7cef3bad65d6543f9"}, 111 | {file = "numpy-2.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4127d4303b9ac9f94ca0441138acead39928938660ca58329fe156f84b9f3015"}, 112 | {file = "numpy-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e5eeca8067ad04bc8a2a8731183d51d7cbaac66d86085d5f4766ee6bf19c7f87"}, 113 | {file = "numpy-2.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9adbd9bb520c866e1bfd7e10e1880a1f7749f1f6e5017686a5fbb9b72cf69f82"}, 114 | {file = "numpy-2.0.1-cp310-cp310-win32.whl", hash = "sha256:7b9853803278db3bdcc6cd5beca37815b133e9e77ff3d4733c247414e78eb8d1"}, 115 | {file = "numpy-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:81b0893a39bc5b865b8bf89e9ad7807e16717f19868e9d234bdaf9b1f1393868"}, 116 | {file = "numpy-2.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:75b4e316c5902d8163ef9d423b1c3f2f6252226d1aa5cd8a0a03a7d01ffc6268"}, 117 | {file = "numpy-2.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6e4eeb6eb2fced786e32e6d8df9e755ce5be920d17f7ce00bc38fcde8ccdbf9e"}, 118 | {file = "numpy-2.0.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:a1e01dcaab205fbece13c1410253a9eea1b1c9b61d237b6fa59bcc46e8e89343"}, 119 | {file = "numpy-2.0.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:a8fc2de81ad835d999113ddf87d1ea2b0f4704cbd947c948d2f5513deafe5a7b"}, 120 | {file = "numpy-2.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a3d94942c331dd4e0e1147f7a8699a4aa47dffc11bf8a1523c12af8b2e91bbe"}, 121 | {file = "numpy-2.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15eb4eca47d36ec3f78cde0a3a2ee24cf05ca7396ef808dda2c0ddad7c2bde67"}, 122 | {file = "numpy-2.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b83e16a5511d1b1f8a88cbabb1a6f6a499f82c062a4251892d9ad5d609863fb7"}, 123 | {file = "numpy-2.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1f87fec1f9bc1efd23f4227becff04bd0e979e23ca50cc92ec88b38489db3b55"}, 124 | {file = "numpy-2.0.1-cp311-cp311-win32.whl", hash = "sha256:36d3a9405fd7c511804dc56fc32974fa5533bdeb3cd1604d6b8ff1d292b819c4"}, 125 | {file = "numpy-2.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:08458fbf403bff5e2b45f08eda195d4b0c9b35682311da5a5a0a0925b11b9bd8"}, 126 | {file = "numpy-2.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6bf4e6f4a2a2e26655717a1983ef6324f2664d7011f6ef7482e8c0b3d51e82ac"}, 127 | {file = "numpy-2.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7d6fddc5fe258d3328cd8e3d7d3e02234c5d70e01ebe377a6ab92adb14039cb4"}, 128 | {file = "numpy-2.0.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:5daab361be6ddeb299a918a7c0864fa8618af66019138263247af405018b04e1"}, 129 | {file = "numpy-2.0.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:ea2326a4dca88e4a274ba3a4405eb6c6467d3ffbd8c7d38632502eaae3820587"}, 130 | {file = "numpy-2.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:529af13c5f4b7a932fb0e1911d3a75da204eff023ee5e0e79c1751564221a5c8"}, 131 | {file = "numpy-2.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6790654cb13eab303d8402354fabd47472b24635700f631f041bd0b65e37298a"}, 132 | {file = "numpy-2.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cbab9fc9c391700e3e1287666dfd82d8666d10e69a6c4a09ab97574c0b7ee0a7"}, 133 | {file = "numpy-2.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:99d0d92a5e3613c33a5f01db206a33f8fdf3d71f2912b0de1739894668b7a93b"}, 134 | {file = "numpy-2.0.1-cp312-cp312-win32.whl", hash = "sha256:173a00b9995f73b79eb0191129f2455f1e34c203f559dd118636858cc452a1bf"}, 135 | {file = "numpy-2.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:bb2124fdc6e62baae159ebcfa368708867eb56806804d005860b6007388df171"}, 136 | {file = "numpy-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bfc085b28d62ff4009364e7ca34b80a9a080cbd97c2c0630bb5f7f770dae9414"}, 137 | {file = "numpy-2.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8fae4ebbf95a179c1156fab0b142b74e4ba4204c87bde8d3d8b6f9c34c5825ef"}, 138 | {file = "numpy-2.0.1-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:72dc22e9ec8f6eaa206deb1b1355eb2e253899d7347f5e2fae5f0af613741d06"}, 139 | {file = "numpy-2.0.1-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:ec87f5f8aca726117a1c9b7083e7656a9d0d606eec7299cc067bb83d26f16e0c"}, 140 | {file = "numpy-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f682ea61a88479d9498bf2091fdcd722b090724b08b31d63e022adc063bad59"}, 141 | {file = "numpy-2.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8efc84f01c1cd7e34b3fb310183e72fcdf55293ee736d679b6d35b35d80bba26"}, 142 | {file = "numpy-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3fdabe3e2a52bc4eff8dc7a5044342f8bd9f11ef0934fcd3289a788c0eb10018"}, 143 | {file = "numpy-2.0.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:24a0e1befbfa14615b49ba9659d3d8818a0f4d8a1c5822af8696706fbda7310c"}, 144 | {file = "numpy-2.0.1-cp39-cp39-win32.whl", hash = "sha256:f9cf5ea551aec449206954b075db819f52adc1638d46a6738253a712d553c7b4"}, 145 | {file = "numpy-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:e9e81fa9017eaa416c056e5d9e71be93d05e2c3c2ab308d23307a8bc4443c368"}, 146 | {file = "numpy-2.0.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:61728fba1e464f789b11deb78a57805c70b2ed02343560456190d0501ba37b0f"}, 147 | {file = "numpy-2.0.1-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:12f5d865d60fb9734e60a60f1d5afa6d962d8d4467c120a1c0cda6eb2964437d"}, 148 | {file = "numpy-2.0.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eacf3291e263d5a67d8c1a581a8ebbcfd6447204ef58828caf69a5e3e8c75990"}, 149 | {file = "numpy-2.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2c3a346ae20cfd80b6cfd3e60dc179963ef2ea58da5ec074fd3d9e7a1e7ba97f"}, 150 | {file = "numpy-2.0.1.tar.gz", hash = "sha256:485b87235796410c3519a699cfe1faab097e509e90ebb05dcd098db2ae87e7b3"}, 151 | ] 152 | 153 | [[package]] 154 | name = "packaging" 155 | version = "24.1" 156 | description = "Core utilities for Python packages" 157 | optional = true 158 | python-versions = ">=3.8" 159 | files = [ 160 | {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, 161 | {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, 162 | ] 163 | 164 | [[package]] 165 | name = "pandas" 166 | version = "2.2.2" 167 | description = "Powerful data structures for data analysis, time series, and statistics" 168 | optional = true 169 | python-versions = ">=3.9" 170 | files = [ 171 | {file = "pandas-2.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90c6fca2acf139569e74e8781709dccb6fe25940488755716d1d354d6bc58bce"}, 172 | {file = "pandas-2.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c7adfc142dac335d8c1e0dcbd37eb8617eac386596eb9e1a1b77791cf2498238"}, 173 | {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4abfe0be0d7221be4f12552995e58723c7422c80a659da13ca382697de830c08"}, 174 | {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8635c16bf3d99040fdf3ca3db669a7250ddf49c55dc4aa8fe0ae0fa8d6dcc1f0"}, 175 | {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:40ae1dffb3967a52203105a077415a86044a2bea011b5f321c6aa64b379a3f51"}, 176 | {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8e5a0b00e1e56a842f922e7fae8ae4077aee4af0acb5ae3622bd4b4c30aedf99"}, 177 | {file = "pandas-2.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:ddf818e4e6c7c6f4f7c8a12709696d193976b591cc7dc50588d3d1a6b5dc8772"}, 178 | {file = "pandas-2.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:696039430f7a562b74fa45f540aca068ea85fa34c244d0deee539cb6d70aa288"}, 179 | {file = "pandas-2.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8e90497254aacacbc4ea6ae5e7a8cd75629d6ad2b30025a4a8b09aa4faf55151"}, 180 | {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58b84b91b0b9f4bafac2a0ac55002280c094dfc6402402332c0913a59654ab2b"}, 181 | {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2123dc9ad6a814bcdea0f099885276b31b24f7edf40f6cdbc0912672e22eee"}, 182 | {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2925720037f06e89af896c70bca73459d7e6a4be96f9de79e2d440bd499fe0db"}, 183 | {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0cace394b6ea70c01ca1595f839cf193df35d1575986e484ad35c4aeae7266c1"}, 184 | {file = "pandas-2.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:873d13d177501a28b2756375d59816c365e42ed8417b41665f346289adc68d24"}, 185 | {file = "pandas-2.2.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9dfde2a0ddef507a631dc9dc4af6a9489d5e2e740e226ad426a05cabfbd7c8ef"}, 186 | {file = "pandas-2.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e9b79011ff7a0f4b1d6da6a61aa1aa604fb312d6647de5bad20013682d1429ce"}, 187 | {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cb51fe389360f3b5a4d57dbd2848a5f033350336ca3b340d1c53a1fad33bcad"}, 188 | {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eee3a87076c0756de40b05c5e9a6069c035ba43e8dd71c379e68cab2c20f16ad"}, 189 | {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3e374f59e440d4ab45ca2fffde54b81ac3834cf5ae2cdfa69c90bc03bde04d76"}, 190 | {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:43498c0bdb43d55cb162cdc8c06fac328ccb5d2eabe3cadeb3529ae6f0517c32"}, 191 | {file = "pandas-2.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:d187d355ecec3629624fccb01d104da7d7f391db0311145817525281e2804d23"}, 192 | {file = "pandas-2.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0ca6377b8fca51815f382bd0b697a0814c8bda55115678cbc94c30aacbb6eff2"}, 193 | {file = "pandas-2.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9057e6aa78a584bc93a13f0a9bf7e753a5e9770a30b4d758b8d5f2a62a9433cd"}, 194 | {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:001910ad31abc7bf06f49dcc903755d2f7f3a9186c0c040b827e522e9cef0863"}, 195 | {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66b479b0bd07204e37583c191535505410daa8df638fd8e75ae1b383851fe921"}, 196 | {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a77e9d1c386196879aa5eb712e77461aaee433e54c68cf253053a73b7e49c33a"}, 197 | {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92fd6b027924a7e178ac202cfbe25e53368db90d56872d20ffae94b96c7acc57"}, 198 | {file = "pandas-2.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:640cef9aa381b60e296db324337a554aeeb883ead99dc8f6c18e81a93942f5f4"}, 199 | {file = "pandas-2.2.2.tar.gz", hash = "sha256:9e79019aba43cb4fda9e4d983f8e88ca0373adbb697ae9c6c43093218de28b54"}, 200 | ] 201 | 202 | [package.dependencies] 203 | numpy = [ 204 | {version = ">=1.22.4", markers = "python_version < \"3.11\""}, 205 | {version = ">=1.23.2", markers = "python_version == \"3.11\""}, 206 | {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, 207 | ] 208 | python-dateutil = ">=2.8.2" 209 | pytz = ">=2020.1" 210 | tzdata = ">=2022.7" 211 | 212 | [package.extras] 213 | all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"] 214 | aws = ["s3fs (>=2022.11.0)"] 215 | clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"] 216 | compression = ["zstandard (>=0.19.0)"] 217 | computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"] 218 | consortium-standard = ["dataframe-api-compat (>=0.1.7)"] 219 | excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"] 220 | feather = ["pyarrow (>=10.0.1)"] 221 | fss = ["fsspec (>=2022.11.0)"] 222 | gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"] 223 | hdf5 = ["tables (>=3.8.0)"] 224 | html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"] 225 | mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"] 226 | output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"] 227 | parquet = ["pyarrow (>=10.0.1)"] 228 | performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] 229 | plot = ["matplotlib (>=3.6.3)"] 230 | postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] 231 | pyarrow = ["pyarrow (>=10.0.1)"] 232 | spss = ["pyreadstat (>=1.2.0)"] 233 | sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] 234 | test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] 235 | xml = ["lxml (>=4.9.2)"] 236 | 237 | [[package]] 238 | name = "pyarrow" 239 | version = "17.0.0" 240 | description = "Python library for Apache Arrow" 241 | optional = false 242 | python-versions = ">=3.8" 243 | files = [ 244 | {file = "pyarrow-17.0.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:a5c8b238d47e48812ee577ee20c9a2779e6a5904f1708ae240f53ecbee7c9f07"}, 245 | {file = "pyarrow-17.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:db023dc4c6cae1015de9e198d41250688383c3f9af8f565370ab2b4cb5f62655"}, 246 | {file = "pyarrow-17.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da1e060b3876faa11cee287839f9cc7cdc00649f475714b8680a05fd9071d545"}, 247 | {file = "pyarrow-17.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75c06d4624c0ad6674364bb46ef38c3132768139ddec1c56582dbac54f2663e2"}, 248 | {file = "pyarrow-17.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:fa3c246cc58cb5a4a5cb407a18f193354ea47dd0648194e6265bd24177982fe8"}, 249 | {file = "pyarrow-17.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:f7ae2de664e0b158d1607699a16a488de3d008ba99b3a7aa5de1cbc13574d047"}, 250 | {file = "pyarrow-17.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:5984f416552eea15fd9cee03da53542bf4cddaef5afecefb9aa8d1010c335087"}, 251 | {file = "pyarrow-17.0.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:1c8856e2ef09eb87ecf937104aacfa0708f22dfeb039c363ec99735190ffb977"}, 252 | {file = "pyarrow-17.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2e19f569567efcbbd42084e87f948778eb371d308e137a0f97afe19bb860ccb3"}, 253 | {file = "pyarrow-17.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b244dc8e08a23b3e352899a006a26ae7b4d0da7bb636872fa8f5884e70acf15"}, 254 | {file = "pyarrow-17.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b72e87fe3e1db343995562f7fff8aee354b55ee83d13afba65400c178ab2597"}, 255 | {file = "pyarrow-17.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:dc5c31c37409dfbc5d014047817cb4ccd8c1ea25d19576acf1a001fe07f5b420"}, 256 | {file = "pyarrow-17.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:e3343cb1e88bc2ea605986d4b94948716edc7a8d14afd4e2c097232f729758b4"}, 257 | {file = "pyarrow-17.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:a27532c38f3de9eb3e90ecab63dfda948a8ca859a66e3a47f5f42d1e403c4d03"}, 258 | {file = "pyarrow-17.0.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:9b8a823cea605221e61f34859dcc03207e52e409ccf6354634143e23af7c8d22"}, 259 | {file = "pyarrow-17.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f1e70de6cb5790a50b01d2b686d54aaf73da01266850b05e3af2a1bc89e16053"}, 260 | {file = "pyarrow-17.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0071ce35788c6f9077ff9ecba4858108eebe2ea5a3f7cf2cf55ebc1dbc6ee24a"}, 261 | {file = "pyarrow-17.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:757074882f844411fcca735e39aae74248a1531367a7c80799b4266390ae51cc"}, 262 | {file = "pyarrow-17.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:9ba11c4f16976e89146781a83833df7f82077cdab7dc6232c897789343f7891a"}, 263 | {file = "pyarrow-17.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:b0c6ac301093b42d34410b187bba560b17c0330f64907bfa4f7f7f2444b0cf9b"}, 264 | {file = "pyarrow-17.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:392bc9feabc647338e6c89267635e111d71edad5fcffba204425a7c8d13610d7"}, 265 | {file = "pyarrow-17.0.0-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:af5ff82a04b2171415f1410cff7ebb79861afc5dae50be73ce06d6e870615204"}, 266 | {file = "pyarrow-17.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:edca18eaca89cd6382dfbcff3dd2d87633433043650c07375d095cd3517561d8"}, 267 | {file = "pyarrow-17.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c7916bff914ac5d4a8fe25b7a25e432ff921e72f6f2b7547d1e325c1ad9d155"}, 268 | {file = "pyarrow-17.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f553ca691b9e94b202ff741bdd40f6ccb70cdd5fbf65c187af132f1317de6145"}, 269 | {file = "pyarrow-17.0.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:0cdb0e627c86c373205a2f94a510ac4376fdc523f8bb36beab2e7f204416163c"}, 270 | {file = "pyarrow-17.0.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:d7d192305d9d8bc9082d10f361fc70a73590a4c65cf31c3e6926cd72b76bc35c"}, 271 | {file = "pyarrow-17.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:02dae06ce212d8b3244dd3e7d12d9c4d3046945a5933d28026598e9dbbda1fca"}, 272 | {file = "pyarrow-17.0.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:13d7a460b412f31e4c0efa1148e1d29bdf18ad1411eb6757d38f8fbdcc8645fb"}, 273 | {file = "pyarrow-17.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9b564a51fbccfab5a04a80453e5ac6c9954a9c5ef2890d1bcf63741909c3f8df"}, 274 | {file = "pyarrow-17.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32503827abbc5aadedfa235f5ece8c4f8f8b0a3cf01066bc8d29de7539532687"}, 275 | {file = "pyarrow-17.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a155acc7f154b9ffcc85497509bcd0d43efb80d6f733b0dc3bb14e281f131c8b"}, 276 | {file = "pyarrow-17.0.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:dec8d129254d0188a49f8a1fc99e0560dc1b85f60af729f47de4046015f9b0a5"}, 277 | {file = "pyarrow-17.0.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:a48ddf5c3c6a6c505904545c25a4ae13646ae1f8ba703c4df4a1bfe4f4006bda"}, 278 | {file = "pyarrow-17.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:42bf93249a083aca230ba7e2786c5f673507fa97bbd9725a1e2754715151a204"}, 279 | {file = "pyarrow-17.0.0.tar.gz", hash = "sha256:4beca9521ed2c0921c1023e68d097d0299b62c362639ea315572a58f3f50fd28"}, 280 | ] 281 | 282 | [package.dependencies] 283 | numpy = ">=1.16.6" 284 | 285 | [package.extras] 286 | test = ["cffi", "hypothesis", "pandas", "pytest", "pytz"] 287 | 288 | [[package]] 289 | name = "pyogrio" 290 | version = "0.9.0" 291 | description = "Vectorized spatial vector file format I/O using GDAL/OGR" 292 | optional = true 293 | python-versions = ">=3.8" 294 | files = [ 295 | {file = "pyogrio-0.9.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:1a495ca4fb77c69595747dd688f8f17bb7d2ea9cd86603aa71c7fc98cc8b4174"}, 296 | {file = "pyogrio-0.9.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:6dc94a67163218581c7df275223488ac9b31dc582ccd756da607c3338908566c"}, 297 | {file = "pyogrio-0.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e38c3c6d37cf2cc969407e4d051dcb507cfd948eb26c7b0840c4f7d7d4a71bd4"}, 298 | {file = "pyogrio-0.9.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:f47c9b6818cc0f420015b672d5dcc488530a5ee63e5ba35a184957b21ea3922a"}, 299 | {file = "pyogrio-0.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb04bd80964428491951766452f0071b0bc37c7d38c45ef02502dbd83e5d74a0"}, 300 | {file = "pyogrio-0.9.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:f5d80eb846be4fc4e642cbedc1ed0c143e8d241653382ecc76a7620bbd2a5c3a"}, 301 | {file = "pyogrio-0.9.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:2f2ec57ab74785db9c2bf47c0a6731e5175595a13f8253f06fa84136adb310a9"}, 302 | {file = "pyogrio-0.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a289584da6df7ca318947301fe0ba9177e7f863f63110e087c80ac5f3658de8"}, 303 | {file = "pyogrio-0.9.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:13642608a1cd67797ae8b5d792b0518d8ef3eb76506c8232ab5eaa1ea1159dff"}, 304 | {file = "pyogrio-0.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:9440466c0211ac81f3417f274da5903f15546b486f76b2f290e74a56aaf0e737"}, 305 | {file = "pyogrio-0.9.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:2e98913fa183f7597c609e774820a149e9329fd2a0f8d33978252fbd00ae87e6"}, 306 | {file = "pyogrio-0.9.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:f8bf193269ea9d347ac3ddada960a59f1ab2e4a5c009be95dc70e6505346b2fc"}, 307 | {file = "pyogrio-0.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f964002d445521ad5b8e732a6b5ef0e2d2be7fe566768e5075c1d71398da64a"}, 308 | {file = "pyogrio-0.9.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:083351b258b3e08b6c6085dac560bd321b68de5cb4a66229095da68d5f3d696b"}, 309 | {file = "pyogrio-0.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:796e4f6a4e769b2eb6fea9a10546ea4bdee16182d1e29802b4d6349363c3c1d7"}, 310 | {file = "pyogrio-0.9.0-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:7fcafed24371fe6e23bcf5abebbb29269f8d79915f1dd818ac85453657ea714a"}, 311 | {file = "pyogrio-0.9.0-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:30cbeeaedb9bced7012487e7438919aa0c7dfba18ac3d4315182b46eb3139b9d"}, 312 | {file = "pyogrio-0.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4da0b9deb380bd9a200fee13182c4f95b02b4c554c923e2e0032f32aaf1439ed"}, 313 | {file = "pyogrio-0.9.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:4e0f90a6c3771ee1f1fea857778b4b6a1b64000d851b819f435f9091b3c38c60"}, 314 | {file = "pyogrio-0.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:959022f3ad04053f8072dc9a2ad110c46edd9e4f92352061ba835fc91df3ca96"}, 315 | {file = "pyogrio-0.9.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:2829615cf58b1b24a9f96fea42abedaa1a800dd351c67374cc2f6341138608f3"}, 316 | {file = "pyogrio-0.9.0-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:17420febc17651876d5140b54b24749aa751d482b5f9ef6267b8053e6e962876"}, 317 | {file = "pyogrio-0.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a2fcaa269031dbbc8ebd91243c6452c5d267d6df939c008ab7533413c9cf92d"}, 318 | {file = "pyogrio-0.9.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:019731a856a9abfe909e86f50eb13f8362f6742337caf757c54b7c8acfe75b89"}, 319 | {file = "pyogrio-0.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:d668cb10f2bf6ccd7c402f91e8b06290722dd09dbe265ae95b2c13db29ebeba0"}, 320 | {file = "pyogrio-0.9.0.tar.gz", hash = "sha256:6a6fa2e8cf95b3d4a7c0fac48bce6e5037579e28d3eb33b53349d6e11f15e5a8"}, 321 | ] 322 | 323 | [package.dependencies] 324 | certifi = "*" 325 | numpy = "*" 326 | packaging = "*" 327 | 328 | [package.extras] 329 | benchmark = ["pytest-benchmark"] 330 | dev = ["Cython"] 331 | geopandas = ["geopandas"] 332 | test = ["pytest", "pytest-cov"] 333 | 334 | [[package]] 335 | name = "pyproj" 336 | version = "3.6.1" 337 | description = "Python interface to PROJ (cartographic projections and coordinate transformations library)" 338 | optional = true 339 | python-versions = ">=3.9" 340 | files = [ 341 | {file = "pyproj-3.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ab7aa4d9ff3c3acf60d4b285ccec134167a948df02347585fdd934ebad8811b4"}, 342 | {file = "pyproj-3.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4bc0472302919e59114aa140fd7213c2370d848a7249d09704f10f5b062031fe"}, 343 | {file = "pyproj-3.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5279586013b8d6582e22b6f9e30c49796966770389a9d5b85e25a4223286cd3f"}, 344 | {file = "pyproj-3.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80fafd1f3eb421694857f254a9bdbacd1eb22fc6c24ca74b136679f376f97d35"}, 345 | {file = "pyproj-3.6.1-cp310-cp310-win32.whl", hash = "sha256:c41e80ddee130450dcb8829af7118f1ab69eaf8169c4bf0ee8d52b72f098dc2f"}, 346 | {file = "pyproj-3.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:db3aedd458e7f7f21d8176f0a1d924f1ae06d725228302b872885a1c34f3119e"}, 347 | {file = "pyproj-3.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ebfbdbd0936e178091309f6cd4fcb4decd9eab12aa513cdd9add89efa3ec2882"}, 348 | {file = "pyproj-3.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:447db19c7efad70ff161e5e46a54ab9cc2399acebb656b6ccf63e4bc4a04b97a"}, 349 | {file = "pyproj-3.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7e13c40183884ec7f94eb8e0f622f08f1d5716150b8d7a134de48c6110fee85"}, 350 | {file = "pyproj-3.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65ad699e0c830e2b8565afe42bd58cc972b47d829b2e0e48ad9638386d994915"}, 351 | {file = "pyproj-3.6.1-cp311-cp311-win32.whl", hash = "sha256:8b8acc31fb8702c54625f4d5a2a6543557bec3c28a0ef638778b7ab1d1772132"}, 352 | {file = "pyproj-3.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:38a3361941eb72b82bd9a18f60c78b0df8408416f9340521df442cebfc4306e2"}, 353 | {file = "pyproj-3.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1e9fbaf920f0f9b4ee62aab832be3ae3968f33f24e2e3f7fbb8c6728ef1d9746"}, 354 | {file = "pyproj-3.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6d227a865356f225591b6732430b1d1781e946893789a609bb34f59d09b8b0f8"}, 355 | {file = "pyproj-3.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83039e5ae04e5afc974f7d25ee0870a80a6bd6b7957c3aca5613ccbe0d3e72bf"}, 356 | {file = "pyproj-3.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb059ba3bced6f6725961ba758649261d85ed6ce670d3e3b0a26e81cf1aa8d"}, 357 | {file = "pyproj-3.6.1-cp312-cp312-win32.whl", hash = "sha256:2d6ff73cc6dbbce3766b6c0bce70ce070193105d8de17aa2470009463682a8eb"}, 358 | {file = "pyproj-3.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:7a27151ddad8e1439ba70c9b4b2b617b290c39395fa9ddb7411ebb0eb86d6fb0"}, 359 | {file = "pyproj-3.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4ba1f9b03d04d8cab24d6375609070580a26ce76eaed54631f03bab00a9c737b"}, 360 | {file = "pyproj-3.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:18faa54a3ca475bfe6255156f2f2874e9a1c8917b0004eee9f664b86ccc513d3"}, 361 | {file = "pyproj-3.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd43bd9a9b9239805f406fd82ba6b106bf4838d9ef37c167d3ed70383943ade1"}, 362 | {file = "pyproj-3.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50100b2726a3ca946906cbaa789dd0749f213abf0cbb877e6de72ca7aa50e1ae"}, 363 | {file = "pyproj-3.6.1-cp39-cp39-win32.whl", hash = "sha256:9274880263256f6292ff644ca92c46d96aa7e57a75c6df3f11d636ce845a1877"}, 364 | {file = "pyproj-3.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:36b64c2cb6ea1cc091f329c5bd34f9c01bb5da8c8e4492c709bda6a09f96808f"}, 365 | {file = "pyproj-3.6.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:fd93c1a0c6c4aedc77c0fe275a9f2aba4d59b8acf88cebfc19fe3c430cfabf4f"}, 366 | {file = "pyproj-3.6.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6420ea8e7d2a88cb148b124429fba8cd2e0fae700a2d96eab7083c0928a85110"}, 367 | {file = "pyproj-3.6.1.tar.gz", hash = "sha256:44aa7c704c2b7d8fb3d483bbf75af6cb2350d30a63b144279a09b75fead501bf"}, 368 | ] 369 | 370 | [package.dependencies] 371 | certifi = "*" 372 | 373 | [[package]] 374 | name = "python-dateutil" 375 | version = "2.9.0.post0" 376 | description = "Extensions to the standard Python datetime module" 377 | optional = true 378 | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" 379 | files = [ 380 | {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, 381 | {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, 382 | ] 383 | 384 | [package.dependencies] 385 | six = ">=1.5" 386 | 387 | [[package]] 388 | name = "pytz" 389 | version = "2024.1" 390 | description = "World timezone definitions, modern and historical" 391 | optional = true 392 | python-versions = "*" 393 | files = [ 394 | {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, 395 | {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, 396 | ] 397 | 398 | [[package]] 399 | name = "shapely" 400 | version = "2.0.5" 401 | description = "Manipulation and analysis of geometric objects" 402 | optional = false 403 | python-versions = ">=3.7" 404 | files = [ 405 | {file = "shapely-2.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:89d34787c44f77a7d37d55ae821f3a784fa33592b9d217a45053a93ade899375"}, 406 | {file = "shapely-2.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:798090b426142df2c5258779c1d8d5734ec6942f778dab6c6c30cfe7f3bf64ff"}, 407 | {file = "shapely-2.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45211276900c4790d6bfc6105cbf1030742da67594ea4161a9ce6812a6721e68"}, 408 | {file = "shapely-2.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e119444bc27ca33e786772b81760f2028d930ac55dafe9bc50ef538b794a8e1"}, 409 | {file = "shapely-2.0.5-cp310-cp310-win32.whl", hash = "sha256:9a4492a2b2ccbeaebf181e7310d2dfff4fdd505aef59d6cb0f217607cb042fb3"}, 410 | {file = "shapely-2.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:1e5cb5ee72f1bc7ace737c9ecd30dc174a5295fae412972d3879bac2e82c8fae"}, 411 | {file = "shapely-2.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5bbfb048a74cf273db9091ff3155d373020852805a37dfc846ab71dde4be93ec"}, 412 | {file = "shapely-2.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93be600cbe2fbaa86c8eb70656369f2f7104cd231f0d6585c7d0aa555d6878b8"}, 413 | {file = "shapely-2.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f8e71bb9a46814019f6644c4e2560a09d44b80100e46e371578f35eaaa9da1c"}, 414 | {file = "shapely-2.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5251c28a29012e92de01d2e84f11637eb1d48184ee8f22e2df6c8c578d26760"}, 415 | {file = "shapely-2.0.5-cp311-cp311-win32.whl", hash = "sha256:35110e80070d664781ec7955c7de557456b25727a0257b354830abb759bf8311"}, 416 | {file = "shapely-2.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:6c6b78c0007a34ce7144f98b7418800e0a6a5d9a762f2244b00ea560525290c9"}, 417 | {file = "shapely-2.0.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:03bd7b5fa5deb44795cc0a503999d10ae9d8a22df54ae8d4a4cd2e8a93466195"}, 418 | {file = "shapely-2.0.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2ff9521991ed9e201c2e923da014e766c1aa04771bc93e6fe97c27dcf0d40ace"}, 419 | {file = "shapely-2.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b65365cfbf657604e50d15161ffcc68de5cdb22a601bbf7823540ab4918a98d"}, 420 | {file = "shapely-2.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21f64e647a025b61b19585d2247137b3a38a35314ea68c66aaf507a1c03ef6fe"}, 421 | {file = "shapely-2.0.5-cp312-cp312-win32.whl", hash = "sha256:3ac7dc1350700c139c956b03d9c3df49a5b34aaf91d024d1510a09717ea39199"}, 422 | {file = "shapely-2.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:30e8737983c9d954cd17feb49eb169f02f1da49e24e5171122cf2c2b62d65c95"}, 423 | {file = "shapely-2.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ff7731fea5face9ec08a861ed351734a79475631b7540ceb0b66fb9732a5f529"}, 424 | {file = "shapely-2.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff9e520af0c5a578e174bca3c18713cd47a6c6a15b6cf1f50ac17dc8bb8db6a2"}, 425 | {file = "shapely-2.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49b299b91557b04acb75e9732645428470825061f871a2edc36b9417d66c1fc5"}, 426 | {file = "shapely-2.0.5-cp37-cp37m-win32.whl", hash = "sha256:b5870633f8e684bf6d1ae4df527ddcb6f3895f7b12bced5c13266ac04f47d231"}, 427 | {file = "shapely-2.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:401cb794c5067598f50518e5a997e270cd7642c4992645479b915c503866abed"}, 428 | {file = "shapely-2.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e91ee179af539100eb520281ba5394919067c6b51824e6ab132ad4b3b3e76dd0"}, 429 | {file = "shapely-2.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8af6f7260f809c0862741ad08b1b89cb60c130ae30efab62320bbf4ee9cc71fa"}, 430 | {file = "shapely-2.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f5456dd522800306ba3faef77c5ba847ec30a0bd73ab087a25e0acdd4db2514f"}, 431 | {file = "shapely-2.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b714a840402cde66fd7b663bb08cacb7211fa4412ea2a209688f671e0d0631fd"}, 432 | {file = "shapely-2.0.5-cp38-cp38-win32.whl", hash = "sha256:7e8cf5c252fac1ea51b3162be2ec3faddedc82c256a1160fc0e8ddbec81b06d2"}, 433 | {file = "shapely-2.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:4461509afdb15051e73ab178fae79974387f39c47ab635a7330d7fee02c68a3f"}, 434 | {file = "shapely-2.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7545a39c55cad1562be302d74c74586f79e07b592df8ada56b79a209731c0219"}, 435 | {file = "shapely-2.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4c83a36f12ec8dee2066946d98d4d841ab6512a6ed7eb742e026a64854019b5f"}, 436 | {file = "shapely-2.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89e640c2cd37378480caf2eeda9a51be64201f01f786d127e78eaeff091ec897"}, 437 | {file = "shapely-2.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06efe39beafde3a18a21dde169d32f315c57da962826a6d7d22630025200c5e6"}, 438 | {file = "shapely-2.0.5-cp39-cp39-win32.whl", hash = "sha256:8203a8b2d44dcb366becbc8c3d553670320e4acf0616c39e218c9561dd738d92"}, 439 | {file = "shapely-2.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:7fed9dbfbcfec2682d9a047b9699db8dcc890dfca857ecba872c42185fc9e64e"}, 440 | {file = "shapely-2.0.5.tar.gz", hash = "sha256:bff2366bc786bfa6cb353d6b47d0443c570c32776612e527ee47b6df63fcfe32"}, 441 | ] 442 | 443 | [package.dependencies] 444 | numpy = ">=1.14,<3" 445 | 446 | [package.extras] 447 | docs = ["matplotlib", "numpydoc (==1.1.*)", "sphinx", "sphinx-book-theme", "sphinx-remove-toctrees"] 448 | test = ["pytest", "pytest-cov"] 449 | 450 | [[package]] 451 | name = "six" 452 | version = "1.16.0" 453 | description = "Python 2 and 3 compatibility utilities" 454 | optional = true 455 | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" 456 | files = [ 457 | {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, 458 | {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, 459 | ] 460 | 461 | [[package]] 462 | name = "tzdata" 463 | version = "2024.1" 464 | description = "Provider of IANA time zone data" 465 | optional = true 466 | python-versions = ">=2" 467 | files = [ 468 | {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"}, 469 | {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, 470 | ] 471 | 472 | [extras] 473 | geopandas = ["geopandas"] 474 | 475 | [metadata] 476 | lock-version = "2.0" 477 | python-versions = "^3.8" 478 | content-hash = "7eab200a1fb7d7b7a9fa85622ea88a6cae4138ac392a654f3d1fcf46e2b83738" 479 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "overturemaps" 3 | version = "0.14.0" 4 | description = "Python tools for interacting with Overture Maps (overturemaps.org) data." 5 | authors = ["Jacob Wasserman "] 6 | license = "MIT" 7 | readme = "README.md" 8 | 9 | [tool.poetry.dependencies] 10 | python = "^3.8" 11 | click = ">=8.1.7" 12 | pyarrow = ">=15.0.2" 13 | shapely = ">=2.0.3" 14 | # shapely has numpy as a dependency and only specific versions are compatible via poetry install 15 | numpy = [ 16 | {version = "1.24.4", python = "<3.9"}, 17 | {version = ">=1.26.4", python = ">=3.9"} 18 | ] 19 | geopandas = { version = ">=1.0", optional = true, python = ">=3.9" } 20 | 21 | [tool.poetry.extras] 22 | geopandas = ["geopandas"] 23 | 24 | [tool.poetry.scripts] 25 | overturemaps = 'overturemaps.cli:cli' 26 | 27 | 28 | [build-system] 29 | requires = ["poetry-core"] 30 | build-backend = "poetry.core.masonry.api" 31 | --------------------------------------------------------------------------------