You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sedona.apache.org by gi...@apache.org on 2025/09/19 07:30:11 UTC
(sedona-db) branch asf-site updated: Deployed ab9fcbb to 0.1.0 with MkDocs 1.6.1 and mike 2.1.3
This is an automated email from the ASF dual-hosted git repository.
github-bot pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/sedona-db.git
The following commit(s) were added to refs/heads/asf-site by this push:
new 17cc398 Deployed ab9fcbb to 0.1.0 with MkDocs 1.6.1 and mike 2.1.3
17cc398 is described below
commit 17cc3982429b0cd716aad0b146c03913f8bbc74c
Author: GitHub Actions <ac...@github.com>
AuthorDate: Fri Sep 19 07:30:07 2025 +0000
Deployed ab9fcbb to 0.1.0 with MkDocs 1.6.1 and mike 2.1.3
---
0.1.0/.gitignore | 1 -
0.1.0/404.html | 218 ++-
.../{development => contributors-guide}/index.html | 488 +++++-
0.1.0/geopandas-interop.ipynb | 288 ++++
0.1.0/geopandas-interop/index.html | 1222 +++++----------
0.1.0/index.html | 306 ++--
0.1.0/objects.inv | Bin 410 -> 756 bytes
0.1.0/overture-examples.ipynb | 472 ++++++
0.1.0/overture-examples/index.html | 1570 +++++--------------
0.1.0/programming-guide.ipynb | 400 +++++
0.1.0/programming-guide/index.html | 1331 ++++-------------
0.1.0/quickstart-python.ipynb | 414 +++++
0.1.0/quickstart-python/index.html | 1458 ++++--------------
0.1.0/reference/python/index.html | 1575 +++++++++++++++++---
0.1.0/reference/read-parquet-files/index.html | 1168 ---------------
0.1.0/reference/sql-joins/index.html | 204 ++-
0.1.0/reference/sql/index.html | 186 ++-
0.1.0/requirements.txt | 21 +-
0.1.0/search/search_index.json | 2 +-
0.1.0/sitemap.xml | 44 +
0.1.0/sitemap.xml.gz | Bin 127 -> 314 bytes
0.1.0/stylesheets/extra.css | 55 +-
0.1.0/tags/index.html | 186 ++-
0.1.0/working-with-parquet-files.ipynb | 166 +++
.../index.html | 433 +++---
25 files changed, 5960 insertions(+), 6248 deletions(-)
diff --git a/0.1.0/.gitignore b/0.1.0/.gitignore
deleted file mode 100644
index f59ec20..0000000
--- a/0.1.0/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*
\ No newline at end of file
diff --git a/0.1.0/404.html b/0.1.0/404.html
index d06edfe..f72bc7c 100644
--- a/0.1.0/404.html
+++ b/0.1.0/404.html
@@ -13,7 +13,7 @@
- <link rel="icon" href="/image/sedona_logo_symbol.png">
+ <link rel="icon" href="/sedonadb/latest/image/sedona_logo_symbol.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.20">
@@ -22,10 +22,10 @@
- <link rel="stylesheet" href="/assets/stylesheets/main.e53b48f4.min.css">
+ <link rel="stylesheet" href="/sedonadb/latest/assets/stylesheets/main.e53b48f4.min.css">
- <link rel="stylesheet" href="/assets/stylesheets/palette.06af60db.min.css">
+ <link rel="stylesheet" href="/sedonadb/latest/assets/stylesheets/palette.06af60db.min.css">
@@ -44,11 +44,11 @@
- <link rel="stylesheet" href="/assets/_mkdocstrings.css">
+ <link rel="stylesheet" href="/sedonadb/latest/assets/_mkdocstrings.css">
- <link rel="stylesheet" href="/stylesheets/extra.css">
+ <link rel="stylesheet" href="/sedonadb/latest/stylesheets/extra.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>
+ <script>__md_scope=new URL("/sedonadb/latest",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>
@@ -87,9 +87,9 @@
<header class="md-header md-header--shadow md-header--lifted" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
- <a href="/." title="SedonaDB" class="md-header__button md-logo" aria-label="SedonaDB" data-md-component="logo">
+ <a href="/sedonadb/latest/." title="SedonaDB" class="md-header__button md-logo" aria-label="SedonaDB" data-md-component="logo">
- <img src="/image/sedona_logo_symbol_white.svg" alt="logo">
+ <img src="/sedonadb/latest/image/sedona_logo_symbol.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
@@ -192,13 +192,32 @@
<li class="md-tabs__item">
- <a href="/." class="md-tabs__link">
+ <a href="/sedonadb/latest/." class="md-tabs__link">
- Home
+ SedonaDB
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+ <li class="md-tabs__item">
+ <a href="/sedonadb/latest/quickstart-python/" class="md-tabs__link">
+
+
+
+
+
+ Python Quickstart
</a>
</li>
@@ -213,7 +232,7 @@
<li class="md-tabs__item">
- <a href="/programming-guide/" class="md-tabs__link">
+ <a href="/sedonadb/latest/programming-guide/" class="md-tabs__link">
@@ -240,7 +259,7 @@
<li class="md-tabs__item">
- <a href="/reference/python/" class="md-tabs__link">
+ <a href="/sedonadb/latest/reference/python/" class="md-tabs__link">
@@ -279,6 +298,25 @@
+ <li class="md-tabs__item">
+ <a href="https://sedona.apache.org/latest/community/contact/" class="md-tabs__link">
+
+
+
+
+
+ Community
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
<li class="md-tabs__item">
<a href="https://sedona.apache.org/latest/asf/asf/" class="md-tabs__link">
@@ -305,7 +343,7 @@
- Return to Sedona Homepage
+ Sedona Homepage
</a>
</li>
@@ -340,9 +378,9 @@
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
- <a href="/." title="SedonaDB" class="md-nav__button md-logo" aria-label="SedonaDB" data-md-component="logo">
+ <a href="/sedonadb/latest/." title="SedonaDB" class="md-nav__button md-logo" aria-label="SedonaDB" data-md-component="logo">
- <img src="/image/sedona_logo_symbol_white.svg" alt="logo">
+ <img src="/sedonadb/latest/image/sedona_logo_symbol.png" alt="logo">
</a>
SedonaDB
@@ -369,12 +407,34 @@
<li class="md-nav__item">
- <a href="/." class="md-nav__link">
+ <a href="/sedonadb/latest/." class="md-nav__link">
<span class="md-ellipsis">
- Home
+ SedonaDB
+
+ </span>
+
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/sedonadb/latest/quickstart-python/" class="md-nav__link">
+
+
+
+ <span class="md-ellipsis">
+ Python Quickstart
</span>
@@ -404,10 +464,10 @@
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" >
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
- <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
+ <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
@@ -420,8 +480,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
- <label class="md-nav__title" for="__nav_2">
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
SedonaDB Guides
</label>
@@ -434,12 +494,12 @@
<li class="md-nav__item">
- <a href="/programming-guide/" class="md-nav__link">
+ <a href="/sedonadb/latest/programming-guide/" class="md-nav__link">
<span class="md-ellipsis">
- SedonaDB Guide
+ Working with Vector Data
</span>
@@ -457,12 +517,12 @@
<li class="md-nav__item">
- <a href="/quickstart-cli/" class="md-nav__link">
+ <a href="/sedonadb/latest/geopandas-interop/" class="md-nav__link">
<span class="md-ellipsis">
- CLI Quickstart
+ Working with GeoPandas
</span>
@@ -480,12 +540,12 @@
<li class="md-nav__item">
- <a href="/quickstart-python/" class="md-nav__link">
+ <a href="/sedonadb/latest/overture-examples/" class="md-nav__link">
<span class="md-ellipsis">
- Python Quickstart
+ Working with Overture
</span>
@@ -503,12 +563,35 @@
<li class="md-nav__item">
- <a href="/development/" class="md-nav__link">
+ <a href="/sedonadb/latest/working-with-parquet-files/" class="md-nav__link">
<span class="md-ellipsis">
- Development
+ Working with Parquet Files
+
+ </span>
+
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="/sedonadb/latest/contributors-guide/" class="md-nav__link">
+
+
+
+ <span class="md-ellipsis">
+ Contributors Guide
</span>
@@ -546,10 +629,10 @@
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
- <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
+ <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
@@ -562,8 +645,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
- <label class="md-nav__title" for="__nav_3">
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
SedonaDB Reference
</label>
@@ -589,10 +672,10 @@
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_1" >
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_1" >
- <label class="md-nav__link" for="__nav_3_1" id="__nav_3_1_label" tabindex="0">
+ <label class="md-nav__link" for="__nav_4_1" id="__nav_4_1_label" tabindex="0">
@@ -605,8 +688,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_1_label" aria-expanded="false">
- <label class="md-nav__title" for="__nav_3_1">
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_1_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4_1">
<span class="md-nav__icon md-icon"></span>
Python
</label>
@@ -619,7 +702,7 @@
<li class="md-nav__item">
- <a href="/reference/python/" class="md-nav__link">
+ <a href="/sedonadb/latest/reference/python/" class="md-nav__link">
@@ -663,10 +746,10 @@
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2" >
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_2" >
- <label class="md-nav__link" for="__nav_3_2" id="__nav_3_2_label" tabindex="0">
+ <label class="md-nav__link" for="__nav_4_2" id="__nav_4_2_label" tabindex="0">
@@ -679,8 +762,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_2_label" aria-expanded="false">
- <label class="md-nav__title" for="__nav_3_2">
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_2_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4_2">
<span class="md-nav__icon md-icon"></span>
SQL
</label>
@@ -693,7 +776,7 @@
<li class="md-nav__item">
- <a href="/reference/sql/" class="md-nav__link">
+ <a href="/sedonadb/latest/reference/sql/" class="md-nav__link">
@@ -716,7 +799,7 @@
<li class="md-nav__item">
- <a href="/reference/sql-joins/" class="md-nav__link">
+ <a href="/sedonadb/latest/reference/sql-joins/" class="md-nav__link">
@@ -732,19 +815,34 @@
+ </ul>
+ </nav>
+
+ </li>
+
+
-
+
+ </ul>
+ </nav>
+
+ </li>
+
+
+
+
+
<li class="md-nav__item">
- <a href="/reference/read-parquet-files/" class="md-nav__link">
+ <a href="https://sedona.apache.org/latest/blog/" class="md-nav__link">
<span class="md-ellipsis">
- Read Parquet Files
+ Blog
</span>
@@ -753,22 +851,6 @@
</li>
-
-
- </ul>
- </nav>
-
- </li>
-
-
-
-
- </ul>
- </nav>
-
- </li>
-
-
@@ -777,12 +859,12 @@
<li class="md-nav__item">
- <a href="https://sedona.apache.org/latest/blog/" class="md-nav__link">
+ <a href="https://sedona.apache.org/latest/community/contact/" class="md-nav__link">
<span class="md-ellipsis">
- Blog
+ Community
</span>
@@ -826,7 +908,7 @@
<span class="md-ellipsis">
- Return to Sedona Homepage
+ Sedona Homepage
</span>
@@ -913,10 +995,10 @@
- <script id="__config" type="application/json">{"base": "/", "features": ["content.code.copy", "content.action.edit", "search.highlight", "search.share", "search.suggest", "navigation.footer", "navigation.instant", "navigation.top", "navigation.sections", "navigation.tabs", "navigation.tabs.sticky"], "search": "/assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search. [...]
+ <script id="__config" type="application/json">{"base": "/sedonadb/latest", "features": ["content.code.copy", "content.action.edit", "search.highlight", "search.share", "search.suggest", "navigation.footer", "navigation.instant", "navigation.top", "navigation.sections", "navigation.tabs", "navigation.tabs.sticky"], "search": "/sedonadb/latest/assets/javascripts/workers/search.973d3a69.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy" [...]
- <script src="/assets/javascripts/bundle.f55a23d4.min.js"></script>
+ <script src="/sedonadb/latest/assets/javascripts/bundle.f55a23d4.min.js"></script>
</body>
diff --git a/0.1.0/development/index.html b/0.1.0/contributors-guide/index.html
similarity index 73%
rename from 0.1.0/development/index.html
rename to 0.1.0/contributors-guide/index.html
index 59e8f45..2e15373 100644
--- a/0.1.0/development/index.html
+++ b/0.1.0/contributors-guide/index.html
@@ -7,8 +7,10 @@
+ <link rel="canonical" href="https://sedona.apache.org/sedonadb/latest/contributors-guide/">
- <link rel="prev" href="../quickstart-python/">
+
+ <link rel="prev" href="../working-with-parquet-files/">
<link rel="next" href="../reference/python/">
@@ -19,7 +21,7 @@
- <title>Development - SedonaDB</title>
+ <title>Contributors Guide - SedonaDB</title>
@@ -84,7 +86,7 @@
<div data-md-component="skip">
- <a href="#development" class="md-skip">
+ <a href="#contributors-guide" class="md-skip">
Skip to content
</a>
@@ -106,7 +108,7 @@
<nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="SedonaDB" class="md-header__button md-logo" aria-label="SedonaDB" data-md-component="logo">
- <img src="../image/sedona_logo_symbol_white.svg" alt="logo">
+ <img src="../image/sedona_logo_symbol.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
@@ -123,7 +125,7 @@
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
- Development
+ Contributors Guide
</span>
</div>
@@ -215,7 +217,26 @@
- Home
+ SedonaDB
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+ <li class="md-tabs__item">
+ <a href="../quickstart-python/" class="md-tabs__link">
+
+
+
+
+
+ Python Quickstart
</a>
</li>
@@ -298,6 +319,25 @@
+ <li class="md-tabs__item">
+ <a href="https://sedona.apache.org/latest/community/contact/" class="md-tabs__link">
+
+
+
+
+
+ Community
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
<li class="md-tabs__item">
<a href="https://sedona.apache.org/latest/asf/asf/" class="md-tabs__link">
@@ -324,7 +364,7 @@
- Return to Sedona Homepage
+ Sedona Homepage
</a>
</li>
@@ -361,7 +401,7 @@
<label class="md-nav__title" for="__drawer">
<a href=".." title="SedonaDB" class="md-nav__button md-logo" aria-label="SedonaDB" data-md-component="logo">
- <img src="../image/sedona_logo_symbol_white.svg" alt="logo">
+ <img src="../image/sedona_logo_symbol.png" alt="logo">
</a>
SedonaDB
@@ -393,7 +433,29 @@
<span class="md-ellipsis">
- Home
+ SedonaDB
+
+ </span>
+
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../quickstart-python/" class="md-nav__link">
+
+
+
+ <span class="md-ellipsis">
+ Python Quickstart
</span>
@@ -428,10 +490,10 @@
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" checked>
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" checked>
- <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="">
+ <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="">
@@ -444,8 +506,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="true">
- <label class="md-nav__title" for="__nav_2">
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="true">
+ <label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
SedonaDB Guides
</label>
@@ -463,7 +525,7 @@
<span class="md-ellipsis">
- SedonaDB Guide
+ Working with Vector Data
</span>
@@ -481,12 +543,12 @@
<li class="md-nav__item">
- <a href="../quickstart-cli/" class="md-nav__link">
+ <a href="../geopandas-interop/" class="md-nav__link">
<span class="md-ellipsis">
- CLI Quickstart
+ Working with GeoPandas
</span>
@@ -504,12 +566,35 @@
<li class="md-nav__item">
- <a href="../quickstart-python/" class="md-nav__link">
+ <a href="../overture-examples/" class="md-nav__link">
<span class="md-ellipsis">
- Python Quickstart
+ Working with Overture
+
+ </span>
+
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../working-with-parquet-files/" class="md-nav__link">
+
+
+
+ <span class="md-ellipsis">
+ Working with Parquet Files
</span>
@@ -541,7 +626,7 @@
<span class="md-ellipsis">
- Development
+ Contributors Guide
</span>
@@ -554,7 +639,7 @@
<span class="md-ellipsis">
- Development
+ Contributors Guide
</span>
@@ -576,6 +661,15 @@
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
+ <li class="md-nav__item">
+ <a href="#fork-and-clone-the-repository" class="md-nav__link">
+ <span class="md-ellipsis">
+ Fork and clone the repository
+ </span>
+ </a>
+
+</li>
+
<li class="md-nav__item">
<a href="#rust" class="md-nav__link">
<span class="md-ellipsis">
@@ -583,6 +677,30 @@
</span>
</a>
+ <nav class="md-nav" aria-label="Rust">
+ <ul class="md-nav__list">
+
+ <li class="md-nav__item">
+ <a href="#test-data-setup" class="md-nav__link">
+ <span class="md-ellipsis">
+ Test data setup
+ </span>
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#system-dependencies" class="md-nav__link">
+ <span class="md-ellipsis">
+ System dependencies
+ </span>
+ </a>
+
+</li>
+
+ </ul>
+ </nav>
+
</li>
<li class="md-nav__item">
@@ -601,6 +719,30 @@
</span>
</a>
+ <nav class="md-nav" aria-label="Debugging">
+ <ul class="md-nav__list">
+
+ <li class="md-nav__item">
+ <a href="#rust_1" class="md-nav__link">
+ <span class="md-ellipsis">
+ Rust
+ </span>
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#python-c-and-c" class="md-nav__link">
+ <span class="md-ellipsis">
+ Python, C, and C++
+ </span>
+ </a>
+
+</li>
+
+ </ul>
+ </nav>
+
</li>
<li class="md-nav__item">
@@ -610,6 +752,30 @@
</span>
</a>
+ <nav class="md-nav" aria-label="Low-level benchmarking">
+ <ul class="md-nav__list">
+
+ <li class="md-nav__item">
+ <a href="#running-benchmarks" class="md-nav__link">
+ <span class="md-ellipsis">
+ Running benchmarks
+ </span>
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#managing-results" class="md-nav__link">
+ <span class="md-ellipsis">
+ Managing results
+ </span>
+ </a>
+
+</li>
+
+ </ul>
+ </nav>
+
</li>
<li class="md-nav__item">
@@ -657,10 +823,10 @@
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3">
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4">
- <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
+ <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
@@ -673,8 +839,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
- <label class="md-nav__title" for="__nav_3">
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
SedonaDB Reference
</label>
@@ -700,10 +866,10 @@
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_1">
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_1">
- <label class="md-nav__link" for="__nav_3_1" id="__nav_3_1_label" tabindex="0">
+ <label class="md-nav__link" for="__nav_4_1" id="__nav_4_1_label" tabindex="0">
@@ -716,8 +882,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_1_label" aria-expanded="false">
- <label class="md-nav__title" for="__nav_3_1">
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_1_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4_1">
<span class="md-nav__icon md-icon"></span>
Python
</label>
@@ -774,10 +940,10 @@
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2">
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_2">
- <label class="md-nav__link" for="__nav_3_2" id="__nav_3_2_label" tabindex="0">
+ <label class="md-nav__link" for="__nav_4_2" id="__nav_4_2_label" tabindex="0">
@@ -790,8 +956,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_2_label" aria-expanded="false">
- <label class="md-nav__title" for="__nav_3_2">
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_2_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4_2">
<span class="md-nav__icon md-icon"></span>
SQL
</label>
@@ -843,19 +1009,34 @@
+ </ul>
+ </nav>
+
+ </li>
+
+
-
+
+ </ul>
+ </nav>
+
+ </li>
+
+
+
+
+
<li class="md-nav__item">
- <a href="../reference/read-parquet-files/" class="md-nav__link">
+ <a href="https://sedona.apache.org/latest/blog/" class="md-nav__link">
<span class="md-ellipsis">
- Read Parquet Files
+ Blog
</span>
@@ -864,22 +1045,6 @@
</li>
-
-
- </ul>
- </nav>
-
- </li>
-
-
-
-
- </ul>
- </nav>
-
- </li>
-
-
@@ -888,12 +1053,12 @@
<li class="md-nav__item">
- <a href="https://sedona.apache.org/latest/blog/" class="md-nav__link">
+ <a href="https://sedona.apache.org/latest/community/contact/" class="md-nav__link">
<span class="md-ellipsis">
- Blog
+ Community
</span>
@@ -937,7 +1102,7 @@
<span class="md-ellipsis">
- Return to Sedona Homepage
+ Sedona Homepage
</span>
@@ -973,6 +1138,15 @@
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
+ <li class="md-nav__item">
+ <a href="#fork-and-clone-the-repository" class="md-nav__link">
+ <span class="md-ellipsis">
+ Fork and clone the repository
+ </span>
+ </a>
+
+</li>
+
<li class="md-nav__item">
<a href="#rust" class="md-nav__link">
<span class="md-ellipsis">
@@ -980,6 +1154,30 @@
</span>
</a>
+ <nav class="md-nav" aria-label="Rust">
+ <ul class="md-nav__list">
+
+ <li class="md-nav__item">
+ <a href="#test-data-setup" class="md-nav__link">
+ <span class="md-ellipsis">
+ Test data setup
+ </span>
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#system-dependencies" class="md-nav__link">
+ <span class="md-ellipsis">
+ System dependencies
+ </span>
+ </a>
+
+</li>
+
+ </ul>
+ </nav>
+
</li>
<li class="md-nav__item">
@@ -998,6 +1196,30 @@
</span>
</a>
+ <nav class="md-nav" aria-label="Debugging">
+ <ul class="md-nav__list">
+
+ <li class="md-nav__item">
+ <a href="#rust_1" class="md-nav__link">
+ <span class="md-ellipsis">
+ Rust
+ </span>
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#python-c-and-c" class="md-nav__link">
+ <span class="md-ellipsis">
+ Python, C, and C++
+ </span>
+ </a>
+
+</li>
+
+ </ul>
+ </nav>
+
</li>
<li class="md-nav__item">
@@ -1007,6 +1229,30 @@
</span>
</a>
+ <nav class="md-nav" aria-label="Low-level benchmarking">
+ <ul class="md-nav__list">
+
+ <li class="md-nav__item">
+ <a href="#running-benchmarks" class="md-nav__link">
+ <span class="md-ellipsis">
+ Running benchmarks
+ </span>
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#managing-results" class="md-nav__link">
+ <span class="md-ellipsis">
+ Managing results
+ </span>
+ </a>
+
+</li>
+
+ </ul>
+ </nav>
+
</li>
<li class="md-nav__item">
@@ -1034,7 +1280,7 @@
- <a href="https://github.com/apache/sedona-db/edit/master/docs/development.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
+ <a href="https://github.com/apache/sedona-db/blob/main/docs/contributors-guide.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"></path></svg>
</a>
@@ -1059,12 +1305,67 @@
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
---><h1 id="development">Development<a class="headerlink" href="#development" title="Permanent link">¶</a></h1>
+--><h1 id="contributors-guide">Contributors Guide<a class="headerlink" href="#contributors-guide" title="Permanent link">¶</a></h1>
+<p>This guide details how to set up your development environment as a SedonaDB Contributor.</p>
+<h2 id="fork-and-clone-the-repository">Fork and clone the repository<a class="headerlink" href="#fork-and-clone-the-repository" title="Permanent link">¶</a></h2>
+<p>Your first step is to create a personal copy of the repository and connect it to the main project.</p>
+<ol>
+<li>
+<p>Fork the repository</p>
+<ul>
+<li>Navigate to the official <a href="https://github.com/apache/sedona-db">Apache SedonaDB GitHub repository</a>.</li>
+<li>Click the <strong>Fork</strong> button in the top-right corner. This creates a complete copy of the project in your own GitHub account.</li>
+</ul>
+</li>
+<li>
+<p>Clone your fork</p>
+<ul>
+<li>Next, clone your newly created fork to your local machine. This command downloads the repository into a new folder named <code>sedona-db</code>.</li>
+<li>
+<p>Replace <code>YourUsername</code> with your actual GitHub username.</p>
+<div class="highlight"><pre><span></span><code>git<span class="w"> </span>clone<span class="w"> </span>https://github.com/YourUsername/sedona-db.git
+<span class="nb">cd</span><span class="w"> </span>sedona-db
+</code></pre></div>
+</li>
+</ul>
+</li>
+<li>
+<p>Configure the remotes</p>
+<ul>
+<li>Your local repository needs to know where the original project is so you can pull in updates. You'll add a remote link, traditionally named <strong><code>upstream</code></strong>, to the main Apache SedonaDB repository.</li>
+<li>
+<p>Your fork is automatically configured as the <strong><code>origin</code></strong> remote.</p>
+<div class="highlight"><pre><span></span><code><span class="c1"># Add the main repository as the "upstream" remote</span>
+git<span class="w"> </span>remote<span class="w"> </span>add<span class="w"> </span>upstream<span class="w"> </span>https://github.com/apache/sedona-db.git
+</code></pre></div>
+</li>
+</ul>
+</li>
+<li>
+<p>Verify the configuration</p>
+<ul>
+<li>
+<p>Run the following command to verify that you have two remotes configured correctly: <code>origin</code> (your fork) and <code>upstream</code> (the main repository).</p>
+<div class="highlight"><pre><span></span><code>git<span class="w"> </span>remote<span class="w"> </span>-v
+</code></pre></div>
+</li>
+<li>
+<p>The output should look like this:</p>
+<div class="highlight"><pre><span></span><code>origin<span class="w"> </span>https://github.com/YourUsername/sedona-db.git<span class="w"> </span><span class="o">(</span>fetch<span class="o">)</span>
+origin<span class="w"> </span>https://github.com/YourUsername/sedona-db.git<span class="w"> </span><span class="o">(</span>push<span class="o">)</span>
+upstream<span class="w"> </span>https://github.com/apache/sedona-db.git<span class="w"> </span><span class="o">(</span>fetch<span class="o">)</span>
+upstream<span class="w"> </span>https://github.com/apache/sedona-db.git<span class="w"> </span><span class="o">(</span>push<span class="o">)</span>
+</code></pre></div>
+</li>
+</ul>
+</li>
+</ol>
<h2 id="rust">Rust<a class="headerlink" href="#rust" title="Permanent link">¶</a></h2>
-<p>SedonaDB is written and Rust and is a standard <code>cargo</code> workspace. You can
-install a recent version of the Rust compiler and cargo from
-<a href="https://rustup.rs/">rustup.rs</a> and run tests using <code>cargo test</code>. A local
-development version of the CLI can be run with <code>cargo run --bin sedona-cli</code>.</p>
+<p>SedonaDB is written in Rust and is a standard <code>cargo</code> workspace.</p>
+<p>You can install a recent version of the Rust compiler and cargo from
+<a href="https://rustup.rs/">rustup.rs</a> and run tests using <code>cargo test</code>.</p>
+<p>A local development version of the CLI can be run with <code>cargo run --bin sedona-cli</code>.</p>
+<h3 id="test-data-setup">Test data setup<a class="headerlink" href="#test-data-setup" title="Permanent link">¶</a></h3>
<p>Some tests require submodules that contain test data or pinned versions of
external dependencies. These submodules can be initialized with:</p>
<div class="highlight"><pre><span></span><code>git<span class="w"> </span>submodule<span class="w"> </span>init
@@ -1073,19 +1374,27 @@ git<span class="w"> </span>submodule<span class="w"> </span>update<span class="w
<p>Additionally, some of the data required in the tests can be downloaded by running the following script.</p>
<div class="highlight"><pre><span></span><code>python<span class="w"> </span>submodules/download-assets.py
</code></pre></div>
+<h3 id="system-dependencies">System dependencies<a class="headerlink" href="#system-dependencies" title="Permanent link">¶</a></h3>
<p>Some crates wrap external native libraries and require system dependencies
-to build. At this time the only crate that requires this is the sedona-s2geography
+to build.</p>
+<div class="admonition note">
+<p class="admonition-title"><code>sedona-s2geography</code></p>
+<p>At this time, the only crate that requires this is the <code>sedona-s2geography</code>
crate, which requires <a href="https://cmake.org">CMake</a>,
-<a href="https://github.com/abseil/abseil-cpp">Abseil</a> and OpenSSL. These can be installed
-on MacOS with <a href="https://brew.sh">Homebrew</a>:</p>
+<a href="https://github.com/abseil/abseil-cpp">Abseil</a> and OpenSSL.</p>
+</div>
+<h4 id="macos">macOS<a class="headerlink" href="#macos" title="Permanent link">¶</a></h4>
+<p>These can be installed on macOS with <a href="https://brew.sh">Homebrew</a>:</p>
<div class="highlight"><pre><span></span><code>brew<span class="w"> </span>install<span class="w"> </span>abseil<span class="w"> </span>openssl<span class="w"> </span>cmake<span class="w"> </span>geos
</code></pre></div>
+<h4 id="linux-and-windows">Linux and Windows<a class="headerlink" href="#linux-and-windows" title="Permanent link">¶</a></h4>
<p>On Linux and Windows, it is recommended to use <a href="https://github.com/microsoft/vcpkg">vcpkg</a>
to provide external dependencies. This can be done by setting the <code>CMAKE_TOOLCHAIN_FILE</code>
environment variable:</p>
<div class="highlight"><pre><span></span><code><span class="nb">export</span><span class="w"> </span><span class="nv">CMAKE_TOOLCHAIN_FILE</span><span class="o">=</span>/path/to/vcpkg/scripts/buildsystems/vcpkg.cmake
</code></pre></div>
-<p>When using VSCode, it may be necessary to set this environment variable in settings.json
+<h4 id="visual-studio-code-vscode-configuration">Visual Studio Code (VSCode) Configuration<a class="headerlink" href="#visual-studio-code-vscode-configuration" title="Permanent link">¶</a></h4>
+<p>When using VSCode, it may be necessary to set this environment variable in <code>settings.json</code>
such that it can be found by rust-analyzer when running build/run tasks:</p>
<div class="highlight"><pre><span></span><code><span class="p">{</span>
<span class="w"> </span><span class="nt">"rust-analyzer.runnables.extraEnv"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
@@ -1098,8 +1407,8 @@ such that it can be found by rust-analyzer when running build/run tasks:</p>
</code></pre></div>
<h2 id="python">Python<a class="headerlink" href="#python" title="Permanent link">¶</a></h2>
<p>Python bindings to SedonaDB are built with the <a href="https://www.maturin.rs">Maturin</a> build
-backend. Installing a development version of the main Python bindings the first time
-can be done with:</p>
+backend.</p>
+<p>To install a development version of the main Python bindings for the first time, run the following commands:</p>
<div class="highlight"><pre><span></span><code><span class="nb">cd</span><span class="w"> </span>python/sedonadb
pip<span class="w"> </span>install<span class="w"> </span>-e<span class="w"> </span><span class="s2">".[test]"</span>
</code></pre></div>
@@ -1108,12 +1417,14 @@ native component with:</p>
<div class="highlight"><pre><span></span><code>maturin<span class="w"> </span>develop
</code></pre></div>
<h2 id="debugging">Debugging<a class="headerlink" href="#debugging" title="Permanent link">¶</a></h2>
+<h3 id="rust_1">Rust<a class="headerlink" href="#rust_1" title="Permanent link">¶</a></h3>
<p>Debugging Rust code is most easily done by writing or finding a test that triggers
the desired behavior and running it using the <em>Debug</em> selection in
<a href="https://code.visualstudio.com/">VSCode</a> with the
<a href="https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer">rust-analyzer</a>
-extension. Rust code can also debugged using the CLI by finding the <code>main()</code> function in
-sedona-cli and choosing the <em>Debug</em> run option.</p>
+extension. Rust code can also be debugged using the CLI by finding the <code>main()</code> function in
+<code>sedona-cli</code> and choosing the <em>Debug</em> run option.</p>
+<h3 id="python-c-and-c">Python, C, and C++<a class="headerlink" href="#python-c-and-c" title="Permanent link">¶</a></h3>
<p>Installation of Python bindings with <code>maturin develop</code> ensures a debug-friendly build for
debugging Rust, Python, or C/C++ code. Python code can be debugged using breakpoints in
any IDE that supports debugging an editable Python package installation (e.g., VSCode);
@@ -1126,7 +1437,8 @@ In general, there is at least one benchmark for every implementation of a functi
(some functions have more than one implementation provided by different libraries),
and a few other benchmarks for low-level iteration where work was done to optimize
specific cases.</p>
-<p>Briefly, benchmarks for a specific crate can be run with <code>cargo bench</code>:</p>
+<h3 id="running-benchmarks">Running benchmarks<a class="headerlink" href="#running-benchmarks" title="Permanent link">¶</a></h3>
+<p>Benchmarks for a specific crate can be run with <code>cargo bench</code>:</p>
<div class="highlight"><pre><span></span><code><span class="nb">cd</span><span class="w"> </span>rust/sedona-geo
cargo<span class="w"> </span>bench
</code></pre></div>
@@ -1135,24 +1447,42 @@ from the workspace or a specific crate (although the output is usually easier
to read for a specific crate).</p>
<div class="highlight"><pre><span></span><code>cargo<span class="w"> </span>bench<span class="w"> </span>--<span class="w"> </span>st_area
</code></pre></div>
+<h3 id="managing-results">Managing results<a class="headerlink" href="#managing-results" title="Permanent link">¶</a></h3>
<p>By default, criterion saves the last run and will report the difference between the
current benchmark and the last time it was run (although there are options to
-save and load various baselines). A report containing the last run for any
-benchmark that was ever run can be opened with:</p>
-<div class="highlight"><pre><span></span><code><span class="c1"># MacOS</span>
-open<span class="w"> </span>target/criterion/report/index.html
-<span class="c1"># Ubuntu</span>
-xdg-open<span class="w"> </span>target/criterion/report/index.html
+save and load various baselines).</p>
+<p>A report of the latest results for all benchmarks can be opened with the following command:</p>
+<div class="tabbed-set tabbed-alternate" data-tabs="1:2"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio"><input id="__tabbed_1_2" name="__tabbed_1" type="radio"><div class="tabbed-labels"><label for="__tabbed_1_1">macOS</label><label for="__tabbed_1_2">Ubuntu</label></div>
+<div class="tabbed-content">
+<div class="tabbed-block">
+<div class="highlight"><pre><span></span><code>open<span class="w"> </span>target/criterion/report/index.html
</code></pre></div>
+</div>
+<div class="tabbed-block">
+<div class="highlight"><pre><span></span><code>xdg-open<span class="w"> </span>target/criterion/report/index.html
+</code></pre></div>
+</div>
+</div>
+</div>
<p>All previous saved benchmark runs can be cleared with:</p>
<div class="highlight"><pre><span></span><code>rm<span class="w"> </span>-rf<span class="w"> </span>target/criterion
</code></pre></div>
<h2 id="documentation">Documentation<a class="headerlink" href="#documentation" title="Permanent link">¶</a></h2>
-<ul>
+<p>To contribute to the SedonaDB documentation:</p>
+<ol>
+<li>Clone the repository and create a fork.</li>
+<li>Install the Documentation dependencies:
+ <div class="highlight"><pre><span></span><code>pip<span class="w"> </span>install<span class="w"> </span>-r<span class="w"> </span>docs/requirements.txt
+</code></pre></div></li>
+<li>Make your changes to the documentation files.</li>
+<li>Preview your changes locally using these commands:<ul>
<li><code>mkdocs serve</code> - Start the live-reloading docs server.</li>
<li><code>mkdocs build</code> - Build the documentation site.</li>
<li><code>mkdocs -h</code> - Print help message and exit.</li>
</ul>
+</li>
+<li>Push your changes and open a pull request.</li>
+</ol>
@@ -1173,7 +1503,7 @@ xdg-open<span class="w"> </span>target/criterion/report/index.html
<span class="md-icon" title="Last update">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4 2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2z"></path></svg>
</span>
- <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-datetime" title="September 11, 2025 01:49:37 UTC">September 11, 2025 01:49:37</span>
+ <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-datetime" title="September 19, 2025 07:13:30 UTC">September 19, 2025 07:13:30</span>
</span>
@@ -1209,7 +1539,7 @@ xdg-open<span class="w"> </span>target/criterion/report/index.html
<nav class="md-footer__inner md-grid" aria-label="Footer">
- <a href="../quickstart-python/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Python Quickstart">
+ <a href="../working-with-parquet-files/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Working with Parquet Files">
<div class="md-footer__button md-icon">
<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"></path></svg>
@@ -1219,7 +1549,7 @@ xdg-open<span class="w"> </span>target/criterion/report/index.html
Previous
</span>
<div class="md-ellipsis">
- Python Quickstart
+ Working with Parquet Files
</div>
</div>
</a>
diff --git a/0.1.0/geopandas-interop.ipynb b/0.1.0/geopandas-interop.ipynb
new file mode 100644
index 0000000..0559c35
--- /dev/null
+++ b/0.1.0/geopandas-interop.ipynb
@@ -0,0 +1,288 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "caa5f2d5-28bb-4ce9-8a11-92646b3a9f6c",
+ "metadata": {},
+ "source": [
+ "<!---\n",
+ " Licensed to the Apache Software Foundation (ASF) under one\n",
+ " or more contributor license agreements. See the NOTICE file\n",
+ " distributed with this work for additional information\n",
+ " regarding copyright ownership. The ASF licenses this file\n",
+ " to you under the Apache License, Version 2.0 (the\n",
+ " \"License\"); you may not use this file except in compliance\n",
+ " with the License. You may obtain a copy of the License at\n",
+ "\n",
+ " http://www.apache.org/licenses/LICENSE-2.0\n",
+ "\n",
+ " Unless required by applicable law or agreed to in writing,\n",
+ " software distributed under the License is distributed on an\n",
+ " \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n",
+ " KIND, either express or implied. See the License for the\n",
+ " specific language governing permissions and limitations\n",
+ " under the License.\n",
+ "-->\n",
+ "\n",
+ "# GeoPandas interoperability\n",
+ "\n",
+ "This example shows how to read a GeoJSON file with GeoPandas and then convert the GeoPandas DataFrame to a SedonaDB DataFrame.\n",
+ "\n",
+ "Any file type that can be read by GeoPandas can also be read into a SedonaDB DataFrame!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "0434bead-2628-4844-a3f6-2f9c15a21899",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import sedona.db\n",
+ "import geopandas as gpd\n",
+ "\n",
+ "sd = sedona.db.connect()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "618b5d1d-ac2b-4786-ae5b-0d10efd6a8d4",
+ "metadata": {},
+ "source": [
+ "### Read a GeoJSON file with GeoPandas"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "2691bd24-9b2d-4cf9-958d-4ef01d967cb3",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "gdf = gpd.read_file(\"some_data.json\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "cd367a73-acd3-41cf-b892-7d863c370d5f",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "<div>\n",
+ "<style scoped>\n",
+ " .dataframe tbody tr th:only-of-type {\n",
+ " vertical-align: middle;\n",
+ " }\n",
+ "\n",
+ " .dataframe tbody tr th {\n",
+ " vertical-align: top;\n",
+ " }\n",
+ "\n",
+ " .dataframe thead th {\n",
+ " text-align: right;\n",
+ " }\n",
+ "</style>\n",
+ "<table border=\"1\" class=\"dataframe\">\n",
+ " <thead>\n",
+ " <tr style=\"text-align: right;\">\n",
+ " <th></th>\n",
+ " <th>prop0</th>\n",
+ " <th>prop1</th>\n",
+ " <th>geometry</th>\n",
+ " </tr>\n",
+ " </thead>\n",
+ " <tbody>\n",
+ " <tr>\n",
+ " <th>0</th>\n",
+ " <td>value0</td>\n",
+ " <td>None</td>\n",
+ " <td>POINT (102 0.5)</td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>1</th>\n",
+ " <td>value1</td>\n",
+ " <td>0.0</td>\n",
+ " <td>LINESTRING (102 0, 103 1, 104 0, 105 1)</td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>2</th>\n",
+ " <td>value2</td>\n",
+ " <td>{ \"this\": \"that\" }</td>\n",
+ " <td>POLYGON ((100 0, 101 0, 101 1, 100 1, 100 0))</td>\n",
+ " </tr>\n",
+ " </tbody>\n",
+ "</table>\n",
+ "</div>"
+ ],
+ "text/plain": [
+ " prop0 prop1 geometry\n",
+ "0 value0 None POINT (102 0.5)\n",
+ "1 value1 0.0 LINESTRING (102 0, 103 1, 104 0, 105 1)\n",
+ "2 value2 { \"this\": \"that\" } POLYGON ((100 0, 101 0, 101 1, 100 1, 100 0))"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "gdf"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "454e08a3-de65-4151-9d29-5d5ee8cf31d3",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "<class 'geopandas.geodataframe.GeoDataFrame'>\n",
+ "RangeIndex: 3 entries, 0 to 2\n",
+ "Data columns (total 3 columns):\n",
+ " # Column Non-Null Count Dtype \n",
+ "--- ------ -------------- ----- \n",
+ " 0 prop0 3 non-null object \n",
+ " 1 prop1 2 non-null object \n",
+ " 2 geometry 3 non-null geometry\n",
+ "dtypes: geometry(1), object(2)\n",
+ "memory usage: 204.0+ bytes\n"
+ ]
+ }
+ ],
+ "source": [
+ "gdf.info()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a5837268-1620-4b2b-bf37-cb6e282daedf",
+ "metadata": {},
+ "source": [
+ "### Convert the GeoPandas DataFrame to a SedonaDB DataFrame"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "385f6333-411d-4d1f-a09b-8816cccceabc",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df = sd.create_data_frame(gdf)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "id": "186059ae-4cf8-48ec-878a-71e7a39ac07e",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "┌────────┬────────────────────┬──────────────────────────────────────────┐\n",
+ "│ prop0 ┆ prop1 ┆ geometry │\n",
+ "│ utf8 ┆ utf8 ┆ geometry │\n",
+ "╞════════╪════════════════════╪══════════════════════════════════════════╡\n",
+ "│ value0 ┆ ┆ POINT(102 0.5) │\n",
+ "├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ value1 ┆ 0.0 ┆ LINESTRING(102 0,103 1,104 0,105 1) │\n",
+ "├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ value2 ┆ { \"this\": \"that\" } ┆ POLYGON((100 0,101 0,101 1,100 1,100 0)) │\n",
+ "└────────┴────────────────────┴──────────────────────────────────────────┘\n"
+ ]
+ }
+ ],
+ "source": [
+ "df.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2f09cbbe-86b5-4eb4-b920-1b12f018d1a6",
+ "metadata": {},
+ "source": [
+ "## Read a FlatGeobuf file\n",
+ "\n",
+ "This code demonstrates how to read a FlatGeobuf file with GeoPandas and then convert it to a SedonaDB DataFrame."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "965ae9f3-293b-4e8e-92bf-1359a482bca3",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "path = \"https://raw.githubusercontent.com/geoarrow/geoarrow-data/v0.2.0/natural-earth/files/natural-earth_cities.fgb\"\n",
+ "gdf = gpd.read_file(path)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "372c937f-da36-4e4b-98da-347890318a80",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df = sd.create_data_frame(gdf)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "d99f4474-da3a-4834-9675-184a667b2a90",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "┌──────────────┬──────────────────────────────┐\n",
+ "│ name ┆ geometry │\n",
+ "│ utf8 ┆ geometry │\n",
+ "╞══════════════╪══════════════════════════════╡\n",
+ "│ Vatican City ┆ POINT(12.4533865 41.9032822) │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ San Marino ┆ POINT(12.4417702 43.9360958) │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Vaduz ┆ POINT(9.5166695 47.1337238) │\n",
+ "└──────────────┴──────────────────────────────┘\n"
+ ]
+ }
+ ],
+ "source": [
+ "df.show(3)"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.12.4"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/0.1.0/geopandas-interop/index.html b/0.1.0/geopandas-interop/index.html
index 6f68667..8f68325 100644
--- a/0.1.0/geopandas-interop/index.html
+++ b/0.1.0/geopandas-interop/index.html
@@ -7,15 +7,21 @@
+ <link rel="canonical" href="https://sedona.apache.org/sedonadb/latest/geopandas-interop/">
+ <link rel="prev" href="../programming-guide/">
+
+
+ <link rel="next" href="../overture-examples/">
+
<link rel="icon" href="../image/sedona_logo_symbol.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.20">
- <title>GeoPandas interoperability - SedonaDB</title>
+ <title>Working with GeoPandas - SedonaDB</title>
@@ -102,7 +108,7 @@
<nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="SedonaDB" class="md-header__button md-logo" aria-label="SedonaDB" data-md-component="logo">
- <img src="../image/sedona_logo_symbol_white.svg" alt="logo">
+ <img src="../image/sedona_logo_symbol.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
@@ -119,7 +125,7 @@
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
- GeoPandas interoperability
+ Working with GeoPandas
</span>
</div>
@@ -211,7 +217,26 @@
- Home
+ SedonaDB
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+ <li class="md-tabs__item">
+ <a href="../quickstart-python/" class="md-tabs__link">
+
+
+
+
+
+ Python Quickstart
</a>
</li>
@@ -222,10 +247,12 @@
+
+
- <li class="md-tabs__item">
+ <li class="md-tabs__item md-tabs__item--active">
<a href="../programming-guide/" class="md-tabs__link">
@@ -292,6 +319,25 @@
+ <li class="md-tabs__item">
+ <a href="https://sedona.apache.org/latest/community/contact/" class="md-tabs__link">
+
+
+
+
+
+ Community
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
<li class="md-tabs__item">
<a href="https://sedona.apache.org/latest/asf/asf/" class="md-tabs__link">
@@ -318,7 +364,7 @@
- Return to Sedona Homepage
+ Sedona Homepage
</a>
</li>
@@ -355,7 +401,7 @@
<label class="md-nav__title" for="__drawer">
<a href=".." title="SedonaDB" class="md-nav__button md-logo" aria-label="SedonaDB" data-md-component="logo">
- <img src="../image/sedona_logo_symbol_white.svg" alt="logo">
+ <img src="../image/sedona_logo_symbol.png" alt="logo">
</a>
SedonaDB
@@ -387,7 +433,29 @@
<span class="md-ellipsis">
- Home
+ SedonaDB
+
+ </span>
+
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../quickstart-python/" class="md-nav__link">
+
+
+
+ <span class="md-ellipsis">
+ Python Quickstart
</span>
@@ -401,6 +469,8 @@
+
+
@@ -408,19 +478,22 @@
+
+
+
- <li class="md-nav__item md-nav__item--nested">
+ <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2">
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" checked>
- <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
+ <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="">
@@ -433,8 +506,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
- <label class="md-nav__title" for="__nav_2">
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="true">
+ <label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
SedonaDB Guides
</label>
@@ -452,12 +525,104 @@
<span class="md-ellipsis">
- SedonaDB Guide
+ Working with Vector Data
+
+ </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">
+ Working with GeoPandas
+
+ </span>
+
+
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <a href="./" class="md-nav__link md-nav__link--active">
+
+
+
+ <span class="md-ellipsis">
+ Working with GeoPandas
</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="#read-a-geojson-file-with-geopandas" class="md-nav__link">
+ <span class="md-ellipsis">
+ Read a GeoJSON file with GeoPandas
+ </span>
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#convert-the-geopandas-dataframe-to-a-sedonadb-dataframe" class="md-nav__link">
+ <span class="md-ellipsis">
+ Convert the GeoPandas DataFrame to a SedonaDB DataFrame
+ </span>
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#read-a-flatgeobuf-file" class="md-nav__link">
+ <span class="md-ellipsis">
+ Read a FlatGeobuf file
+ </span>
+ </a>
+
+</li>
+
+ </ul>
+
+</nav>
+
</li>
@@ -470,12 +635,12 @@
<li class="md-nav__item">
- <a href="../quickstart-cli/" class="md-nav__link">
+ <a href="../overture-examples/" class="md-nav__link">
<span class="md-ellipsis">
- CLI Quickstart
+ Working with Overture
</span>
@@ -493,12 +658,12 @@
<li class="md-nav__item">
- <a href="../quickstart-python/" class="md-nav__link">
+ <a href="../working-with-parquet-files/" class="md-nav__link">
<span class="md-ellipsis">
- Python Quickstart
+ Working with Parquet Files
</span>
@@ -516,12 +681,12 @@
<li class="md-nav__item">
- <a href="../development/" class="md-nav__link">
+ <a href="../contributors-guide/" class="md-nav__link">
<span class="md-ellipsis">
- Development
+ Contributors Guide
</span>
@@ -559,10 +724,10 @@
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3">
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4">
- <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
+ <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
@@ -575,8 +740,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
- <label class="md-nav__title" for="__nav_3">
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
SedonaDB Reference
</label>
@@ -602,10 +767,10 @@
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_1">
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_1">
- <label class="md-nav__link" for="__nav_3_1" id="__nav_3_1_label" tabindex="0">
+ <label class="md-nav__link" for="__nav_4_1" id="__nav_4_1_label" tabindex="0">
@@ -618,8 +783,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_1_label" aria-expanded="false">
- <label class="md-nav__title" for="__nav_3_1">
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_1_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4_1">
<span class="md-nav__icon md-icon"></span>
Python
</label>
@@ -676,10 +841,10 @@
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2">
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_2">
- <label class="md-nav__link" for="__nav_3_2" id="__nav_3_2_label" tabindex="0">
+ <label class="md-nav__link" for="__nav_4_2" id="__nav_4_2_label" tabindex="0">
@@ -692,8 +857,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_2_label" aria-expanded="false">
- <label class="md-nav__title" for="__nav_3_2">
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_2_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4_2">
<span class="md-nav__icon md-icon"></span>
SQL
</label>
@@ -745,19 +910,34 @@
+ </ul>
+ </nav>
+
+ </li>
+
+
-
+
+ </ul>
+ </nav>
+
+ </li>
+
+
+
+
+
<li class="md-nav__item">
- <a href="../reference/read-parquet-files/" class="md-nav__link">
+ <a href="https://sedona.apache.org/latest/blog/" class="md-nav__link">
<span class="md-ellipsis">
- Read Parquet Files
+ Blog
</span>
@@ -766,22 +946,6 @@
</li>
-
-
- </ul>
- </nav>
-
- </li>
-
-
-
-
- </ul>
- </nav>
-
- </li>
-
-
@@ -790,12 +954,12 @@
<li class="md-nav__item">
- <a href="https://sedona.apache.org/latest/blog/" class="md-nav__link">
+ <a href="https://sedona.apache.org/latest/community/contact/" class="md-nav__link">
<span class="md-ellipsis">
- Blog
+ Community
</span>
@@ -839,7 +1003,7 @@
<span class="md-ellipsis">
- Return to Sedona Homepage
+ Sedona Homepage
</span>
@@ -918,7 +1082,7 @@
- <a href="https://github.com/apache/sedona-db/edit/master/docs/geopandas-interop.ipynb" title="Edit this page" class="md-content__button md-icon" rel="edit">
+ <a href="https://github.com/apache/sedona-db/blob/main/docs/geopandas-interop.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"></path></svg>
</a>
@@ -926,559 +1090,38 @@
-<script>
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, global.ClipboardCopyElement = factory());
- }(this, function () { 'use strict';
-
- function createNode(text) {
- const node = document.createElement('pre');
- node.style.width = '1px';
- node.style.height = '1px';
- node.style.position = 'fixed';
- node.style.top = '5px';
- node.textContent = text;
- return node;
- }
-
- function copyNode(node) {
- if ('clipboard' in navigator) {
- // eslint-disable-next-line flowtype/no-flow-fix-me-comments
- // $FlowFixMe Clipboard is not defined in Flow yet.
- return navigator.clipboard.writeText(node.textContent);
- }
-
- const selection = getSelection();
-
- if (selection == null) {
- return Promise.reject(new Error());
- }
-
- selection.removeAllRanges();
- const range = document.createRange();
- range.selectNodeContents(node);
- selection.addRange(range);
- document.execCommand('copy');
- selection.removeAllRanges();
- return Promise.resolve();
- }
- function copyText(text) {
- if ('clipboard' in navigator) {
- // eslint-disable-next-line flowtype/no-flow-fix-me-comments
- // $FlowFixMe Clipboard is not defined in Flow yet.
- return navigator.clipboard.writeText(text);
- }
-
- const body = document.body;
-
- if (!body) {
- return Promise.reject(new Error());
- }
-
- const node = createNode(text);
- body.appendChild(node);
- copyNode(node);
- body.removeChild(node);
- return Promise.resolve();
- }
-
- function copy(button) {
- const id = button.getAttribute('for');
- const text = button.getAttribute('value');
-
- function trigger() {
- button.dispatchEvent(new CustomEvent('clipboard-copy', {
- bubbles: true
- }));
- }
-
- if (text) {
- copyText(text).then(trigger);
- } else if (id) {
- const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument;
- if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return;
- const node = root.getElementById(id);
- if (node) copyTarget(node).then(trigger);
- }
- }
-
- function copyTarget(content) {
- if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) {
- return copyText(content.value);
- } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) {
- return copyText(content.href);
- } else {
- return copyNode(content);
- }
- }
-
- function clicked(event) {
- const button = event.currentTarget;
-
- if (button instanceof HTMLElement) {
- copy(button);
- }
- }
-
- function keydown(event) {
- if (event.key === ' ' || event.key === 'Enter') {
- const button = event.currentTarget;
-
- if (button instanceof HTMLElement) {
- event.preventDefault();
- copy(button);
- }
- }
- }
-
- function focused(event) {
- event.currentTarget.addEventListener('keydown', keydown);
- }
-
- function blurred(event) {
- event.currentTarget.removeEventListener('keydown', keydown);
- }
-
- class ClipboardCopyElement extends HTMLElement {
- constructor() {
- super();
- this.addEventListener('click', clicked);
- this.addEventListener('focus', focused);
- this.addEventListener('blur', blurred);
- }
-
- connectedCallback() {
- if (!this.hasAttribute('tabindex')) {
- this.setAttribute('tabindex', '0');
- }
+<!---
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
- if (!this.hasAttribute('role')) {
- this.setAttribute('role', 'button');
- }
- }
+ http://www.apache.org/licenses/LICENSE-2.0
- get value() {
- return this.getAttribute('value') || '';
- }
-
- set value(text) {
- this.setAttribute('value', text);
- }
-
- }
-
- if (!window.customElements.get('clipboard-copy')) {
- window.ClipboardCopyElement = ClipboardCopyElement;
- window.customElements.define('clipboard-copy', ClipboardCopyElement);
- }
-
- return ClipboardCopyElement;
-
- }));
-</script>
-<script>
- document.addEventListener('clipboard-copy', function(event) {
- const notice = event.target.querySelector('.notice')
- notice.hidden = false
- setTimeout(function() {
- notice.hidden = true
- }, 1000)
- })
-</script>
-<style type="text/css">
- pre { line-height: 125%; }
-td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
-span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
-td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
-span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
-.highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) }
-.highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) }
-.highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */
-.highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */
-.highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */
-.highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */
-.highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */
-.highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */
-.highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */
-.highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */
-.highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */
-.highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */
-.highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */
-.highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */
-.highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */
-.highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */
-.highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */
-.highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */
-.highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */
-.highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */
-.highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */
-.highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */
-.highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */
-.highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */
-.highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */
-.highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */
-.highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */
-.highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */
-.highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */
-.highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */
-.highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */
-.highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */
-.highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */
-.highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */
-.highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */
-.highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */
-.highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */
-.highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */
-.highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */
-.highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */
-.highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */
-.highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */
-.highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */
- </style>
-<style type="text/css">
-@charset "UTF-8";.jupyter-wrapper{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink- [...]
-</style>
-<style type="text/css">
-.jupyter-wrapper{--jp-shadow-base-lightness: 0;--jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), .2 );--jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), .14 );--jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), .12 );--jp-elevation-z0: none;--jp-elev [...]
-</style>
-<!-- Load mathjax -->
-<script src=""> </script>
-<!-- MathJax configuration -->
-<script type="text/x-mathjax-config">
- init_mathjax = function() {
- if (window.MathJax) {
- // MathJax loaded
- MathJax.Hub.Config({
- TeX: {
- equationNumbers: {
- autoNumber: "AMS",
- useLabelIds: true
- }
- },
- tex2jax: {
- inlineMath: [ ['$','$'], ["\\(","\\)"] ],
- displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
- processEscapes: true,
- processEnvironments: true
- },
- displayAlign: 'center',
- messageStyle: 'none',
- CommonHTML: {
- linebreaks: {
- automatic: true
- }
- }
- });
-
- MathJax.Hub.Queue(["Typeset", MathJax.Hub]);
- }
- }
- init_mathjax();
- </script>
-<!-- End of mathjax configuration --><script type="module">
- document.addEventListener("DOMContentLoaded", async () => {
- const diagrams = document.querySelectorAll(".jp-Mermaid > pre.mermaid");
- // do not load mermaidjs if not needed
- if (!diagrams.length) {
- return;
- }
- const mermaid = (await import("https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.7.0/mermaid.esm.min.mjs")).default;
- const parser = new DOMParser();
-
- mermaid.initialize({
- maxTextSize: 100000,
- maxEdges: 100000,
- startOnLoad: false,
- fontFamily: window
- .getComputedStyle(document.body)
- .getPropertyValue("--jp-ui-font-family"),
- theme: document.querySelector("body[data-jp-theme-light='true']")
- ? "default"
- : "dark",
- });
-
- let _nextMermaidId = 0;
-
- function makeMermaidImage(svg) {
- const img = document.createElement("img");
- const doc = parser.parseFromString(svg, "image/svg+xml");
- const svgEl = doc.querySelector("svg");
- const { maxWidth } = svgEl?.style || {};
- const firstTitle = doc.querySelector("title");
- const firstDesc = doc.querySelector("desc");
-
- img.setAttribute("src", `data:image/svg+xml,${encodeURIComponent(svg)}`);
- if (maxWidth) {
- img.width = parseInt(maxWidth);
- }
- if (firstTitle) {
- img.setAttribute("alt", firstTitle.textContent);
- }
- if (firstDesc) {
- const caption = document.createElement("figcaption");
- caption.className = "sr-only";
- caption.textContent = firstDesc.textContent;
- return [img, caption];
- }
- return [img];
- }
-
- async function makeMermaidError(text) {
- let errorMessage = "";
- try {
- await mermaid.parse(text);
- } catch (err) {
- errorMessage = `${err}`;
- }
-
- const result = document.createElement("details");
- result.className = 'jp-RenderedMermaid-Details';
- const summary = document.createElement("summary");
- summary.className = 'jp-RenderedMermaid-Summary';
- const pre = document.createElement("pre");
- const code = document.createElement("code");
- code.innerText = text;
- pre.appendChild(code);
- summary.appendChild(pre);
- result.appendChild(summary);
-
- const warning = document.createElement("pre");
- warning.innerText = errorMessage;
- result.appendChild(warning);
- return [result];
- }
-
- async function renderOneMarmaid(src) {
- const id = `jp-mermaid-${_nextMermaidId++}`;
- const parent = src.parentNode;
- let raw = src.textContent.trim();
- const el = document.createElement("div");
- el.style.visibility = "hidden";
- document.body.appendChild(el);
- let results = null;
- let output = null;
- try {
- let { svg } = await mermaid.render(id, raw, el);
- svg = cleanMermaidSvg(svg);
- results = makeMermaidImage(svg);
- output = document.createElement("figure");
- results.map(output.appendChild, output);
- } catch (err) {
- parent.classList.add("jp-mod-warning");
- results = await makeMermaidError(raw);
- output = results[0];
- } finally {
- el.remove();
- }
- parent.classList.add("jp-RenderedMermaid");
- parent.appendChild(output);
- }
-
-
- /**
- * Post-process to ensure mermaid diagrams contain only valid SVG and XHTML.
- */
- function cleanMermaidSvg(svg) {
- return svg.replace(RE_VOID_ELEMENT, replaceVoidElement);
- }
-
-
- /**
- * A regular expression for all void elements, which may include attributes and
- * a slash.
- *
- * @see https://developer.mozilla.org/en-US/docs/Glossary/Void_element
- *
- * Of these, only `<br>` is generated by Mermaid in place of `\n`,
- * but _any_ "malformed" tag will break the SVG rendering entirely.
- */
- const RE_VOID_ELEMENT =
- /<\s*(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)\s*([^>]*?)\s*>/gi;
-
- /**
- * Ensure a void element is closed with a slash, preserving any attributes.
- */
- function replaceVoidElement(match, tag, rest) {
- rest = rest.trim();
- if (!rest.endsWith('/')) {
- rest = `${rest} /`;
- }
- return `<${tag} ${rest}>`;
- }
-
- void Promise.all([...diagrams].map(renderOneMarmaid));
- });
-</script>
-<style>
- .jp-Mermaid:not(.jp-RenderedMermaid) {
- display: none;
- }
-
- .jp-RenderedMermaid {
- overflow: auto;
- display: flex;
- }
-
- .jp-RenderedMermaid.jp-mod-warning {
- width: auto;
- padding: 0.5em;
- margin-top: 0.5em;
- border: var(--jp-border-width) solid var(--jp-warn-color2);
- border-radius: var(--jp-border-radius);
- color: var(--jp-ui-font-color1);
- font-size: var(--jp-ui-font-size1);
- white-space: pre-wrap;
- word-wrap: break-word;
- }
-
- .jp-RenderedMermaid figure {
- margin: 0;
- overflow: auto;
- max-width: 100%;
- }
-
- .jp-RenderedMermaid img {
- max-width: 100%;
- }
-
- .jp-RenderedMermaid-Details > pre {
- margin-top: 1em;
- }
-
- .jp-RenderedMermaid-Summary {
- color: var(--jp-warn-color2);
- }
-
- .jp-RenderedMermaid:not(.jp-mod-warning) pre {
- display: none;
- }
-
- .jp-RenderedMermaid-Summary > pre {
- display: inline-block;
- white-space: normal;
- }
-</style>
-<!-- End of mermaid configuration --><div class="jupyter-wrapper">
-<div class="jp-Notebook" data-jp-theme-light="true" data-jp-theme-name="JupyterLab Light">
-<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=caa5f2d5-28bb-4ce9-8a11-92646b3a9f6c">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
-</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
-<h1 id="geopandas-interoperability">GeoPandas interoperability<a class="anchor-link" href="#geopandas-interoperability">¶</a></h1><p>This example shows how to read a GeoJSON file with GeoPandas and then convert the GeoPandas DataFrame to a SedonaDB DataFrame.</p>
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+--><h1 id="geopandas-interoperability">GeoPandas interoperability<a class="headerlink" href="#geopandas-interoperability" title="Permanent link">¶</a></h1>
+<p>This example shows how to read a GeoJSON file with GeoPandas and then convert the GeoPandas DataFrame to a SedonaDB DataFrame.</p>
<p>Any file type that can be read by GeoPandas can also be read into a SedonaDB DataFrame!</p>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=0434bead-2628-4844-a3f6-2f9c15a21899">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [2]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-1">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">sedonadb</span>
+<div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">sedona.db</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">geopandas</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">gpd</span>
-<span class="n">sd</span> <span class="o">=</span> <span class="n">sedonadb</span><span class="o">.</span><span class="n">connect</span><span class="p">()</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-1">import sedonadb
-import geopandas as gpd
-
-sd = sedonadb.connect()</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=618b5d1d-ac2b-4786-ae5b-0d10efd6a8d4">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
-</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
-<h3 id="read-a-geojson-file-with-geopandas">Read a GeoJSON file with GeoPandas<a class="anchor-link" href="#read-a-geojson-file-with-geopandas">¶</a></h3>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=2691bd24-9b2d-4cf9-958d-4ef01d967cb3">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [9]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-2">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="n">gdf</span> <span class="o">=</span> <span class="n">gpd</span><span class="o">.</span><span class="n">read_file</span><span class="p">(</span><span class="s2">"some_data.json"</span><span class="p">)</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-2">gdf = gpd.read_file("some_data.json")</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=cd367a73-acd3-41cf-b892-7d863c370d5f">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [10]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-3">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="n">gdf</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-3">gdf</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell-outputWrapper">
-<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
-</div>
-<div class="jp-OutputArea jp-Cell-outputArea">
-<div class="jp-OutputArea-child jp-OutputArea-executeResult">
-<div class="jp-OutputPrompt jp-OutputArea-prompt">Out[10]:</div>
-<div class="jp-RenderedHTMLCommon jp-RenderedHTML jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/html" tabindex="0">
+<span class="n">sd</span> <span class="o">=</span> <span class="n">sedona</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">connect</span><span class="p">()</span>
+</code></pre></div>
+<h3 id="read-a-geojson-file-with-geopandas">Read a GeoJSON file with GeoPandas<a class="headerlink" href="#read-a-geojson-file-with-geopandas" title="Permanent link">¶</a></h3>
+<div class="highlight"><pre><span></span><code><span class="n">gdf</span> <span class="o">=</span> <span class="n">gpd</span><span class="o">.</span><span class="n">read_file</span><span class="p">(</span><span class="s2">"some_data.json"</span><span class="p">)</span>
+</code></pre></div>
+<div class="highlight"><pre><span></span><code><span class="n">gdf</span>
+</code></pre></div>
<div>
-<style scoped="">
+<style scoped>
.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}
@@ -1492,162 +1135,57 @@ sd = sedonadb.connect()</div>
}
</style>
<table border="1" class="dataframe">
-<thead>
-<tr style="text-align: right;">
-<th></th>
-<th>prop0</th>
-<th>prop1</th>
-<th>geometry</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<th>0</th>
-<td>value0</td>
-<td>None</td>
-<td>POINT (102 0.5)</td>
-</tr>
-<tr>
-<th>1</th>
-<td>value1</td>
-<td>0.0</td>
-<td>LINESTRING (102 0, 103 1, 104 0, 105 1)</td>
-</tr>
-<tr>
-<th>2</th>
-<td>value2</td>
-<td>{ "this": "that" }</td>
-<td>POLYGON ((100 0, 101 0, 101 1, 100 1, 100 0))</td>
-</tr>
-</tbody>
+ <thead>
+ <tr style="text-align: right;">
+ <th></th>
+ <th>prop0</th>
+ <th>prop1</th>
+ <th>geometry</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th>0</th>
+ <td>value0</td>
+ <td>None</td>
+ <td>POINT (102 0.5)</td>
+ </tr>
+ <tr>
+ <th>1</th>
+ <td>value1</td>
+ <td>0.0</td>
+ <td>LINESTRING (102 0, 103 1, 104 0, 105 1)</td>
+ </tr>
+ <tr>
+ <th>2</th>
+ <td>value2</td>
+ <td>{ "this": "that" }</td>
+ <td>POLYGON ((100 0, 101 0, 101 1, 100 1, 100 0))</td>
+ </tr>
+ </tbody>
</table>
</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=454e08a3-de65-4151-9d29-5d5ee8cf31d3">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [11]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-4">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="n">gdf</span><span class="o">.</span><span class="n">info</span><span class="p">()</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-4">gdf.info()</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell-outputWrapper">
-<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
-</div>
-<div class="jp-OutputArea jp-Cell-outputArea">
-<div class="jp-OutputArea-child">
-<div class="jp-OutputPrompt jp-OutputArea-prompt"></div>
-<div class="jp-RenderedText jp-OutputArea-output" data-mime-type="text/plain" tabindex="0">
-<pre><class 'geopandas.geodataframe.GeoDataFrame'>
-RangeIndex: 3 entries, 0 to 2
-Data columns (total 3 columns):
- # Column Non-Null Count Dtype
---- ------ -------------- -----
- 0 prop0 3 non-null object
- 1 prop1 2 non-null object
- 2 geometry 3 non-null geometry
-dtypes: geometry(1), object(2)
-memory usage: 204.0+ bytes
-</pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=a5837268-1620-4b2b-bf37-cb6e282daedf">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
-</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
-<h3 id="convert-the-geopandas-dataframe-to-a-sedonadb-dataframe">Convert the GeoPandas DataFrame to a SedonaDB DataFrame<a class="anchor-link" href="#convert-the-geopandas-dataframe-to-a-sedonadb-dataframe">¶</a></h3>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=385f6333-411d-4d1f-a09b-8816cccceabc">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [13]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-5">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="n">df</span> <span class="o">=</span> <span class="n">sd</span><span class="o">.</span><span class="n">create_data_frame</span><span class="p">(</span><span class="n">gdf</span><span class="p">)</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-5">df = sd.create_data_frame(gdf)</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=186059ae-4cf8-48ec-878a-71e7a39ac07e">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [14]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-6">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="n">df</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-6">df.show()</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell-outputWrapper">
-<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
-</div>
-<div class="jp-OutputArea jp-Cell-outputArea">
-<div class="jp-OutputArea-child">
-<div class="jp-OutputPrompt jp-OutputArea-prompt"></div>
-<div class="jp-RenderedText jp-OutputArea-output" data-mime-type="text/plain" tabindex="0">
-<pre>┌────────┬────────────────────┬──────────────────────────────────────────┐
+
+<div class="highlight"><pre><span></span><code><span class="n">gdf</span><span class="o">.</span><span class="n">info</span><span class="p">()</span>
+</code></pre></div>
+<div class="codehilite"><pre><span></span><code><span class="p"><</span><span class="kd">class</span><span class="w"> </span><span class="err">'</span><span class="nx">geopandas</span><span class="p">.</span><span class="nx">geodataframe</span><span class="p">.</span><span class="nx">GeoDataFrame</span><span class="err">'</span><span class="p">></span>
+<span class="nx">RangeIndex</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="nx">entries</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="nx">to</span><span class="w"> </span><span class="mi">2</span>
+<span class="nx">Data</span><span class="w"> </span><span class="nx">columns</span><span class="w"> </span><span class="p">(</span><span class="nx">total</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="nx">columns</span><span class="p">):</span>
+<span class="w"> </span><span class="err">#</span><span class="w"> </span><span class="nx">Column</span><span class="w"> </span><span class="nx">Non</span><span class="o">-</span><span class="nx">Null</span><span class="w"> </span><span class="nx">Count</span><span class="w"> </span><span class="nx">Dtype</span><span class="w"> </span>
+<span class="o">---</span><span class="w"> </span><span class="o">------</span><span class="w"> </span><span class="o">--------------</span><span class="w"> </span><span class="o">-----</span><span class="w"> </span>
+<span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="nx">prop0</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="nx">non</span><span class="o">-</span><span class="nx">null</span><span class="w"> </span><span class="nx">object</span><span class="w"> </span>
+<span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="nx">prop1</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="nx">non</span><span class="o">-</span><span class="nx">null</span><span class="w"> </span><span class="nx">object</span><span class="w"> </span>
+<span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="nx">geometry</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="nx">non</span><span class="o">-</span><span class="nx">null</span><span class="w"> </span><span class="nx">geometry</span>
+<span class="nx">dtypes</span><span class="p">:</span><span class="w"> </span><span class="nx">geometry</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span><span class="w"> </span><span class="nx">object</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
+<span class="nx">memory</span><span class="w"> </span><span class="nx">usage</span><span class="p">:</span><span class="w"> </span><span class="m m-Double">204.0</span><span class="o">+</span><span class="w"> </span><span class="nx">bytes</span>
+</code></pre></div>
+
+<h3 id="convert-the-geopandas-dataframe-to-a-sedonadb-dataframe">Convert the GeoPandas DataFrame to a SedonaDB DataFrame<a class="headerlink" href="#convert-the-geopandas-dataframe-to-a-sedonadb-dataframe" title="Permanent link">¶</a></h3>
+<div class="highlight"><pre><span></span><code><span class="n">df</span> <span class="o">=</span> <span class="n">sd</span><span class="o">.</span><span class="n">create_data_frame</span><span class="p">(</span><span class="n">gdf</span><span class="p">)</span>
+</code></pre></div>
+<div class="highlight"><pre><span></span><code><span class="n">df</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
+</code></pre></div>
+<div class="codehilite"><pre><span></span><code>┌────────┬────────────────────┬──────────────────────────────────────────┐
│ prop0 ┆ prop1 ┆ geometry │
│ utf8 ┆ utf8 ┆ geometry │
╞════════╪════════════════════╪══════════════════════════════════════════╡
@@ -1657,113 +1195,18 @@ memory usage: 204.0+ bytes
├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ value2 ┆ { "this": "that" } ┆ POLYGON((100 0,101 0,101 1,100 1,100 0)) │
└────────┴────────────────────┴──────────────────────────────────────────┘
-</pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=2f09cbbe-86b5-4eb4-b920-1b12f018d1a6">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
-</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
-<h2 id="read-a-flatgeobuf-file">Read a FlatGeobuf file<a class="anchor-link" href="#read-a-flatgeobuf-file">¶</a></h2><p>This code demonstrates how to read a FlatGeobuf file with GeoPandas and then convert it to a SedonaDB DataFrame.</p>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=965ae9f3-293b-4e8e-92bf-1359a482bca3">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [3]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-7">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="n">path</span> <span class="o">=</span> <span class="s2">"https://raw.githubusercontent.com/geoarrow/geoarrow-data/v0.2.0/natural-earth/files/natural-earth_cities.fgb"</span>
+</code></pre></div>
+
+<h2 id="read-a-flatgeobuf-file">Read a FlatGeobuf file<a class="headerlink" href="#read-a-flatgeobuf-file" title="Permanent link">¶</a></h2>
+<p>This code demonstrates how to read a FlatGeobuf file with GeoPandas and then convert it to a SedonaDB DataFrame.</p>
+<div class="highlight"><pre><span></span><code><span class="n">path</span> <span class="o">=</span> <span class="s2">"https://raw.githubusercontent.com/geoarrow/geoarrow-data/v0.2.0/natural-earth/files/natural-earth_cities.fgb"</span>
<span class="n">gdf</span> <span class="o">=</span> <span class="n">gpd</span><span class="o">.</span><span class="n">read_file</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-7">path = "https://raw.githubusercontent.com/geoarrow/geoarrow-data/v0.2.0/natural-earth/files/natural-earth_cities.fgb"
-gdf = gpd.read_file(path)</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=372c937f-da36-4e4b-98da-347890318a80">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [4]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-8">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="n">df</span> <span class="o">=</span> <span class="n">sd</span><span class="o">.</span><span class="n">create_data_frame</span><span class="p">(</span><span class="n">gdf</span><span class="p">)</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-8">df = sd.create_data_frame(gdf)</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=d99f4474-da3a-4834-9675-184a667b2a90">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [6]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-9">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="n">df</span><span class="o">.</span><span class="n">show</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-9">df.show(3)</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell-outputWrapper">
-<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
-</div>
-<div class="jp-OutputArea jp-Cell-outputArea">
-<div class="jp-OutputArea-child">
-<div class="jp-OutputPrompt jp-OutputArea-prompt"></div>
-<div class="jp-RenderedText jp-OutputArea-output" data-mime-type="text/plain" tabindex="0">
-<pre>┌──────────────┬──────────────────────────────┐
+</code></pre></div>
+<div class="highlight"><pre><span></span><code><span class="n">df</span> <span class="o">=</span> <span class="n">sd</span><span class="o">.</span><span class="n">create_data_frame</span><span class="p">(</span><span class="n">gdf</span><span class="p">)</span>
+</code></pre></div>
+<div class="highlight"><pre><span></span><code><span class="n">df</span><span class="o">.</span><span class="n">show</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
+</code></pre></div>
+<div class="codehilite"><pre><span></span><code>┌──────────────┬──────────────────────────────┐
│ name ┆ geometry │
│ utf8 ┆ geometry │
╞══════════════╪══════════════════════════════╡
@@ -1773,20 +1216,7 @@ gdf = gpd.read_file(path)</div>
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ Vaduz ┆ POINT(9.5166695 47.1337238) │
└──────────────┴──────────────────────────────┘
-</pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div> <!-- jp-Notebook -->
-</div> <!-- jupyter-wrapper -->
-
- <style>
- ['pre { line-height: 125%; }\ntd.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\nspan.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\ntd.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\nspan.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\n.highlight-ipynb .hll { b [...]
- </style>
-
+</code></pre></div>
@@ -1807,7 +1237,7 @@ gdf = gpd.read_file(path)</div>
<span class="md-icon" title="Last update">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4 2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2z"></path></svg>
</span>
- <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-datetime" title="September 10, 2025 19:11:22 UTC">September 10, 2025 19:11:22</span>
+ <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-datetime" title="September 18, 2025 00:36:42 UTC">September 18, 2025 00:36:42</span>
</span>
@@ -1839,6 +1269,44 @@ gdf = gpd.read_file(path)</div>
<footer class="md-footer">
+
+ <nav class="md-footer__inner md-grid" aria-label="Footer">
+
+
+ <a href="../programming-guide/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Working with Vector Data">
+ <div class="md-footer__button md-icon">
+
+ <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"></path></svg>
+ </div>
+ <div class="md-footer__title">
+ <span class="md-footer__direction">
+ Previous
+ </span>
+ <div class="md-ellipsis">
+ Working with Vector Data
+ </div>
+ </div>
+ </a>
+
+
+
+ <a href="../overture-examples/" class="md-footer__link md-footer__link--next" aria-label="Next: Working with Overture">
+ <div class="md-footer__title">
+ <span class="md-footer__direction">
+ Next
+ </span>
+ <div class="md-ellipsis">
+ Working with Overture
+ </div>
+ </div>
+ <div class="md-footer__button md-icon">
+
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"></path></svg>
+ </div>
+ </a>
+
+ </nav>
+
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
diff --git a/0.1.0/index.html b/0.1.0/index.html
index 9f29041..0cefa2f 100644
--- a/0.1.0/index.html
+++ b/0.1.0/index.html
@@ -7,9 +7,11 @@
+ <link rel="canonical" href="https://sedona.apache.org/sedonadb/latest/">
- <link rel="next" href="programming-guide/">
+
+ <link rel="next" href="quickstart-python/">
<link rel="icon" href="image/sedona_logo_symbol.png">
@@ -17,7 +19,7 @@
- <title>SedonaDB</title>
+ <title>Introducing SedonaDB - SedonaDB</title>
@@ -82,7 +84,7 @@
<div data-md-component="skip">
- <a href="#sedonadb" class="md-skip">
+ <a href="#key-features" class="md-skip">
Skip to content
</a>
@@ -104,7 +106,7 @@
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="." title="SedonaDB" class="md-header__button md-logo" aria-label="SedonaDB" data-md-component="logo">
- <img src="image/sedona_logo_symbol_white.svg" alt="logo">
+ <img src="image/sedona_logo_symbol.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
@@ -121,7 +123,7 @@
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
- Home
+ Introducing SedonaDB
</span>
</div>
@@ -215,7 +217,26 @@
- Home
+ SedonaDB
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+ <li class="md-tabs__item">
+ <a href="quickstart-python/" class="md-tabs__link">
+
+
+
+
+
+ Python Quickstart
</a>
</li>
@@ -296,6 +317,25 @@
+ <li class="md-tabs__item">
+ <a href="https://sedona.apache.org/latest/community/contact/" class="md-tabs__link">
+
+
+
+
+
+ Community
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
<li class="md-tabs__item">
<a href="https://sedona.apache.org/latest/asf/asf/" class="md-tabs__link">
@@ -322,7 +362,7 @@
- Return to Sedona Homepage
+ Sedona Homepage
</a>
</li>
@@ -346,9 +386,7 @@
-
-
- <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" hidden>
+ <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">
@@ -361,7 +399,7 @@
<label class="md-nav__title" for="__drawer">
<a href="." title="SedonaDB" class="md-nav__button md-logo" aria-label="SedonaDB" data-md-component="logo">
- <img src="image/sedona_logo_symbol_white.svg" alt="logo">
+ <img src="image/sedona_logo_symbol.png" alt="logo">
</a>
SedonaDB
@@ -394,15 +432,13 @@
<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">
- Home
+ SedonaDB
</span>
@@ -415,7 +451,7 @@
<span class="md-ellipsis">
- Home
+ SedonaDB
</span>
@@ -428,8 +464,6 @@
-
-
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
@@ -447,18 +481,18 @@
</li>
<li class="md-nav__item">
- <a href="#installation" class="md-nav__link">
+ <a href="#install-sedonadb" class="md-nav__link">
<span class="md-ellipsis">
- Installation
+ Install SedonaDB
</span>
</a>
</li>
<li class="md-nav__item">
- <a href="#sedonadb-example-with-vector-data" class="md-nav__link">
+ <a href="#run-a-query-in-sql-python-rust-or-r" class="md-nav__link">
<span class="md-ellipsis">
- SedonaDB example with vector data
+ Run a query in SQL, Python, Rust, or R
</span>
</a>
@@ -487,6 +521,28 @@
+ <li class="md-nav__item">
+ <a href="quickstart-python/" class="md-nav__link">
+
+
+
+ <span class="md-ellipsis">
+ Python Quickstart
+
+ </span>
+
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
@@ -501,10 +557,10 @@
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2">
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3">
- <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
+ <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
@@ -517,8 +573,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
- <label class="md-nav__title" for="__nav_2">
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
SedonaDB Guides
</label>
@@ -536,7 +592,7 @@
<span class="md-ellipsis">
- SedonaDB Guide
+ Working with Vector Data
</span>
@@ -554,12 +610,12 @@
<li class="md-nav__item">
- <a href="quickstart-cli/" class="md-nav__link">
+ <a href="geopandas-interop/" class="md-nav__link">
<span class="md-ellipsis">
- CLI Quickstart
+ Working with GeoPandas
</span>
@@ -577,12 +633,35 @@
<li class="md-nav__item">
- <a href="quickstart-python/" class="md-nav__link">
+ <a href="overture-examples/" class="md-nav__link">
<span class="md-ellipsis">
- Python Quickstart
+ Working with Overture
+
+ </span>
+
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="working-with-parquet-files/" class="md-nav__link">
+
+
+
+ <span class="md-ellipsis">
+ Working with Parquet Files
</span>
@@ -600,12 +679,12 @@
<li class="md-nav__item">
- <a href="development/" class="md-nav__link">
+ <a href="contributors-guide/" class="md-nav__link">
<span class="md-ellipsis">
- Development
+ Contributors Guide
</span>
@@ -643,10 +722,10 @@
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3">
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4">
- <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
+ <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
@@ -659,8 +738,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
- <label class="md-nav__title" for="__nav_3">
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
SedonaDB Reference
</label>
@@ -686,10 +765,10 @@
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_1">
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_1">
- <label class="md-nav__link" for="__nav_3_1" id="__nav_3_1_label" tabindex="0">
+ <label class="md-nav__link" for="__nav_4_1" id="__nav_4_1_label" tabindex="0">
@@ -702,8 +781,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_1_label" aria-expanded="false">
- <label class="md-nav__title" for="__nav_3_1">
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_1_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4_1">
<span class="md-nav__icon md-icon"></span>
Python
</label>
@@ -760,10 +839,10 @@
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2">
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_2">
- <label class="md-nav__link" for="__nav_3_2" id="__nav_3_2_label" tabindex="0">
+ <label class="md-nav__link" for="__nav_4_2" id="__nav_4_2_label" tabindex="0">
@@ -776,8 +855,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_2_label" aria-expanded="false">
- <label class="md-nav__title" for="__nav_3_2">
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_2_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4_2">
<span class="md-nav__icon md-icon"></span>
SQL
</label>
@@ -829,19 +908,34 @@
+ </ul>
+ </nav>
+
+ </li>
+
+
-
+
+ </ul>
+ </nav>
+
+ </li>
+
+
+
+
+
<li class="md-nav__item">
- <a href="reference/read-parquet-files/" class="md-nav__link">
+ <a href="https://sedona.apache.org/latest/blog/" class="md-nav__link">
<span class="md-ellipsis">
- Read Parquet Files
+ Blog
</span>
@@ -850,22 +944,6 @@
</li>
-
-
- </ul>
- </nav>
-
- </li>
-
-
-
-
- </ul>
- </nav>
-
- </li>
-
-
@@ -874,12 +952,12 @@
<li class="md-nav__item">
- <a href="https://sedona.apache.org/latest/blog/" class="md-nav__link">
+ <a href="https://sedona.apache.org/latest/community/contact/" class="md-nav__link">
<span class="md-ellipsis">
- Blog
+ Community
</span>
@@ -923,7 +1001,7 @@
<span class="md-ellipsis">
- Return to Sedona Homepage
+ Sedona Homepage
</span>
@@ -941,8 +1019,6 @@
-
-
<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">
@@ -952,8 +1028,6 @@
-
-
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
@@ -971,18 +1045,18 @@
</li>
<li class="md-nav__item">
- <a href="#installation" class="md-nav__link">
+ <a href="#install-sedonadb" class="md-nav__link">
<span class="md-ellipsis">
- Installation
+ Install SedonaDB
</span>
</a>
</li>
<li class="md-nav__item">
- <a href="#sedonadb-example-with-vector-data" class="md-nav__link">
+ <a href="#run-a-query-in-sql-python-rust-or-r" class="md-nav__link">
<span class="md-ellipsis">
- SedonaDB example with vector data
+ Run a query in SQL, Python, Rust, or R
</span>
</a>
@@ -1010,12 +1084,10 @@
<article class="md-content__inner md-typeset">
-
-
- <a href="https://github.com/apache/sedona-db/edit/master/docs/index.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
+ <a href="https://github.com/apache/sedona-db/blob/main/docs/index.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"></path></svg>
</a>
@@ -1023,6 +1095,8 @@
+ <h1>SedonaDB</h1>
+
<!---
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
@@ -1040,18 +1114,45 @@
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
---><h1 id="sedonadb">SedonaDB<a class="headerlink" href="#sedonadb" title="Permanent link">¶</a></h1>
-<p>SedonaDB is a high-performance, dependency-free geospatial compute engine.</p>
-<p>You can easily run SedonaDB locally or in the cloud. The first release supports a core set of vector operations, but the full-suite of common vector and raster computations will be supported soon.</p>
-<p>SedonaDB only runs on a single machine, so it’s perfect for processing smaller datasets. You can use SedonaSpark, SedonaFlink, or SedonaSnow for operations on larger datasets.</p>
-<div class="tabbed-set tabbed-alternate" data-tabs="1:4"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio"><input id="__tabbed_1_2" name="__tabbed_1" type="radio"><input id="__tabbed_1_3" name="__tabbed_1" type="radio"><input id="__tabbed_1_4" name="__tabbed_1" type="radio"><div class="tabbed-labels"><label for="__tabbed_1_1">SQL</label><label for="__tabbed_1_2">Python</label><label for="__tabbed_1_3">Rust</label><label for="__tabbed_1_4">R</label></div>
+--><p>SedonaDB is a single-node analytical database engine with geospatial as the first-class citizen.</p>
+<p>Fast and dependency-free, SedonaDB is ideal for working with smaller datasets located on local machines or cloud instances.</p>
+<p>The initial <code>0.1</code> release supports a core set of vector operations, with comprehensive vector and raster computation capabilities planned for the near future.</p>
+<p>For distributed workloads, you can still leverage the power of SedonaSpark, SedonaFlink, or SedonaSnow.</p>
+<h2 id="key-features">Key features<a class="headerlink" href="#key-features" title="Permanent link">¶</a></h2>
+<p>SedonaDB has several advantages:</p>
+<ul>
+<li><strong>Exceptional Performance:</strong> Built in Rust to process massive geospatial datasets with exceptional speed.</li>
+<li><strong>Unified Geospatial Toolkit:</strong> Access a comprehensive suite of functions for both vector and raster data in a single, powerful library.</li>
+<li><strong>Extensive Ecosystem Integration:</strong> Built on Apache Arrow for smooth interoperability with popular data science libraries like GeoPandas, DuckDB, and Polars.</li>
+<li><strong>Flexible APIs:</strong> Effortlessly switch between Python and SQL interfaces to match your preferred workflow and skill set.</li>
+<li><strong>Guaranteed CRS Propagation:</strong> Automatically manages coordinate reference systems (CRS) to ensure spatial accuracy and prevent common errors.</li>
+<li><strong>Broad File Format Support:</strong> Work with a wide range of both modern and legacy geospatial file formats like geoparquet.</li>
+<li><strong>Highly Extensible:</strong> Easily customize and extend the library's functionality to meet your project's unique requirements.</li>
+</ul>
+<h2 id="install-sedonadb">Install SedonaDB<a class="headerlink" href="#install-sedonadb" title="Permanent link">¶</a></h2>
+<p>Here's how to install SedonaDB with various build tools:</p>
+<div class="tabbed-set tabbed-alternate" data-tabs="1:2"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio"><input id="__tabbed_1_2" name="__tabbed_1" type="radio"><div class="tabbed-labels"><label for="__tabbed_1_1">pip</label><label for="__tabbed_1_2">R</label></div>
+<div class="tabbed-content">
+<div class="tabbed-block">
+<div class="highlight"><pre><span></span><code>pip<span class="w"> </span>install<span class="w"> </span><span class="s2">"apache-sedona[db]"</span>
+</code></pre></div>
+</div>
+<div class="tabbed-block">
+<div class="highlight"><pre><span></span><code>install.packages<span class="o">(</span><span class="s2">"sedonadb"</span>,<span class="w"> </span><span class="nv">repos</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"https://community.r-multiverse.org"</span><span class="o">)</span>
+</code></pre></div>
+</div>
+</div>
+</div>
+<h2 id="run-a-query-in-sql-python-rust-or-r">Run a query in SQL, Python, Rust, or R<a class="headerlink" href="#run-a-query-in-sql-python-rust-or-r" title="Permanent link">¶</a></h2>
+<p>SedonaDB offers a flexible query interface.</p>
+<div class="tabbed-set tabbed-alternate" data-tabs="2:4"><input checked="checked" id="__tabbed_2_1" name="__tabbed_2" type="radio"><input id="__tabbed_2_2" name="__tabbed_2" type="radio"><input id="__tabbed_2_3" name="__tabbed_2" type="radio"><input id="__tabbed_2_4" name="__tabbed_2" type="radio"><div class="tabbed-labels"><label for="__tabbed_2_1">SQL</label><label for="__tabbed_2_2">Python</label><label for="__tabbed_2_3">Rust</label><label for="__tabbed_2_4">R</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<div class="highlight"><pre><span></span><code><span class="k">SELECT</span><span class="w"> </span><span class="n">ST_Point</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="n">geom</span>
</code></pre></div>
</div>
<div class="tabbed-block">
-<div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">seonda.db</span>
+<div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">sedona.db</span>
<span class="n">sd</span> <span class="o">=</span> <span class="n">sedona</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">connect</span><span class="p">()</span>
<span class="n">sd</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s2">"SELECT ST_Point(0, 1) as geom"</span><span class="p">)</span>
@@ -1077,35 +1178,8 @@
</div>
</div>
</div>
-<h2 id="key-features">Key features<a class="headerlink" href="#key-features" title="Permanent link">¶</a></h2>
-<p>SedonaDB has several advantages:</p>
-<ul>
-<li><strong>Blazing-Fast Performance:</strong> Built in Rust to process massive geospatial datasets with exceptional speed.</li>
-<li><strong>Unified Geospatial Toolkit:</strong> Access a comprehensive suite of functions for both vector and raster data in a single, powerful library.</li>
-<li><strong>Seamless Ecosystem Integration:</strong> Built on Apache Arrow for smooth interoperability with popular data science libraries like GeoPandas, DuckDB, and Polars.</li>
-<li><strong>Flexible APIs:</strong> Effortlessly switch between Python and SQL interfaces to match your preferred workflow and skillset.</li>
-<li><strong>Guaranteed CRS Propagation:</strong> Automatically manages coordinate reference systems (CRS) to ensure spatial accuracy and prevent common errors.</li>
-<li><strong>Broad File Format Support:</strong> Work with a wide range of both modern and legacy geospatial file formats like geoparquet.</li>
-<li><strong>Highly Extensible:</strong> Easily customize and extend the library's functionality to meet your project's unique requirements.</li>
-</ul>
-<h2 id="installation">Installation<a class="headerlink" href="#installation" title="Permanent link">¶</a></h2>
-<p>Here’s how to install SedonaDB with various build tools:</p>
-<div class="tabbed-set tabbed-alternate" data-tabs="2:2"><input checked="checked" id="__tabbed_2_1" name="__tabbed_2" type="radio"><input id="__tabbed_2_2" name="__tabbed_2" type="radio"><div class="tabbed-labels"><label for="__tabbed_2_1">pip</label><label for="__tabbed_2_2">R</label></div>
-<div class="tabbed-content">
-<div class="tabbed-block">
-<div class="highlight"><pre><span></span><code>pip<span class="w"> </span>install<span class="w"> </span><span class="s2">"apache-sedona[db]"</span>
-</code></pre></div>
-</div>
-<div class="tabbed-block">
-<div class="highlight"><pre><span></span><code>install.packages<span class="o">(</span><span class="s2">"sedonadb"</span>,<span class="w"> </span><span class="nv">repos</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"https://community.r-multiverse.org"</span><span class="o">)</span>
-</code></pre></div>
-</div>
-</div>
-</div>
-<h2 id="sedonadb-example-with-vector-data">SedonaDB example with vector data<a class="headerlink" href="#sedonadb-example-with-vector-data" title="Permanent link">¶</a></h2>
-<p>TODO</p>
<h2 id="have-questions">Have questions?<a class="headerlink" href="#have-questions" title="Permanent link">¶</a></h2>
-<p>Feel free to start a GitHub Discussion or join the Discord community to ask the developers any questions you may have.</p>
+<p>Start a <a href="https://github.com/apache/sedona-db/issues">GitHub Discussion</a> or join the <a href="https://discord.com/invite/9A3k5dEBsY">Discord community</a> and ask the developers any questions you may have.</p>
<p>We look forward to collaborating with you!</p>
@@ -1127,7 +1201,7 @@
<span class="md-icon" title="Last update">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4 2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2z"></path></svg>
</span>
- <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-datetime" title="September 9, 2025 20:06:34 UTC">September 9, 2025 20:06:34</span>
+ <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-datetime" title="September 19, 2025 07:13:30 UTC">September 19, 2025 07:13:30</span>
</span>
@@ -1138,8 +1212,6 @@
-
-
@@ -1162,19 +1234,17 @@
-
-
<nav class="md-footer__inner md-grid" aria-label="Footer">
- <a href="programming-guide/" class="md-footer__link md-footer__link--next" aria-label="Next: SedonaDB Guide">
+ <a href="quickstart-python/" class="md-footer__link md-footer__link--next" aria-label="Next: Python Quickstart">
<div class="md-footer__title">
<span class="md-footer__direction">
Next
</span>
<div class="md-ellipsis">
- SedonaDB Guide
+ Python Quickstart
</div>
</div>
<div class="md-footer__button md-icon">
diff --git a/0.1.0/objects.inv b/0.1.0/objects.inv
index 9b8f63c..fea617b 100644
Binary files a/0.1.0/objects.inv and b/0.1.0/objects.inv differ
diff --git a/0.1.0/overture-examples.ipynb b/0.1.0/overture-examples.ipynb
new file mode 100644
index 0000000..115147d
--- /dev/null
+++ b/0.1.0/overture-examples.ipynb
@@ -0,0 +1,472 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "8239e8eb-724c-44df-b651-c2dd02f1d96c",
+ "metadata": {},
+ "source": [
+ "<!---\n",
+ " Licensed to the Apache Software Foundation (ASF) under one\n",
+ " or more contributor license agreements. See the NOTICE file\n",
+ " distributed with this work for additional information\n",
+ " regarding copyright ownership. The ASF licenses this file\n",
+ " to you under the Apache License, Version 2.0 (the\n",
+ " \"License\"); you may not use this file except in compliance\n",
+ " with the License. You may obtain a copy of the License at\n",
+ "\n",
+ " http://www.apache.org/licenses/LICENSE-2.0\n",
+ "\n",
+ " Unless required by applicable law or agreed to in writing,\n",
+ " software distributed under the License is distributed on an\n",
+ " \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n",
+ " KIND, either express or implied. See the License for the\n",
+ " specific language governing permissions and limitations\n",
+ " under the License.\n",
+ "-->\n",
+ "\n",
+ "# SedonaDB Overture Examples\n",
+ "\n",
+ "This notebook shows how to query the Overture data with SedonaDB!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "6d6fa0ab-b4ed-4e60-b099-a1af0998b486",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import sedona.db\n",
+ "import os\n",
+ "\n",
+ "os.environ[\"AWS_SKIP_SIGNATURE\"] = \"true\"\n",
+ "os.environ[\"AWS_DEFAULT_REGION\"] = \"us-west-2\"\n",
+ "\n",
+ "sd = sedona.db.connect()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4f44adfb-2973-4a65-b4f2-d24b28700b79",
+ "metadata": {},
+ "source": [
+ "## Overture buildings table"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "52855769-4872-472a-9c42-afced3d85ca8",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df = sd.read_parquet(\n",
+ " \"s3://overturemaps-us-west-2/release/2025-08-20.0/theme=buildings/type=building/\"\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "b45b5e5c-64ed-49ba-a8aa-9f2292f617c6",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "┌──────────────────────────────────────┬─────────────────────────────────────────┬───┬─────────────┐\n",
+ "│ id ┆ geometry ┆ … ┆ roof_height │\n",
+ "│ utf8view ┆ wkb_view <ogc:crs84> ┆ ┆ float64 │\n",
+ "╞══════════════════════════════════════╪═════════════════════════════════════════╪═══╪═════════════╡\n",
+ "│ 06533301-f2ec-42e0-8138-732ac25a7497 ┆ POLYGON((-58.4757066 -34.7389169,-58.4… ┆ … ┆ │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ cc0c048c-088d-4cb3-9982-3961edfdf416 ┆ POLYGON((-58.4755777 -34.7389131,-58.4… ┆ … ┆ │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ e52a0dbc-fb93-40e2-b1df-03626855299c ┆ POLYGON((-58.4754112 -34.7394253,-58.4… ┆ … ┆ │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ 28526977-9920-4cec-9840-5dd409a7cded ┆ POLYGON((-58.4752088 -34.7394754,-58.4… ┆ … ┆ │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ 0bc4c042-52ea-4ae7-9200-56221805fa2f ┆ POLYGON((-58.475273 -34.7394421,-58.47… ┆ … ┆ │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ c21dfee1-f5d9-4e0a-91cf-796f117518d4 ┆ POLYGON((-58.4750977 -34.7394357,-58.4… ┆ … ┆ │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ 3fe5efdd-1739-4088-8c8e-6f7f1b7cfcfe ┆ POLYGON((-58.4751684 -34.7394288,-58.4… ┆ … ┆ │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ c144becc-fc8a-4bbc-aeef-359ac56a925a ┆ POLYGON((-58.4751787 -34.739396,-58.47… ┆ … ┆ │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ 79d6c10a-2ff2-429d-a0e7-6eefc8939d14 ┆ POLYGON((-58.4753719 -34.7393189,-58.4… ┆ … ┆ │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ c1664c2d-2c0f-44c4-af08-58176e360613 ┆ POLYGON((-58.4753269 -34.7391919,-58.4… ┆ … ┆ │\n",
+ "└──────────────────────────────────────┴─────────────────────────────────────────┴───┴─────────────┘\n"
+ ]
+ }
+ ],
+ "source": [
+ "df.limit(10).show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "e37a023e-0e80-403a-a65b-b5a190004f72",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df.to_view(\"buildings\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "ebfe4776-e08f-4f38-97fc-fca8ec6fc364",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "┌────────────┐\n",
+ "│ count(*) │\n",
+ "│ int64 │\n",
+ "╞════════════╡\n",
+ "│ 2539170484 │\n",
+ "└────────────┘\n"
+ ]
+ }
+ ],
+ "source": [
+ "# the buildings table is large and contains millions of rows\n",
+ "sd.sql(\"\"\"\n",
+ "SELECT\n",
+ " COUNT(*)\n",
+ "FROM\n",
+ " buildings\n",
+ "\"\"\").show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "b73f670d-0d10-4a7a-bfc7-e2abe5d9edd2",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "SedonaSchema with 24 fields:\n",
+ " id: Utf8View\n",
+ " geometry: wkb_view <ogc:crs84>\n",
+ " bbox: Struct(xmin Float32, xmax Float32, ymin Float32, ymax Float32)\n",
+ " version: Int32\n",
+ " sources: List(Field { name: \"element\", data_type: Struct([Field { name: \"property\", data_type: Utf8, nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }, Field { name: \"dataset\", data_type: Utf8, nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }, Field { name: \"record_id\", data_type: Utf8, nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }, Field { name: \"update_time\", data_type: Utf8, nullable: true, dict_id: 0, dict_is [...]
+ " level: Int32\n",
+ " subtype: Utf8View\n",
+ " class: Utf8View\n",
+ " height: Float64\n",
+ " names: Struct(primary Utf8, common Map(Field { name: \"key_value\", data_type: Struct([Field { name: \"key\", data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }, Field { name: \"value\", data_type: Utf8, nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }]), nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }, false), rules List(Field { name: \"element\", data_type: Struct([Field { name: \"variant\", data_type: Ut [...]
+ " has_parts: Boolean\n",
+ " is_underground: Boolean\n",
+ " num_floors: Int32\n",
+ " num_floors_underground: Int32\n",
+ " min_height: Float64\n",
+ " min_floor: Int32\n",
+ " facade_color: Utf8View\n",
+ " facade_material: Utf8View\n",
+ " roof_material: Utf8View\n",
+ " roof_shape: Utf8View\n",
+ " roof_direction: Float64\n",
+ " roof_orientation: Utf8View\n",
+ " roof_color: Utf8View\n",
+ " roof_height: Float64"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# check out the schema of the buildings table to see what it contains\n",
+ "df.schema"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "id": "68d1b68c-dd26-45c2-944f-61138b212943",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "┌─────────────────────────┬────────────────────┬────────────┬────────────┬─────────────────────────┐\n",
+ "│ id ┆ height ┆ num_floors ┆ roof_shape ┆ centroid │\n",
+ "│ utf8view ┆ float64 ┆ int32 ┆ utf8view ┆ wkb <ogc:crs84> │\n",
+ "╞═════════════════════════╪════════════════════╪════════════╪════════════╪═════════════════════════╡\n",
+ "│ 1b9040c2-2e79-4f56-aba… ┆ 22.4 ┆ ┆ ┆ POINT(-74.230407502993… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ 1b5e1cd2-d697-489e-892… ┆ 21.5 ┆ ┆ ┆ POINT(-74.231451103592… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ c1afdf78-bf84-4b8f-ae1… ┆ 20.9 ┆ ┆ ┆ POINT(-74.232593032240… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ 88f36399-b09f-491b-bb6… ┆ 24.5 ┆ ┆ ┆ POINT(-74.231878209597… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ df37a283-f5bd-4822-a05… ┆ 24.154542922973633 ┆ ┆ ┆ POINT(-74.241910239840… │\n",
+ "└─────────────────────────┴────────────────────┴────────────┴────────────┴─────────────────────────┘\n"
+ ]
+ }
+ ],
+ "source": [
+ "# find all the buildings in New York city that are taller than 20 meters\n",
+ "nyc_bbox_wkt = \"POLYGON((-74.2591 40.4774, -74.2591 40.9176, -73.7004 40.9176, -73.7004 40.4774, -74.2591 40.4774))\"\n",
+ "sd.sql(f\"\"\"\n",
+ "SELECT\n",
+ " id,\n",
+ " height,\n",
+ " num_floors,\n",
+ " roof_shape,\n",
+ " ST_Centroid(geometry) as centroid\n",
+ "FROM\n",
+ " buildings\n",
+ "WHERE\n",
+ " is_underground = FALSE\n",
+ " AND height IS NOT NULL\n",
+ " AND height > 20\n",
+ " AND ST_Intersects(geometry, ST_SetSRID(ST_GeomFromText('{nyc_bbox_wkt}'), 4326))\n",
+ "LIMIT 5;\n",
+ "\"\"\").show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e07fcdc1-962b-4dce-90cb-bf715432e299",
+ "metadata": {},
+ "source": [
+ "## Overture divisions table"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "d9f122d3-4d90-46b0-ab9a-259a71cc423b",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df = sd.read_parquet(\n",
+ " \"s3://overturemaps-us-west-2/release/2025-08-20.0/theme=divisions/type=division_area/\"\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "id": "19a75b19-0b56-4167-b3f1-73a171ecc480",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "┌────────────────┬────────────────┬────────────────┬───┬────────────────┬──────────┬───────────────┐\n",
+ "│ id ┆ geometry ┆ bbox ┆ … ┆ is_territorial ┆ region ┆ division_id │\n",
+ "│ utf8view ┆ wkb_view <ogc… ┆ struct(xmin f… ┆ ┆ boolean ┆ utf8view ┆ utf8view │\n",
+ "╞════════════════╪════════════════╪════════════════╪═══╪════════════════╪══════════╪═══════════════╡\n",
+ "│ 61912ffd-060b… ┆ POLYGON((23.3… ┆ {xmin: 22.735… ┆ … ┆ true ┆ ZA-EC ┆ 2711d6ca-ac1… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ 7647b992-e0d6… ┆ POLYGON((26.5… ┆ {xmin: 26.521… ┆ … ┆ true ┆ ZA-EC ┆ 0e8a08eb-6f2… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ 4058785b-82c9… ┆ MULTIPOLYGON(… ┆ {xmin: 22.735… ┆ … ┆ false ┆ ZA-EC ┆ 2711d6ca-ac1… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ cd9389b7-3451… ┆ POLYGON((26.5… ┆ {xmin: 26.373… ┆ … ┆ true ┆ ZA-EC ┆ 9d59ea5e-408… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ a60ae908-e6fa… ┆ POLYGON((26.6… ┆ {xmin: 26.541… ┆ … ┆ true ┆ ZA-EC ┆ f49ef082-3c2… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ fd070cbb-4aaa… ┆ POLYGON((26.1… ┆ {xmin: 26.084… ┆ … ┆ true ┆ ZA-EC ┆ 513b5a9c-c29… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ 70479601-dc12… ┆ POLYGON((26.4… ┆ {xmin: 26.222… ┆ … ┆ true ┆ ZA-EC ┆ 2ade34e5-955… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ 3a294b23-f674… ┆ POLYGON((24.5… ┆ {xmin: 24.503… ┆ … ┆ true ┆ ZA-EC ┆ 4f63d19f-2ca… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ 48b3e344-10a4… ┆ POLYGON((26.6… ┆ {xmin: 26.557… ┆ … ┆ true ┆ ZA-EC ┆ 20d890bb-1a4… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ 92e71cf6-fa94… ┆ POLYGON((25.8… ┆ {xmin: 25.799… ┆ … ┆ true ┆ ZA-EC ┆ 4202ec06-188… │\n",
+ "└────────────────┴────────────────┴────────────────┴───┴────────────────┴──────────┴───────────────┘\n"
+ ]
+ }
+ ],
+ "source": [
+ "# take a look at a few rows of data\n",
+ "df.show(10)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "id": "03b951de-3397-4fcf-9baf-50e139a38dd4",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df.to_view(\"division_area\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "9c6bd69d-9407-432a-bdc8-d60976237a3a",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "┌──────────┐\n",
+ "│ count(*) │\n",
+ "│ int64 │\n",
+ "╞══════════╡\n",
+ "│ 1035749 │\n",
+ "└──────────┘\n"
+ ]
+ }
+ ],
+ "source": [
+ "sd.sql(\"\"\"\n",
+ "SELECT\n",
+ " COUNT(*)\n",
+ "FROM division_area\n",
+ "\"\"\").show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "75a6d0ed-9767-4d36-a77a-4afb7952fbe4",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "SedonaSchema with 13 fields:\n",
+ " id: Utf8View\n",
+ " geometry: wkb_view <ogc:crs84>\n",
+ " bbox: Struct(xmin Float32, xmax Float32, ymin Float32, ymax Float32)\n",
+ " country: Utf8View\n",
+ " version: Int32\n",
+ " sources: List(Field { name: \"element\", data_type: Struct([Field { name: \"property\", data_type: Utf8, nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }, Field { name: \"dataset\", data_type: Utf8, nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }, Field { name: \"record_id\", data_type: Utf8, nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }, Field { name: \"update_time\", data_type: Utf8, nullable: true, dict_id: 0, dict_is [...]
+ " subtype: Utf8View\n",
+ " class: Utf8View\n",
+ " names: Struct(primary Utf8, common Map(Field { name: \"key_value\", data_type: Struct([Field { name: \"key\", data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }, Field { name: \"value\", data_type: Utf8, nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }]), nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }, false), rules List(Field { name: \"element\", data_type: Struct([Field { name: \"variant\", data_type: Ut [...]
+ " is_land: Boolean\n",
+ " is_territorial: Boolean\n",
+ " region: Utf8View\n",
+ " division_id: Utf8View"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.schema"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "f1f7158c-ef2b-4377-9bee-180309ddd553",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# get all the divisions in Nova Scotia and save them in memory with to_memtable()\n",
+ "nova_scotia_bbox_wkt = (\n",
+ " \"POLYGON((-66.5 43.4, -66.5 47.1, -59.8 47.1, -59.8 43.4, -66.5 43.4))\"\n",
+ ")\n",
+ "ns = sd.sql(f\"\"\"\n",
+ "SELECT\n",
+ " country, region, names, geometry\n",
+ "FROM division_area\n",
+ "WHERE\n",
+ " ST_Intersects(geometry, ST_SetSRID(ST_GeomFromText('{nova_scotia_bbox_wkt}'), 4326))\n",
+ "\"\"\").to_memtable()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "27e6909d-06fa-438b-88e0-d300fd2fb1ec",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "ns.to_view(\"ns_divisions\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "id": "2dec92d8-a374-4021-990a-e50f5769516e",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df = sd.sql(\"\"\"\n",
+ "SELECT UNNEST(names), geometry\n",
+ "FROM ns_divisions\n",
+ "WHERE region = 'CA-NS'\n",
+ "\"\"\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "id": "7f39a283-0eee-4f72-a30a-8dd9fa1aaa69",
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "┌────────────────────────┬────────────────────────┬────────────────────────┬───────────────────────┐\n",
+ "│ __unnest_placeholder(n ┆ __unnest_placeholder(n ┆ __unnest_placeholder(n ┆ geometry │\n",
+ "│ s_divisions.names).pr… ┆ s_divisions.names).co… ┆ s_divisions.names).ru… ┆ wkb_view <ogc:crs84> │\n",
+ "╞════════════════════════╪════════════════════════╪════════════════════════╪═══════════════════════╡\n",
+ "│ Seal Island ┆ ┆ ┆ POLYGON((-66.0528452… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Mud Island ┆ ┆ ┆ POLYGON((-66.0222822… │\n",
+ "└────────────────────────┴────────────────────────┴────────────────────────┴───────────────────────┘\n",
+ "CPU times: user 8.75 ms, sys: 2.41 ms, total: 11.2 ms\n",
+ "Wall time: 8.47 ms\n"
+ ]
+ }
+ ],
+ "source": [
+ "%%time\n",
+ "# this executes quickly because the Nova Scotia data was persisted in memory with to_memtable()\n",
+ "df.show(2)"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.12.8"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/0.1.0/overture-examples/index.html b/0.1.0/overture-examples/index.html
index c92de65..6dcc7be 100644
--- a/0.1.0/overture-examples/index.html
+++ b/0.1.0/overture-examples/index.html
@@ -7,15 +7,21 @@
+ <link rel="canonical" href="https://sedona.apache.org/sedonadb/latest/overture-examples/">
+ <link rel="prev" href="../geopandas-interop/">
+
+
+ <link rel="next" href="../working-with-parquet-files/">
+
<link rel="icon" href="../image/sedona_logo_symbol.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.20">
- <title>SedonaDB Overture Examples - SedonaDB</title>
+ <title>Working with Overture - SedonaDB</title>
@@ -102,7 +108,7 @@
<nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="SedonaDB" class="md-header__button md-logo" aria-label="SedonaDB" data-md-component="logo">
- <img src="../image/sedona_logo_symbol_white.svg" alt="logo">
+ <img src="../image/sedona_logo_symbol.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
@@ -119,7 +125,7 @@
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
- SedonaDB Overture Examples
+ Working with Overture
</span>
</div>
@@ -211,7 +217,7 @@
- Home
+ SedonaDB
</a>
</li>
@@ -223,9 +229,30 @@
+ <li class="md-tabs__item">
+ <a href="../quickstart-python/" class="md-tabs__link">
+
+
+
+
+ Python Quickstart
+
+ </a>
+ </li>
+
+
+
+
+
+
+
- <li class="md-tabs__item">
+
+
+
+
+ <li class="md-tabs__item md-tabs__item--active">
<a href="../programming-guide/" class="md-tabs__link">
@@ -292,6 +319,25 @@
+ <li class="md-tabs__item">
+ <a href="https://sedona.apache.org/latest/community/contact/" class="md-tabs__link">
+
+
+
+
+
+ Community
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
<li class="md-tabs__item">
<a href="https://sedona.apache.org/latest/asf/asf/" class="md-tabs__link">
@@ -318,7 +364,7 @@
- Return to Sedona Homepage
+ Sedona Homepage
</a>
</li>
@@ -355,7 +401,7 @@
<label class="md-nav__title" for="__drawer">
<a href=".." title="SedonaDB" class="md-nav__button md-logo" aria-label="SedonaDB" data-md-component="logo">
- <img src="../image/sedona_logo_symbol_white.svg" alt="logo">
+ <img src="../image/sedona_logo_symbol.png" alt="logo">
</a>
SedonaDB
@@ -387,7 +433,29 @@
<span class="md-ellipsis">
- Home
+ SedonaDB
+
+ </span>
+
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../quickstart-python/" class="md-nav__link">
+
+
+
+ <span class="md-ellipsis">
+ Python Quickstart
</span>
@@ -401,6 +469,8 @@
+
+
@@ -408,19 +478,22 @@
+
+
+
- <li class="md-nav__item md-nav__item--nested">
+ <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2">
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" checked>
- <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
+ <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="">
@@ -433,8 +506,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
- <label class="md-nav__title" for="__nav_2">
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="true">
+ <label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
SedonaDB Guides
</label>
@@ -452,7 +525,7 @@
<span class="md-ellipsis">
- SedonaDB Guide
+ Working with Vector Data
</span>
@@ -470,12 +543,12 @@
<li class="md-nav__item">
- <a href="../quickstart-cli/" class="md-nav__link">
+ <a href="../geopandas-interop/" class="md-nav__link">
<span class="md-ellipsis">
- CLI Quickstart
+ Working with GeoPandas
</span>
@@ -490,15 +563,98 @@
+
+
+
+
+ <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">
+ Working with Overture
+
+ </span>
+
+
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <a href="./" class="md-nav__link md-nav__link--active">
+
+
+
+ <span class="md-ellipsis">
+ Working with Overture
+
+ </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="#overture-buildings-table" class="md-nav__link">
+ <span class="md-ellipsis">
+ Overture buildings table
+ </span>
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#overture-divisions-table" class="md-nav__link">
+ <span class="md-ellipsis">
+ Overture divisions table
+ </span>
+ </a>
+
+</li>
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
+
+
+
+
+
+
<li class="md-nav__item">
- <a href="../quickstart-python/" class="md-nav__link">
+ <a href="../working-with-parquet-files/" class="md-nav__link">
<span class="md-ellipsis">
- Python Quickstart
+ Working with Parquet Files
</span>
@@ -516,12 +672,12 @@
<li class="md-nav__item">
- <a href="../development/" class="md-nav__link">
+ <a href="../contributors-guide/" class="md-nav__link">
<span class="md-ellipsis">
- Development
+ Contributors Guide
</span>
@@ -559,10 +715,10 @@
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3">
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4">
- <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
+ <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
@@ -575,8 +731,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
- <label class="md-nav__title" for="__nav_3">
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
SedonaDB Reference
</label>
@@ -602,10 +758,10 @@
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_1">
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_1">
- <label class="md-nav__link" for="__nav_3_1" id="__nav_3_1_label" tabindex="0">
+ <label class="md-nav__link" for="__nav_4_1" id="__nav_4_1_label" tabindex="0">
@@ -618,8 +774,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_1_label" aria-expanded="false">
- <label class="md-nav__title" for="__nav_3_1">
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_1_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4_1">
<span class="md-nav__icon md-icon"></span>
Python
</label>
@@ -676,10 +832,10 @@
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2">
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_2">
- <label class="md-nav__link" for="__nav_3_2" id="__nav_3_2_label" tabindex="0">
+ <label class="md-nav__link" for="__nav_4_2" id="__nav_4_2_label" tabindex="0">
@@ -692,8 +848,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_2_label" aria-expanded="false">
- <label class="md-nav__title" for="__nav_3_2">
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_2_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4_2">
<span class="md-nav__icon md-icon"></span>
SQL
</label>
@@ -745,19 +901,34 @@
+ </ul>
+ </nav>
+
+ </li>
+
+
-
+
+ </ul>
+ </nav>
+
+ </li>
+
+
+
+
+
<li class="md-nav__item">
- <a href="../reference/read-parquet-files/" class="md-nav__link">
+ <a href="https://sedona.apache.org/latest/blog/" class="md-nav__link">
<span class="md-ellipsis">
- Read Parquet Files
+ Blog
</span>
@@ -766,22 +937,6 @@
</li>
-
-
- </ul>
- </nav>
-
- </li>
-
-
-
-
- </ul>
- </nav>
-
- </li>
-
-
@@ -790,12 +945,12 @@
<li class="md-nav__item">
- <a href="https://sedona.apache.org/latest/blog/" class="md-nav__link">
+ <a href="https://sedona.apache.org/latest/community/contact/" class="md-nav__link">
<span class="md-ellipsis">
- Blog
+ Community
</span>
@@ -839,7 +994,7 @@
<span class="md-ellipsis">
- Return to Sedona Homepage
+ Sedona Homepage
</span>
@@ -909,7 +1064,7 @@
- <a href="https://github.com/apache/sedona-db/edit/master/docs/overture-examples.ipynb" title="Edit this page" class="md-content__button md-icon" rel="edit">
+ <a href="https://github.com/apache/sedona-db/blob/main/docs/overture-examples.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"></path></svg>
</a>
@@ -917,567 +1072,41 @@
-<script>
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, global.ClipboardCopyElement = factory());
- }(this, function () { 'use strict';
-
- function createNode(text) {
- const node = document.createElement('pre');
- node.style.width = '1px';
- node.style.height = '1px';
- node.style.position = 'fixed';
- node.style.top = '5px';
- node.textContent = text;
- return node;
- }
-
- function copyNode(node) {
- if ('clipboard' in navigator) {
- // eslint-disable-next-line flowtype/no-flow-fix-me-comments
- // $FlowFixMe Clipboard is not defined in Flow yet.
- return navigator.clipboard.writeText(node.textContent);
- }
-
- const selection = getSelection();
-
- if (selection == null) {
- return Promise.reject(new Error());
- }
-
- selection.removeAllRanges();
- const range = document.createRange();
- range.selectNodeContents(node);
- selection.addRange(range);
- document.execCommand('copy');
- selection.removeAllRanges();
- return Promise.resolve();
- }
- function copyText(text) {
- if ('clipboard' in navigator) {
- // eslint-disable-next-line flowtype/no-flow-fix-me-comments
- // $FlowFixMe Clipboard is not defined in Flow yet.
- return navigator.clipboard.writeText(text);
- }
-
- const body = document.body;
-
- if (!body) {
- return Promise.reject(new Error());
- }
-
- const node = createNode(text);
- body.appendChild(node);
- copyNode(node);
- body.removeChild(node);
- return Promise.resolve();
- }
-
- function copy(button) {
- const id = button.getAttribute('for');
- const text = button.getAttribute('value');
-
- function trigger() {
- button.dispatchEvent(new CustomEvent('clipboard-copy', {
- bubbles: true
- }));
- }
-
- if (text) {
- copyText(text).then(trigger);
- } else if (id) {
- const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument;
- if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return;
- const node = root.getElementById(id);
- if (node) copyTarget(node).then(trigger);
- }
- }
-
- function copyTarget(content) {
- if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) {
- return copyText(content.value);
- } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) {
- return copyText(content.href);
- } else {
- return copyNode(content);
- }
- }
-
- function clicked(event) {
- const button = event.currentTarget;
-
- if (button instanceof HTMLElement) {
- copy(button);
- }
- }
-
- function keydown(event) {
- if (event.key === ' ' || event.key === 'Enter') {
- const button = event.currentTarget;
-
- if (button instanceof HTMLElement) {
- event.preventDefault();
- copy(button);
- }
- }
- }
-
- function focused(event) {
- event.currentTarget.addEventListener('keydown', keydown);
- }
-
- function blurred(event) {
- event.currentTarget.removeEventListener('keydown', keydown);
- }
-
- class ClipboardCopyElement extends HTMLElement {
- constructor() {
- super();
- this.addEventListener('click', clicked);
- this.addEventListener('focus', focused);
- this.addEventListener('blur', blurred);
- }
-
- connectedCallback() {
- if (!this.hasAttribute('tabindex')) {
- this.setAttribute('tabindex', '0');
- }
-
- if (!this.hasAttribute('role')) {
- this.setAttribute('role', 'button');
- }
- }
-
- get value() {
- return this.getAttribute('value') || '';
- }
-
- set value(text) {
- this.setAttribute('value', text);
- }
-
- }
-
- if (!window.customElements.get('clipboard-copy')) {
- window.ClipboardCopyElement = ClipboardCopyElement;
- window.customElements.define('clipboard-copy', ClipboardCopyElement);
- }
-
- return ClipboardCopyElement;
-
- }));
-</script>
-<script>
- document.addEventListener('clipboard-copy', function(event) {
- const notice = event.target.querySelector('.notice')
- notice.hidden = false
- setTimeout(function() {
- notice.hidden = true
- }, 1000)
- })
-</script>
-<style type="text/css">
- pre { line-height: 125%; }
-td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
-span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
-td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
-span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
-.highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) }
-.highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) }
-.highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */
-.highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */
-.highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */
-.highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */
-.highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */
-.highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */
-.highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */
-.highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */
-.highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */
-.highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */
-.highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */
-.highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */
-.highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */
-.highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */
-.highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */
-.highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */
-.highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */
-.highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */
-.highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */
-.highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */
-.highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */
-.highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */
-.highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */
-.highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */
-.highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */
-.highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */
-.highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */
-.highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */
-.highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */
-.highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */
-.highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */
-.highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */
-.highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */
-.highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */
-.highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */
-.highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */
-.highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */
-.highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */
-.highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */
-.highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */
-.highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */
- </style>
-<style type="text/css">
-@charset "UTF-8";.jupyter-wrapper{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink- [...]
-</style>
-<style type="text/css">
-.jupyter-wrapper{--jp-shadow-base-lightness: 0;--jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), .2 );--jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), .14 );--jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), .12 );--jp-elevation-z0: none;--jp-elev [...]
-</style>
-<!-- Load mathjax -->
-<script src=""> </script>
-<!-- MathJax configuration -->
-<script type="text/x-mathjax-config">
- init_mathjax = function() {
- if (window.MathJax) {
- // MathJax loaded
- MathJax.Hub.Config({
- TeX: {
- equationNumbers: {
- autoNumber: "AMS",
- useLabelIds: true
- }
- },
- tex2jax: {
- inlineMath: [ ['$','$'], ["\\(","\\)"] ],
- displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
- processEscapes: true,
- processEnvironments: true
- },
- displayAlign: 'center',
- messageStyle: 'none',
- CommonHTML: {
- linebreaks: {
- automatic: true
- }
- }
- });
-
- MathJax.Hub.Queue(["Typeset", MathJax.Hub]);
- }
- }
- init_mathjax();
- </script>
-<!-- End of mathjax configuration --><script type="module">
- document.addEventListener("DOMContentLoaded", async () => {
- const diagrams = document.querySelectorAll(".jp-Mermaid > pre.mermaid");
- // do not load mermaidjs if not needed
- if (!diagrams.length) {
- return;
- }
- const mermaid = (await import("https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.7.0/mermaid.esm.min.mjs")).default;
- const parser = new DOMParser();
-
- mermaid.initialize({
- maxTextSize: 100000,
- maxEdges: 100000,
- startOnLoad: false,
- fontFamily: window
- .getComputedStyle(document.body)
- .getPropertyValue("--jp-ui-font-family"),
- theme: document.querySelector("body[data-jp-theme-light='true']")
- ? "default"
- : "dark",
- });
-
- let _nextMermaidId = 0;
-
- function makeMermaidImage(svg) {
- const img = document.createElement("img");
- const doc = parser.parseFromString(svg, "image/svg+xml");
- const svgEl = doc.querySelector("svg");
- const { maxWidth } = svgEl?.style || {};
- const firstTitle = doc.querySelector("title");
- const firstDesc = doc.querySelector("desc");
-
- img.setAttribute("src", `data:image/svg+xml,${encodeURIComponent(svg)}`);
- if (maxWidth) {
- img.width = parseInt(maxWidth);
- }
- if (firstTitle) {
- img.setAttribute("alt", firstTitle.textContent);
- }
- if (firstDesc) {
- const caption = document.createElement("figcaption");
- caption.className = "sr-only";
- caption.textContent = firstDesc.textContent;
- return [img, caption];
- }
- return [img];
- }
-
- async function makeMermaidError(text) {
- let errorMessage = "";
- try {
- await mermaid.parse(text);
- } catch (err) {
- errorMessage = `${err}`;
- }
-
- const result = document.createElement("details");
- result.className = 'jp-RenderedMermaid-Details';
- const summary = document.createElement("summary");
- summary.className = 'jp-RenderedMermaid-Summary';
- const pre = document.createElement("pre");
- const code = document.createElement("code");
- code.innerText = text;
- pre.appendChild(code);
- summary.appendChild(pre);
- result.appendChild(summary);
-
- const warning = document.createElement("pre");
- warning.innerText = errorMessage;
- result.appendChild(warning);
- return [result];
- }
-
- async function renderOneMarmaid(src) {
- const id = `jp-mermaid-${_nextMermaidId++}`;
- const parent = src.parentNode;
- let raw = src.textContent.trim();
- const el = document.createElement("div");
- el.style.visibility = "hidden";
- document.body.appendChild(el);
- let results = null;
- let output = null;
- try {
- let { svg } = await mermaid.render(id, raw, el);
- svg = cleanMermaidSvg(svg);
- results = makeMermaidImage(svg);
- output = document.createElement("figure");
- results.map(output.appendChild, output);
- } catch (err) {
- parent.classList.add("jp-mod-warning");
- results = await makeMermaidError(raw);
- output = results[0];
- } finally {
- el.remove();
- }
- parent.classList.add("jp-RenderedMermaid");
- parent.appendChild(output);
- }
-
-
- /**
- * Post-process to ensure mermaid diagrams contain only valid SVG and XHTML.
- */
- function cleanMermaidSvg(svg) {
- return svg.replace(RE_VOID_ELEMENT, replaceVoidElement);
- }
-
-
- /**
- * A regular expression for all void elements, which may include attributes and
- * a slash.
- *
- * @see https://developer.mozilla.org/en-US/docs/Glossary/Void_element
- *
- * Of these, only `<br>` is generated by Mermaid in place of `\n`,
- * but _any_ "malformed" tag will break the SVG rendering entirely.
- */
- const RE_VOID_ELEMENT =
- /<\s*(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)\s*([^>]*?)\s*>/gi;
-
- /**
- * Ensure a void element is closed with a slash, preserving any attributes.
- */
- function replaceVoidElement(match, tag, rest) {
- rest = rest.trim();
- if (!rest.endsWith('/')) {
- rest = `${rest} /`;
- }
- return `<${tag} ${rest}>`;
- }
-
- void Promise.all([...diagrams].map(renderOneMarmaid));
- });
-</script>
-<style>
- .jp-Mermaid:not(.jp-RenderedMermaid) {
- display: none;
- }
-
- .jp-RenderedMermaid {
- overflow: auto;
- display: flex;
- }
-
- .jp-RenderedMermaid.jp-mod-warning {
- width: auto;
- padding: 0.5em;
- margin-top: 0.5em;
- border: var(--jp-border-width) solid var(--jp-warn-color2);
- border-radius: var(--jp-border-radius);
- color: var(--jp-ui-font-color1);
- font-size: var(--jp-ui-font-size1);
- white-space: pre-wrap;
- word-wrap: break-word;
- }
-
- .jp-RenderedMermaid figure {
- margin: 0;
- overflow: auto;
- max-width: 100%;
- }
-
- .jp-RenderedMermaid img {
- max-width: 100%;
- }
-
- .jp-RenderedMermaid-Details > pre {
- margin-top: 1em;
- }
-
- .jp-RenderedMermaid-Summary {
- color: var(--jp-warn-color2);
- }
-
- .jp-RenderedMermaid:not(.jp-mod-warning) pre {
- display: none;
- }
-
- .jp-RenderedMermaid-Summary > pre {
- display: inline-block;
- white-space: normal;
- }
-</style>
-<!-- End of mermaid configuration --><div class="jupyter-wrapper">
-<div class="jp-Notebook" data-jp-theme-light="true" data-jp-theme-name="JupyterLab Light">
-<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=8239e8eb-724c-44df-b651-c2dd02f1d96c">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
-</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
-<h1 id="sedonadb-overture-examples">SedonaDB Overture Examples<a class="anchor-link" href="#sedonadb-overture-examples">¶</a></h1><p>This notebook shows how to query the Overture data with SedonaDB!</p>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=6d6fa0ab-b4ed-4e60-b099-a1af0998b486">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-1">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">sedona.db</span>
+<!---
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+--><h1 id="sedonadb-overture-examples">SedonaDB Overture Examples<a class="headerlink" href="#sedonadb-overture-examples" title="Permanent link">¶</a></h1>
+<p>This notebook shows how to query the Overture data with SedonaDB!</p>
+<div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">sedona.db</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">os</span>
<span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s2">"AWS_SKIP_SIGNATURE"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"true"</span>
<span class="n">os</span><span class="o">.</span><span class="n">environ</span><span class="p">[</span><span class="s2">"AWS_DEFAULT_REGION"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"us-west-2"</span>
<span class="n">sd</span> <span class="o">=</span> <span class="n">sedona</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">connect</span><span class="p">()</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-1">import sedona.db
-import os
-
-os.environ["AWS_SKIP_SIGNATURE"] = "true"
-os.environ["AWS_DEFAULT_REGION"] = "us-west-2"
-
-sd = sedona.db.connect()</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=4f44adfb-2973-4a65-b4f2-d24b28700b79">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
-</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
-<h2 id="overture-buildings-table">Overture buildings table<a class="anchor-link" href="#overture-buildings-table">¶</a></h2>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=52855769-4872-472a-9c42-afced3d85ca8">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [7]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-2">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="n">df</span> <span class="o">=</span> <span class="n">sd</span><span class="o">.</span><span class="n">read_parquet</span><span class="p">(</span>
+</code></pre></div>
+<h2 id="overture-buildings-table">Overture buildings table<a class="headerlink" href="#overture-buildings-table" title="Permanent link">¶</a></h2>
+<div class="highlight"><pre><span></span><code><span class="n">df</span> <span class="o">=</span> <span class="n">sd</span><span class="o">.</span><span class="n">read_parquet</span><span class="p">(</span>
<span class="s2">"s3://overturemaps-us-west-2/release/2025-08-20.0/theme=buildings/type=building/"</span>
<span class="p">)</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-2">df = sd.read_parquet(
- "s3://overturemaps-us-west-2/release/2025-08-20.0/theme=buildings/type=building/"
-)</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=b45b5e5c-64ed-49ba-a8aa-9f2292f617c6">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [8]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-3">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="n">df</span><span class="o">.</span><span class="n">limit</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-3">df.limit(10).show()</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell-outputWrapper">
-<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
-</div>
-<div class="jp-OutputArea jp-Cell-outputArea">
-<div class="jp-OutputArea-child">
-<div class="jp-OutputPrompt jp-OutputArea-prompt"></div>
-<div class="jp-RenderedText jp-OutputArea-output" data-mime-type="text/plain" tabindex="0">
-<pre>┌──────────────────────────────────────┬─────────────────────────────────────────┬───┬─────────────┐
+</code></pre></div>
+<div class="highlight"><pre><span></span><code><span class="n">df</span><span class="o">.</span><span class="n">limit</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
+</code></pre></div>
+<div class="codehilite"><pre><span></span><code>┌──────────────────────────────────────┬─────────────────────────────────────────┬───┬─────────────┐
│ id ┆ geometry ┆ … ┆ roof_height │
│ utf8view ┆ wkb_view <ogc:crs84> ┆ ┆ float64 │
╞══════════════════════════════════════╪═════════════════════════════════════════╪═══╪═════════════╡
@@ -1501,181 +1130,57 @@ sd = sedona.db.connect()</div>
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ c1664c2d-2c0f-44c4-af08-58176e360613 ┆ POLYGON((-58.4753269 -34.7391919,-58.4… ┆ … ┆ │
└──────────────────────────────────────┴─────────────────────────────────────────┴───┴─────────────┘
-</pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=e37a023e-0e80-403a-a65b-b5a190004f72">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [9]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-4">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="n">df</span><span class="o">.</span><span class="n">to_view</span><span class="p">(</span><span class="s2">"buildings"</span><span class="p">)</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-4">df.to_view("buildings")</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=ebfe4776-e08f-4f38-97fc-fca8ec6fc364">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [10]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-5">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="c1"># the buildings table is large and contains millions of rows</span>
+</code></pre></div>
+
+<div class="highlight"><pre><span></span><code><span class="n">df</span><span class="o">.</span><span class="n">to_view</span><span class="p">(</span><span class="s2">"buildings"</span><span class="p">)</span>
+</code></pre></div>
+<div class="highlight"><pre><span></span><code><span class="c1"># the buildings table is large and contains millions of rows</span>
<span class="n">sd</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s2">"""</span>
<span class="s2">SELECT</span>
<span class="s2"> COUNT(*)</span>
<span class="s2">FROM</span>
<span class="s2"> buildings</span>
<span class="s2">"""</span><span class="p">)</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-5"># the buildings table is large and contains millions of rows
-sd.sql("""
-SELECT
- COUNT(*)
-FROM
- buildings
-""").show()</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell-outputWrapper">
-<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
-</div>
-<div class="jp-OutputArea jp-Cell-outputArea">
-<div class="jp-OutputArea-child">
-<div class="jp-OutputPrompt jp-OutputArea-prompt"></div>
-<div class="jp-RenderedText jp-OutputArea-output" data-mime-type="text/plain" tabindex="0">
-<pre>┌────────────┐
+</code></pre></div>
+<div class="codehilite"><pre><span></span><code>┌────────────┐
│ count(*) │
│ int64 │
╞════════════╡
│ 2539170484 │
└────────────┘
-</pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=b73f670d-0d10-4a7a-bfc7-e2abe5d9edd2">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [11]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-6">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="c1"># check out the schema of the buildings table to see what it contains</span>
+</code></pre></div>
+
+<div class="highlight"><pre><span></span><code><span class="c1"># check out the schema of the buildings table to see what it contains</span>
<span class="n">df</span><span class="o">.</span><span class="n">schema</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-6"># check out the schema of the buildings table to see what it contains
-df.schema</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell-outputWrapper">
-<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
-</div>
-<div class="jp-OutputArea jp-Cell-outputArea">
-<div class="jp-OutputArea-child jp-OutputArea-executeResult">
-<div class="jp-OutputPrompt jp-OutputArea-prompt">Out[11]:</div>
-<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain" tabindex="0">
-<pre>SedonaSchema with 24 fields:
- id: Utf8View
- geometry: wkb_view <ogc:crs84>
- bbox: Struct(xmin Float32, xmax Float32, ymin Float32, ymax Float32)
- version: Int32
- sources: List(Field { name: "element", data_type: Struct([Field { name: "property", data_type: Utf8, nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }, Field { name: "dataset", data_type: Utf8, nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }, Field { name: "record_id", data_type: Utf8, nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }, Field { name: "update_time", data_type: Utf8, nullable: true, dict_id: 0, dict_is_ordered: false, m [...]
- level: Int32
- subtype: Utf8View
- class: Utf8View
- height: Float64
- names: Struct(primary Utf8, common Map(Field { name: "key_value", data_type: Struct([Field { name: "key", data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }, Field { name: "value", data_type: Utf8, nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }]), nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }, false), rules List(Field { name: "element", data_type: Struct([Field { name: "variant", data_type: Utf8, nullable: true [...]
- has_parts: Boolean
- is_underground: Boolean
- num_floors: Int32
- num_floors_underground: Int32
- min_height: Float64
- min_floor: Int32
- facade_color: Utf8View
- facade_material: Utf8View
- roof_material: Utf8View
- roof_shape: Utf8View
- roof_direction: Float64
- roof_orientation: Utf8View
- roof_color: Utf8View
- roof_height: Float64</pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=68d1b68c-dd26-45c2-944f-61138b212943">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [12]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-7">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="c1"># find all the buildings in New York city that are taller than 20 meters</span>
+</code></pre></div>
+<div class="codehilite"><pre><span></span><code><span class="n">SedonaSchema</span><span class="w"> </span><span class="n">with</span><span class="w"> </span><span class="mi">24</span><span class="w"> </span><span class="n">fields</span><span class="p">:</span>
+<span class="w"> </span><span class="n">id</span><span class="p">:</span><span class="w"> </span><span class="n">Utf8View</span>
+<span class="w"> </span><span class="n">geometry</span><span class="p">:</span><span class="w"> </span><span class="n">wkb_view</span><span class="w"> </span><span class="o"><</span><span class="n">ogc</span><span class="p">:</span><span class="n">crs84</span><span class="o">></span>
+<span class="w"> </span><span class="n">bbox</span><span class="p">:</span><span class="w"> </span><span class="n">Struct</span><span class="p">(</span><span class="n">xmin</span><span class="w"> </span><span class="n">Float32</span><span class="p">,</span><span class="w"> </span><span class="n">xmax</span><span class="w"> </span><span class="n">Float32</span><span class="p">,</span><span class="w"> </span><span class="n">ymin</span><span class="w"> </span><span class="n">Float32</span> [...]
+<span class="w"> </span><span class="n">version</span><span class="p">:</span><span class="w"> </span><span class="n">Int32</span>
+<span class="w"> </span><span class="n">sources</span><span class="p">:</span><span class="w"> </span><span class="n">List</span><span class="p">(</span><span class="n">Field</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"element"</span><span class="p">,</span><span class="w"> </span><span class="n">data_type</span><span class="p">:</span><span class="w"> </span><s [...]
+<span class="w"> </span><span class="n">level</span><span class="p">:</span><span class="w"> </span><span class="n">Int32</span>
+<span class="w"> </span><span class="n">subtype</span><span class="p">:</span><span class="w"> </span><span class="n">Utf8View</span>
+<span class="w"> </span><span class="k">class</span><span class="p">:</span><span class="w"> </span><span class="n">Utf8View</span>
+<span class="w"> </span><span class="n">height</span><span class="p">:</span><span class="w"> </span><span class="n">Float64</span>
+<span class="w"> </span><span class="n">names</span><span class="p">:</span><span class="w"> </span><span class="n">Struct</span><span class="p">(</span><span class="n">primary</span><span class="w"> </span><span class="n">Utf8</span><span class="p">,</span><span class="w"> </span><span class="n">common</span><span class="w"> </span><span class="n">Map</span><span class="p">(</span><span class="n">Field</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span [...]
+<span class="w"> </span><span class="n">has_parts</span><span class="p">:</span><span class="w"> </span><span class="n">Boolean</span>
+<span class="w"> </span><span class="n">is_underground</span><span class="p">:</span><span class="w"> </span><span class="n">Boolean</span>
+<span class="w"> </span><span class="n">num_floors</span><span class="p">:</span><span class="w"> </span><span class="n">Int32</span>
+<span class="w"> </span><span class="n">num_floors_underground</span><span class="p">:</span><span class="w"> </span><span class="n">Int32</span>
+<span class="w"> </span><span class="n">min_height</span><span class="p">:</span><span class="w"> </span><span class="n">Float64</span>
+<span class="w"> </span><span class="n">min_floor</span><span class="p">:</span><span class="w"> </span><span class="n">Int32</span>
+<span class="w"> </span><span class="n">facade_color</span><span class="p">:</span><span class="w"> </span><span class="n">Utf8View</span>
+<span class="w"> </span><span class="n">facade_material</span><span class="p">:</span><span class="w"> </span><span class="n">Utf8View</span>
+<span class="w"> </span><span class="n">roof_material</span><span class="p">:</span><span class="w"> </span><span class="n">Utf8View</span>
+<span class="w"> </span><span class="n">roof_shape</span><span class="p">:</span><span class="w"> </span><span class="n">Utf8View</span>
+<span class="w"> </span><span class="n">roof_direction</span><span class="p">:</span><span class="w"> </span><span class="n">Float64</span>
+<span class="w"> </span><span class="n">roof_orientation</span><span class="p">:</span><span class="w"> </span><span class="n">Utf8View</span>
+<span class="w"> </span><span class="n">roof_color</span><span class="p">:</span><span class="w"> </span><span class="n">Utf8View</span>
+<span class="w"> </span><span class="n">roof_height</span><span class="p">:</span><span class="w"> </span><span class="n">Float64</span>
+</code></pre></div>
+
+<div class="highlight"><pre><span></span><code><span class="c1"># find all the buildings in New York city that are taller than 20 meters</span>
<span class="n">nyc_bbox_wkt</span> <span class="o">=</span> <span class="s2">"POLYGON((-74.2591 40.4774, -74.2591 40.9176, -73.7004 40.9176, -73.7004 40.4774, -74.2591 40.4774))"</span>
<span class="n">sd</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="sa">f</span><span class="s2">"""</span>
<span class="s2">SELECT</span>
@@ -1693,37 +1198,8 @@ df.schema</div>
<span class="s2"> AND ST_Intersects(geometry, ST_SetSRID(ST_GeomFromText('</span><span class="si">{</span><span class="n">nyc_bbox_wkt</span><span class="si">}</span><span class="s2">'), 4326))</span>
<span class="s2">LIMIT 5;</span>
<span class="s2">"""</span><span class="p">)</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-7"># find all the buildings in New York city that are taller than 20 meters
-nyc_bbox_wkt = "POLYGON((-74.2591 40.4774, -74.2591 40.9176, -73.7004 40.9176, -73.7004 40.4774, -74.2591 40.4774))"
-sd.sql(f"""
-SELECT
- id,
- height,
- num_floors,
- roof_shape,
- ST_Centroid(geometry) as centroid
-FROM
- buildings
-WHERE
- is_underground = FALSE
- AND height IS NOT NULL
- AND height > 20
- AND ST_Intersects(geometry, ST_SetSRID(ST_GeomFromText('{nyc_bbox_wkt}'), 4326))
-LIMIT 5;
-""").show()</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell-outputWrapper">
-<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
-</div>
-<div class="jp-OutputArea jp-Cell-outputArea">
-<div class="jp-OutputArea-child">
-<div class="jp-OutputPrompt jp-OutputArea-prompt"></div>
-<div class="jp-RenderedText jp-OutputArea-output" data-mime-type="text/plain" tabindex="0">
-<pre>┌─────────────────────────┬────────────────────┬────────────┬────────────┬─────────────────────────┐
+</code></pre></div>
+<div class="codehilite"><pre><span></span><code>┌─────────────────────────┬────────────────────┬────────────┬────────────┬─────────────────────────┐
│ id ┆ height ┆ num_floors ┆ roof_shape ┆ centroid │
│ utf8view ┆ float64 ┆ int32 ┆ utf8view ┆ wkb <ogc:crs84> │
╞═════════════════════════╪════════════════════╪════════════╪════════════╪═════════════════════════╡
@@ -1737,271 +1213,77 @@ LIMIT 5;
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ df37a283-f5bd-4822-a05… ┆ 24.154542922973633 ┆ ┆ ┆ POINT(-74.241910239840… │
└─────────────────────────┴────────────────────┴────────────┴────────────┴─────────────────────────┘
-</pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=e07fcdc1-962b-4dce-90cb-bf715432e299">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
-</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
-<h2 id="overture-divisions-table">Overture divisions table<a class="anchor-link" href="#overture-divisions-table">¶</a></h2>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=d9f122d3-4d90-46b0-ab9a-259a71cc423b">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [13]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-8">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="n">df</span> <span class="o">=</span> <span class="n">sd</span><span class="o">.</span><span class="n">read_parquet</span><span class="p">(</span>
+</code></pre></div>
+
+<h2 id="overture-divisions-table">Overture divisions table<a class="headerlink" href="#overture-divisions-table" title="Permanent link">¶</a></h2>
+<div class="highlight"><pre><span></span><code><span class="n">df</span> <span class="o">=</span> <span class="n">sd</span><span class="o">.</span><span class="n">read_parquet</span><span class="p">(</span>
<span class="s2">"s3://overturemaps-us-west-2/release/2025-08-20.0/theme=divisions/type=division_area/"</span>
<span class="p">)</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-8">df = sd.read_parquet(
- "s3://overturemaps-us-west-2/release/2025-08-20.0/theme=divisions/type=division_area/"
-)</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=19a75b19-0b56-4167-b3f1-73a171ecc480">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [14]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-9">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="c1"># take a look at a few rows of data</span>
+</code></pre></div>
+<div class="highlight"><pre><span></span><code><span class="c1"># take a look at a few rows of data</span>
<span class="n">df</span><span class="o">.</span><span class="n">show</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-9"># take a look at a few rows of data
-df.show(10)</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell-outputWrapper">
-<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
-</div>
-<div class="jp-OutputArea jp-Cell-outputArea">
-<div class="jp-OutputArea-child">
-<div class="jp-OutputPrompt jp-OutputArea-prompt"></div>
-<div class="jp-RenderedText jp-OutputArea-output" data-mime-type="text/plain" tabindex="0">
-<pre>┌────────────────┬────────────────┬────────────────┬───┬────────────────┬──────────┬───────────────┐
-│ id ┆ geometry ┆ bbox ┆ … ┆ is_territorial ┆ region ┆ division_id │
-│ utf8view ┆ wkb_view <ogc… ┆ struct(xmin f… ┆ ┆ boolean ┆ utf8view ┆ utf8view │
-╞════════════════╪════════════════╪════════════════╪═══╪════════════════╪══════════╪═══════════════╡
-│ 61912ffd-060b… ┆ POLYGON((23.3… ┆ {xmin: 22.735… ┆ … ┆ true ┆ ZA-EC ┆ 2711d6ca-ac1… │
-├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ 7647b992-e0d6… ┆ POLYGON((26.5… ┆ {xmin: 26.521… ┆ … ┆ true ┆ ZA-EC ┆ 0e8a08eb-6f2… │
-├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ 4058785b-82c9… ┆ MULTIPOLYGON(… ┆ {xmin: 22.735… ┆ … ┆ false ┆ ZA-EC ┆ 2711d6ca-ac1… │
-├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ cd9389b7-3451… ┆ POLYGON((26.5… ┆ {xmin: 26.373… ┆ … ┆ true ┆ ZA-EC ┆ 9d59ea5e-408… │
-├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ a60ae908-e6fa… ┆ POLYGON((26.6… ┆ {xmin: 26.541… ┆ … ┆ true ┆ ZA-EC ┆ f49ef082-3c2… │
-├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ fd070cbb-4aaa… ┆ POLYGON((26.1… ┆ {xmin: 26.084… ┆ … ┆ true ┆ ZA-EC ┆ 513b5a9c-c29… │
-├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ 70479601-dc12… ┆ POLYGON((26.4… ┆ {xmin: 26.222… ┆ … ┆ true ┆ ZA-EC ┆ 2ade34e5-955… │
-├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ 3a294b23-f674… ┆ POLYGON((24.5… ┆ {xmin: 24.503… ┆ … ┆ true ┆ ZA-EC ┆ 4f63d19f-2ca… │
-├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ 48b3e344-10a4… ┆ POLYGON((26.6… ┆ {xmin: 26.557… ┆ … ┆ true ┆ ZA-EC ┆ 20d890bb-1a4… │
-├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ 92e71cf6-fa94… ┆ POLYGON((25.8… ┆ {xmin: 25.799… ┆ … ┆ true ┆ ZA-EC ┆ 4202ec06-188… │
-└────────────────┴────────────────┴────────────────┴───┴────────────────┴──────────┴───────────────┘
-</pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=03b951de-3397-4fcf-9baf-50e139a38dd4">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [15]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-10">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="n">df</span><span class="o">.</span><span class="n">to_view</span><span class="p">(</span><span class="s2">"division_area"</span><span class="p">)</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-10">df.to_view("division_area")</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=9c6bd69d-9407-432a-bdc8-d60976237a3a">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-11">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="n">sd</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s2">"""</span>
+</code></pre></div>
+<div class="codehilite"><pre><span></span><code><span class="err">┌────────────────┬────────────────┬────────────────┬───┬────────────────┬──────────┬───────────────┐</span>
+<span class="err">│</span><span class="w"> </span><span class="n">id</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="n">geometry</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="n">bbox</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="err">…</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span cla [...]
+<span class="err">│</span><span class="w"> </span><span class="n">utf8view</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="n">wkb_view</span><span class="w"> </span><span class="o"><</span><span class="n">ogc</span><span class="err">…</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="k">struct</span><span class="p">(</span><span class="n">xmin</span><span class="w"> </span><span class="n">f</ [...]
+<span class="err">╞════════════════╪════════════════╪════════════════╪═══╪════════════════╪══════════╪═══════════════╡</span>
+<span class="err">│</span><span class="w"> </span><span class="mf">61912ff</span><span class="n">d</span><span class="o">-</span><span class="mh">060</span><span class="n">b</span><span class="err">…</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="n">POLYGON</span><span class="p">((</span><span class="mf">23.3</span><span class="err">…</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="p">{</span><span [...]
+<span class="err">├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤</span>
+<span class="err">│</span><span class="w"> </span><span class="mh">7647</span><span class="n">b992</span><span class="o">-</span><span class="n">e0d6</span><span class="err">…</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="n">POLYGON</span><span class="p">((</span><span class="mf">26.5</span><span class="err">…</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="p">{</span><span class="nl">xmin:</span> [...]
+<span class="err">├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤</span>
+<span class="err">│</span><span class="w"> </span><span class="mh">4058785</span><span class="n">b</span><span class="o">-</span><span class="mh">82</span><span class="n">c9</span><span class="err">…</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="n">MULTIPOLYGON</span><span class="p">(</span><span class="err">…</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="p">{</span><span class="nl">xmin:</span> [...]
+<span class="err">├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤</span>
+<span class="err">│</span><span class="w"> </span><span class="n">cd9389b7</span><span class="o">-</span><span class="mh">3451</span><span class="err">…</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="n">POLYGON</span><span class="p">((</span><span class="mf">26.5</span><span class="err">…</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="p">{</span><span class="nl">xmin:</span><span class="w"> </span [...]
+<span class="err">├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤</span>
+<span class="err">│</span><span class="w"> </span><span class="n">a60ae908</span><span class="o">-</span><span class="n">e6fa</span><span class="err">…</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="n">POLYGON</span><span class="p">((</span><span class="mf">26.6</span><span class="err">…</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="p">{</span><span class="nl">xmin:</span><span class="w"> </span> [...]
+<span class="err">├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤</span>
+<span class="err">│</span><span class="w"> </span><span class="n">fd070cbb</span><span class="o">-</span><span class="mh">4</span><span class="n">aaa</span><span class="err">…</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="n">POLYGON</span><span class="p">((</span><span class="mf">26.1</span><span class="err">…</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="p">{</span><span class="nl">xmin:</span> [...]
+<span class="err">├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤</span>
+<span class="err">│</span><span class="w"> </span><span class="mh">70479601</span><span class="o">-</span><span class="n">dc12</span><span class="err">…</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="n">POLYGON</span><span class="p">((</span><span class="mf">26.4</span><span class="err">…</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="p">{</span><span class="nl">xmin:</span><span class="w"> </span [...]
+<span class="err">├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤</span>
+<span class="err">│</span><span class="w"> </span><span class="mh">3</span><span class="n">a294b23</span><span class="o">-</span><span class="n">f674</span><span class="err">…</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="n">POLYGON</span><span class="p">((</span><span class="mf">24.5</span><span class="err">…</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="p">{</span><span class="nl">xmin:</span> [...]
+<span class="err">├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤</span>
+<span class="err">│</span><span class="w"> </span><span class="mh">48</span><span class="n">b3e344</span><span class="o">-</span><span class="mh">10</span><span class="n">a4</span><span class="err">…</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="n">POLYGON</span><span class="p">((</span><span class="mf">26.6</span><span class="err">…</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="p">{</span><span [...]
+<span class="err">├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤</span>
+<span class="err">│</span><span class="w"> </span><span class="mf">92e71</span><span class="n">cf6</span><span class="o">-</span><span class="n">fa94</span><span class="err">…</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="n">POLYGON</span><span class="p">((</span><span class="mf">25.8</span><span class="err">…</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="p">{</span><span class="nl">xmin:</span> [...]
+<span class="err">└────────────────┴────────────────┴────────────────┴───┴────────────────┴──────────┴───────────────┘</span>
+</code></pre></div>
+
+<div class="highlight"><pre><span></span><code><span class="n">df</span><span class="o">.</span><span class="n">to_view</span><span class="p">(</span><span class="s2">"division_area"</span><span class="p">)</span>
+</code></pre></div>
+<div class="highlight"><pre><span></span><code><span class="n">sd</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s2">"""</span>
<span class="s2">SELECT</span>
<span class="s2"> COUNT(*)</span>
<span class="s2">FROM division_area</span>
<span class="s2">"""</span><span class="p">)</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-11">sd.sql("""
-SELECT
- COUNT(*)
-FROM division_area
-""").show()</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell-outputWrapper">
-<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
-</div>
-<div class="jp-OutputArea jp-Cell-outputArea">
-<div class="jp-OutputArea-child">
-<div class="jp-OutputPrompt jp-OutputArea-prompt"></div>
-<div class="jp-RenderedText jp-OutputArea-output" data-mime-type="text/plain" tabindex="0">
-<pre>┌──────────┐
+</code></pre></div>
+<div class="codehilite"><pre><span></span><code>┌──────────┐
│ count(*) │
│ int64 │
╞══════════╡
│ 1035749 │
└──────────┘
-</pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=75a6d0ed-9767-4d36-a77a-4afb7952fbe4">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [17]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-12">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="n">df</span><span class="o">.</span><span class="n">schema</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-12">df.schema</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell-outputWrapper">
-<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
-</div>
-<div class="jp-OutputArea jp-Cell-outputArea">
-<div class="jp-OutputArea-child jp-OutputArea-executeResult">
-<div class="jp-OutputPrompt jp-OutputArea-prompt">Out[17]:</div>
-<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain" tabindex="0">
-<pre>SedonaSchema with 13 fields:
- id: Utf8View
- geometry: wkb_view <ogc:crs84>
- bbox: Struct(xmin Float32, xmax Float32, ymin Float32, ymax Float32)
- country: Utf8View
- version: Int32
- sources: List(Field { name: "element", data_type: Struct([Field { name: "property", data_type: Utf8, nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }, Field { name: "dataset", data_type: Utf8, nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }, Field { name: "record_id", data_type: Utf8, nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }, Field { name: "update_time", data_type: Utf8, nullable: true, dict_id: 0, dict_is_ordered: false, m [...]
- subtype: Utf8View
- class: Utf8View
- names: Struct(primary Utf8, common Map(Field { name: "key_value", data_type: Struct([Field { name: "key", data_type: Utf8, nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }, Field { name: "value", data_type: Utf8, nullable: true, dict_id: 0, dict_is_ordered: false, metadata: {} }]), nullable: false, dict_id: 0, dict_is_ordered: false, metadata: {} }, false), rules List(Field { name: "element", data_type: Struct([Field { name: "variant", data_type: Utf8, nullable: true [...]
- is_land: Boolean
- is_territorial: Boolean
- region: Utf8View
- division_id: Utf8View</pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=f1f7158c-ef2b-4377-9bee-180309ddd553">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [ ]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-13">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="c1"># get all the divisions in Nova Scotia and save them in memory with collect()</span>
+</code></pre></div>
+
+<div class="highlight"><pre><span></span><code><span class="n">df</span><span class="o">.</span><span class="n">schema</span>
+</code></pre></div>
+<div class="codehilite"><pre><span></span><code><span class="n">SedonaSchema</span><span class="w"> </span><span class="n">with</span><span class="w"> </span><span class="mi">13</span><span class="w"> </span><span class="n">fields</span><span class="p">:</span>
+<span class="w"> </span><span class="n">id</span><span class="p">:</span><span class="w"> </span><span class="n">Utf8View</span>
+<span class="w"> </span><span class="n">geometry</span><span class="p">:</span><span class="w"> </span><span class="n">wkb_view</span><span class="w"> </span><span class="o"><</span><span class="n">ogc</span><span class="p">:</span><span class="n">crs84</span><span class="o">></span>
+<span class="w"> </span><span class="n">bbox</span><span class="p">:</span><span class="w"> </span><span class="n">Struct</span><span class="p">(</span><span class="n">xmin</span><span class="w"> </span><span class="n">Float32</span><span class="p">,</span><span class="w"> </span><span class="n">xmax</span><span class="w"> </span><span class="n">Float32</span><span class="p">,</span><span class="w"> </span><span class="n">ymin</span><span class="w"> </span><span class="n">Float32</span> [...]
+<span class="w"> </span><span class="n">country</span><span class="p">:</span><span class="w"> </span><span class="n">Utf8View</span>
+<span class="w"> </span><span class="n">version</span><span class="p">:</span><span class="w"> </span><span class="n">Int32</span>
+<span class="w"> </span><span class="n">sources</span><span class="p">:</span><span class="w"> </span><span class="n">List</span><span class="p">(</span><span class="n">Field</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">name</span><span class="p">:</span><span class="w"> </span><span class="s2">"element"</span><span class="p">,</span><span class="w"> </span><span class="n">data_type</span><span class="p">:</span><span class="w"> </span><s [...]
+<span class="w"> </span><span class="n">subtype</span><span class="p">:</span><span class="w"> </span><span class="n">Utf8View</span>
+<span class="w"> </span><span class="k">class</span><span class="p">:</span><span class="w"> </span><span class="n">Utf8View</span>
+<span class="w"> </span><span class="n">names</span><span class="p">:</span><span class="w"> </span><span class="n">Struct</span><span class="p">(</span><span class="n">primary</span><span class="w"> </span><span class="n">Utf8</span><span class="p">,</span><span class="w"> </span><span class="n">common</span><span class="w"> </span><span class="n">Map</span><span class="p">(</span><span class="n">Field</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span [...]
+<span class="w"> </span><span class="n">is_land</span><span class="p">:</span><span class="w"> </span><span class="n">Boolean</span>
+<span class="w"> </span><span class="n">is_territorial</span><span class="p">:</span><span class="w"> </span><span class="n">Boolean</span>
+<span class="w"> </span><span class="n">region</span><span class="p">:</span><span class="w"> </span><span class="n">Utf8View</span>
+<span class="w"> </span><span class="n">division_id</span><span class="p">:</span><span class="w"> </span><span class="n">Utf8View</span>
+</code></pre></div>
+
+<div class="highlight"><pre><span></span><code><span class="c1"># get all the divisions in Nova Scotia and save them in memory with to_memtable()</span>
<span class="n">nova_scotia_bbox_wkt</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">"POLYGON((-66.5 43.4, -66.5 47.1, -59.8 47.1, -59.8 43.4, -66.5 43.4))"</span>
<span class="p">)</span>
@@ -2011,124 +1293,21 @@ FROM division_area
<span class="s2">FROM division_area</span>
<span class="s2">WHERE</span>
<span class="s2"> ST_Intersects(geometry, ST_SetSRID(ST_GeomFromText('</span><span class="si">{</span><span class="n">nova_scotia_bbox_wkt</span><span class="si">}</span><span class="s2">'), 4326))</span>
-<span class="s2">"""</span><span class="p">)</span><span class="o">.</span><span class="n">collect</span><span class="p">()</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-13"># get all the divisions in Nova Scotia and save them in memory with collect()
-nova_scotia_bbox_wkt = (
- "POLYGON((-66.5 43.4, -66.5 47.1, -59.8 47.1, -59.8 43.4, -66.5 43.4))"
-)
-ns = sd.sql(f"""
-SELECT
- country, region, names, geometry
-FROM division_area
-WHERE
- ST_Intersects(geometry, ST_SetSRID(ST_GeomFromText('{nova_scotia_bbox_wkt}'), 4326))
-""").collect()</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=27e6909d-06fa-438b-88e0-d300fd2fb1ec">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [19]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-14">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="n">ns</span><span class="o">.</span><span class="n">to_view</span><span class="p">(</span><span class="s2">"ns_divisions"</span><span class="p">)</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-14">ns.to_view("ns_divisions")</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=2dec92d8-a374-4021-990a-e50f5769516e">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [20]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-15">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="n">df</span> <span class="o">=</span> <span class="n">sd</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s2">"""</span>
+<span class="s2">"""</span><span class="p">)</span><span class="o">.</span><span class="n">to_memtable</span><span class="p">()</span>
+</code></pre></div>
+<div class="highlight"><pre><span></span><code><span class="n">ns</span><span class="o">.</span><span class="n">to_view</span><span class="p">(</span><span class="s2">"ns_divisions"</span><span class="p">)</span>
+</code></pre></div>
+<div class="highlight"><pre><span></span><code><span class="n">df</span> <span class="o">=</span> <span class="n">sd</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s2">"""</span>
<span class="s2">SELECT UNNEST(names), geometry</span>
<span class="s2">FROM ns_divisions</span>
<span class="s2">WHERE region = 'CA-NS'</span>
<span class="s2">"""</span><span class="p">)</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-15">df = sd.sql("""
-SELECT UNNEST(names), geometry
-FROM ns_divisions
-WHERE region = 'CA-NS'
-""")</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=7f39a283-0eee-4f72-a30a-8dd9fa1aaa69">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [24]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-16">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="o">%%</span><span class="n">time</span>
-<span class="c1"># this executes quickly because the Nova Scotia data was persisted in memory with collect()</span>
+</code></pre></div>
+<div class="highlight"><pre><span></span><code><span class="o">%%</span><span class="n">time</span>
+<span class="c1"># this executes quickly because the Nova Scotia data was persisted in memory with to_memtable()</span>
<span class="n">df</span><span class="o">.</span><span class="n">show</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-16">%%time
-# this executes quickly because the Nova Scotia data was persisted in memory with collect()
-df.show(2)</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell-outputWrapper">
-<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
-</div>
-<div class="jp-OutputArea jp-Cell-outputArea">
-<div class="jp-OutputArea-child">
-<div class="jp-OutputPrompt jp-OutputArea-prompt"></div>
-<div class="jp-RenderedText jp-OutputArea-output" data-mime-type="text/plain" tabindex="0">
-<pre>┌────────────────────────┬────────────────────────┬────────────────────────┬───────────────────────┐
+</code></pre></div>
+<div class="codehilite"><pre><span></span><code>┌────────────────────────┬────────────────────────┬────────────────────────┬───────────────────────┐
│ __unnest_placeholder(n ┆ __unnest_placeholder(n ┆ __unnest_placeholder(n ┆ geometry │
│ s_divisions.names).pr… ┆ s_divisions.names).co… ┆ s_divisions.names).ru… ┆ wkb_view <ogc:crs84> │
╞════════════════════════╪════════════════════════╪════════════════════════╪═══════════════════════╡
@@ -2138,20 +1317,7 @@ df.show(2)</div>
└────────────────────────┴────────────────────────┴────────────────────────┴───────────────────────┘
CPU times: user 8.75 ms, sys: 2.41 ms, total: 11.2 ms
Wall time: 8.47 ms
-</pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div> <!-- jp-Notebook -->
-</div> <!-- jupyter-wrapper -->
-
- <style>
- ['pre { line-height: 125%; }\ntd.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\nspan.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\ntd.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\nspan.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\n.highlight-ipynb .hll { b [...]
- </style>
-
+</code></pre></div>
@@ -2172,7 +1338,7 @@ Wall time: 8.47 ms
<span class="md-icon" title="Last update">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4 2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2z"></path></svg>
</span>
- <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-datetime" title="September 11, 2025 04:25:06 UTC">September 11, 2025 04:25:06</span>
+ <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-datetime" title="September 18, 2025 00:36:42 UTC">September 18, 2025 00:36:42</span>
</span>
@@ -2204,6 +1370,44 @@ Wall time: 8.47 ms
<footer class="md-footer">
+
+ <nav class="md-footer__inner md-grid" aria-label="Footer">
+
+
+ <a href="../geopandas-interop/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Working with GeoPandas">
+ <div class="md-footer__button md-icon">
+
+ <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"></path></svg>
+ </div>
+ <div class="md-footer__title">
+ <span class="md-footer__direction">
+ Previous
+ </span>
+ <div class="md-ellipsis">
+ Working with GeoPandas
+ </div>
+ </div>
+ </a>
+
+
+
+ <a href="../working-with-parquet-files/" class="md-footer__link md-footer__link--next" aria-label="Next: Working with Parquet Files">
+ <div class="md-footer__title">
+ <span class="md-footer__direction">
+ Next
+ </span>
+ <div class="md-ellipsis">
+ Working with Parquet Files
+ </div>
+ </div>
+ <div class="md-footer__button md-icon">
+
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"></path></svg>
+ </div>
+ </a>
+
+ </nav>
+
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
diff --git a/0.1.0/programming-guide.ipynb b/0.1.0/programming-guide.ipynb
new file mode 100644
index 0000000..13e36d1
--- /dev/null
+++ b/0.1.0/programming-guide.ipynb
@@ -0,0 +1,400 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "1932983e-1cd2-41d0-a5eb-0537b3ac3feb",
+ "metadata": {},
+ "source": [
+ "<!---\n",
+ " Licensed to the Apache Software Foundation (ASF) under one\n",
+ " or more contributor license agreements. See the NOTICE file\n",
+ " distributed with this work for additional information\n",
+ " regarding copyright ownership. The ASF licenses this file\n",
+ " to you under the Apache License, Version 2.0 (the\n",
+ " \"License\"); you may not use this file except in compliance\n",
+ " with the License. You may obtain a copy of the License at\n",
+ "\n",
+ " http://www.apache.org/licenses/LICENSE-2.0\n",
+ "\n",
+ " Unless required by applicable law or agreed to in writing,\n",
+ " software distributed under the License is distributed on an\n",
+ " \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n",
+ " KIND, either express or implied. See the License for the\n",
+ " specific language governing permissions and limitations\n",
+ " under the License.\n",
+ "-->\n",
+ "\n",
+ "# Working with Vector Data\n",
+ "\n",
+ "Process vector data using SedonaDB. You will learn to create DataFrames, run spatial queries, and manage file I/O. Let's begin by connecting to SedonaDB.\n",
+ "\n",
+ "Let's start by establishing a SedonaDB connection."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "119fcbae",
+ "metadata": {},
+ "source": [
+ "## Establish SedonaDB connection\n",
+ "\n",
+ "Here's how to create the SedonaDB connection:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "53c3b7a8-c42a-407a-a454-6ee1e943fbcc",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import sedona.db\n",
+ "\n",
+ "sd = sedona.db.connect()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7aeaa60f-2325-418c-8e72-4344bd4a75fe",
+ "metadata": {},
+ "source": [
+ "Now, let's see how to create SedonaDB dataframes.\n",
+ "\n",
+ "## Create SedonaDB DataFrame\n",
+ "\n",
+ "**Manually creating SedonaDB DataFrame**\n",
+ "\n",
+ "Here's how to manually create a SedonaDB DataFrame:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "b3377767-d747-407c-92c0-8786c1998131",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df = sd.sql(\"\"\"\n",
+ "SELECT * FROM (VALUES\n",
+ " ('one', ST_GeomFromWkt('POINT(1 2)')),\n",
+ " ('two', ST_GeomFromWkt('POLYGON((-74.0 40.7, -74.0 40.8, -73.9 40.8, -73.9 40.7, -74.0 40.7))')),\n",
+ " ('three', ST_GeomFromWkt('LINESTRING(-74.0060 40.7128, -73.9352 40.7306, -73.8561 40.8484)')))\n",
+ "AS t(val, point)\"\"\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0f9e1319-2e7a-4d98-9df0-47a9a73cfff3",
+ "metadata": {},
+ "source": [
+ "Check the type of the DataFrame."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "e8be30ab-4818-4db8-bae2-83e973ad1b77",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "sedonadb.dataframe.DataFrame"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "type(df)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8225ed1f-45a4-4915-a582-8ae191ec53ed",
+ "metadata": {},
+ "source": [
+ "**Create SedonaDB DataFrame from files in S3**\n",
+ "\n",
+ "For most production applications, you will create SedonaDB DataFrames by reading data from a file. Let's see how to read GeoParquet files in AWS S3 into a SedonaDB DataFrame."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "151df287-4b2d-433e-9769-c3378df03b1b",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "sd.read_parquet(\n",
+ " \"s3://overturemaps-us-west-2/release/2025-08-20.0/theme=divisions/type=division_area/\",\n",
+ " options={\"aws.skip_signature\": True, \"aws.region\": \"us-west-2\"},\n",
+ ").to_view(\"division_area\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "858fcc66-816d-4c71-8875-82b74169eccd",
+ "metadata": {},
+ "source": [
+ "Now, let's run some spatial queries.\n",
+ "\n",
+ "### Read from GeoPandas DataFrame\n",
+ "\n",
+ "This section shows how to convert a GeoPandas DataFrame into a SedonaDB DataFrame.\n",
+ "\n",
+ "Start by reading a FlatGeoBuf file into a GeoPandas DataFrame:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "b81549f2-0f58-49e4-9011-8de6578c2b0e",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import geopandas as gpd\n",
+ "\n",
+ "path = \"https://raw.githubusercontent.com/geoarrow/geoarrow-data/v0.2.0/natural-earth/files/natural-earth_cities.fgb\"\n",
+ "gdf = gpd.read_file(path)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2265f94b-ccb3-4634-8c52-a8799c68c76a",
+ "metadata": {},
+ "source": [
+ "Now convert the GeoPandas DataFrame to a SedonaDB DataFrame and view three rows of content:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "0e4819db-bf58-42d7-8b5b-f272d0f19266",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "┌──────────────┬──────────────────────────────┐\n",
+ "│ name ┆ geometry │\n",
+ "│ utf8 ┆ geometry │\n",
+ "╞══════════════╪══════════════════════════════╡\n",
+ "│ Vatican City ┆ POINT(12.4533865 41.9032822) │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ San Marino ┆ POINT(12.4417702 43.9360958) │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Vaduz ┆ POINT(9.5166695 47.1337238) │\n",
+ "└──────────────┴──────────────────────────────┘\n"
+ ]
+ }
+ ],
+ "source": [
+ "df = sd.create_data_frame(gdf)\n",
+ "df.show(3)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6890bcc3-f3bd-4c47-bf86-2607bed5e480",
+ "metadata": {},
+ "source": [
+ "## Spatial queries\n",
+ "\n",
+ "Let's see how to run spatial operations like filtering, joins, and clustering algorithms.\n",
+ "\n",
+ "### Spatial filtering\n",
+ "\n",
+ "Let's run a spatial filtering operation to fetch all the objects in the following polygon:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "8c8a4b48-8c4e-412e-900f-8c0f6f4ccc1d",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "┌──────────┬──────────┬────────────────────────────────────────────────────────────────────────────┐\n",
+ "│ country ┆ region ┆ geometry │\n",
+ "│ utf8view ┆ utf8view ┆ geometry │\n",
+ "╞══════════╪══════════╪════════════════════════════════════════════════════════════════════════════╡\n",
+ "│ CA ┆ CA-NS ┆ POLYGON((-66.0528452 43.4531336,-66.0883401 43.3978188,-65.9647654 43.361… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ CA ┆ CA-NS ┆ POLYGON((-66.0222822 43.5166842,-66.0252286 43.5100071,-66.0528452 43.453… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ CA ┆ CA-NS ┆ POLYGON((-65.7451389 43.5336263,-65.7450818 43.5347004,-65.7449545 43.535… │\n",
+ "└──────────┴──────────┴────────────────────────────────────────────────────────────────────────────┘\n"
+ ]
+ }
+ ],
+ "source": [
+ "nova_scotia_bbox_wkt = (\n",
+ " \"POLYGON((-66.5 43.4, -66.5 47.1, -59.8 47.1, -59.8 43.4, -66.5 43.4))\"\n",
+ ")\n",
+ "\n",
+ "ns = sd.sql(f\"\"\"\n",
+ "SELECT country, region, geometry\n",
+ "FROM division_area\n",
+ "WHERE ST_Intersects(geometry, ST_SetSRID(ST_GeomFromText('{nova_scotia_bbox_wkt}'), 4326))\n",
+ "\"\"\")\n",
+ "\n",
+ "ns.show(3)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "32076e01-d807-40ed-8457-9d8c4244e89f",
+ "metadata": {},
+ "source": [
+ "You can see it only includes the divisions in the Nova Scotia area.\n",
+ "\n",
+ "### K-nearest neighbors (KNN) joins\n",
+ "\n",
+ "Create `restaurants` and `customers` views so we can demonstrate the KNN join functionality."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "deaa36db-2fee-4ba2-ab79-1dc756cb1655",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df = sd.sql(\"\"\"\n",
+ "SELECT name, ST_Point(lng, lat) AS location\n",
+ "FROM (VALUES\n",
+ " (101, -74.0, 40.7, 'Pizza Palace'),\n",
+ " (102, -73.99, 40.69, 'Burger Barn'),\n",
+ " (103, -74.02, 40.72, 'Taco Town'),\n",
+ " (104, -73.98, 40.75, 'Sushi Spot'),\n",
+ " (105, -74.05, 40.68, 'Deli Direct')\n",
+ ") AS t(id, lng, lat, name)\n",
+ "\"\"\")\n",
+ "sd.sql(\"drop view if exists restaurants\")\n",
+ "df.to_view(\"restaurants\")\n",
+ "\n",
+ "df = sd.sql(\"\"\"\n",
+ "SELECT name, ST_Point(lng, lat) AS location\n",
+ "FROM (VALUES\n",
+ " (1, -74.0, 40.7, 'Alice'),\n",
+ " (2, -73.9, 40.8, 'Bob'),\n",
+ " (3, -74.1, 40.6, 'Carol')\n",
+ ") AS t(id, lng, lat, name)\n",
+ "\"\"\")\n",
+ "sd.sql(\"drop view if exists customers\")\n",
+ "df.to_view(\"customers\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "e3bc4976-4245-432f-b265-7f6aa13f35b9",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "┌───────┬───────────────────┐\n",
+ "│ name ┆ location │\n",
+ "│ utf8 ┆ geometry │\n",
+ "╞═══════╪═══════════════════╡\n",
+ "│ Alice ┆ POINT(-74 40.7) │\n",
+ "├╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Bob ┆ POINT(-73.9 40.8) │\n",
+ "├╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Carol ┆ POINT(-74.1 40.6) │\n",
+ "└───────┴───────────────────┘\n"
+ ]
+ }
+ ],
+ "source": [
+ "df.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9df227d6-0972-457a-87e3-5a89802c460f",
+ "metadata": {},
+ "source": [
+ "Perform a KNN join to identify the two restaurants that are nearest to each customer:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "05565e15-ee18-431c-8fd2-673291d8d0ee",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "┌──────────┬──────────────┐\n",
+ "│ customer ┆ restaurant │\n",
+ "│ utf8 ┆ utf8 │\n",
+ "╞══════════╪══════════════╡\n",
+ "│ Alice ┆ Burger Barn │\n",
+ "├╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Alice ┆ Pizza Palace │\n",
+ "├╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Bob ┆ Pizza Palace │\n",
+ "├╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Bob ┆ Sushi Spot │\n",
+ "├╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Carol ┆ Deli Direct │\n",
+ "├╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Carol ┆ Pizza Palace │\n",
+ "└──────────┴──────────────┘\n"
+ ]
+ }
+ ],
+ "source": [
+ "sd.sql(\"\"\"\n",
+ "SELECT\n",
+ " c.name AS customer,\n",
+ " r.name AS restaurant\n",
+ "FROM customers c, restaurants r\n",
+ "WHERE ST_KNN(c.location, r.location, 2, false)\n",
+ "ORDER BY c.name, r.name;\n",
+ "\"\"\").show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2e93fe6a-b0a7-4ec0-952c-dde9edcacdc4",
+ "metadata": {},
+ "source": [
+ "Notice how each customer has two rows - one for each of the two closest restaurants."
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.12.4"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/0.1.0/programming-guide/index.html b/0.1.0/programming-guide/index.html
index dbcf9a4..9205296 100644
--- a/0.1.0/programming-guide/index.html
+++ b/0.1.0/programming-guide/index.html
@@ -7,11 +7,13 @@
+ <link rel="canonical" href="https://sedona.apache.org/sedonadb/latest/programming-guide/">
- <link rel="prev" href="..">
+ <link rel="prev" href="../quickstart-python/">
- <link rel="next" href="../quickstart-cli/">
+
+ <link rel="next" href="../geopandas-interop/">
<link rel="icon" href="../image/sedona_logo_symbol.png">
@@ -19,7 +21,7 @@
- <title>SedonaDB Guide - SedonaDB</title>
+ <title>Working with Vector Data - SedonaDB</title>
@@ -84,7 +86,7 @@
<div data-md-component="skip">
- <a href="#sedonadb-guide" class="md-skip">
+ <a href="#working-with-vector-data" class="md-skip">
Skip to content
</a>
@@ -106,7 +108,7 @@
<nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="SedonaDB" class="md-header__button md-logo" aria-label="SedonaDB" data-md-component="logo">
- <img src="../image/sedona_logo_symbol_white.svg" alt="logo">
+ <img src="../image/sedona_logo_symbol.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
@@ -123,7 +125,7 @@
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
- SedonaDB Guide
+ Working with Vector Data
</span>
</div>
@@ -215,7 +217,26 @@
- Home
+ SedonaDB
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+ <li class="md-tabs__item">
+ <a href="../quickstart-python/" class="md-tabs__link">
+
+
+
+
+
+ Python Quickstart
</a>
</li>
@@ -298,6 +319,25 @@
+ <li class="md-tabs__item">
+ <a href="https://sedona.apache.org/latest/community/contact/" class="md-tabs__link">
+
+
+
+
+
+ Community
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
<li class="md-tabs__item">
<a href="https://sedona.apache.org/latest/asf/asf/" class="md-tabs__link">
@@ -324,7 +364,7 @@
- Return to Sedona Homepage
+ Sedona Homepage
</a>
</li>
@@ -361,7 +401,7 @@
<label class="md-nav__title" for="__drawer">
<a href=".." title="SedonaDB" class="md-nav__button md-logo" aria-label="SedonaDB" data-md-component="logo">
- <img src="../image/sedona_logo_symbol_white.svg" alt="logo">
+ <img src="../image/sedona_logo_symbol.png" alt="logo">
</a>
SedonaDB
@@ -393,7 +433,29 @@
<span class="md-ellipsis">
- Home
+ SedonaDB
+
+ </span>
+
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../quickstart-python/" class="md-nav__link">
+
+
+
+ <span class="md-ellipsis">
+ Python Quickstart
</span>
@@ -428,10 +490,10 @@
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" checked>
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" checked>
- <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="">
+ <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="">
@@ -444,8 +506,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="true">
- <label class="md-nav__title" for="__nav_2">
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="true">
+ <label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
SedonaDB Guides
</label>
@@ -472,7 +534,7 @@
<span class="md-ellipsis">
- SedonaDB Guide
+ Working with Vector Data
</span>
@@ -485,7 +547,7 @@
<span class="md-ellipsis">
- SedonaDB Guide
+ Working with Vector Data
</span>
@@ -523,6 +585,21 @@
</span>
</a>
+ <nav class="md-nav" aria-label="Create SedonaDB DataFrame">
+ <ul class="md-nav__list">
+
+ <li class="md-nav__item">
+ <a href="#read-from-geopandas-dataframe" class="md-nav__link">
+ <span class="md-ellipsis">
+ Read from GeoPandas DataFrame
+ </span>
+ </a>
+
+</li>
+
+ </ul>
+ </nav>
+
</li>
<li class="md-nav__item">
@@ -532,15 +609,30 @@
</span>
</a>
+ <nav class="md-nav" aria-label="Spatial queries">
+ <ul class="md-nav__list">
+
+ <li class="md-nav__item">
+ <a href="#spatial-filtering" class="md-nav__link">
+ <span class="md-ellipsis">
+ Spatial filtering
+ </span>
+ </a>
+
</li>
-
- <li class="md-nav__item">
- <a href="#files" class="md-nav__link">
+
+ <li class="md-nav__item">
+ <a href="#k-nearest-neighbors-knn-joins" class="md-nav__link">
<span class="md-ellipsis">
- Files
+ K-nearest neighbors (KNN) joins
</span>
</a>
+</li>
+
+ </ul>
+ </nav>
+
</li>
</ul>
@@ -559,12 +651,12 @@
<li class="md-nav__item">
- <a href="../quickstart-cli/" class="md-nav__link">
+ <a href="../geopandas-interop/" class="md-nav__link">
<span class="md-ellipsis">
- CLI Quickstart
+ Working with GeoPandas
</span>
@@ -582,12 +674,12 @@
<li class="md-nav__item">
- <a href="../quickstart-python/" class="md-nav__link">
+ <a href="../overture-examples/" class="md-nav__link">
<span class="md-ellipsis">
- Python Quickstart
+ Working with Overture
</span>
@@ -605,12 +697,35 @@
<li class="md-nav__item">
- <a href="../development/" class="md-nav__link">
+ <a href="../working-with-parquet-files/" class="md-nav__link">
<span class="md-ellipsis">
- Development
+ Working with Parquet Files
+
+ </span>
+
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../contributors-guide/" class="md-nav__link">
+
+
+
+ <span class="md-ellipsis">
+ Contributors Guide
</span>
@@ -648,10 +763,10 @@
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3">
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4">
- <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
+ <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
@@ -664,8 +779,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
- <label class="md-nav__title" for="__nav_3">
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
SedonaDB Reference
</label>
@@ -691,10 +806,10 @@
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_1">
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_1">
- <label class="md-nav__link" for="__nav_3_1" id="__nav_3_1_label" tabindex="0">
+ <label class="md-nav__link" for="__nav_4_1" id="__nav_4_1_label" tabindex="0">
@@ -707,8 +822,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_1_label" aria-expanded="false">
- <label class="md-nav__title" for="__nav_3_1">
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_1_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4_1">
<span class="md-nav__icon md-icon"></span>
Python
</label>
@@ -765,10 +880,10 @@
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2">
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_2">
- <label class="md-nav__link" for="__nav_3_2" id="__nav_3_2_label" tabindex="0">
+ <label class="md-nav__link" for="__nav_4_2" id="__nav_4_2_label" tabindex="0">
@@ -781,8 +896,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_2_label" aria-expanded="false">
- <label class="md-nav__title" for="__nav_3_2">
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_2_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4_2">
<span class="md-nav__icon md-icon"></span>
SQL
</label>
@@ -834,19 +949,34 @@
+ </ul>
+ </nav>
+
+ </li>
+
+
-
+
+ </ul>
+ </nav>
+
+ </li>
+
+
+
+
+
<li class="md-nav__item">
- <a href="../reference/read-parquet-files/" class="md-nav__link">
+ <a href="https://sedona.apache.org/latest/blog/" class="md-nav__link">
<span class="md-ellipsis">
- Read Parquet Files
+ Blog
</span>
@@ -855,22 +985,6 @@
</li>
-
-
- </ul>
- </nav>
-
- </li>
-
-
-
-
- </ul>
- </nav>
-
- </li>
-
-
@@ -879,12 +993,12 @@
<li class="md-nav__item">
- <a href="https://sedona.apache.org/latest/blog/" class="md-nav__link">
+ <a href="https://sedona.apache.org/latest/community/contact/" class="md-nav__link">
<span class="md-ellipsis">
- Blog
+ Community
</span>
@@ -928,7 +1042,7 @@
<span class="md-ellipsis">
- Return to Sedona Homepage
+ Sedona Homepage
</span>
@@ -980,6 +1094,21 @@
</span>
</a>
+ <nav class="md-nav" aria-label="Create SedonaDB DataFrame">
+ <ul class="md-nav__list">
+
+ <li class="md-nav__item">
+ <a href="#read-from-geopandas-dataframe" class="md-nav__link">
+ <span class="md-ellipsis">
+ Read from GeoPandas DataFrame
+ </span>
+ </a>
+
+</li>
+
+ </ul>
+ </nav>
+
</li>
<li class="md-nav__item">
@@ -989,15 +1118,30 @@
</span>
</a>
+ <nav class="md-nav" aria-label="Spatial queries">
+ <ul class="md-nav__list">
+
+ <li class="md-nav__item">
+ <a href="#spatial-filtering" class="md-nav__link">
+ <span class="md-ellipsis">
+ Spatial filtering
+ </span>
+ </a>
+
</li>
-
- <li class="md-nav__item">
- <a href="#files" class="md-nav__link">
+
+ <li class="md-nav__item">
+ <a href="#k-nearest-neighbors-knn-joins" class="md-nav__link">
<span class="md-ellipsis">
- Files
+ K-nearest neighbors (KNN) joins
</span>
</a>
+</li>
+
+ </ul>
+ </nav>
+
</li>
</ul>
@@ -1016,7 +1160,7 @@
- <a href="https://github.com/apache/sedona-db/edit/master/docs/programming-guide.ipynb" title="Edit this page" class="md-content__button md-icon" rel="edit">
+ <a href="https://github.com/apache/sedona-db/blob/main/docs/programming-guide.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"></path></svg>
</a>
@@ -1024,725 +1168,70 @@
-<script>
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, global.ClipboardCopyElement = factory());
- }(this, function () { 'use strict';
-
- function createNode(text) {
- const node = document.createElement('pre');
- node.style.width = '1px';
- node.style.height = '1px';
- node.style.position = 'fixed';
- node.style.top = '5px';
- node.textContent = text;
- return node;
- }
-
- function copyNode(node) {
- if ('clipboard' in navigator) {
- // eslint-disable-next-line flowtype/no-flow-fix-me-comments
- // $FlowFixMe Clipboard is not defined in Flow yet.
- return navigator.clipboard.writeText(node.textContent);
- }
-
- const selection = getSelection();
-
- if (selection == null) {
- return Promise.reject(new Error());
- }
-
- selection.removeAllRanges();
- const range = document.createRange();
- range.selectNodeContents(node);
- selection.addRange(range);
- document.execCommand('copy');
- selection.removeAllRanges();
- return Promise.resolve();
- }
- function copyText(text) {
- if ('clipboard' in navigator) {
- // eslint-disable-next-line flowtype/no-flow-fix-me-comments
- // $FlowFixMe Clipboard is not defined in Flow yet.
- return navigator.clipboard.writeText(text);
- }
-
- const body = document.body;
-
- if (!body) {
- return Promise.reject(new Error());
- }
-
- const node = createNode(text);
- body.appendChild(node);
- copyNode(node);
- body.removeChild(node);
- return Promise.resolve();
- }
-
- function copy(button) {
- const id = button.getAttribute('for');
- const text = button.getAttribute('value');
-
- function trigger() {
- button.dispatchEvent(new CustomEvent('clipboard-copy', {
- bubbles: true
- }));
- }
-
- if (text) {
- copyText(text).then(trigger);
- } else if (id) {
- const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument;
- if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return;
- const node = root.getElementById(id);
- if (node) copyTarget(node).then(trigger);
- }
- }
-
- function copyTarget(content) {
- if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) {
- return copyText(content.value);
- } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) {
- return copyText(content.href);
- } else {
- return copyNode(content);
- }
- }
-
- function clicked(event) {
- const button = event.currentTarget;
-
- if (button instanceof HTMLElement) {
- copy(button);
- }
- }
-
- function keydown(event) {
- if (event.key === ' ' || event.key === 'Enter') {
- const button = event.currentTarget;
-
- if (button instanceof HTMLElement) {
- event.preventDefault();
- copy(button);
- }
- }
- }
-
- function focused(event) {
- event.currentTarget.addEventListener('keydown', keydown);
- }
-
- function blurred(event) {
- event.currentTarget.removeEventListener('keydown', keydown);
- }
-
- class ClipboardCopyElement extends HTMLElement {
- constructor() {
- super();
- this.addEventListener('click', clicked);
- this.addEventListener('focus', focused);
- this.addEventListener('blur', blurred);
- }
-
- connectedCallback() {
- if (!this.hasAttribute('tabindex')) {
- this.setAttribute('tabindex', '0');
- }
-
- if (!this.hasAttribute('role')) {
- this.setAttribute('role', 'button');
- }
- }
-
- get value() {
- return this.getAttribute('value') || '';
- }
-
- set value(text) {
- this.setAttribute('value', text);
- }
-
- }
-
- if (!window.customElements.get('clipboard-copy')) {
- window.ClipboardCopyElement = ClipboardCopyElement;
- window.customElements.define('clipboard-copy', ClipboardCopyElement);
- }
-
- return ClipboardCopyElement;
-
- }));
-</script>
-<script>
- document.addEventListener('clipboard-copy', function(event) {
- const notice = event.target.querySelector('.notice')
- notice.hidden = false
- setTimeout(function() {
- notice.hidden = true
- }, 1000)
- })
-</script>
-<style type="text/css">
- pre { line-height: 125%; }
-td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
-span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
-td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
-span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
-.highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) }
-.highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) }
-.highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */
-.highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */
-.highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */
-.highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */
-.highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */
-.highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */
-.highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */
-.highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */
-.highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */
-.highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */
-.highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */
-.highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */
-.highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */
-.highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */
-.highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */
-.highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */
-.highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */
-.highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */
-.highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */
-.highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */
-.highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */
-.highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */
-.highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */
-.highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */
-.highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */
-.highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */
-.highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */
-.highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */
-.highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */
-.highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */
-.highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */
-.highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */
-.highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */
-.highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */
-.highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */
-.highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */
-.highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */
-.highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */
-.highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */
-.highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */
-.highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */
- </style>
-<style type="text/css">
-@charset "UTF-8";.jupyter-wrapper{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink- [...]
-</style>
-<style type="text/css">
-.jupyter-wrapper{--jp-shadow-base-lightness: 0;--jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), .2 );--jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), .14 );--jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), .12 );--jp-elevation-z0: none;--jp-elev [...]
-</style>
-<!-- Load mathjax -->
-<script src=""> </script>
-<!-- MathJax configuration -->
-<script type="text/x-mathjax-config">
- init_mathjax = function() {
- if (window.MathJax) {
- // MathJax loaded
- MathJax.Hub.Config({
- TeX: {
- equationNumbers: {
- autoNumber: "AMS",
- useLabelIds: true
- }
- },
- tex2jax: {
- inlineMath: [ ['$','$'], ["\\(","\\)"] ],
- displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
- processEscapes: true,
- processEnvironments: true
- },
- displayAlign: 'center',
- messageStyle: 'none',
- CommonHTML: {
- linebreaks: {
- automatic: true
- }
- }
- });
-
- MathJax.Hub.Queue(["Typeset", MathJax.Hub]);
- }
- }
- init_mathjax();
- </script>
-<!-- End of mathjax configuration --><script type="module">
- document.addEventListener("DOMContentLoaded", async () => {
- const diagrams = document.querySelectorAll(".jp-Mermaid > pre.mermaid");
- // do not load mermaidjs if not needed
- if (!diagrams.length) {
- return;
- }
- const mermaid = (await import("https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.7.0/mermaid.esm.min.mjs")).default;
- const parser = new DOMParser();
-
- mermaid.initialize({
- maxTextSize: 100000,
- maxEdges: 100000,
- startOnLoad: false,
- fontFamily: window
- .getComputedStyle(document.body)
- .getPropertyValue("--jp-ui-font-family"),
- theme: document.querySelector("body[data-jp-theme-light='true']")
- ? "default"
- : "dark",
- });
-
- let _nextMermaidId = 0;
-
- function makeMermaidImage(svg) {
- const img = document.createElement("img");
- const doc = parser.parseFromString(svg, "image/svg+xml");
- const svgEl = doc.querySelector("svg");
- const { maxWidth } = svgEl?.style || {};
- const firstTitle = doc.querySelector("title");
- const firstDesc = doc.querySelector("desc");
-
- img.setAttribute("src", `data:image/svg+xml,${encodeURIComponent(svg)}`);
- if (maxWidth) {
- img.width = parseInt(maxWidth);
- }
- if (firstTitle) {
- img.setAttribute("alt", firstTitle.textContent);
- }
- if (firstDesc) {
- const caption = document.createElement("figcaption");
- caption.className = "sr-only";
- caption.textContent = firstDesc.textContent;
- return [img, caption];
- }
- return [img];
- }
-
- async function makeMermaidError(text) {
- let errorMessage = "";
- try {
- await mermaid.parse(text);
- } catch (err) {
- errorMessage = `${err}`;
- }
-
- const result = document.createElement("details");
- result.className = 'jp-RenderedMermaid-Details';
- const summary = document.createElement("summary");
- summary.className = 'jp-RenderedMermaid-Summary';
- const pre = document.createElement("pre");
- const code = document.createElement("code");
- code.innerText = text;
- pre.appendChild(code);
- summary.appendChild(pre);
- result.appendChild(summary);
-
- const warning = document.createElement("pre");
- warning.innerText = errorMessage;
- result.appendChild(warning);
- return [result];
- }
-
- async function renderOneMarmaid(src) {
- const id = `jp-mermaid-${_nextMermaidId++}`;
- const parent = src.parentNode;
- let raw = src.textContent.trim();
- const el = document.createElement("div");
- el.style.visibility = "hidden";
- document.body.appendChild(el);
- let results = null;
- let output = null;
- try {
- let { svg } = await mermaid.render(id, raw, el);
- svg = cleanMermaidSvg(svg);
- results = makeMermaidImage(svg);
- output = document.createElement("figure");
- results.map(output.appendChild, output);
- } catch (err) {
- parent.classList.add("jp-mod-warning");
- results = await makeMermaidError(raw);
- output = results[0];
- } finally {
- el.remove();
- }
- parent.classList.add("jp-RenderedMermaid");
- parent.appendChild(output);
- }
-
-
- /**
- * Post-process to ensure mermaid diagrams contain only valid SVG and XHTML.
- */
- function cleanMermaidSvg(svg) {
- return svg.replace(RE_VOID_ELEMENT, replaceVoidElement);
- }
-
-
- /**
- * A regular expression for all void elements, which may include attributes and
- * a slash.
- *
- * @see https://developer.mozilla.org/en-US/docs/Glossary/Void_element
- *
- * Of these, only `<br>` is generated by Mermaid in place of `\n`,
- * but _any_ "malformed" tag will break the SVG rendering entirely.
- */
- const RE_VOID_ELEMENT =
- /<\s*(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)\s*([^>]*?)\s*>/gi;
-
- /**
- * Ensure a void element is closed with a slash, preserving any attributes.
- */
- function replaceVoidElement(match, tag, rest) {
- rest = rest.trim();
- if (!rest.endsWith('/')) {
- rest = `${rest} /`;
- }
- return `<${tag} ${rest}>`;
- }
-
- void Promise.all([...diagrams].map(renderOneMarmaid));
- });
-</script>
-<style>
- .jp-Mermaid:not(.jp-RenderedMermaid) {
- display: none;
- }
-
- .jp-RenderedMermaid {
- overflow: auto;
- display: flex;
- }
-
- .jp-RenderedMermaid.jp-mod-warning {
- width: auto;
- padding: 0.5em;
- margin-top: 0.5em;
- border: var(--jp-border-width) solid var(--jp-warn-color2);
- border-radius: var(--jp-border-radius);
- color: var(--jp-ui-font-color1);
- font-size: var(--jp-ui-font-size1);
- white-space: pre-wrap;
- word-wrap: break-word;
- }
-
- .jp-RenderedMermaid figure {
- margin: 0;
- overflow: auto;
- max-width: 100%;
- }
-
- .jp-RenderedMermaid img {
- max-width: 100%;
- }
-
- .jp-RenderedMermaid-Details > pre {
- margin-top: 1em;
- }
-
- .jp-RenderedMermaid-Summary {
- color: var(--jp-warn-color2);
- }
-
- .jp-RenderedMermaid:not(.jp-mod-warning) pre {
- display: none;
- }
-
- .jp-RenderedMermaid-Summary > pre {
- display: inline-block;
- white-space: normal;
- }
-</style>
-<!-- End of mermaid configuration --><div class="jupyter-wrapper">
-<div class="jp-Notebook" data-jp-theme-light="true" data-jp-theme-name="JupyterLab Light">
-<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=1932983e-1cd2-41d0-a5eb-0537b3ac3feb">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
-</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
-<h1 id="sedonadb-guide">SedonaDB Guide<a class="anchor-link" href="#sedonadb-guide">¶</a></h1><p>This page explains how to process vector data with SedonaDB.</p>
-<p>You will learn how to create SedonaDB DataFrames, run spatial queries, and perform I/O operations with various types of files.</p>
-<p>Let’s start by establishing a SedonaDB connection.</p>
-<h2 id="establish-sedonadb-connection">Establish SedonaDB connection<a class="anchor-link" href="#establish-sedonadb-connection">¶</a></h2><p>Here’s how to create the SedonaDB connection:</p>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=53c3b7a8-c42a-407a-a454-6ee1e943fbcc">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [2]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-1">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">sedonadb</span>
-
-<span class="n">sd</span> <span class="o">=</span> <span class="n">sedonadb</span><span class="o">.</span><span class="n">connect</span><span class="p">()</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-1">import sedonadb
-
-sd = sedonadb.connect()</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=7aeaa60f-2325-418c-8e72-4344bd4a75fe">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
-</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
-<p>Now let’s see how to create SedonaDB DataFrames.</p>
-<h2 id="create-sedonadb-dataframe">Create SedonaDB DataFrame<a class="anchor-link" href="#create-sedonadb-dataframe">¶</a></h2><p><strong>Manually creating SedonaDB DataFrame</strong></p>
-<p>Here’s how to manually create a SedonaDB DataFrame:</p>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=b3377767-d747-407c-92c0-8786c1998131">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [3]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-2">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="n">df</span> <span class="o">=</span> <span class="n">sd</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s2">"""</span>
+<!---
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+--><h1 id="working-with-vector-data">Working with Vector Data<a class="headerlink" href="#working-with-vector-data" title="Permanent link">¶</a></h1>
+<p>Process vector data using SedonaDB. You will learn to create DataFrames, run spatial queries, and manage file I/O. Let's begin by connecting to SedonaDB.</p>
+<p>Let's start by establishing a SedonaDB connection.</p>
+<h2 id="establish-sedonadb-connection">Establish SedonaDB connection<a class="headerlink" href="#establish-sedonadb-connection" title="Permanent link">¶</a></h2>
+<p>Here's how to create the SedonaDB connection:</p>
+<div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">sedona.db</span>
+
+<span class="n">sd</span> <span class="o">=</span> <span class="n">sedona</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">connect</span><span class="p">()</span>
+</code></pre></div>
+<p>Now, let's see how to create SedonaDB dataframes.</p>
+<h2 id="create-sedonadb-dataframe">Create SedonaDB DataFrame<a class="headerlink" href="#create-sedonadb-dataframe" title="Permanent link">¶</a></h2>
+<p><strong>Manually creating SedonaDB DataFrame</strong></p>
+<p>Here's how to manually create a SedonaDB DataFrame:</p>
+<div class="highlight"><pre><span></span><code><span class="n">df</span> <span class="o">=</span> <span class="n">sd</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s2">"""</span>
<span class="s2">SELECT * FROM (VALUES</span>
<span class="s2"> ('one', ST_GeomFromWkt('POINT(1 2)')),</span>
<span class="s2"> ('two', ST_GeomFromWkt('POLYGON((-74.0 40.7, -74.0 40.8, -73.9 40.8, -73.9 40.7, -74.0 40.7))')),</span>
<span class="s2"> ('three', ST_GeomFromWkt('LINESTRING(-74.0060 40.7128, -73.9352 40.7306, -73.8561 40.8484)')))</span>
<span class="s2">AS t(val, point)"""</span><span class="p">)</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-2">df = sd.sql("""
-SELECT * FROM (VALUES
- ('one', ST_GeomFromWkt('POINT(1 2)')),
- ('two', ST_GeomFromWkt('POLYGON((-74.0 40.7, -74.0 40.8, -73.9 40.8, -73.9 40.7, -74.0 40.7))')),
- ('three', ST_GeomFromWkt('LINESTRING(-74.0060 40.7128, -73.9352 40.7306, -73.8561 40.8484)')))
-AS t(val, point)""")</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=0f9e1319-2e7a-4d98-9df0-47a9a73cfff3">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
-</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
+</code></pre></div>
<p>Check the type of the DataFrame.</p>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=e8be30ab-4818-4db8-bae2-83e973ad1b77">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [4]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-3">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="nb">type</span><span class="p">(</span><span class="n">df</span><span class="p">)</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-3">type(df)</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell-outputWrapper">
-<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
-</div>
-<div class="jp-OutputArea jp-Cell-outputArea">
-<div class="jp-OutputArea-child jp-OutputArea-executeResult">
-<div class="jp-OutputPrompt jp-OutputArea-prompt">Out[4]:</div>
-<div class="jp-RenderedText jp-OutputArea-output jp-OutputArea-executeResult" data-mime-type="text/plain" tabindex="0">
-<pre>sedonadb.dataframe.DataFrame</pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=8225ed1f-45a4-4915-a582-8ae191ec53ed">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
-</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
+<div class="highlight"><pre><span></span><code><span class="nb">type</span><span class="p">(</span><span class="n">df</span><span class="p">)</span>
+</code></pre></div>
+<div class="codehilite"><pre><span></span><code>sedonadb.dataframe.DataFrame
+</code></pre></div>
+
<p><strong>Create SedonaDB DataFrame from files in S3</strong></p>
-<p>For most production applications, you will create SedonaDB DataFrames by reading data from a file. Let’s see how to read GeoParquet files in AWS S3 into a SedonaDB DataFrame.</p>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=151df287-4b2d-433e-9769-c3378df03b1b">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [5]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-4">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="n">sd</span><span class="o">.</span><span class="n">read_parquet</span><span class="p">(</span>
+<p>For most production applications, you will create SedonaDB DataFrames by reading data from a file. Let's see how to read GeoParquet files in AWS S3 into a SedonaDB DataFrame.</p>
+<div class="highlight"><pre><span></span><code><span class="n">sd</span><span class="o">.</span><span class="n">read_parquet</span><span class="p">(</span>
<span class="s2">"s3://overturemaps-us-west-2/release/2025-08-20.0/theme=divisions/type=division_area/"</span><span class="p">,</span>
<span class="n">options</span><span class="o">=</span><span class="p">{</span><span class="s2">"aws.skip_signature"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">"aws.region"</span><span class="p">:</span> <span class="s2">"us-west-2"</span><span class="p">},</span>
<span class="p">)</span><span class="o">.</span><span class="n">to_view</span><span class="p">(</span><span class="s2">"division_area"</span><span class="p">)</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-4">sd.read_parquet(
- "s3://overturemaps-us-west-2/release/2025-08-20.0/theme=divisions/type=division_area/",
- options={"aws.skip_signature": True, "aws.region": "us-west-2"},
-).to_view("division_area")</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=858fcc66-816d-4c71-8875-82b74169eccd">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
-</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
-<p>Let’s now run some spatial queries.</p>
-<p><strong>Read from GeoPandas DataFrame</strong></p>
+</code></pre></div>
+<p>Now, let's run some spatial queries.</p>
+<h3 id="read-from-geopandas-dataframe">Read from GeoPandas DataFrame<a class="headerlink" href="#read-from-geopandas-dataframe" title="Permanent link">¶</a></h3>
<p>This section shows how to convert a GeoPandas DataFrame into a SedonaDB DataFrame.</p>
<p>Start by reading a FlatGeoBuf file into a GeoPandas DataFrame:</p>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=b81549f2-0f58-49e4-9011-8de6578c2b0e">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [12]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-5">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">geopandas</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">gpd</span>
+<div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">geopandas</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">gpd</span>
<span class="n">path</span> <span class="o">=</span> <span class="s2">"https://raw.githubusercontent.com/geoarrow/geoarrow-data/v0.2.0/natural-earth/files/natural-earth_cities.fgb"</span>
<span class="n">gdf</span> <span class="o">=</span> <span class="n">gpd</span><span class="o">.</span><span class="n">read_file</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-5">import geopandas as gpd
-
-path = "https://raw.githubusercontent.com/geoarrow/geoarrow-data/v0.2.0/natural-earth/files/natural-earth_cities.fgb"
-gdf = gpd.read_file(path)</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=2265f94b-ccb3-4634-8c52-a8799c68c76a">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
-</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
+</code></pre></div>
<p>Now convert the GeoPandas DataFrame to a SedonaDB DataFrame and view three rows of content:</p>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=0e4819db-bf58-42d7-8b5b-f272d0f19266">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [7]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-6">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="n">df</span> <span class="o">=</span> <span class="n">sd</span><span class="o">.</span><span class="n">create_data_frame</span><span class="p">(</span><span class="n">gdf</span><span class="p">)</span>
+<div class="highlight"><pre><span></span><code><span class="n">df</span> <span class="o">=</span> <span class="n">sd</span><span class="o">.</span><span class="n">create_data_frame</span><span class="p">(</span><span class="n">gdf</span><span class="p">)</span>
<span class="n">df</span><span class="o">.</span><span class="n">show</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-6">df = sd.create_data_frame(gdf)
-df.show(3)</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell-outputWrapper">
-<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
-</div>
-<div class="jp-OutputArea jp-Cell-outputArea">
-<div class="jp-OutputArea-child">
-<div class="jp-OutputPrompt jp-OutputArea-prompt"></div>
-<div class="jp-RenderedText jp-OutputArea-output" data-mime-type="text/plain" tabindex="0">
-<pre>┌──────────────┬──────────────────────────────┐
+</code></pre></div>
+<div class="codehilite"><pre><span></span><code>┌──────────────┬──────────────────────────────┐
│ name ┆ geometry │
│ utf8 ┆ geometry │
╞══════════════╪══════════════════════════════╡
@@ -1752,45 +1241,13 @@ df.show(3)</div>
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ Vaduz ┆ POINT(9.5166695 47.1337238) │
└──────────────┴──────────────────────────────┘
-</pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=6890bcc3-f3bd-4c47-bf86-2607bed5e480">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
-</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
-<h2 id="spatial-queries">Spatial queries<a class="anchor-link" href="#spatial-queries">¶</a></h2><p>Let’s see how to run spatial operations like filtering, joins, and clustering algorithms.</p>
-<p><em><strong>Spatial filtering</strong></em></p>
-<p>Let’s run a spatial filtering operation to fetch all the objects in the following polygon:</p>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=8c8a4b48-8c4e-412e-900f-8c0f6f4ccc1d">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [8]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-7">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="n">nova_scotia_bbox_wkt</span> <span class="o">=</span> <span class="p">(</span>
+</code></pre></div>
+
+<h2 id="spatial-queries">Spatial queries<a class="headerlink" href="#spatial-queries" title="Permanent link">¶</a></h2>
+<p>Let's see how to run spatial operations like filtering, joins, and clustering algorithms.</p>
+<h3 id="spatial-filtering">Spatial filtering<a class="headerlink" href="#spatial-filtering" title="Permanent link">¶</a></h3>
+<p>Let's run a spatial filtering operation to fetch all the objects in the following polygon:</p>
+<div class="highlight"><pre><span></span><code><span class="n">nova_scotia_bbox_wkt</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">"POLYGON((-66.5 43.4, -66.5 47.1, -59.8 47.1, -59.8 43.4, -66.5 43.4))"</span>
<span class="p">)</span>
@@ -1801,80 +1258,25 @@ df.show(3)</div>
<span class="s2">"""</span><span class="p">)</span>
<span class="n">ns</span><span class="o">.</span><span class="n">show</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-7">nova_scotia_bbox_wkt = (
- "POLYGON((-66.5 43.4, -66.5 47.1, -59.8 47.1, -59.8 43.4, -66.5 43.4))"
-)
-
-ns = sd.sql(f"""
-SELECT country, region, geometry
-FROM division_area
-WHERE ST_Intersects(geometry, ST_SetSRID(ST_GeomFromText('{nova_scotia_bbox_wkt}'), 4326))
-""")
-
-ns.show(3)</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell-outputWrapper">
-<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
-</div>
-<div class="jp-OutputArea jp-Cell-outputArea">
-<div class="jp-OutputArea-child">
-<div class="jp-OutputPrompt jp-OutputArea-prompt"></div>
-<div class="jp-RenderedText jp-OutputArea-output" data-mime-type="text/plain" tabindex="0">
-<pre>┌──────────┬──────────┬────────────────────────────────────────────────────────────────────────────┐
-│ country ┆ region ┆ geometry │
-│ utf8view ┆ utf8view ┆ geometry │
-╞══════════╪══════════╪════════════════════════════════════════════════════════════════════════════╡
-│ CA ┆ CA-NS ┆ POLYGON((-66.0528452 43.4531336,-66.0883401 43.3978188,-65.9647654 43.361… │
-├╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ CA ┆ CA-NS ┆ POLYGON((-66.0222822 43.5166842,-66.0252286 43.5100071,-66.0528452 43.453… │
-├╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
-│ CA ┆ CA-NS ┆ POLYGON((-65.7451389 43.5336263,-65.7450818 43.5347004,-65.7449545 43.535… │
-└──────────┴──────────┴────────────────────────────────────────────────────────────────────────────┘
-</pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=32076e01-d807-40ed-8457-9d8c4244e89f">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
-</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
-<p>You can see it only includes the divisions in the Nova Scotia area. Skip to the visualization section to see how this data can be graphed on a map.</p>
-<p><em><strong>K-nearest neighbors (KNN) joins</strong></em></p>
-<p>Create <code>restaurants</code> and <code>customers</code> tables so we can demonstrate the KNN join functionality.</p>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=deaa36db-2fee-4ba2-ab79-1dc756cb1655">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [9]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-8">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="n">df</span> <span class="o">=</span> <span class="n">sd</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s2">"""</span>
+</code></pre></div>
+<div class="codehilite"><pre><span></span><code><span class="err">┌──────────┬──────────┬────────────────────────────────────────────────────────────────────────────┐</span>
+<span class="err">│</span><span class="w"> </span><span class="n">country</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="n">region</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="n">geometry</span><span class="w"> </span><span class="err">│</span>
+<span class="err">│</span><span class="w"> </span><span class="n">utf8view</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="n">utf8view</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="n">geometry</span><span class="w"> </span><span class="err">│</span>
+<span class="err">╞══════════╪══════════╪════════════════════════════════════════════════════════════════════════════╡</span>
+<span class="err">│</span><span class="w"> </span><span class="n">CA</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="n">CA</span><span class="o">-</span><span class="n">NS</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="n">POLYGON</span><span class="p">((</span><span class="o">-</span><span class="mf">66.0528452</span><span class="w"> </span><span class="mf">43.4531336</span><span class="p" [...]
+<span class="err">├╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤</span>
+<span class="err">│</span><span class="w"> </span><span class="n">CA</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="n">CA</span><span class="o">-</span><span class="n">NS</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="n">POLYGON</span><span class="p">((</span><span class="o">-</span><span class="mf">66.0222822</span><span class="w"> </span><span class="mf">43.5166842</span><span class="p" [...]
+<span class="err">├╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤</span>
+<span class="err">│</span><span class="w"> </span><span class="n">CA</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="n">CA</span><span class="o">-</span><span class="n">NS</span><span class="w"> </span><span class="err">┆</span><span class="w"> </span><span class="n">POLYGON</span><span class="p">((</span><span class="o">-</span><span class="mf">65.7451389</span><span class="w"> </span><span class="mf">43.5336263</span><span class="p" [...]
+<span class="err">└──────────┴──────────┴────────────────────────────────────────────────────────────────────────────┘</span>
+</code></pre></div>
+
+<p>You can see it only includes the divisions in the Nova Scotia area.</p>
+<h3 id="k-nearest-neighbors-knn-joins">K-nearest neighbors (KNN) joins<a class="headerlink" href="#k-nearest-neighbors-knn-joins" title="Permanent link">¶</a></h3>
+<p>Create <code>restaurants</code> and <code>customers</code> views so we can demonstrate the KNN join functionality.</p>
+<div class="highlight"><pre><span></span><code><span class="n">df</span> <span class="o">=</span> <span class="n">sd</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s2">"""</span>
<span class="s2">SELECT name, ST_Point(lng, lat) AS location</span>
-<span class="s2">FROM (VALUES </span>
+<span class="s2">FROM (VALUES</span>
<span class="s2"> (101, -74.0, 40.7, 'Pizza Palace'),</span>
<span class="s2"> (102, -73.99, 40.69, 'Burger Barn'),</span>
<span class="s2"> (103, -74.02, 40.72, 'Taco Town'),</span>
@@ -1887,7 +1289,7 @@ ns.show(3)</div>
<span class="n">df</span> <span class="o">=</span> <span class="n">sd</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s2">"""</span>
<span class="s2">SELECT name, ST_Point(lng, lat) AS location</span>
-<span class="s2">FROM (VALUES </span>
+<span class="s2">FROM (VALUES</span>
<span class="s2"> (1, -74.0, 40.7, 'Alice'),</span>
<span class="s2"> (2, -73.9, 40.8, 'Bob'),</span>
<span class="s2"> (3, -74.1, 40.6, 'Carol')</span>
@@ -1895,69 +1297,10 @@ ns.show(3)</div>
<span class="s2">"""</span><span class="p">)</span>
<span class="n">sd</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s2">"drop view if exists customers"</span><span class="p">)</span>
<span class="n">df</span><span class="o">.</span><span class="n">to_view</span><span class="p">(</span><span class="s2">"customers"</span><span class="p">)</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-8">df = sd.sql("""
-SELECT name, ST_Point(lng, lat) AS location
-FROM (VALUES
- (101, -74.0, 40.7, 'Pizza Palace'),
- (102, -73.99, 40.69, 'Burger Barn'),
- (103, -74.02, 40.72, 'Taco Town'),
- (104, -73.98, 40.75, 'Sushi Spot'),
- (105, -74.05, 40.68, 'Deli Direct')
-) AS t(id, lng, lat, name)
-""")
-sd.sql("drop view if exists restaurants")
-df.to_view("restaurants")
-
-df = sd.sql("""
-SELECT name, ST_Point(lng, lat) AS location
-FROM (VALUES
- (1, -74.0, 40.7, 'Alice'),
- (2, -73.9, 40.8, 'Bob'),
- (3, -74.1, 40.6, 'Carol')
-) AS t(id, lng, lat, name)
-""")
-sd.sql("drop view if exists customers")
-df.to_view("customers")</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=e3bc4976-4245-432f-b265-7f6aa13f35b9">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [10]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-9">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="n">df</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-9">df.show()</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell-outputWrapper">
-<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
-</div>
-<div class="jp-OutputArea jp-Cell-outputArea">
-<div class="jp-OutputArea-child">
-<div class="jp-OutputPrompt jp-OutputArea-prompt"></div>
-<div class="jp-RenderedText jp-OutputArea-output" data-mime-type="text/plain" tabindex="0">
-<pre>┌───────┬───────────────────┐
+</code></pre></div>
+<div class="highlight"><pre><span></span><code><span class="n">df</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
+</code></pre></div>
+<div class="codehilite"><pre><span></span><code>┌───────┬───────────────────┐
│ name ┆ location │
│ utf8 ┆ geometry │
╞═══════╪═══════════════════╡
@@ -1967,43 +1310,10 @@ df.to_view("customers")</div>
├╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ Carol ┆ POINT(-74.1 40.6) │
└───────┴───────────────────┘
-</pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=9df227d6-0972-457a-87e3-5a89802c460f">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
-</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
+</code></pre></div>
+
<p>Perform a KNN join to identify the two restaurants that are nearest to each customer:</p>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=05565e15-ee18-431c-8fd2-673291d8d0ee">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [11]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-10">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="n">sd</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s2">"""</span>
+<div class="highlight"><pre><span></span><code><span class="n">sd</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s2">"""</span>
<span class="s2">SELECT</span>
<span class="s2"> c.name AS customer,</span>
<span class="s2"> r.name AS restaurant</span>
@@ -2011,27 +1321,8 @@ df.to_view("customers")</div>
<span class="s2">WHERE ST_KNN(c.location, r.location, 2, false)</span>
<span class="s2">ORDER BY c.name, r.name;</span>
<span class="s2">"""</span><span class="p">)</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-10">sd.sql("""
-SELECT
- c.name AS customer,
- r.name AS restaurant
-FROM customers c, restaurants r
-WHERE ST_KNN(c.location, r.location, 2, false)
-ORDER BY c.name, r.name;
-""").show()</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell-outputWrapper">
-<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
-</div>
-<div class="jp-OutputArea jp-Cell-outputArea">
-<div class="jp-OutputArea-child">
-<div class="jp-OutputPrompt jp-OutputArea-prompt"></div>
-<div class="jp-RenderedText jp-OutputArea-output" data-mime-type="text/plain" tabindex="0">
-<pre>┌──────────┬──────────────┐
+</code></pre></div>
+<div class="codehilite"><pre><span></span><code>┌──────────┬──────────────┐
│ customer ┆ restaurant │
│ utf8 ┆ utf8 │
╞══════════╪══════════════╡
@@ -2047,35 +1338,9 @@ ORDER BY c.name, r.name;
├╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ Carol ┆ Pizza Palace │
└──────────┴──────────────┘
-</pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=2e93fe6a-b0a7-4ec0-952c-dde9edcacdc4">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
-</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
-<p>Notice how each customer has two rows - one for each of the two closest restaurants.</p>
-<h2 id="files">Files<a class="anchor-link" href="#files">¶</a></h2><p>You can read GeoParquet files with SedonaDB, see the following example:</p>
-<div class="highlight"><pre><span></span><span class="n">df</span> <span class="o">=</span> <span class="n">sd</span><span class="o">.</span><span class="n">read_parquet</span><span class="p">(</span><span class="s2">"some_file.parquet"</span><span class="p">)</span>
-</pre></div>
-<p>Once you read the file, you can easily expose it as a view and query it with spatial SQL, as we demonstrated in the example above.</p>
-</div>
-</div>
-</div>
-</div>
-</div> <!-- jp-Notebook -->
-</div> <!-- jupyter-wrapper -->
+</code></pre></div>
- <style>
- ['pre { line-height: 125%; }\ntd.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\nspan.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\ntd.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\nspan.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\n.highlight-ipynb .hll { b [...]
- </style>
-
+<p>Notice how each customer has two rows - one for each of the two closest restaurants.</p>
@@ -2096,7 +1361,7 @@ ORDER BY c.name, r.name;
<span class="md-icon" title="Last update">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4 2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2z"></path></svg>
</span>
- <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-datetime" title="September 12, 2025 18:17:17 UTC">September 12, 2025 18:17:17</span>
+ <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-datetime" title="September 19, 2025 07:13:30 UTC">September 19, 2025 07:13:30</span>
</span>
@@ -2132,7 +1397,7 @@ ORDER BY c.name, r.name;
<nav class="md-footer__inner md-grid" aria-label="Footer">
- <a href=".." class="md-footer__link md-footer__link--prev" aria-label="Previous: Home">
+ <a href="../quickstart-python/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Python Quickstart">
<div class="md-footer__button md-icon">
<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"></path></svg>
@@ -2142,20 +1407,20 @@ ORDER BY c.name, r.name;
Previous
</span>
<div class="md-ellipsis">
- Home
+ Python Quickstart
</div>
</div>
</a>
- <a href="../quickstart-cli/" class="md-footer__link md-footer__link--next" aria-label="Next: CLI Quickstart">
+ <a href="../geopandas-interop/" class="md-footer__link md-footer__link--next" aria-label="Next: Working with GeoPandas">
<div class="md-footer__title">
<span class="md-footer__direction">
Next
</span>
<div class="md-ellipsis">
- CLI Quickstart
+ Working with GeoPandas
</div>
</div>
<div class="md-footer__button md-icon">
diff --git a/0.1.0/quickstart-python.ipynb b/0.1.0/quickstart-python.ipynb
new file mode 100644
index 0000000..3558e22
--- /dev/null
+++ b/0.1.0/quickstart-python.ipynb
@@ -0,0 +1,414 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "6a8168a4",
+ "metadata": {},
+ "source": [
+ "<!---\n",
+ " Licensed to the Apache Software Foundation (ASF) under one\n",
+ " or more contributor license agreements. See the NOTICE file\n",
+ " distributed with this work for additional information\n",
+ " regarding copyright ownership. The ASF licenses this file\n",
+ " to you under the Apache License, Version 2.0 (the\n",
+ " \"License\"); you may not use this file except in compliance\n",
+ " with the License. You may obtain a copy of the License at\n",
+ "\n",
+ " http://www.apache.org/licenses/LICENSE-2.0\n",
+ "\n",
+ " Unless required by applicable law or agreed to in writing,\n",
+ " software distributed under the License is distributed on an\n",
+ " \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n",
+ " KIND, either express or implied. See the License for the\n",
+ " specific language governing permissions and limitations\n",
+ " under the License.\n",
+ "-->\n",
+ "\n",
+ "# Python Quickstart\n",
+ "\n",
+ "SedonaDB for Python can be installed from [PyPI](https://pypi.org):\n",
+ "\n",
+ "```shell\n",
+ "pip install \"apache-sedona[db]\"\n",
+ "```\n",
+ "\n",
+ "If you can import the module and connect to a new session, you're good to go!"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "a06df76b",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "┌────────────┐\n",
+ "│ geom │\n",
+ "│ geometry │\n",
+ "╞════════════╡\n",
+ "│ POINT(0 1) │\n",
+ "└────────────┘\n"
+ ]
+ }
+ ],
+ "source": [
+ "import sedona.db\n",
+ "\n",
+ "sd = sedona.db.connect()\n",
+ "sd.sql(\"SELECT ST_Point(0, 1) as geom\").show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c0d775bd-4cd8-454e-8cb6-9983c5a7ded3",
+ "metadata": {},
+ "source": [
+ "## Point in polygon join"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "a6e1df61-c77f-4829-ab79-3d1b692408e5",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "cities = sd.read_parquet(\n",
+ " \"https://raw.githubusercontent.com/geoarrow/geoarrow-data/v0.2.0/natural-earth/files/natural-earth_cities_geo.parquet\"\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "ff571cec-5a35-46c1-b0d6-a40fad33a87b",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "┌──────────────┬───────────────────────────────┐\n",
+ "│ name ┆ geometry │\n",
+ "│ utf8view ┆ geometry │\n",
+ "╞══════════════╪═══════════════════════════════╡\n",
+ "│ Vatican City ┆ POINT(12.4533865 41.9032822) │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ San Marino ┆ POINT(12.4417702 43.9360958) │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Vaduz ┆ POINT(9.5166695 47.1337238) │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Lobamba ┆ POINT(31.1999971 -26.4666675) │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Luxembourg ┆ POINT(6.1300028 49.6116604) │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Palikir ┆ POINT(158.1499743 6.9166437) │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Majuro ┆ POINT(171.3800002 7.1030043) │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Funafuti ┆ POINT(179.2166471 -8.516652) │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Melekeok ┆ POINT(134.6265485 7.4873962) │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Bir Lehlou ┆ POINT(-9.6525222 26.1191667) │\n",
+ "└──────────────┴───────────────────────────────┘\n"
+ ]
+ }
+ ],
+ "source": [
+ "cities.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "d4741ac1-44aa-4ae0-b2b6-b68e985b5c44",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "countries = sd.read_parquet(\n",
+ " \"https://raw.githubusercontent.com/geoarrow/geoarrow-data/v0.2.0/natural-earth/files/natural-earth_countries_geo.parquet\"\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "aa7597b5-fb0b-42f2-be96-10a82b5dd76b",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "┌─────────────────────────────┬───────────────┬────────────────────────────────────────────────────┐\n",
+ "│ name ┆ continent ┆ geometry │\n",
+ "│ utf8view ┆ utf8view ┆ geometry │\n",
+ "╞═════════════════════════════╪═══════════════╪════════════════════════════════════════════════════╡\n",
+ "│ Fiji ┆ Oceania ┆ MULTIPOLYGON(((180 -16.067132663642447,180 -16.55… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ United Republic of Tanzania ┆ Africa ┆ POLYGON((33.90371119710453 -0.9500000000000001,34… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Western Sahara ┆ Africa ┆ POLYGON((-8.665589565454809 27.656425889592356,-8… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Canada ┆ North America ┆ MULTIPOLYGON(((-122.84000000000003 49.00000000000… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ United States of America ┆ North America ┆ MULTIPOLYGON(((-122.84000000000003 49.00000000000… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Kazakhstan ┆ Asia ┆ POLYGON((87.35997033076265 49.21498078062912,86.5… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Uzbekistan ┆ Asia ┆ POLYGON((55.96819135928291 41.30864166926936,55.9… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Papua New Guinea ┆ Oceania ┆ MULTIPOLYGON(((141.00021040259185 -2.600151055515… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Indonesia ┆ Asia ┆ MULTIPOLYGON(((141.00021040259185 -2.600151055515… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Argentina ┆ South America ┆ MULTIPOLYGON(((-68.63401022758323 -52.63637045887… │\n",
+ "└─────────────────────────────┴───────────────┴────────────────────────────────────────────────────┘\n"
+ ]
+ }
+ ],
+ "source": [
+ "countries.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "c18af1fa-3847-4a43-ba1b-2ce99e8505d3",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "cities.to_view(\"cities\")\n",
+ "countries.to_view(\"countries\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "2cf5941c-ff25-4288-bf0c-983f1cd8125b",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "┌───────────────┬──────────────────────┬─────────────────────┬───────────────┬─────────────────────┐\n",
+ "│ name ┆ geometry ┆ name ┆ continent ┆ geometry │\n",
+ "│ utf8view ┆ geometry ┆ utf8view ┆ utf8view ┆ geometry │\n",
+ "╞═══════════════╪══════════════════════╪═════════════════════╪═══════════════╪═════════════════════╡\n",
+ "│ Suva ┆ POINT(178.4417073 -… ┆ Fiji ┆ Oceania ┆ MULTIPOLYGON(((180… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Dodoma ┆ POINT(35.7500036 -6… ┆ United Republic of… ┆ Africa ┆ POLYGON((33.903711… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Dar es Salaam ┆ POINT(39.266396 -6.… ┆ United Republic of… ┆ Africa ┆ POLYGON((33.903711… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Bir Lehlou ┆ POINT(-9.6525222 26… ┆ Western Sahara ┆ Africa ┆ POLYGON((-8.665589… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Ottawa ┆ POINT(-75.7019612 4… ┆ Canada ┆ North America ┆ MULTIPOLYGON(((-12… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Vancouver ┆ POINT(-123.1235901 … ┆ Canada ┆ North America ┆ MULTIPOLYGON(((-12… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Toronto ┆ POINT(-79.389458554… ┆ Canada ┆ North America ┆ MULTIPOLYGON(((-12… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ San Francisco ┆ POINT(-122.39959956… ┆ United States of A… ┆ North America ┆ MULTIPOLYGON(((-12… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Denver ┆ POINT(-104.9859618 … ┆ United States of A… ┆ North America ┆ MULTIPOLYGON(((-12… │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ Houston ┆ POINT(-95.348436256… ┆ United States of A… ┆ North America ┆ MULTIPOLYGON(((-12… │\n",
+ "└───────────────┴──────────────────────┴─────────────────────┴───────────────┴─────────────────────┘\n"
+ ]
+ }
+ ],
+ "source": [
+ "# join the cities and countries tables\n",
+ "sd.sql(\"\"\"\n",
+ "select * from cities\n",
+ "join countries\n",
+ "where ST_Intersects(cities.geometry, countries.geometry)\n",
+ "\"\"\").show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6d4fcb29-35dd-4ff6-933d-e480f1698662",
+ "metadata": {},
+ "source": [
+ "## Manually create SedonaDB DataFrames"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8fd8cae5-0b77-4a09-8b85-33bcc6abb813",
+ "metadata": {},
+ "source": [
+ "Let's create a DataFrame with one string column and one geometry column to show some of the functionality of the SedonaDB Python interface."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "6dd816c7-fd3f-4358-b628-ef5e6940c95c",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df = sd.sql(\"\"\"\n",
+ "SELECT * FROM (VALUES\n",
+ " ('one', ST_GeomFromWkt('POINT(1 2)')),\n",
+ " ('two', ST_GeomFromWkt('POLYGON((-74.0 40.7, -74.0 40.8, -73.9 40.8, -73.9 40.7, -74.0 40.7))')),\n",
+ " ('three', ST_GeomFromWkt('LINESTRING(-74.0060 40.7128, -73.9352 40.7306, -73.8561 40.8484)')))\n",
+ "AS t(val, point)\"\"\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "fb566114-0f2c-45c7-bc94-2396542c2458",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "┌───────┬──────────────────────────────────────────────────────────────────────────────────────────┐\n",
+ "│ val ┆ point │\n",
+ "│ utf8 ┆ binary │\n",
+ "╞═══════╪══════════════════════════════════════════════════════════════════════════════════════════╡\n",
+ "│ one ┆ 0101000000000000000000f03f0000000000000040 │\n",
+ "├╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ two ┆ 0103000000010000000500000000000000008052c09a9999999959444000000000008052c06666666666664… │\n",
+ "├╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ three ┆ 010200000003000000aaf1d24d628052c05e4bc8073d5b444007ce1951da7b52c0933a014d845d4440c286a… │\n",
+ "└───────┴──────────────────────────────────────────────────────────────────────────────────────────┘\n"
+ ]
+ }
+ ],
+ "source": [
+ "df.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b051dbf5-2fdc-4cf7-9cfc-73d3ca5a5d94",
+ "metadata": {},
+ "source": [
+ "Verify that this object is a SedonaDB DataFrame."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "44574ca0-1a39-4018-9729-ae56c232013c",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "sedonadb.dataframe.DataFrame"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "type(df)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d6e7e7b0-bac3-4ce4-8839-a7fa3dd0b4c6",
+ "metadata": {},
+ "source": [
+ "Expose the DataFrame as a view and run a SQL operation on the geometry data."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "aac2295a-68fe-44c4-911a-e049f789ad35",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df.to_view(\"fun_table\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "de296b34",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "┌─────────────┬───────────┬─────────────┐\n",
+ "│ column_name ┆ data_type ┆ is_nullable │\n",
+ "│ utf8 ┆ utf8 ┆ utf8 │\n",
+ "╞═════════════╪═══════════╪═════════════╡\n",
+ "│ val ┆ Utf8 ┆ YES │\n",
+ "├╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ point ┆ Binary ┆ YES │\n",
+ "└─────────────┴───────────┴─────────────┘\n"
+ ]
+ }
+ ],
+ "source": [
+ "sd.sql(\"DESCRIBE fun_table\").show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "09eefd76-b325-4d58-8284-92c2340514b8",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "┌───────┬─────────────────────────────────────────────┬────────────────────────────────────────────┐\n",
+ "│ val ┆ point ┆ centroid │\n",
+ "│ utf8 ┆ binary ┆ geometry │\n",
+ "╞═══════╪═════════════════════════════════════════════╪════════════════════════════════════════════╡\n",
+ "│ one ┆ 0101000000000000000000f03f0000000000000040 ┆ POINT(1 2) │\n",
+ "├╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ two ┆ 0103000000010000000500000000000000008052c0… ┆ POINT(-73.95 40.75) │\n",
+ "├╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤\n",
+ "│ three ┆ 010200000003000000aaf1d24d628052c05e4bc807… ┆ POINT(-73.92111155675562 40.7664673976246… │\n",
+ "└───────┴─────────────────────────────────────────────┴────────────────────────────────────────────┘\n"
+ ]
+ }
+ ],
+ "source": [
+ "sd.sql(\"SELECT *, ST_Centroid(ST_GeomFromWKB(point)) as centroid from fun_table\").show()"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": ".venv (3.13.3)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.13.3"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/0.1.0/quickstart-python/index.html b/0.1.0/quickstart-python/index.html
index 7155019..c8b731a 100644
--- a/0.1.0/quickstart-python/index.html
+++ b/0.1.0/quickstart-python/index.html
@@ -7,11 +7,13 @@
+ <link rel="canonical" href="https://sedona.apache.org/sedonadb/latest/quickstart-python/">
- <link rel="prev" href="../quickstart-cli/">
+ <link rel="prev" href="..">
- <link rel="next" href="../development/">
+
+ <link rel="next" href="../programming-guide/">
<link rel="icon" href="../image/sedona_logo_symbol.png">
@@ -106,7 +108,7 @@
<nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="SedonaDB" class="md-header__button md-logo" aria-label="SedonaDB" data-md-component="logo">
- <img src="../image/sedona_logo_symbol_white.svg" alt="logo">
+ <img src="../image/sedona_logo_symbol.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
@@ -215,7 +217,7 @@
- Home
+ SedonaDB
</a>
</li>
@@ -229,9 +231,28 @@
+ <li class="md-tabs__item md-tabs__item--active">
+ <a href="./" class="md-tabs__link">
+
+
+
+
+
+ Python Quickstart
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
- <li class="md-tabs__item md-tabs__item--active">
+ <li class="md-tabs__item">
<a href="../programming-guide/" class="md-tabs__link">
@@ -298,6 +319,25 @@
+ <li class="md-tabs__item">
+ <a href="https://sedona.apache.org/latest/community/contact/" class="md-tabs__link">
+
+
+
+
+
+ Community
+
+ </a>
+ </li>
+
+
+
+
+
+
+
+
<li class="md-tabs__item">
<a href="https://sedona.apache.org/latest/asf/asf/" class="md-tabs__link">
@@ -324,7 +364,7 @@
- Return to Sedona Homepage
+ Sedona Homepage
</a>
</li>
@@ -361,7 +401,7 @@
<label class="md-nav__title" for="__drawer">
<a href=".." title="SedonaDB" class="md-nav__button md-logo" aria-label="SedonaDB" data-md-component="logo">
- <img src="../image/sedona_logo_symbol_white.svg" alt="logo">
+ <img src="../image/sedona_logo_symbol.png" alt="logo">
</a>
SedonaDB
@@ -393,7 +433,7 @@
<span class="md-ellipsis">
- Home
+ SedonaDB
</span>
@@ -411,27 +451,104 @@
+ <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">
+ Python Quickstart
+ </span>
+
+
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <a href="./" class="md-nav__link md-nav__link--active">
+
+
+
+ <span class="md-ellipsis">
+ Python Quickstart
+ </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="#point-in-polygon-join" class="md-nav__link">
+ <span class="md-ellipsis">
+ Point in polygon join
+ </span>
+ </a>
+
+</li>
+
+ <li class="md-nav__item">
+ <a href="#manually-create-sedonadb-dataframes" class="md-nav__link">
+ <span class="md-ellipsis">
+ Manually create SedonaDB DataFrames
+ </span>
+ </a>
+
+</li>
+
+ </ul>
+
+</nav>
+
+ </li>
+
+
-
-
+
+
+
+
+
+
+
+
+
- <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
+ <li class="md-nav__item md-nav__item--nested">
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" checked>
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3">
- <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="">
+ <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
@@ -444,8 +561,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="true">
- <label class="md-nav__title" for="__nav_2">
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
SedonaDB Guides
</label>
@@ -463,7 +580,7 @@
<span class="md-ellipsis">
- SedonaDB Guide
+ Working with Vector Data
</span>
@@ -481,12 +598,12 @@
<li class="md-nav__item">
- <a href="../quickstart-cli/" class="md-nav__link">
+ <a href="../geopandas-interop/" class="md-nav__link">
<span class="md-ellipsis">
- CLI Quickstart
+ Working with GeoPandas
</span>
@@ -501,89 +618,43 @@
-
-
-
- <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">
- Python Quickstart
-
- </span>
-
- <span class="md-nav__icon md-icon"></span>
- </label>
-
- <a href="./" class="md-nav__link md-nav__link--active">
+ <li class="md-nav__item">
+ <a href="../overture-examples/" class="md-nav__link">
<span class="md-ellipsis">
- Python Quickstart
+ Working with Overture
</span>
</a>
-
-
-
-<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
+ </li>
+
+
+
+
+
-
- <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="#point-in-polygon-join" class="md-nav__link">
- <span class="md-ellipsis">
- Point in polygon join
- </span>
- </a>
-
-</li>
-
- <li class="md-nav__item">
- <a href="#manually-create-sedonadb-dataframes" class="md-nav__link">
- <span class="md-ellipsis">
- Manually create SedonaDB DataFrames
- </span>
- </a>
+ <li class="md-nav__item">
+ <a href="../working-with-parquet-files/" class="md-nav__link">
+
-</li>
-
- <li class="md-nav__item">
- <a href="#interactive-mode" class="md-nav__link">
- <span class="md-ellipsis">
- Interactive mode
- </span>
- </a>
-</li>
-
- </ul>
+ <span class="md-ellipsis">
+ Working with Parquet Files
+
+ </span>
-</nav>
-
+
+ </a>
</li>
@@ -596,12 +667,12 @@
<li class="md-nav__item">
- <a href="../development/" class="md-nav__link">
+ <a href="../contributors-guide/" class="md-nav__link">
<span class="md-ellipsis">
- Development
+ Contributors Guide
</span>
@@ -639,10 +710,10 @@
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3">
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4">
- <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
+ <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
@@ -655,8 +726,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
- <label class="md-nav__title" for="__nav_3">
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
SedonaDB Reference
</label>
@@ -682,10 +753,10 @@
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_1">
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_1">
- <label class="md-nav__link" for="__nav_3_1" id="__nav_3_1_label" tabindex="0">
+ <label class="md-nav__link" for="__nav_4_1" id="__nav_4_1_label" tabindex="0">
@@ -698,8 +769,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_1_label" aria-expanded="false">
- <label class="md-nav__title" for="__nav_3_1">
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_1_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4_1">
<span class="md-nav__icon md-icon"></span>
Python
</label>
@@ -756,10 +827,10 @@
- <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2">
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_2">
- <label class="md-nav__link" for="__nav_3_2" id="__nav_3_2_label" tabindex="0">
+ <label class="md-nav__link" for="__nav_4_2" id="__nav_4_2_label" tabindex="0">
@@ -772,8 +843,8 @@
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_2_label" aria-expanded="false">
- <label class="md-nav__title" for="__nav_3_2">
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_2_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4_2">
<span class="md-nav__icon md-icon"></span>
SQL
</label>
@@ -825,19 +896,34 @@
+ </ul>
+ </nav>
+
+ </li>
+
+
-
+
+ </ul>
+ </nav>
+
+ </li>
+
+
+
+
+
<li class="md-nav__item">
- <a href="../reference/read-parquet-files/" class="md-nav__link">
+ <a href="https://sedona.apache.org/latest/blog/" class="md-nav__link">
<span class="md-ellipsis">
- Read Parquet Files
+ Blog
</span>
@@ -846,22 +932,6 @@
</li>
-
-
- </ul>
- </nav>
-
- </li>
-
-
-
-
- </ul>
- </nav>
-
- </li>
-
-
@@ -870,12 +940,12 @@
<li class="md-nav__item">
- <a href="https://sedona.apache.org/latest/blog/" class="md-nav__link">
+ <a href="https://sedona.apache.org/latest/community/contact/" class="md-nav__link">
<span class="md-ellipsis">
- Blog
+ Community
</span>
@@ -919,7 +989,7 @@
<span class="md-ellipsis">
- Return to Sedona Homepage
+ Sedona Homepage
</span>
@@ -971,15 +1041,6 @@
</span>
</a>
-</li>
-
- <li class="md-nav__item">
- <a href="#interactive-mode" class="md-nav__link">
- <span class="md-ellipsis">
- Interactive mode
- </span>
- </a>
-
</li>
</ul>
@@ -998,7 +1059,7 @@
- <a href="https://github.com/apache/sedona-db/edit/master/docs/quickstart-python.ipynb" title="Edit this page" class="md-content__button md-icon" rel="edit">
+ <a href="https://github.com/apache/sedona-db/blob/main/docs/quickstart-python.md" title="Edit this page" class="md-content__button md-icon" rel="edit">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"></path></svg>
</a>
@@ -1006,584 +1067,51 @@
-<script>
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global = global || self, global.ClipboardCopyElement = factory());
- }(this, function () { 'use strict';
-
- function createNode(text) {
- const node = document.createElement('pre');
- node.style.width = '1px';
- node.style.height = '1px';
- node.style.position = 'fixed';
- node.style.top = '5px';
- node.textContent = text;
- return node;
- }
-
- function copyNode(node) {
- if ('clipboard' in navigator) {
- // eslint-disable-next-line flowtype/no-flow-fix-me-comments
- // $FlowFixMe Clipboard is not defined in Flow yet.
- return navigator.clipboard.writeText(node.textContent);
- }
-
- const selection = getSelection();
-
- if (selection == null) {
- return Promise.reject(new Error());
- }
-
- selection.removeAllRanges();
- const range = document.createRange();
- range.selectNodeContents(node);
- selection.addRange(range);
- document.execCommand('copy');
- selection.removeAllRanges();
- return Promise.resolve();
- }
- function copyText(text) {
- if ('clipboard' in navigator) {
- // eslint-disable-next-line flowtype/no-flow-fix-me-comments
- // $FlowFixMe Clipboard is not defined in Flow yet.
- return navigator.clipboard.writeText(text);
- }
-
- const body = document.body;
-
- if (!body) {
- return Promise.reject(new Error());
- }
-
- const node = createNode(text);
- body.appendChild(node);
- copyNode(node);
- body.removeChild(node);
- return Promise.resolve();
- }
-
- function copy(button) {
- const id = button.getAttribute('for');
- const text = button.getAttribute('value');
-
- function trigger() {
- button.dispatchEvent(new CustomEvent('clipboard-copy', {
- bubbles: true
- }));
- }
-
- if (text) {
- copyText(text).then(trigger);
- } else if (id) {
- const root = 'getRootNode' in Element.prototype ? button.getRootNode() : button.ownerDocument;
- if (!(root instanceof Document || 'ShadowRoot' in window && root instanceof ShadowRoot)) return;
- const node = root.getElementById(id);
- if (node) copyTarget(node).then(trigger);
- }
- }
-
- function copyTarget(content) {
- if (content instanceof HTMLInputElement || content instanceof HTMLTextAreaElement) {
- return copyText(content.value);
- } else if (content instanceof HTMLAnchorElement && content.hasAttribute('href')) {
- return copyText(content.href);
- } else {
- return copyNode(content);
- }
- }
-
- function clicked(event) {
- const button = event.currentTarget;
-
- if (button instanceof HTMLElement) {
- copy(button);
- }
- }
-
- function keydown(event) {
- if (event.key === ' ' || event.key === 'Enter') {
- const button = event.currentTarget;
-
- if (button instanceof HTMLElement) {
- event.preventDefault();
- copy(button);
- }
- }
- }
-
- function focused(event) {
- event.currentTarget.addEventListener('keydown', keydown);
- }
-
- function blurred(event) {
- event.currentTarget.removeEventListener('keydown', keydown);
- }
-
- class ClipboardCopyElement extends HTMLElement {
- constructor() {
- super();
- this.addEventListener('click', clicked);
- this.addEventListener('focus', focused);
- this.addEventListener('blur', blurred);
- }
-
- connectedCallback() {
- if (!this.hasAttribute('tabindex')) {
- this.setAttribute('tabindex', '0');
- }
-
- if (!this.hasAttribute('role')) {
- this.setAttribute('role', 'button');
- }
- }
-
- get value() {
- return this.getAttribute('value') || '';
- }
-
- set value(text) {
- this.setAttribute('value', text);
- }
-
- }
-
- if (!window.customElements.get('clipboard-copy')) {
- window.ClipboardCopyElement = ClipboardCopyElement;
- window.customElements.define('clipboard-copy', ClipboardCopyElement);
- }
-
- return ClipboardCopyElement;
-
- }));
-</script>
-<script>
- document.addEventListener('clipboard-copy', function(event) {
- const notice = event.target.querySelector('.notice')
- notice.hidden = false
- setTimeout(function() {
- notice.hidden = true
- }, 1000)
- })
-</script>
-<style type="text/css">
- pre { line-height: 125%; }
-td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
-span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
-td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
-span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
-.highlight-ipynb .hll { background-color: var(--jp-cell-editor-active-background) }
-.highlight-ipynb { background: var(--jp-cell-editor-background); color: var(--jp-mirror-editor-variable-color) }
-.highlight-ipynb .c { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment */
-.highlight-ipynb .err { color: var(--jp-mirror-editor-error-color) } /* Error */
-.highlight-ipynb .k { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword */
-.highlight-ipynb .o { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator */
-.highlight-ipynb .p { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation */
-.highlight-ipynb .ch { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Hashbang */
-.highlight-ipynb .cm { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Multiline */
-.highlight-ipynb .cp { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Preproc */
-.highlight-ipynb .cpf { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.PreprocFile */
-.highlight-ipynb .c1 { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Single */
-.highlight-ipynb .cs { color: var(--jp-mirror-editor-comment-color); font-style: italic } /* Comment.Special */
-.highlight-ipynb .kc { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Constant */
-.highlight-ipynb .kd { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Declaration */
-.highlight-ipynb .kn { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Namespace */
-.highlight-ipynb .kp { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Pseudo */
-.highlight-ipynb .kr { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Reserved */
-.highlight-ipynb .kt { color: var(--jp-mirror-editor-keyword-color); font-weight: bold } /* Keyword.Type */
-.highlight-ipynb .m { color: var(--jp-mirror-editor-number-color) } /* Literal.Number */
-.highlight-ipynb .s { color: var(--jp-mirror-editor-string-color) } /* Literal.String */
-.highlight-ipynb .ow { color: var(--jp-mirror-editor-operator-color); font-weight: bold } /* Operator.Word */
-.highlight-ipynb .pm { color: var(--jp-mirror-editor-punctuation-color) } /* Punctuation.Marker */
-.highlight-ipynb .w { color: var(--jp-mirror-editor-variable-color) } /* Text.Whitespace */
-.highlight-ipynb .mb { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Bin */
-.highlight-ipynb .mf { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Float */
-.highlight-ipynb .mh { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Hex */
-.highlight-ipynb .mi { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer */
-.highlight-ipynb .mo { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Oct */
-.highlight-ipynb .sa { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Affix */
-.highlight-ipynb .sb { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Backtick */
-.highlight-ipynb .sc { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Char */
-.highlight-ipynb .dl { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Delimiter */
-.highlight-ipynb .sd { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Doc */
-.highlight-ipynb .s2 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Double */
-.highlight-ipynb .se { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Escape */
-.highlight-ipynb .sh { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Heredoc */
-.highlight-ipynb .si { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Interpol */
-.highlight-ipynb .sx { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Other */
-.highlight-ipynb .sr { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Regex */
-.highlight-ipynb .s1 { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Single */
-.highlight-ipynb .ss { color: var(--jp-mirror-editor-string-color) } /* Literal.String.Symbol */
-.highlight-ipynb .il { color: var(--jp-mirror-editor-number-color) } /* Literal.Number.Integer.Long */
- </style>
-<style type="text/css">
-@charset "UTF-8";.jupyter-wrapper{--md-red-50: #ffebee;--md-red-100: #ffcdd2;--md-red-200: #ef9a9a;--md-red-300: #e57373;--md-red-400: #ef5350;--md-red-500: #f44336;--md-red-600: #e53935;--md-red-700: #d32f2f;--md-red-800: #c62828;--md-red-900: #b71c1c;--md-red-A100: #ff8a80;--md-red-A200: #ff5252;--md-red-A400: #ff1744;--md-red-A700: #d50000;--md-pink-50: #fce4ec;--md-pink-100: #f8bbd0;--md-pink-200: #f48fb1;--md-pink-300: #f06292;--md-pink-400: #ec407a;--md-pink-500: #e91e63;--md-pink- [...]
-</style>
-<style type="text/css">
-.jupyter-wrapper{--jp-shadow-base-lightness: 0;--jp-shadow-umbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), .2 );--jp-shadow-penumbra-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), .14 );--jp-shadow-ambient-color: rgba( var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), var(--jp-shadow-base-lightness), .12 );--jp-elevation-z0: none;--jp-elev [...]
-</style>
-<!-- Load mathjax -->
-<script src=""> </script>
-<!-- MathJax configuration -->
-<script type="text/x-mathjax-config">
- init_mathjax = function() {
- if (window.MathJax) {
- // MathJax loaded
- MathJax.Hub.Config({
- TeX: {
- equationNumbers: {
- autoNumber: "AMS",
- useLabelIds: true
- }
- },
- tex2jax: {
- inlineMath: [ ['$','$'], ["\\(","\\)"] ],
- displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
- processEscapes: true,
- processEnvironments: true
- },
- displayAlign: 'center',
- messageStyle: 'none',
- CommonHTML: {
- linebreaks: {
- automatic: true
- }
- }
- });
-
- MathJax.Hub.Queue(["Typeset", MathJax.Hub]);
- }
- }
- init_mathjax();
- </script>
-<!-- End of mathjax configuration --><script type="module">
- document.addEventListener("DOMContentLoaded", async () => {
- const diagrams = document.querySelectorAll(".jp-Mermaid > pre.mermaid");
- // do not load mermaidjs if not needed
- if (!diagrams.length) {
- return;
- }
- const mermaid = (await import("https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.7.0/mermaid.esm.min.mjs")).default;
- const parser = new DOMParser();
-
- mermaid.initialize({
- maxTextSize: 100000,
- maxEdges: 100000,
- startOnLoad: false,
- fontFamily: window
- .getComputedStyle(document.body)
- .getPropertyValue("--jp-ui-font-family"),
- theme: document.querySelector("body[data-jp-theme-light='true']")
- ? "default"
- : "dark",
- });
-
- let _nextMermaidId = 0;
-
- function makeMermaidImage(svg) {
- const img = document.createElement("img");
- const doc = parser.parseFromString(svg, "image/svg+xml");
- const svgEl = doc.querySelector("svg");
- const { maxWidth } = svgEl?.style || {};
- const firstTitle = doc.querySelector("title");
- const firstDesc = doc.querySelector("desc");
-
- img.setAttribute("src", `data:image/svg+xml,${encodeURIComponent(svg)}`);
- if (maxWidth) {
- img.width = parseInt(maxWidth);
- }
- if (firstTitle) {
- img.setAttribute("alt", firstTitle.textContent);
- }
- if (firstDesc) {
- const caption = document.createElement("figcaption");
- caption.className = "sr-only";
- caption.textContent = firstDesc.textContent;
- return [img, caption];
- }
- return [img];
- }
-
- async function makeMermaidError(text) {
- let errorMessage = "";
- try {
- await mermaid.parse(text);
- } catch (err) {
- errorMessage = `${err}`;
- }
-
- const result = document.createElement("details");
- result.className = 'jp-RenderedMermaid-Details';
- const summary = document.createElement("summary");
- summary.className = 'jp-RenderedMermaid-Summary';
- const pre = document.createElement("pre");
- const code = document.createElement("code");
- code.innerText = text;
- pre.appendChild(code);
- summary.appendChild(pre);
- result.appendChild(summary);
-
- const warning = document.createElement("pre");
- warning.innerText = errorMessage;
- result.appendChild(warning);
- return [result];
- }
-
- async function renderOneMarmaid(src) {
- const id = `jp-mermaid-${_nextMermaidId++}`;
- const parent = src.parentNode;
- let raw = src.textContent.trim();
- const el = document.createElement("div");
- el.style.visibility = "hidden";
- document.body.appendChild(el);
- let results = null;
- let output = null;
- try {
- let { svg } = await mermaid.render(id, raw, el);
- svg = cleanMermaidSvg(svg);
- results = makeMermaidImage(svg);
- output = document.createElement("figure");
- results.map(output.appendChild, output);
- } catch (err) {
- parent.classList.add("jp-mod-warning");
- results = await makeMermaidError(raw);
- output = results[0];
- } finally {
- el.remove();
- }
- parent.classList.add("jp-RenderedMermaid");
- parent.appendChild(output);
- }
-
-
- /**
- * Post-process to ensure mermaid diagrams contain only valid SVG and XHTML.
- */
- function cleanMermaidSvg(svg) {
- return svg.replace(RE_VOID_ELEMENT, replaceVoidElement);
- }
-
-
- /**
- * A regular expression for all void elements, which may include attributes and
- * a slash.
- *
- * @see https://developer.mozilla.org/en-US/docs/Glossary/Void_element
- *
- * Of these, only `<br>` is generated by Mermaid in place of `\n`,
- * but _any_ "malformed" tag will break the SVG rendering entirely.
- */
- const RE_VOID_ELEMENT =
- /<\s*(area|base|br|col|embed|hr|img|input|link|meta|param|source|track|wbr)\s*([^>]*?)\s*>/gi;
-
- /**
- * Ensure a void element is closed with a slash, preserving any attributes.
- */
- function replaceVoidElement(match, tag, rest) {
- rest = rest.trim();
- if (!rest.endsWith('/')) {
- rest = `${rest} /`;
- }
- return `<${tag} ${rest}>`;
- }
-
- void Promise.all([...diagrams].map(renderOneMarmaid));
- });
-</script>
-<style>
- .jp-Mermaid:not(.jp-RenderedMermaid) {
- display: none;
- }
-
- .jp-RenderedMermaid {
- overflow: auto;
- display: flex;
- }
-
- .jp-RenderedMermaid.jp-mod-warning {
- width: auto;
- padding: 0.5em;
- margin-top: 0.5em;
- border: var(--jp-border-width) solid var(--jp-warn-color2);
- border-radius: var(--jp-border-radius);
- color: var(--jp-ui-font-color1);
- font-size: var(--jp-ui-font-size1);
- white-space: pre-wrap;
- word-wrap: break-word;
- }
-
- .jp-RenderedMermaid figure {
- margin: 0;
- overflow: auto;
- max-width: 100%;
- }
-
- .jp-RenderedMermaid img {
- max-width: 100%;
- }
-
- .jp-RenderedMermaid-Details > pre {
- margin-top: 1em;
- }
-
- .jp-RenderedMermaid-Summary {
- color: var(--jp-warn-color2);
- }
-
- .jp-RenderedMermaid:not(.jp-mod-warning) pre {
- display: none;
- }
-
- .jp-RenderedMermaid-Summary > pre {
- display: inline-block;
- white-space: normal;
- }
-</style>
-<!-- End of mermaid configuration --><div class="jupyter-wrapper">
-<div class="jp-Notebook" data-jp-theme-light="true" data-jp-theme-name="JupyterLab Light">
-<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=6a8168a4">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
-</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
-<h1 id="python-quickstart">Python Quickstart<a class="anchor-link" href="#python-quickstart">¶</a></h1><p>SedonaDB for Python can be installed from <a href="https://pypi.org">PyPI</a>:</p>
-<div class="highlight"><pre><span></span>pip<span class="w"> </span>install<span class="w"> </span>apache-sedona<span class="o">[</span>db<span class="o">]</span>
-</pre></div>
+<!---
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+--><h1 id="python-quickstart">Python Quickstart<a class="headerlink" href="#python-quickstart" title="Permanent link">¶</a></h1>
+<p>SedonaDB for Python can be installed from <a href="https://pypi.org">PyPI</a>:</p>
+<div class="highlight"><pre><span></span><code>pip<span class="w"> </span>install<span class="w"> </span><span class="s2">"apache-sedona[db]"</span>
+</code></pre></div>
<p>If you can import the module and connect to a new session, you're good to go!</p>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=a06df76b">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [1]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-1">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">sedonadb</span>
+<div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">sedona.db</span>
-<span class="n">sd</span> <span class="o">=</span> <span class="n">sedonadb</span><span class="o">.</span><span class="n">connect</span><span class="p">()</span>
+<span class="n">sd</span> <span class="o">=</span> <span class="n">sedona</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">connect</span><span class="p">()</span>
<span class="n">sd</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s2">"SELECT ST_Point(0, 1) as geom"</span><span class="p">)</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-1">import sedonadb
-
-sd = sedonadb.connect()
-sd.sql("SELECT ST_Point(0, 1) as geom").show()</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell-outputWrapper">
-<div class="jp-Collapser jp-OutputCollapser jp-Cell-outputCollapser">
-</div>
-<div class="jp-OutputArea jp-Cell-outputArea">
-<div class="jp-OutputArea-child">
-<div class="jp-OutputPrompt jp-OutputArea-prompt"></div>
-<div class="jp-RenderedText jp-OutputArea-output" data-mime-type="text/plain" tabindex="0">
-<pre>┌────────────┐
+</code></pre></div>
+<div class="codehilite"><pre><span></span><code>┌────────────┐
│ geom │
-│ wkb │
+│ geometry │
╞════════════╡
│ POINT(0 1) │
└────────────┘
-</pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="jp-Cell jp-MarkdownCell jp-Notebook-cell" id="cell-id=c0d775bd-4cd8-454e-8cb6-9983c5a7ded3">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea"><div class="jp-InputPrompt jp-InputArea-prompt">
-</div><div class="jp-RenderedHTMLCommon jp-RenderedMarkdown jp-MarkdownOutput" data-mime-type="text/markdown">
-<h2 id="point-in-polygon-join">Point in polygon join<a class="anchor-link" href="#point-in-polygon-join">¶</a></h2>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell jp-mod-noOutputs" id="cell-id=a6e1df61-c77f-4829-ab79-3d1b692408e5">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [2]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-2">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="n">cities</span> <span class="o">=</span> <span class="n">sd</span><span class="o">.</span><span class="n">read_parquet</span><span class="p">(</span>
+</code></pre></div>
+
+<h2 id="point-in-polygon-join">Point in polygon join<a class="headerlink" href="#point-in-polygon-join" title="Permanent link">¶</a></h2>
+<div class="highlight"><pre><span></span><code><span class="n">cities</span> <span class="o">=</span> <span class="n">sd</span><span class="o">.</span><span class="n">read_parquet</span><span class="p">(</span>
<span class="s2">"https://raw.githubusercontent.com/geoarrow/geoarrow-data/v0.2.0/natural-earth/files/natural-earth_cities_geo.parquet"</span>
<span class="p">)</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-2">cities = sd.read_parquet(
- "https://raw.githubusercontent.com/geoarrow/geoarrow-data/v0.2.0/natural-earth/files/natural-earth_cities_geo.parquet"
-)</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div><div class="jp-Cell jp-CodeCell jp-Notebook-cell">
-<div class="jp-Cell jp-CodeCell jp-Notebook-cell" id="cell-id=ff571cec-5a35-46c1-b0d6-a40fad33a87b">
-<div class="jp-Cell-inputWrapper" tabindex="0">
-<div class="jp-Collapser jp-InputCollapser jp-Cell-inputCollapser">
-</div>
-<div class="jp-InputArea jp-Cell-inputArea">
-<div class="jp-InputPrompt jp-InputArea-prompt">In [3]:</div><div class="jp-CodeMirrorEditor jp-Editor jp-InputArea-editor" data-type="inline">
-<div class="CodeMirror cm-s-jupyter">
-<div class="zeroclipboard-container">
-<clipboard-copy ,="" aria-label="Copy to Clipboard" for="cell-3">
-<div>
-<span class="notice" hidden="">Copied!</span>
-<svg aria-hidden="true" class="clipboard-copy-icon" data-view-component="true" height="20" version="1.1" viewBox="0 0 16 16" width="20">
-<path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-<path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z" fill="currentColor" fill-rule="evenodd"></path>
-</svg>
-</div>
-</clipboard-copy>
-</div>
-<div class="highlight-ipynb hl-python"><pre><span></span><span class="n">cities</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
-</pre></div>
-<div class="clipboard-copy-txt" id="cell-3">cities.show()</div>
-</div>
-</div>
... 6031 lines suppressed ...