Skip to content

Instantly share code, notes, and snippets.

@junkor-1011
Last active April 24, 2023 14:41
Show Gist options
  • Save junkor-1011/5a369c706005f2f78e164ac9c72738ef to your computer and use it in GitHub Desktop.
Save junkor-1011/5a369c706005f2f78e164ac9c72738ef to your computer and use it in GitHub Desktop.
geopandas intro
testdata
tmp
temp
.tmp
.temp
# Created by https://www.toptal.com/developers/gitignore/api/jupyternotebooks,visualstudiocode,python,pycharm+all
# Edit at https://www.toptal.com/developers/gitignore?templates=jupyternotebooks,visualstudiocode,python,pycharm+all
### JupyterNotebooks ###
# gitignore template for Jupyter Notebooks
# website: http://jupyter.org/
.ipynb_checkpoints
*/.ipynb_checkpoints/*
# IPython
profile_default/
ipython_config.py
# Remove previous ipynb_checkpoints
# git rm -r .ipynb_checkpoints/
### PyCharm+all ###
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# AWS User-specific
.idea/**/aws.xml
# Generated files
.idea/**/contentModel.xml
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
cmake-build-*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml
# File-based project format
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# SonarLint plugin
.idea/sonarlint/
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser
### PyCharm+all Patch ###
# Ignore everything but code style settings and run configurations
# that are supposed to be shared within teams.
.idea/*
!.idea/codeStyles
!.idea/runConfigurations
### Python ###
# 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/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# 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/
cover/
# 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
.pybuilder/
target/
# Jupyter Notebook
# IPython
# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .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
# poetry
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
#poetry.lock
# pdm
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
#pdm.lock
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
# in version control.
# https://pdm.fming.dev/#use-with-ide
.pdm.toml
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__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
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
### Python Patch ###
# Poetry local configuration file - https://python-poetry.org/docs/configuration/#local-configuration
poetry.toml
# ruff
.ruff_cache/
# LSP config files
pyrightconfig.json
### VisualStudioCode ###
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
!.vscode/*.code-snippets
# Local History for Visual Studio Code
.history/
# Built Visual Studio Code Extensions
*.vsix
### VisualStudioCode Patch ###
# Ignore all local history of files
.history
.ionide
# End of https://www.toptal.com/developers/gitignore/api/jupyternotebooks,visualstudiocode,python,pycharm+all
name: geopandas-intro
channels:
- conda-forge
dependencies:
- python>=3.11
- geopandas>=0.11.2
- pandas>=2.0
- pyarrow
- numpy
- cartopy
- shapely>=2.0.1
- libpysal # to get example
- rasterio # to read tif
- contextily # use geo tiles
- geoplot # (notice: maitainance mode)
- osmnx
- folium
- matplotlib
- jupyterlab
name: geopandas-intro
channels:
- conda-forge
dependencies:
- _libgcc_mutex=0.1=conda_forge
- _openmp_mutex=4.5=2_gnu
- affine=2.4.0=pyhd8ed1ab_0
- aiofiles=22.1.0=pyhd8ed1ab_0
- aiosqlite=0.18.0=pyhd8ed1ab_0
- alsa-lib=1.2.8=h166bdaf_0
- anyio=3.6.2=pyhd8ed1ab_0
- argon2-cffi=21.3.0=pyhd8ed1ab_0
- argon2-cffi-bindings=21.2.0=py311hd4cff14_3
- arrow-cpp=11.0.0=ha770c72_14_cpu
- asttokens=2.2.1=pyhd8ed1ab_0
- attr=2.5.1=h166bdaf_1
- attrs=22.2.0=pyh71513ae_0
- aws-c-auth=0.6.26=hf365957_1
- aws-c-cal=0.5.21=h48707d8_2
- aws-c-common=0.8.14=h0b41bf4_0
- aws-c-compression=0.2.16=h03acc5a_5
- aws-c-event-stream=0.2.20=h00877a2_4
- aws-c-http=0.7.6=hf342b9f_0
- aws-c-io=0.13.19=h5b20300_3
- aws-c-mqtt=0.8.6=hc4349f7_12
- aws-c-s3=0.2.7=h909e904_1
- aws-c-sdkutils=0.1.8=h03acc5a_0
- aws-checksums=0.1.14=h03acc5a_5
- aws-crt-cpp=0.19.8=hf7fbfca_12
- aws-sdk-cpp=1.10.57=h17c43bd_8
- babel=2.12.1=pyhd8ed1ab_1
- backcall=0.2.0=pyh9f0ad1d_0
- backports=1.0=pyhd8ed1ab_3
- backports.functools_lru_cache=1.6.4=pyhd8ed1ab_0
- beautifulsoup4=4.12.2=pyha770c72_0
- bleach=6.0.0=pyhd8ed1ab_0
- blosc=1.21.3=hafa529b_0
- boost-cpp=1.78.0=h5adbc97_2
- branca=0.6.0=pyhd8ed1ab_0
- brotli=1.0.9=h166bdaf_8
- brotli-bin=1.0.9=h166bdaf_8
- brotlipy=0.7.0=py311hd4cff14_1005
- bzip2=1.0.8=h7f98852_4
- c-ares=1.18.1=h7f98852_0
- ca-certificates=2022.12.7=ha878542_0
- cairo=1.16.0=ha61ee94_1014
- cartopy=0.21.1=py311hd88b842_1
- certifi=2022.12.7=pyhd8ed1ab_0
- cffi=1.15.1=py311h409f033_3
- cfitsio=4.2.0=hd9d235c_0
- charset-normalizer=3.1.0=pyhd8ed1ab_0
- click=8.1.3=unix_pyhd8ed1ab_2
- click-plugins=1.1.1=py_0
- cligj=0.7.2=pyhd8ed1ab_1
- comm=0.1.3=pyhd8ed1ab_0
- contextily=1.3.0=pyhd8ed1ab_0
- contourpy=1.0.7=py311ha3edf6b_0
- cryptography=40.0.2=py311h9b4c7bb_0
- curl=8.0.1=h588be90_0
- cycler=0.11.0=pyhd8ed1ab_0
- dbus=1.13.6=h5008d03_3
- debugpy=1.6.7=py311hcafe171_0
- decorator=5.1.1=pyhd8ed1ab_0
- defusedxml=0.7.1=pyhd8ed1ab_0
- entrypoints=0.4=pyhd8ed1ab_0
- executing=1.2.0=pyhd8ed1ab_0
- expat=2.5.0=hcb278e6_1
- fftw=3.3.10=nompi_hc118613_107
- fiona=1.9.3=py311h3f14cef_0
- flit-core=3.8.0=pyhd8ed1ab_0
- folium=0.14.0=pyhd8ed1ab_0
- font-ttf-dejavu-sans-mono=2.37=hab24e00_0
- font-ttf-inconsolata=3.000=h77eed37_0
- font-ttf-source-code-pro=2.038=h77eed37_0
- font-ttf-ubuntu=0.83=hab24e00_0
- fontconfig=2.14.2=h14ed4e7_0
- fonts-conda-ecosystem=1=0
- fonts-conda-forge=1=0
- fonttools=4.39.3=py311h2582759_0
- freetype=2.12.1=hca18f0e_1
- freexl=1.0.6=h166bdaf_1
- gdal=3.6.3=py311hadb6153_1
- geographiclib=1.52=pyhd8ed1ab_0
- geopandas=0.12.2=pyhd8ed1ab_0
- geopandas-base=0.12.2=pyha770c72_0
- geoplot=0.5.1=pyhd8ed1ab_0
- geopy=2.3.0=pyhd8ed1ab_0
- geos=3.11.2=hcb278e6_0
- geotiff=1.7.1=hb963b44_7
- gettext=0.21.1=h27087fc_0
- gflags=2.2.2=he1b5a44_1004
- giflib=5.2.1=h0b41bf4_3
- glib=2.76.2=hfc55251_0
- glib-tools=2.76.2=hfc55251_0
- glog=0.6.0=h6f12383_0
- graphite2=1.3.13=h58526e2_1001
- gst-plugins-base=1.22.0=h4243ec0_2
- gstreamer=1.22.0=h25f0c4b_2
- gstreamer-orc=0.4.33=h166bdaf_0
- harfbuzz=6.0.0=h8e241bc_0
- hdf4=4.2.15=h501b40f_6
- hdf5=1.12.2=nompi_h4df4325_101
- icu=70.1=h27087fc_0
- idna=3.4=pyhd8ed1ab_0
- importlib-metadata=6.6.0=pyha770c72_0
- importlib_metadata=6.6.0=hd8ed1ab_0
- importlib_resources=5.12.0=pyhd8ed1ab_0
- ipykernel=6.22.0=pyh210e3f2_0
- ipython=8.12.0=pyh41d4057_0
- ipython_genutils=0.2.0=py_1
- jack=1.9.22=h11f4161_0
- jedi=0.18.2=pyhd8ed1ab_0
- jinja2=3.1.2=pyhd8ed1ab_1
- joblib=1.2.0=pyhd8ed1ab_0
- json-c=0.16=hc379101_0
- json5=0.9.5=pyh9f0ad1d_0
- jsonschema=4.17.3=pyhd8ed1ab_0
- jupyter_client=8.2.0=pyhd8ed1ab_0
- jupyter_core=5.3.0=py311h38be061_0
- jupyter_events=0.6.3=pyhd8ed1ab_0
- jupyter_server=2.5.0=pyhd8ed1ab_0
- jupyter_server_fileid=0.9.0=pyhd8ed1ab_0
- jupyter_server_terminals=0.4.4=pyhd8ed1ab_1
- jupyter_server_ydoc=0.8.0=pyhd8ed1ab_0
- jupyter_ydoc=0.2.3=pyhd8ed1ab_0
- jupyterlab=3.6.3=pyhd8ed1ab_0
- jupyterlab_pygments=0.2.2=pyhd8ed1ab_0
- jupyterlab_server=2.22.1=pyhd8ed1ab_0
- kealib=1.5.0=ha7026e8_0
- keyutils=1.6.1=h166bdaf_0
- kiwisolver=1.4.4=py311h4dd048b_1
- krb5=1.20.1=h81ceb04_0
- lame=3.100=h166bdaf_1003
- lcms2=2.15=haa2dc70_1
- ld_impl_linux-64=2.40=h41732ed_0
- lerc=4.0.0=h27087fc_0
- libabseil=20230125.0=cxx17_hcb278e6_1
- libaec=1.0.6=hcb278e6_1
- libarrow=11.0.0=h93537a5_14_cpu
- libblas=3.9.0=16_linux64_openblas
- libbrotlicommon=1.0.9=h166bdaf_8
- libbrotlidec=1.0.9=h166bdaf_8
- libbrotlienc=1.0.9=h166bdaf_8
- libcap=2.67=he9d0100_0
- libcblas=3.9.0=16_linux64_openblas
- libclang=15.0.7=default_had23c3d_1
- libclang13=15.0.7=default_h3e3d535_1
- libcrc32c=1.1.2=h9c3ff4c_0
- libcups=2.3.3=h36d4200_3
- libcurl=8.0.1=h588be90_0
- libdb=6.2.32=h9c3ff4c_0
- libdeflate=1.17=h0b41bf4_0
- libedit=3.1.20191231=he28a2e2_2
- libev=4.33=h516909a_1
- libevent=2.1.10=h28343ad_4
- libexpat=2.5.0=hcb278e6_1
- libffi=3.4.2=h7f98852_5
- libflac=1.4.2=h27087fc_0
- libgcc-ng=12.2.0=h65d4601_19
- libgcrypt=1.10.1=h166bdaf_0
- libgdal=3.6.3=h93ed92d_1
- libgfortran-ng=12.2.0=h69a702a_19
- libgfortran5=12.2.0=h337968e_19
- libglib=2.76.2=hebfc3b9_0
- libgomp=12.2.0=h65d4601_19
- libgoogle-cloud=2.8.0=h0bc5f78_1
- libgpg-error=1.46=h620e276_0
- libgrpc=1.52.1=hcf146ea_1
- libiconv=1.17=h166bdaf_0
- libjpeg-turbo=2.1.5.1=h0b41bf4_0
- libkml=1.3.0=h37653c0_1015
- liblapack=3.9.0=16_linux64_openblas
- libllvm15=15.0.7=hadd5161_1
- libnetcdf=4.9.1=nompi_hd2e9713_102
- libnghttp2=1.52.0=h61bc06f_0
- libnsl=2.0.0=h7f98852_0
- libnuma=2.0.16=h0b41bf4_1
- libogg=1.3.4=h7f98852_1
- libopenblas=0.3.21=pthreads_h78a6416_3
- libopus=1.3.1=h7f98852_1
- libpng=1.6.39=h753d276_0
- libpq=15.2=hb675445_0
- libprotobuf=3.21.12=h3eb15da_0
- libpysal=4.7.0=pyhd8ed1ab_0
- librttopo=1.1.0=h0d5128d_13
- libsndfile=1.2.0=hb75c966_0
- libsodium=1.0.18=h36c2ea0_1
- libspatialindex=1.9.3=h9c3ff4c_4
- libspatialite=5.0.1=h2d2bb50_24
- libsqlite=3.40.0=h753d276_1
- libssh2=1.10.0=hf14f497_3
- libstdcxx-ng=12.2.0=h46fd767_19
- libsystemd0=253=h8c4010b_1
- libthrift=0.18.1=h5e4af38_0
- libtiff=4.5.0=hddfeb54_5
- libtool=2.4.7=h27087fc_0
- libudev1=253=h0b41bf4_1
- libutf8proc=2.8.0=h166bdaf_0
- libuuid=2.38.1=h0b41bf4_0
- libvorbis=1.3.7=h9c3ff4c_0
- libwebp-base=1.3.0=h0b41bf4_0
- libxcb=1.13=h7f98852_1004
- libxkbcommon=1.5.0=h79f4944_1
- libxml2=2.10.3=hca2bb57_4
- libzip=1.9.2=hc929e4a_1
- libzlib=1.2.13=h166bdaf_4
- lz4-c=1.9.4=hcb278e6_0
- mapclassify=2.5.0=pyhd8ed1ab_1
- markupsafe=2.1.2=py311h2582759_0
- matplotlib=3.7.1=py311h38be061_0
- matplotlib-base=3.7.1=py311h8597a09_0
- matplotlib-inline=0.1.6=pyhd8ed1ab_0
- mercantile=1.2.1=pyhd8ed1ab_0
- mistune=2.0.5=pyhd8ed1ab_0
- mpg123=1.31.3=hcb278e6_0
- munch=2.5.0=py_0
- munkres=1.1.4=pyh9f0ad1d_0
- mysql-common=8.0.32=ha901b37_1
- mysql-libs=8.0.32=hd7da12d_1
- nbclassic=0.5.5=pyhb4ecaf3_1
- nbclient=0.7.3=pyhd8ed1ab_0
- nbconvert=7.3.1=pyhd8ed1ab_0
- nbconvert-core=7.3.1=pyhd8ed1ab_0
- nbconvert-pandoc=7.3.1=pyhd8ed1ab_0
- nbformat=5.8.0=pyhd8ed1ab_0
- ncurses=6.3=h27087fc_1
- nest-asyncio=1.5.6=pyhd8ed1ab_0
- networkx=3.1=pyhd8ed1ab_0
- notebook=6.5.4=pyha770c72_0
- notebook-shim=0.2.2=pyhd8ed1ab_0
- nspr=4.35=h27087fc_0
- nss=3.89=he45b914_0
- numpy=1.24.3=py311h64a7726_0
- openjpeg=2.5.0=hfec8fc6_2
- openssl=3.1.0=hd590300_1
- orc=1.8.3=hfdbbad2_0
- osmnx=1.3.0=pyhd8ed1ab_0
- packaging=23.1=pyhd8ed1ab_0
- pandas=2.0.1=py311h320fe9a_0
- pandoc=2.19.2=h32600fe_2
- pandocfilters=1.5.0=pyhd8ed1ab_0
- parquet-cpp=1.5.1=2
- parso=0.8.3=pyhd8ed1ab_0
- pcre2=10.40=hc3806b6_0
- pexpect=4.8.0=pyh1a96a4e_2
- pickleshare=0.7.5=py_1003
- pillow=9.5.0=py311h573f0d3_0
- pip=23.1.1=pyhd8ed1ab_0
- pixman=0.40.0=h36c2ea0_0
- pkgutil-resolve-name=1.3.10=pyhd8ed1ab_0
- platformdirs=3.2.0=pyhd8ed1ab_0
- ply=3.11=py_1
- pooch=1.7.0=pyha770c72_3
- poppler=23.03.0=hf052cbe_1
- poppler-data=0.4.12=hd8ed1ab_0
- postgresql=15.2=h3248436_0
- proj=9.1.1=h8ffa02c_2
- prometheus_client=0.16.0=pyhd8ed1ab_0
- prompt-toolkit=3.0.38=pyha770c72_0
- prompt_toolkit=3.0.38=hd8ed1ab_0
- psutil=5.9.5=py311h2582759_0
- pthread-stubs=0.4=h36c2ea0_1001
- ptyprocess=0.7.0=pyhd3deb0d_0
- pulseaudio=16.1=hcb278e6_3
- pulseaudio-client=16.1=h5195f5e_3
- pulseaudio-daemon=16.1=ha8d29e2_3
- pure_eval=0.2.2=pyhd8ed1ab_0
- pyarrow=11.0.0=py311hbdf6286_14_cpu
- pycparser=2.21=pyhd8ed1ab_0
- pygments=2.15.1=pyhd8ed1ab_0
- pyopenssl=23.1.1=pyhd8ed1ab_0
- pyparsing=3.0.9=pyhd8ed1ab_0
- pyproj=3.5.0=py311h945b3ca_0
- pyqt=5.15.7=py311ha74522f_3
- pyqt5-sip=12.11.0=py311hcafe171_3
- pyrsistent=0.19.3=py311h2582759_0
- pyshp=2.3.1=pyhd8ed1ab_0
- pysocks=1.7.1=pyha2e5f31_6
- python=3.11.3=h2755cc3_0_cpython
- python-dateutil=2.8.2=pyhd8ed1ab_0
- python-fastjsonschema=2.16.3=pyhd8ed1ab_0
- python-json-logger=2.0.7=pyhd8ed1ab_0
- python-tzdata=2023.3=pyhd8ed1ab_0
- python_abi=3.11=3_cp311
- pytz=2023.3=pyhd8ed1ab_0
- pyyaml=6.0=py311hd4cff14_5
- pyzmq=25.0.2=py311hd6ccaeb_0
- qt-main=5.15.8=h67dfc38_7
- rasterio=1.3.6=py311h567e639_0
- re2=2023.02.02=hcb278e6_0
- readline=8.2=h8228510_1
- requests=2.28.2=pyhd8ed1ab_1
- rfc3339-validator=0.1.4=pyhd8ed1ab_0
- rfc3986-validator=0.1.1=pyh9f0ad1d_0
- rtree=1.0.1=py311h3bb2b0f_1
- s2n=1.3.41=h3358134_0
- scikit-learn=1.2.2=py311h103fc68_1
- scipy=1.10.1=py311h8e6699e_0
- seaborn-base=0.12.2=pyhd8ed1ab_0
- send2trash=1.8.0=pyhd8ed1ab_0
- setuptools=67.7.1=pyhd8ed1ab_0
- shapely=2.0.1=py311h54d622a_1
- sip=6.7.9=py311hb755f60_0
- six=1.16.0=pyh6c4a22f_0
- snappy=1.1.10=h9fff704_0
- sniffio=1.3.0=pyhd8ed1ab_0
- snuggs=1.4.7=py_0
- soupsieve=2.3.2.post1=pyhd8ed1ab_0
- sqlite=3.40.0=h4ff8645_1
- stack_data=0.6.2=pyhd8ed1ab_0
- terminado=0.17.1=pyh41d4057_0
- threadpoolctl=3.1.0=pyh8a188c0_0
- tiledb=2.13.2=hd532e3d_0
- tinycss2=1.2.1=pyhd8ed1ab_0
- tk=8.6.12=h27826a3_0
- toml=0.10.2=pyhd8ed1ab_0
- tomli=2.0.1=pyhd8ed1ab_0
- tornado=6.3=py311h2582759_0
- traitlets=5.9.0=pyhd8ed1ab_0
- typing-extensions=4.5.0=hd8ed1ab_0
- typing_extensions=4.5.0=pyha770c72_0
- tzcode=2023c=h0b41bf4_0
- tzdata=2023c=h71feb2d_0
- ucx=1.14.0=h8c404fb_1
- urllib3=1.26.15=pyhd8ed1ab_0
- wcwidth=0.2.6=pyhd8ed1ab_0
- webencodings=0.5.1=py_1
- websocket-client=1.5.1=pyhd8ed1ab_0
- wheel=0.40.0=pyhd8ed1ab_0
- xcb-util=0.4.0=h516909a_0
- xcb-util-image=0.4.0=h166bdaf_0
- xcb-util-keysyms=0.4.0=h516909a_0
- xcb-util-renderutil=0.3.9=h166bdaf_0
- xcb-util-wm=0.4.1=h516909a_0
- xerces-c=3.2.4=h55805fa_1
- xkeyboard-config=2.38=h0b41bf4_0
- xorg-kbproto=1.0.7=h7f98852_1002
- xorg-libice=1.0.10=h7f98852_0
- xorg-libsm=1.2.3=hd9c2040_1000
- xorg-libx11=1.8.4=h0b41bf4_0
- xorg-libxau=1.0.9=h7f98852_0
- xorg-libxdmcp=1.1.3=h7f98852_0
- xorg-libxext=1.3.4=h0b41bf4_2
- xorg-libxrender=0.9.10=h7f98852_1003
- xorg-renderproto=0.11.1=h7f98852_1002
- xorg-xextproto=7.3.0=h0b41bf4_1003
- xorg-xf86vidmodeproto=2.3.1=h7f98852_1002
- xorg-xproto=7.0.31=h7f98852_1007
- xyzservices=2023.2.0=pyhd8ed1ab_0
- xz=5.2.6=h166bdaf_0
- y-py=0.5.9=py311hfe55011_0
- yaml=0.2.5=h7f98852_2
- ypy-websocket=0.8.2=pyhd8ed1ab_0
- zeromq=4.3.4=h9c3ff4c_1
- zipp=3.15.0=pyhd8ed1ab_0
- zlib=1.2.13=h166bdaf_4
- zstd=1.5.2=h3eb15da_6
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"# GeoPandas handson\n",
"\n",
"## 0. 概要\n",
"\n",
"[GeoPandas](https://geopandas.org/en/stable/): ざっくり言うと、Pandasを拡張して地理データを扱えるようにしたライブラリ。\n",
"\n",
"ここで、地理データはおおよそ[GeoJSON](https://ja.wikipedia.org/wiki/GeoJSON)や[シェープファイル](https://ja.wikipedia.org/wiki/%E3%82%B7%E3%82%A7%E3%83%BC%E3%83%97%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB)、[PostGIS](https://postgis.net/)などで扱えるようなものを指す。\n",
"\n",
"GeoPandasにおいて地理データは[shapely](https://shapely.readthedocs.io/en/stable/manual.html)を用いて表現されており、したがってshapelyとpandasのノウハウを使うことによって小規模~中規模の地理データを柔軟にハンドリングすることが可能。\n",
"\n",
"(参考1)公式ドキュメント\n",
"\n",
"- [Introduction to GeoPandas](https://geopandas.org/en/stable/getting_started/introduction.html)\n",
"- [Example Gallery](https://geopandas.org/en/stable/gallery/index.html)\n",
"- [Documentation](https://geopandas.org/en/stable/docs.html)\n",
"\n",
"(参考2)GeoPandasの入門系の記事\n",
"\n",
"- [Qiita - 【PythonでGIS】GeoPandasまとめ](https://qiita.com/c60evaporator/items/ac6a6d66a20520f129e6)\n",
"- [地理空間情報を扱うなら知っておきたいPythonライブラリ、GeoPandas入門~基礎編~](https://sorabatake.jp/20510/)\n",
"- [geopandasの使い方をマスターしよう ~Shapeファイルの読込・作成、GeoDataFrameの扱い方まで~](https://www.gis-py.com/entry/geopandas-master)"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1. 環境構築\n",
"\n",
"検証環境:\n",
"\n",
"- Linux(WSL2)\n",
"- Mambaforge\n",
" - [email protected]\n",
" - [email protected]\n",
"\n",
"gdalなどもろもろの依存ライブラリの別途インストールする必要があり、pipベースでの環境構築はかなり大変。\n",
"\n",
"[公式ドキュメント](https://geopandas.org/en/stable/getting_started.html#easy-way)にも記載の通り、\n",
"手軽に環境構築を行うにはconda-forgeチャネルから`conda`などを使ってインストールするのが良い。\n",
"\n",
"今回は、`create-env.yaml`:\n",
"\n",
"```yaml:create-env.yaml\n",
"# create-env.yaml\n",
"name: geopandas-intro\n",
"channels:\n",
" - conda-forge\n",
"dependencies:\n",
" - python>=3.11\n",
" - geopandas>=0.11.2\n",
" - pandas>=2.0\n",
" - pyarrow\n",
" - numpy\n",
" - shapely>=2.0.1\n",
" - osmnx\n",
" - folium\n",
" - matplotlib\n",
" - jupyterlab\n",
"```\n",
"\n",
"を使って、\n",
"\n",
"```sh\n",
"# ↓condaは遅いのでmambaを使っている\n",
"mamba env create -f create-env.yaml\n",
"```\n",
"\n",
"とすることで、`geopandas-intro`という名前のconda仮想環境を作成できる。\n",
"\n",
"jupyterを入れているので、vscodeのjupyter拡張なりjupyter labなどでこのノートブックを実行することができる。"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2. 実行"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2-1. GeoPandas DataFrameの生成と基礎の確認"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"# 実行時に生成するファイル置き場の準備\n",
"!rm -rf testdata && mkdir testdata"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"\n",
"import geopandas as gpd\n",
"import pandas as pd\n",
"import numpy as np"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"まずは[ArcGIS Online - GeoJSON](https://doc.arcgis.com/ja/arcgis-online/reference/geojson.htm)に記載されているサンプルのGeoJSONから作成してみる(`sample1.geojson`)\n",
"\n",
"```json\n",
"{\n",
" \"type\": \"FeatureCollection\",\n",
" \"features\": [\n",
" {\n",
" \"type\": \"Feature\",\n",
" \"geometry\": {\n",
" \"type\": \"Point\",\n",
" \"coordinates\": [102, 0.5]\n",
" },\n",
" \"properties\": {\n",
" \"prop0\": \"value0\"\n",
" }\n",
" },\n",
" {\n",
" \"type\": \"Feature\",\n",
" \"geometry\": {\n",
" \"type\": \"LineString\",\n",
" \"coordinates\": [\n",
" [102, 0],\n",
" [103, 1],\n",
" [104, 0],\n",
" [105, 1]\n",
" ]\n",
" },\n",
" \"properties\": {\n",
" \"prop0\": \"value0\",\n",
" \"prop1\": 0\n",
" }\n",
" },\n",
" {\n",
" \"type\": \"Feature\",\n",
" \"geometry\": {\n",
" \"type\": \"Polygon\",\n",
" \"coordinates\": [\n",
" [\n",
" [100, 0],\n",
" [101, 0],\n",
" [101, 1],\n",
" [100, 1],\n",
" [100, 0]\n",
" ]\n",
" ]\n",
" },\n",
" \"properties\": {\n",
" \"prop0\": \"value0\",\n",
" \"prop1\": {\n",
" \"this\": \"that\"\n",
" }\n",
" }\n",
" }\n",
" ]\n",
"}\n",
"```\n",
"\n",
"\n",
"(参考)その他、mapboxが提供している[geojson.io](https://geojson.io)なども便利"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"geopandas.geodataframe.GeoDataFrame"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>prop0</th>\n",
" <th>prop1</th>\n",
" <th>geometry</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>value0</td>\n",
" <td>NaN</td>\n",
" <td>POINT (102.00000 0.50000)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>value0</td>\n",
" <td>0</td>\n",
" <td>LINESTRING (102.00000 0.00000, 103.00000 1.000...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>value0</td>\n",
" <td>{'this': 'that'}</td>\n",
" <td>POLYGON ((100.00000 0.00000, 101.00000 0.00000...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" prop0 prop1 geometry\n",
"0 value0 NaN POINT (102.00000 0.50000)\n",
"1 value0 0 LINESTRING (102.00000 0.00000, 103.00000 1.000...\n",
"2 value0 {'this': 'that'} POLYGON ((100.00000 0.00000, 101.00000 0.00000..."
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# GeoPandas DataFrameをGeoJSONから作成\n",
"\n",
"gdf1 = gpd.read_file(\"./sample1.geojson\")\n",
"\n",
"display(gdf1.__class__) # geopandas.geodataframe.GeoDataFrame\n",
"\n",
"# dataframeを表示\n",
"display(gdf1)"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"GeoPandasのDataFrameは`geometry`というカラムを持つ。\n",
"`geometry`カラムは`GeoSeries`というGeoPandas用に拡張されたSeriesになっており、各要素はshapelyによる図形オブジェクトとなっている。"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"geopandas.geoseries.GeoSeries"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"0 POINT (102.00000 0.50000)\n",
"1 LINESTRING (102.00000 0.00000, 103.00000 1.000...\n",
"2 POLYGON ((100.00000 0.00000, 101.00000 0.00000...\n",
"Name: geometry, dtype: geometry"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"shapely.geometry.point.Point"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"display(gdf1.geometry.__class__) # geopandas.geoseries.GeoSeries\n",
"\n",
"# GeoSeriesを表示\n",
"display(gdf1.geometry)\n",
"\n",
"# GeoSeriesの各要素はshapelyオブジェクト\n",
"display(gdf1.geometry[0].__class__) # shapely.geometry.point.Point"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"GeoSeriesの各要素はjupyter上で簡単に描画できる"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"100.0\" height=\"100.0\" viewBox=\"101.0 -0.5 2.0 2.0\" preserveAspectRatio=\"xMinYMin meet\"><g transform=\"matrix(1,0,0,-1,0,1.0)\"><circle cx=\"102.0\" cy=\"0.5\" r=\"0.06\" stroke=\"#555555\" stroke-width=\"0.02\" fill=\"#66cc99\" opacity=\"0.6\" /></g></svg>"
],
"text/plain": [
"<POINT (102 0.5)>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/svg+xml": [
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"100.0\" height=\"100.0\" viewBox=\"101.88 -0.12 3.240000000000009 1.2400000000000002\" preserveAspectRatio=\"xMinYMin meet\"><g transform=\"matrix(1,0,0,-1,0,1.0)\"><polyline fill=\"none\" stroke=\"#66cc99\" stroke-width=\"0.06480000000000018\" points=\"102.0,0.0 103.0,1.0 104.0,0.0 105.0,1.0\" opacity=\"0.8\" /></g></svg>"
],
"text/plain": [
"<LINESTRING (102 0, 103 1, 104 0, 105 1)>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/svg+xml": [
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"100.0\" height=\"100.0\" viewBox=\"99.96 -0.04 1.0800000000000125 1.08\" preserveAspectRatio=\"xMinYMin meet\"><g transform=\"matrix(1,0,0,-1,0,1.0)\"><path fill-rule=\"evenodd\" fill=\"#66cc99\" stroke=\"#555555\" stroke-width=\"0.02160000000000025\" opacity=\"0.6\" d=\"M 100.0,0.0 L 101.0,0.0 L 101.0,1.0 L 100.0,1.0 L 100.0,0.0 z\" /></g></svg>"
],
"text/plain": [
"<POLYGON ((100 0, 101 0, 101 1, 100 1, 100 0))>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 各geometryを描画\n",
"for _, row in gdf1.iterrows():\n",
" display(row.geometry)"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"GeoDataFrameの`plot`メソッドを呼び出すと、`geometry`カラムの内容を描画できる"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<Axes: >"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# matplotlibで描画\n",
"gdf1.plot()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 POINT (102.00000 0.50000)\n",
"1 LINESTRING (102.00000 0.00000, 103.00000 1.000...\n",
"2 POLYGON ((100.00000 0.00000, 101.00000 0.00000...\n",
"Name: geometry, dtype: geometry"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gdf1.geometry"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"測地系の確認"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<Geographic 2D CRS: EPSG:4326>\n",
"Name: WGS 84\n",
"Axis Info [ellipsoidal]:\n",
"- Lat[north]: Geodetic latitude (degree)\n",
"- Lon[east]: Geodetic longitude (degree)\n",
"Area of Use:\n",
"- name: World.\n",
"- bounds: (-180.0, -90.0, 180.0, 90.0)\n",
"Datum: World Geodetic System 1984 ensemble\n",
"- Ellipsoid: WGS 84\n",
"- Prime Meridian: Greenwich"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gdf1.crs"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"↑WGS84は[世界測地系](https://ja.m.wikipedia.org/wiki/%E6%B8%AC%E5%9C%B0%E7%B3%BB#WGS84)"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"次に、1からGeoSeries, GeoDataFrameを生成してみる"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>geometry</th>\n",
" <th>name</th>\n",
" <th>value</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>POINT (138.00000 35.00000)</td>\n",
" <td>a</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>POINT (138.50000 35.00000)</td>\n",
" <td>b</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>POINT (138.00000 35.50000)</td>\n",
" <td>c</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>POINT (138.50000 35.50000)</td>\n",
" <td>d</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>LINESTRING (135.50000 34.50000, 135.60000 34.6...</td>\n",
" <td>e</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>POLYGON ((137.50000 34.50000, 137.60000 34.600...</td>\n",
" <td>f</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>MULTIPOINT (133.50000 34.50000, 133.60000 34.6...</td>\n",
" <td>g</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>MULTIPOLYGON (((130.00000 32.00000, 130.00000 ...</td>\n",
" <td>h</td>\n",
" <td>8</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" geometry name value\n",
"0 POINT (138.00000 35.00000) a 1\n",
"1 POINT (138.50000 35.00000) b 2\n",
"2 POINT (138.00000 35.50000) c 3\n",
"3 POINT (138.50000 35.50000) d 4\n",
"4 LINESTRING (135.50000 34.50000, 135.60000 34.6... e 5\n",
"5 POLYGON ((137.50000 34.50000, 137.60000 34.600... f 6\n",
"6 MULTIPOINT (133.50000 34.50000, 133.60000 34.6... g 7\n",
"7 MULTIPOLYGON (((130.00000 32.00000, 130.00000 ... h 8"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from shapely import geometry\n",
"\n",
"# GeoSeries\n",
"_gs = gpd.GeoSeries([\n",
" geometry.Point([138.0, 35.0]),\n",
" geometry.Point([138.5, 35.0]),\n",
" geometry.Point([138.0, 35.5]),\n",
" geometry.Point([138.5, 35.5]),\n",
" geometry.LineString([[135.5, 34.5], [135.6, 34.6], [135.6, 34.8]]),\n",
" geometry.Polygon([[137.5, 34.5], [137.6, 34.6], [137.6, 34.8]]),\n",
" geometry.MultiPoint([[133.5, 34.5], [133.6, 34.6], [133.6, 34.8]]),\n",
" geometry.MultiPolygon([\n",
" (\n",
" ((130.0, 32.0), (130.0, 32.5), (131.0, 32.5), (131.0, 32.0)),\n",
" [((130.1,32.1), (130.1,32.2), (130.2,32.2), (130.2,32.1))]\n",
" ),\n",
" ]),\n",
"])\n",
"\n",
"# GeoDataFrame\n",
"gdf2 = gpd.GeoDataFrame(\n",
" data={\n",
" \"geometry\": _gs,\n",
" \"name\": [\n",
" \"a\",\n",
" \"b\",\n",
" \"c\",\n",
" \"d\",\n",
" \"e\",\n",
" \"f\",\n",
" \"g\",\n",
" \"h\",\n",
" ],\n",
" \"value\": np.arange(1, 9),\n",
" },\n",
" crs=\"WGS84\", # 指定しないとcrs=Noneになるので適切なものを入れておくと良い\n",
")\n",
"display(gdf2)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<Axes: >"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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uk97f787PIeloaFBbrdbdXV1cjqdkqTGxka5XC69+OKLGj16dLvKKS4uVlpamt+2WbNm6dChQx2tGgAACDG9Az2hvLxcTqdT9fX1ioqKUkFBgRwOhyRp7dq16t27t5599tl2l1dVVaXY2Fi/bbGxsaqqqmr1PJ/PJ5/P1/Td6/UG0AoAABBMAg4sI0eOVFlZmWpqarR161YtXLhQ+/bt09WrV5Wbm6ujR4/KYrEEVOatxxuG0WYZOTk5ys7ODrT6AAAgCAV8Syg8PFzJycmaNGmScnJyNG7cOOXm5urAgQOqrq7W4MGD1bt3b/Xu3VtffvmlfvnLX2ro0KEtlhcXF9dsNKW6urrZqMutli1bJo/H0/Q5c+ZMoE0BAABBIuARllsZhiGfzyeXy6UZM2b47Zs1a5ZcLpeeeOKJFs93Op3avXu3fvGLXzRt27Vrl1JTU1u9rtVqldVq7VzlAQBAUAgosCxfvlwZGRlKSkpSbW2t3G63ioqKVFhYqJiYGMXExPgd36dPH8XFxWnkyJFN2xYsWKBBgwYpJydHkvTcc89p2rRpWrt2rTIzM/X+++9rz549OnjwYBc0DwAAhIKAAsv58+flcrlUWVkpu92ulJQUFRYWaubMme0uo6KiQmFh392JSk1Nldvt1ooVK7Ry5UoNGzZMW7Zs0ZQpUwKpGgAACGGdXofFLFiHBQCA4HPH12EBAADoLgQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegQWAABgegEFlry8PKWkpMhms8lms8npdGrnzp1N+19++WWNGjVKkZGR6t+/v2bMmKGSkpJWy8zPz5fFYmn2qa+v71iLAABAyAkosCQmJmrNmjUqLS1VaWmppk+frszMTJ04cUKSNGLECG3YsEHl5eU6ePCghg4dqrS0NH399detlmuz2VRZWen3iYiI6HirAABASLEYhmF0poDo6GitW7dOixYtarbP6/XKbrdrz549euihh257fn5+vpYuXaqamprOVKPpWh6PRzabrVNlAQCA7tHe3+8Oz2FpaGiQ2+1WXV2dnE5ns/3Xrl3TG2+8IbvdrnHjxrVa1uXL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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"gdf2.plot()"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"GeoDataFrameはファイルなどにエクスポートして永続化したり、他の一般的なシステムやアプリケーションが使えるようにできる\n",
"(もちろん、DataFrameを構成するデータ型がエクスポートする形式にシリアライズ可能なものになっていること)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'{\"type\": \"FeatureCollection\", \"features\": [{\"id\": \"0\", \"type\": \"Feature\", \"properties\": {\"name\": \"a\", \"value\": 1}, \"geometry\": {\"type\": \"Point\", \"coordinates\": [138.0, 35.0]}}, {\"id\": \"1\", \"type\": \"Feature\", \"properties\": {\"name\": \"b\", \"value\": 2}, \"geometry\": {\"type\": \"Point\", \"coordinates\": [138.5, 35.0]}}, {\"id\": \"2\", \"type\": \"Feature\", \"properties\": {\"name\": \"c\", \"value\": 3}, \"geometry\": {\"type\": \"Point\", \"coordinates\": [138.0, 35.5]}}, {\"id\": \"3\", \"type\": \"Feature\", \"properties\": {\"name\": \"d\", \"value\": 4}, \"geometry\": {\"type\": \"Point\", \"coordinates\": [138.5, 35.5]}}, {\"id\": \"4\", \"type\": \"Feature\", \"properties\": {\"name\": \"e\", \"value\": 5}, \"geometry\": {\"type\": \"LineString\", \"coordinates\": [[135.5, 34.5], [135.6, 34.6], [135.6, 34.8]]}}, {\"id\": \"5\", \"type\": \"Feature\", \"properties\": {\"name\": \"f\", \"value\": 6}, \"geometry\": {\"type\": \"Polygon\", \"coordinates\": [[[137.5, 34.5], [137.6, 34.6], [137.6, 34.8], [137.5, 34.5]]]}}, {\"id\": \"6\", \"type\": \"Feature\", \"properties\": {\"name\": \"g\", \"value\": 7}, \"geometry\": {\"type\": \"MultiPoint\", \"coordinates\": [[133.5, 34.5], [133.6, 34.6], [133.6, 34.8]]}}, {\"id\": \"7\", \"type\": \"Feature\", \"properties\": {\"name\": \"h\", \"value\": 8}, \"geometry\": {\"type\": \"MultiPolygon\", \"coordinates\": [[[[130.0, 32.0], [130.0, 32.5], [131.0, 32.5], [131.0, 32.0], [130.0, 32.0]], [[130.1, 32.1], [130.1, 32.2], [130.2, 32.2], [130.2, 32.1], [130.1, 32.1]]]]}}]}'"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# GeoJSON文字列\n",
"gdf2.to_json()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"# GeoJSON(ファイル)\n",
"gdf2.to_file(\"testdata/export-test.geojson\", driver=\"GeoJSON\")\n",
"\n",
"# 読み込み\n",
"# gpd.read_file(\"testdata/export-test.geojson\")"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"# シェープファイル\n",
"gdf2[:4].to_file(\"testdata/export-test.shp\") # 異なるタイプのgeometryが混ざると?エラーになるので、Pointのみに絞っている\n",
"\n",
"# 読み込み\n",
"# gpd.read_file(\"testdata/export-test.shp\")"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"# GeoParquet\n",
"gdf2.to_parquet(\"testdata/export-test.snappy.parquet\")\n",
"\n",
"# 読み込み\n",
"# gpd.read_parquet(\"testdata/export-test.snappy.parquet\")"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"※詳細は[geopandas.GeoDataFrame.to_parquet](https://geopandas.org/en/stable/docs/reference/api/geopandas.GeoDataFrame.to_parquet.html)を参照のこと\n",
"\n",
"parquet形式での読み書きには[pyarrow](https://arrow.apache.org/docs/python/index.html)が必要\n",
"\n",
"[GeoParquet](https://github.com/opengeospatial/geoparquet)というparquetの拡張形式を利用している\n",
"\n",
"執筆時点(2023年4月)での最新版がv1.0.0-beta.1でstableな状態ではないようなのでその辺は注意が必要だが、\n",
"読み書きの高速化や圧縮率の向上につなげられそう([参考](https://qiita.com/nokonoko_1203/items/a01168096c2d4c2d6914))"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"なお、上記で紹介したもの以外のファイル形式や、PostgreSQL + PostGISへの読み書きもサポートされている\n",
"\n",
"参考: [Documentation - Input/Output](https://geopandas.org/en/stable/docs/reference/io.html)"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"### 地理データのハンドリング\n",
"\n",
"既存の地理データに操作を加えて新しい地理データを生成したり、\n",
"地理的な条件でクエリやフィルタリングを行ったり、\n",
"[PostGISの関数](https://postgis.net/docs/reference.html)のような?(※ちゃんとした対応関係がある訳では無い)地理演算を行うことができる"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 例: buffer\n",
"\n",
"既存のGeometry達から新しいGeometryを生成する例\n",
"\n",
"各Geometryについて、指定した距離だけ広げたGeometry(Polygon, MultiPolygon)を生成する\n",
"\n",
"参考: \n",
"\n",
"- [geopandas.GeoSeries.buffer](https://geopandas.org/en/stable/docs/reference/api/geopandas.GeoSeries.buffer.html)\n",
"- [PostGIS - ST_Buffer](https://postgis.net/docs/ST_Buffer.html)\n",
"\n",
"ユースケースとして、他の演算と組み合わせることで\n",
"\n",
"- 各地点の半径Xメートル以内の図形を抽出\n",
"- 各道路との距離がYメートル以内の図形を抽出\n",
"\n",
"といったことが可能"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Name</th>\n",
" <th>geometry</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Mt. Atago</td>\n",
" <td>POINT (139.67492 36.74167)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Mt. Bishamon</td>\n",
" <td>POINT (139.69027 36.75288)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Mt. Chausu</td>\n",
" <td>POINT (139.69391 36.74176)</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Name geometry\n",
"0 Mt. Atago POINT (139.67492 36.74167)\n",
"1 Mt. Bishamon POINT (139.69027 36.75288)\n",
"2 Mt. Chausu POINT (139.69391 36.74176)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe srcdoc=\"&lt;!DOCTYPE html&gt;\n",
"&lt;html&gt;\n",
"&lt;head&gt;\n",
" \n",
" &lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;\n",
" \n",
" &lt;script&gt;\n",
" L_NO_TOUCH = false;\n",
" L_DISABLE_3D = false;\n",
" &lt;/script&gt;\n",
" \n",
" &lt;style&gt;html, body {width: 100%;height: 100%;margin: 0;padding: 0;}&lt;/style&gt;\n",
" &lt;style&gt;#map {position:absolute;top:0;bottom:0;right:0;left:0;}&lt;/style&gt;\n",
" &lt;script src=&quot;https://cdn.jsdelivr.net/npm/[email protected]/dist/leaflet.js&quot;&gt;&lt;/script&gt;\n",
" &lt;script src=&quot;https://code.jquery.com/jquery-1.12.4.min.js&quot;&gt;&lt;/script&gt;\n",
" &lt;script src=&quot;https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js&quot;&gt;&lt;/script&gt;\n",
" &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js&quot;&gt;&lt;/script&gt;\n",
" &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/[email protected]/dist/leaflet.css&quot;/&gt;\n",
" &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css&quot;/&gt;\n",
" &lt;link rel=&quot;stylesheet&quot; href=&quot;https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css&quot;/&gt;\n",
" &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/@fortawesome/[email protected]/css/all.min.css&quot;/&gt;\n",
" &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css&quot;/&gt;\n",
" &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css&quot;/&gt;\n",
" \n",
" &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width,\n",
" initial-scale=1.0, maximum-scale=1.0, user-scalable=no&quot; /&gt;\n",
" &lt;style&gt;\n",
" #map_fa7b1d1eceebe00dd6710f6348b9d38d {\n",
" position: relative;\n",
" width: 100.0%;\n",
" height: 100.0%;\n",
" left: 0.0%;\n",
" top: 0.0%;\n",
" }\n",
" .leaflet-container { font-size: 1rem; }\n",
" &lt;/style&gt;\n",
" \n",
"&lt;/head&gt;\n",
"&lt;body&gt;\n",
" \n",
" \n",
" &lt;div class=&quot;folium-map&quot; id=&quot;map_fa7b1d1eceebe00dd6710f6348b9d38d&quot; &gt;&lt;/div&gt;\n",
" \n",
"&lt;/body&gt;\n",
"&lt;script&gt;\n",
" \n",
" \n",
" var map_fa7b1d1eceebe00dd6710f6348b9d38d = L.map(\n",
" &quot;map_fa7b1d1eceebe00dd6710f6348b9d38d&quot;,\n",
" {\n",
" center: [0, 0],\n",
" crs: L.CRS.EPSG3857,\n",
" zoom: 1,\n",
" zoomControl: true,\n",
" preferCanvas: false,\n",
" }\n",
" );\n",
" L.control.scale().addTo(map_fa7b1d1eceebe00dd6710f6348b9d38d);\n",
"\n",
" \n",
"\n",
" \n",
" \n",
" var tile_layer_e5ed151f6a3f75256eff477994910f51 = L.tileLayer(\n",
" &quot;https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png&quot;,\n",
" {&quot;attribution&quot;: &quot;Data by \\u0026copy; \\u003ca target=\\&quot;_blank\\&quot; href=\\&quot;http://openstreetmap.org\\&quot;\\u003eOpenStreetMap\\u003c/a\\u003e, under \\u003ca target=\\&quot;_blank\\&quot; href=\\&quot;http://www.openstreetmap.org/copyright\\&quot;\\u003eODbL\\u003c/a\\u003e.&quot;, &quot;detectRetina&quot;: false, &quot;maxNativeZoom&quot;: 18, &quot;maxZoom&quot;: 18, &quot;minZoom&quot;: 0, &quot;noWrap&quot;: false, &quot;opacity&quot;: 1, &quot;subdomains&quot;: &quot;abc&quot;, &quot;tms&quot;: false}\n",
" ).addTo(map_fa7b1d1eceebe00dd6710f6348b9d38d);\n",
" \n",
" \n",
" var lat_lng_popup_884d9a39c4a331acfef7f822ad0460c4 = L.popup();\n",
" function latLngPop(e) {\n",
" lat_lng_popup_884d9a39c4a331acfef7f822ad0460c4\n",
" .setLatLng(e.latlng)\n",
" .setContent(&quot;Latitude: &quot; + e.latlng.lat.toFixed(4) +\n",
" &quot;&lt;br&gt;Longitude: &quot; + e.latlng.lng.toFixed(4))\n",
" .openOn(map_fa7b1d1eceebe00dd6710f6348b9d38d);\n",
" }\n",
" map_fa7b1d1eceebe00dd6710f6348b9d38d.on(&#x27;click&#x27;, latLngPop);\n",
" \n",
" \n",
"\n",
" function geo_json_541e5e08bdb6164e2144079ceb43994d_onEachFeature(feature, layer) {\n",
" layer.on({\n",
" });\n",
" };\n",
" var geo_json_541e5e08bdb6164e2144079ceb43994d = L.geoJson(null, {\n",
" onEachFeature: geo_json_541e5e08bdb6164e2144079ceb43994d_onEachFeature,\n",
" \n",
" });\n",
"\n",
" function geo_json_541e5e08bdb6164e2144079ceb43994d_add (data) {\n",
" geo_json_541e5e08bdb6164e2144079ceb43994d\n",
" .addData(data)\n",
" .addTo(map_fa7b1d1eceebe00dd6710f6348b9d38d);\n",
" }\n",
" geo_json_541e5e08bdb6164e2144079ceb43994d_add({&quot;features&quot;: [{&quot;geometry&quot;: {&quot;coordinates&quot;: [139.6749174444999, 36.74166816183778], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;0&quot;, &quot;properties&quot;: {&quot;Name&quot;: &quot;Mt. Atago&quot;}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [139.69027168890756, 36.75287763844565], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;1&quot;, &quot;properties&quot;: {&quot;Name&quot;: &quot;Mt. Bishamon&quot;}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [139.69391121350912, 36.74175930239588], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;2&quot;, &quot;properties&quot;: {&quot;Name&quot;: &quot;Mt. Chausu&quot;}, &quot;type&quot;: &quot;Feature&quot;}], &quot;type&quot;: &quot;FeatureCollection&quot;});\n",
"\n",
" \n",
" \n",
" map_fa7b1d1eceebe00dd6710f6348b9d38d.fitBounds(\n",
" [[36.74166816183778, 139.6749174444999], [36.75287763844565, 139.69391121350912]],\n",
" {}\n",
" );\n",
" \n",
"&lt;/script&gt;\n",
"&lt;/html&gt;\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
],
"text/plain": [
"<folium.folium.Map at 0x7f3cdfe9f5d0>"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import folium\n",
"\n",
"# 点データのサンプルを読み込み\n",
"gdf_points = gpd.read_file(\"sample-points.geojson\")\n",
"display(gdf_points)\n",
"\n",
"# 地図上に可視化\n",
"_points = folium.GeoJson(gdf_points.to_json())\n",
"\n",
"m1 = folium.Map(\n",
" control_scale=True,\n",
")\n",
"m1.add_child(folium.LatLngPopup())\n",
"m1.add_child(_points)\n",
"m1.fit_bounds(_points.get_bounds())\n",
"m1"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"各Pointに対して、座標系の単位が緯度経度のままでbufferを取ると緯度に依存した楕円となり、\n",
"半径Xメートルの円、といったbufferを取ることができない。\n",
"\n",
"そこで、座標系の単位がメートルとなる直角平面座標系に変換してからbufferを取り、\n",
"その後で世界測地系(緯度経度)に変換し直す。\n",
"\n",
"↑で描画している領域は栃木県であり、[EPSGコード一覧表/日本でよく利用される空間座標系(座標参照系)](https://lemulus.me/column/epsg-list-gis#i)などによれば、日本測地系における平面直角座標系の9系(EPSG6677)に対応している。"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 POLYGON ((139.67604 36.74167, 139.67603 36.741...\n",
"1 POLYGON ((139.69139 36.75288, 139.69139 36.752...\n",
"2 POLYGON ((139.69503 36.74176, 139.69503 36.741...\n",
"dtype: geometry"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe srcdoc=\"&lt;!DOCTYPE html&gt;\n",
"&lt;html&gt;\n",
"&lt;head&gt;\n",
" \n",
" &lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;\n",
" \n",
" &lt;script&gt;\n",
" L_NO_TOUCH = false;\n",
" L_DISABLE_3D = false;\n",
" &lt;/script&gt;\n",
" \n",
" &lt;style&gt;html, body {width: 100%;height: 100%;margin: 0;padding: 0;}&lt;/style&gt;\n",
" &lt;style&gt;#map {position:absolute;top:0;bottom:0;right:0;left:0;}&lt;/style&gt;\n",
" &lt;script src=&quot;https://cdn.jsdelivr.net/npm/[email protected]/dist/leaflet.js&quot;&gt;&lt;/script&gt;\n",
" &lt;script src=&quot;https://code.jquery.com/jquery-1.12.4.min.js&quot;&gt;&lt;/script&gt;\n",
" &lt;script src=&quot;https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js&quot;&gt;&lt;/script&gt;\n",
" &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js&quot;&gt;&lt;/script&gt;\n",
" &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/[email protected]/dist/leaflet.css&quot;/&gt;\n",
" &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css&quot;/&gt;\n",
" &lt;link rel=&quot;stylesheet&quot; href=&quot;https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css&quot;/&gt;\n",
" &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/@fortawesome/[email protected]/css/all.min.css&quot;/&gt;\n",
" &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css&quot;/&gt;\n",
" &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css&quot;/&gt;\n",
" \n",
" &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width,\n",
" initial-scale=1.0, maximum-scale=1.0, user-scalable=no&quot; /&gt;\n",
" &lt;style&gt;\n",
" #map_fa7b1d1eceebe00dd6710f6348b9d38d {\n",
" position: relative;\n",
" width: 100.0%;\n",
" height: 100.0%;\n",
" left: 0.0%;\n",
" top: 0.0%;\n",
" }\n",
" .leaflet-container { font-size: 1rem; }\n",
" &lt;/style&gt;\n",
" \n",
"&lt;/head&gt;\n",
"&lt;body&gt;\n",
" \n",
" \n",
" &lt;div class=&quot;folium-map&quot; id=&quot;map_fa7b1d1eceebe00dd6710f6348b9d38d&quot; &gt;&lt;/div&gt;\n",
" \n",
"&lt;/body&gt;\n",
"&lt;script&gt;\n",
" \n",
" \n",
" var map_fa7b1d1eceebe00dd6710f6348b9d38d = L.map(\n",
" &quot;map_fa7b1d1eceebe00dd6710f6348b9d38d&quot;,\n",
" {\n",
" center: [0, 0],\n",
" crs: L.CRS.EPSG3857,\n",
" zoom: 1,\n",
" zoomControl: true,\n",
" preferCanvas: false,\n",
" }\n",
" );\n",
" L.control.scale().addTo(map_fa7b1d1eceebe00dd6710f6348b9d38d);\n",
"\n",
" \n",
"\n",
" \n",
" \n",
" var tile_layer_e5ed151f6a3f75256eff477994910f51 = L.tileLayer(\n",
" &quot;https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png&quot;,\n",
" {&quot;attribution&quot;: &quot;Data by \\u0026copy; \\u003ca target=\\&quot;_blank\\&quot; href=\\&quot;http://openstreetmap.org\\&quot;\\u003eOpenStreetMap\\u003c/a\\u003e, under \\u003ca target=\\&quot;_blank\\&quot; href=\\&quot;http://www.openstreetmap.org/copyright\\&quot;\\u003eODbL\\u003c/a\\u003e.&quot;, &quot;detectRetina&quot;: false, &quot;maxNativeZoom&quot;: 18, &quot;maxZoom&quot;: 18, &quot;minZoom&quot;: 0, &quot;noWrap&quot;: false, &quot;opacity&quot;: 1, &quot;subdomains&quot;: &quot;abc&quot;, &quot;tms&quot;: false}\n",
" ).addTo(map_fa7b1d1eceebe00dd6710f6348b9d38d);\n",
" \n",
" \n",
" var lat_lng_popup_884d9a39c4a331acfef7f822ad0460c4 = L.popup();\n",
" function latLngPop(e) {\n",
" lat_lng_popup_884d9a39c4a331acfef7f822ad0460c4\n",
" .setLatLng(e.latlng)\n",
" .setContent(&quot;Latitude: &quot; + e.latlng.lat.toFixed(4) +\n",
" &quot;&lt;br&gt;Longitude: &quot; + e.latlng.lng.toFixed(4))\n",
" .openOn(map_fa7b1d1eceebe00dd6710f6348b9d38d);\n",
" }\n",
" map_fa7b1d1eceebe00dd6710f6348b9d38d.on(&#x27;click&#x27;, latLngPop);\n",
" \n",
" \n",
"\n",
" function geo_json_541e5e08bdb6164e2144079ceb43994d_onEachFeature(feature, layer) {\n",
" layer.on({\n",
" });\n",
" };\n",
" var geo_json_541e5e08bdb6164e2144079ceb43994d = L.geoJson(null, {\n",
" onEachFeature: geo_json_541e5e08bdb6164e2144079ceb43994d_onEachFeature,\n",
" \n",
" });\n",
"\n",
" function geo_json_541e5e08bdb6164e2144079ceb43994d_add (data) {\n",
" geo_json_541e5e08bdb6164e2144079ceb43994d\n",
" .addData(data)\n",
" .addTo(map_fa7b1d1eceebe00dd6710f6348b9d38d);\n",
" }\n",
" geo_json_541e5e08bdb6164e2144079ceb43994d_add({&quot;features&quot;: [{&quot;geometry&quot;: {&quot;coordinates&quot;: [139.6749174444999, 36.74166816183778], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;0&quot;, &quot;properties&quot;: {&quot;Name&quot;: &quot;Mt. Atago&quot;}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [139.69027168890756, 36.75287763844565], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;1&quot;, &quot;properties&quot;: {&quot;Name&quot;: &quot;Mt. Bishamon&quot;}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [139.69391121350912, 36.74175930239588], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;2&quot;, &quot;properties&quot;: {&quot;Name&quot;: &quot;Mt. Chausu&quot;}, &quot;type&quot;: &quot;Feature&quot;}], &quot;type&quot;: &quot;FeatureCollection&quot;});\n",
"\n",
" \n",
" \n",
" map_fa7b1d1eceebe00dd6710f6348b9d38d.fitBounds(\n",
" [[36.74166816183778, 139.6749174444999], [36.75287763844565, 139.69391121350912]],\n",
" {}\n",
" );\n",
" \n",
" \n",
"\n",
" function geo_json_252e67f724e4fbc9b16672341d4533cb_onEachFeature(feature, layer) {\n",
" layer.on({\n",
" });\n",
" };\n",
" var geo_json_252e67f724e4fbc9b16672341d4533cb = L.geoJson(null, {\n",
" onEachFeature: geo_json_252e67f724e4fbc9b16672341d4533cb_onEachFeature,\n",
" \n",
" });\n",
"\n",
" function geo_json_252e67f724e4fbc9b16672341d4533cb_add (data) {\n",
" geo_json_252e67f724e4fbc9b16672341d4533cb\n",
" .addData(data)\n",
" .addTo(map_fa7b1d1eceebe00dd6710f6348b9d38d);\n",
" }\n",
" geo_json_252e67f724e4fbc9b16672341d4533cb_add({&quot;bbox&quot;: [139.6737976651463, 36.74076695344407, 139.6950309952316, 36.75377884563804], &quot;features&quot;: [{&quot;bbox&quot;: [139.6737976651463, 36.74076695344407, 139.67603722393582, 36.74256937009462], &quot;geometry&quot;: {&quot;coordinates&quot;: [[[139.67603722393582, 36.74166964714762], [139.67603201215067, 36.74158130615241], [139.6760160665054, 36.74149380167282], [139.67598954060068, 36.74140797642068], [139.67595268992824, 36.74132465693327], [139.6759058694088, 36.74124464561362], [139.67584952997328, 36.74116871300319], [139.6757842142188, 36.741097590361676], [139.67571055118276, 36.74103196262497], [139.67562925028435, 36.74097246180947], [139.67554109449222, 36.74091966092593], [139.67544693278433, 36.74087406846163], [139.67534767197222, 36.740836123483945], [139.67524426796848, 36.74080619141229], [139.67513771658182, 36.740784560499485], [139.67502904392782, 36.740771439055976], [139.67491929654824, 36.74076695344407], [139.6748095313336, 36.74077114686108], [139.67470080534616, 36.74078397892342], [139.67459416564117, 36.740805326055415], [139.67449063918454, 36.74083498267936], [139.67439122296395, 36.74087266319491], [139.67429687438838, 36.740918004729366], [139.6742085020685, 36.74097057063188], [139.6741269570671, 36.74102985467803], [139.67405302470334, 36.741095285944695], [139.67398741698963, 36.74116623430758], [139.67393076577466, 36.74124201650927], [139.67388361665775, 36.74132190273874], [139.67384642373398, 36.74140512365937], [139.67381954521994, 36.74149087781762], [139.6738032400029, 36.741578339361105], [139.6737976651463, 36.74166666599173], [139.67380287437584, 36.741755007077344], [139.67381881756057, 36.74184251184372], [139.67384534119432, 36.74192833756797], [139.6738821898727, 36.74201165769465], [139.67392900875154, 36.74209166979621], [139.67398534696304, 36.742167603301084], [139.6740506619571, 36.742238726915254], [139.67412432472548, 36.74230435566544], [139.67420562585943, 36.74236385749628], [139.6742937823811, 36.742416659358014], [139.6743879452845, 36.74246225272575], [139.67448720771227, 36.74250019849743], [139.6745906136896, 36.74253013122309], [139.67469716733203, 36.742551762624814], [139.67480584243725, 36.74256488437333], [139.67491559236927, 36.74256937009462], [139.67502536013947, 36.74256517658718], [139.67513408858753, 36.74255234423808], [139.67524073056347, 36.742530996633974], [139.6753442590142, 36.74250133937077], [139.67544367687535, 36.74246365807332], [139.67553802667496, 36.74241831564439], [139.6756263997553, 36.742365748769224], [139.67570794502424, 36.74230646370958], [139.67578187715256, 36.74224103142759], [139.6758474841367, 36.74217008208651], [139.67590413415616, 36.742094298981385], [139.6759512816574, 36.74201441195792], [139.67598847260757, 36.74193119038328], [139.67601534886586, 36.74184543573613], [139.67603165163172, 36.741757973887644], [139.67603722393582, 36.74166964714762]]], &quot;type&quot;: &quot;Polygon&quot;}, &quot;id&quot;: &quot;0&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;bbox&quot;: [139.6891517458754, 36.75197643111639, 139.6913916320141, 36.75377884563804], &quot;geometry&quot;: {&quot;coordinates&quot;: [[[139.6913916320141, 36.75287897963162], [139.69138640191187, 36.75279063943522], [139.69137043654976, 36.75270313713473], [139.69134388971844, 36.75261731542099], [139.6913070171111, 36.75253400079721], [139.6912601738598, 36.75245399561954], [139.69120381111426, 36.75237807037029], [139.6911384716962, 36.75230695623825], [139.69106478487083, 36.75224133807735], [139.6909834602864, 36.75218184781176], [139.6908952811397, 36.75212905835062], [139.69080109663355, 36.752083478071235], [139.690701813799, 36.7520455459236], [139.69059838876078, 36.75201562720357], [139.69049181753, 36.7519940100354], [139.69038312641345, 36.7519809025972], [139.69027336213065, 36.75197643111639], [139.69016358173488, 36.75198063865418], [139.6900548424345, 36.75199348469104], [139.689948191413, 36.752014845516726], [139.68984465574536, 36.75204451542165], [139.6897452325079, 36.752082208677585], [139.68965087917712, 36.75212756228918], [139.68956250440957, 36.75218013948924], [139.68948095929164, 36.7522394339446], [139.68940702914355, 36.75230487463183], [139.6893414259565, 36.75237583133597], [139.6892847815355, 36.75245162071928], [139.68923764141456, 36.752531512901555], [139.68920045960215, 36.75261473848884], [139.68917359420783, 36.75270049598262], [139.6891573039926, 36.752787959498434], [139.6891517458754, 36.752876286719165], [139.68915697342075, 36.75296462700694], [139.68917293632134, 36.75305212959521], [139.68919948088117, 36.75313795178205], [139.68923635149432, 36.753221267046094], [139.68928319310535, 36.75330127300658], [139.68933955462754, 36.75337719915109], [139.68940489328622, 36.75344831425647], [139.6894785798454, 36.75351393343134], [139.68955990466705, 36.75357342471261], [139.68964808454518, 36.75362621515207], [139.68974227024896, 36.75367179633484], [139.68984155470122, 36.75370972927621], [139.68994498171517, 36.753739648649805], [139.69005155520367, 36.753761266306256], [139.69016024877322, 36.7537743740487], [139.69027001561008, 36.75377884563804], [139.69037979856273, 36.75377463800885], [139.6904885403246, 36.75376179168421], [139.69059519361755, 36.75374043038542], [139.6906987312794, 36.75371075984024], [139.69079815615714, 36.75367306580149], [139.69089251071125, 36.753627711294634], [139.69098088623815, 36.753575133121245], [139.69106243162227, 36.753515837651904], [139.69113636153318, 36.753450395949], [139.69120196398882, 36.75337943826652], [139.6912586072122, 36.753303647979834], [139.6913057457154, 36.753223755003845], [139.69134292555214, 36.753140528763], [139.6913697886887, 36.75305477078091], [139.69138607645093, 36.752967306960855], [139.6913916320141, 36.75287897963162]]], &quot;type&quot;: &quot;Polygon&quot;}, &quot;id&quot;: &quot;1&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;bbox&quot;: [139.6927914318591, 36.740858093237364, 139.6950309952316, 36.74266051141756], &quot;geometry&quot;: {&quot;coordinates&quot;: [[[139.6950309952316, 36.74176060899132], [139.6950257616702, 36.741672268782295], [139.6950097944365, 36.74158476680238], [139.69498324733908, 36.74149894573937], [139.69494637607372, 36.741415632090174], [139.69489953575956, 36.74133562820159], [139.69484317751804, 36.741259704543495], [139.69477784412737, 36.74118859228935], [139.6947041647948, 36.74112297627503], [139.6946228490964, 36.741063488404], [139.69453468014336, 36.7410107015624], [139.69444050704035, 36.74096512410227], [139.69434123670862, 36.74092719494648], [139.6942378251524, 36.74089727936207], [139.69413126825316, 36.74087566544313], [139.6940225921795, 36.740862561336435], [139.69391284350615, 36.740858093237364], [139.69380307913613, 36.740862304174556], [139.69369435612344, 36.740875153595724], [139.69358772149477, 36.74089651775805], [139.69348420216718, 36.740926190919815], [139.69338479505967, 36.74096388732142], [139.69329045749345, 36.74100924393722], [139.69320209797323, 36.74106182397107], [139.6931205674386, 36.74112112106254], [139.69304665106932, 36.74118656416278], [139.6929810607239, 36.7412575230336], [139.69292442808367, 36.74133331431638], [139.69287729856921, 36.741413208112604], [139.69284012608676, 36.74149643501279], [139.69281326865612, 36.74158219350577], [139.6927969849615, 36.74166965769743], [139.6927914318591, 36.74175798526416], [139.69279666286505, 36.741846325564744], [139.69281262763874, 36.741933827832526], [139.69283917246608, 36.74201964936865], [139.69287604173854, 36.742102963658], [139.69292288041362, 36.74218296832923], [139.6929792374328, 36.742258892882326], [139.69304457006487, 36.74233000610947], [139.69311824913174, 36.742395623137384], [139.6931995650676, 36.742455112023634], [139.69328773475203, 36.742507899843105], [139.69338190905233, 36.742553478206155], [139.69348118100118, 36.74259140815522], [139.69358459453224, 36.74262132439275], [139.69369115368818, 36.742642938799605], [139.6937998322136, 36.742656043210204], [139.6939095834396, 36.74266051141756], [139.6940193503651, 36.74265630038879], [139.6941280758378, 36.74264345067976], [139.69423471273657, 36.74262208604431], [139.69433823405703, 36.74259241224239], [139.69443764280365, 36.74255471505815], [139.69453198159218, 36.742509357547334], [139.69462034187097, 36.742456776540486], [139.6947018726713, 36.742397478435436], [139.69477578880316, 36.74233203431994], [139.6948413784172, 36.74226107447126], [139.69489800986014, 36.742185282285575], [139.69494513775746, 36.74210538769607], [139.69498230826505, 36.74202216014277], [139.695009163439, 36.74193640116188], [139.69502544468185, 36.741848936666294], [139.6950309952316, 36.74176060899132]]], &quot;type&quot;: &quot;Polygon&quot;}, &quot;id&quot;: &quot;2&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}], &quot;type&quot;: &quot;FeatureCollection&quot;});\n",
"\n",
" \n",
" \n",
" var layer_control_b62e1478b17da66dce144503736049df = {\n",
" base_layers : {\n",
" &quot;openstreetmap&quot; : tile_layer_e5ed151f6a3f75256eff477994910f51,\n",
" },\n",
" overlays : {\n",
" &quot;macro_element_541e5e08bdb6164e2144079ceb43994d&quot; : geo_json_541e5e08bdb6164e2144079ceb43994d,\n",
" &quot;macro_element_252e67f724e4fbc9b16672341d4533cb&quot; : geo_json_252e67f724e4fbc9b16672341d4533cb,\n",
" },\n",
" };\n",
" L.control.layers(\n",
" layer_control_b62e1478b17da66dce144503736049df.base_layers,\n",
" layer_control_b62e1478b17da66dce144503736049df.overlays,\n",
" {&quot;autoZIndex&quot;: true, &quot;collapsed&quot;: true, &quot;position&quot;: &quot;topright&quot;}\n",
" ).addTo(map_fa7b1d1eceebe00dd6710f6348b9d38d);\n",
" \n",
" \n",
" map_fa7b1d1eceebe00dd6710f6348b9d38d.fitBounds(\n",
" [[36.74076695344407, 139.6737976651463], [36.75377884563804, 139.6950309952316]],\n",
" {}\n",
" );\n",
" \n",
"&lt;/script&gt;\n",
"&lt;/html&gt;\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
],
"text/plain": [
"<folium.folium.Map at 0x7f3cdfe9f5d0>"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 各地点から半径100メートルの円のPolygonを生成する\n",
"gs_points_buffer = (\n",
" gdf_points\n",
" .to_crs(epsg=6677) # 世界測地系から栃木県が属する平面直角座標系: EPSG6677に変換\n",
" .buffer(100) # 座標の単位がメートルに変換されているので、bufferの引数を100にすると半径100の円になる\n",
" .to_crs(crs=\"WGS84\") # 世界測地系(緯度経度)に変換し直す\n",
")\n",
"display(gs_points_buffer) # bufferを取って生成したGeoSeries\n",
"\n",
"_points_buffer = folium.GeoJson(gs_points_buffer.to_json())\n",
"m1.add_child(_points_buffer)\n",
"folium.LayerControl().add_to(m1) # 元のPointとbufferで生成されたPolygonのLayerを区別して見れるように追加\n",
"m1.fit_bounds(_points_buffer.get_bounds())\n",
"m1"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"↑各地点から半径100mの円のPolygonが生成されていることが地図上で確認できている\n",
"\n",
"他のGeometory演算と組み合わせることで、例えば各地点の半径Xメートル以内に属する地点のみ抽出、といったことが可能になってくる"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<Axes: >"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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wsLCutSGhYWhtrZWqQkPD3eYHxQUBJ1Op9RcLy8vD2+88YYzXSYiIiIP5NQIzNatW7Fp0yZs3rwZpaWlKCgoQH5+PgoKChzqHnnkERw7dgwHDx5ESkoKpkyZgrq6ui7rs1gsSE1NRXx8PF577TWHeRqNpku9EMJhek9qrrVkyRLIsqy8qqqqetRvIiIi8ixOjcAsXLgQixcvRmZmJgBgxIgRqKioQF5eHqZNm6bUGQwGDBkyBEOGDEFiYiLuvfdebNy4EUuWLFFqmpqakJKSgn79+mH79u3w8fFR5kVERODixYtdtn/p0iVl1CUiIsLh7ibg6p1LNputy8hMJ71eD71e70yXiYiIyAM5NQLT0tICLy/HRbRarcNt1N0RQsBqtSp/WywWJCcnQ6fTYceOHfD19XWoT0pKgizLOHTokDKtpKQEsixj7NixSs3JkydRU1Oj1OzevRt6vR6jR492pltERESkMk6NwKSnpyM3NxfR0dFISEhAWVkZVq1ahRkzZgAAmpubkZubi4yMDERGRqK+vh7r1q3D+fPn8eyzzwK4OvKSnJyMlpYWbNq0yeFi2gEDBkCr1WLYsGFISUlBTk4ONmzYAODqbdRpaWmIjY0FACQnJyM+Ph4mkwkrV65EQ0MDFixYgJycHN5RRERE1NcJJ1gsFjF37lwRHR0tfH19RUxMjHjllVeE1WoVQghx5coV8eSTTwqj0Sh0Op2IjIwUGRkZ4tChQ8o6Dhw4IAB0+zp37pxSV19fL6ZOnSoCAgJEQECAmDp1qjCbzQ7tqaioEKmpqcLPz08EBweL2bNni9bW1h73R5ZlAUDIsuzM20BERES9wJnjslPPgelr+BwYIiIiz9Frz4EhIiIi8gQMMERERKQ6DDBERESkOgwwREREpDoMMERERKQ6DDBERESkOgwwREREpDoMMERERKQ6DDBERESkOgwwREREpDoMMERERKQ6DDBERESkOgwwREREpDoMMERERKQ6DDBERESkOgwwREREpDoMMERERKQ6DDBERESkOgwwREREpDoMMERERKQ6DDBERESkOgwwREREpDoMMERERKQ6DDBERESkOgwwREREpDoMMERERKQ6DDBERESkOgwwREREpDoMMERERKQ6DDBERESkOgwwREREpDoMMERERKQ6DDBERESkOgwwREREpDoMMERERKQ6DDBERESk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THv6eQLq3Ec73ayffW0f7VRUVIT/+Z//waxZs7qdr/Z9tFN3/exL++iPdUcFmBtd3HXt68iRIz1a15IlSzBs2DA899xzPar/4osv8MILL+CPf/wjEhISlOmxsbHIycnB/fffj6SkJKxbtw6pqanIz893WF6j0Tj8LYToMs2d/eyufddP/7E1N+on4Nq+dlq9ejVKS0vx8ccf45tvvsHLL7/cbd1HH32EpqYmPP/88w7TPf0z7Uk/Q0NDMX/+fDzwwAP4+c9/juXLl+PFF1/EW2+9dcs+XD/dk/t5LbXuoz3tZ1/aRwHg3//+N5544gm8+uqreOyxx7qtUfs+erN+umsf9STe7m7A7TR79mxkZmbetGbQoEE9Wtf+/ftx4sQJZciu80sRGhqKV155BW+88YZS+/e//x3p6elYtWpVlx2pO4mJiQ4pOiIioksarqur65KaO93uft6ofcAP/8q7UY23tzdCQkJuWnOjfgKu7WuniIgIREREIC4uDiEhIXjooYewbNkyREZGOtS9++67SEtLQ0RExC3X6Umf6bVt6Ek/r+3Dtf+q743P1F39VPM+em0bbtTPvraPnjp1Co8++ihycnKwdOnSG9apfR/taT873Y591JPcUQEmNDQUoaGhLlnXhx9+iCtXrih/Hz58GDNmzMCXX36Je+65R5n+xRdfIC0tDStWrMDMmTN7tO6ysjKH/7kmJSVhz549mD9/vjJt9+7dGDt2bLfL3+5+JiUl4T//8z/R1tYGnU6ntM9oNCo7bFJSEj755BOHde/evRs///nP4ePj86P66eq+dqczsFmtVofp586dw4EDB7Bjx44erceTPtPu3Kif1+quD67+TN3RT7Xvo925vp99aR/997//jUcffRTTpk1Dbm7uDevUvo/2tJ/Xuh37qEe5vdcMq0dFRYUoKysTb7zxhujXr58oKysTZWVloqmpqdv67q5qP3DggPD39xdLlixxuM2tvr5eqVm9erXYvn27KC8vFydPnhSLFy8WAMSHH36o1Pzzn/8UWq1W/P73vxenT58Wv//97112m5sr+tnY2CjCw8NFVlaWOHHihPjoo49EYGBgt7dozp8/X5w6dUps3Lixy+18vdnPnvT1008/Fe+99544ceKEOHfunPj0009FQkKCePDBB7usa+nSpcJoNDrcdtnJ0z/TnvTzz3/+s/jggw/EqVOnxJkzZ8TKlSuFj4+PWLVqlVLj7s/UFf3sC/toT/rZV/bRkydPigEDBoipU6c6fF51dXVd1qXmfbQn/VTDPtrbGGBuYNq0aQJAl9eBAwe6re/uwH6jdTz88MNKzYoVK8Q999wjfH19RVBQkBg3bpz49NNPu6z/b3/7m4iNjRU+Pj4iLi7OYUdzdz+FEOJf//qXeOihh4RerxcRERHi9ddfV27P7PTFF1+IUaNGCZ1OJwYNGiT++7//+7b1U4hb93X//v0iKSlJSJIkfH19xb333isWLVrUpa92u10MHDhQ/Od//me32/H0z7Qn/fzzn/8shg0bJvz9/UVAQIAYPXq0eP/997tsy52fqSv62Rf20Z5+b/vCPvraa691O//uu+92WI/a99Ge9FMN+2hv0whx3aMYiYiIiDzcHXUXEhEREfUNDDBERESkOgwwREREpDoMMERERKQ6DDBERESkOgwwREREpDoMMERERKQ6DDBERESkOgwwREREpDoMMERERKQ6DDBERESkOgwwREREpDr/D8sNM7ru8CBxAAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# matplotlib上でも確認\n",
"\n",
"ax = gs_points_buffer.to_crs(epsg=6677).plot(color=\"skyblue\")\n",
"gdf_points.to_crs(epsg=6677).plot(ax=ax, color=\"red\")"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"bufferはPointに限らず任意のGeometryに対して生成できるので、次はLineStringに対してやってみる。\n",
"\n",
"オプションを指定することで例えば線の端点だったり節の部分におけるbufferの取り方などを調整することができる"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>geometry</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>LINESTRING (139.67385 36.71941, 139.67885 36.7...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>LINESTRING (139.68843 36.73289, 139.69109 36.7...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>LINESTRING (139.65172 36.74542, 139.65619 36.7...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" geometry\n",
"0 LINESTRING (139.67385 36.71941, 139.67885 36.7...\n",
"1 LINESTRING (139.68843 36.73289, 139.69109 36.7...\n",
"2 LINESTRING (139.65172 36.74542, 139.65619 36.7..."
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe srcdoc=\"&lt;!DOCTYPE html&gt;\n",
"&lt;html&gt;\n",
"&lt;head&gt;\n",
" \n",
" &lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;\n",
" \n",
" &lt;script&gt;\n",
" L_NO_TOUCH = false;\n",
" L_DISABLE_3D = false;\n",
" &lt;/script&gt;\n",
" \n",
" &lt;style&gt;html, body {width: 100%;height: 100%;margin: 0;padding: 0;}&lt;/style&gt;\n",
" &lt;style&gt;#map {position:absolute;top:0;bottom:0;right:0;left:0;}&lt;/style&gt;\n",
" &lt;script src=&quot;https://cdn.jsdelivr.net/npm/[email protected]/dist/leaflet.js&quot;&gt;&lt;/script&gt;\n",
" &lt;script src=&quot;https://code.jquery.com/jquery-1.12.4.min.js&quot;&gt;&lt;/script&gt;\n",
" &lt;script src=&quot;https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js&quot;&gt;&lt;/script&gt;\n",
" &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js&quot;&gt;&lt;/script&gt;\n",
" &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/[email protected]/dist/leaflet.css&quot;/&gt;\n",
" &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css&quot;/&gt;\n",
" &lt;link rel=&quot;stylesheet&quot; href=&quot;https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css&quot;/&gt;\n",
" &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/@fortawesome/[email protected]/css/all.min.css&quot;/&gt;\n",
" &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css&quot;/&gt;\n",
" &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css&quot;/&gt;\n",
" \n",
" &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width,\n",
" initial-scale=1.0, maximum-scale=1.0, user-scalable=no&quot; /&gt;\n",
" &lt;style&gt;\n",
" #map_ba3c4030b18424c94629942b340d181d {\n",
" position: relative;\n",
" width: 100.0%;\n",
" height: 100.0%;\n",
" left: 0.0%;\n",
" top: 0.0%;\n",
" }\n",
" .leaflet-container { font-size: 1rem; }\n",
" &lt;/style&gt;\n",
" \n",
"&lt;/head&gt;\n",
"&lt;body&gt;\n",
" \n",
" \n",
" &lt;div class=&quot;folium-map&quot; id=&quot;map_ba3c4030b18424c94629942b340d181d&quot; &gt;&lt;/div&gt;\n",
" \n",
"&lt;/body&gt;\n",
"&lt;script&gt;\n",
" \n",
" \n",
" var map_ba3c4030b18424c94629942b340d181d = L.map(\n",
" &quot;map_ba3c4030b18424c94629942b340d181d&quot;,\n",
" {\n",
" center: [0, 0],\n",
" crs: L.CRS.EPSG3857,\n",
" zoom: 1,\n",
" zoomControl: true,\n",
" preferCanvas: false,\n",
" }\n",
" );\n",
" L.control.scale().addTo(map_ba3c4030b18424c94629942b340d181d);\n",
"\n",
" \n",
"\n",
" \n",
" \n",
" var tile_layer_51d8b6f9ae1c201b8f956900eb245b5f = L.tileLayer(\n",
" &quot;https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png&quot;,\n",
" {&quot;attribution&quot;: &quot;Data by \\u0026copy; \\u003ca target=\\&quot;_blank\\&quot; href=\\&quot;http://openstreetmap.org\\&quot;\\u003eOpenStreetMap\\u003c/a\\u003e, under \\u003ca target=\\&quot;_blank\\&quot; href=\\&quot;http://www.openstreetmap.org/copyright\\&quot;\\u003eODbL\\u003c/a\\u003e.&quot;, &quot;detectRetina&quot;: false, &quot;maxNativeZoom&quot;: 18, &quot;maxZoom&quot;: 18, &quot;minZoom&quot;: 0, &quot;noWrap&quot;: false, &quot;opacity&quot;: 1, &quot;subdomains&quot;: &quot;abc&quot;, &quot;tms&quot;: false}\n",
" ).addTo(map_ba3c4030b18424c94629942b340d181d);\n",
" \n",
" \n",
" var lat_lng_popup_051181da930ad1141b1156598e671cff = L.popup();\n",
" function latLngPop(e) {\n",
" lat_lng_popup_051181da930ad1141b1156598e671cff\n",
" .setLatLng(e.latlng)\n",
" .setContent(&quot;Latitude: &quot; + e.latlng.lat.toFixed(4) +\n",
" &quot;&lt;br&gt;Longitude: &quot; + e.latlng.lng.toFixed(4))\n",
" .openOn(map_ba3c4030b18424c94629942b340d181d);\n",
" }\n",
" map_ba3c4030b18424c94629942b340d181d.on(&#x27;click&#x27;, latLngPop);\n",
" \n",
" \n",
" function geo_json_eec7a4f561f9e89137a066270492fbfb_styler(feature) {\n",
" switch(feature.id) {\n",
" default:\n",
" return {&quot;color&quot;: &quot;red&quot;};\n",
" }\n",
" }\n",
"\n",
" function geo_json_eec7a4f561f9e89137a066270492fbfb_onEachFeature(feature, layer) {\n",
" layer.on({\n",
" });\n",
" };\n",
" var geo_json_eec7a4f561f9e89137a066270492fbfb = L.geoJson(null, {\n",
" onEachFeature: geo_json_eec7a4f561f9e89137a066270492fbfb_onEachFeature,\n",
" \n",
" style: geo_json_eec7a4f561f9e89137a066270492fbfb_styler,\n",
" });\n",
"\n",
" function geo_json_eec7a4f561f9e89137a066270492fbfb_add (data) {\n",
" geo_json_eec7a4f561f9e89137a066270492fbfb\n",
" .addData(data)\n",
" .addTo(map_ba3c4030b18424c94629942b340d181d);\n",
" }\n",
" geo_json_eec7a4f561f9e89137a066270492fbfb_add({&quot;features&quot;: [{&quot;geometry&quot;: {&quot;coordinates&quot;: [[139.67385130693424, 36.719412086556446], [139.67885234030842, 36.72180020751432], [139.6834277538199, 36.72342067587854], [139.68470461340598, 36.725296964954566]], &quot;type&quot;: &quot;LineString&quot;}, &quot;id&quot;: &quot;0&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [[139.68842866959358, 36.732886928883815], [139.69108879372789, 36.73203416019062], [139.69311048806924, 36.732886928883815], [139.69726028172, 36.73732117340276], [139.6993883810294, 36.738173883369626], [139.7037509846105, 36.74039088495353], [139.70545346405538, 36.74303414930604]], &quot;type&quot;: &quot;LineString&quot;}, &quot;id&quot;: &quot;1&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [[139.65171898217898, 36.745421535136884], [139.65618799072627, 36.747553067317455], [139.65863530493021, 36.75138967603789], [139.65959294961783, 36.75266850298031], [139.66055059430732, 36.75292426581123], [139.66299790851133, 36.753606295858006], [139.66395555319895, 36.75497033776111], [139.66278509858097, 36.75633435541168], [139.66129542906464, 36.75863608019927], [139.6617210489253, 36.759829539935], [139.66523241278497, 36.76119347118046], [139.66799894188546, 36.76051150858956], [139.6700206362268, 36.762045915891605], [139.6703398511233, 36.76281310803098], [139.6734255951203, 36.763409807722056], [139.67597931428855, 36.7650293977682]], &quot;type&quot;: &quot;LineString&quot;}, &quot;id&quot;: &quot;2&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}], &quot;type&quot;: &quot;FeatureCollection&quot;});\n",
"\n",
" \n",
" \n",
"\n",
" function geo_json_3fa6ecb0c0aee1e4e0faab61a45546e6_onEachFeature(feature, layer) {\n",
" layer.on({\n",
" });\n",
" };\n",
" var geo_json_3fa6ecb0c0aee1e4e0faab61a45546e6 = L.geoJson(null, {\n",
" onEachFeature: geo_json_3fa6ecb0c0aee1e4e0faab61a45546e6_onEachFeature,\n",
" \n",
" });\n",
"\n",
" function geo_json_3fa6ecb0c0aee1e4e0faab61a45546e6_add (data) {\n",
" geo_json_3fa6ecb0c0aee1e4e0faab61a45546e6\n",
" .addData(data)\n",
" .addTo(map_ba3c4030b18424c94629942b340d181d);\n",
" }\n",
" geo_json_3fa6ecb0c0aee1e4e0faab61a45546e6_add({&quot;bbox&quot;: [139.6514334935161, 36.71902453849599, 139.705950546619, 36.765383280758385], &quot;features&quot;: [{&quot;bbox&quot;: [139.67356573394702, 36.71902453849599, 139.685195543193, 36.72551345921575], &quot;geometry&quot;: {&quot;coordinates&quot;: [[[139.67859591362802, 36.72220167608295], [139.6830282231195, 36.723771468361505], [139.6842136808679, 36.72551345921575], [139.685195543193, 36.72508046865445], [139.68382728088548, 36.7230698820256], [139.67910876431418, 36.721398738359895], [139.67413687704757, 36.71902453849599], [139.67356573394702, 36.71979963389956], [139.67859591362802, 36.72220167608295]]], &quot;type&quot;: &quot;Polygon&quot;}, &quot;id&quot;: &quot;0&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;bbox&quot;: [139.6882215366666, 36.73153889334614, 139.705950546619, 36.74324152391831], &quot;geometry&quot;: {&quot;coordinates&quot;: [[[139.6910568682685, 36.73252942698437], [139.69273908519614, 36.73323900078762], [139.69689255014657, 36.73767718335348], [139.69911346051134, 36.738567084992866], [139.7033237523239, 36.740706691763265], [139.7049563788216, 36.74324152391831], [139.705950546619, 36.742826772605056], [139.7041782133973, 36.74007507658641], [139.69966329873878, 36.737780681079606], [139.69762800989562, 36.73696516228748], [139.69348188754924, 36.73253485579297], [139.69112071876663, 36.73153889334614], [139.6882215366666, 36.732468301142625], [139.68863580476318, 36.73330555623995], [139.6910568682685, 36.73252942698437]]], &quot;type&quot;: &quot;Polygon&quot;}, &quot;id&quot;: &quot;1&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;bbox&quot;: [139.6514334935161, 36.74503390294813, 139.67632601529277, 36.765383280758385], &quot;geometry&quot;: {&quot;coordinates&quot;: [[[139.65576359361, 36.74787445310481], [139.65814585108768, 36.75160910430642], [139.65922014186404, 36.75304370804671], [139.66037076040297, 36.7533510107071], [139.6626145248284, 36.7539763171656], [139.66329558288325, 36.754946407072886], [139.66230449713942, 36.75610138011056], [139.66069548381583, 36.758587476325395], [139.6612518747481, 36.760147654923244], [139.66518660147383, 36.7616760369935], [139.66785158222967, 36.761019113243506], [139.66953416163906, 36.76229614430377], [139.66990727683114, 36.76319288952485], [139.6731753266855, 36.76382484891348], [139.675632610096, 36.765383280758385], [139.67632601529277, 36.764675513739064], [139.67367586085152, 36.76299476596868], [139.67077242114854, 36.76243332492963], [139.67050710765827, 36.76179568547213], [139.6681462995869, 36.76000390370486], [139.6652782235103, 36.76071090530912], [139.66219021922961, 36.75951142306965], [139.6618953750825, 36.75868468104973], [139.66326570293413, 36.756567328770004], [139.66461552393903, 36.75499426478985], [139.66338128850984, 36.75323627328269], [139.66073042621127, 36.75249752060773], [139.6599657537382, 36.752293296712686], [139.65912475599083, 36.751170245740674], [139.6566123843036, 36.747231679989696], [139.65200446796484, 36.74503390294813], [139.6514334935161, 36.74580916660756], [139.65576359361, 36.74787445310481]]], &quot;type&quot;: &quot;Polygon&quot;}, &quot;id&quot;: &quot;2&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}], &quot;type&quot;: &quot;FeatureCollection&quot;});\n",
"\n",
" \n",
" \n",
" var layer_control_0f4b727d6c09419e05a24b8546fa08bf = {\n",
" base_layers : {\n",
" &quot;openstreetmap&quot; : tile_layer_51d8b6f9ae1c201b8f956900eb245b5f,\n",
" },\n",
" overlays : {\n",
" &quot;macro_element_eec7a4f561f9e89137a066270492fbfb&quot; : geo_json_eec7a4f561f9e89137a066270492fbfb,\n",
" &quot;macro_element_3fa6ecb0c0aee1e4e0faab61a45546e6&quot; : geo_json_3fa6ecb0c0aee1e4e0faab61a45546e6,\n",
" },\n",
" };\n",
" L.control.layers(\n",
" layer_control_0f4b727d6c09419e05a24b8546fa08bf.base_layers,\n",
" layer_control_0f4b727d6c09419e05a24b8546fa08bf.overlays,\n",
" {&quot;autoZIndex&quot;: true, &quot;collapsed&quot;: true, &quot;position&quot;: &quot;topright&quot;}\n",
" ).addTo(map_ba3c4030b18424c94629942b340d181d);\n",
" \n",
" \n",
" map_ba3c4030b18424c94629942b340d181d.fitBounds(\n",
" [[36.71902453849599, 139.6514334935161], [36.765383280758385, 139.705950546619]],\n",
" {}\n",
" );\n",
" \n",
"&lt;/script&gt;\n",
"&lt;/html&gt;\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
],
"text/plain": [
"<folium.folium.Map at 0x7f3cdfef8650>"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 線データの読み込みと表示\n",
"\n",
"gdf_lines = gpd.read_file(\"sample-linestrings.geojson\")\n",
"display(gdf_lines)\n",
"\n",
"# buffer50mのbufferを生成\n",
"gs_lines_buffer = (\n",
" gdf_lines\n",
" .to_crs(epsg=6677)\n",
" .buffer(50, join_style=2, cap_style=2) # オプションを指定\n",
" .to_crs(crs=\"WGS84\")\n",
")\n",
"\n",
"m2 = folium.Map(\n",
" control_scale=True,\n",
")\n",
"m2.add_child(folium.LatLngPopup())\n",
"\n",
"_lines = folium.GeoJson(\n",
" gdf_lines.to_json(),\n",
" style_function=lambda feature: {\n",
" \"color\": \"red\",\n",
" }\n",
")\n",
"m2.add_child(_lines)\n",
"_lines_buffer = folium.GeoJson(gs_lines_buffer.to_json())\n",
"m2.add_child(_lines_buffer)\n",
"\n",
"folium.LayerControl().add_to(m2)\n",
"m2.fit_bounds(_lines_buffer.get_bounds())\n",
"\n",
"m2"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"bufferのオプションを変えると、生成されるPolygonの形状が変わる\n",
"\n",
"平面直角座標系に変換してmatplotlibでも描画しておく\n",
"\n",
"(bufferはわかりやすいように200メートルにする)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<Axes: >"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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Lyp/+tOfFIvFcs4yL7zwgpKYmKi8++67yqFDh5Tdu3crn376qfd9q9WqxMXFKWPGjFF27dqlfPjhh0pYWJjy/PPPe8scOXJECQ4OVh588EFl7969ymuvvabo9Xrlgw8+8JbZsGGDotPplGeeeUbZt2+f8swzzyhBQUHKpk2bLkq7AeWtt95ScnNzvV+VlZVNtt21afMZN954o3L99dcrgFJcXNxk26woF253UVGR8sorryhbt25Vjh07pqxbt07p0qWLMnbs2Cbb7gu1+Y033lCmTJmifPvtt8rhw4eVpUuXKmazWVmwYEGTbXNt2q0oijJlyhRl4cKFSlpamtKrV6+z3ve3dksYNrK33nrrvB8UZrNZWbdu3XnrvvLKK4rFYlGqqqq8r82dO1dJTExUPB6PoiiK8vDDDytdu3atUW/SpEnKgAEDvP++4447lBEjRtQoM3z4cGXMmDF1aVKtnK/dilIdhh9//PF56zbVdv9WmxWlul1XXXWV8tVXX50Vhk21zYpy4Xb/0t///nelVatW3n831XarafPkyZOVq6++2vvvptpmRaldu5944olzhqG/tVtuk/qJtWvX4vF4OHnyJN26daNVq1bccccdZGVlects3LiRq666qsaE1eHDh5OTk8OxY8e8ZVJSUmoce/jw4Wzbtg2n0/mbZTZs2NBArbuwBx54gOjoaC677DIWLVqEx+Pxvtcc2713716efvpp3nnnnXMuUtwc2/xrOTk5fPTRR1x11VXe1wKh3VarlcjISO+/A6HN5+Jv7ZYw9BNHjhzB4/HwzDPP8PLLL/PBBx9QVFTEddddh8PhACAvL4+4uLga9c78Oy8v7zfLuFwuTp069Ztlzhyjsf31r3/lP//5D+vWrWPMmDFMnz6dZ555xvt+c2u33W5n7NixzJ8/n9atW5+zTHNr8y+NHTuW4OBgWrZsSXh4OK+//rr3vebcbqj+4P73v//NpEmTvK819zafj7+1W8KwHp588slzDv745de2bdtqdSyPx4PT6eQf//gHw4cPZ8CAAbz33nscPHiQb775xlvu11tNKf972PzL1+taprbbWPmy3QCPPvooAwcOpHfv3kyfPp2nn36a+fPn1yhzsdvtyzbPnj2bbt268bvf/e43y13sNoPvv9cAL730Etu3b+eTTz7h8OHD/OlPf6rx/sVud0O0GWDPnj3ceOONPP7441x33XU13rvYbYaGa/dv8Yd2nxHQWzjV1wMPPMCYMWN+s0zbtm1rdayEhAQAunfv7n0tJiaG6OhoTpw4AUB8fPxZf+0UFBQAP/9Fdb4yQUFBREVF/WaZX/91dT6+bPe5DBgwgNLSUvLz84mLi/OLdvuyzV9//TW7du3igw8+AH7+5Y6OjuYvf/kLTz31lF+0GRrmex0fH098fDxdu3YlKiqKK664gscee4yEhAS/aHdDtHnv3r1cc801TJw4kUcffbTGe/7QZmj43+tf85d2nyFhWA/R0dFER0f75FiDBw8G4KeffvLusVhUVMSpU6do06YNAAMHDuTPf/4zDocDg8EAwJo1a0hMTPT+kA4cOJCVK1fWOPaaNWvo168fer3eW2bt2rU89NBDNcoMGjSoVtfqy3afy44dOzCZTN4h2/7Qbl+2+cMPP8Rms3n/vXXrViZMmMAPP/xAhw4dvNd6sdsMDf+9PvOHgN1uB/yj3b5u8549e7jmmmsYP348c+bMOet9f2gzNPz3+tf8pd1eqobbiDo7fvy4smPHDuWpp55SQkNDlR07dig7duxQysrKvGVuvPFGJTk5WVm/fr2ya9cuJTU1VenevbvicDgURVGUkpISJS4uThk7dqyya9cu5aOPPlLCw8PPORT5oYceUvbu3au88cYbZw1FXr9+vaLT6ZRnn31W2bdvn/Lss8822BDsC7X7008/VV599VVl165dyqFDh5TXXntNCQ8PV6ZOneo9RlNrd22+17/0zTffnDWatKm1uTbtXrVqlfLmm28qu3btUo4ePaqsWrVKSU5OVgYPHtxk232hNu/evVuJiYlR7rrrrhpThwoKCppsm2vTbkVRlIMHDyo7duxQJk2apHTu3Nlbxm63+2W7JQwbyfjx4xXgrK9vvvnGW8ZqtSoTJkxQWrRooURGRio333yzcuLEiRrH+fHHH5UrrrhCMRqNSnx8vPLkk096hyGf8e233yp9+vRRDAaD0rZtW+Vf//rXWdfzn//8R+nSpYui1+uVrl27Kh9++OFFafcXX3yh9O7dWwkNDVWCg4OVHj16KC+//LLidDqbbLtr873+pXOFoaI0rTYryoXb/fXXXysDBw5ULBaLYjKZlE6dOimzZs1q0u2+UJufeOKJc77fpk2bJtvm2rRbURTlqquuOmeZo0eP+mW7ZQsnIYQQAU9GkwohhAh4EoZCCCECnoShEEKIgCdhKIQQIuBJGAohhAh4EoZCCCECnoShEEKIgCdhKIQQIuBJGAohhAh4EoZCCCECnoShEEKIgCdhKIQQIuD9P0FoyX+/ifcJAAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# オプション無し\n",
"ax = gdf_lines.to_crs(epsg=6677).buffer(200).plot(color='skyblue')\n",
"gdf_lines.to_crs(epsg=6677).plot(ax=ax, color='red')"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<Axes: >"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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4na7FUVRlCeeeELp2LFjjXqTJ09Wevfu7fn76NGjleHDh9coM2zYMGXMmDH16VKdXazvilIdgp999tlF6zblvv9SvxWlum8DBgxQ1q1bd0EINud+/9xrr72mJCYmev7elPutKOr6PmXKFGXgwIGevzflvtel37///e9rDUFf67dcDm1ka9aswe12c/r0aTp16kRiYiKjR48mKyvLU2bz5s0MGDCgxsTSYcOGcebMGU6cOOEpM3To0BptDxs2jO3bt+N0On+xzKZNmxqod3XzyCOPEBUVRc+ePVm0aBFut9vzXnPt+/79+5kzZw7/+Mc/al07sbn2++fOnDnDv/71LwYMGOB5zR/6/ROr1UpERITn7/7U95/ztX5LCDayY8eO4Xa7eeGFF3j11Vf55JNPKCwsZMiQITgcDgByc3OJjY2tUe+nv+fm5v5imaqqKs6dO/eLZX5q40r4wx/+wMcff8zatWsZM2YMM2bM4IUXXvC83xz7brfbGTt2LPPnz6dly5a1lmmO/f7J2LFjCQoKokWLFoSGhvLOO+943mvO/f65zZs3889//pPJkyd7XvOXvp/P1/otIVgHzz33XK0PdPz8a/v27XVqy+1243Q6+ctf/sKwYcPo3bs3H374IYcPH+bbb7/1lDt/ayflvzeNf/56fcuo2TbKm30HePrpp+nTpw/dunVjxowZzJkzh/nz59co4wt992a/n3rqKTp16sT999//i+WaW79/8uc//5kdO3bw+eefc/ToUR5//PEa7/tCv6Fh+g7w448/ctttt/Hss88yZMiQGu/5Qt8bqt+/xBf6/RO/3kqprh555BHGjBnzi2Vat25dp7bi4+MBSE5O9rwWHR1NVFQUp06dAiAuLu6C32by8vKA//3GdLEyAQEBREZG/mKZ8397+iXe7Httevfujc1m4+zZs8TGxvpM373Z7/Xr17N3714++eQT4H8/zFFRUfzud7/j+eefb5b9/klcXBxxcXF07NiRyMhIbrjhBp555hni4+N9pt/QMH3fv38/N998M5MmTeLpp5+u8Z6v9L2hf8bP5yv9/omEYB1ERUURFRXllbb69esHwMGDBz17GRYWFnLu3DlatWoFQJ8+ffjtb3+Lw+HAYDAAsHr1ahISEjz/Gfv06cOKFStqtL169Wp69OiBXq/3lFmzZg2PPfZYjTJ9+/at8/l6s++12blzJ4GBgZ7HrX2l797s96effkpFRYXn7z/88AMTJkzg+++/56qrrvKcb3Prd21++gXAbrcDvtNv8H7ff/zxR26++WbGjx/P3LlzL3jfV/re0N/z8/lKvz1UPUYjLunkyZPKzp07leeff14JDg5Wdu7cqezcuVMpKSnxlLntttuUlJQUZePGjcrevXuV1NRUJTk5WXE4HIqiKEpxcbESGxurjB07Vtm7d6/yr3/9SwkNDa31EeLHHntM2b9/v7J48eILHiHeuHGjotPplBdffFHJzMxUXnzxxQZ9bPxSff/yyy+Vt956S9m7d69y5MgR5e2331ZCQ0OVadOmedpoin2vy/f857799tsLng5tjv3++uuvlb///e/K3r17lePHjytff/21kpKSovTr169J97sufd+3b58SHR2t3HfffTWmA+Xl5TXpvtfl//rhw4eVnTt3KpMnT1auvvpqTxm73e6T/ZYQ9LLx48crwAVf3377raeM1WpVJkyYoISFhSkRERHKHXfcoZw6dapGO3v27FFuuOEGxWg0KnFxccpzzz3neXz4Jxs2bFCuvfZaxWAwKK1bt1b+9re/XXA+H3/8sdKhQwdFr9crHTt2VD799NMG6beiXLrv33zzjdKtWzclODhYCQoKUjp37qy8+uqritPpbNJ9r8v3/OdqC0FFaX79Xr9+vdKnTx/FYrEogYGBSvv27ZXZs2c3+X4ryqX7/vvf/77W91u1alWjnabW97r8Xx8wYECtZY4fP+6T/ZatlIQQQvgteTpUCCGE35IQFEII4bckBIUQQvgtCUEhhBB+S0JQCCGE35IQFEII4bckBIUQQvgtCUEhhBB+S0JQCCGE35IQFEII4bckBIUQQvgtCUEhhBB+6/8BNNLDCHwAoxUAAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# オプション設定(1)\n",
"ax = gdf_lines.to_crs(epsg=6677).buffer(200, cap_style=2, join_style=2).plot(color='skyblue')\n",
"gdf_lines.to_crs(epsg=6677).plot(ax=ax, color='red')"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<Axes: >"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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ee2115Tvv/9eOXr0qLJq1SolOTlZGTNmTLNrqy/tnTdvnjJp0iTl66+/Vg4fPqwsWLBAMZlMyiuvvNIi26soijJp0iTl1VdfVTIyMpQePXqc8X5Ta68EXyN75513zvlhYTKZlFWrVp2z7muvvaZYrValurra+9qsWbOUhIQExePxKIqiKA8++KDSpUuXWvXuuecepU+fPt4/jxo1Shk2bFitMkOHDlVGjx5dlyad17naqyg1wbd48eJz1m1p7VWUmjYNGjRIWb169RnB19zae6G2/tY//vEPJTEx0fvn5tZWRVHX3okTJyrXXnut988ttb1PPPHEWYOvqbVXbnU2UStXrsTj8XDixAm6du1KYmIio0aN4vjx494yGzduZNCgQbUmhw4dOpTs7GyOHj3qLZOWllbr2EOHDmXr1q04nc7zltmwYUMDte7c7r33XqKjo+nVqxevv/46Ho/H+15La++ePXt4+umn+c9//nPWRXpbWntPyc7O5pNPPmHQoEHe11pqW0+x2WxERkZ6/9zS23u6ptZeCb4m6ueff8bj8fDss8/y8ssv89FHH1FUVMSQIUNwOBwA5ObmEhcXV6veqT/n5uaet4zL5eLkyZPnLXPqGBfLM888w4cffsiqVasYPXo0U6dO5dlnn/W+35Laa7fbGTNmDHPmzKFNmzZnLdOS2gswZswYzGYzrVu3JiwsjLffftv7Xktr629t3LiR//3vf9xzzz3e11pye8+mqbVXgs+PnnzyybMO0Pjt19atW306lsfjwel08v/+3/9j6NCh9OnTh//+978cPHiQtWvXesudvp2S8svD4t++XtcyF9qqyZ/tBXj00Ufp27cvl112GVOnTuXpp59mzpw5tcq0lPY+/PDDdO3alT/+8Y/nLddY7fX33y3ASy+9xA8//MCnn37K4cOHeeCBB2q931L+bn/rp59+4qabbuLxxx9nyJAhtd5rie09n8Zs7+kCelsif7v33nsZPXr0ecu0a9fOp2O1atUKgJSUFO9rMTExREdHk5mZCUB8fPwZv+nk5+cDv/42da4yQUFBREVFnbfM6b9Znc6f7T2bPn36UFpaSl5eHnFxcS2qvWvWrGHXrl189NFHwK//wKOjo3nkkUd46qmnGrW9DfF3Gx8fT3x8PF26dCEqKoqBAwfy2GOP0apVqxb1d3vKnj17uO6665gwYQKPPvporfdaYnvPp7HbezoJPj+Kjo4mOjraL8fq378/APv37/fuGVhUVMTJkydp27YtAH379uVvf/sbDocDg8EAwIoVK0hISPD+0Pbt25clS5bUOvaKFSu48sor0ev13jIrV67k/vvvr1WmX79+571Gf7b3bLZv305wcLB3CHVLau/HH39MVVWV98/ff/8948ePZ926dVxyySXe62ys9jb03+2poLfb7d5rbCl/t1DT07vuuusYN24cM2fOPOP9ltbeC2ns9p5B1VAY4TfHjh1Ttm/frjz11FNKSEiIsn37dmX79u1KWVmZt8xNN92kpKamKt99952ya9cuJT09XUlJSVEcDoeiKIpSUlKixMXFKWPGjFF27dqlfPLJJ0pYWNhZhwjff//9yp49e5R58+adMUT4u+++U3Q6nfLcc88pe/fuVZ577jm/D4m+UHs///xz5c0331R27dqlHDp0SHnrrbeUsLAwZfLkyd5jtKT2nm7t2rVnjOpsLu29UFu//PJL5d///reya9cu5ciRI8qXX36ppKamKv379292bfWlvbt371ZiYmKUP/zhD7Wm5uTn57fI9iqKohw8eFDZvn27cs899yidO3f2lrHb7U2yvRJ8jWTcuHEKcMbX2rVrvWVsNpsyfvx4JTw8XImMjFRuueUWJTMzs9ZxfvzxR2XgwIGK0WhU4uPjlSeffNI7PPiUr7/+Wrn88ssVg8GgtGvXTvnXv/51xvV8+OGHSnJysqLX65UuXbooH3/88UVt77Jly5TLLrtMCQkJUcxms9KtWzfl5ZdfVpxOZ4ts7+nOFnyK0jzae6G2rlmzRunbt69itVqV4OBgpVOnTsqMGTOaZVt9ae8TTzxx1vfbtm3bIturKIoyaNCgs5Y5cuRIk2yvbEskhBAioMioTiGEEAFFgk8IIURAkeATQggRUCT4hBBCBBQJPiGEEAFFgk8IIURAkeATQggRUCT4hBBCBBQJPiGEEAFFgk8IIURAkeATQggRUCT4hBBCBJT/D+7xyLmfaZbrAAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# オプション設定(2)\n",
"ax = gdf_lines.to_crs(epsg=6677).buffer(200, cap_style=3, join_style=3).plot(color='skyblue')\n",
"gdf_lines.to_crs(epsg=6677).plot(ax=ax, color='red')"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"#### 例: within\n",
"\n",
"Geometry演算により、地理的な条件でクエリやフィルタリングを行う例\n",
"\n",
"各Geometryに含まれるものの抽出\n",
"\n",
"他のメソッドを使えば、類似する条件として重なりをもつものの抽出、などのバリエーションを持たせることもできる"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"# TODO: withinを使ったフィルタリングの例\n",
"\n",
"# foliumなどでわかりやすく可視化する"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>geometry</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>POINT (136.00366 35.49424)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>POINT (136.01162 35.49424)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>POINT (136.01927 35.49444)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>POINT (136.02857 35.49455)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>POINT (136.03819 35.49460)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>POINT (136.04596 35.49439)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>POINT (136.05628 35.49346)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>POINT (136.00525 35.48749)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>POINT (136.01582 35.48614)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>POINT (136.03162 35.48770)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>POINT (136.04303 35.48687)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>POINT (136.05335 35.48692)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>POINT (136.02213 35.49071)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>POINT (136.05845 35.48324)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>POINT (136.05790 35.47872)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>POINT (136.04573 35.47924)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>POINT (136.03682 35.48075)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>POINT (136.04038 35.47286)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>POINT (136.03185 35.47182)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>POINT (136.02949 35.47872)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>POINT (136.00942 35.46980)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>POINT (136.00216 35.47789)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>POINT (136.01974 35.47769)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>POINT (136.00866 35.47608)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>POINT (136.00853 35.46223)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>POINT (136.01859 35.46046)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>POINT (136.03605 35.46129)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>POINT (136.04586 35.46368)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>POINT (136.05905 35.46830)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>POINT (136.06568 35.47188)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>POINT (136.07020 35.47411)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31</th>\n",
" <td>POINT (136.06096 35.45734)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32</th>\n",
" <td>POINT (136.04898 35.45485)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33</th>\n",
" <td>POINT (136.03324 35.45687)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34</th>\n",
" <td>POINT (136.02452 35.45656)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>35</th>\n",
" <td>POINT (136.02037 35.46767)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>36</th>\n",
" <td>POINT (136.05389 35.47389)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>37</th>\n",
" <td>POINT (136.06854 35.48894)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>38</th>\n",
" <td>POINT (135.99680 35.46848)</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" geometry\n",
"0 POINT (136.00366 35.49424)\n",
"1 POINT (136.01162 35.49424)\n",
"2 POINT (136.01927 35.49444)\n",
"3 POINT (136.02857 35.49455)\n",
"4 POINT (136.03819 35.49460)\n",
"5 POINT (136.04596 35.49439)\n",
"6 POINT (136.05628 35.49346)\n",
"7 POINT (136.00525 35.48749)\n",
"8 POINT (136.01582 35.48614)\n",
"9 POINT (136.03162 35.48770)\n",
"10 POINT (136.04303 35.48687)\n",
"11 POINT (136.05335 35.48692)\n",
"12 POINT (136.02213 35.49071)\n",
"13 POINT (136.05845 35.48324)\n",
"14 POINT (136.05790 35.47872)\n",
"15 POINT (136.04573 35.47924)\n",
"16 POINT (136.03682 35.48075)\n",
"17 POINT (136.04038 35.47286)\n",
"18 POINT (136.03185 35.47182)\n",
"19 POINT (136.02949 35.47872)\n",
"20 POINT (136.00942 35.46980)\n",
"21 POINT (136.00216 35.47789)\n",
"22 POINT (136.01974 35.47769)\n",
"23 POINT (136.00866 35.47608)\n",
"24 POINT (136.00853 35.46223)\n",
"25 POINT (136.01859 35.46046)\n",
"26 POINT (136.03605 35.46129)\n",
"27 POINT (136.04586 35.46368)\n",
"28 POINT (136.05905 35.46830)\n",
"29 POINT (136.06568 35.47188)\n",
"30 POINT (136.07020 35.47411)\n",
"31 POINT (136.06096 35.45734)\n",
"32 POINT (136.04898 35.45485)\n",
"33 POINT (136.03324 35.45687)\n",
"34 POINT (136.02452 35.45656)\n",
"35 POINT (136.02037 35.46767)\n",
"36 POINT (136.05389 35.47389)\n",
"37 POINT (136.06854 35.48894)\n",
"38 POINT (135.99680 35.46848)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>geometry</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>POLYGON ((136.01223 35.48520, 136.01161 35.485...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>POLYGON ((136.05783 35.48312, 136.05783 35.471...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>POLYGON ((136.03468 35.48634, 136.02552 35.480...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" geometry\n",
"0 POLYGON ((136.01223 35.48520, 136.01161 35.485...\n",
"1 POLYGON ((136.05783 35.48312, 136.05783 35.471...\n",
"2 POLYGON ((136.03468 35.48634, 136.02552 35.480..."
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe srcdoc=\"&lt;!DOCTYPE html&gt;\n",
"&lt;html&gt;\n",
"&lt;head&gt;\n",
" \n",
" &lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;\n",
" \n",
" &lt;script&gt;\n",
" L_NO_TOUCH = false;\n",
" L_DISABLE_3D = false;\n",
" &lt;/script&gt;\n",
" \n",
" &lt;style&gt;html, body {width: 100%;height: 100%;margin: 0;padding: 0;}&lt;/style&gt;\n",
" &lt;style&gt;#map {position:absolute;top:0;bottom:0;right:0;left:0;}&lt;/style&gt;\n",
" &lt;script src=&quot;https://cdn.jsdelivr.net/npm/[email protected]/dist/leaflet.js&quot;&gt;&lt;/script&gt;\n",
" &lt;script src=&quot;https://code.jquery.com/jquery-1.12.4.min.js&quot;&gt;&lt;/script&gt;\n",
" &lt;script src=&quot;https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js&quot;&gt;&lt;/script&gt;\n",
" &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js&quot;&gt;&lt;/script&gt;\n",
" &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/[email protected]/dist/leaflet.css&quot;/&gt;\n",
" &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css&quot;/&gt;\n",
" &lt;link rel=&quot;stylesheet&quot; href=&quot;https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css&quot;/&gt;\n",
" &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/@fortawesome/[email protected]/css/all.min.css&quot;/&gt;\n",
" &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css&quot;/&gt;\n",
" &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css&quot;/&gt;\n",
" \n",
" &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width,\n",
" initial-scale=1.0, maximum-scale=1.0, user-scalable=no&quot; /&gt;\n",
" &lt;style&gt;\n",
" #map_060eb50461adf6f31d1db187fe513a6f {\n",
" position: relative;\n",
" width: 100.0%;\n",
" height: 100.0%;\n",
" left: 0.0%;\n",
" top: 0.0%;\n",
" }\n",
" .leaflet-container { font-size: 1rem; }\n",
" &lt;/style&gt;\n",
" \n",
"&lt;/head&gt;\n",
"&lt;body&gt;\n",
" \n",
" \n",
" &lt;div class=&quot;folium-map&quot; id=&quot;map_060eb50461adf6f31d1db187fe513a6f&quot; &gt;&lt;/div&gt;\n",
" \n",
"&lt;/body&gt;\n",
"&lt;script&gt;\n",
" \n",
" \n",
" var map_060eb50461adf6f31d1db187fe513a6f = L.map(\n",
" &quot;map_060eb50461adf6f31d1db187fe513a6f&quot;,\n",
" {\n",
" center: [0, 0],\n",
" crs: L.CRS.EPSG3857,\n",
" zoom: 1,\n",
" zoomControl: true,\n",
" preferCanvas: false,\n",
" }\n",
" );\n",
" L.control.scale().addTo(map_060eb50461adf6f31d1db187fe513a6f);\n",
"\n",
" \n",
"\n",
" \n",
" \n",
" var tile_layer_7d09c658285e7c27b1ae3093355ea1ea = L.tileLayer(\n",
" &quot;https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png&quot;,\n",
" {&quot;attribution&quot;: &quot;Data by \\u0026copy; \\u003ca target=\\&quot;_blank\\&quot; href=\\&quot;http://openstreetmap.org\\&quot;\\u003eOpenStreetMap\\u003c/a\\u003e, under \\u003ca target=\\&quot;_blank\\&quot; href=\\&quot;http://www.openstreetmap.org/copyright\\&quot;\\u003eODbL\\u003c/a\\u003e.&quot;, &quot;detectRetina&quot;: false, &quot;maxNativeZoom&quot;: 18, &quot;maxZoom&quot;: 18, &quot;minZoom&quot;: 0, &quot;noWrap&quot;: false, &quot;opacity&quot;: 1, &quot;subdomains&quot;: &quot;abc&quot;, &quot;tms&quot;: false}\n",
" ).addTo(map_060eb50461adf6f31d1db187fe513a6f);\n",
" \n",
" \n",
" var lat_lng_popup_673325ac70c76ff59cf8da2270907b5b = L.popup();\n",
" function latLngPop(e) {\n",
" lat_lng_popup_673325ac70c76ff59cf8da2270907b5b\n",
" .setLatLng(e.latlng)\n",
" .setContent(&quot;Latitude: &quot; + e.latlng.lat.toFixed(4) +\n",
" &quot;&lt;br&gt;Longitude: &quot; + e.latlng.lng.toFixed(4))\n",
" .openOn(map_060eb50461adf6f31d1db187fe513a6f);\n",
" }\n",
" map_060eb50461adf6f31d1db187fe513a6f.on(&#x27;click&#x27;, latLngPop);\n",
" \n",
" \n",
"\n",
" function geo_json_1e7048110d9a068c876e7655d1e085b3_onEachFeature(feature, layer) {\n",
" layer.on({\n",
" });\n",
" };\n",
" var geo_json_1e7048110d9a068c876e7655d1e085b3 = L.geoJson(null, {\n",
" onEachFeature: geo_json_1e7048110d9a068c876e7655d1e085b3_onEachFeature,\n",
" \n",
" });\n",
"\n",
" function geo_json_1e7048110d9a068c876e7655d1e085b3_add (data) {\n",
" geo_json_1e7048110d9a068c876e7655d1e085b3\n",
" .addData(data)\n",
" .addTo(map_060eb50461adf6f31d1db187fe513a6f);\n",
" }\n",
" geo_json_1e7048110d9a068c876e7655d1e085b3_add({&quot;features&quot;: [{&quot;geometry&quot;: {&quot;coordinates&quot;: [136.00365644654806, 35.49423637747786], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;0&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.01162005155675, 35.49423637747786], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;1&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.01926511236286, 35.4944438575162], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;2&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.02856660301296, 35.494547597335384], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;3&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.0381866378611, 35.49459946719381], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;4&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.04595911635056, 35.494391987557336], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;5&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.05627994843974, 35.493458322560755], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;6&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.00524916754938, 35.487492984547714], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;7&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.01582483500061, 35.48614423805225], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;8&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.03162462733457, 35.48770048199901], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;9&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.04302850970777, 35.48687048897736], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;10&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.05334934065013, 35.48692236324952], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;11&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.02213200901832, 35.49070913429847], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;12&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.05844604785415, 35.48323916817671], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;13&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.0579031950624, 35.4787248757293], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;14&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.04573480660997, 35.47924367494741], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;15&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.0368155690029, 35.480748173742754], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;16&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.04038326404623, 35.47286221189924], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;17&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.03184627947752, 35.47182452775529], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;18&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.02948905239475, 35.4787248757293], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;19&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.0094207677742, 35.46980100515691], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;20&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.00215796000646, 35.477894790018254], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;21&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.0197415998656, 35.47768726725053], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;22&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.00865626169502, 35.47607894764133], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;23&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.00852884401388, 35.46222531460276], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;24&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.01859484074333, 35.460461010257006], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;25&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.0360510629214, 35.46129127594607], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;26&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.045862224291, 35.463678242066266], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;27&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.05904995418467, 35.4682963014983], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;28&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.06567567354955, 35.47187641228095], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;29&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.07019900119593, 35.474107415195505], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;30&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.06095683288862, 35.45734027071447], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;31&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.04897957095773, 35.45484932560808], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;32&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.03324348746202, 35.45687322438188], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;33&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.0245153763741, 35.456561858653245], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;34&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.02037430176853, 35.46766649129643], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;35&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.0538851516426, 35.47389271723752], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;36&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.06853818485655, 35.48893743949681], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;37&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [135.99679864459847, 35.468482313649645], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;38&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}], &quot;type&quot;: &quot;FeatureCollection&quot;});\n",
"\n",
" \n",
" \n",
"\n",
" function geo_json_8db063737466f31b75a3ff692fb97318_onEachFeature(feature, layer) {\n",
" layer.on({\n",
" });\n",
" };\n",
" var geo_json_8db063737466f31b75a3ff692fb97318 = L.geoJson(null, {\n",
" onEachFeature: geo_json_8db063737466f31b75a3ff692fb97318_onEachFeature,\n",
" \n",
" });\n",
"\n",
" function geo_json_8db063737466f31b75a3ff692fb97318_add (data) {\n",
" geo_json_8db063737466f31b75a3ff692fb97318\n",
" .addData(data)\n",
" .addTo(map_060eb50461adf6f31d1db187fe513a6f);\n",
" }\n",
" geo_json_8db063737466f31b75a3ff692fb97318_add({&quot;features&quot;: [{&quot;geometry&quot;: {&quot;coordinates&quot;: [[[136.01222526987345, 35.48519866493043], [136.0116077883299, 35.48517396266875], [136.01099625460066, 35.48510009382534], [136.01039655917603, 35.48497776993169], [136.00981447845163, 35.484808169251586], [136.00925561906038, 35.484592925425495], [136.00872536384367, 35.48433411172637], [136.0082288199839, 35.48403422107915], [136.0077707697993, 35.483696142036905], [136.00735562467446, 35.48332313094549], [136.00698738257253, 35.482918780565484], [136.00666958953653, 35.482486985454216], [136.00640530555194, 35.48203190444211], [136.0061970750979, 35.4815579205652], [136.0060469026701, 35.48106959884038], [136.0059562335102, 35.48057164229053], [136.00592593972578, 35.48006884664343], [136.0059563119333, 35.479566054141216], [136.00604705650252, 35.47906810690519], [136.00619729842796, 35.4785798003052], [136.00640558979723, 35.4781058367829], [136.00666992377361, 35.47765078057295], [136.00698775395688, 35.47721901375825], [136.00735601893402, 35.47681469408182], [136.00777117178285, 35.47644171492106], [136.00822921424347, 35.47610366780946], [136.008725735228, 35.475803807865816], [136.0092559532975, 35.47554502246326], [136.00981476269692, 35.475329803439315], [136.0103967825061, 35.47516022311383], [136.0109964084331, 35.47503791434501], [136.011607866753, 35.474964054815416], [136.01222526987345, 35.474939355698645], [136.01284267299394, 35.474964054815416], [136.0134541313138, 35.47503791434501], [136.01405375724082, 35.47516022311383], [136.01463577705, 35.475329803439315], [136.0151945864494, 35.47554502246326], [136.0157248045189, 35.475803807865816], [136.01622132550344, 35.47610366780946], [136.0166793679641, 35.47644171492106], [136.01709452081292, 35.47681469408182], [136.01746278579003, 35.47721901375825], [136.0177806159733, 35.47765078057295], [136.0180449499497, 35.4781058367829], [136.01825324131892, 35.4785798003052], [136.01840348324438, 35.47906810690519], [136.01849422781362, 35.479566054141216], [136.01852460002112, 35.48006884664343], [136.0184943062367, 35.48057164229053], [136.01840363707683, 35.48106959884038], [136.01825346464904, 35.4815579205652], [136.01804523419497, 35.48203190444211], [136.01778095021038, 35.482486985454216], [136.01746315717438, 35.482918780565484], [136.01709491507245, 35.48332313094549], [136.01667976994761, 35.483696142036905], [136.016221719763, 35.48403422107915], [136.01572517590327, 35.48433411172637], [136.01519492068653, 35.484592925425495], [136.01463606129528, 35.484808169251586], [136.0140539805709, 35.48497776993169], [136.01345428514625, 35.48510009382534], [136.012842751417, 35.48517396266875], [136.01222526987345, 35.48519866493043]]], &quot;type&quot;: &quot;Polygon&quot;}, &quot;id&quot;: &quot;0&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [[[136.0578286718578, 35.4831247446687], [136.0578286718578, 35.47183348684949], [136.06437978818224, 35.47183348684949], [136.06437978818224, 35.4831247446687], [136.0578286718578, 35.4831247446687]]], &quot;type&quot;: &quot;Polygon&quot;}, &quot;id&quot;: &quot;1&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [[[136.03467715397437, 35.4863357301668], [136.02551831173457, 35.48058693956742], [136.02621794551715, 35.468829123648746], [136.03556759696932, 35.464270565136346], [136.04529886685083, 35.471263702453754], [136.0442176146413, 35.481104865483246], [136.03467715397437, 35.4863357301668]]], &quot;type&quot;: &quot;Polygon&quot;}, &quot;id&quot;: &quot;2&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}], &quot;type&quot;: &quot;FeatureCollection&quot;});\n",
"\n",
" \n",
" \n",
" map_060eb50461adf6f31d1db187fe513a6f.fitBounds(\n",
" [[35.45484932560808, 135.99679864459847], [35.49459946719381, 136.07019900119593]],\n",
" {}\n",
" );\n",
" \n",
" \n",
" var layer_control_ebcac0f0d6c8911898c21f849946d30d = {\n",
" base_layers : {\n",
" &quot;openstreetmap&quot; : tile_layer_7d09c658285e7c27b1ae3093355ea1ea,\n",
" },\n",
" overlays : {\n",
" &quot;macro_element_1e7048110d9a068c876e7655d1e085b3&quot; : geo_json_1e7048110d9a068c876e7655d1e085b3,\n",
" &quot;macro_element_8db063737466f31b75a3ff692fb97318&quot; : geo_json_8db063737466f31b75a3ff692fb97318,\n",
" },\n",
" };\n",
" L.control.layers(\n",
" layer_control_ebcac0f0d6c8911898c21f849946d30d.base_layers,\n",
" layer_control_ebcac0f0d6c8911898c21f849946d30d.overlays,\n",
" {&quot;autoZIndex&quot;: true, &quot;collapsed&quot;: true, &quot;position&quot;: &quot;topright&quot;}\n",
" ).addTo(map_060eb50461adf6f31d1db187fe513a6f);\n",
" \n",
"&lt;/script&gt;\n",
"&lt;/html&gt;\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
],
"text/plain": [
"<folium.folium.Map at 0x7f3cdfc2ccd0>"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gdf_points_unfiltered = gpd.read_file(\"sample-points-unfiltered.geojson\")\n",
"display(gdf_points_unfiltered)\n",
"\n",
"gdf_polygons = gpd.read_file(\"sample-polygons.geojson\")\n",
"display(gdf_polygons)\n",
"\n",
"# 地図上で可視化する\n",
"m2 = folium.Map(control_scale=True)\n",
"folium.LatLngPopup().add_to(m2)\n",
"\n",
"_points_unfiltered = folium.GeoJson(gdf_points_unfiltered.to_json()).add_to(m2)\n",
"_polygons = folium.GeoJson(gdf_polygons.to_json()).add_to(m2)\n",
"\n",
"m2.fit_bounds(_points_unfiltered.get_bounds())\n",
"folium.LayerControl().add_to(m2)\n",
"m2"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>geometry</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>POINT (136.00866 35.47608)</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" geometry\n",
"23 POINT (136.00866 35.47608)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>geometry</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>POINT (136.05790 35.47872)</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" geometry\n",
"14 POINT (136.05790 35.47872)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>geometry</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>POINT (136.03682 35.48075)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>POINT (136.04038 35.47286)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>POINT (136.03185 35.47182)</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>POINT (136.02949 35.47872)</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" geometry\n",
"16 POINT (136.03682 35.48075)\n",
"17 POINT (136.04038 35.47286)\n",
"18 POINT (136.03185 35.47182)\n",
"19 POINT (136.02949 35.47872)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe srcdoc=\"&lt;!DOCTYPE html&gt;\n",
"&lt;html&gt;\n",
"&lt;head&gt;\n",
" \n",
" &lt;meta http-equiv=&quot;content-type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;\n",
" \n",
" &lt;script&gt;\n",
" L_NO_TOUCH = false;\n",
" L_DISABLE_3D = false;\n",
" &lt;/script&gt;\n",
" \n",
" &lt;style&gt;html, body {width: 100%;height: 100%;margin: 0;padding: 0;}&lt;/style&gt;\n",
" &lt;style&gt;#map {position:absolute;top:0;bottom:0;right:0;left:0;}&lt;/style&gt;\n",
" &lt;script src=&quot;https://cdn.jsdelivr.net/npm/[email protected]/dist/leaflet.js&quot;&gt;&lt;/script&gt;\n",
" &lt;script src=&quot;https://code.jquery.com/jquery-1.12.4.min.js&quot;&gt;&lt;/script&gt;\n",
" &lt;script src=&quot;https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js&quot;&gt;&lt;/script&gt;\n",
" &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js&quot;&gt;&lt;/script&gt;\n",
" &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/[email protected]/dist/leaflet.css&quot;/&gt;\n",
" &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css&quot;/&gt;\n",
" &lt;link rel=&quot;stylesheet&quot; href=&quot;https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css&quot;/&gt;\n",
" &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/npm/@fortawesome/[email protected]/css/all.min.css&quot;/&gt;\n",
" &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css&quot;/&gt;\n",
" &lt;link rel=&quot;stylesheet&quot; href=&quot;https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css&quot;/&gt;\n",
" \n",
" &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width,\n",
" initial-scale=1.0, maximum-scale=1.0, user-scalable=no&quot; /&gt;\n",
" &lt;style&gt;\n",
" #map_b395211118785ad08c7e836e74aad94a {\n",
" position: relative;\n",
" width: 100.0%;\n",
" height: 100.0%;\n",
" left: 0.0%;\n",
" top: 0.0%;\n",
" }\n",
" .leaflet-container { font-size: 1rem; }\n",
" &lt;/style&gt;\n",
" \n",
"&lt;/head&gt;\n",
"&lt;body&gt;\n",
" \n",
" \n",
" &lt;div class=&quot;folium-map&quot; id=&quot;map_b395211118785ad08c7e836e74aad94a&quot; &gt;&lt;/div&gt;\n",
" \n",
"&lt;/body&gt;\n",
"&lt;script&gt;\n",
" \n",
" \n",
" var map_b395211118785ad08c7e836e74aad94a = L.map(\n",
" &quot;map_b395211118785ad08c7e836e74aad94a&quot;,\n",
" {\n",
" center: [0, 0],\n",
" crs: L.CRS.EPSG3857,\n",
" zoom: 1,\n",
" zoomControl: true,\n",
" preferCanvas: false,\n",
" }\n",
" );\n",
" L.control.scale().addTo(map_b395211118785ad08c7e836e74aad94a);\n",
"\n",
" \n",
"\n",
" \n",
" \n",
" var tile_layer_f5ee5db0d1d261864c0ee11cdadbaa17 = L.tileLayer(\n",
" &quot;https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png&quot;,\n",
" {&quot;attribution&quot;: &quot;Data by \\u0026copy; \\u003ca target=\\&quot;_blank\\&quot; href=\\&quot;http://openstreetmap.org\\&quot;\\u003eOpenStreetMap\\u003c/a\\u003e, under \\u003ca target=\\&quot;_blank\\&quot; href=\\&quot;http://www.openstreetmap.org/copyright\\&quot;\\u003eODbL\\u003c/a\\u003e.&quot;, &quot;detectRetina&quot;: false, &quot;maxNativeZoom&quot;: 18, &quot;maxZoom&quot;: 18, &quot;minZoom&quot;: 0, &quot;noWrap&quot;: false, &quot;opacity&quot;: 1, &quot;subdomains&quot;: &quot;abc&quot;, &quot;tms&quot;: false}\n",
" ).addTo(map_b395211118785ad08c7e836e74aad94a);\n",
" \n",
" \n",
" var lat_lng_popup_1f7b01b78550f702ca10e589128efc85 = L.popup();\n",
" function latLngPop(e) {\n",
" lat_lng_popup_1f7b01b78550f702ca10e589128efc85\n",
" .setLatLng(e.latlng)\n",
" .setContent(&quot;Latitude: &quot; + e.latlng.lat.toFixed(4) +\n",
" &quot;&lt;br&gt;Longitude: &quot; + e.latlng.lng.toFixed(4))\n",
" .openOn(map_b395211118785ad08c7e836e74aad94a);\n",
" }\n",
" map_b395211118785ad08c7e836e74aad94a.on(&#x27;click&#x27;, latLngPop);\n",
" \n",
" \n",
"\n",
" function geo_json_d178d4a4a2a26476a571bcec6f5974cb_onEachFeature(feature, layer) {\n",
" layer.on({\n",
" });\n",
" };\n",
" var geo_json_d178d4a4a2a26476a571bcec6f5974cb = L.geoJson(null, {\n",
" onEachFeature: geo_json_d178d4a4a2a26476a571bcec6f5974cb_onEachFeature,\n",
" \n",
" });\n",
"\n",
" function geo_json_d178d4a4a2a26476a571bcec6f5974cb_add (data) {\n",
" geo_json_d178d4a4a2a26476a571bcec6f5974cb\n",
" .addData(data)\n",
" .addTo(map_b395211118785ad08c7e836e74aad94a);\n",
" }\n",
" geo_json_d178d4a4a2a26476a571bcec6f5974cb_add({&quot;features&quot;: [{&quot;geometry&quot;: {&quot;coordinates&quot;: [136.00865626169502, 35.47607894764133], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;23&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}], &quot;type&quot;: &quot;FeatureCollection&quot;});\n",
"\n",
" \n",
" \n",
"\n",
" function geo_json_5f9446a78a3f897aa5b77f16f894d213_onEachFeature(feature, layer) {\n",
" layer.on({\n",
" });\n",
" };\n",
" var geo_json_5f9446a78a3f897aa5b77f16f894d213 = L.geoJson(null, {\n",
" onEachFeature: geo_json_5f9446a78a3f897aa5b77f16f894d213_onEachFeature,\n",
" \n",
" });\n",
"\n",
" function geo_json_5f9446a78a3f897aa5b77f16f894d213_add (data) {\n",
" geo_json_5f9446a78a3f897aa5b77f16f894d213\n",
" .addData(data)\n",
" .addTo(map_b395211118785ad08c7e836e74aad94a);\n",
" }\n",
" geo_json_5f9446a78a3f897aa5b77f16f894d213_add({&quot;features&quot;: [{&quot;geometry&quot;: {&quot;coordinates&quot;: [136.0579031950624, 35.4787248757293], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;14&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}], &quot;type&quot;: &quot;FeatureCollection&quot;});\n",
"\n",
" \n",
" \n",
"\n",
" function geo_json_cb1d463d7a588f06b7b62d77fb006059_onEachFeature(feature, layer) {\n",
" layer.on({\n",
" });\n",
" };\n",
" var geo_json_cb1d463d7a588f06b7b62d77fb006059 = L.geoJson(null, {\n",
" onEachFeature: geo_json_cb1d463d7a588f06b7b62d77fb006059_onEachFeature,\n",
" \n",
" });\n",
"\n",
" function geo_json_cb1d463d7a588f06b7b62d77fb006059_add (data) {\n",
" geo_json_cb1d463d7a588f06b7b62d77fb006059\n",
" .addData(data)\n",
" .addTo(map_b395211118785ad08c7e836e74aad94a);\n",
" }\n",
" geo_json_cb1d463d7a588f06b7b62d77fb006059_add({&quot;features&quot;: [{&quot;geometry&quot;: {&quot;coordinates&quot;: [136.0368155690029, 35.480748173742754], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;16&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.04038326404623, 35.47286221189924], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;17&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.03184627947752, 35.47182452775529], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;18&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [136.02948905239475, 35.4787248757293], &quot;type&quot;: &quot;Point&quot;}, &quot;id&quot;: &quot;19&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}], &quot;type&quot;: &quot;FeatureCollection&quot;});\n",
"\n",
" \n",
" \n",
"\n",
" function geo_json_0df347506c007dfd09011b5199c85315_onEachFeature(feature, layer) {\n",
" layer.on({\n",
" });\n",
" };\n",
" var geo_json_0df347506c007dfd09011b5199c85315 = L.geoJson(null, {\n",
" onEachFeature: geo_json_0df347506c007dfd09011b5199c85315_onEachFeature,\n",
" \n",
" });\n",
"\n",
" function geo_json_0df347506c007dfd09011b5199c85315_add (data) {\n",
" geo_json_0df347506c007dfd09011b5199c85315\n",
" .addData(data)\n",
" .addTo(map_b395211118785ad08c7e836e74aad94a);\n",
" }\n",
" geo_json_0df347506c007dfd09011b5199c85315_add({&quot;features&quot;: [{&quot;geometry&quot;: {&quot;coordinates&quot;: [[[136.01222526987345, 35.48519866493043], [136.0116077883299, 35.48517396266875], [136.01099625460066, 35.48510009382534], [136.01039655917603, 35.48497776993169], [136.00981447845163, 35.484808169251586], [136.00925561906038, 35.484592925425495], [136.00872536384367, 35.48433411172637], [136.0082288199839, 35.48403422107915], [136.0077707697993, 35.483696142036905], [136.00735562467446, 35.48332313094549], [136.00698738257253, 35.482918780565484], [136.00666958953653, 35.482486985454216], [136.00640530555194, 35.48203190444211], [136.0061970750979, 35.4815579205652], [136.0060469026701, 35.48106959884038], [136.0059562335102, 35.48057164229053], [136.00592593972578, 35.48006884664343], [136.0059563119333, 35.479566054141216], [136.00604705650252, 35.47906810690519], [136.00619729842796, 35.4785798003052], [136.00640558979723, 35.4781058367829], [136.00666992377361, 35.47765078057295], [136.00698775395688, 35.47721901375825], [136.00735601893402, 35.47681469408182], [136.00777117178285, 35.47644171492106], [136.00822921424347, 35.47610366780946], [136.008725735228, 35.475803807865816], [136.0092559532975, 35.47554502246326], [136.00981476269692, 35.475329803439315], [136.0103967825061, 35.47516022311383], [136.0109964084331, 35.47503791434501], [136.011607866753, 35.474964054815416], [136.01222526987345, 35.474939355698645], [136.01284267299394, 35.474964054815416], [136.0134541313138, 35.47503791434501], [136.01405375724082, 35.47516022311383], [136.01463577705, 35.475329803439315], [136.0151945864494, 35.47554502246326], [136.0157248045189, 35.475803807865816], [136.01622132550344, 35.47610366780946], [136.0166793679641, 35.47644171492106], [136.01709452081292, 35.47681469408182], [136.01746278579003, 35.47721901375825], [136.0177806159733, 35.47765078057295], [136.0180449499497, 35.4781058367829], [136.01825324131892, 35.4785798003052], [136.01840348324438, 35.47906810690519], [136.01849422781362, 35.479566054141216], [136.01852460002112, 35.48006884664343], [136.0184943062367, 35.48057164229053], [136.01840363707683, 35.48106959884038], [136.01825346464904, 35.4815579205652], [136.01804523419497, 35.48203190444211], [136.01778095021038, 35.482486985454216], [136.01746315717438, 35.482918780565484], [136.01709491507245, 35.48332313094549], [136.01667976994761, 35.483696142036905], [136.016221719763, 35.48403422107915], [136.01572517590327, 35.48433411172637], [136.01519492068653, 35.484592925425495], [136.01463606129528, 35.484808169251586], [136.0140539805709, 35.48497776993169], [136.01345428514625, 35.48510009382534], [136.012842751417, 35.48517396266875], [136.01222526987345, 35.48519866493043]]], &quot;type&quot;: &quot;Polygon&quot;}, &quot;id&quot;: &quot;0&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [[[136.0578286718578, 35.4831247446687], [136.0578286718578, 35.47183348684949], [136.06437978818224, 35.47183348684949], [136.06437978818224, 35.4831247446687], [136.0578286718578, 35.4831247446687]]], &quot;type&quot;: &quot;Polygon&quot;}, &quot;id&quot;: &quot;1&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}, {&quot;geometry&quot;: {&quot;coordinates&quot;: [[[136.03467715397437, 35.4863357301668], [136.02551831173457, 35.48058693956742], [136.02621794551715, 35.468829123648746], [136.03556759696932, 35.464270565136346], [136.04529886685083, 35.471263702453754], [136.0442176146413, 35.481104865483246], [136.03467715397437, 35.4863357301668]]], &quot;type&quot;: &quot;Polygon&quot;}, &quot;id&quot;: &quot;2&quot;, &quot;properties&quot;: {}, &quot;type&quot;: &quot;Feature&quot;}], &quot;type&quot;: &quot;FeatureCollection&quot;});\n",
"\n",
" \n",
" \n",
" map_b395211118785ad08c7e836e74aad94a.fitBounds(\n",
" [[35.464270565136346, 136.00592593972578], [35.4863357301668, 136.06437978818224]],\n",
" {}\n",
" );\n",
" \n",
" \n",
" var layer_control_1dddeac5719436f03a8dd592fa6f0d44 = {\n",
" base_layers : {\n",
" &quot;openstreetmap&quot; : tile_layer_f5ee5db0d1d261864c0ee11cdadbaa17,\n",
" },\n",
" overlays : {\n",
" &quot;macro_element_d178d4a4a2a26476a571bcec6f5974cb&quot; : geo_json_d178d4a4a2a26476a571bcec6f5974cb,\n",
" &quot;macro_element_5f9446a78a3f897aa5b77f16f894d213&quot; : geo_json_5f9446a78a3f897aa5b77f16f894d213,\n",
" &quot;macro_element_cb1d463d7a588f06b7b62d77fb006059&quot; : geo_json_cb1d463d7a588f06b7b62d77fb006059,\n",
" &quot;macro_element_0df347506c007dfd09011b5199c85315&quot; : geo_json_0df347506c007dfd09011b5199c85315,\n",
" },\n",
" };\n",
" L.control.layers(\n",
" layer_control_1dddeac5719436f03a8dd592fa6f0d44.base_layers,\n",
" layer_control_1dddeac5719436f03a8dd592fa6f0d44.overlays,\n",
" {&quot;autoZIndex&quot;: true, &quot;collapsed&quot;: true, &quot;position&quot;: &quot;topright&quot;}\n",
" ).addTo(map_b395211118785ad08c7e836e74aad94a);\n",
" \n",
"&lt;/script&gt;\n",
"&lt;/html&gt;\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
],
"text/plain": [
"<folium.folium.Map at 0x7f3cdfb00b50>"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# gdf_polygonsの各Polygonのいずれかに含まれる地点のみを残す\n",
"\n",
"gdf_points_filtered1 = gdf_points_unfiltered[gdf_points_unfiltered.within(gdf_polygons.geometry[0])]\n",
"display(gdf_points_filtered1)\n",
"\n",
"gdf_points_filtered2 = gdf_points_unfiltered[gdf_points_unfiltered.within(gdf_polygons.geometry[1])]\n",
"display(gdf_points_filtered2)\n",
"\n",
"gdf_points_filtered3 = gdf_points_unfiltered[gdf_points_unfiltered.within(gdf_polygons.geometry[2])]\n",
"display(gdf_points_filtered3)\n",
"\n",
"# 地図上で可視化\n",
"m3 = folium.Map(control_scale=True)\n",
"folium.LatLngPopup().add_to(m3)\n",
"\n",
"_points_filtered1 = (\n",
" folium.GeoJson(\n",
" gdf_points_filtered1.to_json(),\n",
" ).add_to(m3)\n",
")\n",
"_points_filtered2 = (\n",
" folium.GeoJson(\n",
" gdf_points_filtered2.to_json(),\n",
" ).add_to(m3)\n",
")\n",
"_points_filtered3 = (\n",
" folium.GeoJson(\n",
" gdf_points_filtered3.to_json(),\n",
" ).add_to(m3)\n",
")\n",
"_polygons = folium.GeoJson(gdf_polygons.to_json()).add_to(m3)\n",
"\n",
"m3.fit_bounds(_polygons.get_bounds())\n",
"folium.LayerControl().add_to(m3)\n",
"m3"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"↑各Polygonに含まれる地点のみを残したGeoDataFrameをそれぞれ生成できている"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<Axes: >"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAj8AAAF1CAYAAAAHh4ugAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABba0lEQVR4nO3de1yUdd438M/FAAMCM1gIDMzIeEJTlrJ1N7FYwVZXKkIRO2geNte7nvZ5reze1pbZveqTh+quhVc90clc3c3wWUV3b03MNsabNAtb2JvaXSXjJI5S5jADcrzmev4wZhkZYC4E5nB93q/XvGqu6+L6/X44zHznd/j+BEmSJBAREREpRICnK0BEREQ0khj8EBERkaIw+CEiIiJFYfBDREREisLgh4iIiBSFwQ8REREpCoMfIiIiUpRAT1fAm9jtdpw/fx4REREQBMHT1SEiIiI3SJIEm82GuLg4BAQM3K/D4KeH8+fPw2AweLoaRERENAj19fXQ6/UDXsfgp4eIiAgAV395Go3Gw7UhIiIid1itVhgMBsfn+EAY/PTQPdSl0WgY/BAREfkYd6escMIzERERKQqDHyIiIlIUBj9ERESkKAx+iIiISFEY/BAREZGiyAp+CgoKkJyc7FgNlZKSgsOHDzvOr1y5EoIgOD1mzpzp9v0LCwshCAIWLFjgdNxmsyE3NxcJCQkIDQ3FrFmzUFZW5nTN9ZZNREREyiBrqbter8e2bdswceJEAMDOnTuRlZWF8vJyTJs2DQAwf/587Nixw/EzwcHBbt27trYWa9euRWpqaq9zP/vZz/D555/j97//PeLi4vCHP/wBP/7xj/H3v/8d8fHxjusGWzYREREph6zgJzMz0+n55s2bUVBQgJMnTzqCH7VajdjYWFmVEEURS5cuxcaNG1FaWgqLxeI419rain379uFPf/oTfvSjHwEANmzYgAMHDqCgoADPPvus49rBlE1ENBxEUURpaSnMZjN0Oh1SU1OhUqk8XS0iwnXM+RFFEYWFhWhpaUFKSorjuMlkQnR0NBITE7F69Wo0NjYOeK9NmzZhzJgxWLVqVa9zXV1dEEURISEhTsdDQ0Px0UcfOR2TW3Z7ezusVqvTg4iGjyiKMJlMePfdd2EymSCKoqerNCyKiopgNBqRnp6OJUuWID09HUajEUVFRZ6uGhEBgCTT//zP/0hhYWGSSqWStFqtdOjQIce5wsJC6eDBg1JlZaX05z//Wbr55puladOmSW1tbX3e76OPPpLi4+Olr7/+WpIkSVqxYoWUlZXldE1KSoo0e/ZsqaGhQerq6pJ+//vfS4IgSImJiddV9m9+8xsJQK9HU1OT3F8L0XXr6uqSSkpKpN27d0slJSVSV1eXp6s0pPbt2yfp9XqnvzW9Xi/t27fP01UbUvv27ZMEQej1viIIgiQIgs+0199fj+RfmpqaZH1+yw5+2tvbpaqqKqmsrEx68sknpaioKOmLL75wee358+eloKCgPv/YrVarZDQapffee89xzFXw8+WXX0o/+tGPJACSSqWSfvCDH0hLly6Vbrrppj7rOVDZkiRJbW1tUlNTk+NRX1+v6ODHH97sfLUN/h4Y+EtAMJCurq5e/47XttdgMHj969LfX4/kf4Y9+LnWnXfeKf3bv/1bn+cnTpwobdu2zeW58vJyR0DT/eh+M1SpVNKXX37pdH1zc7N0/vx5SZIk6b777pPuuuuufuvWX9muyP3l+RN/eLPz1Tb4e2DgLwGBO0pKSvpsZ89HSUmJp6vaJ39/PZJ/kvv5fd15fiRJQnt7u8tzly5dQn19PXQ6ncvzU6ZMQWVlJSoqKhyPe++9F+np6aioqIDBYHC6PiwsDDqdDpcvX8aRI0eQlZXVZ70GKpv+paioCDk5OTh37pzT8YaGBuTk5PjEPAVfbYMoilizZg0kSep1rvtYbm6uT8+NKS0t7fXv0pMkSaivr0dpaekI1mp4mM3mIb1upCnh9UgEyJzwvG7dOpSWlqKmpgaVlZV4+umnYTKZsHTpUjQ3N2Pt2rX4+OOPUVNTA5PJhMzMTERFRWHhwoWOeyxfvhxPPfUUACAkJARJSUlOj8jISERERCApKcmxVP3IkSMoLi5GdXU1jh49ivT0dEyePBk//elPAcDtsqk3f3iz8+U2KCEw8PWAQA53v2x565cyJbweiQCZwc/FixexbNkyTJ48GXfeeSc++eQTFBcXY+7cuVCpVKisrERWVhYSExOxYsUKJCYm4uOPP0ZERITjHnV1dbLf5JqamvDzn/8cU6ZMwfLly3HHHXfg/fffR1BQEAC4XTb15g9vdr7cBiUEBr4eEMiRmpoKvV4PQRBcnhcEAQaDwWU+M2+ghNcjESAzz8/27dv7PBcaGoojR44MeA+TydTv+d/97ne9jt1333247777rrts6s0f3ux8uQ1KCAy6A4KGhgaXvXOCIECv13ttQCCHSqVCfn4+cnJyIAiCU3u7A6K8vDyvzfejhNcjEcC9vRTPH97sfLkNvt5T4I7ugABAr3b6QkAgV3Z2Nvbu3euUfR64miF/7969yM7O9lDNBqaE16M7lJKPStGGeMK1T1Piaq/ulTiuVnfAR1bi+HobulfXXFt/f1td42o1nsFg8Jv2XcuX0y4o4fXYF19dNap0I77U3Z8oMfiRJP94s/P1NiglMPDVgEBplPJ6vBaX+fsuuZ/fgiS5GIRXKKvVCq1Wi6amJmg0Gk9XZ0QVFRVhzZo1ThOHDQYD8vLyvLqbvidfbwP3giJvorTXoyiKMBqNfS6e6J6bVl1d7de/B18l9/ObwU8PSg5+AP94s/OHNhDRyDOZTEhPTx/wupKSEqSlpQ1/hUgWuZ/fslZ7kX9TqVQ+/0ftD20gopHny6tGST6u9iIiIsXz5VWjJB+DHyIiUjwu81cWBj9ERKR4SstHpXQMfoiIiODbCSpJHq726kHpq72IiIirRn0RV3sRERFdB64a9X8c9iIiIiJFYfBDREREisLgh4iIiBSFwQ8REREpCoMfIiIiUhQGP0RERKQoDH6IiIhIURj8EBERkaIw+CEiIiJFYYZnIj/D1PxERP1j8EPkR4qKirBmzRqcO3fOcUyv1yM/P5+bMhIRfYfDXkR+oqioCDk5OU6BDwA0NDQgJycHRUVFHqoZEZF3YfBD5AdEUcSaNWsgSVKvc93HcnNzIYriSFeNiMjrMPgh8gOlpaW9enx6kiQJ9fX1KC0tHcFaERF5JwY/RH7AbDYP6XVERP5MVvBTUFCA5ORkaDQaaDQapKSk4PDhw47zK1euhCAITo+ZM2e6ff/CwkIIgoAFCxY4HbfZbMjNzUVCQgJCQ0Mxa9YslJWVOV0jSRI2bNiAuLg4hIaGIi0tDV988YWc5hH5LJ1ON6TXERH5M1nBj16vx7Zt23Dq1CmcOnUKc+bMQVZWllOQMX/+fJjNZsfjvffec+vetbW1WLt2LVJTU3ud+9nPfoajR4/i97//PSorKzFv3jz8+Mc/RkNDg+Oa559/Hi+99BJeeeUVlJWVITY2FnPnzoXNZpPTRCKflJqaCr1eD0EQXJ4XBAEGg8Hl3xcRkeJI12n06NHSW2+9JUmSJK1YsULKysqSfY+uri7p9ttvl956661e97hy5YqkUqmkgwcPOv3MzTffLD399NOSJEmS3W6XYmNjpW3btjnOt7W1SVqtVnrttdfcrkdTU5MEQGpqapLdBiJP27dvnyQIgiQIggTA8eg+tm/fPk9XkYhoWMj9/B70nB9RFFFYWIiWlhakpKQ4jptMJkRHRyMxMRGrV69GY2PjgPfatGkTxowZg1WrVvU619XVBVEUERIS4nQ8NDQUH330EQCguroaFy5cwLx58xzn1Wo1Zs+ejRMnTvRZbnt7O6xWq9ODyFdlZ2dj7969iI+Pdzqu1+uxd+9e5vkhIvqO7CSHlZWVSElJQVtbG8LDw7F//35MnToVAJCRkYHFixcjISEB1dXVeOaZZzBnzhx89tlnUKvVLu93/PhxbN++HRUVFS7PR0REICUlBf/n//wf3HTTTYiJicG7776LTz75BJMmTQIAXLhwAQAQExPj9LMxMTGora3tsy1bt27Fxo0b5f4KiLxWdnY2srKymOGZiKgfsoOfyZMno6KiAhaLBfv27cOKFStw7NgxTJ06Fffff7/juqSkJMyYMQMJCQk4dOiQy2+dNpsNDz30EN58801ERUX1Webvf/97PPzww4iPj4dKpcKtt96KJUuW4K9//avTddfOd5Akqc85EADw1FNP4Ve/+pXjudVqhcFgGPB3QOTNVCoV0tLSPF0NIiKvJTv4CQ4OxsSJEwEAM2bMQFlZGfLz8/H666/3ulan0yEhIQFVVVUu73X27FnU1NQgMzPTccxut1+tWGAgTp8+jQkTJmDChAk4duwYWlpaYLVaodPpcP/992PcuHEAgNjYWABXe4B6rmZpbGzs1RvUk1qt7rNHioiIiPzTdef5kSQJ7e3tLs9dunQJ9fX1fS6vnTJlCiorK1FRUeF43HvvvUhPT0dFRUWvXpiwsDDodDpcvnwZR44cQVZWFgBg3LhxiI2NxdGjRx3XdnR04NixY5g1a9b1NpGIiIj6IIoiTCYT3n33XZhMJp/IJC+r52fdunXIyMiAwWCAzWZDYWEhTCYTiouL0dzcjA0bNmDRokXQ6XSoqanBunXrEBUVhYULFzrusXz5csTHx2Pr1q0ICQlBUlKSUxmRkZEA4HT8yJEjkCQJkydPxpdffonHH38ckydPxk9/+lMAV4e7cnNzsWXLFkyaNAmTJk3Cli1bMGrUKCxZsmSwvxsiIiLqh69upiwr+Ll48SKWLVsGs9kMrVaL5ORkFBcXY+7cuWhtbUVlZSV27doFi8UCnU6H9PR07NmzBxEREY571NXVISBAXodTU1MTnnrqKZw7dw433HADFi1ahM2bNyMoKMhxzRNPPIHW1lY89thjuHz5Mm677Ta8//77TmUTERHR0OjeTFm6Zk/B7s2UvXmVqSBdW2sFs1qt0Gq1aGpqgkaj8XR1iIiIvJIoijAajX3uKSgIAvR6Paqrq0dktancz2/u7UVERESy+Ppmygx+iIiISBZf30yZwQ8RERHJ4uubKTP4ISIiIll8fTNlBj9EREQki0qlQn5+PoDeuyt0P8/Ly/ParXUY/BCRT/LFxGpE/sSXN1PmUvceuNSdyDf4amI1In8kiqLHN1OW+/nN4KcHBj/u8YYXOilXX4nVurvavf0bJxENPeb5oWFVVFQEo9GI9PR0LFmyBOnp6TAajSgqKvJ01UgBRFHEmjVregU+ABzHcnNzOQRGRP1i8ENu6/7GfW1iq+5U5gyAaLj5emI1IvIODH7ILfzGTd7A1xOrEZF3YPBDbuE3bvIGvp5YjYYXVwCSu2Tt6k7KxW/c5A26E6s1NDS47IXs3kzRWxOrjQSlLkjgCkCSgz0/5BZ+4yZv4OuJ1YabUhckcD4iycWl7j1wqXvfRFGE0Wgc8Bt3dXW1Yj94aOS4+pZvMBiQl5en2G/5Sk0B0P3e1NewPN+blIF5fq4Dg5/+db+5AnB6g/X3N1fyTkod3nFFyQGAyWRCenr6gNeVlJQgLS1t+CtEHsE8PzRsfDmVOfkflUqFtLQ0PPjgg0hLS/O7D3U5lLwggfMRaTA44Zlkyc7ORlZWluK/cbPXgbyJkgMAzkekwWDwQ7J1f+NWKq4qIW+j5ACAKwBpMDjsRSQDV5WQN+oOAK5dAddNEAQYDAa/DAC4ApAGg8EPkZuY5dq/tXbZPV2FQVN6AMD5iCQXV3v1wNVe1B+uKvFfVU3tOFjbDENYEOaPDUd4kG9+L1R6CgDOxVMuuZ/fnPND5CYlTyr1V3ZJwn+br+DkxVYAwJfWDrz1j8uYqw/DtBtCPFw7+ZS+IEHp8xHJfQx+iNyk5Eml/qil044/1dhQ19zpdLxNlPBftc04benATwzhCPOxXiAGAEQD862/aiIPUvKkUn9T39yJHactvQKfns40deCtf17GPy+3j2DNiGgkMPghcpPSJ5X6i08bW/FuVROaOwee4NzaJeFAjQ0Hqq0+PSGaiJwx+CGSgatKfFe7aMf+ais+bGiB3DDmn5arc4HOWNgLROQPZAU/BQUFSE5OhkajgUajQUpKCg4fPuw4v3LlSgiC4PSYOXOm2/cvLCyEIAhYsGCB0/Guri6sX78e48aNQ2hoKMaPH49NmzbBbv/XW9j1lk3kruzsbNTU1KCkpAS7d+9GSUkJqqurGfh4sa9bu7DzdBNOWzoGfY+WLglF1Tb8V40NbewFIvJpsiY86/V6bNu2DRMnTgQA7Ny5E1lZWSgvL8e0adMAAPPnz8eOHTscPxMcHOzWvWtra7F27VqX8yWee+45vPbaa9i5cyemTZuGU6dO4ac//Sm0Wi3WrFnjuG6wZRPJxUmlvuPzb9twpL4ZboxyueWLy+2otXVi/thwTNTyPYbIF8kKfjIzM52eb968GQUFBTh58qQj+FGr1YiNjZVVCVEUsXTpUmzcuBGlpaWwWCxO5z/++GNkZWXh7rvvBgAYjUa8++67OHXqlNN1gymb/Edzpx3ftom43C7C1mlHp11Ch11ChyghQACCVQKCAwSoVQIig1UYrVbhhhAVggJcT2Am39Zll/CXhhaUf9M25Pdu7rJj71dWfO8GNe7UhyFExRkERL5k0EvdRVHEH//4R7S0tCAlJcVx3GQyITo6GpGRkZg9ezY2b96M6Ojofu+1adMmjBkzBqtWrXK56/Add9yB1157DWfOnEFiYiL+9re/4aOPPkJeXp7TdXLLbm9vR3v7v8bwrVarm60nTxMlCeaWLtQ1d6KuuRPmli602weXrzMyOACG8CCMDQ9CQkQQNMGcsOzrmjpE7K+24cKVrmEtp/Lbq71AGWPDMU7DXiAiXyE7+KmsrERKSgra2toQHh6O/fv3Y+rUqQCAjIwMLF68GAkJCaiursYzzzyDOXPm4LPPPoNarXZ5v+PHj2P79u2oqKjos8xf//rXaGpqwpQpU6BSqSCKIjZv3owHH3zQcc1gyt66dSs2btwo91dAHiJJEuqaO/HF5XactnSgXRya5OSWDjss37aj8turgXB0qArTRqsxdbQaEQyEfM7Zpg78V60NbUP0+hiItdOOPWetuPlGNebEh0HNXiAiryd7e4uOjg7U1dXBYrFg3759eOutt3Ds2DFHANST2WxGQkICCgsLXU4GtdlsSE5OxquvvoqMjAwAVycuWywWHDhwwHFdYWEhHn/8cbzwwguYNm0aKioqkJubi5deegkrVqxwWc+BygZc9/wYDAZub+Fl2rrs+Os3bSj/pg22oZq44QYBQEJEEH4YHYrx/Fbv9SRJQqn5Ck58l63ZEzTBAbhrbDiMEXy9EI2kYd/eIjg42DHhecaMGSgrK0N+fj5ef/31XtfqdDokJCSgqqrK5b3Onj2Lmpoap7lE3Su4AgMDcfr0aUyYMAGPP/44nnzySTzwwAMAgO9973uora3F1q1b+wx+BiobuDpHqK9eIfK8lk47Pm1sRfk3begY5JDW9ZAA1Ng6UWPrREyoCikxozA5MrjPJIfkOVe67PhzjQ01tr6TFo4Ea4cdhV9acWtUCNLiwhCs4muFyBtd9/YWkiQ59Z70dOnSJdTX1/eZ7n/KlCmorKx0OrZ+/XrYbDbk5+fDYDAAAK5cuYKAAOeuZJVK5bTUXW7Z5L1ESUJZYytOXGj1SNDjysVWEQdqbNCNCsQ8fRh0YUGerhJ9p6GlE3+qtsE6gr2CA/nrN234ytqBuxMiYAjna4XI28gKftatW4eMjAwYDAbYbDYUFhbCZDKhuLgYzc3N2LBhAxYtWgSdToeamhqsW7cOUVFRWLhwoeMey5cvR3x8PLZu3YqQkBAkJSU5lREZGQkATsczMzOxefNmjB07FtOmTUN5eTleeuklPPzwwwDgdtnk/WpsHTh6rgWX2kRPV8Ul85Uu7DrThOQb1UiLC0NoIOd3eNKpr1uvJi30jhjZiaXDjt1VTfj+mBDMjgvjqkIiLyIr+Ll48SKWLVsGs9kMrVaL5ORkFBcXY+7cuWhtbUVlZSV27doFi8UCnU6H9PR07NmzBxEREY571NXV9erFGcjLL7+MZ555Bo899hgaGxsRFxeHRx55BP/xH/8B4GovkDtlk/cSJQmmhhaUfT30y5KHmgTgb5fa8ZW1E5nGCIzlN/sR1yFKOFxnwz+uI2nhSJAAnPq6DV9ZO3F3Qjji2WNI5BVkT3j2Z3InTNHQsLSL+FONDeZhXpY8HAQAd+hGYVZMKOcCjZBv2rqwv9rmtb2DfREA/DA6FKm6UQhkLxDRkBr2Cc9EQ6m+uRP7vrKO2LLkoSYBKDVfwfmWTiwYp+HQxjD7++V2FNc1e81cMDkkAJ80tuJLawfuGRvOeWNEHsTghzzmjKUdf66xocv3Psd6OWvtROGXTcgZr+E8oGEgShL+cq4Ffx2GbM0j7VKbiF1nmjAzJhR3xI6CigGz3xBFEaWlpTCbzdDpdEhNTYVKxVxh3ojv0uQRf7vUhv3V/hH4dGto6cI7VU2wdfrWcIy3s3aIeOdMk18EPt0kAB9fbMXvTluGPQs1jYyioiIYjUakp6djyZIlSE9Ph9FoRFFRkaerRi4w+KER98/vhi78KO5x+KZNxP/70spdv4dItbUDO05bcN5PA4Sv20TsOm1BqbkFIqdf+qyioiLk5OTg3LlzTscbGhqQk5PDAMgLccJzD5zwPPxqbR34f2et8NEpPm7ThwXigYlaTmwdJEmScOJiKz4yX/HLINmVmFAV7k6IQHQoZyP4ElEUYTQaewU+3QRBgF6vR3V1NYfAhpHcz2/2/NCI+bq1C0Vf2fw+8AGAcy1d+HONzdPV8Emt3+2YXqqgwAe4mkhz52kLTly4Aju/k/qM0tLSPgMf4GogX19f73LTbvIcBj80IjrtEv5UYxv0zuu+6ExTBz5t9Nw+U77IfKUTO05bcNbq2W0qPEWUgP82X8HvzzThm1b/HOrzN2azeUivo5HB/lUaEe/XN+MbH8vLMhRM51tgCAvksmY3lH/Tig/OtSiiZ3Ag5itd2HHaglTdKNwWzRxS3szdLZRKmkehtvybYa6Na09Oj/JIud6MPT807P5xuR2V37re/83f2SXgTzU2dPATvU+ddgn/VWPDkXoGPj2JEmA6fwV/qGrCtwr84uArUlNToY2OA/oKUAUB2ph4GKfPHNmKUb8Y/NCwahPt+OBcs6er4VGWDjtOXLji6Wp4pW+/W+30xWVlBsfuaGjpwtv/vIxPG1vB9SneR6VS4Z7HN199cm0A9N3ze9Y+iwBOdvYqDH5oWH1kvoIWf0rmM0ifft2KS22cw9HTPy3t2Hnagq/ZqzGgLgn4sKEF71Q14XI7f1/eJunOe7D0+behHeM8BKaNjsPS599G0p33eKhm1BfO+aFh83VrFz7zgY1KR4JdAo6ea8EDE7WerorH2SUJJT6yia23OfddL1BaXBhujQrhXCAvknTnPZialoGa8pOwfnMRmqgYGKfPZI+Pl2LwQ8PmowvKWqo8kBpbJ+qbO2FQ8C7wtk4Rf6q24VwLe8EGq9N+NZA+benAXWPDEanmh6u3CFCpMH7G7Z6uBrmBw140LC61deGMpcPT1fA6Hyt47k+trQO/+6eFgc8QqWvuxNv/tKD8G6ZTIJKLwQ8Ni5MXW9nr48JXtk7F7eUkSRI+vnAFhV9aOf9riHXYJRypb8GeL5tg7eBcICJ3MfihIXel087VO/049bVyvqm3ddmx7ysbjiksW/NIq7Z1Yvs/LfjbJc6jInIHgx8acv+wtENBiZxlO2PpQKcCfkEXr3Thd6ct+NLK4c+R0C5KOFzXjD+ebYKtk71ARP1h8END7guFJjR0V4ddQlWTfwcEf7vUht+fscDSwd3tR9pZaye2/8OCz79lLxBRXxj80JCytIs4r7A5LYPxhZ9+MHXZJbxXa8PhumZweo/ntIkSDtY2Y99XVrR0MgAluhaXutOQOsshDrfU2joh2iWoAvwnT8vldhH7q61obOWQi7eoaurAuebLmGcIx02j1Z6uDpHXYPBDQ6quWZm7ccvVJQHnr3T5Tc6fqqZ2HKxtRruCNueyi6JPJLRrFSX8qcaG05Z2zDOEY1QgO/yJGPzQkJEkCfUMftxW5wcJD+2ShP8+fwUnG5Wzgg0APv/LQRx84Wk0NZ53HNNGx+Gexzd77VYG/7R0oK75Mn5iCMfkSPYCkbLxKwANmW/bRVzhRA+3+Xqg2NJpR+GXVkUGPu888bBT4AMATV+b8c4TD+Pzvxz0UM0GdqVLwv5qG6qauCiBlI3BDw2Zb7hBpSyXfPj3Vd/ciR3/tChumNMuijj4wtOAq93Vvzt28D/Xwy56979tUzsnQZOyMfihIfOtD3+Ye4Kt0+6T+X4+uXgF71Y1oblLeR+gNeUne/X4OJEkNF1sQE35yZGr1CC0KPDfjqgnzvmhIfNtO4Mfub5tExEzyjf+DNtFO96ra8ZpBe/ZZv3m4pBe5ykMfkjp2PNDQ8bKhHayWX0oE+/Ji62KDnwAQBMVM6TXeQpz/5DSyQp+CgoKkJycDI1GA41Gg5SUFBw+fNhxfuXKlRAEwekxc+ZMt+9fWFgIQRCwYMECp+NdXV1Yv349xo0bh9DQUIwfPx6bNm2C3f6vP2BJkrBhwwbExcUhNDQUaWlp+OKLL+Q0j65Thw8O4Xhahw8tDQ/0o5xEg2WcPhPa6DhA6ON3IQjQxsTDON399z1P4MIEUjpZwY9er8e2bdtw6tQpnDp1CnPmzEFWVpZTkDF//nyYzWbH47333nPr3rW1tVi7di1SU1N7nXvuuefw2muv4ZVXXsE//vEPPP/883jhhRfw8ssvO655/vnn8dJLL+GVV15BWVkZYmNjMXfuXNhsNjlNpOvA4Ec+X/qdBTH4QYBKhXse33z1ybUB0HfP71n7rFfm++mJPT+kdLKCn8zMTNx1111ITExEYmIiNm/ejPDwcJw8+a/JfWq1GrGxsY7HDTfcMOB9RVHE0qVLsXHjRowfP77X+Y8//hhZWVm4++67YTQakZOTg3nz5uHUqVMArvb65OXl4emnn0Z2djaSkpKwc+dOXLlyBbt375bTRLoOvtSL4S186XcWzOAHAJB05z1Y+vzb0I7ROR3XRsdh6fNve22en56ucM4PKdygZ1qKoog//vGPaGlpQUpKiuO4yWRCdHQ0IiMjMXv2bGzevBnR0dH93mvTpk0YM2YMVq1ahdLS0l7n77jjDrz22ms4c+YMEhMT8be//Q0fffQR8vLyAADV1dW4cOEC5s2b5/gZtVqN2bNn48SJE3jkkUdcltve3o729n/lu7BarXJ+BUSKEqxi8NMt6c57MDUtwycyPLvSJV2dwK5WcdonKZPs4KeyshIpKSloa2tDeHg49u/fj6lTpwIAMjIysHjxYiQkJKC6uhrPPPMM5syZg88++wxqteuMosePH8f27dtRUVHRZ5m//vWv0dTUhClTpkClUkEURWzevBkPPvggAODChQsAgJgY50mGMTExqK2t7fO+W7duxcaNG+U0n/rBngH5fGkoif++zgJUKoyfcbunqzFoLZ0S1H3EaqIoorS0FGazGTqdDqmpqVD5SGBH5A7Zwc/kyZNRUVEBi8WCffv2YcWKFTh27BimTp2K+++/33FdUlISZsyYgYSEBBw6dAjZ2dm97mWz2fDQQw/hzTffRFRUVJ9l7tmzB3/4wx+we/duTJs2DRUVFcjNzUVcXBxWrFjhuE64ZgxekqRex3p66qmn8Ktf/crx3Gq1wmAwuPV7oN6C2DMgmy/1pjD48S8tXXbcgN4BTVFREdasWYNz5845jun1euTn57t8HyfyRbKDn+DgYEycOBEAMGPGDJSVlSE/Px+vv/56r2t1Oh0SEhJQVVXl8l5nz55FTU0NMjMzHce6V3AFBgbi9OnTmDBhAh5//HE8+eSTeOCBBwAA3/ve91BbW4utW7dixYoViI2NBXC1B0in+9c4fGNjY6/eoJ7UanWfPVIkHz8c5fOl35kvBWo0MFe5foqKipCTkwPpmgzWDQ0NyMnJwd69exkAkV+47gFfSZKc5s30dOnSJdTX1zsFJD1NmTIFlZWVqKiocDzuvfdepKeno6KiwtELc+XKFQQEOFdVpVI5AqVx48YhNjYWR48edZzv6OjAsWPHMGvWrOttIrlJE8z5A3Jpgn1nKMGXAjUa2JVrVnyJoog1a9b0CnwAOI7l5uZC9PKtO4jcIavnZ926dcjIyIDBYIDNZkNhYSFMJhOKi4vR3NyMDRs2YNGiRdDpdKipqcG6desQFRWFhQsXOu6xfPlyxMfHY+vWrQgJCUFSUpJTGZGRkQDgdDwzMxObN2/G2LFjMW3aNJSXl+Oll17Cww8/DODqcFdubi62bNmCSZMmYdKkSdiyZQtGjRqFJUuWDPZ3QzLd0NcEAuqTL/3OgoaxqnZR9NnJw77q2p6f0tJSp6Gua0mShPr6epSWliItLW2Ya+cbuudGVXx8hq9bHyMr+Ll48SKWLVsGs9kMrVaL5ORkFBcXY+7cuWhtbUVlZSV27doFi8UCnU6H9PR07NmzBxEREY571NXV9erFGcjLL7+MZ555Bo899hgaGxsRFxeHRx55BP/xH//huOaJJ55Aa2srHnvsMVy+fBm33XYb3n//faeyaXj50ge5NwgPDPCpoaTh6vn5/C8HcfCFp532zNJGx+Gexzf7xLJxX9XS6dzDYzab3fo5d6/zd67mRvF16zsEyVUfp0JZrVZotVo0NTVBo9F4ujo+5+vWLmz/p8XT1fAZY8ODsGSS1tPVcJskSXiu4tKQ3vPzvxzEO0883HuX9O8WKvhK3hxfNEkbjEXj//U+ZzKZkJ6ePuDPlZSUKL7np6+5Ud76un1yet8LivyF3M9vTtKgIRMVokKID/VkeJo+3Dc2NO0mCAKChvAdwy6KOPjC070DH8Bx7OB/roedc0yGxbWJDlNTU6HX6/tcISsIAgwGg8ss/ErS39wovm59B4MfGjKCIEAfHuTpaviMsT74uxrKoa+a8pNOQ129SBKaLjagpvxk39fQoF27xYVKpUJ+fj6A3mlDup/n5eUpPt/PQHOj+Lr1DQx+aEj54ge6J6gEID7M935XQ5mU0frNxSG9juRxtblpdnY29u7di/j4eKfjer2ey9y/4+6cJ75uvZtv9bvToI1UxtbxmiB82DDkt/U7hvAgn8ru3G0oJ2hrovrOwTWY60ieDruETrvU63WYnZ2NrKwsZnjuQ1+pW67F1613Y/CjACOZsTUqJBDRoSo0tnK8uz9TR/tmcs2hHPYyTp8JbXQcmr42u573IwjQRsfBOH3mkJVJzlo67Yh0sUpTpVIpflJzX7rnRjU0NLie98PXrU/gsJef616VcO0YdXfG1qKioiEvc5qPfrCPlEABmBwZ3O81oijCZDLh3Xffhclk8prEckMZ/ASoVLjn8c1Xn1w7yfa75/esfZZ5U4aRqyzP1L/+5kbxdes7GPz4MU9lbJ16gxq+N6AzciZpg/vdTbuoqAhGoxHp6elYsmQJ0tPTYTQahyVQlWuo8xIl3XkPlj7/NrRjnIcStNFxXrdc2B9dO+mZ3NPX3Ci+bn0H8/z04G95fjyZt+NAtRX/tHQM6T39xUOTtH2uiusrf0j3N0xPTzo9VGtD5beut7O5Hszw7BnzDeG4JSrE09XwWd1zKV/z8gzPzPPTG+f8+DFPZmxNiRnF4McFQ3hgn4HPQD113du4ZGVleWzy6XBlpA5QqTB+xu3Dcm/qG4e9rk/33KiT2qSBLyavwmEvP+buqgR3r5MjZlQgxmt8byn3cEuJGdXnOTl7K3kKNzf1Lxz2IqVi8OPHPJ2x9Y7Yvj/olSg+LBDjNX1PdPaFvZUY/PgX9vyQUjH48WOeztgaFxaE5Bu48gsABABz9eH9XuPJnjp3+dJGrDQw9vyQUjH48XOeztiaFhfG/b4ATI8KQeyo/qfYebqnzh2+mJiR+uYqyzOREjD4UYDs7GzU1NSgpKQEu3fvRklJCaqrq0dk1dCooACkxYUNezneLCxQwI90Aw8Berqnzh3s+fEvHPYipWLwoxDdqxIefPBBpKWljegH6C1RIUjU9p/Uz18JADKNEQgJdO9PzdM9dQPhnB//0i5K6LKz94eUh0vdaUTcNTYcF09b0NShrG+aKbGhMEbIC/y8eW8lBj/+50qXHZpgz7+2iEYSgx8aESGBAcgyRmB3VROUMs0gITxo0CvevHVvJQ57+Z8WBj+kQBz2ohETFxaETGOEy60v7KKIr04dR0VxEb46dRx2L9nLarCiQ1XIHh+BgD4mL/sq9vz4n5ZOhXwbIeqBPT80oiZHqvETg4Ti+mbHsc//chAHX3gaTY3nHce00XG45/HNPrlHjjY4APdN0Pa7f5evYvDjfzjpmZTI/96dyevdEhWC9Lirw0Gf/+Ug3nniYafABwCavjbjnScexud/OeiJKg6aJigA90/QIjzIP/+0gjjs5XeuMNcPKZB/vkOT17stZhTmxYfi4AtPA6721v3u2MH/XO8zQ2BRISosS9TihhD/nT8RFCC4HLYk38WeH1IiBj/kMda/l/Xq8XEiSWi62ICa8pMjV6lB0ocF4qFJWkQoYOIoJz37F2Z5JiXinB/yGHf3qLJ+c3GYa3J9vj8mBHPiwqBSyHyY4AAB7SInyfoLZnkmJWLwQx7j7h5VmqiYYa7J4ISoBNw1NhyJkcrav4yTnv0Lh71IiRj8kMd072XV0NAAydW8H0GANjoOxukzR75yA0jUBuPH+jBF5kfhpGf/wuCHlIhzfshj+tvLCt89v2ftswjwgszG3UarA3DfBA2yx2sUGfgA7PnxN61dEuyuvnwQ+TFZwU9BQQGSk5Oh0Wig0WiQkpKCw4cPO86vXLkSgiA4PWbOdP9be2FhIQRBwIIFC5yOG43GXvcVBAE///nPh6xs8oy+9rIy6PX43e7/hwcXL4I3fNZqgwMwTx+GVVNGY7xGmfuUdWPw438474eURtawl16vx7Zt2zBx4kQAwM6dO5GVlYXy8nJMmzYNADB//nzs2LHD8TPBwe59UNTW1mLt2rVITU3tda6srAxij+XOn3/+OebOnYvFixc7XTfYssmzBtrLKlU3Cp82tqLyUjvaR3gTxuhQFX4YHYqpo9V+l615sLjay/+0dNr9NjcVkSuygp/MzEyn55s3b0ZBQQFOnjzpCH7UajViY2NlVUIURSxduhQbN25EaWkpLBaL0/kxY8Y4Pd+2bRsmTJiA2bNnOx0fTNnkHfrby0oTrMKP9eFIiwtDVVMHvrjcjq+sHRiuOCgiKABTR6sx7QY1okM5Le5a7PnxP5z3Q0oz6Hd2URTxxz/+ES0tLUhJSXEcN5lMiI6ORmRkJGbPno3NmzcjOjq633tt2rQJY8aMwapVq1BaWtrvtR0dHfjDH/6AX/3qV73micgtu729He3t7Y7nVqu137LJswIDBNw0Wo2bRqvR1mVHfUsn6mydqG3uxNetIgYbC6kDBOjDAzE2PAgJEcGICVX1noNEDuwg8D/M9UNKIzv4qaysREpKCtra2hAeHo79+/dj6tSpAICMjAwsXrwYCQkJqK6uxjPPPIM5c+bgs88+g1rtejnw8ePHsX37dlRUVLhV/oEDB2CxWLBy5Uqn44Mpe+vWrdi4caPbbSfvERIYgElaNSZpr/7bdtolXG4X8W2biG/bRTR32tFpl9Bhl9AhSggQALUqAEEBV/8bGRyAG9QqjA5RQRMUwGBHBg57+Z8r7PkhhREkl2uM+9bR0YG6ujpYLBbs27cPb731Fo4dO+YIgHoym81ISEhAYWEhsrOze5232WxITk7Gq6++ioyMDABXJy5bLBYcOHDAZfk/+clPEBwcjP/6r//qt54DlQ247vkxGAxoamqCRqPp9/5ESvXJxSsoOX/F09WgIfTD6FDMiQ/zdDV81rbybzxdhX49OT3K01UYdlarFVqt1u3Pb9k9P8HBwY4JzzNmzEBZWRny8/Px+uuv97pWp9MhISEBVVVVLu919uxZ1NTUOM0lstuvfgMJDAzE6dOnMWHCBMe52tpafPDBBygqKhqwngOVDVydI9RXrxARucaeH//DYS8aCaIo9rmwZaRd92xOSZKcek96unTpEurr6/vM5DtlyhRUVlY6HVu/fj1sNhvy8/NhMBiczu3YsQPR0dG4++67B6zXQGUT0eBwwrP/4bAXDbeioiKsWbMG586dcxzT6/XIz8/vc3RmOMkKftatW4eMjAwYDAbYbDYUFhbCZDKhuLgYzc3N2LBhAxYtWgSdToeamhqsW7cOUVFRWLhwoeMey5cvR3x8PLZu3YqQkBAkJSU5lREZGQkAvY7b7Xbs2LEDK1asQGCgc7XdLZuIrl8Qgx+/46+rvbypp0HJioqKkJOT0yuTf0NDA3JycrB3794RD4BkBT8XL17EsmXLYDabodVqkZycjOLiYsydOxetra2orKzErl27YLFYoNPpkJ6ejj179iAiIsJxj7q6OgQEyF8u8sEHH6Curg4PP/xwr3Mqlcqtsono+nHYy//447CXt/U0KJUoilizZo3LLYwkSYIgCMjNzUVWVtaIBqayJzz7M7kTpoiU6HxLJ3adafJ0NWgICQCeuOVGv1n12FdPQ3f7hrqngROe+2YymZCenj7gdSUlJX3menOH3M9vZuwgIlk458f/SLi6x5c/GKinAQByc3Oddg2g4WM2m4f0uqHC4IeIZOGwl3/yl3k/paWlTkNd15IkCfX19QMm1KWh4e6io5FenMTgh4hkYc+Pf/KX4MdbexqUKjU1FXq9vs8hVUEQYDAYXO7rOZwY/BCRLOz58U/+MunZW3salEqlUiE/Px8AegVA3c/z8vJGfBUegx8ikiVAEMD4Z/jYRRFfnTqOiuIifHXqOOwjNDelxU/m/HhrT4OSZWdnY+/evYiPj3c6rtfrPbLMHRiCJIdEpDzBKsFvJsh6k8//chAHX3gaTY3nHce00XG45/HNSLrznmEt218SHXb3NOTk5EAQBKeJz57saVC67OxsZGVleU3eJfb8EJFsnPcz9D7/y0G888TDToEPADR9bcY7TzyMz/9ycFjL95dhL8A7exroamCalpaGBx98EGlpaR4NQNnzQ0SyMfgZWnZRxMEXngZcpV2TJEAQcPA/12NqWgYChukDw196frp5W08DeRcGP0QkGyc9D62a8pO9enycSBKaLjagpvwkxs+4fVjq0NLpf8OY3T0NRNfisBcRycb9vYaW9ZuLQ3rdYPjLUncidzD4ISLZOOw1tDRRMUN63WD427AXUX8Y/BCRbBz2GlrG6TOhjY4D+tpbSxCgjYmHcfrMYauDKAFtDIBIIRj8EJFs3tLz46mcOEMtQKXCPY9vvvrk2gDou+f3rH122CY7d+PQl7KIogiTyYR3330XJpNJUfudccIzEcnmDcGPJ3PiDIekO+/B0uffdt2mtc+OSJtaOiXcGDLsxZAXKCoqwpo1a5z2QdPr9cjPz1dEKgAGP0QkW5CHh726c+JcuzS8OyfO0uff9tkAaGpaBmrKT8L6zUVoomJgnD5z2Ht8urHnRxmKioqQk5PjlAASABoaGpCTk6OIXEgc9iIi2TzZ8zNgThwAB/9zvU8PgY2fcTtumZ+N8TNuH7HAB+CkZyUQRRFr1qzpFfgAcBzLzc31+yEwBj9EJJsnJzzLyYlD8vhTlmdyrbS01Gmo61qSJKG+vh6lpaUjWKuRx2EvIpLNkz0/3pATx19x2Gtwnpwe5ekquM1sNg/pdb6KPT9EJJsngx9vyInjr/xlZ3fqm06nG9LrfBWDHyKSzZMTnr0hJ46/usJhL7+XmpoKvV7v2OH+WoIgwGAwIDU1dYRrNrIY/BCRbJ7s+fGWnDj+iMNe/k+lUiE/Px8AegVA3c/z8vL8fgNYBj9EJJun8/x058TRjnHumtdGx/nsMndvMCqQHwlKkJ2djb179yI+Pt7puF6vV8QydwAQJFfr3RTKarVCq9WiqakJGo3G09Uh8lrNnXa88vm3nq4G7KLosZw4/sYYEYSF4yKgVjEAUgpRFFFaWgqz2QydTofU1FSf7fGR+/nN1V5EJJune366defEoeuTdIMaGWPDoeprHhX5JZVKhbS0NE9XwyMY/BCRbEHsHPAbs2JC8aO4ME9Xg2hEMfghItkEQUBwgIAOO0fNfZUA4CeGcNwSxc28SHkY/BDRoAQFAB1cHOSTggKALKMGE7XBnq4KkUfI6rwuKChAcnIyNBoNNBoNUlJScPjwYcf5lStXQhAEp8fMme7n2igsLIQgCFiwYIHTcaPR2Ou+giDg5z//ueMaSZKwYcMGxMXFITQ0FGlpafjiiy/kNI+8jCiKMJlMePfdd2Eymfx+rxlf48ktLmjwRgUKWDJRy8CHFE1W8KPX67Ft2zacOnUKp06dwpw5c5CVleUUZMyfPx9ms9nxeO+999y6d21tLdauXesysVJZWZnTPY8ePQoAWLx4seOa559/Hi+99BJeeeUVlJWVITY2FnPnzoXNZpPTRPISRUVFMBqNSE9Px5IlS5Ceng6j0YiioiJPV42+4y2Tnsl9o9UBWJ4YCV1YkKerQuRRsoKfzMxM3HXXXUhMTERiYiI2b96M8PBwnDz5rw0E1Wo1YmNjHY8bbrhhwPuKooilS5di48aNGD9+fK/zY8aMcbrnwYMHMWHCBMyePRvA1V6fvLw8PP3008jOzkZSUhJ27tyJK1euYPfu3XKaSF6gqKgIOTk5vTbfa2hoQE5ODgMgLxHE4MenxIcFYlliJCLVvrmUmWgoDXrNhiiKKCwsREtLC1JSUhzHTSYToqOjkZiYiNWrV6OxsXHAe23atAljxozBqlWrBry2o6MDf/jDH/Dwww87slFWV1fjwoULmDdvnuM6tVqN2bNn48SJE33eq729HVar1elBniWKItasWQNX6ae6j+Xm5nIIzAuoOezlMxK1wXhgopZJDIm+I/svobKyEuHh4VCr1Xj00Uexf/9+TJ06FQCQkZGBd955Bx9++CFefPFFlJWVYc6cOWhvb+/zfsePH8f27dvx5ptvulX+gQMHYLFYsHLlSsexCxcuAABiYpw3MoyJiXGcc2Xr1q3QarWOh8FgcKsONHxKS0t79fj0JEkS6uvrUVpaOoK1IlfY8+Mbbo0KwcJxEfz3IupB9mqvyZMno6KiAhaLBfv27cOKFStw7NgxTJ06Fffff7/juqSkJMyYMQMJCQk4dOiQy3TZNpsNDz30EN58801ERUW5Vf727duRkZGBuLi4Xueu3adEkqQ+N28DgKeeegq/+tWvHM+tVisDIA8zm81Deh0NH0549n7pcaNwW8woT1eDyOvIDn6Cg4MxceJEAMCMGTNQVlaG/Px8vP76672u1el0SEhIQFVVlct7nT17FjU1NcjMzHQcs9uvrp0NDAzE6dOnMWHCBMe52tpafPDBB73mfMTGxgK42gOk0/1rr5/GxsZevUE9qdVqqNXqgZpMI6jnv99QXEfDhxOevZdKAO5OiMDU0Xx/I3LlugeAJUnqc1jr0qVLqK+v7/ODasqUKaisrERFRYXjce+99yI9PR0VFRW9emF27NiB6Oho3H333U7Hx40bh9jYWMcqMODq3KBjx45h1qxZ19lCGkmpqanQ6/V99tgJggCDweByVSCNLAY/3kmtEnDfBA0DH6J+yOr5WbduHTIyMmAwGGCz2VBYWAiTyYTi4mI0Nzdjw4YNWLRoEXQ6HWpqarBu3TpERUVh4cKFjnssX74c8fHx2Lp1K0JCQpCUlORURmRkJAD0Om6327Fjxw6sWLECgYHO1RYEAbm5udiyZQsmTZqESZMmYcuWLRg1ahSWLFkip4nkYSqVCvn5+cjJyYEgCE4Tn7sDory8PJ/dfM+fcNjL+2iCArB4ggZjQpm/lqg/sv5CLl68iGXLlsFsNkOr1SI5ORnFxcWYO3cuWltbUVlZiV27dsFisUCn0yE9PR179uxBRESE4x51dXUICJDf4fTBBx+grq4ODz/8sMvzTzzxBFpbW/HYY4/h8uXLuO222/D+++87lU2+ITs7G3v37sWaNWucJj/r9Xrk5eW5nD9GI48TaL1LdKgKiydoEBHELwZEAxEkV2uKFcpqtUKr1aKpqQkajWbI7iuKIkpLS2E2m6HT6ZCamsqeCzfw9+bdKi+14VBds6erQQCMEUFYOC4CahWXspMyyf38Zt/oMCsqKnLZg5Gfn88ejAGoVCqkpaV5uhrUBw57eYdpo9W4KyEcqn5WthKRM35NGEbMVEz+LJS9DB43KyYUmcYIBj5eiHsTejcOe/UwlMNeoijCaDT2mbBPEATo9XpUV1dzKId81lfWDhw914zL7dzefSQJAH5iCMctUSGergq5wB7/kSf385tf3YYJMxWTEozXBONnU0bjR7pRCOK7yYgICgAWjdcw8PFS7PH3DXy7GibMVExKoQoQMCt2FH5202hMjgz2dHX82qhAAUsmajFRy9+zN+LehL6Dwc8wYaZiUhptsAoLx2lw/wQNbuDO4UNutDoAyxMjoQsL8nRVqA/s8fcdXO01TLozFTc0NLj8FtA954eZiskdvrTsf5wmGKumBOHTxlacuHgFnZwOdN3iwwKxaLyGu7J7Ofb4+w7+JQ2T7kzFQO8NV5mpmOQoKiqC0WhEeno6lixZgvT0dBiNRq+eO6AKEJASOwqrORR23SZpg/HARC0DHx/AHn/fwb+mYdSdqTg+Pt7puF6vx969eznrnwbk65MnNd8NhT0wQYMbORQm261RIcgeF8Fs2j6CexP6Di5174EZnsmb+Fu6BFGSUNbYiuMXOBTmjrS4UZgZM8rT1SCZur+wAHC5NyG/+A4PuZ/fDH56GK7gh2gwTCYT0tPTB7yupKTEpzJhWztEfNjQgn9aOjxdFa+kEoC7x0Zg6g3cld1XucrzYzAYuDfhMOL2FkR+wl8nT2qCVVgwToMaWweOnmvBpTYu++2mVgnIHheBhAjOk/Jl2dnZyMrKYo+/F2PwQ+Sl/H3ypDEiGA9PCcKpxlYcv9CKDruyO6E1QQFYPEGDMaF8W/YH3JvQu3HCM5GXUsLkSZUg4LaYUVh9UyRuUvCqsOhQFZZN1jLwIRohDH6IvJSS0iVEBKuQNU6DByZqEBXi++2RwxgRhKWTtIgIUla7iTyJwQ+RF1NaugRjRDB+OiUS6XGjEKyA5d3TRquxeIIGahXfiolGEld79cDVXuStlJguwdYpoqThCv5+ud3TVRkWKTGhmB0X5ulqEPkFLnW/Dgx+iLxP7Xerwr7xk1VhAoB5hjBMjwr1dFWI/Ibcz2/2tRKRV0uICMbDUyIxJz7M54fCggKAReM1DHyIPIxLC4jI6wUIAn4YHYqpo9UoaWjBFz44FDYqUMDi8Rruyk7kBdjzQ0Q+IzwoAJnGCCyZpMUYH1oVNlodgOWJkQx8iLwEgx8i8jljw4Pw0ymRuDM+DGovHwqLDwvEssRIRHJjVyKvwWEvIvJJAYKAH0SH4iYvHgqbpA3GvUbuyk7kbdjzQ0Q+rXsobKmXDYXdGhWC7HEMfIi8EYMfIvILhp5DYSrPBhxpcaMwzxDe59YkRORZHPYiIr/RPRQ2dbQaJedb8Pm3IzsUphKAu8dGYOoN6hEtl4jkYc8PEfmdsKAA3JMwskNhapWA+yZoGPgQ+QBZwU9BQQGSk5Oh0Wig0WiQkpKCw4cPO86vXLkSgiA4PWbOnOn2/QsLCyEIAhYsWNDrXENDAx566CHceOONGDVqFG655RZ89tlnQ1Y2Efmf7qGwH+uHdyhMExSAhyZpkRCh3J3piXyJrGEvvV6Pbdu2YeLEiQCAnTt3IisrC+Xl5Zg2bRoAYP78+dixY4fjZ4KD3XszqK2txdq1a5Gamtrr3OXLl3H77bcjPT0dhw8fRnR0NM6ePYvIyEin6wZbNhH5rwBBwIwxobgpcniGwsaEqHDfBA0igr1nsjUR9U9W8JOZmen0fPPmzSgoKMDJkycdwY9arUZsbKysSoiiiKVLl2Ljxo0oLS2FxWJxOv/cc8/BYDA4BTZGo7HXfQZTNhEpQ/dQ2C03huD9c81obL3+vcISwoOQPT6Cu7IT+ZhB/8WKoojCwkK0tLQgJSXFcdxkMiE6OhqJiYlYvXo1GhsbB7zXpk2bMGbMGKxatcrl+T//+c+YMWMGFi9ejOjoaEyfPh1vvvlmr+vklt3e3g6r1er0ICL/pg8PwsrJkZh7nUNh00arcd9EDQMfIh8k+6+2srIS4eHhUKvVePTRR7F//35MnToVAJCRkYF33nkHH374IV588UWUlZVhzpw5aG/vu5v5+PHj2L59u8tgpttXX32FgoICTJo0CUeOHMGjjz6KX/ziF9i1a5fjmsGUvXXrVmi1WsfDYDDI/XUQkQ8KEAR8f0wo/u2m0fjeICYop8SEItMYARWXshP5JEGSJEnOD3R0dKCurg4WiwX79u3DW2+9hWPHjjkCoJ7MZjMSEhJQWFiI7OzsXudtNhuSk5Px6quvIiMjA8DVicsWiwUHDhxwXBccHIwZM2bgxIkTjmO/+MUvUFZWho8//thlPQcqG7ja89MzOLJarTAYDGhqaoJGo3Hr90FEvq+hpRPv1zfj4gBDYQKAeYYw7spO5GWsViu0Wq3bn9+y8/wEBwc7JjzPmDEDZWVlyM/Px+uvv97rWp1Oh4SEBFRVVbm819mzZ1FTU+M0l8hut1+tWGAgTp8+jQkTJkCn0/UKrm666Sbs27evz3oOVDZwdY6QWs1lqURKFx92dSis/Js2/Lf5CtrE3t8JgwKALKMGE7VcSEHk6647yaEkSX0OLV26dAn19fXQ6XQuz0+ZMgWVlZVOx9avXw+bzYb8/HzHMNTtt9+O06dPO1135swZJCQk9FmvgcomIupJEATcOiYUUyLVMJ1vwf/0WBU2KlDA4vEa7spO5CdkBT/r1q1DRkYGDAYDbDYbCgsLYTKZUFxcjObmZmzYsAGLFi2CTqdDTU0N1q1bh6ioKCxcuNBxj+XLlyM+Ph5bt25FSEgIkpKSnMroXr7e8/gvf/lLzJo1C1u2bMF9992HTz/9FG+88QbeeOMNAHC7bCKigYwKCsBdCRG4OSoE79c3o8Mu4b4JWozmruxEfkNW8HPx4kUsW7YMZrMZWq0WycnJKC4uxty5c9Ha2orKykrs2rULFosFOp0O6enp2LNnDyIiIhz3qKurQ0CAvHnWP/jBD7B//3489dRT2LRpE8aNG4e8vDwsXboUAKBSqdwqm4jIXd1DYR12SXErukRRRGlpKcxmM3Q6HVJTU6FSMfgj/yF7wrM/kzthiojI3xQVFWHNmjU4d+6c45her0d+fn6fi0eIPE3u57eyvs4QEVGfioqKkJOT4xT4AFe3F8rJyUFRUZGHakY0tBj8EBERRFHEmjVr4GowoPtYbm4uRPH6M2MTeRqDHyIiQmlpaa8en54kSUJ9fT1KS0tHsFZEw4PBDxERwWw2D+l1RN6MwQ8REbmdE42508gfMPghIiKkpqZCr9dD6GO/MkEQYDAYkJqaOsI1Ixp6DH6IiAgqlQr5+fkA0CsA6n6el5fHfD/kFxj8EBERACA7Oxt79+5FfHy803G9Xo+9e/cyzw/5DSY57IFJDomImOGZfM+w7+pONNT4RkvkXVQqFdLS0jxdDaJhw+CHPIqp9ImIaKRxzg95DFPpExGRJzD4IY9gKn0iIvIUBj/kEUylT0REnsLghzyCqfSJiMhTGPyQRzCVPhEReQpXe5FHdKfSb2hocDnvRxAE6PV6ptInr8B0DET+hT0/5BFMpU++oqioCEajEenp6ViyZAnS09NhNBq5GpHIhzH4IY9hKn3ydkzHQOSfuL1FD9zewjM4pEDeSBRFGI3GPlcldg/NVldX8/VK5GHc3oJ8DlPpkzeSk46Br18i38JhLyIiF5iOgch/seeHyEM43OfdmI6ByH+x54fIA7iCyPt1p2O4djViN0EQYDAYmI6ByAcx+CEaYVxB5BuYjoHIfzH4IRpB3NDVtzAdA5F/khX8FBQUIDk5GRqNBhqNBikpKTh8+LDj/MqVKyEIgtNj5syZbt+/sLAQgiBgwYIFvc41NDTgoYcewo033ohRo0bhlltuwWeffeY4L0kSNmzYgLi4OISGhiItLQ1ffPGFnOYRDTtu6Op7srOzUVNTg5KSEuzevRslJSWorq5m4EPkw2RNeNbr9di2bRsmTpwIANi5cyeysrJQXl6OadOmAQDmz5+PHTt2OH4mODjYrXvX1tZi7dq1LsfPL1++jNtvvx3p6ek4fPgwoqOjcfbsWURGRjquef755/HSSy/hd7/7HRITE/Hss89i7ty5OH36NCIiIuQ0k2jYcAWRb2I6BiL/Iiv4yczMdHq+efNmFBQU4OTJk47gR61WIzY2VlYlRFHE0qVLsXHjRpSWlsJisTidf+6552AwGJyCKqPR6Ph/SZKQl5eHp59+2vFtbOfOnYiJicHu3bvxyCOPyKoP0XDhCiIiIs8b9JwfURRRWFiIlpYWpKSkOI6bTCZER0cjMTERq1evRmNj44D32rRpE8aMGYNVq1a5PP/nP/8ZM2bMwOLFixEdHY3p06fjzTffdJyvrq7GhQsXMG/ePMcxtVqN2bNn48SJE32W297eDqvV6vQgGk5cQURE5Hmyg5/KykqEh4dDrVbj0Ucfxf79+zF16lQAQEZGBt555x18+OGHePHFF1FWVoY5c+agvb29z/sdP34c27dvdwpmrvXVV1+hoKAAkyZNwpEjR/Doo4/iF7/4BXbt2gUAuHDhAgAgJibG6ediYmIc51zZunUrtFqt42EwGNz+PRANBlcQERF5nuzgZ/LkyaioqMDJkyfxv/7X/8KKFSvw97//HQBw//334+6770ZSUhIyMzNx+PBhnDlzBocOHXJ5L5vNhoceeghvvvkmoqKi+izTbrfj1ltvxZYtWzB9+nQ88sgjWL16NQoKCpyuu/bDRJKkPr9hA8BTTz2FpqYmx6O+vt7dXwPRoHEFERGRZ8nO8BwcHOyY8DxjxgyUlZUhPz8fr7/+eq9rdTodEhISUFVV5fJeZ8+eRU1NjdNcIrvdfrVigYE4ffo0JkyYAJ1O5+hd6nbTTTdh3759AOCYY3ThwgWnuRKNjY29eoN6UqvVUKvV7jSbaEhlZ2cjKyuLGZ6JiDzgure3kCSpz2GtS5cuob6+vs/Jm1OmTEFlZaXTsfXr18NmsyE/P98xDHX77bfj9OnTTtedOXMGCQkJAIBx48YhNjYWR48exfTp0wEAHR0dOHbsGJ577rnrah/RcOEKIiIiz5AV/Kxbtw4ZGRkwGAyw2WwoLCyEyWRCcXExmpubsWHDBixatAg6nQ41NTVYt24doqKisHDhQsc9li9fjvj4eGzduhUhISFISkpyKqN7+XrP47/85S8xa9YsbNmyBffddx8+/fRTvPHGG3jjjTcAXB3uys3NxZYtWzBp0iRMmjQJW7ZswahRo7BkyZLB/m6IiIjID8kKfi5evIhly5bBbDZDq9UiOTkZxcXFmDt3LlpbW1FZWYldu3bBYrFAp9MhPT0de/bsccqzU1dXh4AAeVONfvCDH2D//v146qmnsGnTJowbNw55eXlYunSp45onnngCra2teOyxx3D58mXcdttteP/995njh4iIiJwIkqs8+wpltVqh1WrR1NQEjUbj6eoQERGRG+R+fnNvLyIiIlIUBj9ERESkKAx+iIiISFEY/BAREZGiMPghIiIiRWHwQ0RERIrC4IeIiIgUhcEPERERKcp17+1FRERE10cURW50PIIY/BAREXlQUVER1qxZg3PnzjmO6fV65OfnIzs724M1818c9iIiIvKQoqIi5OTkOAU+ANDQ0ICcnBwUFRV5qGb+jcEPERGRB4iiiDVr1sDVFpvdx3JzcyGK4khXze8x+CEivyaKIkwmE959912YTCZ+kJDXKC0t7dXj05MkSaivr0dpaekI1koZOOeHiPwW51KQNzObzUN6HbmPPT9EBMD/ekg4l4K8nU6nG9LryH2C5GqwUaGsViu0Wi2ampqg0Wg8XR2iEeNvPSSiKMJoNPY5pCAIAvR6Paqrq7mcmDym+3Xa0NDgct4PX6fuk/v5zZ4fIoXzxx4SzqUgX6BSqZCfnw/gaqDTU/fzvLw8Bj7DgMEPkYL562oTzqUgX5GdnY29e/ciPj7e6bher8fevXt9sufVF3DCM5GCyekhSUtLG7mKXSfOpSBfkp2djaysLGZ4HkEMfogUzF97SFJTU6HX6wecS5GamuqB2hH1plKpfOoLhq/jsBeRgvlrDwnnUhBRfxj8EClYdw/JtQFCN0EQYDAYfLKHhHMpiKgvXOreA5e6kxJ1r/YC4DRE1B0Q+XqgwN2yifyf3M9vBj89MPghpXKV58dgMCAvL8+nAx8iUgYGP9eBwQ8pGXtIiMhXyf385movIgLA1SZEpByc8ExERESKIiv4KSgoQHJyMjQaDTQaDVJSUnD48GHH+ZUrV0IQBKfHzJkz3b5/YWEhBEHAggULnI5v2LCh131jY2OdrrnesomIaHj426a55PtkDXvp9Xps27YNEydOBADs3LkTWVlZKC8vx7Rp0wAA8+fPx44dOxw/Exwc7Na9a2trsXbt2j6X1E6bNg0ffPCB47mruQiDLZuIiIaHv22aS/5BVvCTmZnp9Hzz5s0oKCjAyZMnHcGPWq3u1SszEFEUsXTpUmzcuBGlpaWwWCy9KxoYOOB9B1M2ERENj+40Cteuq+neNNfX0yiQ7xr0nB9RFFFYWIiWlhakpKQ4jptMJkRHRyMxMRGrV69GY2PjgPfatGkTxowZg1WrVvV5TVVVFeLi4jBu3Dg88MAD+Oqrr3pdI7fs9vZ2WK1WpwcREV0/f900l/yD7OCnsrIS4eHhUKvVePTRR7F//35MnToVAJCRkYF33nkHH374IV588UWUlZVhzpw5aG9v7/N+x48fx/bt2/Hmm2/2ec1tt92GXbt24ciRI3jzzTdx4cIFzJo1C5cuXXJcM5iyt27dCq1W63gYDAa5vw4iInJBzqa5RCNOkqm9vV2qqqqSysrKpCeffFKKioqSvvjiC5fXnj9/XgoKCpL27dvn8rzVapWMRqP03nvvOY6tWLFCysrK6rcOzc3NUkxMjPTiiy/2ec1AZUuSJLW1tUlNTU2OR319vQRAampq6rd8IiLq3+7duyUAAz52797t6aqSH2hqapL1+S07z09wcLBjwvOMGTNQVlaG/Px8vP76672u1el0SEhIQFVVlct7nT17FjU1NU5ziex2O4Crc3xOnz6NCRMm9Pq5sLAwfO973+vzvu6UDVydI6RWq/s8T0REg+Ovm+aSf7juJIeSJPU5tHTp0iXU19f3+eKeMmUKKisrnY6tX78eNpsN+fn5fQ5Dtbe34x//+Ee/my0OVDYREQ2f7k1zGxoaXM77EQQBer3eJzfNJd8nK/hZt24dMjIyYDAYYLPZUFhYCJPJhOLiYjQ3N2PDhg1YtGgRdDodampqsG7dOkRFRWHhwoWOeyxfvhzx8fHYunUrQkJCkJSU5FRGZGQkADgdX7t2LTIzMzF27Fg0Njbi2WefhdVqxYoVKwDA7bKJiGhkqFQq5OfnIycnB4IguNw0Ny8vj1uokEfICn4uXryIZcuWwWw2Q6vVIjk5GcXFxZg7dy5aW1tRWVmJXbt2wWKxQKfTIT09HXv27EFERITjHnV1dQgIkDfP+ty5c3jwwQfxzTffYMyYMZg5cyZOnjyJhIQEAFf/yNwpm4iIRk52djb27t3rMs8PN80lT+LGpj1wY1MioqHHTXNpuHFjUyIi8ircNJe8DTc2JSIiIkVh8ENERESKwuCHiIiIFIXBDxERESkKgx8iIiJSFAY/REREpCgMfoiIiEhRmOenh+58j1ar1cM1ISIiInd1f267m7eZwU8PNpsNAPrcUJWIiIi8l81mg1arHfA6bm/Rg91ux/nz5xEREeHYeM9bWa1WGAwG1NfXK2YrDiW2GVBmu9lmZbQZUGa7ldhmYHjbLUkSbDYb4uLi3No/lD0/PQQEBECv13u6GrJoNBpF/fEAymwzoMx2s83KocR2K7HNwPC1250en26c8ExERESKwuCHiIiIFIXBj49Sq9X4zW9+A7Va7emqjBglthlQZrvZZuVQYruV2GbAu9rNCc9ERESkKOz5ISIiIkVh8ENERESKwuCHiIiIFIXBDxERESkKgx8iIiJSFAY/w+y///u/kZmZibi4OAiCgAMHDjid37BhA6ZMmYKwsDCMHj0aP/7xj/HJJ5/0us/HH3+MOXPmICwsDJGRkUhLS0Nra2u/Zb/66qsYN24cQkJC8P3vfx+lpaVO5yVJwoYNGxAXF4fQ0FCkpaXhiy++8Os2FxUV4Sc/+QmioqIgCAIqKiqut7kO3truzs5O/PrXv8b3vvc9hIWFIS4uDsuXL8f58+f9ts1yyh4Mb253T4888ggEQUBeXt5gmunEm9u8cuVKCILg9Jg5c6ZftxkA/vGPf+Dee++FVqtFREQEZs6cibq6uutqM+Dd7b7237n78cILL8hqI4OfYdbS0oKbb74Zr7zyisvziYmJeOWVV1BZWYmPPvoIRqMR8+bNw9dff+245uOPP8b8+fMxb948fPrppygrK8P//t//u9/9S/bs2YPc3Fw8/fTTKC8vR2pqKjIyMpz+MJ5//nm89NJLeOWVV1BWVobY2FjMnTvXscGrP7a5paUFt99+O7Zt23ZdbXTFW9t95coV/PWvf8UzzzyDv/71rygqKsKZM2dw7733+m2b3S3bH9vd7cCBA/jkk08QFxd33e0FvL/N8+fPh9lsdjzee+89v27z2bNncccdd2DKlCkwmUz429/+hmeeeQYhISF+3e6e/8Zmsxlvv/02BEHAokWL5DVSohEDQNq/f3+/1zQ1NUkApA8++MBx7LbbbpPWr18vq6wf/vCH0qOPPup0bMqUKdKTTz4pSZIk2e12KTY2Vtq2bZvjfFtbm6TVaqXXXntNVln98aY291RdXS0BkMrLy2WV4S5vbXe3Tz/9VAIg1dbWyiqrP97eZldlDwVvbPe5c+ek+Ph46fPPP5cSEhKk3/72t7LKGYi3tXnFihVSVlaWrPvK5W1tvv/++6WHHnpI1n0Hw9vafa2srCxpzpw5ssqRJEliz48X6ejowBtvvAGtVoubb74ZANDY2IhPPvkE0dHRmDVrFmJiYjB79mx89NFH/d7ns88+w7x585yOz5s3DydOnAAAVFdX48KFC07XqNVqzJ4923HNSBjJNnsTT7e7qakJgiAgMjJySNrjDk+22VXZI2Wk222327Fs2TI8/vjjmDZt2vA0agCe+Lc2mUyIjo5GYmIiVq9ejcbGxqFvWD9Gss12ux2HDh1CYmIifvKTnyA6Ohq33XZbr+GpkeDJv+uLFy/i0KFDWLVqlex6M/jxAgcPHkR4eDhCQkLw29/+FkePHkVUVBQA4KuvvgJwdYx19erVKC4uxq233oo777wTVVVVLu/3zTffQBRFxMTEOB2PiYnBhQsXAMDx3/6uGU6eaLM38IZ2t7W14cknn8SSJUtGZEdpT7a5v7KHm6fa/dxzzyEwMBC/+MUvhqllffNUmzMyMvDOO+/gww8/xIsvvoiysjLMmTMH7e3tw9TSf/FEmxsbG9Hc3Ixt27Zh/vz5eP/997Fw4UJkZ2fj2LFjw9jaf/GG97KdO3ciIiIC2dnZsuvP4McLpKeno6KiAidOnMD8+fNx3333Ob612O12AFcnLv70pz/F9OnT8dvf/haTJ0/G22+/3e99BUFwei5JUq9j7lwzHDzZZk/ydLs7OzvxwAMPwG6349VXXx2iVvXPk23ur+zh5ol2f/bZZ8jPz8fvfvc7j7zuPfVvff/99+Puu+9GUlISMjMzcfjwYZw5cwaHDh0a4hb25ok2d983KysLv/zlL3HLLbfgySefxD333IPXXnttqJvokqffywDg7bffxtKlSwc1z4nBjxcICwvDxIkTMXPmTGzfvh2BgYHYvn07AECn0wEApk6d6vQzN910U5+z+qOioqBSqXpFy42NjY6oOjY2FgD6vWY4eaLN3sCT7e7s7MR9992H6upqHD16dER6fQDPtrm/soebJ9pdWlqKxsZGjB07FoGBgQgMDERtbS3+/d//HUajcYhb2Ju3/F3rdDokJCT02cswlDzR5qioKAQGBsq671Dz9L91aWkpTp8+jZ/97GeDqj+DHy8kSZKju9ZoNCIuLg6nT592uubMmTNISEhw+fPBwcH4/ve/j6NHjzodP3r0KGbNmgUAGDduHGJjY52u6ejowLFjxxzXjKSRaLM3Gql2dwc+VVVV+OCDD3DjjTcOcUvc58l/655lj7SRaPeyZcvwP//zP6ioqHA84uLi8Pjjj+PIkSPD0Kr+eerf+tKlS6ivr3d8CI+kkWhzcHAwfvCDH8i673Ab6X/r7du34/vf//7g5/DJniJNsthsNqm8vFwqLy+XAEgvvfSSVF5eLtXW1krNzc3SU089JX388cdSTU2N9Nlnn0mrVq2S1Gq19Pnnnzvu8dvf/lbSaDTSH//4R6mqqkpav369FBISIn355ZeOa+bMmSO9/PLLjueFhYVSUFCQtH37dunvf/+7lJubK4WFhUk1NTWOa7Zt2yZptVqpqKhIqqyslB588EFJp9NJVqvVb9t86dIlqby8XDp06JAEQCosLJTKy8sls9l8XW325nZ3dnZK9957r6TX66WKigrJbDY7Hu3t7X7ZZnfL9rd2uzJUq728tc02m03693//d+nEiRNSdXW1VFJSIqWkpEjx8fF+/V5WVFQkBQUFSW+88YZUVVUlvfzyy5JKpZJKS0uvq83e3m5Jurq6bNSoUVJBQcGg28jgZ5iVlJRIAHo9VqxYIbW2tkoLFy6U4uLipODgYEmn00n33nuv9Omnn/a6z9atWyW9Xi+NGjVKSklJ6fUCT0hIkH7zm984Hfu///f/SgkJCVJwcLB06623SseOHXM6b7fbpd/85jdSbGyspFarpR/96EdSZWWlX7d5x44dLut27X38qd3dy/pdPUpKSvyyzXLK9qd2uzJUwY+3tvnKlSvSvHnzpDFjxkhBQUHS2LFjpRUrVkh1dXV+2+Zu27dvlyZOnCiFhIRIN998s3TgwIHrbrMvtPv111+XQkNDJYvFMug2CpIkSYPrMyIiIiLyPZzzQ0RERIrC4IeIiIgUhcEPERERKQqDHyIiIlIUBj9ERESkKAx+iIiISFEY/BAREZGiMPghIiIiRWHwQ0RERIrC4IeIiIgUhcEPERERKcr/Bxzi5rmvgJU3AAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# matplotlib上でも確認\n",
"\n",
"# filter前\n",
"ax = gdf_polygons.plot(color=\"skyblue\")\n",
"gdf_points_unfiltered.plot(ax=ax, color=\"black\")"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<Axes: >"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# filter後\n",
"ax = gdf_polygons.plot(color=\"skyblue\")\n",
"ax = gdf_points_filtered1.plot(ax=ax, color=\"red\")\n",
"ax = gdf_points_filtered2.plot(ax=ax, color=\"green\")\n",
"gdf_points_filtered3.plot(ax=ax, color=\"blue\")"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"なお、[spatial join](https://geopandas.org/en/stable/docs/reference/api/geopandas.GeoDataFrame.sjoin.html)を使って、\n",
"一括して各Polygonに含まれるPointを抽出することができる"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>geometry</th>\n",
" <th>index_right</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>POINT (136.05790 35.47872)</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>POINT (136.03682 35.48075)</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>POINT (136.04038 35.47286)</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>POINT (136.03185 35.47182)</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>POINT (136.02949 35.47872)</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>POINT (136.00866 35.47608)</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" geometry index_right\n",
"14 POINT (136.05790 35.47872) 1\n",
"16 POINT (136.03682 35.48075) 2\n",
"17 POINT (136.04038 35.47286) 2\n",
"18 POINT (136.03185 35.47182) 2\n",
"19 POINT (136.02949 35.47872) 2\n",
"23 POINT (136.00866 35.47608) 0"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"<Axes: >"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"gdf_sjoined = gdf_points_unfiltered.sjoin(gdf_polygons, how='inner', predicate='within')\n",
"display(gdf_sjoined)\n",
"\n",
"ax = gdf_polygons.plot(color='skyblue')\n",
"gdf_sjoined.plot(ax=ax, color='red')\n"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"spatial joinの例は[公式のGallery](https://geopandas.org/en/stable/gallery/spatial_joins.html)にもあるので参照"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"他にも、[Example Gallery](https://geopandas.org/en/stable/gallery/index.html)などに記載されるような様々なデータ処理や分析、可視化に応用することができる"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"## その他補足\n",
"\n",
"### 他ツールとの連携\n",
"\n",
"- [osmnx](https://github.com/gboeing/osmnx)\n",
" - [NetworkX](https://networkx.org/)をベースに、[OpenStreetMap](https://www.openstreetmap.org)の道路情報のグラフ解析ができる(例: ダイクストラ法で地点間の経路探索をする、など)\n",
" - 道路のリンク(=edge)と交差点(=node)に相当する情報を取得してそれぞれGeoDataFrame形式でエクスポートできたり、その他関数・メソッドの返り値もGeoDataFrame形式だったりするなどしており、連携して使うのに便利\n",
"- [Apache Sedona](https://sedona.apache.org/latest-snapshot/)\n",
" - [Apache Spark](https://spark.apache.org/)を拡張し、並列分散処理の形で地理データを扱えるもの\n",
" - [Work with GeoPandas and Shapely](https://sedona.apache.org/latest-snapshot/tutorial/geopandas-shapely/)に記載されているように、pysparkのDataFrame(Sedona拡張)とGeoDataFrame間で相互変換を行うことが可能とのこと\n",
" - データサイズが大きくかつ並列分散処理が有効なものはSedonaなどで処理し、ある程度コンパクトにしてからGeoDataFrameに変換、といったことができると柔軟な処理ができるかもしれない?"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "geopandas-intro",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.3"
},
"orig_nbformat": 4,
"vscode": {
"interpreter": {
"hash": "e6539ff16005c1b62ccc6681808b4bd96a78ee4cf8924e2f266c50ba2dd2c7d9"
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment