Files
prettymaps/api/index.html
2025-08-31 14:55:39 +00:00

6093 lines
317 KiB
HTML

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="canonical" href="https://yourusername.github.io/prettymaps/api/">
<link rel="prev" href="../usage/">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.18">
<title>API Reference - prettymaps</title>
<link rel="stylesheet" href="../assets/stylesheets/main.7e37652d.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.06af60db.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="../assets/_mkdocstrings.css">
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="pink">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#api-reference" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="prettymaps" class="md-header__button md-logo" aria-label="prettymaps" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
prettymaps
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
API Reference
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href=".." title="prettymaps" class="md-nav__button md-logo" aria-label="prettymaps" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg>
</a>
prettymaps
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../usage/" class="md-nav__link">
<span class="md-ellipsis">
Usage
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
API Reference
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
API Reference
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#prettymaps.draw" class="md-nav__link">
<span class="md-ellipsis">
draw
</span>
</a>
<nav class="md-nav" aria-label="draw">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#prettymaps.draw.Plot" class="md-nav__link">
<span class="md-ellipsis">
Plot
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.PolygonPatch" class="md-nav__link">
<span class="md-ellipsis">
PolygonPatch
</span>
</a>
<nav class="md-nav" aria-label="PolygonPatch">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#prettymaps.draw.PolygonPatch.__init__" class="md-nav__link">
<span class="md-ellipsis">
__init__
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.Preset" class="md-nav__link">
<span class="md-ellipsis">
Preset
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.Subplot" class="md-nav__link">
<span class="md-ellipsis">
Subplot
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.create_background" class="md-nav__link">
<span class="md-ellipsis">
create_background
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.create_preset" class="md-nav__link">
<span class="md-ellipsis">
create_preset
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.draw_credit" class="md-nav__link">
<span class="md-ellipsis">
draw_credit
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.draw_text" class="md-nav__link">
<span class="md-ellipsis">
draw_text
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.gdf_to_shapely" class="md-nav__link">
<span class="md-ellipsis">
gdf_to_shapely
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.geometries_to_shapely" class="md-nav__link">
<span class="md-ellipsis">
geometries_to_shapely
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.graph_to_shapely" class="md-nav__link">
<span class="md-ellipsis">
graph_to_shapely
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.manage_presets" class="md-nav__link">
<span class="md-ellipsis">
manage_presets
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.multiplot" class="md-nav__link">
<span class="md-ellipsis">
multiplot
</span>
</a>
<nav class="md-nav" aria-label="multiplot">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#prettymaps.draw.multiplot--parameters" class="md-nav__link">
<span class="md-ellipsis">
Parameters:
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.multiplot--returns" class="md-nav__link">
<span class="md-ellipsis">
Returns:
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.override_args" class="md-nav__link">
<span class="md-ellipsis">
override_args
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.override_params" class="md-nav__link">
<span class="md-ellipsis">
override_params
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.override_preset" class="md-nav__link">
<span class="md-ellipsis">
override_preset
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.plot" class="md-nav__link">
<span class="md-ellipsis">
plot
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.plot_gdf" class="md-nav__link">
<span class="md-ellipsis">
plot_gdf
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.presets_directory" class="md-nav__link">
<span class="md-ellipsis">
presets_directory
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.read_preset" class="md-nav__link">
<span class="md-ellipsis">
read_preset
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.transform_gdfs" class="md-nav__link">
<span class="md-ellipsis">
transform_gdfs
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#prettymaps.fetch" class="md-nav__link">
<span class="md-ellipsis">
fetch
</span>
</a>
<nav class="md-nav" aria-label="fetch">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#prettymaps.fetch.get_keypoints" class="md-nav__link">
<span class="md-ellipsis">
get_keypoints
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.fetch.merge_tags" class="md-nav__link">
<span class="md-ellipsis">
merge_tags
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.fetch.obtain_elevation" class="md-nav__link">
<span class="md-ellipsis">
obtain_elevation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.fetch.read_from_cache" class="md-nav__link">
<span class="md-ellipsis">
read_from_cache
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.fetch.unified_osm_request" class="md-nav__link">
<span class="md-ellipsis">
unified_osm_request
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.fetch.write_to_cache" class="md-nav__link">
<span class="md-ellipsis">
write_to_cache
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#prettymaps.draw" class="md-nav__link">
<span class="md-ellipsis">
draw
</span>
</a>
<nav class="md-nav" aria-label="draw">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#prettymaps.draw.Plot" class="md-nav__link">
<span class="md-ellipsis">
Plot
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.PolygonPatch" class="md-nav__link">
<span class="md-ellipsis">
PolygonPatch
</span>
</a>
<nav class="md-nav" aria-label="PolygonPatch">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#prettymaps.draw.PolygonPatch.__init__" class="md-nav__link">
<span class="md-ellipsis">
__init__
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.Preset" class="md-nav__link">
<span class="md-ellipsis">
Preset
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.Subplot" class="md-nav__link">
<span class="md-ellipsis">
Subplot
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.create_background" class="md-nav__link">
<span class="md-ellipsis">
create_background
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.create_preset" class="md-nav__link">
<span class="md-ellipsis">
create_preset
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.draw_credit" class="md-nav__link">
<span class="md-ellipsis">
draw_credit
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.draw_text" class="md-nav__link">
<span class="md-ellipsis">
draw_text
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.gdf_to_shapely" class="md-nav__link">
<span class="md-ellipsis">
gdf_to_shapely
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.geometries_to_shapely" class="md-nav__link">
<span class="md-ellipsis">
geometries_to_shapely
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.graph_to_shapely" class="md-nav__link">
<span class="md-ellipsis">
graph_to_shapely
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.manage_presets" class="md-nav__link">
<span class="md-ellipsis">
manage_presets
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.multiplot" class="md-nav__link">
<span class="md-ellipsis">
multiplot
</span>
</a>
<nav class="md-nav" aria-label="multiplot">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#prettymaps.draw.multiplot--parameters" class="md-nav__link">
<span class="md-ellipsis">
Parameters:
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.multiplot--returns" class="md-nav__link">
<span class="md-ellipsis">
Returns:
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.override_args" class="md-nav__link">
<span class="md-ellipsis">
override_args
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.override_params" class="md-nav__link">
<span class="md-ellipsis">
override_params
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.override_preset" class="md-nav__link">
<span class="md-ellipsis">
override_preset
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.plot" class="md-nav__link">
<span class="md-ellipsis">
plot
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.plot_gdf" class="md-nav__link">
<span class="md-ellipsis">
plot_gdf
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.presets_directory" class="md-nav__link">
<span class="md-ellipsis">
presets_directory
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.read_preset" class="md-nav__link">
<span class="md-ellipsis">
read_preset
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.draw.transform_gdfs" class="md-nav__link">
<span class="md-ellipsis">
transform_gdfs
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#prettymaps.fetch" class="md-nav__link">
<span class="md-ellipsis">
fetch
</span>
</a>
<nav class="md-nav" aria-label="fetch">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#prettymaps.fetch.get_keypoints" class="md-nav__link">
<span class="md-ellipsis">
get_keypoints
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.fetch.merge_tags" class="md-nav__link">
<span class="md-ellipsis">
merge_tags
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.fetch.obtain_elevation" class="md-nav__link">
<span class="md-ellipsis">
obtain_elevation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.fetch.read_from_cache" class="md-nav__link">
<span class="md-ellipsis">
read_from_cache
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.fetch.unified_osm_request" class="md-nav__link">
<span class="md-ellipsis">
unified_osm_request
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#prettymaps.fetch.write_to_cache" class="md-nav__link">
<span class="md-ellipsis">
write_to_cache
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="api-reference">API Reference</h1>
<p>This section is auto-generated from the Prettymaps source code.</p>
<div class="doc doc-object doc-module">
<h2 id="prettymaps.draw" class="doc doc-heading">
<code>prettymaps.draw</code>
</h2>
<div class="doc doc-contents first">
<p>Prettymaps - A minimal Python library to draw pretty maps from OpenStreetMap Data
Copyright (C) 2021 Marcelo Prates</p>
<p>This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.</p>
<p>This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.</p>
<p>You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <a href="https://www.gnu.org/licenses/">https://www.gnu.org/licenses/</a>.</p>
<div class="doc doc-children">
<div class="doc doc-object doc-class">
<h3 id="prettymaps.draw.Plot" class="doc doc-heading">
<code>Plot</code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-dataclass"><code>dataclass</code></small>
</span>
</h3>
<div class="doc doc-contents ">
<p>Dataclass implementing a prettymaps Plot object.</p>
<p><span class="doc-section-title">Attributes:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code><span title="prettymaps.draw.Plot.geodataframes">geodataframes</span></code></td>
<td>
<code><span title="typing.Dict">Dict</span>[<span title="str">str</span>, <span title="geopandas.GeoDataFrame">GeoDataFrame</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>A dictionary of GeoDataFrames (one for each plot layer).</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td><code><span title="prettymaps.draw.Plot.fig">fig</span></code></td>
<td>
<code><span title="matplotlib.figure.Figure">Figure</span></code>
</td>
<td>
<div class="doc-md-description">
<p>A matplotlib figure.</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td><code><span title="prettymaps.draw.Plot.ax">ax</span></code></td>
<td>
<code><span title="matplotlib.axes.Axes">Axes</span></code>
</td>
<td>
<div class="doc-md-description">
<p>A matplotlib axis object.</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td><code><span title="prettymaps.draw.Plot.background">background</span></code></td>
<td>
<code><span title="shapely.geometry.base.BaseGeometry">BaseGeometry</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Background layer (shapely object).</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td><code><span title="prettymaps.draw.Plot.keypoints">keypoints</span></code></td>
<td>
<code><span title="geopandas.GeoDataFrame">GeoDataFrame</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Keypoints GeoDataFrame.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>prettymaps/draw.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 83</span>
<span class="normal"> 84</span>
<span class="normal"> 85</span>
<span class="normal"> 86</span>
<span class="normal"> 87</span>
<span class="normal"> 88</span>
<span class="normal"> 89</span>
<span class="normal"> 90</span>
<span class="normal"> 91</span>
<span class="normal"> 92</span>
<span class="normal"> 93</span>
<span class="normal"> 94</span>
<span class="normal"> 95</span>
<span class="normal"> 96</span>
<span class="normal"> 97</span>
<span class="normal"> 98</span>
<span class="normal"> 99</span>
<span class="normal">100</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@dataclass</span>
<span class="k">class</span><span class="w"> </span><span class="nc">Plot</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Dataclass implementing a prettymaps Plot object.</span>
<span class="sd"> Attributes:</span>
<span class="sd"> geodataframes (Dict[str, gp.GeoDataFrame]): A dictionary of GeoDataFrames (one for each plot layer).</span>
<span class="sd"> fig (matplotlib.figure.Figure): A matplotlib figure.</span>
<span class="sd"> ax (matplotlib.axes.Axes): A matplotlib axis object.</span>
<span class="sd"> background (BaseGeometry): Background layer (shapely object).</span>
<span class="sd"> keypoints (gp.GeoDataFrame): Keypoints GeoDataFrame.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">geodataframes</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">gp</span><span class="o">.</span><span class="n">GeoDataFrame</span><span class="p">]</span>
<span class="n">fig</span><span class="p">:</span> <span class="n">matplotlib</span><span class="o">.</span><span class="n">figure</span><span class="o">.</span><span class="n">Figure</span>
<span class="n">ax</span><span class="p">:</span> <span class="n">matplotlib</span><span class="o">.</span><span class="n">axes</span><span class="o">.</span><span class="n">Axes</span>
<span class="n">background</span><span class="p">:</span> <span class="n">BaseGeometry</span>
<span class="n">keypoints</span><span class="p">:</span> <span class="n">gp</span><span class="o">.</span><span class="n">GeoDataFrame</span>
</code></pre></div></td></tr></table></div>
</details>
<div class="doc doc-children">
</div>
</div>
</div>
<div class="doc doc-object doc-class">
<h3 id="prettymaps.draw.PolygonPatch" class="doc doc-heading">
<code>PolygonPatch</code>
</h3>
<div class="doc doc-contents ">
<p class="doc doc-class-bases">
Bases: <code><span title="matplotlib.patches.PathPatch">PathPatch</span></code></p>
<p>A class to create a matplotlib PathPatch from a shapely geometry.</p>
<p><span class="doc-section-title">Attributes:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code><span title="prettymaps.draw.PolygonPatch.shape">shape</span></code></td>
<td>
<code><span title="shapely.geometry.base.BaseGeometry">BaseGeometry</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Shapely geometry.</p>
</div>
</td>
</tr>
<tr class="doc-section-item">
<td><code><span title="prettymaps.draw.PolygonPatch.kwargs">kwargs</span></code></td>
<td>
<code><span title="shapely.geometry.base.BaseGeometry">BaseGeometry</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Parameters for matplotlib's PathPatch constructor.</p>
</div>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Methods:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code><a class="autorefs autorefs-internal" title="__init__(shape, **kwargs) (prettymaps.draw.PolygonPatch.__init__)" href="#prettymaps.draw.PolygonPatch.__init__">__init__</a></code></td>
<td>
<div class="doc-md-description">
<p>BaseGeometry, **kwargs):
Initialize the PolygonPatch with the given shapely geometry and additional parameters.</p>
<p>shape (BaseGeometry): Shapely geometry.
kwargs: Parameters for matplotlib's PathPatch constructor.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>prettymaps/draw.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">115</span>
<span class="normal">116</span>
<span class="normal">117</span>
<span class="normal">118</span>
<span class="normal">119</span>
<span class="normal">120</span>
<span class="normal">121</span>
<span class="normal">122</span>
<span class="normal">123</span>
<span class="normal">124</span>
<span class="normal">125</span>
<span class="normal">126</span>
<span class="normal">127</span>
<span class="normal">128</span>
<span class="normal">129</span>
<span class="normal">130</span>
<span class="normal">131</span>
<span class="normal">132</span>
<span class="normal">133</span>
<span class="normal">134</span>
<span class="normal">135</span>
<span class="normal">136</span>
<span class="normal">137</span>
<span class="normal">138</span>
<span class="normal">139</span>
<span class="normal">140</span>
<span class="normal">141</span>
<span class="normal">142</span>
<span class="normal">143</span>
<span class="normal">144</span>
<span class="normal">145</span>
<span class="normal">146</span>
<span class="normal">147</span>
<span class="normal">148</span>
<span class="normal">149</span>
<span class="normal">150</span>
<span class="normal">151</span>
<span class="normal">152</span>
<span class="normal">153</span>
<span class="normal">154</span>
<span class="normal">155</span>
<span class="normal">156</span>
<span class="normal">157</span>
<span class="normal">158</span>
<span class="normal">159</span>
<span class="normal">160</span>
<span class="normal">161</span>
<span class="normal">162</span>
<span class="normal">163</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">PolygonPatch</span><span class="p">(</span><span class="n">PathPatch</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> A class to create a matplotlib PathPatch from a shapely geometry.</span>
<span class="sd"> Attributes:</span>
<span class="sd"> shape (BaseGeometry): Shapely geometry.</span>
<span class="sd"> kwargs: Parameters for matplotlib&#39;s PathPatch constructor.</span>
<span class="sd"> Methods:</span>
<span class="sd"> __init__(shape: BaseGeometry, **kwargs):</span>
<span class="sd"> Initialize the PolygonPatch with the given shapely geometry and additional parameters.</span>
<span class="sd"> shape (BaseGeometry): Shapely geometry.</span>
<span class="sd"> kwargs: Parameters for matplotlib&#39;s PathPatch constructor.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">shape</span><span class="p">:</span> <span class="n">BaseGeometry</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Initialize the PolygonPatch.</span>
<span class="sd"> Args:</span>
<span class="sd"> shape (BaseGeometry): Shapely geometry</span>
<span class="sd"> kwargs: parameters for matplotlib&#39;s PathPatch constructor</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Init vertices and codes lists</span>
<span class="n">vertices</span><span class="p">,</span> <span class="n">codes</span> <span class="o">=</span> <span class="p">[],</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">geom</span> <span class="ow">in</span> <span class="n">shape</span><span class="o">.</span><span class="n">geoms</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">shape</span><span class="p">,</span> <span class="s2">&quot;geoms&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="p">[</span><span class="n">shape</span><span class="p">]:</span>
<span class="k">for</span> <span class="n">poly</span> <span class="ow">in</span> <span class="n">geom</span><span class="o">.</span><span class="n">geoms</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">geom</span><span class="p">,</span> <span class="s2">&quot;geoms&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="p">[</span><span class="n">geom</span><span class="p">]:</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">poly</span><span class="p">)</span> <span class="o">!=</span> <span class="n">Polygon</span><span class="p">:</span>
<span class="k">continue</span>
<span class="c1"># Get polygon&#39;s exterior and interiors</span>
<span class="n">exterior</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">poly</span><span class="o">.</span><span class="n">exterior</span><span class="o">.</span><span class="n">xy</span><span class="p">)</span>
<span class="n">interiors</span> <span class="o">=</span> <span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">interior</span><span class="o">.</span><span class="n">xy</span><span class="p">)</span> <span class="k">for</span> <span class="n">interior</span> <span class="ow">in</span> <span class="n">poly</span><span class="o">.</span><span class="n">interiors</span><span class="p">]</span>
<span class="c1"># Append to vertices and codes lists</span>
<span class="n">vertices</span> <span class="o">+=</span> <span class="p">[</span><span class="n">exterior</span><span class="p">]</span> <span class="o">+</span> <span class="n">interiors</span>
<span class="n">codes</span> <span class="o">+=</span> <span class="nb">list</span><span class="p">(</span>
<span class="nb">map</span><span class="p">(</span>
<span class="c1"># Ring coding</span>
<span class="k">lambda</span> <span class="n">p</span><span class="p">:</span> <span class="p">[</span><span class="n">Path</span><span class="o">.</span><span class="n">MOVETO</span><span class="p">]</span>
<span class="o">+</span> <span class="p">[</span><span class="n">Path</span><span class="o">.</span><span class="n">LINETO</span><span class="p">]</span> <span class="o">*</span> <span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="mi">2</span><span class="p">)</span>
<span class="o">+</span> <span class="p">[</span><span class="n">Path</span><span class="o">.</span><span class="n">CLOSEPOLY</span><span class="p">],</span>
<span class="p">[</span><span class="n">exterior</span><span class="p">]</span> <span class="o">+</span> <span class="n">interiors</span><span class="p">,</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="c1"># Initialize PathPatch with the generated Path</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span>
<span class="n">Path</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">(</span><span class="n">vertices</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">T</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">(</span><span class="n">codes</span><span class="p">)),</span> <span class="o">**</span><span class="n">kwargs</span>
<span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
<div class="doc doc-children">
<div class="doc doc-object doc-function">
<h4 id="prettymaps.draw.PolygonPatch.__init__" class="doc doc-heading">
<code class="highlight language-python"><span class="fm">__init__</span><span class="p">(</span><span class="n">shape</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></code>
</h4>
<div class="doc doc-contents ">
<p>Initialize the PolygonPatch.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>shape</code>
</td>
<td>
<code><span title="shapely.geometry.base.BaseGeometry">BaseGeometry</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Shapely geometry</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>kwargs</code>
</td>
<td>
</td>
<td>
<div class="doc-md-description">
<p>parameters for matplotlib's PathPatch constructor</p>
</div>
</td>
<td>
<code>{}</code>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>prettymaps/draw.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">132</span>
<span class="normal">133</span>
<span class="normal">134</span>
<span class="normal">135</span>
<span class="normal">136</span>
<span class="normal">137</span>
<span class="normal">138</span>
<span class="normal">139</span>
<span class="normal">140</span>
<span class="normal">141</span>
<span class="normal">142</span>
<span class="normal">143</span>
<span class="normal">144</span>
<span class="normal">145</span>
<span class="normal">146</span>
<span class="normal">147</span>
<span class="normal">148</span>
<span class="normal">149</span>
<span class="normal">150</span>
<span class="normal">151</span>
<span class="normal">152</span>
<span class="normal">153</span>
<span class="normal">154</span>
<span class="normal">155</span>
<span class="normal">156</span>
<span class="normal">157</span>
<span class="normal">158</span>
<span class="normal">159</span>
<span class="normal">160</span>
<span class="normal">161</span>
<span class="normal">162</span>
<span class="normal">163</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">shape</span><span class="p">:</span> <span class="n">BaseGeometry</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Initialize the PolygonPatch.</span>
<span class="sd"> Args:</span>
<span class="sd"> shape (BaseGeometry): Shapely geometry</span>
<span class="sd"> kwargs: parameters for matplotlib&#39;s PathPatch constructor</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Init vertices and codes lists</span>
<span class="n">vertices</span><span class="p">,</span> <span class="n">codes</span> <span class="o">=</span> <span class="p">[],</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">geom</span> <span class="ow">in</span> <span class="n">shape</span><span class="o">.</span><span class="n">geoms</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">shape</span><span class="p">,</span> <span class="s2">&quot;geoms&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="p">[</span><span class="n">shape</span><span class="p">]:</span>
<span class="k">for</span> <span class="n">poly</span> <span class="ow">in</span> <span class="n">geom</span><span class="o">.</span><span class="n">geoms</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">geom</span><span class="p">,</span> <span class="s2">&quot;geoms&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="p">[</span><span class="n">geom</span><span class="p">]:</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">poly</span><span class="p">)</span> <span class="o">!=</span> <span class="n">Polygon</span><span class="p">:</span>
<span class="k">continue</span>
<span class="c1"># Get polygon&#39;s exterior and interiors</span>
<span class="n">exterior</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">poly</span><span class="o">.</span><span class="n">exterior</span><span class="o">.</span><span class="n">xy</span><span class="p">)</span>
<span class="n">interiors</span> <span class="o">=</span> <span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">interior</span><span class="o">.</span><span class="n">xy</span><span class="p">)</span> <span class="k">for</span> <span class="n">interior</span> <span class="ow">in</span> <span class="n">poly</span><span class="o">.</span><span class="n">interiors</span><span class="p">]</span>
<span class="c1"># Append to vertices and codes lists</span>
<span class="n">vertices</span> <span class="o">+=</span> <span class="p">[</span><span class="n">exterior</span><span class="p">]</span> <span class="o">+</span> <span class="n">interiors</span>
<span class="n">codes</span> <span class="o">+=</span> <span class="nb">list</span><span class="p">(</span>
<span class="nb">map</span><span class="p">(</span>
<span class="c1"># Ring coding</span>
<span class="k">lambda</span> <span class="n">p</span><span class="p">:</span> <span class="p">[</span><span class="n">Path</span><span class="o">.</span><span class="n">MOVETO</span><span class="p">]</span>
<span class="o">+</span> <span class="p">[</span><span class="n">Path</span><span class="o">.</span><span class="n">LINETO</span><span class="p">]</span> <span class="o">*</span> <span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="mi">2</span><span class="p">)</span>
<span class="o">+</span> <span class="p">[</span><span class="n">Path</span><span class="o">.</span><span class="n">CLOSEPOLY</span><span class="p">],</span>
<span class="p">[</span><span class="n">exterior</span><span class="p">]</span> <span class="o">+</span> <span class="n">interiors</span><span class="p">,</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="c1"># Initialize PathPatch with the generated Path</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span>
<span class="n">Path</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">(</span><span class="n">vertices</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">T</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">concatenate</span><span class="p">(</span><span class="n">codes</span><span class="p">)),</span> <span class="o">**</span><span class="n">kwargs</span>
<span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
</div>
</div>
</div>
<div class="doc doc-object doc-class">
<h3 id="prettymaps.draw.Preset" class="doc doc-heading">
<code>Preset</code>
<span class="doc doc-labels">
<small class="doc doc-label doc-label-dataclass"><code>dataclass</code></small>
</span>
</h3>
<div class="doc doc-contents ">
<p>Dataclass implementing a prettymaps Preset object.</p>
<p><span class="doc-section-title">Attributes:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code><span title="prettymaps.draw.Preset.params">params</span></code></td>
<td>
<code><span title="dict">dict</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Dictionary of prettymaps.plot() parameters.</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>prettymaps/draw.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">103</span>
<span class="normal">104</span>
<span class="normal">105</span>
<span class="normal">106</span>
<span class="normal">107</span>
<span class="normal">108</span>
<span class="normal">109</span>
<span class="normal">110</span>
<span class="normal">111</span>
<span class="normal">112</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@dataclass</span>
<span class="k">class</span><span class="w"> </span><span class="nc">Preset</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Dataclass implementing a prettymaps Preset object.</span>
<span class="sd"> Attributes:</span>
<span class="sd"> params (dict): Dictionary of prettymaps.plot() parameters.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">params</span><span class="p">:</span> <span class="nb">dict</span>
</code></pre></div></td></tr></table></div>
</details>
<div class="doc doc-children">
</div>
</div>
</div>
<div class="doc doc-object doc-class">
<h3 id="prettymaps.draw.Subplot" class="doc doc-heading">
<code>Subplot</code>
</h3>
<div class="doc doc-contents ">
<p>Class implementing a prettymaps Subplot. Attributes:
- query: prettymaps.plot() query
- kwargs: dictionary of prettymaps.plot() parameters</p>
<details class="quote">
<summary>Source code in <code>prettymaps/draw.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">71</span>
<span class="normal">72</span>
<span class="normal">73</span>
<span class="normal">74</span>
<span class="normal">75</span>
<span class="normal">76</span>
<span class="normal">77</span>
<span class="normal">78</span>
<span class="normal">79</span>
<span class="normal">80</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">Subplot</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Class implementing a prettymaps Subplot. Attributes:</span>
<span class="sd"> - query: prettymaps.plot() query</span>
<span class="sd"> - kwargs: dictionary of prettymaps.plot() parameters</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">query</span> <span class="o">=</span> <span class="n">query</span>
<span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span> <span class="o">=</span> <span class="n">kwargs</span>
</code></pre></div></td></tr></table></div>
</details>
<div class="doc doc-children">
</div>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="prettymaps.draw.create_background" class="doc doc-heading">
<code class="highlight language-python"><span class="n">create_background</span><span class="p">(</span><span class="n">gdfs</span><span class="p">,</span> <span class="n">style</span><span class="p">,</span> <span class="n">logging</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Create a background layer given a collection of GeoDataFrames</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>gdfs</code>
</td>
<td>
<code><span title="typing.Dict">Dict</span>[<span title="str">str</span>, <span title="geopandas.GeoDataFrame">GeoDataFrame</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Dictionary of GeoDataFrames</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>style</code>
</td>
<td>
<code><span title="typing.Dict">Dict</span>[<span title="str">str</span>, <span title="dict">dict</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Dictionary of matplotlib style parameters</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="typing.Tuple">Tuple</span>[<span title="shapely.geometry.base.BaseGeometry">BaseGeometry</span>, <span title="float">float</span>, <span title="float">float</span>, <span title="float">float</span>, <span title="float">float</span>, <span title="float">float</span>, <span title="float">float</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Tuple[BaseGeometry, float, float, float, float, float, float]: background geometry, bounds, width and height</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>prettymaps/draw.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">580</span>
<span class="normal">581</span>
<span class="normal">582</span>
<span class="normal">583</span>
<span class="normal">584</span>
<span class="normal">585</span>
<span class="normal">586</span>
<span class="normal">587</span>
<span class="normal">588</span>
<span class="normal">589</span>
<span class="normal">590</span>
<span class="normal">591</span>
<span class="normal">592</span>
<span class="normal">593</span>
<span class="normal">594</span>
<span class="normal">595</span>
<span class="normal">596</span>
<span class="normal">597</span>
<span class="normal">598</span>
<span class="normal">599</span>
<span class="normal">600</span>
<span class="normal">601</span>
<span class="normal">602</span>
<span class="normal">603</span>
<span class="normal">604</span>
<span class="normal">605</span>
<span class="normal">606</span>
<span class="normal">607</span>
<span class="normal">608</span>
<span class="normal">609</span>
<span class="normal">610</span>
<span class="normal">611</span>
<span class="normal">612</span>
<span class="normal">613</span>
<span class="normal">614</span>
<span class="normal">615</span>
<span class="normal">616</span>
<span class="normal">617</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@log_execution_time</span>
<span class="k">def</span><span class="w"> </span><span class="nf">create_background</span><span class="p">(</span>
<span class="n">gdfs</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">gp</span><span class="o">.</span><span class="n">GeoDataFrame</span><span class="p">],</span>
<span class="n">style</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">dict</span><span class="p">],</span>
<span class="n">logging</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">BaseGeometry</span><span class="p">,</span> <span class="nb">float</span><span class="p">,</span> <span class="nb">float</span><span class="p">,</span> <span class="nb">float</span><span class="p">,</span> <span class="nb">float</span><span class="p">,</span> <span class="nb">float</span><span class="p">,</span> <span class="nb">float</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create a background layer given a collection of GeoDataFrames</span>
<span class="sd"> Args:</span>
<span class="sd"> gdfs (Dict[str, gp.GeoDataFrame]): Dictionary of GeoDataFrames</span>
<span class="sd"> style (Dict[str, dict]): Dictionary of matplotlib style parameters</span>
<span class="sd"> Returns:</span>
<span class="sd"> Tuple[BaseGeometry, float, float, float, float, float, float]: background geometry, bounds, width and height</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Create background</span>
<span class="n">background_pad</span> <span class="o">=</span> <span class="mf">1.1</span>
<span class="k">if</span> <span class="s2">&quot;background&quot;</span> <span class="ow">in</span> <span class="n">style</span> <span class="ow">and</span> <span class="s2">&quot;pad&quot;</span> <span class="ow">in</span> <span class="n">style</span><span class="p">[</span><span class="s2">&quot;background&quot;</span><span class="p">]:</span>
<span class="n">background_pad</span> <span class="o">=</span> <span class="n">style</span><span class="p">[</span><span class="s2">&quot;background&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;pad&quot;</span><span class="p">)</span>
<span class="n">background</span> <span class="o">=</span> <span class="n">shapely</span><span class="o">.</span><span class="n">affinity</span><span class="o">.</span><span class="n">scale</span><span class="p">(</span>
<span class="n">box</span><span class="p">(</span>
<span class="o">*</span><span class="n">shapely</span><span class="o">.</span><span class="n">ops</span><span class="o">.</span><span class="n">unary_union</span><span class="p">(</span><span class="n">ox</span><span class="o">.</span><span class="n">projection</span><span class="o">.</span><span class="n">project_gdf</span><span class="p">(</span><span class="n">gdfs</span><span class="p">[</span><span class="s2">&quot;perimeter&quot;</span><span class="p">])</span><span class="o">.</span><span class="n">geometry</span><span class="p">)</span><span class="o">.</span><span class="n">bounds</span>
<span class="p">),</span>
<span class="n">background_pad</span><span class="p">,</span>
<span class="n">background_pad</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">if</span> <span class="s2">&quot;background&quot;</span> <span class="ow">in</span> <span class="n">style</span> <span class="ow">and</span> <span class="s2">&quot;dilate&quot;</span> <span class="ow">in</span> <span class="n">style</span><span class="p">[</span><span class="s2">&quot;background&quot;</span><span class="p">]:</span>
<span class="n">background</span> <span class="o">=</span> <span class="n">background</span><span class="o">.</span><span class="n">buffer</span><span class="p">(</span><span class="n">style</span><span class="p">[</span><span class="s2">&quot;background&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;dilate&quot;</span><span class="p">))</span>
<span class="c1"># Get bounds</span>
<span class="n">xmin</span><span class="p">,</span> <span class="n">ymin</span><span class="p">,</span> <span class="n">xmax</span><span class="p">,</span> <span class="n">ymax</span> <span class="o">=</span> <span class="n">background</span><span class="o">.</span><span class="n">bounds</span>
<span class="n">dx</span><span class="p">,</span> <span class="n">dy</span> <span class="o">=</span> <span class="n">xmax</span> <span class="o">-</span> <span class="n">xmin</span><span class="p">,</span> <span class="n">ymax</span> <span class="o">-</span> <span class="n">ymin</span>
<span class="k">return</span> <span class="n">background</span><span class="p">,</span> <span class="n">xmin</span><span class="p">,</span> <span class="n">ymin</span><span class="p">,</span> <span class="n">xmax</span><span class="p">,</span> <span class="n">ymax</span><span class="p">,</span> <span class="n">dx</span><span class="p">,</span> <span class="n">dy</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="prettymaps.draw.create_preset" class="doc doc-heading">
<code class="highlight language-python"><span class="n">create_preset</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">layers</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">style</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">circle</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">radius</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dilate</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Create a preset file and save it on the presets folder (prettymaps/presets/) under name 'name.json'</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>name</code>
</td>
<td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Preset name</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>layers</code>
</td>
<td>
<code><span title="typing.Dict">Dict</span>[<span title="str">str</span>, <span title="dict">dict</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>prettymaps.plot() 'layers' parameter dict. Defaults to None.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>style</code>
</td>
<td>
<code><span title="typing.Dict">Dict</span>[<span title="str">str</span>, <span title="dict">dict</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>prettymaps.plot() 'style' parameter dict. Defaults to None.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>circle</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="bool">bool</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>prettymaps.plot() 'circle' parameter. Defaults to None.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>radius</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="typing.Union">Union</span>[<span title="float">float</span>, <span title="bool">bool</span>]]</code>
</td>
<td>
<div class="doc-md-description">
<p>prettymaps.plot() 'radius' parameter. Defaults to None.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>dilate</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="typing.Union">Union</span>[<span title="float">float</span>, <span title="bool">bool</span>]]</code>
</td>
<td>
<div class="doc-md-description">
<p>prettymaps.plot() 'dilate' parameter. Defaults to None.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>prettymaps/draw.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">710</span>
<span class="normal">711</span>
<span class="normal">712</span>
<span class="normal">713</span>
<span class="normal">714</span>
<span class="normal">715</span>
<span class="normal">716</span>
<span class="normal">717</span>
<span class="normal">718</span>
<span class="normal">719</span>
<span class="normal">720</span>
<span class="normal">721</span>
<span class="normal">722</span>
<span class="normal">723</span>
<span class="normal">724</span>
<span class="normal">725</span>
<span class="normal">726</span>
<span class="normal">727</span>
<span class="normal">728</span>
<span class="normal">729</span>
<span class="normal">730</span>
<span class="normal">731</span>
<span class="normal">732</span>
<span class="normal">733</span>
<span class="normal">734</span>
<span class="normal">735</span>
<span class="normal">736</span>
<span class="normal">737</span>
<span class="normal">738</span>
<span class="normal">739</span>
<span class="normal">740</span>
<span class="normal">741</span>
<span class="normal">742</span>
<span class="normal">743</span>
<span class="normal">744</span>
<span class="normal">745</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">create_preset</span><span class="p">(</span>
<span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
<span class="n">layers</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">dict</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">style</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">dict</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">circle</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">radius</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="nb">float</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">dilate</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="nb">float</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create a preset file and save it on the presets folder (prettymaps/presets/) under name &#39;name.json&#39;</span>
<span class="sd"> Args:</span>
<span class="sd"> name (str): Preset name</span>
<span class="sd"> layers (Dict[str, dict], optional): prettymaps.plot() &#39;layers&#39; parameter dict. Defaults to None.</span>
<span class="sd"> style (Dict[str, dict], optional): prettymaps.plot() &#39;style&#39; parameter dict. Defaults to None.</span>
<span class="sd"> circle (Optional[bool], optional): prettymaps.plot() &#39;circle&#39; parameter. Defaults to None.</span>
<span class="sd"> radius (Optional[Union[float, bool]], optional): prettymaps.plot() &#39;radius&#39; parameter. Defaults to None.</span>
<span class="sd"> dilate (Optional[Union[float, bool]], optional): prettymaps.plot() &#39;dilate&#39; parameter. Defaults to None.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># if not os.path.isdir(&#39;presets&#39;):</span>
<span class="c1"># os.makedirs(&#39;presets&#39;)</span>
<span class="n">path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">presets_directory</span><span class="p">(),</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">.json&quot;</span><span class="p">)</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
<span class="n">json</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span>
<span class="p">{</span>
<span class="s2">&quot;layers&quot;</span><span class="p">:</span> <span class="n">layers</span><span class="p">,</span>
<span class="s2">&quot;style&quot;</span><span class="p">:</span> <span class="n">style</span><span class="p">,</span>
<span class="s2">&quot;circle&quot;</span><span class="p">:</span> <span class="n">circle</span><span class="p">,</span>
<span class="s2">&quot;radius&quot;</span><span class="p">:</span> <span class="n">radius</span><span class="p">,</span>
<span class="s2">&quot;dilate&quot;</span><span class="p">:</span> <span class="n">dilate</span><span class="p">,</span>
<span class="p">},</span>
<span class="n">f</span><span class="p">,</span>
<span class="n">ensure_ascii</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="prettymaps.draw.draw_credit" class="doc doc-heading">
<code class="highlight language-python"><span class="n">draw_credit</span><span class="p">(</span><span class="n">ax</span><span class="p">,</span> <span class="n">background</span><span class="p">,</span> <span class="n">credit</span><span class="p">,</span> <span class="n">mode</span><span class="p">,</span> <span class="n">multiplot</span><span class="p">,</span> <span class="n">logging</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Draws credit text on the plot.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>ax</code>
</td>
<td>
<code><span title="matplotlib.axes.Axes">Axes</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Matplotlib axis object.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>background</code>
</td>
<td>
<code><span title="shapely.geometry.base.BaseGeometry">BaseGeometry</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Background layer.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>credit</code>
</td>
<td>
<code><span title="typing.Dict">Dict</span>[<span title="str">str</span>, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Dictionary containing credit text and style parameters.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>mode</code>
</td>
<td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Drawing mode. Options: 'matplotlib', 'plotter'.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>multiplot</code>
</td>
<td>
<code><span title="bool">bool</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Whether the plot is part of a multiplot.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>logging</code>
</td>
<td>
<code><span title="bool">bool</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Whether to enable logging. Defaults to False.</p>
</div>
</td>
<td>
<code>False</code>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>prettymaps/draw.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">946</span>
<span class="normal">947</span>
<span class="normal">948</span>
<span class="normal">949</span>
<span class="normal">950</span>
<span class="normal">951</span>
<span class="normal">952</span>
<span class="normal">953</span>
<span class="normal">954</span>
<span class="normal">955</span>
<span class="normal">956</span>
<span class="normal">957</span>
<span class="normal">958</span>
<span class="normal">959</span>
<span class="normal">960</span>
<span class="normal">961</span>
<span class="normal">962</span>
<span class="normal">963</span>
<span class="normal">964</span>
<span class="normal">965</span>
<span class="normal">966</span>
<span class="normal">967</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@log_execution_time</span>
<span class="k">def</span><span class="w"> </span><span class="nf">draw_credit</span><span class="p">(</span>
<span class="n">ax</span><span class="p">:</span> <span class="n">matplotlib</span><span class="o">.</span><span class="n">axes</span><span class="o">.</span><span class="n">Axes</span><span class="p">,</span>
<span class="n">background</span><span class="p">:</span> <span class="n">BaseGeometry</span><span class="p">,</span>
<span class="n">credit</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span>
<span class="n">mode</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
<span class="n">multiplot</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span>
<span class="n">logging</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Draws credit text on the plot.</span>
<span class="sd"> Args:</span>
<span class="sd"> ax (matplotlib.axes.Axes): Matplotlib axis object.</span>
<span class="sd"> background (BaseGeometry): Background layer.</span>
<span class="sd"> credit (Dict[str, Any]): Dictionary containing credit text and style parameters.</span>
<span class="sd"> mode (str): Drawing mode. Options: &#39;matplotlib&#39;, &#39;plotter&#39;.</span>
<span class="sd"> multiplot (bool): Whether the plot is part of a multiplot.</span>
<span class="sd"> logging (bool, optional): Whether to enable logging. Defaults to False.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="p">(</span><span class="n">mode</span> <span class="o">==</span> <span class="s2">&quot;matplotlib&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">credit</span> <span class="o">!=</span> <span class="kc">False</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="n">multiplot</span><span class="p">):</span>
<span class="n">draw_text</span><span class="p">(</span><span class="n">ax</span><span class="p">,</span> <span class="n">credit</span><span class="p">,</span> <span class="n">background</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="prettymaps.draw.draw_text" class="doc doc-heading">
<code class="highlight language-python"><span class="n">draw_text</span><span class="p">(</span><span class="n">ax</span><span class="p">,</span> <span class="n">params</span><span class="p">,</span> <span class="n">background</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Draw text with content and matplotlib style parameters specified by 'params' dictionary.
params['text'] should contain the message to be drawn.</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>ax</code>
</td>
<td>
<code><span title="matplotlib.axes.Axes">Axes</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Matplotlib axis object.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>params</code>
</td>
<td>
<code><span title="typing.Dict">Dict</span>[<span title="str">str</span>, <span title="typing.Any">Any</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Matplotlib style parameters for drawing text. params['text'] should contain the message to be drawn.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>background</code>
</td>
<td>
<code><span title="shapely.geometry.base.BaseGeometry">BaseGeometry</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Background layer.</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>prettymaps/draw.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">905</span>
<span class="normal">906</span>
<span class="normal">907</span>
<span class="normal">908</span>
<span class="normal">909</span>
<span class="normal">910</span>
<span class="normal">911</span>
<span class="normal">912</span>
<span class="normal">913</span>
<span class="normal">914</span>
<span class="normal">915</span>
<span class="normal">916</span>
<span class="normal">917</span>
<span class="normal">918</span>
<span class="normal">919</span>
<span class="normal">920</span>
<span class="normal">921</span>
<span class="normal">922</span>
<span class="normal">923</span>
<span class="normal">924</span>
<span class="normal">925</span>
<span class="normal">926</span>
<span class="normal">927</span>
<span class="normal">928</span>
<span class="normal">929</span>
<span class="normal">930</span>
<span class="normal">931</span>
<span class="normal">932</span>
<span class="normal">933</span>
<span class="normal">934</span>
<span class="normal">935</span>
<span class="normal">936</span>
<span class="normal">937</span>
<span class="normal">938</span>
<span class="normal">939</span>
<span class="normal">940</span>
<span class="normal">941</span>
<span class="normal">942</span>
<span class="normal">943</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">draw_text</span><span class="p">(</span>
<span class="n">ax</span><span class="p">:</span> <span class="n">matplotlib</span><span class="o">.</span><span class="n">axes</span><span class="o">.</span><span class="n">Axes</span><span class="p">,</span> <span class="n">params</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">],</span> <span class="n">background</span><span class="p">:</span> <span class="n">BaseGeometry</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Draw text with content and matplotlib style parameters specified by &#39;params&#39; dictionary.</span>
<span class="sd"> params[&#39;text&#39;] should contain the message to be drawn.</span>
<span class="sd"> Args:</span>
<span class="sd"> ax (matplotlib.axes.Axes): Matplotlib axis object.</span>
<span class="sd"> params (Dict[str, Any]): Matplotlib style parameters for drawing text. params[&#39;text&#39;] should contain the message to be drawn.</span>
<span class="sd"> background (BaseGeometry): Background layer.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Override default osm_credit dict with provided parameters</span>
<span class="n">params</span> <span class="o">=</span> <span class="n">override_params</span><span class="p">(</span>
<span class="nb">dict</span><span class="p">(</span>
<span class="n">text</span><span class="o">=</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
<span class="p">[</span>
<span class="s2">&quot;data © OpenStreetMap contributors&quot;</span><span class="p">,</span>
<span class="s2">&quot;github.com/marceloprates/prettymaps&quot;</span><span class="p">,</span>
<span class="p">]</span>
<span class="p">),</span>
<span class="n">x</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
<span class="n">y</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
<span class="n">horizontalalignment</span><span class="o">=</span><span class="s2">&quot;left&quot;</span><span class="p">,</span>
<span class="n">verticalalignment</span><span class="o">=</span><span class="s2">&quot;top&quot;</span><span class="p">,</span>
<span class="n">bbox</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">boxstyle</span><span class="o">=</span><span class="s2">&quot;square&quot;</span><span class="p">,</span> <span class="n">fc</span><span class="o">=</span><span class="s2">&quot;#fff&quot;</span><span class="p">,</span> <span class="n">ec</span><span class="o">=</span><span class="s2">&quot;#000&quot;</span><span class="p">),</span>
<span class="c1"># fontfamily=&quot;Ubuntu Mono&quot;,</span>
<span class="p">),</span>
<span class="n">params</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">text</span> <span class="o">=</span> <span class="p">[</span><span class="n">params</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;x&quot;</span><span class="p">,</span> <span class="s2">&quot;y&quot;</span><span class="p">,</span> <span class="s2">&quot;text&quot;</span><span class="p">]]</span>
<span class="c1"># Get background bounds</span>
<span class="n">xmin</span><span class="p">,</span> <span class="n">ymin</span><span class="p">,</span> <span class="n">xmax</span><span class="p">,</span> <span class="n">ymax</span> <span class="o">=</span> <span class="n">background</span><span class="o">.</span><span class="n">bounds</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">interp</span><span class="p">([</span><span class="n">x</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="p">[</span><span class="n">xmin</span><span class="p">,</span> <span class="n">xmax</span><span class="p">])[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">interp</span><span class="p">([</span><span class="n">y</span><span class="p">],</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="p">[</span><span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span><span class="p">])[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">ax</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="n">zorder</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span> <span class="o">**</span><span class="n">params</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="prettymaps.draw.gdf_to_shapely" class="doc doc-heading">
<code class="highlight language-python"><span class="n">gdf_to_shapely</span><span class="p">(</span><span class="n">layer</span><span class="p">,</span> <span class="n">gdf</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">point_size</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">line_width</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Convert a dict of GeoDataFrames to a dict of shapely geometries</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>layer</code>
</td>
<td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Layer name</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>gdf</code>
</td>
<td>
<code><span title="geopandas.GeoDataFrame">GeoDataFrame</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Input GeoDataFrame</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>width</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="typing.Union">Union</span>[<span title="dict">dict</span>, <span title="float">float</span>]]</code>
</td>
<td>
<div class="doc-md-description">
<p>Street network width. Can be either a dictionary or a float. Defaults to None.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>point_size</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="float">float</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Point geometries (1D) will be dilated by this amount. Defaults to None.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>line_width</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="float">float</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Line geometries (2D) will be dilated by this amount. Defaults to None.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>GeometryCollection</code></td> <td>
<code><span title="shapely.geometry.GeometryCollection">GeometryCollection</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Output GeoDataFrame</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>prettymaps/draw.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">256</span>
<span class="normal">257</span>
<span class="normal">258</span>
<span class="normal">259</span>
<span class="normal">260</span>
<span class="normal">261</span>
<span class="normal">262</span>
<span class="normal">263</span>
<span class="normal">264</span>
<span class="normal">265</span>
<span class="normal">266</span>
<span class="normal">267</span>
<span class="normal">268</span>
<span class="normal">269</span>
<span class="normal">270</span>
<span class="normal">271</span>
<span class="normal">272</span>
<span class="normal">273</span>
<span class="normal">274</span>
<span class="normal">275</span>
<span class="normal">276</span>
<span class="normal">277</span>
<span class="normal">278</span>
<span class="normal">279</span>
<span class="normal">280</span>
<span class="normal">281</span>
<span class="normal">282</span>
<span class="normal">283</span>
<span class="normal">284</span>
<span class="normal">285</span>
<span class="normal">286</span>
<span class="normal">287</span>
<span class="normal">288</span>
<span class="normal">289</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">gdf_to_shapely</span><span class="p">(</span>
<span class="n">layer</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
<span class="n">gdf</span><span class="p">:</span> <span class="n">gp</span><span class="o">.</span><span class="n">GeoDataFrame</span><span class="p">,</span>
<span class="n">width</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="nb">dict</span><span class="p">,</span> <span class="nb">float</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">point_size</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">line_width</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="n">GeometryCollection</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Convert a dict of GeoDataFrames to a dict of shapely geometries</span>
<span class="sd"> Args:</span>
<span class="sd"> layer (str): Layer name</span>
<span class="sd"> gdf (gp.GeoDataFrame): Input GeoDataFrame</span>
<span class="sd"> width (Optional[Union[dict, float]], optional): Street network width. Can be either a dictionary or a float. Defaults to None.</span>
<span class="sd"> point_size (Optional[float], optional): Point geometries (1D) will be dilated by this amount. Defaults to None.</span>
<span class="sd"> line_width (Optional[float], optional): Line geometries (2D) will be dilated by this amount. Defaults to None.</span>
<span class="sd"> Returns:</span>
<span class="sd"> GeometryCollection: Output GeoDataFrame</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Project gdf if applicable</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">gdf</span><span class="o">.</span><span class="n">empty</span> <span class="ow">and</span> <span class="n">gdf</span><span class="o">.</span><span class="n">crs</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">gdf</span> <span class="o">=</span> <span class="n">ox</span><span class="o">.</span><span class="n">projection</span><span class="o">.</span><span class="n">project_gdf</span><span class="p">(</span><span class="n">gdf</span><span class="p">)</span>
<span class="k">if</span> <span class="n">layer</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;streets&quot;</span><span class="p">,</span> <span class="s2">&quot;railway&quot;</span><span class="p">,</span> <span class="s2">&quot;waterway&quot;</span><span class="p">]:</span>
<span class="n">geometries</span> <span class="o">=</span> <span class="n">graph_to_shapely</span><span class="p">(</span><span class="n">gdf</span><span class="p">,</span> <span class="n">width</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">geometries</span> <span class="o">=</span> <span class="n">geometries_to_shapely</span><span class="p">(</span>
<span class="n">gdf</span><span class="p">,</span> <span class="n">point_size</span><span class="o">=</span><span class="n">point_size</span><span class="p">,</span> <span class="n">line_width</span><span class="o">=</span><span class="n">line_width</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">geometries</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="prettymaps.draw.geometries_to_shapely" class="doc doc-heading">
<code class="highlight language-python"><span class="n">geometries_to_shapely</span><span class="p">(</span><span class="n">gdf</span><span class="p">,</span> <span class="n">point_size</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">line_width</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Convert geometries in GeoDataFrame to shapely format</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>gdf</code>
</td>
<td>
<code><span title="geopandas.GeoDataFrame">GeoDataFrame</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Input GeoDataFrame</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>point_size</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="float">float</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Point geometries (1D) will be dilated by this amount. Defaults to None.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>line_width</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="float">float</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Line geometries (2D) will be dilated by this amount. Defaults to None.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>GeometryCollection</code></td> <td>
<code><span title="shapely.geometry.GeometryCollection">GeometryCollection</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Shapely geometries computed from GeoDataFrame geometries</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>prettymaps/draw.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">215</span>
<span class="normal">216</span>
<span class="normal">217</span>
<span class="normal">218</span>
<span class="normal">219</span>
<span class="normal">220</span>
<span class="normal">221</span>
<span class="normal">222</span>
<span class="normal">223</span>
<span class="normal">224</span>
<span class="normal">225</span>
<span class="normal">226</span>
<span class="normal">227</span>
<span class="normal">228</span>
<span class="normal">229</span>
<span class="normal">230</span>
<span class="normal">231</span>
<span class="normal">232</span>
<span class="normal">233</span>
<span class="normal">234</span>
<span class="normal">235</span>
<span class="normal">236</span>
<span class="normal">237</span>
<span class="normal">238</span>
<span class="normal">239</span>
<span class="normal">240</span>
<span class="normal">241</span>
<span class="normal">242</span>
<span class="normal">243</span>
<span class="normal">244</span>
<span class="normal">245</span>
<span class="normal">246</span>
<span class="normal">247</span>
<span class="normal">248</span>
<span class="normal">249</span>
<span class="normal">250</span>
<span class="normal">251</span>
<span class="normal">252</span>
<span class="normal">253</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">geometries_to_shapely</span><span class="p">(</span>
<span class="n">gdf</span><span class="p">:</span> <span class="n">gp</span><span class="o">.</span><span class="n">GeoDataFrame</span><span class="p">,</span>
<span class="n">point_size</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">line_width</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="n">GeometryCollection</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Convert geometries in GeoDataFrame to shapely format</span>
<span class="sd"> Args:</span>
<span class="sd"> gdf (gp.GeoDataFrame): Input GeoDataFrame</span>
<span class="sd"> point_size (Optional[float], optional): Point geometries (1D) will be dilated by this amount. Defaults to None.</span>
<span class="sd"> line_width (Optional[float], optional): Line geometries (2D) will be dilated by this amount. Defaults to None.</span>
<span class="sd"> Returns:</span>
<span class="sd"> GeometryCollection: Shapely geometries computed from GeoDataFrame geometries</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">geoms</span> <span class="o">=</span> <span class="n">gdf</span><span class="o">.</span><span class="n">geometry</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span>
<span class="n">collections</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">geoms</span> <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">==</span> <span class="n">GeometryCollection</span><span class="p">]</span>
<span class="n">points</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">geoms</span> <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">==</span> <span class="n">Point</span><span class="p">]</span> <span class="o">+</span> <span class="p">[</span>
<span class="n">y</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">collections</span> <span class="k">for</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">x</span><span class="o">.</span><span class="n">geoms</span> <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">y</span><span class="p">)</span> <span class="o">==</span> <span class="n">Point</span>
<span class="p">]</span>
<span class="n">lines</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">geoms</span> <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="ow">in</span> <span class="p">[</span><span class="n">LineString</span><span class="p">,</span> <span class="n">MultiLineString</span><span class="p">]]</span> <span class="o">+</span> <span class="p">[</span>
<span class="n">y</span>
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">collections</span>
<span class="k">for</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">x</span><span class="o">.</span><span class="n">geoms</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">y</span><span class="p">)</span> <span class="ow">in</span> <span class="p">[</span><span class="n">LineString</span><span class="p">,</span> <span class="n">MultiLineString</span><span class="p">]</span>
<span class="p">]</span>
<span class="n">polys</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">geoms</span> <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="ow">in</span> <span class="p">[</span><span class="n">Polygon</span><span class="p">,</span> <span class="n">MultiPolygon</span><span class="p">]]</span> <span class="o">+</span> <span class="p">[</span>
<span class="n">y</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">collections</span> <span class="k">for</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">x</span><span class="o">.</span><span class="n">geoms</span> <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">y</span><span class="p">)</span> <span class="ow">in</span> <span class="p">[</span><span class="n">Polygon</span><span class="p">,</span> <span class="n">MultiPolygon</span><span class="p">]</span>
<span class="p">]</span>
<span class="c1"># Convert points into circles with radius &quot;point_size&quot;</span>
<span class="k">if</span> <span class="n">point_size</span><span class="p">:</span>
<span class="n">points</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">buffer</span><span class="p">(</span><span class="n">point_size</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">points</span><span class="p">]</span> <span class="k">if</span> <span class="n">point_size</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="k">else</span> <span class="p">[]</span>
<span class="k">if</span> <span class="n">line_width</span><span class="p">:</span>
<span class="n">lines</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="o">.</span><span class="n">buffer</span><span class="p">(</span><span class="n">line_width</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">lines</span><span class="p">]</span> <span class="k">if</span> <span class="n">line_width</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="k">else</span> <span class="p">[]</span>
<span class="k">return</span> <span class="n">GeometryCollection</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">points</span><span class="p">)</span> <span class="o">+</span> <span class="nb">list</span><span class="p">(</span><span class="n">lines</span><span class="p">)</span> <span class="o">+</span> <span class="nb">list</span><span class="p">(</span><span class="n">polys</span><span class="p">))</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="prettymaps.draw.graph_to_shapely" class="doc doc-heading">
<code class="highlight language-python"><span class="n">graph_to_shapely</span><span class="p">(</span><span class="n">gdf</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mf">1.0</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Given a GeoDataFrame containing a graph (street newtork),
convert them to shapely geometries by applying dilation given by 'width'</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>gdf</code>
</td>
<td>
<code><span title="geopandas.GeoDataFrame">GeoDataFrame</span></code>
</td>
<td>
<div class="doc-md-description">
<p>input GeoDataFrame containing graph (street network) geometries</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>width</code>
</td>
<td>
<code><span title="float">float</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Line geometries will be dilated by this amount. Defaults to 1..</p>
</div>
</td>
<td>
<code>1.0</code>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>BaseGeometry</code></td> <td>
<code><span title="shapely.geometry.base.BaseGeometry">BaseGeometry</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Shapely</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>prettymaps/draw.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">171</span>
<span class="normal">172</span>
<span class="normal">173</span>
<span class="normal">174</span>
<span class="normal">175</span>
<span class="normal">176</span>
<span class="normal">177</span>
<span class="normal">178</span>
<span class="normal">179</span>
<span class="normal">180</span>
<span class="normal">181</span>
<span class="normal">182</span>
<span class="normal">183</span>
<span class="normal">184</span>
<span class="normal">185</span>
<span class="normal">186</span>
<span class="normal">187</span>
<span class="normal">188</span>
<span class="normal">189</span>
<span class="normal">190</span>
<span class="normal">191</span>
<span class="normal">192</span>
<span class="normal">193</span>
<span class="normal">194</span>
<span class="normal">195</span>
<span class="normal">196</span>
<span class="normal">197</span>
<span class="normal">198</span>
<span class="normal">199</span>
<span class="normal">200</span>
<span class="normal">201</span>
<span class="normal">202</span>
<span class="normal">203</span>
<span class="normal">204</span>
<span class="normal">205</span>
<span class="normal">206</span>
<span class="normal">207</span>
<span class="normal">208</span>
<span class="normal">209</span>
<span class="normal">210</span>
<span class="normal">211</span>
<span class="normal">212</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">graph_to_shapely</span><span class="p">(</span><span class="n">gdf</span><span class="p">:</span> <span class="n">gp</span><span class="o">.</span><span class="n">GeoDataFrame</span><span class="p">,</span> <span class="n">width</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">1.0</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">BaseGeometry</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Given a GeoDataFrame containing a graph (street newtork),</span>
<span class="sd"> convert them to shapely geometries by applying dilation given by &#39;width&#39;</span>
<span class="sd"> Args:</span>
<span class="sd"> gdf (gp.GeoDataFrame): input GeoDataFrame containing graph (street network) geometries</span>
<span class="sd"> width (float, optional): Line geometries will be dilated by this amount. Defaults to 1..</span>
<span class="sd"> Returns:</span>
<span class="sd"> BaseGeometry: Shapely</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="nf">highway_to_width</span><span class="p">(</span><span class="n">highway</span><span class="p">):</span>
<span class="k">if</span> <span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">highway</span><span class="p">)</span> <span class="o">==</span> <span class="nb">str</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">highway</span> <span class="ow">in</span> <span class="n">width</span><span class="p">):</span>
<span class="k">return</span> <span class="n">width</span><span class="p">[</span><span class="n">highway</span><span class="p">]</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">highway</span><span class="p">,</span> <span class="n">Iterable</span><span class="p">):</span>
<span class="k">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">highway</span><span class="p">:</span>
<span class="k">if</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">width</span><span class="p">:</span>
<span class="k">return</span> <span class="n">width</span><span class="p">[</span><span class="n">h</span><span class="p">]</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">nan</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">np</span><span class="o">.</span><span class="n">nan</span>
<span class="c1"># Annotate GeoDataFrame with the width for each highway type</span>
<span class="n">gdf</span><span class="p">[</span><span class="s2">&quot;width&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">gdf</span><span class="p">[</span><span class="s2">&quot;highway&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">highway_to_width</span><span class="p">)</span> <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">width</span><span class="p">)</span> <span class="o">==</span> <span class="nb">dict</span> <span class="k">else</span> <span class="n">width</span>
<span class="p">)</span>
<span class="c1"># Remove rows with inexistent width</span>
<span class="n">gdf</span><span class="o">.</span><span class="n">drop</span><span class="p">(</span><span class="n">gdf</span><span class="p">[</span><span class="n">gdf</span><span class="o">.</span><span class="n">width</span><span class="o">.</span><span class="n">isna</span><span class="p">()]</span><span class="o">.</span><span class="n">index</span><span class="p">,</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">with</span> <span class="n">warnings</span><span class="o">.</span><span class="n">catch_warnings</span><span class="p">():</span>
<span class="c1"># Supress shapely.errors.ShapelyDeprecationWarning</span>
<span class="n">warnings</span><span class="o">.</span><span class="n">simplefilter</span><span class="p">(</span><span class="s2">&quot;ignore&quot;</span><span class="p">,</span> <span class="n">shapely</span><span class="o">.</span><span class="n">errors</span><span class="o">.</span><span class="n">ShapelyDeprecationWarning</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">all</span><span class="p">(</span><span class="n">gdf</span><span class="o">.</span><span class="n">width</span><span class="o">.</span><span class="n">isna</span><span class="p">()):</span>
<span class="c1"># Dilate geometries based on their width</span>
<span class="n">gdf</span><span class="o">.</span><span class="n">geometry</span> <span class="o">=</span> <span class="n">gdf</span><span class="o">.</span><span class="n">apply</span><span class="p">(</span>
<span class="k">lambda</span> <span class="n">row</span><span class="p">:</span> <span class="n">row</span><span class="p">[</span><span class="s2">&quot;geometry&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">buffer</span><span class="p">(</span><span class="n">row</span><span class="o">.</span><span class="n">width</span><span class="p">),</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">shapely</span><span class="o">.</span><span class="n">ops</span><span class="o">.</span><span class="n">unary_union</span><span class="p">(</span><span class="n">gdf</span><span class="o">.</span><span class="n">geometry</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="prettymaps.draw.manage_presets" class="doc doc-heading">
<code class="highlight language-python"><span class="n">manage_presets</span><span class="p">(</span><span class="n">load_preset</span><span class="p">,</span> <span class="n">save_preset</span><span class="p">,</span> <span class="n">update_preset</span><span class="p">,</span> <span class="n">layers</span><span class="p">,</span> <span class="n">style</span><span class="p">,</span> <span class="n">circle</span><span class="p">,</span> <span class="n">radius</span><span class="p">,</span> <span class="n">dilate</span><span class="p">,</span> <span class="n">logging</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p><em>summary</em></p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>load_preset</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="str">str</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Load preset named 'load_preset', if provided</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>save_preset</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="str">str</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Save preset to file named 'save_preset', if provided</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>update_preset</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="str">str</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Load, update and save preset named 'update_preset', if provided</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>layers</code>
</td>
<td>
<code><span title="typing.Dict">Dict</span>[<span title="str">str</span>, <span title="dict">dict</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>prettymaps.plot() 'layers' parameter dict</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>style</code>
</td>
<td>
<code><span title="typing.Dict">Dict</span>[<span title="str">str</span>, <span title="dict">dict</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>prettymaps.plot() 'style' parameter dict</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>circle</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="bool">bool</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>prettymaps.plot() 'circle' parameter</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>radius</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="typing.Union">Union</span>[<span title="float">float</span>, <span title="bool">bool</span>]]</code>
</td>
<td>
<div class="doc-md-description">
<p>prettymaps.plot() 'radius' parameter</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>dilate</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="typing.Union">Union</span>[<span title="float">float</span>, <span title="bool">bool</span>]]</code>
</td>
<td>
<div class="doc-md-description">
<p>prettymaps.plot() 'dilate' parameter</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="typing.Tuple">Tuple</span>[<span title="dict">dict</span>, <span title="dict">dict</span>, <span title="typing.Optional">Optional</span>[<span title="float">float</span>], <span title="typing.Optional">Optional</span>[<span title="typing.Union">Union</span>[<span title="float">float</span>, <span title="bool">bool</span>]], <span title="typing.Optional">Optional</span>[<span title="typing.Union">Union</span>[<span title="float">float</span>, <span title="bool">bool</span>]]]</code>
</td>
<td>
<div class="doc-md-description">
<p>Tuple[dict, dict, Optional[float], Optional[Union[float, bool]], Optional[Union[float, bool]]]: Updated layers, style, circle, radius, dilate parameters</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>prettymaps/draw.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">765</span>
<span class="normal">766</span>
<span class="normal">767</span>
<span class="normal">768</span>
<span class="normal">769</span>
<span class="normal">770</span>
<span class="normal">771</span>
<span class="normal">772</span>
<span class="normal">773</span>
<span class="normal">774</span>
<span class="normal">775</span>
<span class="normal">776</span>
<span class="normal">777</span>
<span class="normal">778</span>
<span class="normal">779</span>
<span class="normal">780</span>
<span class="normal">781</span>
<span class="normal">782</span>
<span class="normal">783</span>
<span class="normal">784</span>
<span class="normal">785</span>
<span class="normal">786</span>
<span class="normal">787</span>
<span class="normal">788</span>
<span class="normal">789</span>
<span class="normal">790</span>
<span class="normal">791</span>
<span class="normal">792</span>
<span class="normal">793</span>
<span class="normal">794</span>
<span class="normal">795</span>
<span class="normal">796</span>
<span class="normal">797</span>
<span class="normal">798</span>
<span class="normal">799</span>
<span class="normal">800</span>
<span class="normal">801</span>
<span class="normal">802</span>
<span class="normal">803</span>
<span class="normal">804</span>
<span class="normal">805</span>
<span class="normal">806</span>
<span class="normal">807</span>
<span class="normal">808</span>
<span class="normal">809</span>
<span class="normal">810</span>
<span class="normal">811</span>
<span class="normal">812</span>
<span class="normal">813</span>
<span class="normal">814</span>
<span class="normal">815</span>
<span class="normal">816</span>
<span class="normal">817</span>
<span class="normal">818</span>
<span class="normal">819</span>
<span class="normal">820</span>
<span class="normal">821</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@log_execution_time</span>
<span class="k">def</span><span class="w"> </span><span class="nf">manage_presets</span><span class="p">(</span>
<span class="n">load_preset</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span>
<span class="n">save_preset</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span>
<span class="n">update_preset</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">],</span>
<span class="n">layers</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">dict</span><span class="p">],</span>
<span class="n">style</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">dict</span><span class="p">],</span>
<span class="n">circle</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">],</span>
<span class="n">radius</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="nb">float</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]],</span>
<span class="n">dilate</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="nb">float</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]],</span>
<span class="n">logging</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span>
<span class="nb">dict</span><span class="p">,</span>
<span class="nb">dict</span><span class="p">,</span>
<span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">],</span>
<span class="n">Optional</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="nb">float</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]],</span>
<span class="n">Optional</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="nb">float</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]],</span>
<span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;_summary_</span>
<span class="sd"> Args:</span>
<span class="sd"> load_preset (Optional[str]): Load preset named &#39;load_preset&#39;, if provided</span>
<span class="sd"> save_preset (Optional[str]): Save preset to file named &#39;save_preset&#39;, if provided</span>
<span class="sd"> update_preset (Optional[str]): Load, update and save preset named &#39;update_preset&#39;, if provided</span>
<span class="sd"> layers (Dict[str, dict]): prettymaps.plot() &#39;layers&#39; parameter dict</span>
<span class="sd"> style (Dict[str, dict]): prettymaps.plot() &#39;style&#39; parameter dict</span>
<span class="sd"> circle (Optional[bool]): prettymaps.plot() &#39;circle&#39; parameter</span>
<span class="sd"> radius (Optional[Union[float, bool]]): prettymaps.plot() &#39;radius&#39; parameter</span>
<span class="sd"> dilate (Optional[Union[float, bool]]): prettymaps.plot() &#39;dilate&#39; parameter</span>
<span class="sd"> Returns:</span>
<span class="sd"> Tuple[dict, dict, Optional[float], Optional[Union[float, bool]], Optional[Union[float, bool]]]: Updated layers, style, circle, radius, dilate parameters</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Update preset mode: load a preset, update it with additional parameters and update the JSON file</span>
<span class="k">if</span> <span class="n">update_preset</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1"># load_preset = save_preset = True</span>
<span class="n">load_preset</span> <span class="o">=</span> <span class="n">save_preset</span> <span class="o">=</span> <span class="n">update_preset</span>
<span class="c1"># Load preset (if provided)</span>
<span class="k">if</span> <span class="n">load_preset</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">layers</span><span class="p">,</span> <span class="n">style</span><span class="p">,</span> <span class="n">circle</span><span class="p">,</span> <span class="n">radius</span><span class="p">,</span> <span class="n">dilate</span> <span class="o">=</span> <span class="n">override_preset</span><span class="p">(</span>
<span class="n">load_preset</span><span class="p">,</span> <span class="n">layers</span><span class="p">,</span> <span class="n">style</span><span class="p">,</span> <span class="n">circle</span><span class="p">,</span> <span class="n">radius</span><span class="p">,</span> <span class="n">dilate</span>
<span class="p">)</span>
<span class="c1"># Save parameters as preset</span>
<span class="k">if</span> <span class="n">save_preset</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">create_preset</span><span class="p">(</span>
<span class="n">save_preset</span><span class="p">,</span>
<span class="n">layers</span><span class="o">=</span><span class="n">layers</span><span class="p">,</span>
<span class="n">style</span><span class="o">=</span><span class="n">style</span><span class="p">,</span>
<span class="n">circle</span><span class="o">=</span><span class="n">circle</span><span class="p">,</span>
<span class="n">radius</span><span class="o">=</span><span class="n">radius</span><span class="p">,</span>
<span class="n">dilate</span><span class="o">=</span><span class="n">dilate</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">layers</span><span class="p">,</span> <span class="n">style</span><span class="p">,</span> <span class="n">circle</span><span class="p">,</span> <span class="n">radius</span><span class="p">,</span> <span class="n">dilate</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="prettymaps.draw.multiplot" class="doc doc-heading">
<code class="highlight language-python"><span class="n">multiplot</span><span class="p">(</span><span class="o">*</span><span class="n">subplots</span><span class="p">,</span> <span class="n">figsize</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">credit</span><span class="o">=</span><span class="p">{},</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Creates a multiplot using the provided subplots and optional parameters.</p>
<h5 id="prettymaps.draw.multiplot--parameters">Parameters:</h5>
<p><em>subplots : list
A list of subplot objects to be plotted.
figsize : tuple, optional
A tuple specifying the figure size (width, height) in inches.
credit : dict, optional
A dictionary containing credit information for the plot.
</em>*kwargs : dict, optional
Additional keyword arguments to customize the plot.</p>
<h5 id="prettymaps.draw.multiplot--returns">Returns:</h5>
<p>None</p>
<details class="quote">
<summary>Source code in <code>prettymaps/draw.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1253</span>
<span class="normal">1254</span>
<span class="normal">1255</span>
<span class="normal">1256</span>
<span class="normal">1257</span>
<span class="normal">1258</span>
<span class="normal">1259</span>
<span class="normal">1260</span>
<span class="normal">1261</span>
<span class="normal">1262</span>
<span class="normal">1263</span>
<span class="normal">1264</span>
<span class="normal">1265</span>
<span class="normal">1266</span>
<span class="normal">1267</span>
<span class="normal">1268</span>
<span class="normal">1269</span>
<span class="normal">1270</span>
<span class="normal">1271</span>
<span class="normal">1272</span>
<span class="normal">1273</span>
<span class="normal">1274</span>
<span class="normal">1275</span>
<span class="normal">1276</span>
<span class="normal">1277</span>
<span class="normal">1278</span>
<span class="normal">1279</span>
<span class="normal">1280</span>
<span class="normal">1281</span>
<span class="normal">1282</span>
<span class="normal">1283</span>
<span class="normal">1284</span>
<span class="normal">1285</span>
<span class="normal">1286</span>
<span class="normal">1287</span>
<span class="normal">1288</span>
<span class="normal">1289</span>
<span class="normal">1290</span>
<span class="normal">1291</span>
<span class="normal">1292</span>
<span class="normal">1293</span>
<span class="normal">1294</span>
<span class="normal">1295</span>
<span class="normal">1296</span>
<span class="normal">1297</span>
<span class="normal">1298</span>
<span class="normal">1299</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">multiplot</span><span class="p">(</span><span class="o">*</span><span class="n">subplots</span><span class="p">,</span> <span class="n">figsize</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">credit</span><span class="o">=</span><span class="p">{},</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Creates a multiplot using the provided subplots and optional parameters.</span>
<span class="sd"> Parameters:</span>
<span class="sd"> -----------</span>
<span class="sd"> *subplots : list</span>
<span class="sd"> A list of subplot objects to be plotted.</span>
<span class="sd"> figsize : tuple, optional</span>
<span class="sd"> A tuple specifying the figure size (width, height) in inches.</span>
<span class="sd"> credit : dict, optional</span>
<span class="sd"> A dictionary containing credit information for the plot.</span>
<span class="sd"> **kwargs : dict, optional</span>
<span class="sd"> Additional keyword arguments to customize the plot.</span>
<span class="sd"> Returns:</span>
<span class="sd"> --------</span>
<span class="sd"> None</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">fig</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="n">figsize</span><span class="p">)</span>
<span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="mi">111</span><span class="p">,</span> <span class="n">aspect</span><span class="o">=</span><span class="s2">&quot;equal&quot;</span><span class="p">)</span>
<span class="n">mode</span> <span class="o">=</span> <span class="s2">&quot;plotter&quot;</span> <span class="k">if</span> <span class="s2">&quot;plotter&quot;</span> <span class="ow">in</span> <span class="n">kwargs</span> <span class="ow">and</span> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;plotter&quot;</span><span class="p">]</span> <span class="k">else</span> <span class="s2">&quot;matplotlib&quot;</span>
<span class="n">subplots_results</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">plot</span><span class="p">(</span>
<span class="n">subplot</span><span class="o">.</span><span class="n">query</span><span class="p">,</span>
<span class="n">ax</span><span class="o">=</span><span class="n">ax</span><span class="p">,</span>
<span class="n">multiplot</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="o">**</span><span class="n">override_params</span><span class="p">(</span>
<span class="n">subplot</span><span class="o">.</span><span class="n">kwargs</span><span class="p">,</span>
<span class="p">{</span>
<span class="n">k</span><span class="p">:</span> <span class="n">v</span>
<span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="k">if</span> <span class="n">k</span> <span class="o">!=</span> <span class="s2">&quot;load_preset&quot;</span> <span class="ow">or</span> <span class="s2">&quot;load_preset&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">subplot</span><span class="o">.</span><span class="n">kwargs</span>
<span class="p">},</span>
<span class="p">),</span>
<span class="n">show</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">for</span> <span class="n">subplot</span> <span class="ow">in</span> <span class="n">subplots</span>
<span class="p">]</span>
<span class="k">if</span> <span class="n">mode</span> <span class="o">==</span> <span class="s2">&quot;matplotlib&quot;</span><span class="p">:</span>
<span class="n">ax</span><span class="o">.</span><span class="n">axis</span><span class="p">(</span><span class="s2">&quot;off&quot;</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">axis</span><span class="p">(</span><span class="s2">&quot;equal&quot;</span><span class="p">)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">autoscale</span><span class="p">()</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="prettymaps.draw.override_args" class="doc doc-heading">
<code class="highlight language-python"><span class="n">override_args</span><span class="p">(</span><span class="n">layers</span><span class="p">,</span> <span class="n">circle</span><span class="p">,</span> <span class="n">dilate</span><span class="p">,</span> <span class="n">logging</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Override arguments in layers' kwargs</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>layers</code>
</td>
<td>
<code><span title="dict">dict</span></code>
</td>
<td>
<div class="doc-md-description">
<p>prettymaps.plot() Layers parameters dict</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>circle</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="bool">bool</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>prettymaps.plot() 'Circle' parameter</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>dilate</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="typing.Union">Union</span>[<span title="float">float</span>, <span title="bool">bool</span>]]</code>
</td>
<td>
<div class="doc-md-description">
<p>prettymaps.plot() 'dilate' parameter</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>dict</code></td> <td>
<code><span title="dict">dict</span></code>
</td>
<td>
<div class="doc-md-description">
<p>output dict</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>prettymaps/draw.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1041</span>
<span class="normal">1042</span>
<span class="normal">1043</span>
<span class="normal">1044</span>
<span class="normal">1045</span>
<span class="normal">1046</span>
<span class="normal">1047</span>
<span class="normal">1048</span>
<span class="normal">1049</span>
<span class="normal">1050</span>
<span class="normal">1051</span>
<span class="normal">1052</span>
<span class="normal">1053</span>
<span class="normal">1054</span>
<span class="normal">1055</span>
<span class="normal">1056</span>
<span class="normal">1057</span>
<span class="normal">1058</span>
<span class="normal">1059</span>
<span class="normal">1060</span>
<span class="normal">1061</span>
<span class="normal">1062</span>
<span class="normal">1063</span>
<span class="normal">1064</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@log_execution_time</span>
<span class="k">def</span><span class="w"> </span><span class="nf">override_args</span><span class="p">(</span>
<span class="n">layers</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span>
<span class="n">circle</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">],</span>
<span class="n">dilate</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="nb">float</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]],</span>
<span class="n">logging</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Override arguments in layers&#39; kwargs</span>
<span class="sd"> Args:</span>
<span class="sd"> layers (dict): prettymaps.plot() Layers parameters dict</span>
<span class="sd"> circle (Optional[bool]): prettymaps.plot() &#39;Circle&#39; parameter</span>
<span class="sd"> dilate (Optional[Union[float, bool]]): prettymaps.plot() &#39;dilate&#39; parameter</span>
<span class="sd"> Returns:</span>
<span class="sd"> dict: output dict</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">override_args</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;circle&quot;</span><span class="p">,</span> <span class="s2">&quot;dilate&quot;</span><span class="p">]</span>
<span class="k">for</span> <span class="n">layer</span> <span class="ow">in</span> <span class="n">layers</span><span class="p">:</span>
<span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">override_args</span><span class="p">:</span>
<span class="k">if</span> <span class="n">arg</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">layers</span><span class="p">[</span><span class="n">layer</span><span class="p">]:</span>
<span class="n">layers</span><span class="p">[</span><span class="n">layer</span><span class="p">][</span><span class="n">arg</span><span class="p">]</span> <span class="o">=</span> <span class="nb">locals</span><span class="p">()[</span><span class="n">arg</span><span class="p">]</span>
<span class="k">return</span> <span class="n">layers</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="prettymaps.draw.override_params" class="doc doc-heading">
<code class="highlight language-python"><span class="n">override_params</span><span class="p">(</span><span class="n">default_dict</span><span class="p">,</span> <span class="n">new_dict</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Override parameters in 'default_dict' with additional parameters from 'new_dict'</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>default_dict</code>
</td>
<td>
<code><span title="dict">dict</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Default dict to be overriden with 'new_dict' parameters</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>new_dict</code>
</td>
<td>
<code><span title="dict">dict</span></code>
</td>
<td>
<div class="doc-md-description">
<p>New dict to override 'default_dict' parameters</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Name</th> <th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td><code>dict</code></td> <td>
<code><span title="dict">dict</span></code>
</td>
<td>
<div class="doc-md-description">
<p>default_dict overriden with new_dict parameters</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>prettymaps/draw.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1015</span>
<span class="normal">1016</span>
<span class="normal">1017</span>
<span class="normal">1018</span>
<span class="normal">1019</span>
<span class="normal">1020</span>
<span class="normal">1021</span>
<span class="normal">1022</span>
<span class="normal">1023</span>
<span class="normal">1024</span>
<span class="normal">1025</span>
<span class="normal">1026</span>
<span class="normal">1027</span>
<span class="normal">1028</span>
<span class="normal">1029</span>
<span class="normal">1030</span>
<span class="normal">1031</span>
<span class="normal">1032</span>
<span class="normal">1033</span>
<span class="normal">1034</span>
<span class="normal">1035</span>
<span class="normal">1036</span>
<span class="normal">1037</span>
<span class="normal">1038</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">override_params</span><span class="p">(</span><span class="n">default_dict</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span> <span class="n">new_dict</span><span class="p">:</span> <span class="nb">dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Override parameters in &#39;default_dict&#39; with additional parameters from &#39;new_dict&#39;</span>
<span class="sd"> Args:</span>
<span class="sd"> default_dict (dict): Default dict to be overriden with &#39;new_dict&#39; parameters</span>
<span class="sd"> new_dict (dict): New dict to override &#39;default_dict&#39; parameters</span>
<span class="sd"> Returns:</span>
<span class="sd"> dict: default_dict overriden with new_dict parameters</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">final_dict</span> <span class="o">=</span> <span class="n">deepcopy</span><span class="p">(</span><span class="n">default_dict</span><span class="p">)</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">new_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">new_dict</span><span class="p">[</span><span class="n">key</span><span class="p">])</span> <span class="o">==</span> <span class="nb">dict</span><span class="p">:</span>
<span class="k">if</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">final_dict</span><span class="p">:</span>
<span class="n">final_dict</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">override_params</span><span class="p">(</span><span class="n">final_dict</span><span class="p">[</span><span class="n">key</span><span class="p">],</span> <span class="n">new_dict</span><span class="p">[</span><span class="n">key</span><span class="p">])</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">final_dict</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">new_dict</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">final_dict</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">new_dict</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
<span class="k">return</span> <span class="n">final_dict</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="prettymaps.draw.override_preset" class="doc doc-heading">
<code class="highlight language-python"><span class="n">override_preset</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">layers</span><span class="o">=</span><span class="p">{},</span> <span class="n">style</span><span class="o">=</span><span class="p">{},</span> <span class="n">circle</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">radius</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dilate</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Read the preset file given by 'name' and override it with additional parameters</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>name</code>
</td>
<td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
<p><em>description</em></p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>layers</code>
</td>
<td>
<code><span title="typing.Dict">Dict</span>[<span title="str">str</span>, <span title="dict">dict</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p><em>description</em>. Defaults to {}.</p>
</div>
</td>
<td>
<code>{}</code>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>style</code>
</td>
<td>
<code><span title="typing.Dict">Dict</span>[<span title="str">str</span>, <span title="dict">dict</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p><em>description</em>. Defaults to {}.</p>
</div>
</td>
<td>
<code>{}</code>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>circle</code>
</td>
<td>
<code><span title="typing.Union">Union</span>[<span title="float">float</span>, None]</code>
</td>
<td>
<div class="doc-md-description">
<p><em>description</em>. Defaults to None.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>radius</code>
</td>
<td>
<code><span title="typing.Union">Union</span>[<span title="float">float</span>, None]</code>
</td>
<td>
<div class="doc-md-description">
<p><em>description</em>. Defaults to None.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>dilate</code>
</td>
<td>
<code><span title="typing.Union">Union</span>[<span title="float">float</span>, None]</code>
</td>
<td>
<div class="doc-md-description">
<p><em>description</em>. Defaults to None.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="typing.Tuple">Tuple</span>[<span title="dict">dict</span>, <span title="dict">dict</span>, <span title="typing.Optional">Optional</span>[<span title="float">float</span>], <span title="typing.Optional">Optional</span>[<span title="typing.Union">Union</span>[<span title="float">float</span>, <span title="bool">bool</span>]], <span title="typing.Optional">Optional</span>[<span title="typing.Union">Union</span>[<span title="float">float</span>, <span title="bool">bool</span>]]]</code>
</td>
<td>
<div class="doc-md-description">
<p>Tuple[dict, dict, Optional[float], Optional[Union[float, bool]], Optional[Union[float, bool]]]: Preset parameters overriden by additional provided parameters</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>prettymaps/draw.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">849</span>
<span class="normal">850</span>
<span class="normal">851</span>
<span class="normal">852</span>
<span class="normal">853</span>
<span class="normal">854</span>
<span class="normal">855</span>
<span class="normal">856</span>
<span class="normal">857</span>
<span class="normal">858</span>
<span class="normal">859</span>
<span class="normal">860</span>
<span class="normal">861</span>
<span class="normal">862</span>
<span class="normal">863</span>
<span class="normal">864</span>
<span class="normal">865</span>
<span class="normal">866</span>
<span class="normal">867</span>
<span class="normal">868</span>
<span class="normal">869</span>
<span class="normal">870</span>
<span class="normal">871</span>
<span class="normal">872</span>
<span class="normal">873</span>
<span class="normal">874</span>
<span class="normal">875</span>
<span class="normal">876</span>
<span class="normal">877</span>
<span class="normal">878</span>
<span class="normal">879</span>
<span class="normal">880</span>
<span class="normal">881</span>
<span class="normal">882</span>
<span class="normal">883</span>
<span class="normal">884</span>
<span class="normal">885</span>
<span class="normal">886</span>
<span class="normal">887</span>
<span class="normal">888</span>
<span class="normal">889</span>
<span class="normal">890</span>
<span class="normal">891</span>
<span class="normal">892</span>
<span class="normal">893</span>
<span class="normal">894</span>
<span class="normal">895</span>
<span class="normal">896</span>
<span class="normal">897</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">override_preset</span><span class="p">(</span>
<span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
<span class="n">layers</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">dict</span><span class="p">]</span> <span class="o">=</span> <span class="p">{},</span>
<span class="n">style</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">dict</span><span class="p">]</span> <span class="o">=</span> <span class="p">{},</span>
<span class="n">circle</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">radius</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="nb">float</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">dilate</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="nb">float</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span>
<span class="nb">dict</span><span class="p">,</span>
<span class="nb">dict</span><span class="p">,</span>
<span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">],</span>
<span class="n">Optional</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="nb">float</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]],</span>
<span class="n">Optional</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="nb">float</span><span class="p">,</span> <span class="nb">bool</span><span class="p">]],</span>
<span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Read the preset file given by &#39;name&#39; and override it with additional parameters</span>
<span class="sd"> Args:</span>
<span class="sd"> name (str): _description_</span>
<span class="sd"> layers (Dict[str, dict], optional): _description_. Defaults to {}.</span>
<span class="sd"> style (Dict[str, dict], optional): _description_. Defaults to {}.</span>
<span class="sd"> circle (Union[float, None], optional): _description_. Defaults to None.</span>
<span class="sd"> radius (Union[float, None], optional): _description_. Defaults to None.</span>
<span class="sd"> dilate (Union[float, None], optional): _description_. Defaults to None.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Tuple[dict, dict, Optional[float], Optional[Union[float, bool]], Optional[Union[float, bool]]]: Preset parameters overriden by additional provided parameters</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">params</span> <span class="o">=</span> <span class="n">read_preset</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="c1"># Override preset with kwargs</span>
<span class="k">if</span> <span class="s2">&quot;layers&quot;</span> <span class="ow">in</span> <span class="n">params</span><span class="p">:</span>
<span class="n">layers</span> <span class="o">=</span> <span class="n">override_params</span><span class="p">(</span><span class="n">params</span><span class="p">[</span><span class="s2">&quot;layers&quot;</span><span class="p">],</span> <span class="n">layers</span><span class="p">)</span>
<span class="k">if</span> <span class="s2">&quot;style&quot;</span> <span class="ow">in</span> <span class="n">params</span><span class="p">:</span>
<span class="n">style</span> <span class="o">=</span> <span class="n">override_params</span><span class="p">(</span><span class="n">params</span><span class="p">[</span><span class="s2">&quot;style&quot;</span><span class="p">],</span> <span class="n">style</span><span class="p">)</span>
<span class="k">if</span> <span class="n">circle</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="s2">&quot;circle&quot;</span> <span class="ow">in</span> <span class="n">params</span><span class="p">:</span>
<span class="n">circle</span> <span class="o">=</span> <span class="n">params</span><span class="p">[</span><span class="s2">&quot;circle&quot;</span><span class="p">]</span>
<span class="k">if</span> <span class="n">radius</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="s2">&quot;radius&quot;</span> <span class="ow">in</span> <span class="n">params</span><span class="p">:</span>
<span class="n">radius</span> <span class="o">=</span> <span class="n">params</span><span class="p">[</span><span class="s2">&quot;radius&quot;</span><span class="p">]</span>
<span class="k">if</span> <span class="n">dilate</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="s2">&quot;dilate&quot;</span> <span class="ow">in</span> <span class="n">params</span><span class="p">:</span>
<span class="n">dilate</span> <span class="o">=</span> <span class="n">params</span><span class="p">[</span><span class="s2">&quot;dilate&quot;</span><span class="p">]</span>
<span class="c1"># Delete layers marked as &#39;False&#39; in the parameter dict</span>
<span class="k">for</span> <span class="n">layer</span> <span class="ow">in</span> <span class="p">[</span><span class="n">key</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">layers</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> <span class="k">if</span> <span class="n">layers</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">==</span> <span class="kc">False</span><span class="p">]:</span>
<span class="k">del</span> <span class="n">layers</span><span class="p">[</span><span class="n">layer</span><span class="p">]</span>
<span class="c1"># Return overriden presets</span>
<span class="k">return</span> <span class="n">layers</span><span class="p">,</span> <span class="n">style</span><span class="p">,</span> <span class="n">circle</span><span class="p">,</span> <span class="n">radius</span><span class="p">,</span> <span class="n">dilate</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="prettymaps.draw.plot" class="doc doc-heading">
<code class="highlight language-python"><span class="n">plot</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">layers</span><span class="o">=</span><span class="p">{},</span> <span class="n">style</span><span class="o">=</span><span class="p">{},</span> <span class="n">keypoints</span><span class="o">=</span><span class="p">{},</span> <span class="n">preset</span><span class="o">=</span><span class="s1">&#39;default&#39;</span><span class="p">,</span> <span class="n">use_preset</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">save_preset</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">update_preset</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">postprocessing</span><span class="o">=</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="p">,</span> <span class="n">circle</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">radius</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dilate</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">save_as</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">fig</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">ax</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mf">11.7</span><span class="p">,</span> <span class="mf">11.7</span><span class="p">),</span> <span class="n">credit</span><span class="o">=</span><span class="p">{},</span> <span class="n">mode</span><span class="o">=</span><span class="s1">&#39;matplotlib&#39;</span><span class="p">,</span> <span class="n">multiplot</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">show</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">x</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">scale_x</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">scale_y</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">rotation</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">logging</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">semantic</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">adjust_aspect_ratio</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Plots a map based on a given query and specified parameters.
Args:
query: The query for the location to plot. This can be a string (e.g., "Porto Alegre"), a tuple of latitude and longitude coordinates, or a custom GeoDataFrame boundary.
layers: The OpenStreetMap layers to plot. Defaults to an empty dictionary.
style: Matplotlib parameters for drawing each layer. Defaults to an empty dictionary.
keypoints: Keypoints to highlight on the map. Defaults to an empty dictionary.
preset: Preset configuration to use. Defaults to "default".
use_preset: Whether to use the preset configuration. Defaults to True.
save_preset: Path to save the preset configuration. Defaults to None.
update_preset: Path to update the preset configuration with additional parameters. Defaults to None.
circle: Whether to use a circular boundary. Defaults to None.
radius: Radius for the circular or square boundary. Defaults to None.
dilate: Amount to dilate the boundary. Defaults to None.
save_as: Path to save the resulting plot. Defaults to None.
fig: Matplotlib figure object. Defaults to None.
ax: Matplotlib axes object. Defaults to None.
title: Title of the plot. Defaults to None.
figsize: Size of the figure. Defaults to (11.7, 11.7).
constrained_layout: Whether to use constrained layout for the figure. Defaults to True.
credit: Parameters for the credit message. Defaults to an empty dictionary.
mode: Mode for plotting ('matplotlib' or 'plotter'). Defaults to "matplotlib".
multiplot: Whether to use multiplot mode. Defaults to False.
show: Whether to display the plot using matplotlib. Defaults to True.
x: Translation parameter in the x direction. Defaults to 0.
y: Translation parameter in the y direction. Defaults to 0.
scale_x: Scaling parameter in the x direction. Defaults to 1.
scale_y: Scaling parameter in the y direction. Defaults to 1.
rotation: Rotation parameter in degrees. Defaults to 0.
logging: Whether to enable logging. Defaults to False.
Returns:
Plot: The resulting plot object.</p>
<details class="quote">
<summary>Source code in <code>prettymaps/draw.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1102</span>
<span class="normal">1103</span>
<span class="normal">1104</span>
<span class="normal">1105</span>
<span class="normal">1106</span>
<span class="normal">1107</span>
<span class="normal">1108</span>
<span class="normal">1109</span>
<span class="normal">1110</span>
<span class="normal">1111</span>
<span class="normal">1112</span>
<span class="normal">1113</span>
<span class="normal">1114</span>
<span class="normal">1115</span>
<span class="normal">1116</span>
<span class="normal">1117</span>
<span class="normal">1118</span>
<span class="normal">1119</span>
<span class="normal">1120</span>
<span class="normal">1121</span>
<span class="normal">1122</span>
<span class="normal">1123</span>
<span class="normal">1124</span>
<span class="normal">1125</span>
<span class="normal">1126</span>
<span class="normal">1127</span>
<span class="normal">1128</span>
<span class="normal">1129</span>
<span class="normal">1130</span>
<span class="normal">1131</span>
<span class="normal">1132</span>
<span class="normal">1133</span>
<span class="normal">1134</span>
<span class="normal">1135</span>
<span class="normal">1136</span>
<span class="normal">1137</span>
<span class="normal">1138</span>
<span class="normal">1139</span>
<span class="normal">1140</span>
<span class="normal">1141</span>
<span class="normal">1142</span>
<span class="normal">1143</span>
<span class="normal">1144</span>
<span class="normal">1145</span>
<span class="normal">1146</span>
<span class="normal">1147</span>
<span class="normal">1148</span>
<span class="normal">1149</span>
<span class="normal">1150</span>
<span class="normal">1151</span>
<span class="normal">1152</span>
<span class="normal">1153</span>
<span class="normal">1154</span>
<span class="normal">1155</span>
<span class="normal">1156</span>
<span class="normal">1157</span>
<span class="normal">1158</span>
<span class="normal">1159</span>
<span class="normal">1160</span>
<span class="normal">1161</span>
<span class="normal">1162</span>
<span class="normal">1163</span>
<span class="normal">1164</span>
<span class="normal">1165</span>
<span class="normal">1166</span>
<span class="normal">1167</span>
<span class="normal">1168</span>
<span class="normal">1169</span>
<span class="normal">1170</span>
<span class="normal">1171</span>
<span class="normal">1172</span>
<span class="normal">1173</span>
<span class="normal">1174</span>
<span class="normal">1175</span>
<span class="normal">1176</span>
<span class="normal">1177</span>
<span class="normal">1178</span>
<span class="normal">1179</span>
<span class="normal">1180</span>
<span class="normal">1181</span>
<span class="normal">1182</span>
<span class="normal">1183</span>
<span class="normal">1184</span>
<span class="normal">1185</span>
<span class="normal">1186</span>
<span class="normal">1187</span>
<span class="normal">1188</span>
<span class="normal">1189</span>
<span class="normal">1190</span>
<span class="normal">1191</span>
<span class="normal">1192</span>
<span class="normal">1193</span>
<span class="normal">1194</span>
<span class="normal">1195</span>
<span class="normal">1196</span>
<span class="normal">1197</span>
<span class="normal">1198</span>
<span class="normal">1199</span>
<span class="normal">1200</span>
<span class="normal">1201</span>
<span class="normal">1202</span>
<span class="normal">1203</span>
<span class="normal">1204</span>
<span class="normal">1205</span>
<span class="normal">1206</span>
<span class="normal">1207</span>
<span class="normal">1208</span>
<span class="normal">1209</span>
<span class="normal">1210</span>
<span class="normal">1211</span>
<span class="normal">1212</span>
<span class="normal">1213</span>
<span class="normal">1214</span>
<span class="normal">1215</span>
<span class="normal">1216</span>
<span class="normal">1217</span>
<span class="normal">1218</span>
<span class="normal">1219</span>
<span class="normal">1220</span>
<span class="normal">1221</span>
<span class="normal">1222</span>
<span class="normal">1223</span>
<span class="normal">1224</span>
<span class="normal">1225</span>
<span class="normal">1226</span>
<span class="normal">1227</span>
<span class="normal">1228</span>
<span class="normal">1229</span>
<span class="normal">1230</span>
<span class="normal">1231</span>
<span class="normal">1232</span>
<span class="normal">1233</span>
<span class="normal">1234</span>
<span class="normal">1235</span>
<span class="normal">1236</span>
<span class="normal">1237</span>
<span class="normal">1238</span>
<span class="normal">1239</span>
<span class="normal">1240</span>
<span class="normal">1241</span>
<span class="normal">1242</span>
<span class="normal">1243</span>
<span class="normal">1244</span>
<span class="normal">1245</span>
<span class="normal">1246</span>
<span class="normal">1247</span>
<span class="normal">1248</span>
<span class="normal">1249</span>
<span class="normal">1250</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">plot</span><span class="p">(</span>
<span class="n">query</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">float</span><span class="p">,</span> <span class="nb">float</span><span class="p">]</span> <span class="o">|</span> <span class="n">gp</span><span class="o">.</span><span class="n">GeoDataFrame</span><span class="p">,</span>
<span class="n">layers</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{},</span>
<span class="n">style</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{},</span>
<span class="n">keypoints</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{},</span>
<span class="n">preset</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;default&quot;</span><span class="p">,</span>
<span class="n">use_preset</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
<span class="n">save_preset</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">update_preset</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">postprocessing</span><span class="p">:</span> <span class="n">Callable</span><span class="p">[</span>
<span class="p">[</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">gp</span><span class="o">.</span><span class="n">GeoDataFrame</span><span class="p">]],</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">gp</span><span class="o">.</span><span class="n">GeoDataFrame</span><span class="p">]</span>
<span class="p">]</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="p">,</span>
<span class="n">circle</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">radius</span><span class="p">:</span> <span class="nb">float</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">dilate</span><span class="p">:</span> <span class="nb">float</span> <span class="o">|</span> <span class="nb">bool</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">save_as</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">fig</span><span class="p">:</span> <span class="n">plt</span><span class="o">.</span><span class="n">Figure</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">ax</span><span class="p">:</span> <span class="n">plt</span><span class="o">.</span><span class="n">Axes</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">figsize</span><span class="p">:</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">float</span><span class="p">,</span> <span class="nb">float</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="mf">11.7</span><span class="p">,</span> <span class="mf">11.7</span><span class="p">),</span>
<span class="n">credit</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{},</span>
<span class="n">mode</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;matplotlib&quot;</span><span class="p">,</span>
<span class="n">multiplot</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
<span class="n">show</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
<span class="n">x</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
<span class="n">y</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
<span class="n">scale_x</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span>
<span class="n">scale_y</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span>
<span class="n">rotation</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
<span class="n">logging</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
<span class="n">semantic</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
<span class="n">adjust_aspect_ratio</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Plot</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Plots a map based on a given query and specified parameters.</span>
<span class="sd"> Args:</span>
<span class="sd"> query: The query for the location to plot. This can be a string (e.g., &quot;Porto Alegre&quot;), a tuple of latitude and longitude coordinates, or a custom GeoDataFrame boundary.</span>
<span class="sd"> layers: The OpenStreetMap layers to plot. Defaults to an empty dictionary.</span>
<span class="sd"> style: Matplotlib parameters for drawing each layer. Defaults to an empty dictionary.</span>
<span class="sd"> keypoints: Keypoints to highlight on the map. Defaults to an empty dictionary.</span>
<span class="sd"> preset: Preset configuration to use. Defaults to &quot;default&quot;.</span>
<span class="sd"> use_preset: Whether to use the preset configuration. Defaults to True.</span>
<span class="sd"> save_preset: Path to save the preset configuration. Defaults to None.</span>
<span class="sd"> update_preset: Path to update the preset configuration with additional parameters. Defaults to None.</span>
<span class="sd"> circle: Whether to use a circular boundary. Defaults to None.</span>
<span class="sd"> radius: Radius for the circular or square boundary. Defaults to None.</span>
<span class="sd"> dilate: Amount to dilate the boundary. Defaults to None.</span>
<span class="sd"> save_as: Path to save the resulting plot. Defaults to None.</span>
<span class="sd"> fig: Matplotlib figure object. Defaults to None.</span>
<span class="sd"> ax: Matplotlib axes object. Defaults to None.</span>
<span class="sd"> title: Title of the plot. Defaults to None.</span>
<span class="sd"> figsize: Size of the figure. Defaults to (11.7, 11.7).</span>
<span class="sd"> constrained_layout: Whether to use constrained layout for the figure. Defaults to True.</span>
<span class="sd"> credit: Parameters for the credit message. Defaults to an empty dictionary.</span>
<span class="sd"> mode: Mode for plotting (&#39;matplotlib&#39; or &#39;plotter&#39;). Defaults to &quot;matplotlib&quot;.</span>
<span class="sd"> multiplot: Whether to use multiplot mode. Defaults to False.</span>
<span class="sd"> show: Whether to display the plot using matplotlib. Defaults to True.</span>
<span class="sd"> x: Translation parameter in the x direction. Defaults to 0.</span>
<span class="sd"> y: Translation parameter in the y direction. Defaults to 0.</span>
<span class="sd"> scale_x: Scaling parameter in the x direction. Defaults to 1.</span>
<span class="sd"> scale_y: Scaling parameter in the y direction. Defaults to 1.</span>
<span class="sd"> rotation: Rotation parameter in degrees. Defaults to 0.</span>
<span class="sd"> logging: Whether to enable logging. Defaults to False.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Plot: The resulting plot object.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># 1. Manage presets</span>
<span class="n">layers</span><span class="p">,</span> <span class="n">style</span><span class="p">,</span> <span class="n">circle</span><span class="p">,</span> <span class="n">radius</span><span class="p">,</span> <span class="n">dilate</span> <span class="o">=</span> <span class="n">manage_presets</span><span class="p">(</span>
<span class="n">preset</span> <span class="k">if</span> <span class="n">use_preset</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">save_preset</span><span class="p">,</span>
<span class="n">update_preset</span><span class="p">,</span>
<span class="n">layers</span><span class="p">,</span>
<span class="n">style</span><span class="p">,</span>
<span class="n">circle</span><span class="p">,</span>
<span class="n">radius</span><span class="p">,</span>
<span class="n">dilate</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># 2. Init matplotlib figure &amp; axis and vsketch object</span>
<span class="n">fig</span><span class="p">,</span> <span class="n">ax</span><span class="p">,</span> <span class="n">vsk</span> <span class="o">=</span> <span class="n">init_plot</span><span class="p">(</span>
<span class="n">layers</span><span class="p">,</span>
<span class="n">fig</span><span class="p">,</span>
<span class="n">ax</span><span class="p">,</span>
<span class="n">figsize</span><span class="p">,</span>
<span class="n">mode</span><span class="p">,</span>
<span class="n">adjust_aspect_ratio</span><span class="o">=</span><span class="n">adjust_aspect_ratio</span><span class="p">,</span>
<span class="n">logging</span><span class="o">=</span><span class="n">logging</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># 3. Override arguments in layers&#39; kwargs dict</span>
<span class="n">layers</span> <span class="o">=</span> <span class="n">override_args</span><span class="p">(</span><span class="n">layers</span><span class="p">,</span> <span class="n">circle</span><span class="p">,</span> <span class="n">dilate</span><span class="p">,</span> <span class="n">logging</span><span class="o">=</span><span class="n">logging</span><span class="p">)</span>
<span class="c1"># 4. Fetch geodataframes</span>
<span class="n">start_time</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
<span class="n">gdfs</span> <span class="o">=</span> <span class="n">get_gdfs</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">layers</span><span class="p">,</span> <span class="n">radius</span><span class="p">,</span> <span class="n">dilate</span><span class="p">,</span> <span class="o">-</span><span class="n">rotation</span><span class="p">,</span> <span class="n">logging</span><span class="o">=</span><span class="n">logging</span><span class="p">)</span>
<span class="n">fetch_time</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">-</span> <span class="n">start_time</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Fetching geodataframes took </span><span class="si">{</span><span class="n">fetch_time</span><span class="si">:</span><span class="s2">.2f</span><span class="si">}</span><span class="s2"> seconds&quot;</span><span class="p">)</span>
<span class="c1"># 5. Apply transformations to GeoDataFrames (translation, scale, rotation)</span>
<span class="n">gdfs</span> <span class="o">=</span> <span class="n">transform_gdfs</span><span class="p">(</span><span class="n">gdfs</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">scale_x</span><span class="p">,</span> <span class="n">scale_y</span><span class="p">,</span> <span class="n">rotation</span><span class="p">,</span> <span class="n">logging</span><span class="o">=</span><span class="n">logging</span><span class="p">)</span>
<span class="c1"># 6. Apply a postprocessing function to the GeoDataFrames, if provided</span>
<span class="n">gdfs</span> <span class="o">=</span> <span class="n">postprocessing</span><span class="p">(</span><span class="n">gdfs</span><span class="p">)</span>
<span class="c1"># 7. Create background GeoDataFrame and get (x,y) bounds</span>
<span class="n">background</span><span class="p">,</span> <span class="n">xmin</span><span class="p">,</span> <span class="n">ymin</span><span class="p">,</span> <span class="n">xmax</span><span class="p">,</span> <span class="n">ymax</span><span class="p">,</span> <span class="n">dx</span><span class="p">,</span> <span class="n">dy</span> <span class="o">=</span> <span class="n">create_background</span><span class="p">(</span>
<span class="n">gdfs</span><span class="p">,</span> <span class="n">style</span><span class="p">,</span> <span class="n">logging</span><span class="o">=</span><span class="n">logging</span>
<span class="p">)</span>
<span class="c1"># 8. Draw layers</span>
<span class="n">draw_layers</span><span class="p">(</span><span class="n">layers</span><span class="p">,</span> <span class="n">gdfs</span><span class="p">,</span> <span class="n">style</span><span class="p">,</span> <span class="n">fig</span><span class="p">,</span> <span class="n">ax</span><span class="p">,</span> <span class="n">vsk</span><span class="p">,</span> <span class="n">mode</span><span class="p">,</span> <span class="n">logging</span><span class="o">=</span><span class="n">logging</span><span class="p">)</span>
<span class="c1"># 9. Draw keypoints</span>
<span class="n">keypoints</span> <span class="o">=</span> <span class="n">draw_keypoints</span><span class="p">(</span><span class="n">keypoints</span><span class="p">,</span> <span class="n">gdfs</span><span class="p">,</span> <span class="n">ax</span><span class="p">,</span> <span class="n">logging</span><span class="o">=</span><span class="n">logging</span><span class="p">)</span>
<span class="c1"># 9. Draw background</span>
<span class="n">draw_background</span><span class="p">(</span><span class="n">background</span><span class="p">,</span> <span class="n">ax</span><span class="p">,</span> <span class="n">style</span><span class="p">,</span> <span class="n">mode</span><span class="p">,</span> <span class="n">logging</span><span class="o">=</span><span class="n">logging</span><span class="p">)</span>
<span class="c1"># 10. Draw credit message</span>
<span class="n">draw_credit</span><span class="p">(</span><span class="n">ax</span><span class="p">,</span> <span class="n">background</span><span class="p">,</span> <span class="n">credit</span><span class="p">,</span> <span class="n">mode</span><span class="p">,</span> <span class="n">multiplot</span><span class="p">,</span> <span class="n">logging</span><span class="o">=</span><span class="n">logging</span><span class="p">)</span>
<span class="c1"># 11. Draw hillshade</span>
<span class="n">draw_hillshade</span><span class="p">(</span>
<span class="n">layers</span><span class="p">,</span>
<span class="n">gdfs</span><span class="p">,</span>
<span class="n">ax</span><span class="p">,</span>
<span class="n">logging</span><span class="o">=</span><span class="n">logging</span><span class="p">,</span>
<span class="o">**</span><span class="p">(</span><span class="n">layers</span><span class="p">[</span><span class="s2">&quot;hillshade&quot;</span><span class="p">]</span> <span class="k">if</span> <span class="s2">&quot;hillshade&quot;</span> <span class="ow">in</span> <span class="n">layers</span> <span class="k">else</span> <span class="p">{}),</span>
<span class="p">)</span>
<span class="c1"># 12. Create Plot object</span>
<span class="n">plot</span> <span class="o">=</span> <span class="n">Plot</span><span class="p">(</span><span class="n">gdfs</span><span class="p">,</span> <span class="n">fig</span><span class="p">,</span> <span class="n">ax</span><span class="p">,</span> <span class="n">background</span><span class="p">,</span> <span class="n">keypoints</span><span class="p">)</span>
<span class="c1"># 13. Save plot as image</span>
<span class="k">if</span> <span class="n">save_as</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">plt</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">save_as</span><span class="p">)</span>
<span class="c1"># 14. Show plot</span>
<span class="k">if</span> <span class="n">show</span><span class="p">:</span>
<span class="k">if</span> <span class="n">mode</span> <span class="o">==</span> <span class="s2">&quot;plotter&quot;</span><span class="p">:</span>
<span class="n">vsk</span><span class="o">.</span><span class="n">display</span><span class="p">()</span>
<span class="k">elif</span> <span class="n">mode</span> <span class="o">==</span> <span class="s2">&quot;matplotlib&quot;</span><span class="p">:</span>
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown mode </span><span class="si">{</span><span class="n">mode</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">plt</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<span class="k">return</span> <span class="n">plot</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="prettymaps.draw.plot_gdf" class="doc doc-heading">
<code class="highlight language-python"><span class="n">plot_gdf</span><span class="p">(</span><span class="n">layer</span><span class="p">,</span> <span class="n">gdf</span><span class="p">,</span> <span class="n">ax</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s1">&#39;matplotlib&#39;</span><span class="p">,</span> <span class="n">vsk</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">palette</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">union</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">dilate_points</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">dilate_lines</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Plot a layer</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>layer</code>
</td>
<td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
<p>layer name</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>gdf</code>
</td>
<td>
<code><span title="geopandas.GeoDataFrame">GeoDataFrame</span></code>
</td>
<td>
<div class="doc-md-description">
<p>GeoDataFrame</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>ax</code>
</td>
<td>
<code><span title="matplotlib.axes.Axes">Axes</span></code>
</td>
<td>
<div class="doc-md-description">
<p>matplotlib axis object</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>mode</code>
</td>
<td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
<p>drawing mode. Options: 'matplotlib', 'vsketch'. Defaults to 'matplotlib'</p>
</div>
</td>
<td>
<code>&#39;matplotlib&#39;</code>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>vsk</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="vsketch.SketchClass">SketchClass</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Vsketch object. Mandatory if mode == 'plotter'</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>palette</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="typing.List">List</span>[<span title="str">str</span>]]</code>
</td>
<td>
<div class="doc-md-description">
<p>Color palette. Defaults to None.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>width</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="typing.Union">Union</span>[<span title="dict">dict</span>, <span title="float">float</span>]]</code>
</td>
<td>
<div class="doc-md-description">
<p>Street widths. Either a dictionary or a float. Defaults to None.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>union</code>
</td>
<td>
<code><span title="bool">bool</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Whether to join geometries. Defaults to False.</p>
</div>
</td>
<td>
<code>False</code>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>dilate_points</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="float">float</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Amount of dilation to be applied to point (1D) geometries. Defaults to None.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>dilate_lines</code>
</td>
<td>
<code><span title="typing.Optional">Optional</span>[<span title="float">float</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Amount of dilation to be applied to line (2D) geometries. Defaults to None.</p>
</div>
</td>
<td>
<code>None</code>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Raises:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="Exception">Exception</span></code>
</td>
<td>
<div class="doc-md-description">
<p><em>description</em></p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>prettymaps/draw.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">292</span>
<span class="normal">293</span>
<span class="normal">294</span>
<span class="normal">295</span>
<span class="normal">296</span>
<span class="normal">297</span>
<span class="normal">298</span>
<span class="normal">299</span>
<span class="normal">300</span>
<span class="normal">301</span>
<span class="normal">302</span>
<span class="normal">303</span>
<span class="normal">304</span>
<span class="normal">305</span>
<span class="normal">306</span>
<span class="normal">307</span>
<span class="normal">308</span>
<span class="normal">309</span>
<span class="normal">310</span>
<span class="normal">311</span>
<span class="normal">312</span>
<span class="normal">313</span>
<span class="normal">314</span>
<span class="normal">315</span>
<span class="normal">316</span>
<span class="normal">317</span>
<span class="normal">318</span>
<span class="normal">319</span>
<span class="normal">320</span>
<span class="normal">321</span>
<span class="normal">322</span>
<span class="normal">323</span>
<span class="normal">324</span>
<span class="normal">325</span>
<span class="normal">326</span>
<span class="normal">327</span>
<span class="normal">328</span>
<span class="normal">329</span>
<span class="normal">330</span>
<span class="normal">331</span>
<span class="normal">332</span>
<span class="normal">333</span>
<span class="normal">334</span>
<span class="normal">335</span>
<span class="normal">336</span>
<span class="normal">337</span>
<span class="normal">338</span>
<span class="normal">339</span>
<span class="normal">340</span>
<span class="normal">341</span>
<span class="normal">342</span>
<span class="normal">343</span>
<span class="normal">344</span>
<span class="normal">345</span>
<span class="normal">346</span>
<span class="normal">347</span>
<span class="normal">348</span>
<span class="normal">349</span>
<span class="normal">350</span>
<span class="normal">351</span>
<span class="normal">352</span>
<span class="normal">353</span>
<span class="normal">354</span>
<span class="normal">355</span>
<span class="normal">356</span>
<span class="normal">357</span>
<span class="normal">358</span>
<span class="normal">359</span>
<span class="normal">360</span>
<span class="normal">361</span>
<span class="normal">362</span>
<span class="normal">363</span>
<span class="normal">364</span>
<span class="normal">365</span>
<span class="normal">366</span>
<span class="normal">367</span>
<span class="normal">368</span>
<span class="normal">369</span>
<span class="normal">370</span>
<span class="normal">371</span>
<span class="normal">372</span>
<span class="normal">373</span>
<span class="normal">374</span>
<span class="normal">375</span>
<span class="normal">376</span>
<span class="normal">377</span>
<span class="normal">378</span>
<span class="normal">379</span>
<span class="normal">380</span>
<span class="normal">381</span>
<span class="normal">382</span>
<span class="normal">383</span>
<span class="normal">384</span>
<span class="normal">385</span>
<span class="normal">386</span>
<span class="normal">387</span>
<span class="normal">388</span>
<span class="normal">389</span>
<span class="normal">390</span>
<span class="normal">391</span>
<span class="normal">392</span>
<span class="normal">393</span>
<span class="normal">394</span>
<span class="normal">395</span>
<span class="normal">396</span>
<span class="normal">397</span>
<span class="normal">398</span>
<span class="normal">399</span>
<span class="normal">400</span>
<span class="normal">401</span>
<span class="normal">402</span>
<span class="normal">403</span>
<span class="normal">404</span>
<span class="normal">405</span>
<span class="normal">406</span>
<span class="normal">407</span>
<span class="normal">408</span>
<span class="normal">409</span>
<span class="normal">410</span>
<span class="normal">411</span>
<span class="normal">412</span>
<span class="normal">413</span>
<span class="normal">414</span>
<span class="normal">415</span>
<span class="normal">416</span>
<span class="normal">417</span>
<span class="normal">418</span>
<span class="normal">419</span>
<span class="normal">420</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">plot_gdf</span><span class="p">(</span>
<span class="n">layer</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
<span class="n">gdf</span><span class="p">:</span> <span class="n">gp</span><span class="o">.</span><span class="n">GeoDataFrame</span><span class="p">,</span>
<span class="n">ax</span><span class="p">:</span> <span class="n">matplotlib</span><span class="o">.</span><span class="n">axes</span><span class="o">.</span><span class="n">Axes</span><span class="p">,</span>
<span class="n">mode</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;matplotlib&quot;</span><span class="p">,</span>
<span class="c1"># vsk: Optional[vsketch.SketchClass] = None,</span>
<span class="n">vsk</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">palette</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">width</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Union</span><span class="p">[</span><span class="nb">dict</span><span class="p">,</span> <span class="nb">float</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">union</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
<span class="n">dilate_points</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">dilate_lines</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">float</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
<span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Plot a layer</span>
<span class="sd"> Args:</span>
<span class="sd"> layer (str): layer name</span>
<span class="sd"> gdf (gp.GeoDataFrame): GeoDataFrame</span>
<span class="sd"> ax (matplotlib.axes.Axes): matplotlib axis object</span>
<span class="sd"> mode (str): drawing mode. Options: &#39;matplotlib&#39;, &#39;vsketch&#39;. Defaults to &#39;matplotlib&#39;</span>
<span class="sd"> vsk (Optional[vsketch.SketchClass]): Vsketch object. Mandatory if mode == &#39;plotter&#39;</span>
<span class="sd"> palette (Optional[List[str]], optional): Color palette. Defaults to None.</span>
<span class="sd"> width (Optional[Union[dict, float]], optional): Street widths. Either a dictionary or a float. Defaults to None.</span>
<span class="sd"> union (bool, optional): Whether to join geometries. Defaults to False.</span>
<span class="sd"> dilate_points (Optional[float], optional): Amount of dilation to be applied to point (1D) geometries. Defaults to None.</span>
<span class="sd"> dilate_lines (Optional[float], optional): Amount of dilation to be applied to line (2D) geometries. Defaults to None.</span>
<span class="sd"> Raises:</span>
<span class="sd"> Exception: _description_</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Get hatch and hatch_c parameter</span>
<span class="n">hatch_c</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;hatch_c&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="s2">&quot;hatch_c&quot;</span> <span class="ow">in</span> <span class="n">kwargs</span> <span class="k">else</span> <span class="kc">None</span>
<span class="c1"># Convert GDF to shapely geometries</span>
<span class="n">geometries</span> <span class="o">=</span> <span class="n">gdf_to_shapely</span><span class="p">(</span>
<span class="n">layer</span><span class="p">,</span> <span class="n">gdf</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">point_size</span><span class="o">=</span><span class="n">dilate_points</span><span class="p">,</span> <span class="n">line_width</span><span class="o">=</span><span class="n">dilate_lines</span>
<span class="p">)</span>
<span class="c1"># Unite geometries</span>
<span class="k">if</span> <span class="n">union</span><span class="p">:</span>
<span class="n">geometries</span> <span class="o">=</span> <span class="n">shapely</span><span class="o">.</span><span class="n">ops</span><span class="o">.</span><span class="n">unary_union</span><span class="p">(</span><span class="n">GeometryCollection</span><span class="p">([</span><span class="n">geometries</span><span class="p">]))</span>
<span class="k">if</span> <span class="p">(</span><span class="n">palette</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="s2">&quot;fc&quot;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;fc&quot;</span><span class="p">])</span> <span class="o">!=</span> <span class="nb">str</span><span class="p">):</span>
<span class="n">palette</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;fc&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">shape</span> <span class="ow">in</span> <span class="n">geometries</span><span class="o">.</span><span class="n">geoms</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">geometries</span><span class="p">,</span> <span class="s2">&quot;geoms&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="p">[</span><span class="n">geometries</span><span class="p">]:</span>
<span class="k">if</span> <span class="n">mode</span> <span class="o">==</span> <span class="s2">&quot;matplotlib&quot;</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">shape</span><span class="p">)</span> <span class="ow">in</span> <span class="p">[</span><span class="n">Polygon</span><span class="p">,</span> <span class="n">MultiPolygon</span><span class="p">]:</span>
<span class="c1"># Plot main shape (without silhouette)</span>
<span class="n">ax</span><span class="o">.</span><span class="n">add_patch</span><span class="p">(</span>
<span class="n">PolygonPatch</span><span class="p">(</span>
<span class="n">shape</span><span class="p">,</span>
<span class="n">lw</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
<span class="n">ec</span><span class="o">=</span><span class="p">(</span>
<span class="n">hatch_c</span>
<span class="k">if</span> <span class="n">hatch_c</span>
<span class="k">else</span> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;ec&quot;</span><span class="p">]</span> <span class="k">if</span> <span class="s2">&quot;ec&quot;</span> <span class="ow">in</span> <span class="n">kwargs</span> <span class="k">else</span> <span class="kc">None</span>
<span class="p">),</span>
<span class="n">fc</span><span class="o">=</span><span class="p">(</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;fc&quot;</span><span class="p">]</span>
<span class="k">if</span> <span class="s2">&quot;fc&quot;</span> <span class="ow">in</span> <span class="n">kwargs</span>
<span class="k">else</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">choice</span><span class="p">(</span><span class="n">palette</span><span class="p">)</span> <span class="k">if</span> <span class="n">palette</span> <span class="k">else</span> <span class="kc">None</span>
<span class="p">),</span>
<span class="o">**</span><span class="p">{</span>
<span class="n">k</span><span class="p">:</span> <span class="n">v</span>
<span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="k">if</span> <span class="n">k</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;lw&quot;</span><span class="p">,</span> <span class="s2">&quot;ec&quot;</span><span class="p">,</span> <span class="s2">&quot;fc&quot;</span><span class="p">]</span>
<span class="p">},</span>
<span class="p">),</span>
<span class="p">)</span>
<span class="c1"># Plot just silhouette</span>
<span class="n">ax</span><span class="o">.</span><span class="n">add_patch</span><span class="p">(</span>
<span class="n">PolygonPatch</span><span class="p">(</span>
<span class="n">shape</span><span class="p">,</span>
<span class="n">fill</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="o">**</span><span class="p">{</span>
<span class="n">k</span><span class="p">:</span> <span class="n">v</span>
<span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="k">if</span> <span class="n">k</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;hatch&quot;</span><span class="p">,</span> <span class="s2">&quot;fill&quot;</span><span class="p">]</span>
<span class="p">},</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">shape</span><span class="p">)</span> <span class="o">==</span> <span class="n">LineString</span><span class="p">:</span>
<span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="o">*</span><span class="n">shape</span><span class="o">.</span><span class="n">xy</span><span class="p">,</span>
<span class="n">c</span><span class="o">=</span><span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;ec&quot;</span><span class="p">]</span> <span class="k">if</span> <span class="s2">&quot;ec&quot;</span> <span class="ow">in</span> <span class="n">kwargs</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
<span class="o">**</span><span class="p">{</span>
<span class="n">k</span><span class="p">:</span> <span class="n">v</span>
<span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="k">if</span> <span class="n">k</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;lw&quot;</span><span class="p">,</span> <span class="s2">&quot;ls&quot;</span><span class="p">,</span> <span class="s2">&quot;dashes&quot;</span><span class="p">,</span> <span class="s2">&quot;zorder&quot;</span><span class="p">]</span>
<span class="p">},</span>
<span class="p">)</span>
<span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">shape</span><span class="p">)</span> <span class="o">==</span> <span class="n">MultiLineString</span><span class="p">:</span>
<span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">shape</span><span class="o">.</span><span class="n">geoms</span><span class="p">:</span>
<span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span>
<span class="o">*</span><span class="n">c</span><span class="o">.</span><span class="n">xy</span><span class="p">,</span>
<span class="n">c</span><span class="o">=</span><span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;ec&quot;</span><span class="p">]</span> <span class="k">if</span> <span class="s2">&quot;ec&quot;</span> <span class="ow">in</span> <span class="n">kwargs</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
<span class="o">**</span><span class="p">{</span>
<span class="n">k</span><span class="p">:</span> <span class="n">v</span>
<span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="k">if</span> <span class="n">k</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;lw&quot;</span><span class="p">,</span> <span class="s2">&quot;lt&quot;</span><span class="p">,</span> <span class="s2">&quot;dashes&quot;</span><span class="p">,</span> <span class="s2">&quot;zorder&quot;</span><span class="p">]</span>
<span class="p">},</span>
<span class="p">)</span>
<span class="k">elif</span> <span class="n">mode</span> <span class="o">==</span> <span class="s2">&quot;plotter&quot;</span><span class="p">:</span>
<span class="k">if</span> <span class="p">(</span><span class="s2">&quot;draw&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">)</span> <span class="ow">or</span> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;draw&quot;</span><span class="p">]:</span>
<span class="c1"># Set stroke</span>
<span class="k">if</span> <span class="s2">&quot;stroke&quot;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="n">vsk</span><span class="o">.</span><span class="n">stroke</span><span class="p">(</span><span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;stroke&quot;</span><span class="p">])</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">vsk</span><span class="o">.</span><span class="n">stroke</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="c1"># Set pen width</span>
<span class="k">if</span> <span class="s2">&quot;penWidth&quot;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="n">vsk</span><span class="o">.</span><span class="n">penWidth</span><span class="p">(</span><span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;penWidth&quot;</span><span class="p">])</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">vsk</span><span class="o">.</span><span class="n">penWidth</span><span class="p">(</span><span class="mf">0.3</span><span class="p">)</span>
<span class="k">if</span> <span class="s2">&quot;fill&quot;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="n">vsk</span><span class="o">.</span><span class="n">fill</span><span class="p">(</span><span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;fill&quot;</span><span class="p">])</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">vsk</span><span class="o">.</span><span class="n">noFill</span><span class="p">()</span>
<span class="n">vsk</span><span class="o">.</span><span class="n">geometry</span><span class="p">(</span><span class="n">shape</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown mode </span><span class="si">{</span><span class="n">mode</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="prettymaps.draw.presets_directory" class="doc doc-heading">
<code class="highlight language-python"><span class="n">presets_directory</span><span class="p">()</span></code>
</h3>
<div class="doc doc-contents ">
<p>Returns the path to the 'presets' directory.
This function constructs the path to the 'presets' directory, which is
located in the same directory as the current script file.
Returns:
str: The full path to the 'presets' directory.</p>
<details class="quote">
<summary>Source code in <code>prettymaps/draw.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">698</span>
<span class="normal">699</span>
<span class="normal">700</span>
<span class="normal">701</span>
<span class="normal">702</span>
<span class="normal">703</span>
<span class="normal">704</span>
<span class="normal">705</span>
<span class="normal">706</span>
<span class="normal">707</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">presets_directory</span><span class="p">():</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns the path to the &#39;presets&#39; directory.</span>
<span class="sd"> This function constructs the path to the &#39;presets&#39; directory, which is</span>
<span class="sd"> located in the same directory as the current script file.</span>
<span class="sd"> Returns:</span>
<span class="sd"> str: The full path to the &#39;presets&#39; directory.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span><span class="p">(</span><span class="vm">__file__</span><span class="p">)</span><span class="o">.</span><span class="n">resolve</span><span class="p">()</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="s2">&quot;presets&quot;</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="prettymaps.draw.read_preset" class="doc doc-heading">
<code class="highlight language-python"><span class="n">read_preset</span><span class="p">(</span><span class="n">name</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Read a preset from the presets folder (prettymaps/presets/)</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>name</code>
</td>
<td>
<code><span title="str">str</span></code>
</td>
<td>
<div class="doc-md-description">
<p>Preset name</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="typing.Dict">Dict</span>[<span title="str">str</span>, <span title="dict">dict</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>parameters dictionary</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>prettymaps/draw.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">748</span>
<span class="normal">749</span>
<span class="normal">750</span>
<span class="normal">751</span>
<span class="normal">752</span>
<span class="normal">753</span>
<span class="normal">754</span>
<span class="normal">755</span>
<span class="normal">756</span>
<span class="normal">757</span>
<span class="normal">758</span>
<span class="normal">759</span>
<span class="normal">760</span>
<span class="normal">761</span>
<span class="normal">762</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">read_preset</span><span class="p">(</span><span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">dict</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Read a preset from the presets folder (prettymaps/presets/)</span>
<span class="sd"> Args:</span>
<span class="sd"> name (str): Preset name</span>
<span class="sd"> Returns:</span>
<span class="sd"> (Dict[str,dict]): parameters dictionary</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">presets_directory</span><span class="p">(),</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">.json&quot;</span><span class="p">)</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
<span class="c1"># Load params from JSON file</span>
<span class="n">params</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
<span class="k">return</span> <span class="n">params</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="prettymaps.draw.transform_gdfs" class="doc doc-heading">
<code class="highlight language-python"><span class="n">transform_gdfs</span><span class="p">(</span><span class="n">gdfs</span><span class="p">,</span> <span class="n">x</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">scale_x</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">scale_y</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">rotation</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">logging</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Apply geometric transformations to dictionary of GeoDataFrames</p>
<p><span class="doc-section-title">Parameters:</span></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code>gdfs</code>
</td>
<td>
<code><span title="typing.Dict">Dict</span>[<span title="str">str</span>, <span title="geopandas.GeoDataFrame">GeoDataFrame</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Dictionary of GeoDataFrames</p>
</div>
</td>
<td>
<em>required</em>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>x</code>
</td>
<td>
<code><span title="float">float</span></code>
</td>
<td>
<div class="doc-md-description">
<p>x-axis translation. Defaults to 0.</p>
</div>
</td>
<td>
<code>0</code>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>y</code>
</td>
<td>
<code><span title="float">float</span></code>
</td>
<td>
<div class="doc-md-description">
<p>y-axis translation. Defaults to 0.</p>
</div>
</td>
<td>
<code>0</code>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>scale_x</code>
</td>
<td>
<code><span title="float">float</span></code>
</td>
<td>
<div class="doc-md-description">
<p>x-axis scale. Defaults to 1.</p>
</div>
</td>
<td>
<code>1</code>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>scale_y</code>
</td>
<td>
<code><span title="float">float</span></code>
</td>
<td>
<div class="doc-md-description">
<p>y-axis scale. Defaults to 1.</p>
</div>
</td>
<td>
<code>1</code>
</td>
</tr>
<tr class="doc-section-item">
<td>
<code>rotation</code>
</td>
<td>
<code><span title="float">float</span></code>
</td>
<td>
<div class="doc-md-description">
<p>rotation angle (in radians). Defaults to 0.</p>
</div>
</td>
<td>
<code>0</code>
</td>
</tr>
</tbody>
</table>
<p><span class="doc-section-title">Returns:</span></p>
<table>
<thead>
<tr>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr class="doc-section-item">
<td>
<code><span title="typing.Dict">Dict</span>[<span title="str">str</span>, <span title="geopandas.GeoDataFrame">GeoDataFrame</span>]</code>
</td>
<td>
<div class="doc-md-description">
<p>Dict[str, gp.GeoDataFrame]: dictionary of transformed GeoDataFrames</p>
</div>
</td>
</tr>
</tbody>
</table>
<details class="quote">
<summary>Source code in <code>prettymaps/draw.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">647</span>
<span class="normal">648</span>
<span class="normal">649</span>
<span class="normal">650</span>
<span class="normal">651</span>
<span class="normal">652</span>
<span class="normal">653</span>
<span class="normal">654</span>
<span class="normal">655</span>
<span class="normal">656</span>
<span class="normal">657</span>
<span class="normal">658</span>
<span class="normal">659</span>
<span class="normal">660</span>
<span class="normal">661</span>
<span class="normal">662</span>
<span class="normal">663</span>
<span class="normal">664</span>
<span class="normal">665</span>
<span class="normal">666</span>
<span class="normal">667</span>
<span class="normal">668</span>
<span class="normal">669</span>
<span class="normal">670</span>
<span class="normal">671</span>
<span class="normal">672</span>
<span class="normal">673</span>
<span class="normal">674</span>
<span class="normal">675</span>
<span class="normal">676</span>
<span class="normal">677</span>
<span class="normal">678</span>
<span class="normal">679</span>
<span class="normal">680</span>
<span class="normal">681</span>
<span class="normal">682</span>
<span class="normal">683</span>
<span class="normal">684</span>
<span class="normal">685</span>
<span class="normal">686</span>
<span class="normal">687</span>
<span class="normal">688</span>
<span class="normal">689</span>
<span class="normal">690</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nd">@log_execution_time</span>
<span class="k">def</span><span class="w"> </span><span class="nf">transform_gdfs</span><span class="p">(</span>
<span class="n">gdfs</span><span class="p">:</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">gp</span><span class="o">.</span><span class="n">GeoDataFrame</span><span class="p">],</span>
<span class="n">x</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
<span class="n">y</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
<span class="n">scale_x</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span>
<span class="n">scale_y</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span>
<span class="n">rotation</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
<span class="n">logging</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">gp</span><span class="o">.</span><span class="n">GeoDataFrame</span><span class="p">]:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Apply geometric transformations to dictionary of GeoDataFrames</span>
<span class="sd"> Args:</span>
<span class="sd"> gdfs (Dict[str, gp.GeoDataFrame]): Dictionary of GeoDataFrames</span>
<span class="sd"> x (float, optional): x-axis translation. Defaults to 0.</span>
<span class="sd"> y (float, optional): y-axis translation. Defaults to 0.</span>
<span class="sd"> scale_x (float, optional): x-axis scale. Defaults to 1.</span>
<span class="sd"> scale_y (float, optional): y-axis scale. Defaults to 1.</span>
<span class="sd"> rotation (float, optional): rotation angle (in radians). Defaults to 0.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Dict[str, gp.GeoDataFrame]: dictionary of transformed GeoDataFrames</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Project geometries</span>
<span class="n">gdfs</span> <span class="o">=</span> <span class="p">{</span>
<span class="n">name</span><span class="p">:</span> <span class="n">ox</span><span class="o">.</span><span class="n">projection</span><span class="o">.</span><span class="n">project_gdf</span><span class="p">(</span><span class="n">gdf</span><span class="p">)</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">gdf</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="k">else</span> <span class="n">gdf</span> <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">gdf</span> <span class="ow">in</span> <span class="n">gdfs</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="p">}</span>
<span class="c1"># Create geometry collection from gdfs&#39; geometries</span>
<span class="n">collection</span> <span class="o">=</span> <span class="n">GeometryCollection</span><span class="p">(</span>
<span class="p">[</span><span class="n">GeometryCollection</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">gdf</span><span class="o">.</span><span class="n">geometry</span><span class="p">))</span> <span class="k">for</span> <span class="n">gdf</span> <span class="ow">in</span> <span class="n">gdfs</span><span class="o">.</span><span class="n">values</span><span class="p">()]</span>
<span class="p">)</span>
<span class="c1"># Translation, scale &amp; rotation</span>
<span class="n">collection</span> <span class="o">=</span> <span class="n">shapely</span><span class="o">.</span><span class="n">affinity</span><span class="o">.</span><span class="n">translate</span><span class="p">(</span><span class="n">collection</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
<span class="n">collection</span> <span class="o">=</span> <span class="n">shapely</span><span class="o">.</span><span class="n">affinity</span><span class="o">.</span><span class="n">scale</span><span class="p">(</span><span class="n">collection</span><span class="p">,</span> <span class="n">scale_x</span><span class="p">,</span> <span class="n">scale_y</span><span class="p">)</span>
<span class="n">collection</span> <span class="o">=</span> <span class="n">shapely</span><span class="o">.</span><span class="n">affinity</span><span class="o">.</span><span class="n">rotate</span><span class="p">(</span><span class="n">collection</span><span class="p">,</span> <span class="n">rotation</span><span class="p">)</span>
<span class="c1"># Update geometries</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">layer</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">gdfs</span><span class="p">):</span>
<span class="n">gdfs</span><span class="p">[</span><span class="n">layer</span><span class="p">]</span><span class="o">.</span><span class="n">geometry</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">collection</span><span class="o">.</span><span class="n">geoms</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">geoms</span><span class="p">)</span>
<span class="c1"># Reproject</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">gdfs</span><span class="p">[</span><span class="n">layer</span><span class="p">])</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">gdfs</span><span class="p">[</span><span class="n">layer</span><span class="p">]</span> <span class="o">=</span> <span class="n">ox</span><span class="o">.</span><span class="n">projection</span><span class="o">.</span><span class="n">project_gdf</span><span class="p">(</span><span class="n">gdfs</span><span class="p">[</span><span class="n">layer</span><span class="p">],</span> <span class="n">to_crs</span><span class="o">=</span><span class="s2">&quot;EPSG:4326&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">gdfs</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
</div>
</div>
</div>
<div class="doc doc-object doc-module">
<h2 id="prettymaps.fetch" class="doc doc-heading">
<code>prettymaps.fetch</code>
</h2>
<div class="doc doc-contents first">
<p>Prettymaps - A minimal Python library to draw pretty maps from OpenStreetMap Data
Copyright (C) 2021 Marcelo Prates</p>
<p>This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.</p>
<p>This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.</p>
<p>You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <a href="https://www.gnu.org/licenses/">https://www.gnu.org/licenses/</a>.</p>
<div class="doc doc-children">
<div class="doc doc-object doc-function">
<h3 id="prettymaps.fetch.get_keypoints" class="doc doc-heading">
<code class="highlight language-python"><span class="n">get_keypoints</span><span class="p">(</span><span class="n">perimeter</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;place&#39;</span><span class="p">:</span> <span class="s1">&#39;quarter&#39;</span><span class="p">,</span> <span class="s1">&#39;highway&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">&#39;building&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">&#39;landuse&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">&#39;natural&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">&#39;waterway&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">&#39;amenity&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">&#39;leisure&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">&#39;shop&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">&#39;public_transport&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">&#39;tourism&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">&#39;historic&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">&#39;barrier&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">&#39;power&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">&#39;railway&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">&#39;cycleway&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">&#39;footway&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">&#39;healthcare&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">&#39;office&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">&#39;craft&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">&#39;man_made&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">&#39;boundary&#39;</span><span class="p">:</span> <span class="kc">True</span><span class="p">})</span></code>
</h3>
<div class="doc doc-contents ">
<p>Extract keypoints from a given perimeter based on specified tags.</p>
<p>Parameters:
perimeter (shapely.geometry.Polygon): The polygon representing the area of interest.
tags (dict, optional): A dictionary of tags to filter the keypoints. The keys are tag names and the values are booleans indicating whether to include the tag. Default includes a variety of common tags.</p>
<p>Returns:
geopandas.GeoDataFrame: A GeoDataFrame containing the keypoints that match the specified tags within the given perimeter.</p>
<details class="quote">
<summary>Source code in <code>prettymaps/fetch.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 61</span>
<span class="normal"> 62</span>
<span class="normal"> 63</span>
<span class="normal"> 64</span>
<span class="normal"> 65</span>
<span class="normal"> 66</span>
<span class="normal"> 67</span>
<span class="normal"> 68</span>
<span class="normal"> 69</span>
<span class="normal"> 70</span>
<span class="normal"> 71</span>
<span class="normal"> 72</span>
<span class="normal"> 73</span>
<span class="normal"> 74</span>
<span class="normal"> 75</span>
<span class="normal"> 76</span>
<span class="normal"> 77</span>
<span class="normal"> 78</span>
<span class="normal"> 79</span>
<span class="normal"> 80</span>
<span class="normal"> 81</span>
<span class="normal"> 82</span>
<span class="normal"> 83</span>
<span class="normal"> 84</span>
<span class="normal"> 85</span>
<span class="normal"> 86</span>
<span class="normal"> 87</span>
<span class="normal"> 88</span>
<span class="normal"> 89</span>
<span class="normal"> 90</span>
<span class="normal"> 91</span>
<span class="normal"> 92</span>
<span class="normal"> 93</span>
<span class="normal"> 94</span>
<span class="normal"> 95</span>
<span class="normal"> 96</span>
<span class="normal"> 97</span>
<span class="normal"> 98</span>
<span class="normal"> 99</span>
<span class="normal">100</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">get_keypoints</span><span class="p">(</span>
<span class="n">perimeter</span><span class="p">,</span>
<span class="n">tags</span><span class="o">=</span><span class="p">{</span>
<span class="s2">&quot;place&quot;</span><span class="p">:</span> <span class="s2">&quot;quarter&quot;</span><span class="p">,</span>
<span class="s2">&quot;highway&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="s2">&quot;building&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="s2">&quot;landuse&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="s2">&quot;natural&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="s2">&quot;waterway&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="s2">&quot;amenity&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="s2">&quot;leisure&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="s2">&quot;shop&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="s2">&quot;public_transport&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="s2">&quot;tourism&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="s2">&quot;historic&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="s2">&quot;barrier&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="s2">&quot;power&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="s2">&quot;railway&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="s2">&quot;cycleway&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="s2">&quot;footway&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="s2">&quot;healthcare&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="s2">&quot;office&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="s2">&quot;craft&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="s2">&quot;man_made&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="s2">&quot;boundary&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Extract keypoints from a given perimeter based on specified tags.</span>
<span class="sd"> Parameters:</span>
<span class="sd"> perimeter (shapely.geometry.Polygon): The polygon representing the area of interest.</span>
<span class="sd"> tags (dict, optional): A dictionary of tags to filter the keypoints. The keys are tag names and the values are booleans indicating whether to include the tag. Default includes a variety of common tags.</span>
<span class="sd"> Returns:</span>
<span class="sd"> geopandas.GeoDataFrame: A GeoDataFrame containing the keypoints that match the specified tags within the given perimeter.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">keypoints_df</span> <span class="o">=</span> <span class="n">ox</span><span class="o">.</span><span class="n">features</span><span class="o">.</span><span class="n">features_from_polygon</span><span class="p">(</span><span class="n">perimeter</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="n">tags</span><span class="p">)</span>
<span class="k">return</span> <span class="n">keypoints_df</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="prettymaps.fetch.merge_tags" class="doc doc-heading">
<code class="highlight language-python"><span class="n">merge_tags</span><span class="p">(</span><span class="n">layers_dict</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Merge tags from a dictionary of layers into a single dictionary.</p>
<p>Parameters:
layers_dict (dict): Dictionary of layers with their respective tags.</p>
<p>Returns:
dict: Merged dictionary of tags.</p>
<details class="quote">
<summary>Source code in <code>prettymaps/fetch.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">522</span>
<span class="normal">523</span>
<span class="normal">524</span>
<span class="normal">525</span>
<span class="normal">526</span>
<span class="normal">527</span>
<span class="normal">528</span>
<span class="normal">529</span>
<span class="normal">530</span>
<span class="normal">531</span>
<span class="normal">532</span>
<span class="normal">533</span>
<span class="normal">534</span>
<span class="normal">535</span>
<span class="normal">536</span>
<span class="normal">537</span>
<span class="normal">538</span>
<span class="normal">539</span>
<span class="normal">540</span>
<span class="normal">541</span>
<span class="normal">542</span>
<span class="normal">543</span>
<span class="normal">544</span>
<span class="normal">545</span>
<span class="normal">546</span>
<span class="normal">547</span>
<span class="normal">548</span>
<span class="normal">549</span>
<span class="normal">550</span>
<span class="normal">551</span>
<span class="normal">552</span>
<span class="normal">553</span>
<span class="normal">554</span>
<span class="normal">555</span>
<span class="normal">556</span>
<span class="normal">557</span>
<span class="normal">558</span>
<span class="normal">559</span>
<span class="normal">560</span>
<span class="normal">561</span>
<span class="normal">562</span>
<span class="normal">563</span>
<span class="normal">564</span>
<span class="normal">565</span>
<span class="normal">566</span>
<span class="normal">567</span>
<span class="normal">568</span>
<span class="normal">569</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">merge_tags</span><span class="p">(</span><span class="n">layers_dict</span><span class="p">:</span> <span class="nb">dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Merge tags from a dictionary of layers into a single dictionary.</span>
<span class="sd"> Parameters:</span>
<span class="sd"> layers_dict (dict): Dictionary of layers with their respective tags.</span>
<span class="sd"> Returns:</span>
<span class="sd"> dict: Merged dictionary of tags.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">layers_dict</span> <span class="o">=</span> <span class="n">deepcopy</span><span class="p">(</span><span class="n">layers_dict</span><span class="p">)</span>
<span class="n">merged_tags</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">def</span><span class="w"> </span><span class="nf">_merge</span><span class="p">(</span><span class="n">d</span><span class="p">:</span> <span class="nb">dict</span><span class="p">):</span>
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">d</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
<span class="k">if</span> <span class="s2">&quot;tags&quot;</span> <span class="ow">in</span> <span class="n">value</span><span class="p">:</span>
<span class="k">for</span> <span class="n">tag_key</span><span class="p">,</span> <span class="n">tag_value</span> <span class="ow">in</span> <span class="n">value</span><span class="p">[</span><span class="s2">&quot;tags&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="k">if</span> <span class="n">tag_key</span> <span class="ow">in</span> <span class="n">merged_tags</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">merged_tags</span><span class="p">[</span><span class="n">tag_key</span><span class="p">],</span> <span class="nb">list</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">tag_value</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
<span class="n">merged_tags</span><span class="p">[</span><span class="n">tag_key</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">tag_value</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">merged_tags</span><span class="p">[</span><span class="n">tag_key</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">tag_value</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">merged_tags</span><span class="p">[</span><span class="n">tag_key</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
<span class="p">[</span><span class="n">merged_tags</span><span class="p">[</span><span class="n">tag_key</span><span class="p">],</span> <span class="n">tag_value</span><span class="p">]</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">tag_value</span><span class="p">,</span> <span class="nb">list</span><span class="p">)</span>
<span class="k">else</span> <span class="p">[</span><span class="n">merged_tags</span><span class="p">[</span><span class="n">tag_key</span><span class="p">]]</span> <span class="o">+</span> <span class="n">tag_value</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">merged_tags</span><span class="p">[</span><span class="n">tag_key</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">tag_value</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">tag_value</span><span class="p">,</span> <span class="nb">list</span><span class="p">)</span>
<span class="k">else</span> <span class="p">[</span><span class="n">tag_value</span><span class="p">]</span>
<span class="p">)</span>
<span class="n">_merge</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="n">_merge</span><span class="p">(</span><span class="n">layers_dict</span><span class="p">)</span>
<span class="c1"># Simplify lists with a single element</span>
<span class="n">merged_tags</span> <span class="o">=</span> <span class="p">{</span>
<span class="n">k</span><span class="p">:</span> <span class="p">(</span><span class="n">v</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="nb">list</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">v</span><span class="p">)</span>
<span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">merged_tags</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="p">}</span>
<span class="k">return</span> <span class="n">merged_tags</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="prettymaps.fetch.obtain_elevation" class="doc doc-heading">
<code class="highlight language-python"><span class="n">obtain_elevation</span><span class="p">(</span><span class="n">gdf</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Download all SRTM elevation tiles for the given polygon in a GeoDataFrame.</p>
<p>Parameters:
gdf (GeoDataFrame): GeoDataFrame containing the polygon.
output_dir (str): Directory to save the downloaded tiles.</p>
<details class="quote">
<summary>Source code in <code>prettymaps/fetch.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">103</span>
<span class="normal">104</span>
<span class="normal">105</span>
<span class="normal">106</span>
<span class="normal">107</span>
<span class="normal">108</span>
<span class="normal">109</span>
<span class="normal">110</span>
<span class="normal">111</span>
<span class="normal">112</span>
<span class="normal">113</span>
<span class="normal">114</span>
<span class="normal">115</span>
<span class="normal">116</span>
<span class="normal">117</span>
<span class="normal">118</span>
<span class="normal">119</span>
<span class="normal">120</span>
<span class="normal">121</span>
<span class="normal">122</span>
<span class="normal">123</span>
<span class="normal">124</span>
<span class="normal">125</span>
<span class="normal">126</span>
<span class="normal">127</span>
<span class="normal">128</span>
<span class="normal">129</span>
<span class="normal">130</span>
<span class="normal">131</span>
<span class="normal">132</span>
<span class="normal">133</span>
<span class="normal">134</span>
<span class="normal">135</span>
<span class="normal">136</span>
<span class="normal">137</span>
<span class="normal">138</span>
<span class="normal">139</span>
<span class="normal">140</span>
<span class="normal">141</span>
<span class="normal">142</span>
<span class="normal">143</span>
<span class="normal">144</span>
<span class="normal">145</span>
<span class="normal">146</span>
<span class="normal">147</span>
<span class="normal">148</span>
<span class="normal">149</span>
<span class="normal">150</span>
<span class="normal">151</span>
<span class="normal">152</span>
<span class="normal">153</span>
<span class="normal">154</span>
<span class="normal">155</span>
<span class="normal">156</span>
<span class="normal">157</span>
<span class="normal">158</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">obtain_elevation</span><span class="p">(</span><span class="n">gdf</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Download all SRTM elevation tiles for the given polygon in a GeoDataFrame.</span>
<span class="sd"> Parameters:</span>
<span class="sd"> gdf (GeoDataFrame): GeoDataFrame containing the polygon.</span>
<span class="sd"> output_dir (str): Directory to save the downloaded tiles.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Ensure the GeoDataFrame has a single polygon</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">gdf</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;GeoDataFrame must contain a single polygon&quot;</span><span class="p">)</span>
<span class="k">with</span> <span class="n">warnings</span><span class="o">.</span><span class="n">catch_warnings</span><span class="p">():</span>
<span class="n">warnings</span><span class="o">.</span><span class="n">simplefilter</span><span class="p">(</span><span class="s2">&quot;ignore&quot;</span><span class="p">)</span>
<span class="n">subprocess</span><span class="o">.</span><span class="n">run</span><span class="p">(</span>
<span class="p">[</span><span class="s2">&quot;eio&quot;</span><span class="p">,</span> <span class="s2">&quot;clean&quot;</span><span class="p">],</span> <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">DEVNULL</span><span class="p">,</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">DEVNULL</span>
<span class="p">)</span>
<span class="c1"># Get the bounding box of the polygon</span>
<span class="n">bounds</span> <span class="o">=</span> <span class="n">gdf</span><span class="o">.</span><span class="n">total_bounds</span>
<span class="n">min_lon</span><span class="p">,</span> <span class="n">min_lat</span><span class="p">,</span> <span class="n">max_lon</span><span class="p">,</span> <span class="n">max_lat</span> <span class="o">=</span> <span class="n">bounds</span>
<span class="c1"># Configure the bounding box for the elevation library</span>
<span class="n">output_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">getcwd</span><span class="p">(),</span> <span class="s2">&quot;elevation.tif&quot;</span><span class="p">)</span>
<span class="n">elevation</span><span class="o">.</span><span class="n">clip</span><span class="p">(</span>
<span class="n">bounds</span><span class="o">=</span><span class="p">(</span><span class="n">min_lon</span><span class="p">,</span> <span class="n">min_lat</span><span class="p">,</span> <span class="n">max_lon</span><span class="p">,</span> <span class="n">max_lat</span><span class="p">),</span>
<span class="n">output</span><span class="o">=</span><span class="n">output_file</span><span class="p">,</span>
<span class="n">margin</span><span class="o">=</span><span class="s2">&quot;10%&quot;</span><span class="p">,</span>
<span class="n">cache_dir</span><span class="o">=</span><span class="s2">&quot;.&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># subprocess.run(</span>
<span class="c1"># [</span>
<span class="c1"># &quot;gdalwarp&quot;,</span>
<span class="c1"># &quot;-tr&quot;,</span>
<span class="c1"># &quot;30&quot;,</span>
<span class="c1"># &quot;30&quot;,</span>
<span class="c1"># &quot;-r&quot;,</span>
<span class="c1"># &quot;cubic&quot;,</span>
<span class="c1"># &quot;elevation.tif&quot;,</span>
<span class="c1"># &quot;resampled_elevation.tif&quot;,</span>
<span class="c1"># ],</span>
<span class="c1"># # stdout=subprocess.DEVNULL,</span>
<span class="c1"># # stderr=subprocess.DEVNULL,</span>
<span class="c1"># )</span>
<span class="n">raster</span> <span class="o">=</span> <span class="n">rxr</span><span class="o">.</span><span class="n">open_rasterio</span><span class="p">(</span><span class="n">output_file</span><span class="p">)</span><span class="o">.</span><span class="n">squeeze</span><span class="p">()</span>
<span class="n">raster</span> <span class="o">=</span> <span class="n">raster</span><span class="o">.</span><span class="n">rio</span><span class="o">.</span><span class="n">reproject</span><span class="p">(</span><span class="n">CRS</span><span class="o">.</span><span class="n">from_string</span><span class="p">(</span><span class="n">ox</span><span class="o">.</span><span class="n">projection</span><span class="o">.</span><span class="n">project_gdf</span><span class="p">(</span><span class="n">gdf</span><span class="p">)</span><span class="o">.</span><span class="n">crs</span><span class="o">.</span><span class="n">to_string</span><span class="p">()))</span>
<span class="c1"># convert to numpy array</span>
<span class="n">elevation_data</span> <span class="o">=</span> <span class="n">raster</span><span class="o">.</span><span class="n">data</span>
<span class="k">return</span> <span class="n">elevation_data</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="prettymaps.fetch.read_from_cache" class="doc doc-heading">
<code class="highlight language-python"><span class="n">read_from_cache</span><span class="p">(</span><span class="n">perimeter</span><span class="p">,</span> <span class="n">layer_kwargs</span><span class="p">,</span> <span class="n">cache_dir</span><span class="o">=</span><span class="s1">&#39;prettymaps_cache&#39;</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Read a GeoDataFrame from the cache based on the perimeter and layer arguments.</p>
<p>Parameters:
perimeter (GeoDataFrame): The perimeter GeoDataFrame.
layer_kwargs (dict): Dictionary of layer arguments.
cache_dir (str): Directory to read the cached GeoDataFrame from.</p>
<p>Returns:
GeoDataFrame: The cached GeoDataFrame, or None if it does not exist.</p>
<details class="quote">
<summary>Source code in <code>prettymaps/fetch.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">348</span>
<span class="normal">349</span>
<span class="normal">350</span>
<span class="normal">351</span>
<span class="normal">352</span>
<span class="normal">353</span>
<span class="normal">354</span>
<span class="normal">355</span>
<span class="normal">356</span>
<span class="normal">357</span>
<span class="normal">358</span>
<span class="normal">359</span>
<span class="normal">360</span>
<span class="normal">361</span>
<span class="normal">362</span>
<span class="normal">363</span>
<span class="normal">364</span>
<span class="normal">365</span>
<span class="normal">366</span>
<span class="normal">367</span>
<span class="normal">368</span>
<span class="normal">369</span>
<span class="normal">370</span>
<span class="normal">371</span>
<span class="normal">372</span>
<span class="normal">373</span>
<span class="normal">374</span>
<span class="normal">375</span>
<span class="normal">376</span>
<span class="normal">377</span>
<span class="normal">378</span>
<span class="normal">379</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">read_from_cache</span><span class="p">(</span>
<span class="n">perimeter</span><span class="p">:</span> <span class="n">GeoDataFrame</span><span class="p">,</span>
<span class="n">layer_kwargs</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span>
<span class="n">cache_dir</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;prettymaps_cache&quot;</span><span class="p">,</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="n">GeoDataFrame</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Read a GeoDataFrame from the cache based on the perimeter and layer arguments.</span>
<span class="sd"> Parameters:</span>
<span class="sd"> perimeter (GeoDataFrame): The perimeter GeoDataFrame.</span>
<span class="sd"> layer_kwargs (dict): Dictionary of layer arguments.</span>
<span class="sd"> cache_dir (str): Directory to read the cached GeoDataFrame from.</span>
<span class="sd"> Returns:</span>
<span class="sd"> GeoDataFrame: The cached GeoDataFrame, or None if it does not exist.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">seed</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="c1"># Create hash from perimeter</span>
<span class="n">perimeter_hash</span> <span class="o">=</span> <span class="nb">hash</span><span class="p">(</span><span class="n">perimeter</span><span class="p">[</span><span class="s2">&quot;geometry&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">to_json</span><span class="p">())</span>
<span class="c1"># Create hash from kwargs</span>
<span class="n">kwargs_hash</span> <span class="o">=</span> <span class="nb">hash</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">layer_kwargs</span><span class="p">))</span>
<span class="c1"># Join hashes</span>
<span class="n">hash_str</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">perimeter_hash</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">kwargs_hash</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="n">cache_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">cache_dir</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">hash_str</span><span class="si">}</span><span class="s2">.geojson&quot;</span><span class="p">)</span>
<span class="c1"># Check if the gdf is cached</span>
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">cache_path</span><span class="p">):</span>
<span class="c1"># Read cached gdf</span>
<span class="k">return</span> <span class="n">gp</span><span class="o">.</span><span class="n">read_file</span><span class="p">(</span><span class="n">cache_path</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="prettymaps.fetch.unified_osm_request" class="doc doc-heading">
<code class="highlight language-python"><span class="n">unified_osm_request</span><span class="p">(</span><span class="n">perimeter</span><span class="p">,</span> <span class="n">layers_dict</span><span class="p">,</span> <span class="n">logging</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Unify all OSM requests into one to improve efficiency.</p>
<p>Parameters:
perimeter (GeoDataFrame): The perimeter GeoDataFrame.
layers_dict (dict): Dictionary of layers to fetch.
logging (bool): Enable or disable logging.</p>
<p>Returns:
dict: Dictionary of GeoDataFrames for each layer.</p>
<details class="quote">
<summary>Source code in <code>prettymaps/fetch.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">572</span>
<span class="normal">573</span>
<span class="normal">574</span>
<span class="normal">575</span>
<span class="normal">576</span>
<span class="normal">577</span>
<span class="normal">578</span>
<span class="normal">579</span>
<span class="normal">580</span>
<span class="normal">581</span>
<span class="normal">582</span>
<span class="normal">583</span>
<span class="normal">584</span>
<span class="normal">585</span>
<span class="normal">586</span>
<span class="normal">587</span>
<span class="normal">588</span>
<span class="normal">589</span>
<span class="normal">590</span>
<span class="normal">591</span>
<span class="normal">592</span>
<span class="normal">593</span>
<span class="normal">594</span>
<span class="normal">595</span>
<span class="normal">596</span>
<span class="normal">597</span>
<span class="normal">598</span>
<span class="normal">599</span>
<span class="normal">600</span>
<span class="normal">601</span>
<span class="normal">602</span>
<span class="normal">603</span>
<span class="normal">604</span>
<span class="normal">605</span>
<span class="normal">606</span>
<span class="normal">607</span>
<span class="normal">608</span>
<span class="normal">609</span>
<span class="normal">610</span>
<span class="normal">611</span>
<span class="normal">612</span>
<span class="normal">613</span>
<span class="normal">614</span>
<span class="normal">615</span>
<span class="normal">616</span>
<span class="normal">617</span>
<span class="normal">618</span>
<span class="normal">619</span>
<span class="normal">620</span>
<span class="normal">621</span>
<span class="normal">622</span>
<span class="normal">623</span>
<span class="normal">624</span>
<span class="normal">625</span>
<span class="normal">626</span>
<span class="normal">627</span>
<span class="normal">628</span>
<span class="normal">629</span>
<span class="normal">630</span>
<span class="normal">631</span>
<span class="normal">632</span>
<span class="normal">633</span>
<span class="normal">634</span>
<span class="normal">635</span>
<span class="normal">636</span>
<span class="normal">637</span>
<span class="normal">638</span>
<span class="normal">639</span>
<span class="normal">640</span>
<span class="normal">641</span>
<span class="normal">642</span>
<span class="normal">643</span>
<span class="normal">644</span>
<span class="normal">645</span>
<span class="normal">646</span>
<span class="normal">647</span>
<span class="normal">648</span>
<span class="normal">649</span>
<span class="normal">650</span>
<span class="normal">651</span>
<span class="normal">652</span>
<span class="normal">653</span>
<span class="normal">654</span>
<span class="normal">655</span>
<span class="normal">656</span>
<span class="normal">657</span>
<span class="normal">658</span>
<span class="normal">659</span>
<span class="normal">660</span>
<span class="normal">661</span>
<span class="normal">662</span>
<span class="normal">663</span>
<span class="normal">664</span>
<span class="normal">665</span>
<span class="normal">666</span>
<span class="normal">667</span>
<span class="normal">668</span>
<span class="normal">669</span>
<span class="normal">670</span>
<span class="normal">671</span>
<span class="normal">672</span>
<span class="normal">673</span>
<span class="normal">674</span>
<span class="normal">675</span>
<span class="normal">676</span>
<span class="normal">677</span>
<span class="normal">678</span>
<span class="normal">679</span>
<span class="normal">680</span>
<span class="normal">681</span>
<span class="normal">682</span>
<span class="normal">683</span>
<span class="normal">684</span>
<span class="normal">685</span>
<span class="normal">686</span>
<span class="normal">687</span>
<span class="normal">688</span>
<span class="normal">689</span>
<span class="normal">690</span>
<span class="normal">691</span>
<span class="normal">692</span>
<span class="normal">693</span>
<span class="normal">694</span>
<span class="normal">695</span>
<span class="normal">696</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">unified_osm_request</span><span class="p">(</span>
<span class="n">perimeter</span><span class="p">:</span> <span class="n">GeoDataFrame</span><span class="p">,</span> <span class="n">layers_dict</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span> <span class="n">logging</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
<span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Unify all OSM requests into one to improve efficiency.</span>
<span class="sd"> Parameters:</span>
<span class="sd"> perimeter (GeoDataFrame): The perimeter GeoDataFrame.</span>
<span class="sd"> layers_dict (dict): Dictionary of layers to fetch.</span>
<span class="sd"> logging (bool): Enable or disable logging.</span>
<span class="sd"> Returns:</span>
<span class="sd"> dict: Dictionary of GeoDataFrames for each layer.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Apply tolerance to the perimeter</span>
<span class="n">perimeter_with_tolerance</span> <span class="o">=</span> <span class="n">ox</span><span class="o">.</span><span class="n">projection</span><span class="o">.</span><span class="n">project_gdf</span><span class="p">(</span><span class="n">perimeter</span><span class="p">)</span><span class="o">.</span><span class="n">buffer</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="o">.</span><span class="n">to_crs</span><span class="p">(</span><span class="mi">4326</span><span class="p">)</span>
<span class="n">perimeter_with_tolerance</span> <span class="o">=</span> <span class="n">unary_union</span><span class="p">(</span><span class="n">perimeter_with_tolerance</span><span class="o">.</span><span class="n">geometry</span><span class="p">)</span><span class="o">.</span><span class="n">buffer</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="c1"># Fetch from perimeter&#39;s bounding box, to avoid missing some geometries</span>
<span class="n">bbox</span> <span class="o">=</span> <span class="n">box</span><span class="p">(</span><span class="o">*</span><span class="n">perimeter_with_tolerance</span><span class="o">.</span><span class="n">bounds</span><span class="p">)</span>
<span class="c1"># Initialize the result dictionary</span>
<span class="n">gdfs</span> <span class="o">=</span> <span class="p">{}</span>
<span class="c1">## Read layers from cache</span>
<span class="c1"># for layer, kwargs in layers_dict.items():</span>
<span class="c1"># gdf = read_from_cache(perimeter, layers_dict[layer])</span>
<span class="c1"># if gdf is not None:</span>
<span class="c1"># gdfs[layer] = gdf</span>
<span class="c1"># Combine all tags into a single dictionary for a unified request</span>
<span class="n">combined_tags</span> <span class="o">=</span> <span class="n">merge_tags</span><span class="p">(</span>
<span class="p">{</span><span class="n">layer</span><span class="p">:</span> <span class="n">kwargs</span> <span class="k">for</span> <span class="n">layer</span><span class="p">,</span> <span class="n">kwargs</span> <span class="ow">in</span> <span class="n">layers_dict</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">layer</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">gdfs</span><span class="p">}</span>
<span class="p">)</span>
<span class="c1"># Fetch all features in one request</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">all_features</span> <span class="o">=</span> <span class="n">ox</span><span class="o">.</span><span class="n">features</span><span class="o">.</span><span class="n">features_from_polygon</span><span class="p">(</span><span class="n">bbox</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="n">combined_tags</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="n">all_features</span> <span class="o">=</span> <span class="n">GeoDataFrame</span><span class="p">(</span><span class="n">geometry</span><span class="o">=</span><span class="p">[])</span>
<span class="c1"># Split the features into separate GeoDataFrames based on the layers_dict</span>
<span class="k">for</span> <span class="n">layer</span><span class="p">,</span> <span class="n">kwargs</span> <span class="ow">in</span> <span class="n">layers_dict</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="k">if</span> <span class="n">layer</span> <span class="ow">in</span> <span class="n">gdfs</span><span class="p">:</span>
<span class="k">continue</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">layer</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;streets&quot;</span><span class="p">,</span> <span class="s2">&quot;railway&quot;</span><span class="p">,</span> <span class="s2">&quot;waterway&quot;</span><span class="p">]:</span>
<span class="n">graph</span> <span class="o">=</span> <span class="n">ox</span><span class="o">.</span><span class="n">graph_from_polygon</span><span class="p">(</span>
<span class="n">bbox</span><span class="p">,</span>
<span class="n">custom_filter</span><span class="o">=</span><span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;custom_filter&quot;</span><span class="p">),</span>
<span class="n">truncate_by_edge</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">gdf</span> <span class="o">=</span> <span class="n">ox</span><span class="o">.</span><span class="n">graph_to_gdfs</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span> <span class="n">nodes</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">layer</span> <span class="o">==</span> <span class="s2">&quot;sea&quot;</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">coastline</span> <span class="o">=</span> <span class="n">unary_union</span><span class="p">(</span>
<span class="n">ox</span><span class="o">.</span><span class="n">features</span><span class="o">.</span><span class="n">features_from_polygon</span><span class="p">(</span>
<span class="n">bbox</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;natural&quot;</span><span class="p">:</span> <span class="s2">&quot;coastline&quot;</span><span class="p">}</span>
<span class="p">)</span><span class="o">.</span><span class="n">geometry</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span>
<span class="p">)</span>
<span class="n">sea_candidates</span> <span class="o">=</span> <span class="n">bbox</span><span class="o">.</span><span class="n">difference</span><span class="p">(</span><span class="n">coastline</span><span class="o">.</span><span class="n">buffer</span><span class="p">(</span><span class="mf">1e-9</span><span class="p">))</span><span class="o">.</span><span class="n">geoms</span>
<span class="n">drive</span> <span class="o">=</span> <span class="n">ox</span><span class="o">.</span><span class="n">graph_from_polygon</span><span class="p">(</span><span class="n">bbox</span><span class="p">,</span> <span class="n">network_type</span><span class="o">=</span><span class="s2">&quot;drive&quot;</span><span class="p">)</span>
<span class="n">drive</span> <span class="o">=</span> <span class="n">ox</span><span class="o">.</span><span class="n">graph_to_gdfs</span><span class="p">(</span><span class="n">drive</span><span class="p">,</span> <span class="n">nodes</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">filter_candidate</span><span class="p">(</span><span class="n">sea_candidate</span><span class="p">):</span>
<span class="n">intersections</span> <span class="o">=</span> <span class="n">drive</span><span class="o">.</span><span class="n">geometry</span><span class="o">.</span><span class="n">intersects</span><span class="p">(</span><span class="n">sea_candidate</span><span class="p">)</span>
<span class="k">if</span> <span class="s2">&quot;bridge&quot;</span> <span class="ow">in</span> <span class="n">drive</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
<span class="k">return</span> <span class="ow">not</span> <span class="nb">any</span><span class="p">(</span>
<span class="n">intersections</span>
<span class="o">&amp;</span> <span class="p">(</span>
<span class="n">drive</span><span class="o">.</span><span class="n">loc</span><span class="p">[</span>
<span class="n">drive</span><span class="o">.</span><span class="n">geometry</span><span class="o">.</span><span class="n">intersects</span><span class="p">(</span><span class="n">sea_candidate</span><span class="p">),</span>
<span class="s2">&quot;bridge&quot;</span><span class="p">,</span>
<span class="p">]</span>
<span class="o">!=</span> <span class="s2">&quot;yes&quot;</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="ow">not</span> <span class="nb">any</span><span class="p">(</span><span class="n">intersections</span><span class="p">)</span>
<span class="n">sea</span> <span class="o">=</span> <span class="n">unary_union</span><span class="p">(</span>
<span class="n">MultiPolygon</span><span class="p">(</span>
<span class="p">[</span>
<span class="n">candidate</span>
<span class="k">for</span> <span class="n">candidate</span> <span class="ow">in</span> <span class="n">sea_candidates</span>
<span class="k">if</span> <span class="n">filter_candidate</span><span class="p">(</span><span class="n">candidate</span><span class="p">)</span>
<span class="p">]</span>
<span class="p">)</span><span class="o">.</span><span class="n">geoms</span>
<span class="p">)</span><span class="o">.</span><span class="n">buffer</span><span class="p">(</span><span class="mf">1e-8</span><span class="p">)</span>
<span class="n">gdf</span> <span class="o">=</span> <span class="n">GeoDataFrame</span><span class="p">(</span><span class="n">geometry</span><span class="o">=</span><span class="p">[</span><span class="n">sea</span><span class="p">],</span> <span class="n">crs</span><span class="o">=</span><span class="n">perimeter</span><span class="o">.</span><span class="n">crs</span><span class="p">)</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">gdf</span> <span class="o">=</span> <span class="n">GeoDataFrame</span><span class="p">(</span><span class="n">geometry</span><span class="o">=</span><span class="p">[],</span> <span class="n">crs</span><span class="o">=</span><span class="n">perimeter</span><span class="o">.</span><span class="n">crs</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;osmid&quot;</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">if</span> <span class="n">layer</span> <span class="o">==</span> <span class="s2">&quot;perimeter&quot;</span><span class="p">:</span>
<span class="n">gdf</span> <span class="o">=</span> <span class="n">perimeter</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">layer_tags</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;tags&quot;</span><span class="p">)</span>
<span class="n">gdf</span> <span class="o">=</span> <span class="n">gp</span><span class="o">.</span><span class="n">GeoDataFrame</span><span class="p">(</span><span class="n">geometry</span><span class="o">=</span><span class="p">[],</span> <span class="n">crs</span><span class="o">=</span><span class="n">perimeter</span><span class="o">.</span><span class="n">crs</span><span class="p">)</span>
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">layer_tags</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">bool</span><span class="p">)</span> <span class="ow">and</span> <span class="n">value</span><span class="p">:</span>
<span class="n">filtered_features</span> <span class="o">=</span> <span class="n">all_features</span><span class="p">[</span>
<span class="o">~</span><span class="n">pd</span><span class="o">.</span><span class="n">isna</span><span class="p">(</span><span class="n">all_features</span><span class="p">[</span><span class="n">key</span><span class="p">])</span>
<span class="p">]</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
<span class="n">filtered_features</span> <span class="o">=</span> <span class="n">all_features</span><span class="p">[</span>
<span class="n">all_features</span><span class="p">[</span><span class="n">key</span><span class="p">]</span><span class="o">.</span><span class="n">isin</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">filtered_features</span> <span class="o">=</span> <span class="n">all_features</span><span class="p">[</span>
<span class="n">all_features</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">==</span> <span class="n">value</span>
<span class="p">]</span>
<span class="n">gdf</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">gdf</span><span class="p">,</span> <span class="n">filtered_features</span><span class="p">],</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">gdf</span> <span class="o">=</span> <span class="n">ox</span><span class="o">.</span><span class="n">geocoder</span><span class="o">.</span><span class="n">geocode_to_gdf</span><span class="p">(</span><span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;osmid&quot;</span><span class="p">),</span> <span class="n">by_osmid</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">gdf</span> <span class="o">=</span> <span class="n">gdf</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="n">gdf</span><span class="o">.</span><span class="n">geometry</span> <span class="o">=</span> <span class="n">gdf</span><span class="o">.</span><span class="n">geometry</span><span class="o">.</span><span class="n">intersection</span><span class="p">(</span><span class="n">perimeter_with_tolerance</span><span class="p">)</span>
<span class="n">gdf</span><span class="o">.</span><span class="n">drop</span><span class="p">(</span><span class="n">gdf</span><span class="p">[</span><span class="n">gdf</span><span class="o">.</span><span class="n">geometry</span><span class="o">.</span><span class="n">is_empty</span><span class="p">]</span><span class="o">.</span><span class="n">index</span><span class="p">,</span> <span class="n">inplace</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">gdfs</span><span class="p">[</span><span class="n">layer</span><span class="p">]</span> <span class="o">=</span> <span class="n">gdf</span>
<span class="c1"># write_to_cache(perimeter, gdf, layers_dict[layer])</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="c1"># print(f&quot;Error fetching {layer}: {e}&quot;)</span>
<span class="n">gdfs</span><span class="p">[</span><span class="n">layer</span><span class="p">]</span> <span class="o">=</span> <span class="n">GeoDataFrame</span><span class="p">(</span><span class="n">geometry</span><span class="o">=</span><span class="p">[])</span>
<span class="k">return</span> <span class="n">gdfs</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
<div class="doc doc-object doc-function">
<h3 id="prettymaps.fetch.write_to_cache" class="doc doc-heading">
<code class="highlight language-python"><span class="n">write_to_cache</span><span class="p">(</span><span class="n">perimeter</span><span class="p">,</span> <span class="n">gdf</span><span class="p">,</span> <span class="n">layer_kwargs</span><span class="p">,</span> <span class="n">cache_dir</span><span class="o">=</span><span class="s1">&#39;prettymaps_cache&#39;</span><span class="p">)</span></code>
</h3>
<div class="doc doc-contents ">
<p>Write a GeoDataFrame to the cache based on the perimeter and layer arguments.</p>
<p>Parameters:
perimeter (GeoDataFrame): The perimeter GeoDataFrame.
gdf (GeoDataFrame): The GeoDataFrame to cache.
layer_kwargs (dict): Dictionary of layer arguments.
cache_dir (str): Directory to save the cached GeoDataFrame.</p>
<details class="quote">
<summary>Source code in <code>prettymaps/fetch.py</code></summary>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">314</span>
<span class="normal">315</span>
<span class="normal">316</span>
<span class="normal">317</span>
<span class="normal">318</span>
<span class="normal">319</span>
<span class="normal">320</span>
<span class="normal">321</span>
<span class="normal">322</span>
<span class="normal">323</span>
<span class="normal">324</span>
<span class="normal">325</span>
<span class="normal">326</span>
<span class="normal">327</span>
<span class="normal">328</span>
<span class="normal">329</span>
<span class="normal">330</span>
<span class="normal">331</span>
<span class="normal">332</span>
<span class="normal">333</span>
<span class="normal">334</span>
<span class="normal">335</span>
<span class="normal">336</span>
<span class="normal">337</span>
<span class="normal">338</span>
<span class="normal">339</span>
<span class="normal">340</span>
<span class="normal">341</span>
<span class="normal">342</span>
<span class="normal">343</span>
<span class="normal">344</span>
<span class="normal">345</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">write_to_cache</span><span class="p">(</span>
<span class="n">perimeter</span><span class="p">:</span> <span class="n">GeoDataFrame</span><span class="p">,</span>
<span class="n">gdf</span><span class="p">:</span> <span class="n">GeoDataFrame</span><span class="p">,</span>
<span class="n">layer_kwargs</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span>
<span class="n">cache_dir</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;prettymaps_cache&quot;</span><span class="p">,</span>
<span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Write a GeoDataFrame to the cache based on the perimeter and layer arguments.</span>
<span class="sd"> Parameters:</span>
<span class="sd"> perimeter (GeoDataFrame): The perimeter GeoDataFrame.</span>
<span class="sd"> gdf (GeoDataFrame): The GeoDataFrame to cache.</span>
<span class="sd"> layer_kwargs (dict): Dictionary of layer arguments.</span>
<span class="sd"> cache_dir (str): Directory to save the cached GeoDataFrame.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">seed</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">cache_dir</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="c1"># Create hash from perimeter</span>
<span class="n">perimeter_hash</span> <span class="o">=</span> <span class="nb">hash</span><span class="p">(</span><span class="n">perimeter</span><span class="p">[</span><span class="s2">&quot;geometry&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">to_json</span><span class="p">())</span>
<span class="c1"># Create hash from kwargs</span>
<span class="n">kwargs_hash</span> <span class="o">=</span> <span class="nb">hash</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">layer_kwargs</span><span class="p">))</span>
<span class="c1"># Join hashes</span>
<span class="n">hash_str</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">perimeter_hash</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">kwargs_hash</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="n">cache_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">cache_dir</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">hash_str</span><span class="si">}</span><span class="s2">.geojson&quot;</span><span class="p">)</span>
<span class="c1"># Write gdf to cache</span>
<span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">()</span><span class="o">.</span><span class="n">setLevel</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">CRITICAL</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">gdf</span><span class="o">.</span><span class="n">empty</span><span class="p">:</span>
<span class="n">gdf</span><span class="o">.</span><span class="n">to_file</span><span class="p">(</span><span class="n">cache_path</span><span class="p">,</span> <span class="n">driver</span><span class="o">=</span><span class="s2">&quot;GeoJSON&quot;</span><span class="p">)</span>
<span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">()</span><span class="o">.</span><span class="n">setLevel</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
</details>
</div>
</div>
</div>
</div>
</div>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": [], "search": "../assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
<script src="../assets/javascripts/bundle.92b07e13.min.js"></script>
</body>
</html>