| |
| <!doctype html> |
| <html lang="zh" class="no-js"> |
| <head> |
| <meta name="robots" content="noindex, follow"> |
| |
| <meta charset="utf-8"> |
| <meta name="viewport" content="width=device-width,initial-scale=1"> |
| |
| <meta name="description" content="Apache Sedona 是一个用于处理大规模空间数据的集群计算系统。Sedona 在 Apache Spark、Apache Flink 和 Snowflake 等现有集群计算系统的基础上,提供了一套开箱即用的分布式空间数据集和空间 SQL,可以高效地跨机器加载、处理和分析大规模空间数据。"> |
| |
| |
| |
| <link rel="canonical" href="https://sedona.apache.org/latest/zh/tutorial/sql/"> |
| |
| |
| <link rel="prev" href="../../setup/azure-synapse-analytics/"> |
| |
| |
| <link rel="next" href="../raster/"> |
| |
| |
| |
| <link rel="alternate" href="../../../tutorial/sql/" hreflang="en"> |
| |
| <link rel="alternate" href="./" hreflang="zh"> |
| |
| |
| |
| <link rel="icon" href="../../../favicon.ico"> |
| <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.7"> |
| |
| |
| |
| <title>空间 DataFrame / SQL 应用 - Apache Sedona</title> |
| |
| |
| |
| <link rel="stylesheet" href="../../../assets/stylesheets/main.ec1eaa64.min.css"> |
| |
| |
| <link rel="stylesheet" href="../../../assets/stylesheets/palette.ab4e12ef.min.css"> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <link rel="stylesheet" href="../../../assets/stylesheets/extra.min.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> |
| |
| |
| |
| |
| |
| |
| <meta name="google-site-verification" content="o2riomKLozYKc2IQivWGsrI2unuyQs7hXiAD4kGMCTQ" /> |
| <link rel="apple-touch-icon" sizes="180x180" href="../../../favicons/apple-touch-icon.png"> |
| <link rel="icon" type="image/png" sizes="32x32" href="../../../favicons/favicon-32x32.png"> |
| <link rel="icon" type="image/png" sizes="16x16" href="../../../favicons/favicon-16x16.png"> |
| <link rel="manifest" href="../../../favicons/site.webmanifest"> |
| <meta name="msapplication-config" content="../../../favicons/browserconfig.xml"> |
| <meta name="msapplication-TileColor" content="#ca463a"> |
| <meta name="theme-color" content="#ca463a"> |
| |
| </head> |
| |
| |
| |
| |
| |
| |
| |
| <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="deep-orange" data-md-color-accent="green"> |
| |
| |
| <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> |
| <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> |
| <label class="md-overlay" for="__drawer"></label> |
| <div data-md-component="skip"> |
| |
| |
| <a href="#_1" class="md-skip"> |
| 跳转至 |
| </a> |
| |
| </div> |
| <div data-md-component="announce"> |
| |
| </div> |
| |
| <div data-md-color-scheme="default" data-md-component="outdated" hidden> |
| |
| <aside class="md-banner md-banner--warning"> |
| <div class="md-banner__inner md-grid md-typeset"> |
| 您当前查看的不是最新稳定版本。 |
| <a href="../../../.."> |
| <strong>点击此处跳转到最新稳定版本。</strong> |
| </a> |
| |
| </div> |
| <script>var el=document.querySelector("[data-md-component=outdated]"),base=new URL("../../.."),outdated=__md_get("__outdated",sessionStorage,base);!0===outdated&&el&&(el.hidden=!1)</script> |
| </aside> |
| |
| </div> |
| |
| <div style="background: #CA463A; color: white; text-align: center; padding: 0.5rem;"> |
| <a href="../../../setup/release-notes/" title="Announcement">🎉 Apache Sedona 1.9.1 已正式发布!🗺️ 新增 Geography SQL 函数、Box2D 与 Box3D 类型、栅格 Python UDF 等。查看发布说明 →</a> |
| </div> |
| |
| <!-- |
| Copyright (c) 2016-2025 Martin Donath <martin.donath@squidfunk.com> |
| |
| Permission is hereby granted, free of charge, to any person obtaining a copy |
| of this software and associated documentation files (the "Software"), to |
| deal in the Software without restriction, including without limitation the |
| rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
| sell copies of the Software, and to permit persons to whom the Software is |
| furnished to do so, subject to the following conditions: |
| |
| The above copyright notice and this permission notice shall be included in |
| all copies or substantial portions of the Software. |
| |
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE |
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
| FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
| IN THE SOFTWARE. |
| --> |
| |
| <!-- Determine classes --> |
| |
| |
| |
| |
| |
| <!-- Header --> |
| <header class="md-header md-header--shadow md-header--lifted" data-md-component="header"> |
| <nav |
| class="md-header__inner md-grid container" |
| aria-label="页眉" |
| > |
| <div class="left-part"> |
| |
| <!-- Button to open drawer --> |
| <label class="md-header__button md-icon" for="__drawer"> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> |
| </label> |
| |
| <!-- Link to home --> |
| <a |
| href="../../" |
| title="Apache Sedona" |
| class="header-logo" |
| aria-label="Apache Sedona" |
| data-md-component="logo" |
| > |
| |
| <img src="../../../image/logo.svg" alt="logo"> |
| |
| </a> |
| |
| <!-- Header title --> |
| <div class="md-header__title" data-md-component="header-title"> |
| <div class="md-header__ellipsis"> |
| <div class="md-header__topic"> |
| <span class="md-ellipsis"> |
| Apache Sedona |
| </span> |
| </div> |
| <div class="md-header__topic" data-md-component="header-topic"> |
| <span class="md-ellipsis"> |
| |
| 空间 DataFrame / SQL 应用 |
| |
| </span> |
| </div> |
| </div> |
| </div> |
| |
| <!-- Color palette toggle --> |
| |
| |
| |
| |
| <!-- User preference: color palette --> |
| |
| </div> |
| <div class="right-part"> |
| |
| <!-- Site language selector --> |
| |
| |
| <details class="sd-lang-switch"> |
| <summary class="sd-lang-switch__trigger" aria-label="选择当前语言" title="选择当前语言"> |
| <span class="sd-lang-switch__glyph" aria-hidden="true"><span class="sd-lang-switch__glyph-cn">文</span><span class="sd-lang-switch__glyph-en">A</span></span> |
| </summary> |
| <ul class="sd-lang-switch__menu"><li> |
| <a |
| href="../../../tutorial/sql/" |
| hreflang="en" |
| lang="en" |
| target="_self" |
| class="sd-lang-switch__link" |
| |
| >English</a> |
| </li> |
| <li> |
| <a |
| href="./" |
| hreflang="zh" |
| lang="zh" |
| target="_self" |
| class="sd-lang-switch__link sd-lang-switch__link--active" |
| aria-current="true" |
| >中文</a> |
| </li> |
| |
| </ul> |
| </details> |
| |
| |
| |
| <!-- Button to open search modal --> |
| |
| |
| |
| <!-- Check if search is actually enabled - see https://t.ly/DT_0V --> |
| |
| <label class="md-header__button md-icon btn-search" for="__search"> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> |
| </label> |
| |
| <!-- Search interface --> |
| <div class="md-search" data-md-component="search" role="dialog"> |
| <label class="md-search__overlay" for="__search"></label> |
| <div class="md-search__inner" role="search"> |
| <form class="md-search__form" name="search"> |
| <input type="text" class="md-search__input" name="query" aria-label="搜索" placeholder="搜索" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required> |
| <label class="md-search__icon md-icon" for="__search"> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> |
| </label> |
| <nav class="md-search__options" aria-label="查找"> |
| |
| <a href="javascript:void(0)" class="md-search__icon md-icon" title="分享" aria-label="分享" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1"> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg> |
| </a> |
| |
| <button type="reset" class="md-search__icon md-icon" title="清空当前内容" aria-label="清空当前内容" tabindex="-1"> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg> |
| </button> |
| </nav> |
| |
| <div class="md-search__suggest" data-md-component="search-suggest"></div> |
| |
| </form> |
| <div class="md-search__output"> |
| <div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix> |
| <div class="md-search-result" data-md-component="search-result"> |
| <div class="md-search-result__meta"> |
| 正在初始化搜索引擎 |
| </div> |
| <ol class="md-search-result__list" role="presentation"></ol> |
| </div> |
| </div> |
| </div> |
| </div> |
| </div> |
| |
| |
| |
| <!-- Repository information --> |
| |
| <div class="md-header__source"> |
| |
| <a href="https://github.com/apache/sedona" title="apache/sedona" class="md-source" target="_blank" rel="noopener"> |
| <div class="md-source__icon md-icon"> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> |
| </div> |
| <div class="md-source__repository">apache/sedona</div> |
| </a> |
| |
| </div> |
| |
| </div> |
| </nav> |
| |
| <!-- Navigation tabs (sticky) --> |
| |
| |
| |
| <nav class="md-tabs" aria-label="标签" data-md-component="tabs"> |
| <div class="md-grid"> |
| <ul class="md-tabs__list"> |
| |
| |
| |
| |
| |
| |
| <li class="md-tabs__item"> |
| <a href="../../" class="md-tabs__link"> |
| |
| |
| |
| |
| |
| 首页 |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-tabs__item"> |
| <a href="https://sedona.apache.org/sedonadb/" class="md-tabs__link"> |
| |
| |
| |
| |
| |
| SedonaDB |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-tabs__item md-tabs__item--active"> |
| <a href="../../sedonaspark/" class="md-tabs__link"> |
| |
| |
| |
| SedonaSpark |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-tabs__item"> |
| <a href="../../sedonaflink/" class="md-tabs__link"> |
| |
| |
| |
| SedonaFlink |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-tabs__item"> |
| <a href="../../sedonasnow/" class="md-tabs__link"> |
| |
| |
| |
| SedonaSnow |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-tabs__item"> |
| <a href="https://sedona.apache.org/spatialbench/" class="md-tabs__link"> |
| |
| |
| |
| |
| |
| SpatialBench |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-tabs__item"> |
| <a href="../../blog/" class="md-tabs__link"> |
| |
| |
| |
| |
| |
| Blog |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-tabs__item"> |
| <a href="../../download/" class="md-tabs__link"> |
| |
| |
| |
| 社区 |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-tabs__item"> |
| <a href="../../asf/asf/" class="md-tabs__link"> |
| |
| |
| |
| Apache 软件基金会 |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </div> |
| </nav> |
| |
| |
| </header> |
| |
| |
| <div class="md-container" data-md-component="container"> |
| |
| |
| |
| |
| <main class="md-main" data-md-component="main"> |
| <div class="md-main__inner md-grid"> |
| |
| |
| |
| <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" > |
| <div class="md-sidebar__scrollwrap"> |
| <div class="md-sidebar__inner"> |
| |
| |
| |
| |
| |
| |
| |
| |
| <nav class="md-nav md-nav--primary md-nav--lifted" aria-label="导航栏" data-md-level="0"> |
| |
| <label class="md-nav__title" for="__drawer"> |
| <a href="../../" title="Apache Sedona" class="logo-link" aria-label="Apache Sedona" data-md-component="logo"> |
| <img src="../../../image/header/logo-mobile.svg" alt="" class="logo"> |
| </a> |
| </label> |
| |
| |
| <div class="md-nav__source"> |
| |
| <a href="https://github.com/apache/sedona" title="apache/sedona" class="md-source" target="_blank" rel="noopener"> |
| <div class="md-source__icon md-icon"> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> |
| </div> |
| <div class="md-source__repository">apache/sedona</div> |
| </a> |
| |
| </div> |
| |
| |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 首页 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="https://sedona.apache.org/sedonadb/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| SedonaDB |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <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_3" checked> |
| |
| |
| <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex=""> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| SedonaSpark |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <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> |
| |
| |
| SedonaSpark |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../sedonaspark/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 首页 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_2" id="__nav_3_2_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 安装 |
| |
| |
| |
| </span> |
| |
| |
| |
| <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"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| 安装 |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/overview/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 概述 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/modules/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 模块 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/platform/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 语言封装 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/maven-coordinates/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Maven Central 坐标 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/docker/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 在 Docker 中使用 Sedona |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2_6" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_2_6" id="__nav_3_2_6_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 在本地 Spark 集群中安装 Sedona |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_2_6_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3_2_6"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| 在本地 Spark 集群中安装 Sedona |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/install-scala/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 安装 Sedona Scala/Java |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/install-python/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 安装 Sedona Python |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../../api/rdocs" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 安装 Sedona R |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/zeppelin/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 安装 Sedona-Zeppelin |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/cluster/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 手动搭建 Spark 集群 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2_7" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_2_7" id="__nav_3_2_7_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 云平台 |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_2_7_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3_2_7"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| 云平台 |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/wherobots/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 在 Wherobots 上安装 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/databricks/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 在 Databricks 上安装 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/emr/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 在 AWS EMR 上安装 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/glue/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 在 AWS Glue 上安装 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/fabric/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 在 Microsoft Fabric 上安装 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/azure-synapse-analytics/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 在 Azure Synapse Analytics 上安装 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--active md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3" checked> |
| |
| |
| <label class="md-nav__link" for="__nav_3_3" id="__nav_3_3_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 编程指南 |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_3_label" aria-expanded="true"> |
| <label class="md-nav__title" for="__nav_3_3"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| 编程指南 |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <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"> |
| |
| |
| 空间 DataFrame / SQL 应用 |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <a href="./" class="md-nav__link md-nav__link--active"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 空间 DataFrame / SQL 应用 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| |
| |
| |
| <nav class="md-nav md-nav--secondary" aria-label="目录"> |
| |
| |
| |
| |
| <label class="md-nav__title" for="__toc"> |
| <span class="md-nav__icon md-icon"></span> |
| 目录 |
| </label> |
| <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> |
| |
| <li class="md-nav__item"> |
| <a href="#_1" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 配置依赖 |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#sedona" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 创建 Sedona 配置 |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#sedonacontext" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 初始化 SedonaContext |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#_2" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 从文本文件加载数据 |
| |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="从文本文件加载数据"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#dataframe" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 加载原始 DataFrame |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#geometry" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 创建 Geometry 类型列 |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#geojson" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 加载 GeoJSON 数据 |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#shapefile" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 加载 Shapefile |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#geoparquet" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 加载 GeoParquet |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#stac-catalog" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 从 STAC catalog 加载数据 |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#jdbc" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 从 JDBC 数据源加载数据 |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#geopackage" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 加载 GeoPackage |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#osm-pbf" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 加载 OSM PBF |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#_3" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 转换坐标参考系 |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#dbscan" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 使用 DBSCAN 进行聚类 |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#local-outlier-factorlof" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 计算 Local Outlier Factor(LOF) |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#getis-ord-gi" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 执行 Getis-Ord Gi(*) 热点分析 |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#_4" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 执行空间查询 |
| |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="执行空间查询"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#_5" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 范围查询 |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#knn" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| KNN 查询 |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#_6" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 连接查询 |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#knn_1" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| KNN 连接查询 |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#_7" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 其他查询 |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#_8" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 可视化查询结果 |
| |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="可视化查询结果"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#sedonapydeck" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| SedonaPyDeck |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#sedonakepler" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| SedonaKepler |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#udf" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 创建用户自定义函数(UDF) |
| |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="创建用户自定义函数(UDF)"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#geometry-primitive" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Geometry 转 primitive |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#geometry-geometry" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Geometry 转 Geometry |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#geometry-primitive-geometry" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Geometry + primitive 转 Geometry |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#geometry-primitive-geometry-primitive" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Geometry + primitive 转 Geometry + primitive |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#udf-python" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 空间向量化 UDF(仅 Python) |
| |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="空间向量化 UDF(仅 Python)"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#shapely-udf" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Shapely 标量 UDF |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#geoseries-udf" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| GeoSeries UDF |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#_9" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 保存到永久存储 |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#geojson_1" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 保存为 GeoJSON |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#geoparquet_1" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 保存为 GeoParquet |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#postgis" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 保存到 Postgis |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#dataframe-spatialrdd" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 在 DataFrame 与 SpatialRDD 之间互转 |
| |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="在 DataFrame 与 SpatialRDD 之间互转"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#dataframe-spatialrdd_1" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| DataFrame 转 SpatialRDD |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#spatialrdd-dataframe" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| SpatialRDD 转 DataFrame |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#spatialrdd-dataframe_1" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 保留空间分区的 SpatialRDD 转 DataFrame |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#spatialpairrdd-dataframe" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| SpatialPairRDD 转 DataFrame |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| </ul> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../raster/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 栅格 DataFrame / SQL 应用 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../sql-pure-sql/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 纯 SQL 环境 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../geopandas-api/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Sedona 上的 GeoPandas API |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../rdd/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 空间 RDD 应用 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../../api/rdocs" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Sedona R |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../geopandas-shapely/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 与 GeoPandas 和 Shapely 配合使用 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_8" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_3_8" id="__nav_3_3_8_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 文件 |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_3_8_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3_3_8"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| 文件 |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../files/csv-geometry-sedona-spark/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| CSV |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../files/geopackage-sedona-spark/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| GeoPackage |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../files/geoparquet-sedona-spark/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| GeoParquet |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../files/geojson-sedona-spark/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| GeoJSON |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../files/shapefiles-sedona-spark/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Shapefiles |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../files/geotiffmetadata-sedona-spark/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| GeoTIFF metadata |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../files/netcdfmetadata-sedona-spark/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| NetCDF metadata |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../files/stac-sedona-spark/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| STAC catalog |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_9" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_3_9" id="__nav_3_3_9_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 概念 |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_3_9_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3_3_9"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| 概念 |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../concepts/spatial-joins/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 空间连接 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../concepts/clustering-algorithms/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 聚类算法 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../concepts/distance-spark/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 距离 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_10" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_3_10" id="__nav_3_3_10_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 地图可视化 SQL 应用 |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_3_10_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3_3_10"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| 地图可视化 SQL 应用 |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../viz/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Scala/Java |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../zeppelin/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 使用 Apache Zeppelin |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../viz-gallery/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 案例库 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_11" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_3_11" id="__nav_3_3_11_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 性能调优 |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_3_11_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3_3_11"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| 性能调优 |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../benchmark/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 基准测试 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../Advanced-Tutorial-Tune-your-Application/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 调优 RDD 应用 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../storing-blobs-in-parquet/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 在 Parquet 文件中存储大型栅格几何对象 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_4" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_4" id="__nav_3_4_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| API |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_4_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3_4"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| API |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_4_1" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_4_1" id="__nav_3_4_1_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| SQL |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_4_1_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3_4_1"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| SQL |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/Overview/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 快速开始 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_4_1_2" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_4_1_2" id="__nav_3_4_1_2_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 矢量数据 |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="4" aria-labelledby="__nav_3_4_1_2_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3_4_1_2"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| 矢量数据 |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/Geometry-Functions/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 几何函数 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/box2d/Box2D-Functions/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Box2D 函数 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/box3d/Box3D-Functions/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Box3D 函数 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/geography/Geography-Functions/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 地理函数 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/DataFrameAPI/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| DataFrame 风格函数 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/Optimizer/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 查询优化 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/CRS-Transformation/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 坐标系转换 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/NearestNeighbourSearching/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 最近邻搜索 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/Spider/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Spider:Spatial Data Generator |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/Reading-legacy-parquet/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 读取旧版 Parquet 文件 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_4_1_2_11" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_4_1_2_11" id="__nav_3_4_1_2_11_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 可视化 |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="5" aria-labelledby="__nav_3_4_1_2_11_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3_4_1_2_11"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| 可视化 |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/Visualization-SedonaPyDeck/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| SedonaPyDeck |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/Visualization-SedonaKepler/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| SedonaKepler |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_4_1_3" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_4_1_3" id="__nav_3_4_1_3_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 栅格数据 |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="4" aria-labelledby="__nav_3_4_1_3_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3_4_1_3"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| 栅格数据 |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/Raster-Functions/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 栅格函数 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/Raster-map-algebra/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 栅格地图代数 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/Raster-UDF/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 栅格 UDF |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/Raster-affine-transformation/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 栅格仿射变换 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/sql/Parameter/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 参数 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_4_2" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_4_2" id="__nav_3_4_2_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| RDD(核心) |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_4_2_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3_4_2"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| RDD(核心) |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/java-api/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Scala/Java 文档 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_4_3" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_4_3" id="__nav_3_4_3_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 统计 |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_4_3_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3_4_3"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| 统计 |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/stats/sql/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| DataFrame |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_4_4" > |
| |
| |
| <label class="md-nav__link" for="__nav_3_4_4" id="__nav_3_4_4_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 可视化 |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_4_4_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_3_4_4"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| 可视化 |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/viz/sql/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| DataFrame/SQL |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/viz/java-api/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| RDD |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../../api/rdocs" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Sedona R |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../../api/pydocs" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Sedona Python |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/release-notes/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 发布说明 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" > |
| |
| |
| <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| SedonaFlink |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <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> |
| |
| |
| SedonaFlink |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../sedonaflink/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 首页 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_2" > |
| |
| |
| <label class="md-nav__link" for="__nav_4_2" id="__nav_4_2_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 安装 |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <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> |
| |
| |
| 安装 |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/flink/install-scala/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 安装 Sedona Scala/Java |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/flink/install-python/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 安装 Sedona Python |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/flink/modules/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 模块 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/flink/platform/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 语言封装 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_3" > |
| |
| |
| <label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 编程指南 |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_4_3"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| 编程指南 |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_3_1" > |
| |
| |
| <label class="md-nav__link" for="__nav_4_3_1" id="__nav_4_3_1_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 在 Apache Flink 上使用 Sedona |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_4_3_1_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_4_3_1"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| 在 Apache Flink 上使用 Sedona |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../flink/sql/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 空间 SQL 应用(Flink) |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../flink/pyflink-sql/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 空间 SQL 应用(PyFlink) |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_3_2" > |
| |
| |
| <label class="md-nav__link" for="__nav_4_3_2" id="__nav_4_3_2_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 示例 |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_4_3_2_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_4_3_2"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| 示例 |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../demo/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Scala/Java |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../jupyter-notebook/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Python |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_4" > |
| |
| |
| <label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| API |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_4_4"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| API |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_4_1" > |
| |
| |
| <label class="md-nav__link" for="__nav_4_4_1" id="__nav_4_4_1_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| SQL |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_4_4_1_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_4_4_1"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| SQL |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/flink/Overview/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 概述(Flink) |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/flink/Geometry-Functions/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 几何函数 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/flink/Geography-Functions/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 地理函数 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/release-notes/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 发布说明 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" > |
| |
| |
| <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| SedonaSnow |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_5"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| SedonaSnow |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../sedonasnow/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 首页 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_2" > |
| |
| |
| <label class="md-nav__link" for="__nav_5_2" id="__nav_5_2_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 安装 |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_2_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_5_2"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| 安装 |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/snowflake/install/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 安装 Sedona SQL |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../snowflake/sql/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 空间 SQL 应用(Snowflake) |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/snowflake/modules/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 模块 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_3" > |
| |
| |
| <label class="md-nav__link" for="__nav_5_3" id="__nav_5_3_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| API |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_3_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_5_3"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| API |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_3_1" > |
| |
| |
| <label class="md-nav__link" for="__nav_5_3_1" id="__nav_5_3_1_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| SQL |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_5_3_1_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_5_3_1"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| SQL |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/snowflake/vector-data/Overview/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 概述(Snowflake) |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../api/snowflake/vector-data/Geometry-Functions/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 几何函数 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/release-notes/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 发布说明 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="https://sedona.apache.org/spatialbench/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| SpatialBench |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../blog/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Blog |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8" > |
| |
| |
| <label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 社区 |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_8_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_8"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| 社区 |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../download/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 下载 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/release-notes/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 发布说明 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../setup/compile/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 编译源码 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../community/contact/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 社区 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_5" > |
| |
| |
| <label class="md-nav__link" for="__nav_8_5" id="__nav_8_5_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 贡献者指南 |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_8_5_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_8_5"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| 贡献者指南 |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../community/rule/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 规则 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../community/develop/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 开发 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../community/geopandas/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 为 Sedona 的 Geopandas API 贡献代码 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_8_6" > |
| |
| |
| <label class="md-nav__link" for="__nav_8_6" id="__nav_8_6_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 提交者指南 |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_8_6_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_8_6"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| 提交者指南 |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../community/contributor/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 项目管理委员会 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../community/release-manager/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 成为发布经理 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../community/snapshot/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 发布快照版本 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../community/publish/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 发布版本 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../community/vote/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 投票发布 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../community/publication/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 论文 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item md-nav__item--nested"> |
| |
| |
| |
| <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_9" > |
| |
| |
| <label class="md-nav__link" for="__nav_9" id="__nav_9_label" tabindex="0"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| Apache 软件基金会 |
| |
| |
| |
| </span> |
| |
| |
| |
| <span class="md-nav__icon md-icon"></span> |
| </label> |
| |
| <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_9_label" aria-expanded="false"> |
| <label class="md-nav__title" for="__nav_9"> |
| <span class="md-nav__icon md-icon"></span> |
| |
| |
| Apache 软件基金会 |
| |
| |
| </label> |
| <ul class="md-nav__list" data-md-scrollfix> |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../asf/asf/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 基金会 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="https://www.apache.org/licenses/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 许可证 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="https://www.apache.org/events/current-event" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 活动 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="https://www.apache.org/foundation/sponsorship.html" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 赞助 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="https://www.apache.org/foundation/thanks.html" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 致谢 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="https://www.apache.org/security/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 安全 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="https://privacy.apache.org/policies/privacy-policy-public.html" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 隐私 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <li class="md-nav__item"> |
| <a href="../../asf/telemetry/" class="md-nav__link"> |
| |
| |
| |
| <span class="md-ellipsis"> |
| |
| |
| 遥测 |
| |
| |
| |
| </span> |
| |
| |
| |
| </a> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| <li class="btn-group"> |
| <a href="#" class="btn btn-red"> |
| Get started |
| </a> |
| </li> |
| |
| </ul> |
| </nav> |
| </div> |
| </div> |
| </div> |
| |
| |
| |
| <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" > |
| <div class="md-sidebar__scrollwrap"> |
| <div class="md-sidebar__inner"> |
| |
| |
| <nav class="md-nav md-nav--secondary" aria-label="目录"> |
| |
| |
| |
| |
| <label class="md-nav__title" for="__toc"> |
| <span class="md-nav__icon md-icon"></span> |
| 目录 |
| </label> |
| <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> |
| |
| <li class="md-nav__item"> |
| <a href="#_1" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 配置依赖 |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#sedona" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 创建 Sedona 配置 |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#sedonacontext" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 初始化 SedonaContext |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#_2" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 从文本文件加载数据 |
| |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="从文本文件加载数据"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#dataframe" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 加载原始 DataFrame |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#geometry" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 创建 Geometry 类型列 |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#geojson" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 加载 GeoJSON 数据 |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#shapefile" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 加载 Shapefile |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#geoparquet" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 加载 GeoParquet |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#stac-catalog" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 从 STAC catalog 加载数据 |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#jdbc" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 从 JDBC 数据源加载数据 |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#geopackage" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 加载 GeoPackage |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#osm-pbf" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 加载 OSM PBF |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#_3" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 转换坐标参考系 |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#dbscan" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 使用 DBSCAN 进行聚类 |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#local-outlier-factorlof" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 计算 Local Outlier Factor(LOF) |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#getis-ord-gi" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 执行 Getis-Ord Gi(*) 热点分析 |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#_4" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 执行空间查询 |
| |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="执行空间查询"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#_5" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 范围查询 |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#knn" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| KNN 查询 |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#_6" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 连接查询 |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#knn_1" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| KNN 连接查询 |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#_7" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 其他查询 |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#_8" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 可视化查询结果 |
| |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="可视化查询结果"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#sedonapydeck" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| SedonaPyDeck |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#sedonakepler" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| SedonaKepler |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#udf" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 创建用户自定义函数(UDF) |
| |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="创建用户自定义函数(UDF)"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#geometry-primitive" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Geometry 转 primitive |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#geometry-geometry" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Geometry 转 Geometry |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#geometry-primitive-geometry" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Geometry + primitive 转 Geometry |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#geometry-primitive-geometry-primitive" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Geometry + primitive 转 Geometry + primitive |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#udf-python" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 空间向量化 UDF(仅 Python) |
| |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="空间向量化 UDF(仅 Python)"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#shapely-udf" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| Shapely 标量 UDF |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#geoseries-udf" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| GeoSeries UDF |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#_9" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 保存到永久存储 |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#geojson_1" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 保存为 GeoJSON |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#geoparquet_1" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 保存为 GeoParquet |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#postgis" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 保存到 Postgis |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#dataframe-spatialrdd" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 在 DataFrame 与 SpatialRDD 之间互转 |
| |
| </span> |
| </a> |
| |
| <nav class="md-nav" aria-label="在 DataFrame 与 SpatialRDD 之间互转"> |
| <ul class="md-nav__list"> |
| |
| <li class="md-nav__item"> |
| <a href="#dataframe-spatialrdd_1" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| DataFrame 转 SpatialRDD |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#spatialrdd-dataframe" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| SpatialRDD 转 DataFrame |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#spatialrdd-dataframe_1" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| 保留空间分区的 SpatialRDD 转 DataFrame |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| <li class="md-nav__item"> |
| <a href="#spatialpairrdd-dataframe" class="md-nav__link"> |
| <span class="md-ellipsis"> |
| |
| SpatialPairRDD 转 DataFrame |
| |
| </span> |
| </a> |
| |
| </li> |
| |
| </ul> |
| </nav> |
| |
| </li> |
| |
| </ul> |
| |
| </nav> |
| </div> |
| </div> |
| </div> |
| |
| |
| |
| |
| |
| |
| <div class="md-content" data-md-component="content"> |
| |
| <article class="md-content__inner md-typeset"> |
| |
| |
| |
| |
| |
| <a href="https://github.com/apache/sedona/edit/master/docs/tutorial/sql.zh.md" title="编辑此页" 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"/></svg> |
| </a> |
| |
| |
| |
| |
| <h1>空间 DataFrame / SQL 应用</h1> |
| |
| <!-- |
| 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. |
| --> |
| |
| <p>本页介绍如何使用 SedonaSQL 管理空间数据。</p> |
| <div class="admonition note"> |
| <p class="admonition-title">Note</p> |
| <p>Sedona 假定地理坐标按 lon/lat 顺序排列。如果您的数据是 lat/lon 顺序,请使用 <code>ST_FlipCoordinates</code> 交换 X 与 Y。</p> |
| </div> |
| <p>SedonaSQL 支持 SQL/MM Part3 空间 SQL 标准,提供四类 SQL 算子,所有算子都可以直接通过以下方式调用:</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="1:3"><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" /><div class="tabbed-labels"><label for="__tabbed_1_1">Scala</label><label for="__tabbed_1_2">Java</label><label for="__tabbed_1_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kd">var</span><span class="w"> </span><span class="n">myDataFrame</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="n">sql</span><span class="p">(</span><span class="s">"YOUR_SQL"</span><span class="p">)</span> |
| <span class="n">myDataFrame</span><span class="p">.</span><span class="n">createOrReplaceTempView</span><span class="p">(</span><span class="s">"spatialDf"</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">Dataset</span><span class="o"><</span><span class="n">Row</span><span class="o">></span><span class="w"> </span><span class="n">myDataFrame</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="na">sql</span><span class="p">(</span><span class="s">"YOUR_SQL"</span><span class="p">)</span> |
| <span class="n">myDataFrame</span><span class="p">.</span><span class="na">createOrReplaceTempView</span><span class="p">(</span><span class="s">"spatialDf"</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">myDataFrame</span> <span class="o">=</span> <span class="n">sedona</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="s2">"YOUR_SQL"</span><span class="p">)</span> |
| <span class="n">myDataFrame</span><span class="o">.</span><span class="n">createOrReplaceTempView</span><span class="p">(</span><span class="s2">"spatialDf"</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>SedonaSQL 详细 API 说明请参阅 <a href="../../api/sql/Overview/">SedonaSQL API</a>。示例 county 数据(即 <code>county_small.tsv</code>)可在 <a href="https://github.com/apache/sedona/tree/master/spark/common/src/test/resources">Sedona GitHub 仓库</a> 找到。</p> |
| <h2 id="_1">配置依赖<a class="headerlink" href="#_1" title="Permanent link">¶</a></h2> |
| <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">Scala/Java</label><label for="__tabbed_2_2">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <ol> |
| <li>阅读 <a href="../../setup/maven-coordinates/">Sedona Maven Central 坐标</a> 并在 build.sbt 或 pom.xml 中添加 Sedona 依赖。</li> |
| <li>在 build.sbt 或 pom.xml 中添加 <a href="https://mvnrepository.com/artifact/org.apache.spark/spark-core_2.11">Apache Spark core</a> 与 <a href="https://mvnrepository.com/artifact/org.apache.spark/spark-sql">Apache SparkSQL</a> 依赖。</li> |
| <li>参考 <a href="../demo/">SQL 示例项目</a>。</li> |
| </ol> |
| </div> |
| <div class="tabbed-block"> |
| <ol> |
| <li>请阅读 <a href="../../setup/install-python/">快速开始</a> 安装 Sedona Python。</li> |
| <li>本教程基于 <a href="../jupyter-notebook/">Sedona SQL Jupyter Notebook 示例</a>。</li> |
| </ol> |
| </div> |
| </div> |
| </div> |
| <h2 id="sedona">创建 Sedona 配置<a class="headerlink" href="#sedona" title="Permanent link">¶</a></h2> |
| <p>在程序起始处使用以下代码创建 Sedona 配置。如果您已经有了由 AWS EMR / Databricks / Microsoft Fabric 创建的 SparkSession(通常名为 <code>spark</code>),请==跳过此步骤==。</p> |
| <p>可以在 builder 中追加额外的 Spark 运行时配置,例如 <code>SedonaContext.builder().config("spark.sql.autoBroadcastJoinThreshold", "10485760")</code>。</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="3:3"><input checked="checked" id="__tabbed_3_1" name="__tabbed_3" type="radio" /><input id="__tabbed_3_2" name="__tabbed_3" type="radio" /><input id="__tabbed_3_3" name="__tabbed_3" type="radio" /><div class="tabbed-labels"><label for="__tabbed_3_1">Scala</label><label for="__tabbed_3_2">Java</label><label for="__tabbed_3_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <p><div class="highlight"><pre><span></span><code><span class="k">import</span><span class="w"> </span><span class="nn">org</span><span class="p">.</span><span class="nn">apache</span><span class="p">.</span><span class="nn">sedona</span><span class="p">.</span><span class="nn">spark</span><span class="p">.</span><span class="nc">SedonaContext</span> |
| |
| <span class="kd">val</span><span class="w"> </span><span class="n">config</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">SedonaContext</span><span class="p">.</span><span class="n">builder</span><span class="p">()</span> |
| <span class="p">.</span><span class="n">master</span><span class="p">(</span><span class="s">"local[*]"</span><span class="p">)</span><span class="w"> </span><span class="c1">// 集群模式下请删除此行</span> |
| <span class="p">.</span><span class="n">appName</span><span class="p">(</span><span class="s">"readTestScala"</span><span class="p">)</span><span class="w"> </span><span class="c1">// 改成合适的名字</span> |
| <span class="p">.</span><span class="n">getOrCreate</span><span class="p">()</span> |
| </code></pre></div> |
| 如果同时使用 SedonaViz 与 SedonaSQL,请在 <code>SedonaContext.builder()</code> 之后追加以下行启用 Sedona Kryo 序列化器: |
| <div class="highlight"><pre><span></span><code><span class="p">.</span><span class="n">config</span><span class="p">(</span><span class="s">"spark.kryo.registrator"</span><span class="p">,</span><span class="w"> </span><span class="k">classOf</span><span class="p">[</span><span class="nc">SedonaVizKryoRegistrator</span><span class="p">].</span><span class="n">getName</span><span class="p">)</span><span class="w"> </span><span class="c1">// org.apache.sedona.viz.core.Serde.SedonaVizKryoRegistrator</span> |
| </code></pre></div></p> |
| </div> |
| <div class="tabbed-block"> |
| <p><div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.sedona.spark.SedonaContext</span><span class="p">;</span> |
| |
| <span class="n">SparkSession</span><span class="w"> </span><span class="n">config</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">SedonaContext</span><span class="p">.</span><span class="na">builder</span><span class="p">()</span> |
| <span class="p">.</span><span class="na">master</span><span class="p">(</span><span class="s">"local[*]"</span><span class="p">)</span><span class="w"> </span><span class="c1">// 集群模式下请删除此行</span> |
| <span class="p">.</span><span class="na">appName</span><span class="p">(</span><span class="s">"readTestJava"</span><span class="p">)</span><span class="w"> </span><span class="c1">// 改成合适的名字</span> |
| <span class="p">.</span><span class="na">getOrCreate</span><span class="p">()</span> |
| </code></pre></div> |
| 如果同时使用 SedonaViz 与 SedonaSQL,请在 <code>SedonaContext.builder()</code> 之后追加以下行启用 Sedona Kryo 序列化器: |
| <div class="highlight"><pre><span></span><code><span class="p">.</span><span class="na">config</span><span class="p">(</span><span class="s">"spark.kryo.registrator"</span><span class="p">,</span><span class="w"> </span><span class="n">SedonaVizKryoRegistrator</span><span class="p">.</span><span class="na">class</span><span class="p">.</span><span class="na">getName</span><span class="p">())</span><span class="w"> </span><span class="c1">// org.apache.sedona.viz.core.Serde.SedonaVizKryoRegistrator</span> |
| </code></pre></div></p> |
| </div> |
| <div class="tabbed-block"> |
| <p><div class="highlight"><pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark</span><span class="w"> </span><span class="kn">import</span> <span class="o">*</span> |
| |
| <span class="n">config</span> <span class="o">=</span> <span class="n">SedonaContext</span><span class="o">.</span><span class="n">builder</span><span class="p">()</span> <span class="o">.</span>\ |
| <span class="n">config</span><span class="p">(</span><span class="s1">'spark.jars.packages'</span><span class="p">,</span> |
| <span class="s1">'org.apache.sedona:sedona-spark-shaded-3.3_2.12:1.9.1,'</span> |
| <span class="s1">'org.datasyslab:geotools-wrapper:1.9.1-33.5'</span><span class="p">)</span><span class="o">.</span> \ |
| <span class="n">getOrCreate</span><span class="p">()</span> |
| </code></pre></div> |
| 如使用其他 Spark 版本,请将 sedona-spark-shaded 包名中的 <code>3.3</code> 替换为对应的 Spark major.minor 版本,例如 <code>sedona-spark-shaded-3.4_2.12:1.9.1</code>。</p> |
| </div> |
| </div> |
| </div> |
| <h2 id="sedonacontext">初始化 SedonaContext<a class="headerlink" href="#sedonacontext" title="Permanent link">¶</a></h2> |
| <p>在创建 Sedona 配置之后加上以下代码。如果您已经有了由 AWS EMR / Databricks / Microsoft Fabric 创建的 SparkSession(通常名为 <code>spark</code>),请改为调用 <code>sedona = SedonaContext.create(spark)</code>。</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="4:3"><input checked="checked" id="__tabbed_4_1" name="__tabbed_4" type="radio" /><input id="__tabbed_4_2" name="__tabbed_4" type="radio" /><input id="__tabbed_4_3" name="__tabbed_4" type="radio" /><div class="tabbed-labels"><label for="__tabbed_4_1">Scala</label><label for="__tabbed_4_2">Java</label><label for="__tabbed_4_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="k">import</span><span class="w"> </span><span class="nn">org</span><span class="p">.</span><span class="nn">apache</span><span class="p">.</span><span class="nn">sedona</span><span class="p">.</span><span class="nn">spark</span><span class="p">.</span><span class="nc">SedonaContext</span> |
| |
| <span class="kd">val</span><span class="w"> </span><span class="n">sedona</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">SedonaContext</span><span class="p">.</span><span class="n">create</span><span class="p">(</span><span class="n">config</span><span class="p">)</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">org.apache.sedona.spark.SedonaContext</span><span class="p">;</span> |
| |
| <span class="n">SparkSession</span><span class="w"> </span><span class="n">sedona</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">SedonaContext</span><span class="p">.</span><span class="na">create</span><span class="p">(</span><span class="n">config</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark</span><span class="w"> </span><span class="kn">import</span> <span class="o">*</span> |
| |
| <span class="n">sedona</span> <span class="o">=</span> <span class="n">SedonaContext</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">config</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>也可以通过在 <code>spark-submit</code> 或 <code>spark-shell</code> 中传入 <code>--conf spark.sql.extensions=org.apache.sedona.sql.SedonaSqlExtensions</code> 完成注册。</p> |
| <h2 id="_2">从文本文件加载数据<a class="headerlink" href="#_2" title="Permanent link">¶</a></h2> |
| <p>假设有一个 WKT 文件 <code>usa-county.tsv</code>,路径为 <code>/Download/usa-county.tsv</code>,内容如下:</p> |
| <div class="highlight"><pre><span></span><code>POLYGON (..., ...) Cuming County |
| POLYGON (..., ...) Wahkiakum County |
| POLYGON (..., ...) De Baca County |
| POLYGON (..., ...) Lancaster County |
| </code></pre></div> |
| <p>文件中可能还有许多其他列。</p> |
| <h3 id="dataframe">加载原始 DataFrame<a class="headerlink" href="#dataframe" title="Permanent link">¶</a></h3> |
| <p>使用以下代码加载数据并创建原始 DataFrame:</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="5:3"><input checked="checked" id="__tabbed_5_1" name="__tabbed_5" type="radio" /><input id="__tabbed_5_2" name="__tabbed_5" type="radio" /><input id="__tabbed_5_3" name="__tabbed_5" type="radio" /><div class="tabbed-labels"><label for="__tabbed_5_1">Scala</label><label for="__tabbed_5_2">Java</label><label for="__tabbed_5_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kd">var</span><span class="w"> </span><span class="n">rawDf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="n">read</span><span class="p">.</span><span class="n">format</span><span class="p">(</span><span class="s">"csv"</span><span class="p">).</span><span class="n">option</span><span class="p">(</span><span class="s">"delimiter"</span><span class="p">,</span><span class="w"> </span><span class="s">"\t"</span><span class="p">).</span><span class="n">option</span><span class="p">(</span><span class="s">"header"</span><span class="p">,</span><span class="w"> </span><span class="s">"false"</span><span class="p">).</span><span class="n">load</span><span class="p">(</span><span class="s">"/Download/usa-county.tsv"</span><span class="p">)</span> |
| <span class="n">rawDf</span><span class="p">.</span><span class="n">createOrReplaceTempView</span><span class="p">(</span><span class="s">"rawdf"</span><span class="p">)</span> |
| <span class="n">rawDf</span><span class="p">.</span><span class="n">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">Dataset</span><span class="o"><</span><span class="n">Row</span><span class="o">></span><span class="w"> </span><span class="n">rawDf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="na">read</span><span class="p">.</span><span class="na">format</span><span class="p">(</span><span class="s">"csv"</span><span class="p">).</span><span class="na">option</span><span class="p">(</span><span class="s">"delimiter"</span><span class="p">,</span><span class="w"> </span><span class="s">"\t"</span><span class="p">).</span><span class="na">option</span><span class="p">(</span><span class="s">"header"</span><span class="p">,</span><span class="w"> </span><span class="s">"false"</span><span class="p">).</span><span class="na">load</span><span class="p">(</span><span class="s">"/Download/usa-county.tsv"</span><span class="p">)</span> |
| <span class="n">rawDf</span><span class="p">.</span><span class="na">createOrReplaceTempView</span><span class="p">(</span><span class="s">"rawdf"</span><span class="p">)</span> |
| <span class="n">rawDf</span><span class="p">.</span><span class="na">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">rawDf</span> <span class="o">=</span> <span class="n">sedona</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">"csv"</span><span class="p">)</span><span class="o">.</span><span class="n">option</span><span class="p">(</span><span class="s2">"delimiter"</span><span class="p">,</span> <span class="s2">"</span><span class="se">\t</span><span class="s2">"</span><span class="p">)</span><span class="o">.</span><span class="n">option</span><span class="p">(</span><span class="s2">"header"</span><span class="p">,</span> <span class="s2">"false"</span><span class="p">)</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="s2">"/Download/usa-county.tsv"</span><span class="p">)</span> |
| <span class="n">rawDf</span><span class="o">.</span><span class="n">createOrReplaceTempView</span><span class="p">(</span><span class="s2">"rawdf"</span><span class="p">)</span> |
| <span class="n">rawDf</span><span class="o">.</span><span class="n">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>输出大致如下:</p> |
| <div class="highlight"><pre><span></span><code>| _c0|_c1|_c2| _c3| _c4| _c5| _c6|_c7|_c8| _c9|_c10| _c11|_c12|_c13| _c14| _c15| _c16| _c17| |
| +--------------------+---+---+--------+-----+-----------+--------------------+---+---+-----+----+-----+----+----+----------+--------+-----------+------------+ |
| |POLYGON ((-97.019...| 31|039|00835841|31039| Cuming| Cuming County| 06| H1|G4020|null| null|null| A|1477895811|10447360|+41.9158651|-096.7885168| |
| |POLYGON ((-123.43...| 53|069|01513275|53069| Wahkiakum| Wahkiakum County| 06| H1|G4020|null| null|null| A| 682138871|61658258|+46.2946377|-123.4244583| |
| |POLYGON ((-104.56...| 35|011|00933054|35011| De Baca| De Baca County| 06| H1|G4020|null| null|null| A|6015539696|29159492|+34.3592729|-104.3686961| |
| |POLYGON ((-96.910...| 31|109|00835876|31109| Lancaster| Lancaster County| 06| H1|G4020| 339|30700|null| A|2169240202|22877180|+40.7835474|-096.6886584| |
| </code></pre></div> |
| <h3 id="geometry">创建 Geometry 类型列<a class="headerlink" href="#geometry" title="Permanent link">¶</a></h3> |
| <p>SedonaSQL 中所有几何运算都作用在 Geometry 类型对象上。因此在执行任何查询之前,需要在 DataFrame 上构造一列 Geometry 类型列。</p> |
| <div class="highlight"><pre><span></span><code><span class="k">SELECT</span><span class="w"> </span><span class="n">ST_GeomFromWKT</span><span class="p">(</span><span class="n">_c0</span><span class="p">)</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">countyshape</span><span class="p">,</span><span class="w"> </span><span class="n">_c1</span><span class="p">,</span><span class="w"> </span><span class="n">_c2</span> |
| </code></pre></div> |
| <p>可以选取更多属性来组成这个 <code>spatialdDf</code>。输出大致如下:</p> |
| <div class="highlight"><pre><span></span><code>| countyshape|_c1|_c2| _c3| _c4| _c5| _c6|_c7|_c8| _c9|_c10| _c11|_c12|_c13| _c14| _c15| _c16| _c17| |
| +--------------------+---+---+--------+-----+-----------+--------------------+---+---+-----+----+-----+----+----+----------+--------+-----------+------------+ |
| |POLYGON ((-97.019...| 31|039|00835841|31039| Cuming| Cuming County| 06| H1|G4020|null| null|null| A|1477895811|10447360|+41.9158651|-096.7885168| |
| |POLYGON ((-123.43...| 53|069|01513275|53069| Wahkiakum| Wahkiakum County| 06| H1|G4020|null| null|null| A| 682138871|61658258|+46.2946377|-123.4244583| |
| |POLYGON ((-104.56...| 35|011|00933054|35011| De Baca| De Baca County| 06| H1|G4020|null| null|null| A|6015539696|29159492|+34.3592729|-104.3686961| |
| |POLYGON ((-96.910...| 31|109|00835876|31109| Lancaster| Lancaster County| 06| H1|G4020| 339|30700|null| A|2169240202|22877180|+40.7835474|-096.6886584| |
| </code></pre></div> |
| <p>虽然外观与输入一致,但 <code>countyshape</code> 列的类型已经变为 <mark>Geometry</mark>。</p> |
| <p>可以通过打印 schema 进行验证:</p> |
| <div class="highlight"><pre><span></span><code><span class="n">spatialDf</span><span class="p">.</span><span class="n">printSchema</span><span class="p">()</span> |
| </code></pre></div> |
| <p>输出如下:</p> |
| <div class="highlight"><pre><span></span><code>root |
| |-- countyshape: geometry (nullable = false) |
| |-- _c1: string (nullable = true) |
| |-- _c2: string (nullable = true) |
| |-- _c3: string (nullable = true) |
| |-- _c4: string (nullable = true) |
| |-- _c5: string (nullable = true) |
| |-- _c6: string (nullable = true) |
| |-- _c7: string (nullable = true) |
| </code></pre></div> |
| <div class="admonition note"> |
| <p class="admonition-title">Note</p> |
| <p>SedonaSQL 提供了大量构造 Geometry 列的函数,详见 <a href="../../api/sql/Geometry-Functions/">SedonaSQL 构造器 API</a>。</p> |
| </div> |
| <h2 id="geojson">加载 GeoJSON 数据<a class="headerlink" href="#geojson" title="Permanent link">¶</a></h2> |
| <p>自 <code>v1.6.1</code> 起,Sedona 支持通过 <code>geojson</code> 数据源读取 GeoJSON 文件。它专门用于处理几何对象采用 <a href="https://datatracker.ietf.org/doc/html/rfc7946">GeoJSON 格式</a> 的 JSON 文件。</p> |
| <p>读取多行 GeoJSON 文件请将 <code>multiLine</code> 选项设为 <code>True</code>。</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="6:3"><input checked="checked" id="__tabbed_6_1" name="__tabbed_6" type="radio" /><input id="__tabbed_6_2" name="__tabbed_6" type="radio" /><input id="__tabbed_6_3" name="__tabbed_6" type="radio" /><div class="tabbed-labels"><label for="__tabbed_6_1">Python</label><label for="__tabbed_6_2">Scala</label><label for="__tabbed_6_3">Java</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">df</span> <span class="o">=</span> <span class="p">(</span> |
| <span class="n">sedona</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">"geojson"</span><span class="p">)</span> |
| <span class="o">.</span><span class="n">option</span><span class="p">(</span><span class="s2">"multiLine"</span><span class="p">,</span> <span class="s2">"true"</span><span class="p">)</span> |
| <span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="s2">"PATH/TO/MYFILE.json"</span><span class="p">)</span> |
| <span class="o">.</span><span class="n">selectExpr</span><span class="p">(</span><span class="s2">"explode(features) as features"</span><span class="p">)</span> <span class="c1"># 展开 envelope</span> |
| <span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">"features.*"</span><span class="p">)</span> <span class="c1"># 解包 features 结构体</span> |
| <span class="o">.</span><span class="n">withColumn</span><span class="p">(</span><span class="s2">"prop0"</span><span class="p">,</span> <span class="n">f</span><span class="o">.</span><span class="n">expr</span><span class="p">(</span><span class="s2">"properties['prop0']"</span><span class="p">))</span> |
| <span class="o">.</span><span class="n">drop</span><span class="p">(</span><span class="s2">"properties"</span><span class="p">)</span> |
| <span class="o">.</span><span class="n">drop</span><span class="p">(</span><span class="s2">"type"</span><span class="p">)</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="n">df</span><span class="o">.</span><span class="n">printSchema</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kd">val</span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="n">read</span><span class="p">.</span><span class="n">format</span><span class="p">(</span><span class="s">"geojson"</span><span class="p">).</span><span class="n">option</span><span class="p">(</span><span class="s">"multiLine"</span><span class="p">,</span><span class="w"> </span><span class="s">"true"</span><span class="p">).</span><span class="n">load</span><span class="p">(</span><span class="s">"PATH/TO/MYFILE.json"</span><span class="p">)</span> |
| <span class="kd">val</span><span class="w"> </span><span class="n">parsedDf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">df</span><span class="p">.</span><span class="n">selectExpr</span><span class="p">(</span><span class="s">"explode(features) as features"</span><span class="p">).</span><span class="n">select</span><span class="p">(</span><span class="s">"features.*"</span><span class="p">)</span> |
| <span class="w"> </span><span class="p">.</span><span class="n">withColumn</span><span class="p">(</span><span class="s">"prop0"</span><span class="p">,</span><span class="w"> </span><span class="n">expr</span><span class="p">(</span><span class="s">"properties['prop0']"</span><span class="p">)).</span><span class="n">drop</span><span class="p">(</span><span class="s">"properties"</span><span class="p">).</span><span class="n">drop</span><span class="p">(</span><span class="s">"type"</span><span class="p">)</span> |
| |
| <span class="n">parsedDf</span><span class="p">.</span><span class="n">show</span><span class="p">()</span> |
| <span class="n">parsedDf</span><span class="p">.</span><span class="n">printSchema</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">Dataset</span><span class="o"><</span><span class="n">Row</span><span class="o">></span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="na">read</span><span class="p">.</span><span class="na">format</span><span class="p">(</span><span class="s">"geojson"</span><span class="p">).</span><span class="na">option</span><span class="p">(</span><span class="s">"multiLine"</span><span class="p">,</span><span class="w"> </span><span class="s">"true"</span><span class="p">).</span><span class="na">load</span><span class="p">(</span><span class="s">"PATH/TO/MYFILE.json"</span><span class="p">)</span> |
| <span class="w"> </span><span class="p">.</span><span class="na">selectExpr</span><span class="p">(</span><span class="s">"explode(features) as features"</span><span class="p">)</span><span class="w"> </span><span class="c1">// 展开 envelope,每行一个 feature</span> |
| <span class="w"> </span><span class="p">.</span><span class="na">select</span><span class="p">(</span><span class="s">"features.*"</span><span class="p">)</span><span class="w"> </span><span class="c1">// 解包 features 结构体</span> |
| <span class="w"> </span><span class="p">.</span><span class="na">withColumn</span><span class="p">(</span><span class="s">"prop0"</span><span class="p">,</span><span class="w"> </span><span class="n">expr</span><span class="p">(</span><span class="s">"properties['prop0']"</span><span class="p">)).</span><span class="na">drop</span><span class="p">(</span><span class="s">"properties"</span><span class="p">).</span><span class="na">drop</span><span class="p">(</span><span class="s">"type"</span><span class="p">)</span> |
| |
| <span class="n">df</span><span class="p">.</span><span class="na">show</span><span class="p">();</span> |
| <span class="n">df</span><span class="p">.</span><span class="na">printSchema</span><span class="p">();</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>加载 GeoJSON 文件的更多信息请参阅 <a href="../files/geojson-sedona-spark/">此页</a>。</p> |
| <h2 id="shapefile">加载 Shapefile<a class="headerlink" href="#shapefile" title="Permanent link">¶</a></h2> |
| <p>自 v<code>1.7.0</code> 起,Sedona 支持把 Shapefile 加载为 DataFrame。</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="7:3"><input checked="checked" id="__tabbed_7_1" name="__tabbed_7" type="radio" /><input id="__tabbed_7_2" name="__tabbed_7" type="radio" /><input id="__tabbed_7_3" name="__tabbed_7" type="radio" /><div class="tabbed-labels"><label for="__tabbed_7_1">Scala/Java</label><label for="__tabbed_7_2">Java</label><label for="__tabbed_7_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kd">val</span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="n">read</span><span class="p">.</span><span class="n">format</span><span class="p">(</span><span class="s">"shapefile"</span><span class="p">).</span><span class="n">load</span><span class="p">(</span><span class="s">"/path/to/shapefile"</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">Dataset</span><span class="o"><</span><span class="n">Row</span><span class="o">></span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="na">read</span><span class="p">().</span><span class="na">format</span><span class="p">(</span><span class="s">"shapefile"</span><span class="p">).</span><span class="na">load</span><span class="p">(</span><span class="s">"/path/to/shapefile"</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">df</span> <span class="o">=</span> <span class="n">sedona</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">"shapefile"</span><span class="p">)</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="s2">"/path/to/shapefile"</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>输入路径既可以是包含一个或多个 Shapefile 的目录,也可以是 <code>.shp</code> 文件本身。</p> |
| <p>加载 Shapefile 的更多信息请参阅 <a href="../files/shapefiles-sedona-spark/">此页</a>。</p> |
| <h2 id="geoparquet">加载 GeoParquet<a class="headerlink" href="#geoparquet" title="Permanent link">¶</a></h2> |
| <p>自 v<code>1.3.0</code> 起,Sedona 原生支持加载 GeoParquet 文件。Sedona 会通过 GeoParquet 文件中的 “geo” 元数据推断几何字段。</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="8:3"><input checked="checked" id="__tabbed_8_1" name="__tabbed_8" type="radio" /><input id="__tabbed_8_2" name="__tabbed_8" type="radio" /><input id="__tabbed_8_3" name="__tabbed_8" type="radio" /><div class="tabbed-labels"><label for="__tabbed_8_1">Scala/Java</label><label for="__tabbed_8_2">Java</label><label for="__tabbed_8_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kd">val</span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="n">read</span><span class="p">.</span><span class="n">format</span><span class="p">(</span><span class="s">"geoparquet"</span><span class="p">).</span><span class="n">load</span><span class="p">(</span><span class="n">geoparquetdatalocation1</span><span class="p">)</span> |
| <span class="n">df</span><span class="p">.</span><span class="n">printSchema</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">Dataset</span><span class="o"><</span><span class="n">Row</span><span class="o">></span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="na">read</span><span class="p">.</span><span class="na">format</span><span class="p">(</span><span class="s">"geoparquet"</span><span class="p">).</span><span class="na">load</span><span class="p">(</span><span class="n">geoparquetdatalocation1</span><span class="p">)</span> |
| <span class="n">df</span><span class="p">.</span><span class="na">printSchema</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">df</span> <span class="o">=</span> <span class="n">sedona</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">"geoparquet"</span><span class="p">)</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">geoparquetdatalocation1</span><span class="p">)</span> |
| <span class="n">df</span><span class="o">.</span><span class="n">printSchema</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>输出如下:</p> |
| <div class="highlight"><pre><span></span><code>root |
| |-- pop_est: long (nullable = true) |
| |-- continent: string (nullable = true) |
| |-- name: string (nullable = true) |
| |-- iso_a3: string (nullable = true) |
| |-- gdp_md_est: double (nullable = true) |
| |-- geometry: geometry (nullable = true) |
| </code></pre></div> |
| <p>Sedona 支持 GeoParquet 文件的空间谓词下推,详见 <a href="../../api/sql/Optimizer/">SedonaSQL 查询优化器</a> 文档。</p> |
| <p>GeoParquet 文件读取器也可用于读取 Apache Sedona 1.3.1-incubating 及更早版本写出的旧版 Parquet 文件,详见 <a href="../../api/sql/Reading-legacy-parquet/">读取旧版 Parquet 文件</a>。</p> |
| <p>加载 GeoParquet 的更多信息请参阅 <a href="../files/geoparquet-sedona-spark/">此页</a>。</p> |
| <h2 id="stac-catalog">从 STAC catalog 加载数据<a class="headerlink" href="#stac-catalog" title="Permanent link">¶</a></h2> |
| <p>Sedona 的 STAC 数据源允许从 SpatioTemporal Asset Catalog(STAC)API 读取数据,支持读取 STAC items 与 collections。</p> |
| <p>可以从 S3 上的 collection 文件加载 STAC collection:</p> |
| <div class="highlight"><pre><span></span><code><span class="n">df</span> <span class="o">=</span> <span class="n">sedona</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">"stac"</span><span class="p">)</span><span class="o">.</span><span class="n">load</span><span class="p">(</span> |
| <span class="s2">"s3a://example.com/stac_bucket/stac_collection.json"</span> |
| <span class="p">)</span> |
| </code></pre></div> |
| <p>也可以从 HTTP/HTTPS 端点加载:</p> |
| <div class="highlight"><pre><span></span><code><span class="n">df</span> <span class="o">=</span> <span class="n">sedona</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">"stac"</span><span class="p">)</span><span class="o">.</span><span class="n">load</span><span class="p">(</span> |
| <span class="s2">"https://earth-search.aws.element84.com/v1/collections/sentinel-2-pre-c1-l2a"</span> |
| <span class="p">)</span> |
| </code></pre></div> |
| <p>STAC 数据源支持空间和时间过滤的下推,可以将这些过滤直接下推到底层数据源以减少需要读取的数据量。</p> |
| <p>加载 STAC 数据的更多信息请参阅 <a href="../files/stac-sedona-spark/">此页</a>。</p> |
| <h2 id="jdbc">从 JDBC 数据源加载数据<a class="headerlink" href="#jdbc" title="Permanent link">¶</a></h2> |
| <p>可以使用 Spark SQL JDBC 数据源的 'query' 选项把几何列转换成 Sedona 能识别的格式。该方式适用于大多数支持空间的 JDBC 数据源。Postgis 由于使用 EWKB 作为其传输格式,无需添加查询进行类型转换。</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="9:3"><input checked="checked" id="__tabbed_9_1" name="__tabbed_9" type="radio" /><input id="__tabbed_9_2" name="__tabbed_9" type="radio" /><input id="__tabbed_9_3" name="__tabbed_9" type="radio" /><div class="tabbed-labels"><label for="__tabbed_9_1">Scala</label><label for="__tabbed_9_2">Java</label><label for="__tabbed_9_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="c1">// 适用于任意 JDBC 数据源(包括 Postgis)</span> |
| <span class="kd">val</span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="n">read</span><span class="p">.</span><span class="n">format</span><span class="p">(</span><span class="s">"jdbc"</span><span class="p">)</span> |
| <span class="w"> </span><span class="c1">// 其他选项</span> |
| <span class="w"> </span><span class="p">.</span><span class="n">option</span><span class="p">(</span><span class="s">"query"</span><span class="p">,</span><span class="w"> </span><span class="s">"SELECT id, ST_AsBinary(geom) as geom FROM my_table"</span><span class="p">)</span> |
| <span class="w"> </span><span class="p">.</span><span class="n">load</span><span class="p">()</span> |
| <span class="w"> </span><span class="p">.</span><span class="n">withColumn</span><span class="p">(</span><span class="s">"geom"</span><span class="p">,</span><span class="w"> </span><span class="n">expr</span><span class="p">(</span><span class="s">"ST_GeomFromWKB(geom)"</span><span class="p">))</span> |
| |
| <span class="c1">// Postgis 上的简化写法</span> |
| <span class="kd">val</span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="n">read</span><span class="p">.</span><span class="n">format</span><span class="p">(</span><span class="s">"jdbc"</span><span class="p">)</span> |
| <span class="w"> </span><span class="c1">// 其他选项</span> |
| <span class="w"> </span><span class="p">.</span><span class="n">option</span><span class="p">(</span><span class="s">"dbtable"</span><span class="p">,</span><span class="w"> </span><span class="s">"my_table"</span><span class="p">)</span> |
| <span class="w"> </span><span class="p">.</span><span class="n">load</span><span class="p">()</span> |
| <span class="w"> </span><span class="p">.</span><span class="n">withColumn</span><span class="p">(</span><span class="s">"geom"</span><span class="p">,</span><span class="w"> </span><span class="n">expr</span><span class="p">(</span><span class="s">"ST_GeomFromWKB(geom)"</span><span class="p">))</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="c1">// 适用于任意 JDBC 数据源(包括 Postgis)</span> |
| <span class="n">Dataset</span><span class="o"><</span><span class="n">Row</span><span class="o">></span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="na">read</span><span class="p">().</span><span class="na">format</span><span class="p">(</span><span class="s">"jdbc"</span><span class="p">)</span> |
| <span class="w"> </span><span class="c1">// 其他选项</span> |
| <span class="w"> </span><span class="p">.</span><span class="na">option</span><span class="p">(</span><span class="s">"query"</span><span class="p">,</span><span class="w"> </span><span class="s">"SELECT id, ST_AsBinary(geom) as geom FROM my_table"</span><span class="p">)</span> |
| <span class="w"> </span><span class="p">.</span><span class="na">load</span><span class="p">()</span> |
| <span class="w"> </span><span class="p">.</span><span class="na">withColumn</span><span class="p">(</span><span class="s">"geom"</span><span class="p">,</span><span class="w"> </span><span class="n">expr</span><span class="p">(</span><span class="s">"ST_GeomFromWKB(geom)"</span><span class="p">))</span> |
| |
| <span class="c1">// Postgis 上的简化写法</span> |
| <span class="n">Dataset</span><span class="o"><</span><span class="n">Row</span><span class="o">></span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="na">read</span><span class="p">().</span><span class="na">format</span><span class="p">(</span><span class="s">"jdbc"</span><span class="p">)</span> |
| <span class="w"> </span><span class="c1">// 其他选项</span> |
| <span class="w"> </span><span class="p">.</span><span class="na">option</span><span class="p">(</span><span class="s">"dbtable"</span><span class="p">,</span><span class="w"> </span><span class="s">"my_table"</span><span class="p">)</span> |
| <span class="w"> </span><span class="p">.</span><span class="na">load</span><span class="p">()</span> |
| <span class="w"> </span><span class="p">.</span><span class="na">withColumn</span><span class="p">(</span><span class="s">"geom"</span><span class="p">,</span><span class="w"> </span><span class="n">expr</span><span class="p">(</span><span class="s">"ST_GeomFromWKB(geom)"</span><span class="p">))</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="c1"># 适用于任意 JDBC 数据源(包括 Postgis)</span> |
| <span class="n">df</span> <span class="o">=</span> <span class="p">(</span><span class="n">sedona</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">"jdbc"</span><span class="p">)</span> |
| <span class="c1"># 其他选项</span> |
| <span class="o">.</span><span class="n">option</span><span class="p">(</span><span class="s2">"query"</span><span class="p">,</span> <span class="s2">"SELECT id, ST_AsBinary(geom) as geom FROM my_table"</span><span class="p">)</span> |
| <span class="o">.</span><span class="n">load</span><span class="p">()</span> |
| <span class="o">.</span><span class="n">withColumn</span><span class="p">(</span><span class="s2">"geom"</span><span class="p">,</span> <span class="n">f</span><span class="o">.</span><span class="n">expr</span><span class="p">(</span><span class="s2">"ST_GeomFromWKB(geom)"</span><span class="p">)))</span> |
| |
| <span class="c1"># Postgis 上的简化写法</span> |
| <span class="n">df</span> <span class="o">=</span> <span class="p">(</span><span class="n">sedona</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">"jdbc"</span><span class="p">)</span> |
| <span class="c1"># 其他选项</span> |
| <span class="o">.</span><span class="n">option</span><span class="p">(</span><span class="s2">"dbtable"</span><span class="p">,</span> <span class="s2">"my_table"</span><span class="p">)</span> |
| <span class="o">.</span><span class="n">load</span><span class="p">()</span> |
| <span class="o">.</span><span class="n">withColumn</span><span class="p">(</span><span class="s2">"geom"</span><span class="p">,</span> <span class="n">f</span><span class="o">.</span><span class="n">expr</span><span class="p">(</span><span class="s2">"ST_GeomFromWKB(geom)"</span><span class="p">)))</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <h2 id="geopackage">加载 GeoPackage<a class="headerlink" href="#geopackage" title="Permanent link">¶</a></h2> |
| <p>自 v1.7.0 起,Sedona 支持把 GeoPackage 文件加载为 DataFrame。</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="10:3"><input checked="checked" id="__tabbed_10_1" name="__tabbed_10" type="radio" /><input id="__tabbed_10_2" name="__tabbed_10" type="radio" /><input id="__tabbed_10_3" name="__tabbed_10" type="radio" /><div class="tabbed-labels"><label for="__tabbed_10_1">Scala/Java</label><label for="__tabbed_10_2">Java</label><label for="__tabbed_10_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kd">val</span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="n">read</span><span class="p">.</span><span class="n">format</span><span class="p">(</span><span class="s">"geopackage"</span><span class="p">).</span><span class="n">option</span><span class="p">(</span><span class="s">"tableName"</span><span class="p">,</span><span class="w"> </span><span class="s">"tab"</span><span class="p">).</span><span class="n">load</span><span class="p">(</span><span class="s">"/path/to/geopackage"</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">Dataset</span><span class="o"><</span><span class="n">Row</span><span class="o">></span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="na">read</span><span class="p">().</span><span class="na">format</span><span class="p">(</span><span class="s">"geopackage"</span><span class="p">).</span><span class="na">option</span><span class="p">(</span><span class="s">"tableName"</span><span class="p">,</span><span class="w"> </span><span class="s">"tab"</span><span class="p">).</span><span class="na">load</span><span class="p">(</span><span class="s">"/path/to/geopackage"</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">df</span> <span class="o">=</span> <span class="n">sedona</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">"geopackage"</span><span class="p">)</span><span class="o">.</span><span class="n">option</span><span class="p">(</span><span class="s2">"tableName"</span><span class="p">,</span> <span class="s2">"tab"</span><span class="p">)</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="s2">"/path/to/geopackage"</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>加载 GeoPackage 的更多信息请参阅 <a href="../files/geopackage-sedona-spark/">此页</a>。</p> |
| <h2 id="osm-pbf">加载 OSM PBF<a class="headerlink" href="#osm-pbf" title="Permanent link">¶</a></h2> |
| <p>自 v1.7.1 起,Sedona 支持把 OSM PBF 文件加载为 DataFrame。</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="11:3"><input checked="checked" id="__tabbed_11_1" name="__tabbed_11" type="radio" /><input id="__tabbed_11_2" name="__tabbed_11" type="radio" /><input id="__tabbed_11_3" name="__tabbed_11" type="radio" /><div class="tabbed-labels"><label for="__tabbed_11_1">Scala/Java</label><label for="__tabbed_11_2">Java</label><label for="__tabbed_11_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kd">val</span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="n">read</span><span class="p">.</span><span class="n">format</span><span class="p">(</span><span class="s">"osmpbf"</span><span class="p">).</span><span class="n">load</span><span class="p">(</span><span class="s">"/path/to/osmpbf"</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">Dataset</span><span class="o"><</span><span class="n">Row</span><span class="o">></span><span class="w"> </span><span class="n">df</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sedona</span><span class="p">.</span><span class="na">read</span><span class="p">().</span><span class="na">format</span><span class="p">(</span><span class="s">"osmpbf"</span><span class="p">).</span><span class="na">load</span><span class="p">(</span><span class="s">"/path/to/osmpbf"</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">df</span> <span class="o">=</span> <span class="n">sedona</span><span class="o">.</span><span class="n">read</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">"osmpbf"</span><span class="p">)</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="s2">"/path/to/osmpbf"</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>OSM PBF 文件可以包含 nodes、ways 与 relations。Sedona 目前支持 Nodes、DenseNodes、Ways 与 Relations。加载后的 DataFrame schema 如下:</p> |
| <div class="highlight"><pre><span></span><code>root |
| |-- id: long (nullable = true) |
| |-- kind: string (nullable = true) |
| |-- location: struct (nullable = true) |
| | |-- longitude: double (nullable = true) |
| | |-- latitude: double (nullable = true) |
| |-- tags: map (nullable = true) |
| | |-- key: string |
| | |-- value: string (valueContainsNull = true) |
| |-- refs: array (nullable = true) |
| | |-- element: long (containsNull = true) |
| |-- ref_roles: array (nullable = true) |
| | |-- element: string (containsNull = true) |
| |-- ref_types: array (nullable = true) |
| | |-- element: string (containsNull = true) |
| </code></pre></div> |
| <p>各字段含义:</p> |
| <ul> |
| <li><code>id</code>:对象的唯一标识。</li> |
| <li><code>kind</code>:对象类型,可能为 <code>node</code>、<code>way</code> 或 <code>relation</code>。</li> |
| <li><code>location</code>:对象的位置,包含 <code>longitude</code> 与 <code>latitude</code>。</li> |
| <li><code>tags</code>:键值对的 map,表示对象的 tags。</li> |
| <li><code>refs</code>:对象引用的数组。</li> |
| <li><code>ref_roles</code>:引用对应的角色数组。</li> |
| <li><code>ref_types</code>:引用对应的类型数组。</li> |
| </ul> |
| <p>nodes 的 DataFrame 大致如下:</p> |
| <div class="highlight"><pre><span></span><code>+---------+----+--------------------+--------------------+----+---------+---------+ |
| | id|kind| location| tags|refs|ref_roles|ref_types| |
| +---------+----+--------------------+--------------------+----+---------+---------+ |
| |248675410|node|{21.0884952545166...|{tactile_paving -...|NULL| NULL| NULL| |
| |260821820|node|{21.0191555023193...|{created_by -> JOSM}|NULL| NULL| NULL| |
| |349189665|node|{22.1437530517578...|{source -> http:/...|NULL| NULL| NULL| |
| |353366899|node|{22.9787712097167...|{source -> http:/...|NULL| NULL| NULL| |
| |359460224|node|{22.4816703796386...|{source -> http:/...|NULL| NULL| NULL| |
| +---------+----+--------------------+--------------------+----+---------+---------+ |
| only showing top 5 rows |
| </code></pre></div> |
| <p>ways 的大致样子:</p> |
| <div class="highlight"><pre><span></span><code>+-------+----+--------+--------------------+--------------------+---------+---------+ |
| | id|kind|location| tags| refs|ref_roles|ref_types| |
| +-------+----+--------+--------------------+--------------------+---------+---------+ |
| |4307329| way| NULL|{junction -> roun...|[2448759046, 7093...| NULL| NULL| |
| |4307330| way| NULL|{surface -> aspha...|[26063923, 260639...| NULL| NULL| |
| |4308966| way| NULL|{sidewalk -> sepa...|[3387797238, 9252...| NULL| NULL| |
| |4308968| way| NULL|{surface -> pavin...|[26083890, 744724...| NULL| NULL| |
| |4308969| way| NULL|{cycleway:both ->...|[9526831176, 1218...| NULL| NULL| |
| +-------+----+--------+--------------------+--------------------+---------+---------+ |
| </code></pre></div> |
| <p>relations 的大致样子:</p> |
| <div class="highlight"><pre><span></span><code>+-----+--------+--------+--------------------+--------------------+--------------------+--------------------+ |
| | id| kind|location| tags| refs| ref_roles| ref_types| |
| +-----+--------+--------+--------------------+--------------------+--------------------+--------------------+ |
| |28124|relation| NULL|{official_name ->...|[26382394, 26259985]| [inner, outer]| [WAY, WAY]| |
| |28488|relation| NULL| {type -> junction}|[26409253, 303249...|[roundabout, roun...|[WAY, WAY, WAY, WAY]| |
| |32939|relation| NULL|{ref -> E 67, rou...|[140673970, 14067...| [, , , , , ]|[WAY, WAY, RELATI...| |
| |34387|relation| NULL|{note -> rząd III...|[209161000, 52154...|[main_stream, mai...|[WAY, WAY, WAY, W...| |
| |34392|relation| NULL|{distance -> 1047...|[150033976, 25076...|[main_stream, mai...|[WAY, WAY, WAY, W...| |
| +-----+--------+--------+--------------------+--------------------+--------------------+--------------------+ |
| </code></pre></div> |
| <h2 id="_3">转换坐标参考系<a class="headerlink" href="#_3" title="Permanent link">¶</a></h2> |
| <p>Sedona 不会自动管理一列 Geometry 中所有几何对象的坐标单位(基于度还是基于米)。SedonaSQL 中所有相关距离的单位与 Geometry 列中几何对象的单位保持一致。</p> |
| <p>自 <code>v1.5.0</code> 起,该函数默认使用 lon/lat 顺序(之前为 lat/lon 顺序)。可以使用 <mark>ST_FlipCoordinates</mark> 交换 X 与 Y。</p> |
| <p>更多细节请参阅 Sedona API 参考中的 <code>ST_Transform</code> 章节。</p> |
| <p>转换前述 Geometry 列的坐标参考系:</p> |
| <div class="highlight"><pre><span></span><code><span class="k">SELECT</span><span class="w"> </span><span class="n">ST_Transform</span><span class="p">(</span><span class="n">countyshape</span><span class="p">,</span><span class="w"> </span><span class="ss">"epsg:4326"</span><span class="p">,</span><span class="w"> </span><span class="ss">"epsg:3857"</span><span class="p">)</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">newcountyshape</span><span class="p">,</span><span class="w"> </span><span class="n">_c1</span><span class="p">,</span><span class="w"> </span><span class="n">_c2</span><span class="p">,</span><span class="w"> </span><span class="n">_c3</span><span class="p">,</span><span class="w"> </span><span class="n">_c4</span><span class="p">,</span><span class="w"> </span><span class="n">_c5</span><span class="p">,</span><span class="w"> </span><span class="n">_c6</span><span class="p">,</span><span class="w"> </span><span class="n">_c7</span> |
| <span class="k">FROM</span><span class="w"> </span><span class="n">spatialdf</span> |
| </code></pre></div> |
| <p><code>ST_Transform</code> 第一个 EPSG 代码 EPSG:4326 是源 CRS——也就是最常见的基于度的 CRS(WGS84)。</p> |
| <p>第二个 EPSG 代码 EPSG:3857 是目标 CRS——最常见的基于米的 CRS。</p> |
| <p><code>ST_Transform</code> 会把这些几何对象的 CRS 从 EPSG:4326 转换到 EPSG:3857。详细 CRS 信息可在 <a href="https://epsg.io/">EPSG.io</a> 找到。</p> |
| <p>多边形坐标已发生变化。输出大致如下:</p> |
| <div class="highlight"><pre><span></span><code>+--------------------+---+---+--------+-----+-----------+--------------------+---+ |
| | newcountyshape|_c1|_c2| _c3| _c4| _c5| _c6|_c7| |
| +--------------------+---+---+--------+-----+-----------+--------------------+---+ |
| |POLYGON ((-108001...| 31|039|00835841|31039| Cuming| Cuming County| 06| |
| |POLYGON ((-137408...| 53|069|01513275|53069| Wahkiakum| Wahkiakum County| 06| |
| |POLYGON ((-116403...| 35|011|00933054|35011| De Baca| De Baca County| 06| |
| |POLYGON ((-107880...| 31|109|00835876|31109| Lancaster| Lancaster County| 06| |
| </code></pre></div> |
| <h2 id="dbscan">使用 DBSCAN 进行聚类<a class="headerlink" href="#dbscan" title="Permanent link">¶</a></h2> |
| <p>Sedona 提供 <a href="https://en.wikipedia.org/wiki/Dbscan">DBSCAN</a> 算法的实现,用于对空间数据进行聚类。</p> |
| <p>该算法以 Scala 与 Python 函数的形式提供,作用在空间 DataFrame 上。返回的 DataFrame 中会增加两列:所属簇的唯一标识,以及一个表示该记录是否为核心点的布尔列。</p> |
| <p>第一个参数是 DataFrame,后两个是 DBSCAN 的 epsilon 与 min_points 参数。</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="12:3"><input checked="checked" id="__tabbed_12_1" name="__tabbed_12" type="radio" /><input id="__tabbed_12_2" name="__tabbed_12" type="radio" /><input id="__tabbed_12_3" name="__tabbed_12" type="radio" /><div class="tabbed-labels"><label for="__tabbed_12_1">Scala</label><label for="__tabbed_12_2">Java</label><label for="__tabbed_12_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="k">import</span><span class="w"> </span><span class="nn">org</span><span class="p">.</span><span class="nn">apache</span><span class="p">.</span><span class="nn">sedona</span><span class="p">.</span><span class="nn">stats</span><span class="p">.</span><span class="nn">clustering</span><span class="p">.</span><span class="nc">DBSCAN</span><span class="p">.</span><span class="n">dbscan</span> |
| |
| <span class="n">dbscan</span><span class="p">(</span><span class="n">df</span><span class="p">,</span><span class="w"> </span><span class="mf">0.1</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">).</span><span class="n">show</span><span class="p">()</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">org.apache.sedona.stats.clustering.DBSCAN</span><span class="p">;</span> |
| |
| <span class="n">DBSCAN</span><span class="p">.</span><span class="na">dbscan</span><span class="p">(</span><span class="n">df</span><span class="p">,</span><span class="w"> </span><span class="mf">0.1</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">).</span><span class="na">show</span><span class="p">();</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark.stats</span><span class="w"> </span><span class="kn">import</span> <span class="n">dbscan</span> |
| |
| <span class="n">dbscan</span><span class="p">(</span><span class="n">df</span><span class="p">,</span> <span class="mf">0.1</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span><span class="o">.</span><span class="n">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>输出大致如下:</p> |
| <div class="highlight"><pre><span></span><code>+----------------+---+------+-------+ |
| | geometry| id|isCore|cluster| |
| +----------------+---+------+-------+ |
| | POINT (2.5 4)| 3| false| 1| |
| | POINT (3 4)| 2| false| 1| |
| | POINT (3 5)| 5| false| 1| |
| | POINT (1 3)| 9| true| 0| |
| | POINT (2.5 4.5)| 7| true| 1| |
| | POINT (1 2)| 1| true| 0| |
| | POINT (1.5 2.5)| 4| true| 0| |
| | POINT (1.2 2.5)| 8| true| 0| |
| | POINT (1 2.5)| 11| true| 0| |
| | POINT (1 5)| 10| false| -1| |
| | POINT (5 6)| 12| false| -1| |
| |POINT (12.8 4.5)| 6| false| -1| |
| | POINT (4 3)| 13| false| -1| |
| +----------------+---+------+-------+ |
| </code></pre></div> |
| <p>DBSCAN 算法的更多内容请参阅 <a href="../concepts/clustering-algorithms/">此页</a>。</p> |
| <h2 id="local-outlier-factorlof">计算 Local Outlier Factor(LOF)<a class="headerlink" href="#local-outlier-factorlof" title="Permanent link">¶</a></h2> |
| <p>Sedona 提供 <a href="https://en.wikipedia.org/wiki/Local_outlier_factor">Local Outlier Factor</a> 算法的实现,用于识别空间数据中的异常点。</p> |
| <p>该算法以 Scala 与 Python 函数的形式提供,作用在空间 DataFrame 上。返回的 DataFrame 中会增加一列保存 local outlier factor。</p> |
| <p>第一个参数是 DataFrame,第二个参数是计算评分时考虑的最近邻数量。</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="13:3"><input checked="checked" id="__tabbed_13_1" name="__tabbed_13" type="radio" /><input id="__tabbed_13_2" name="__tabbed_13" type="radio" /><input id="__tabbed_13_3" name="__tabbed_13" type="radio" /><div class="tabbed-labels"><label for="__tabbed_13_1">Scala</label><label for="__tabbed_13_2">Java</label><label for="__tabbed_13_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="k">import</span><span class="w"> </span><span class="nn">org</span><span class="p">.</span><span class="nn">apache</span><span class="p">.</span><span class="nn">sedona</span><span class="p">.</span><span class="nn">stats</span><span class="p">.</span><span class="nn">outlierDetection</span><span class="p">.</span><span class="nc">LocalOutlierFactor</span><span class="p">.</span><span class="n">localOutlierFactor</span> |
| |
| <span class="n">localOutlierFactor</span><span class="p">(</span><span class="n">df</span><span class="p">,</span><span class="w"> </span><span class="mi">20</span><span class="p">).</span><span class="n">show</span><span class="p">()</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">org.apache.sedona.stats.outlierDetection.LocalOutlierFactor</span><span class="p">;</span> |
| |
| <span class="n">LocalOutlierFactor</span><span class="p">.</span><span class="na">localOutlierFactor</span><span class="p">(</span><span class="n">df</span><span class="p">,</span><span class="w"> </span><span class="mi">20</span><span class="p">).</span><span class="na">show</span><span class="p">();</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark.stats</span><span class="w"> </span><span class="kn">import</span> <span class="n">local_outlier_factor</span> |
| |
| <span class="n">local_outlier_factor</span><span class="p">(</span><span class="n">df</span><span class="p">,</span> <span class="mi">20</span><span class="p">)</span><span class="o">.</span><span class="n">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>输出大致如下:</p> |
| <div class="highlight"><pre><span></span><code>+--------------------+------------------+ |
| | geometry| lof| |
| +--------------------+------------------+ |
| |POINT (-2.0231305...| 0.952098153363662| |
| |POINT (-2.0346944...|0.9975325496668104| |
| |POINT (-2.2040074...|1.0825843906411081| |
| |POINT (1.61573501...|1.7367129352162634| |
| |POINT (-2.1176324...|1.5714144683150393| |
| |POINT (-2.2349759...|0.9167275845938276| |
| |POINT (1.65470192...| 1.046231536764447| |
| |POINT (0.62624112...|1.1988700676990034| |
| |POINT (2.01746261...|1.1060219481067417| |
| |POINT (-2.0483857...|1.0775553430145446| |
| |POINT (2.43969463...|1.1129132178576646| |
| |POINT (-2.2425480...| 1.104108012697006| |
| |POINT (-2.7859235...| 2.86371824574529| |
| |POINT (-1.9738858...|1.0398822680356794| |
| |POINT (2.00153403...| 0.927409656346015| |
| |POINT (2.06422812...|0.9222203762264445| |
| |POINT (-1.7533819...|1.0273650471626696| |
| |POINT (-2.2030766...| 0.964744555830738| |
| |POINT (-1.8509857...|1.0375927869698574| |
| |POINT (2.10849080...|1.0753419197322656| |
| +--------------------+------------------+ |
| </code></pre></div> |
| <h2 id="getis-ord-gi">执行 Getis-Ord Gi(*) 热点分析<a class="headerlink" href="#getis-ord-gi" title="Permanent link">¶</a></h2> |
| <p>Sedona 提供 <a href="https://en.wikipedia.org/wiki/Getis%E2%80%93Ord_statistics">Gi 与 Gi*</a> 算法的实现,用于识别空间数据中的局部热点。</p> |
| <p>该算法以 Scala 与 Python 函数的形式提供,作用在空间 DataFrame 上。返回的 DataFrame 中会增加 G 统计量、E[G]、V[G]、Z 分数与 p 值等列。</p> |
| <p>使用 Gi 时,先为每条记录生成邻居列表,再调用 g_local 函数。</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="14:3"><input checked="checked" id="__tabbed_14_1" name="__tabbed_14" type="radio" /><input id="__tabbed_14_2" name="__tabbed_14" type="radio" /><input id="__tabbed_14_3" name="__tabbed_14" type="radio" /><div class="tabbed-labels"><label for="__tabbed_14_1">Scala</label><label for="__tabbed_14_2">Java</label><label for="__tabbed_14_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="k">import</span><span class="w"> </span><span class="nn">org</span><span class="p">.</span><span class="nn">apache</span><span class="p">.</span><span class="nn">sedona</span><span class="p">.</span><span class="nn">stats</span><span class="p">.</span><span class="nc">Weighting</span><span class="p">.</span><span class="n">addBinaryDistanceBandColumn</span> |
| <span class="k">import</span><span class="w"> </span><span class="nn">org</span><span class="p">.</span><span class="nn">apache</span><span class="p">.</span><span class="nn">sedona</span><span class="p">.</span><span class="nn">stats</span><span class="p">.</span><span class="nn">hotspotDetection</span><span class="p">.</span><span class="nc">GetisOrd</span><span class="p">.</span><span class="n">gLocal</span> |
| |
| <span class="kd">val</span><span class="w"> </span><span class="n">distanceRadius</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">1.0</span> |
| <span class="kd">val</span><span class="w"> </span><span class="n">weightedDf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">addBinaryDistanceBandColumn</span><span class="p">(</span><span class="n">df</span><span class="p">,</span><span class="w"> </span><span class="n">distanceRadius</span><span class="p">)</span> |
| <span class="n">gLocal</span><span class="p">(</span><span class="n">weightedDf</span><span class="p">,</span><span class="w"> </span><span class="s">"val"</span><span class="p">).</span><span class="n">show</span><span class="p">()</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">org.apache.sedona.stats.Weighting</span><span class="p">;</span> |
| <span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.sedona.stats.hotspotDetection.GetisOrd</span><span class="p">;</span> |
| <span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.spark.sql.DataFrame</span><span class="p">;</span> |
| |
| <span class="kt">double</span><span class="w"> </span><span class="n">distanceRadius</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">1.0</span><span class="p">;</span> |
| <span class="n">DataFrame</span><span class="w"> </span><span class="n">weightedDf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Weighting</span><span class="p">.</span><span class="na">addBinaryDistanceBandColumn</span><span class="p">(</span><span class="n">df</span><span class="p">,</span><span class="w"> </span><span class="n">distanceRadius</span><span class="p">);</span> |
| <span class="n">GetisOrd</span><span class="p">.</span><span class="na">gLocal</span><span class="p">(</span><span class="n">weightedDf</span><span class="p">,</span><span class="w"> </span><span class="s">"val"</span><span class="p">).</span><span class="na">show</span><span class="p">();</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark.stats</span><span class="w"> </span><span class="kn">import</span> <span class="n">add_binary_distance_band_column</span> |
| <span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark.stats</span><span class="w"> </span><span class="kn">import</span> <span class="n">g_local</span> |
| |
| <span class="n">distance_radius</span> <span class="o">=</span> <span class="mf">1.0</span> |
| <span class="n">weighted_df</span> <span class="o">=</span> <span class="n">addBinaryDistanceBandColumn</span><span class="p">(</span><span class="n">df</span><span class="p">,</span> <span class="n">distance_radius</span><span class="p">)</span> |
| <span class="n">g_local</span><span class="p">(</span><span class="n">weightedDf</span><span class="p">,</span> <span class="s2">"val"</span><span class="p">)</span><span class="o">.</span><span class="n">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>输出大致如下:</p> |
| <pre> |
| <code> |
| +-----------+---+--------------------+-------------------+-------------------+--------------------+--------------------+--------------------+ |
| | geometry|val| weights| G| EG| VG| Z| P| |
| +-----------+---+--------------------+-------------------+-------------------+--------------------+--------------------+--------------------+ |
| |POINT (2 2)|0.9|[{{POINT (2 3), 1...| 0.4488188976377953|0.45454545454545453| 0.00356321373799772|-0.09593402008347063| 0.4617864875295957| |
| |POINT (2 3)|1.2|[{{POINT (2 2), 0...|0.35433070866141736|0.36363636363636365|0.003325666155464539|-0.16136436037034918| 0.4359032175415549| |
| |POINT (3 3)|1.2|[{{POINT (2 3), 1...|0.28346456692913385| 0.2727272727272727|0.002850570990398176| 0.20110780337013057| 0.42030714022155924| |
| |POINT (3 2)|1.2|[{{POINT (2 2), 0...| 0.4488188976377953|0.45454545454545453| 0.00356321373799772|-0.09593402008347063| 0.4617864875295957| |
| |POINT (3 1)|1.2|[{{POINT (3 2), 3...| 0.3622047244094489| 0.2727272727272727|0.002850570990398176| 1.6758983614177538| 0.04687905137429871| |
| |POINT (2 1)|2.2|[{{POINT (2 2), 0...| 0.4330708661417323|0.36363636363636365|0.003325666155464539| 1.2040263812249166| 0.11428969105925013| |
| |POINT (1 1)|1.2|[{{POINT (2 1), 5...| 0.2834645669291339| 0.2727272727272727|0.002850570990398176| 0.2011078033701316| 0.4203071402215588| |
| |POINT (1 2)|0.2|[{{POINT (2 2), 0...|0.35433070866141736|0.45454545454545453| 0.00356321373799772| -1.67884535146075|0.046591093685710794| |
| |POINT (1 3)|1.2|[{{POINT (2 3), 1...| 0.2047244094488189| 0.2727272727272727|0.002850570990398176| -1.2736827546774914| 0.10138793530151635| |
| |POINT (0 2)|1.0|[{{POINT (1 2), 7...|0.09448818897637795|0.18181818181818182|0.002137928242798632| -1.8887168824332323|0.029464887612748458| |
| |POINT (4 2)|1.2|[{{POINT (3 2), 3...| 0.1889763779527559|0.18181818181818182|0.002137928242798632| 0.15481285921583854| 0.43848442662481324| |
| +-----------+---+--------------------+-------------------+-------------------+--------------------+--------------------+--------------------+ |
| </code> |
| </pre> |
| |
| <h2 id="_4">执行空间查询<a class="headerlink" href="#_4" title="Permanent link">¶</a></h2> |
| <p>构造完 Geometry 类型列后,即可执行各类空间查询。</p> |
| <h3 id="_5">范围查询<a class="headerlink" href="#_5" title="Permanent link">¶</a></h3> |
| <p>使用 <mark>ST_Contains</mark>、<mark>ST_Intersects</mark>、<mark>ST_Within</mark> 在单列上执行范围查询。</p> |
| <p>下例查找位于给定多边形内的所有 county:</p> |
| <div class="highlight"><pre><span></span><code><span class="k">SELECT</span><span class="w"> </span><span class="o">*</span> |
| <span class="k">FROM</span><span class="w"> </span><span class="n">spatialdf</span> |
| <span class="k">WHERE</span><span class="w"> </span><span class="n">ST_Contains</span><span class="w"> </span><span class="p">(</span><span class="n">ST_PolygonFromEnvelope</span><span class="p">(</span><span class="mi">1</span><span class="p">.</span><span class="mi">0</span><span class="p">,</span><span class="mi">100</span><span class="p">.</span><span class="mi">0</span><span class="p">,</span><span class="mi">1000</span><span class="p">.</span><span class="mi">0</span><span class="p">,</span><span class="mi">1100</span><span class="p">.</span><span class="mi">0</span><span class="p">),</span><span class="w"> </span><span class="n">newcountyshape</span><span class="p">)</span> |
| </code></pre></div> |
| <div class="admonition note"> |
| <p class="admonition-title">Note</p> |
| <p>了解如何创建 Geometry 类型的查询窗口请参阅 <a href="../../api/sql/Geometry-Functions/">SedonaSQL 构造器 API</a>。</p> |
| </div> |
| <h3 id="knn">KNN 查询<a class="headerlink" href="#knn" title="Permanent link">¶</a></h3> |
| <p>使用 <mark>ST_Distance</mark> 计算距离并排序。</p> |
| <p>下面的代码返回距离给定多边形最近的 5 个对象:</p> |
| <div class="highlight"><pre><span></span><code><span class="k">SELECT</span><span class="w"> </span><span class="n">countyname</span><span class="p">,</span><span class="w"> </span><span class="n">ST_Distance</span><span class="p">(</span><span class="n">ST_PolygonFromEnvelope</span><span class="p">(</span><span class="mi">1</span><span class="p">.</span><span class="mi">0</span><span class="p">,</span><span class="mi">100</span><span class="p">.</span><span class="mi">0</span><span class="p">,</span><span class="mi">1000</span><span class="p">.</span><span class="mi">0</span><span class="p">,</span><span class="mi">1100</span><span class="p">.</span><span class="mi">0</span><span class="p">),</span><span class="w"> </span><span class="n">newcountyshape</span><span class="p">)</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="n">distance</span> |
| <span class="k">FROM</span><span class="w"> </span><span class="n">spatialdf</span> |
| <span class="k">ORDER</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="n">distance</span><span class="w"> </span><span class="k">DESC</span> |
| <span class="k">LIMIT</span><span class="w"> </span><span class="mi">5</span> |
| </code></pre></div> |
| <h3 id="_6">连接查询<a class="headerlink" href="#_6" title="Permanent link">¶</a></h3> |
| <p>连接查询的细节请参阅 <a href="../../api/sql/Optimizer/">Join query</a>。</p> |
| <h3 id="knn_1">KNN 连接查询<a class="headerlink" href="#knn_1" title="Permanent link">¶</a></h3> |
| <p>KNN 连接查询的细节请参阅 <a href="../../api/sql/NearestNeighbourSearching/">KNN join query</a>。</p> |
| <h3 id="_7">其他查询<a class="headerlink" href="#_7" title="Permanent link">¶</a></h3> |
| <p>还有许多函数可以与上述查询组合使用,详见 <a href="../../api/sql/Overview/">SedonaSQL 函数</a> 与 <a href="../../api/sql/Geometry-Functions/#aggregate-functions">SedonaSQL 聚合函数</a>。</p> |
| <h2 id="_8">可视化查询结果<a class="headerlink" href="#_8" title="Permanent link">¶</a></h2> |
| <p>Sedona 提供 <code>SedonaPyDeck</code> 与 <code>SedonaKepler</code> 两种封装,都提供了在 Jupyter 环境中基于 SedonaDataFrame 创建交互式地图可视化的 API。</p> |
| <div class="admonition note"> |
| <p class="admonition-title">Note</p> |
| <p><code>SedonaPyDeck</code> 与 <code>SedonaKepler</code> 默认要求几何对象按 lon-lat 顺序排列。如果您的 DataFrame 是 lat-lon 顺序,请使用 <a href="../../api/sql/Geometry-Editors/ST_FlipCoordinates/">ST_FlipCoordinates</a>。</p> |
| </div> |
| <div class="admonition note"> |
| <p class="admonition-title">Note</p> |
| <p><code>SedonaPyDeck</code> 与 <code>SedonaKepler</code> 设计上仅处理只含 1 个几何列的 SedonaDataFrame,传入包含多个几何列的 DataFrame 会出错。</p> |
| </div> |
| <h3 id="sedonapydeck">SedonaPyDeck<a class="headerlink" href="#sedonapydeck" title="Permanent link">¶</a></h3> |
| <p>可在 Jupyter Lab/Notebook 中通过 SedonaPyDeck 可视化空间查询结果。</p> |
| <p>SedonaPyDeck 基于 <a href="https://deckgl.readthedocs.io">pydeck</a>(构建于 <a href="https://deck.gl/">deck.gl</a> 之上)提供创建交互式地图的 API。</p> |
| <div class="admonition note"> |
| <p class="admonition-title">Note</p> |
| <p>使用 SedonaPyDeck 需要安装 sedona 的 <code>pydeck-map</code> 附加项: |
| <div class="highlight"><pre><span></span><code>pip install apache-sedona[pydeck-map] |
| </code></pre></div></p> |
| </div> |
| <p>下面的教程展示了 SedonaPyDeck 可创建的多种地图,所用数据集均为公开数据。</p> |
| <p>每个 SedonaPyDeck API 都通过可选参数提供定制能力,所有可用参数详见 <a href="../../api/sql/Visualization-SedonaPyDeck/">SedonaPyDeck API 文档</a>。</p> |
| <h4 id="sedonapydeck-choropleth">使用 SedonaPyDeck 创建 Choropleth 地图<a class="headerlink" href="#sedonapydeck-choropleth" title="Permanent link">¶</a></h4> |
| <p>SedonaPyDeck 的 <code>create_choropleth_map</code> API 可基于包含多边形与观测值的 SedonaDataFrame 创建 choropleth 地图:</p> |
| <p>示例:</p> |
| <div class="highlight"><pre><span></span><code><span class="n">SedonaPyDeck</span><span class="o">.</span><span class="n">create_choropleth_map</span><span class="p">(</span><span class="n">df</span><span class="o">=</span><span class="n">groupedresult</span><span class="p">,</span> <span class="n">plot_col</span><span class="o">=</span><span class="s2">"AirportCount"</span><span class="p">)</span> |
| </code></pre></div> |
| <div class="admonition note"> |
| <p class="admonition-title">Note</p> |
| <p><code>plot_col</code> 是必填参数,用于告诉 SedonaPyDeck 渲染 choropleth 时使用哪一列。</p> |
| </div> |
| <p><img alt="使用 SedonaPyDeck 创建 Choropleth 地图" src="../../../image/choropleth.gif" /></p> |
| <p>所用数据集见 <a href="https://github.com/apache/sedona/tree/b66e768155866a38ba2e3404f1151cac14fad5ea/docs/usecases/data/ne_50m_airports">此处</a>,对应示例 notebook 见 <a href="https://github.com/apache/sedona/blob/master/docs/usecases/legacy/ApacheSedonaSQL_SpatialJoin_AirportsPerCountry.ipynb">此处</a>。</p> |
| <h4 id="sedonapydeck-geometry">使用 SedonaPyDeck 创建 Geometry 地图<a class="headerlink" href="#sedonapydeck-geometry" title="Permanent link">¶</a></h4> |
| <p>SedonaPyDeck 的 <code>create_geometry_map</code> API 可可视化任意类型几何对象的 SedonaDataFrame:</p> |
| <p>示例:</p> |
| <div class="highlight"><pre><span></span><code><span class="n">SedonaPyDeck</span><span class="o">.</span><span class="n">create_geometry_map</span><span class="p">(</span><span class="n">df_building</span><span class="p">,</span> <span class="n">elevation_col</span><span class="o">=</span><span class="s2">"height"</span><span class="p">)</span> |
| </code></pre></div> |
| <p><img alt="使用 SedonaPyDeck 创建 Geometry 地图" src="../../../image/buildings.gif" /></p> |
| <div class="admonition tip"> |
| <p class="admonition-title">Tip</p> |
| <p><code>elevation_col</code> 是可选参数,用于渲染 3D 地图。请把对应几何对象 “高度” 信息所在的列名传入此参数。</p> |
| </div> |
| <h4 id="sedonapydeck-scatterplot">使用 SedonaPyDeck 创建 Scatterplot 地图<a class="headerlink" href="#sedonapydeck-scatterplot" title="Permanent link">¶</a></h4> |
| <p>SedonaPyDeck 的 <code>create_scatterplot_map</code> API 可基于包含点的 SedonaDataFrame 创建散点地图:</p> |
| <p>示例:</p> |
| <div class="highlight"><pre><span></span><code><span class="n">SedonaPyDeck</span><span class="o">.</span><span class="n">create_scatterplot_map</span><span class="p">(</span><span class="n">df</span><span class="o">=</span><span class="n">crimes_df</span><span class="p">)</span> |
| </code></pre></div> |
| <p><img alt="使用 SedonaPyDeck 创建 Scatterplot 地图" src="../../../image/points.gif" /></p> |
| <p>所用的是 Chicago crimes 数据集,见 <a href="https://github.com/apache/sedona/blob/sedona-1.5.0/spark/common/src/test/resources/Chicago_Crimes.csv">此处</a>。</p> |
| <h4 id="sedonapydeck_1">使用 SedonaPyDeck 创建热力图<a class="headerlink" href="#sedonapydeck_1" title="Permanent link">¶</a></h4> |
| <p>SedonaPyDeck 的 <code>create_heatmap</code> API 可基于包含点的 SedonaDataFrame 创建热力图:</p> |
| <p>示例:</p> |
| <div class="highlight"><pre><span></span><code><span class="n">SedonaPyDeck</span><span class="o">.</span><span class="n">create_heatmap</span><span class="p">(</span><span class="n">df</span><span class="o">=</span><span class="n">crimes_df</span><span class="p">)</span> |
| </code></pre></div> |
| <p><img alt="使用 SedonaPyDeck 创建热力图" src="../../../image/heatmap.gif" /></p> |
| <p>所用同样是 Chicago crimes 数据集,见 <a href="https://github.com/apache/sedona/blob/sedona-1.5.0/spark/common/src/test/resources/Chicago_Crimes.csv">此处</a>。</p> |
| <h3 id="sedonakepler">SedonaKepler<a class="headerlink" href="#sedonakepler" title="Permanent link">¶</a></h3> |
| <p>可在 Jupyter Lab/Notebook 中通过 SedonaKepler 可视化空间查询结果。</p> |
| <p>SedonaKepler 提供基于 <a href="https://kepler.gl/">KeplerGl</a> 的交互式、可定制地图可视化 API。</p> |
| <div class="admonition note"> |
| <p class="admonition-title">Note</p> |
| <p>使用 SedonaKepler 需要安装 sedona 的 <code>kepler-map</code> 附加项: |
| <div class="highlight"><pre><span></span><code>pip install apache-sedona[kepler-map] |
| </code></pre></div></p> |
| </div> |
| <p>下面演示如何使用 SedonaKepler 立即可视化地理空间数据。</p> |
| <p>示例(取自 binder 提供的示例 notebook):</p> |
| <div class="highlight"><pre><span></span><code><span class="n">SedonaKepler</span><span class="o">.</span><span class="n">create_map</span><span class="p">(</span><span class="n">df</span><span class="o">=</span><span class="n">groupedresult</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s2">"AirportCount"</span><span class="p">)</span> |
| </code></pre></div> |
| <p><img alt="使用 SedonaKepler 可视化地理空间数据" src="../../../image/sedona_customization.gif" /></p> |
| <p>所用数据集见 <a href="https://github.com/apache/sedona/tree/b66e768155866a38ba2e3404f1151cac14fad5ea/docs/usecases/data/ne_50m_airports">此处</a>,示例 notebook 见 <a href="https://github.com/apache/sedona/blob/master/docs/usecases/legacy/ApacheSedonaSQL_SpatialJoin_AirportsPerCountry.ipynb">此处</a>。</p> |
| <p>SedonaKepler 提供的所有 API 详见 <a href="../../api/sql/Visualization-SedonaKepler/">SedonaKepler API 文档</a>。</p> |
| <h2 id="udf">创建用户自定义函数(UDF)<a class="headerlink" href="#udf" title="Permanent link">¶</a></h2> |
| <p>用户自定义函数(UDF)是用户编写的函数,可以对单行数据执行操作。为了覆盖几乎所有的使用场景,下面给出 4 种不同形式的 UDF 示例,演示如何在 UDF 中使用几何对象。Sedona 的序列化器会把 SQL 几何类型反序列化为 <a href="https://locationtech.github.io/jts/javadoc-1.18.0/org/locationtech/jts/geom/Geometry.html">JTS Geometry</a>(Scala/Java)或 <a href="https://shapely.readthedocs.io/en/stable/geometry.html">Shapely Geometry</a>(Python),可以充分利用这两个生态实现自定义逻辑。</p> |
| <h3 id="geometry-primitive">Geometry 转 primitive<a class="headerlink" href="#geometry-primitive" title="Permanent link">¶</a></h3> |
| <p>下例 UDF 接收 Geometry 类型输入,返回基本类型输出:</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="15:3"><input checked="checked" id="__tabbed_15_1" name="__tabbed_15" type="radio" /><input id="__tabbed_15_2" name="__tabbed_15" type="radio" /><input id="__tabbed_15_3" name="__tabbed_15" type="radio" /><div class="tabbed-labels"><label for="__tabbed_15_1">Scala</label><label for="__tabbed_15_2">Java</label><label for="__tabbed_15_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="k">import</span><span class="w"> </span><span class="nn">org</span><span class="p">.</span><span class="nn">locationtech</span><span class="p">.</span><span class="nn">jts</span><span class="p">.</span><span class="nn">geom</span><span class="p">.</span><span class="nc">Geometry</span> |
| <span class="k">import</span><span class="w"> </span><span class="nn">org</span><span class="p">.</span><span class="nn">apache</span><span class="p">.</span><span class="nn">spark</span><span class="p">.</span><span class="nn">sql</span><span class="p">.</span><span class="nn">types</span><span class="p">.</span><span class="n">_</span> |
| |
| <span class="k">def</span><span class="w"> </span><span class="nf">lengthPoly</span><span class="p">(</span><span class="n">geom</span><span class="p">:</span><span class="w"> </span><span class="nc">Geometry</span><span class="p">):</span><span class="w"> </span><span class="nc">Double</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span> |
| <span class="w"> </span><span class="n">geom</span><span class="p">.</span><span class="n">getLength</span> |
| <span class="p">}</span> |
| |
| <span class="n">sedona</span><span class="p">.</span><span class="n">udf</span><span class="p">.</span><span class="n">register</span><span class="p">(</span><span class="s">"udf_lengthPoly"</span><span class="p">,</span><span class="w"> </span><span class="n">lengthPoly</span><span class="w"> </span><span class="n">_</span><span class="p">)</span> |
| |
| <span class="n">df</span><span class="p">.</span><span class="n">selectExpr</span><span class="p">(</span><span class="s">"udf_lengthPoly(geom)"</span><span class="p">).</span><span class="n">show</span><span class="p">()</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">org.apache.spark.sql.api.java.UDF1</span><span class="p">;</span> |
| <span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.spark.sql.types.DataTypes</span><span class="p">;</span> |
| |
| <span class="c1">// 使用 lambda 注册 UDF</span> |
| <span class="n">sparkSession</span><span class="p">.</span><span class="na">udf</span><span class="p">().</span><span class="na">register</span><span class="p">(</span> |
| <span class="w"> </span><span class="s">"udf_lengthPoly"</span><span class="p">,</span> |
| <span class="w"> </span><span class="p">(</span><span class="n">UDF1</span><span class="o"><</span><span class="n">Geometry</span><span class="p">,</span><span class="w"> </span><span class="n">Double</span><span class="o">></span><span class="p">)</span><span class="w"> </span><span class="n">Geometry</span><span class="p">::</span><span class="n">getLength</span><span class="p">,</span> |
| <span class="w"> </span><span class="n">DataTypes</span><span class="p">.</span><span class="na">DoubleType</span><span class="p">);</span> |
| |
| <span class="n">df</span><span class="p">.</span><span class="na">selectExpr</span><span class="p">(</span><span class="s">"udf_lengthPoly(geom)"</span><span class="p">).</span><span class="na">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark.sql.types</span><span class="w"> </span><span class="kn">import</span> <span class="n">GeometryType</span> |
| <span class="kn">from</span><span class="w"> </span><span class="nn">pyspark.sql.types</span><span class="w"> </span><span class="kn">import</span> <span class="n">DoubleType</span> |
| |
| <span class="k">def</span><span class="w"> </span><span class="nf">lengthPoly</span><span class="p">(</span><span class="n">geom</span><span class="p">:</span> <span class="n">GeometryType</span><span class="p">()):</span> |
| <span class="k">return</span> <span class="n">geom</span><span class="o">.</span><span class="n">length</span> |
| |
| <span class="n">sedona</span><span class="o">.</span><span class="n">udf</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="s2">"udf_lengthPoly"</span><span class="p">,</span> <span class="n">lengthPoly</span><span class="p">,</span> <span class="n">DoubleType</span><span class="p">())</span> |
| |
| <span class="n">df</span><span class="o">.</span><span class="n">selectExpr</span><span class="p">(</span><span class="s2">"udf_lengthPoly(geom)"</span><span class="p">)</span><span class="o">.</span><span class="n">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>输出:</p> |
| <div class="highlight"><pre><span></span><code>+--------------------+ |
| |udf_lengthPoly(geom)| |
| +--------------------+ |
| | 3.414213562373095| |
| +--------------------+ |
| </code></pre></div> |
| <h3 id="geometry-geometry">Geometry 转 Geometry<a class="headerlink" href="#geometry-geometry" title="Permanent link">¶</a></h3> |
| <p>下例 UDF 接收 Geometry 类型输入,返回 Geometry 类型输出:</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="16:3"><input checked="checked" id="__tabbed_16_1" name="__tabbed_16" type="radio" /><input id="__tabbed_16_2" name="__tabbed_16" type="radio" /><input id="__tabbed_16_3" name="__tabbed_16" type="radio" /><div class="tabbed-labels"><label for="__tabbed_16_1">Scala</label><label for="__tabbed_16_2">Java</label><label for="__tabbed_16_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="k">import</span><span class="w"> </span><span class="nn">org</span><span class="p">.</span><span class="nn">locationtech</span><span class="p">.</span><span class="nn">jts</span><span class="p">.</span><span class="nn">geom</span><span class="p">.</span><span class="nc">Geometry</span> |
| <span class="k">import</span><span class="w"> </span><span class="nn">org</span><span class="p">.</span><span class="nn">apache</span><span class="p">.</span><span class="nn">spark</span><span class="p">.</span><span class="nn">sql</span><span class="p">.</span><span class="nn">types</span><span class="p">.</span><span class="n">_</span> |
| |
| <span class="k">def</span><span class="w"> </span><span class="nf">bufferFixed</span><span class="p">(</span><span class="n">geom</span><span class="p">:</span><span class="w"> </span><span class="nc">Geometry</span><span class="p">):</span><span class="w"> </span><span class="nc">Geometry</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span> |
| <span class="w"> </span><span class="n">geom</span><span class="p">.</span><span class="n">buffer</span><span class="p">(</span><span class="mf">5.5</span><span class="p">)</span> |
| <span class="p">}</span> |
| |
| <span class="n">sedona</span><span class="p">.</span><span class="n">udf</span><span class="p">.</span><span class="n">register</span><span class="p">(</span><span class="s">"udf_bufferFixed"</span><span class="p">,</span><span class="w"> </span><span class="n">bufferFixed</span><span class="w"> </span><span class="n">_</span><span class="p">)</span> |
| |
| <span class="n">df</span><span class="p">.</span><span class="n">selectExpr</span><span class="p">(</span><span class="s">"udf_bufferFixed(geom)"</span><span class="p">).</span><span class="n">show</span><span class="p">()</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">org.apache.spark.sql.api.java.UDF1</span><span class="p">;</span> |
| <span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.spark.sql.types.DataTypes</span><span class="p">;</span> |
| |
| <span class="c1">// 使用 lambda 注册 UDF</span> |
| <span class="n">sparkSession</span><span class="p">.</span><span class="na">udf</span><span class="p">().</span><span class="na">register</span><span class="p">(</span> |
| <span class="w"> </span><span class="s">"udf_bufferFixed"</span><span class="p">,</span> |
| <span class="w"> </span><span class="p">(</span><span class="n">UDF1</span><span class="o"><</span><span class="n">Geometry</span><span class="p">,</span><span class="w"> </span><span class="n">Geometry</span><span class="o">></span><span class="p">)</span><span class="w"> </span><span class="n">geom</span><span class="w"> </span><span class="o">-></span> |
| <span class="w"> </span><span class="n">geom</span><span class="p">.</span><span class="na">buffer</span><span class="p">(</span><span class="mf">5.5</span><span class="p">),</span> |
| <span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">GeometryUDT</span><span class="p">());</span> |
| |
| <span class="n">df</span><span class="p">.</span><span class="na">selectExpr</span><span class="p">(</span><span class="s">"udf_bufferFixed(geom)"</span><span class="p">).</span><span class="na">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark</span><span class="w"> </span><span class="kn">import</span> <span class="n">GeometryType</span> |
| <span class="kn">from</span><span class="w"> </span><span class="nn">pyspark.sql.types</span><span class="w"> </span><span class="kn">import</span> <span class="n">DoubleType</span> |
| |
| <span class="k">def</span><span class="w"> </span><span class="nf">bufferFixed</span><span class="p">(</span><span class="n">geom</span><span class="p">:</span> <span class="n">GeometryType</span><span class="p">()):</span> |
| <span class="k">return</span> <span class="n">geom</span><span class="o">.</span><span class="n">buffer</span><span class="p">(</span><span class="mf">5.5</span><span class="p">)</span> |
| |
| <span class="n">sedona</span><span class="o">.</span><span class="n">udf</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="s2">"udf_bufferFixed"</span><span class="p">,</span> <span class="n">bufferFixed</span><span class="p">,</span> <span class="n">GeometryType</span><span class="p">())</span> |
| |
| <span class="n">df</span><span class="o">.</span><span class="n">selectExpr</span><span class="p">(</span><span class="s2">"udf_bufferFixed(geom)"</span><span class="p">)</span><span class="o">.</span><span class="n">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>输出:</p> |
| <div class="highlight"><pre><span></span><code>+--------------------------------------------------+ |
| | udf_bufferFixed(geom)| |
| +--------------------------------------------------+ |
| |POLYGON ((1 -4.5, -0.0729967710887076 -4.394319...| |
| +--------------------------------------------------+ |
| </code></pre></div> |
| <h3 id="geometry-primitive-geometry">Geometry + primitive 转 Geometry<a class="headerlink" href="#geometry-primitive-geometry" title="Permanent link">¶</a></h3> |
| <p>下例 UDF 接收 Geometry 与基本类型两个输入,返回 Geometry 输出:</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="17:3"><input checked="checked" id="__tabbed_17_1" name="__tabbed_17" type="radio" /><input id="__tabbed_17_2" name="__tabbed_17" type="radio" /><input id="__tabbed_17_3" name="__tabbed_17" type="radio" /><div class="tabbed-labels"><label for="__tabbed_17_1">Scala</label><label for="__tabbed_17_2">Java</label><label for="__tabbed_17_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="k">import</span><span class="w"> </span><span class="nn">org</span><span class="p">.</span><span class="nn">locationtech</span><span class="p">.</span><span class="nn">jts</span><span class="p">.</span><span class="nn">geom</span><span class="p">.</span><span class="nc">Geometry</span> |
| <span class="k">import</span><span class="w"> </span><span class="nn">org</span><span class="p">.</span><span class="nn">apache</span><span class="p">.</span><span class="nn">spark</span><span class="p">.</span><span class="nn">sql</span><span class="p">.</span><span class="nn">types</span><span class="p">.</span><span class="n">_</span> |
| |
| <span class="k">def</span><span class="w"> </span><span class="nf">bufferIt</span><span class="p">(</span><span class="n">geom</span><span class="p">:</span><span class="w"> </span><span class="nc">Geometry</span><span class="p">,</span><span class="w"> </span><span class="n">distance</span><span class="p">:</span><span class="w"> </span><span class="nc">Double</span><span class="p">):</span><span class="w"> </span><span class="nc">Geometry</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span> |
| <span class="w"> </span><span class="n">geom</span><span class="p">.</span><span class="n">buffer</span><span class="p">(</span><span class="n">distance</span><span class="p">)</span> |
| <span class="p">}</span> |
| |
| <span class="n">sedona</span><span class="p">.</span><span class="n">udf</span><span class="p">.</span><span class="n">register</span><span class="p">(</span><span class="s">"udf_buffer"</span><span class="p">,</span><span class="w"> </span><span class="n">bufferIt</span><span class="w"> </span><span class="n">_</span><span class="p">)</span> |
| |
| <span class="n">df</span><span class="p">.</span><span class="n">selectExpr</span><span class="p">(</span><span class="s">"udf_buffer(geom, distance)"</span><span class="p">).</span><span class="n">show</span><span class="p">()</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">org.apache.spark.sql.api.java.UDF2</span><span class="p">;</span> |
| <span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.spark.sql.types.DataTypes</span><span class="p">;</span> |
| |
| <span class="c1">// 使用 lambda 注册 UDF</span> |
| <span class="n">sparkSession</span><span class="p">.</span><span class="na">udf</span><span class="p">().</span><span class="na">register</span><span class="p">(</span> |
| <span class="w"> </span><span class="s">"udf_buffer"</span><span class="p">,</span> |
| <span class="w"> </span><span class="p">(</span><span class="n">UDF2</span><span class="o"><</span><span class="n">Geometry</span><span class="p">,</span><span class="w"> </span><span class="n">Double</span><span class="p">,</span><span class="w"> </span><span class="n">Geometry</span><span class="o">></span><span class="p">)</span><span class="w"> </span><span class="n">Geometry</span><span class="p">::</span><span class="n">buffer</span><span class="p">,</span> |
| <span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">GeometryUDT</span><span class="p">());</span> |
| |
| <span class="n">df</span><span class="p">.</span><span class="na">selectExpr</span><span class="p">(</span><span class="s">"udf_buffer(geom, distance)"</span><span class="p">).</span><span class="na">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark</span><span class="w"> </span><span class="kn">import</span> <span class="n">GeometryType</span> |
| <span class="kn">from</span><span class="w"> </span><span class="nn">pyspark.sql.types</span><span class="w"> </span><span class="kn">import</span> <span class="n">DoubleType</span> |
| |
| <span class="k">def</span><span class="w"> </span><span class="nf">bufferIt</span><span class="p">(</span><span class="n">geom</span><span class="p">:</span> <span class="n">GeometryType</span><span class="p">(),</span> <span class="n">distance</span><span class="p">:</span> <span class="n">DoubleType</span><span class="p">()):</span> |
| <span class="k">return</span> <span class="n">geom</span><span class="o">.</span><span class="n">buffer</span><span class="p">(</span><span class="n">distance</span><span class="p">)</span> |
| |
| <span class="n">sedona</span><span class="o">.</span><span class="n">udf</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="s2">"udf_buffer"</span><span class="p">,</span> <span class="n">bufferIt</span><span class="p">,</span> <span class="n">GeometryType</span><span class="p">())</span> |
| |
| <span class="n">df</span><span class="o">.</span><span class="n">selectExpr</span><span class="p">(</span><span class="s2">"udf_buffer(geom, distance)"</span><span class="p">)</span><span class="o">.</span><span class="n">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>输出:</p> |
| <div class="highlight"><pre><span></span><code>+--------------------------------------------------+ |
| | udf_buffer(geom, distance)| |
| +--------------------------------------------------+ |
| |POLYGON ((1 -9, -0.9509032201612866 -8.80785280...| |
| +--------------------------------------------------+ |
| </code></pre></div> |
| <h3 id="geometry-primitive-geometry-primitive">Geometry + primitive 转 Geometry + primitive<a class="headerlink" href="#geometry-primitive-geometry-primitive" title="Permanent link">¶</a></h3> |
| <p>下例 UDF 接收 Geometry 与基本类型两个输入,同时返回 Geometry 与基本类型两个输出:</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="18:3"><input checked="checked" id="__tabbed_18_1" name="__tabbed_18" type="radio" /><input id="__tabbed_18_2" name="__tabbed_18" type="radio" /><input id="__tabbed_18_3" name="__tabbed_18" type="radio" /><div class="tabbed-labels"><label for="__tabbed_18_1">Scala</label><label for="__tabbed_18_2">Java</label><label for="__tabbed_18_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="k">import</span><span class="w"> </span><span class="nn">org</span><span class="p">.</span><span class="nn">locationtech</span><span class="p">.</span><span class="nn">jts</span><span class="p">.</span><span class="nn">geom</span><span class="p">.</span><span class="nc">Geometry</span> |
| <span class="k">import</span><span class="w"> </span><span class="nn">org</span><span class="p">.</span><span class="nn">apache</span><span class="p">.</span><span class="nn">spark</span><span class="p">.</span><span class="nn">sql</span><span class="p">.</span><span class="nn">types</span><span class="p">.</span><span class="n">_</span> |
| <span class="k">import</span><span class="w"> </span><span class="nn">org</span><span class="p">.</span><span class="nn">apache</span><span class="p">.</span><span class="nn">spark</span><span class="p">.</span><span class="nn">sql</span><span class="p">.</span><span class="nn">api</span><span class="p">.</span><span class="nn">java</span><span class="p">.</span><span class="nc">UDF2</span> |
| |
| <span class="kd">val</span><span class="w"> </span><span class="n">schemaUDF</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">StructType</span><span class="p">(</span><span class="nc">Array</span><span class="p">(</span> |
| <span class="w"> </span><span class="nc">StructField</span><span class="p">(</span><span class="s">"buffed"</span><span class="p">,</span><span class="w"> </span><span class="nc">GeometryUDT</span><span class="p">),</span> |
| <span class="w"> </span><span class="nc">StructField</span><span class="p">(</span><span class="s">"length"</span><span class="p">,</span><span class="w"> </span><span class="nc">DoubleType</span><span class="p">)</span> |
| <span class="p">))</span> |
| |
| <span class="kd">val</span><span class="w"> </span><span class="n">udf_bufferLength</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">udf</span><span class="p">(</span> |
| <span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="nc">UDF2</span><span class="p">[</span><span class="nc">Geometry</span><span class="p">,</span><span class="w"> </span><span class="nc">Double</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="nc">Geometry</span><span class="p">,</span><span class="w"> </span><span class="nc">Double</span><span class="p">)]</span><span class="w"> </span><span class="p">{</span> |
| <span class="w"> </span><span class="k">def</span><span class="w"> </span><span class="nf">call</span><span class="p">(</span><span class="n">geom</span><span class="p">:</span><span class="w"> </span><span class="nc">Geometry</span><span class="p">,</span><span class="w"> </span><span class="n">distance</span><span class="p">:</span><span class="w"> </span><span class="nc">Double</span><span class="p">):</span><span class="w"> </span><span class="p">(</span><span class="nc">Geometry</span><span class="p">,</span><span class="w"> </span><span class="nc">Double</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span> |
| <span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="n">buffed</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">geom</span><span class="p">.</span><span class="n">buffer</span><span class="p">(</span><span class="n">distance</span><span class="p">)</span> |
| <span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="n">length</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">geom</span><span class="p">.</span><span class="n">getLength</span> |
| <span class="w"> </span><span class="p">(</span><span class="n">buffed</span><span class="p">,</span><span class="w"> </span><span class="n">length</span><span class="p">)</span> |
| <span class="w"> </span><span class="p">}</span> |
| <span class="w"> </span><span class="p">},</span><span class="w"> </span><span class="n">schemaUDF</span><span class="p">)</span> |
| |
| <span class="n">sedona</span><span class="p">.</span><span class="n">udf</span><span class="p">.</span><span class="n">register</span><span class="p">(</span><span class="s">"udf_bufferLength"</span><span class="p">,</span><span class="w"> </span><span class="n">udf_bufferLength</span><span class="p">)</span> |
| |
| <span class="n">data</span><span class="p">.</span><span class="n">withColumn</span><span class="p">(</span><span class="s">"bufferLength"</span><span class="p">,</span><span class="w"> </span><span class="n">expr</span><span class="p">(</span><span class="s">"udf_bufferLengths(geom, distance)"</span><span class="p">))</span> |
| <span class="w"> </span><span class="p">.</span><span class="n">select</span><span class="p">(</span><span class="s">"geom"</span><span class="p">,</span><span class="w"> </span><span class="s">"distance"</span><span class="p">,</span><span class="w"> </span><span class="s">"bufferLength.*"</span><span class="p">)</span> |
| <span class="w"> </span><span class="p">.</span><span class="n">show</span><span class="p">()</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">org.apache.spark.sql.api.java.UDF2</span><span class="p">;</span> |
| <span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.spark.sql.types.DataTypes</span><span class="p">;</span> |
| <span class="kn">import</span><span class="w"> </span><span class="nn">org.apache.spark.sql.types.StructType</span><span class="p">;</span> |
| <span class="kn">import</span><span class="w"> </span><span class="nn">scala.Tuple2</span><span class="p">;</span> |
| |
| <span class="n">StructType</span><span class="w"> </span><span class="n">schemaUDF</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">StructType</span><span class="p">()</span> |
| <span class="w"> </span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="s">"buffedGeom"</span><span class="p">,</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">GeometryUDT</span><span class="p">())</span> |
| <span class="w"> </span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="s">"length"</span><span class="p">,</span><span class="w"> </span><span class="n">DataTypes</span><span class="p">.</span><span class="na">DoubleType</span><span class="p">);</span> |
| |
| <span class="c1">// 使用 lambda 注册 UDF</span> |
| <span class="n">sparkSession</span><span class="p">.</span><span class="na">udf</span><span class="p">().</span><span class="na">register</span><span class="p">(</span><span class="s">"udf_bufferLength"</span><span class="p">,</span> |
| <span class="w"> </span><span class="p">(</span><span class="n">UDF2</span><span class="o"><</span><span class="n">Geometry</span><span class="p">,</span><span class="w"> </span><span class="n">Double</span><span class="p">,</span><span class="w"> </span><span class="n">Tuple2</span><span class="o"><</span><span class="n">Geometry</span><span class="p">,</span><span class="w"> </span><span class="n">Double</span><span class="o">>></span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="n">geom</span><span class="p">,</span><span class="w"> </span><span class="n">distance</span><span class="p">)</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="p">{</span> |
| <span class="w"> </span><span class="n">Geometry</span><span class="w"> </span><span class="n">buffed</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">geom</span><span class="p">.</span><span class="na">buffer</span><span class="p">(</span><span class="n">distance</span><span class="p">);</span> |
| <span class="w"> </span><span class="n">Double</span><span class="w"> </span><span class="n">length</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">buffed</span><span class="p">.</span><span class="na">getLength</span><span class="p">();</span> |
| <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Tuple2</span><span class="o"><></span><span class="p">(</span><span class="n">buffed</span><span class="p">,</span><span class="w"> </span><span class="n">length</span><span class="p">);</span> |
| <span class="w"> </span><span class="p">},</span> |
| <span class="w"> </span><span class="n">schemaUDF</span><span class="p">);</span> |
| |
| <span class="n">df</span><span class="p">.</span><span class="na">withColumn</span><span class="p">(</span><span class="s">"bufferLength"</span><span class="p">,</span><span class="w"> </span><span class="n">functions</span><span class="p">.</span><span class="na">expr</span><span class="p">(</span><span class="s">"udf_bufferLength(geom, distance)"</span><span class="p">))</span> |
| <span class="w"> </span><span class="p">.</span><span class="na">select</span><span class="p">(</span><span class="s">"geom"</span><span class="p">,</span><span class="w"> </span><span class="s">"distance"</span><span class="p">,</span><span class="w"> </span><span class="s">"bufferLength.*"</span><span class="p">)</span> |
| <span class="w"> </span><span class="p">.</span><span class="na">show</span><span class="p">();</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark</span><span class="w"> </span><span class="kn">import</span> <span class="n">GeometryType</span> |
| <span class="kn">from</span><span class="w"> </span><span class="nn">pyspark.sql.types</span><span class="w"> </span><span class="kn">import</span> <span class="o">*</span> |
| |
| <span class="n">schemaUDF</span> <span class="o">=</span> <span class="n">StructType</span><span class="p">([</span> |
| <span class="n">StructField</span><span class="p">(</span><span class="s2">"buffed"</span><span class="p">,</span> <span class="n">GeometryType</span><span class="p">()),</span> |
| <span class="n">StructField</span><span class="p">(</span><span class="s2">"length"</span><span class="p">,</span> <span class="n">DoubleType</span><span class="p">())</span> |
| <span class="p">])</span> |
| |
| <span class="k">def</span><span class="w"> </span><span class="nf">bufferAndLength</span><span class="p">(</span><span class="n">geom</span><span class="p">:</span> <span class="n">GeometryType</span><span class="p">(),</span> <span class="n">distance</span><span class="p">:</span> <span class="n">DoubleType</span><span class="p">()):</span> |
| <span class="n">buffed</span> <span class="o">=</span> <span class="n">geom</span><span class="o">.</span><span class="n">buffer</span><span class="p">(</span><span class="n">distance</span><span class="p">)</span> |
| <span class="n">length</span> <span class="o">=</span> <span class="n">buffed</span><span class="o">.</span><span class="n">length</span> |
| <span class="k">return</span> <span class="p">[</span><span class="n">buffed</span><span class="p">,</span> <span class="n">length</span><span class="p">]</span> |
| |
| <span class="n">sedona</span><span class="o">.</span><span class="n">udf</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="s2">"udf_bufferLength"</span><span class="p">,</span> <span class="n">bufferAndLength</span><span class="p">,</span> <span class="n">schemaUDF</span><span class="p">)</span> |
| |
| <span class="n">df</span><span class="o">.</span><span class="n">withColumn</span><span class="p">(</span><span class="s2">"bufferLength"</span><span class="p">,</span> <span class="n">expr</span><span class="p">(</span><span class="s2">"udf_bufferLength(geom, buffer)"</span><span class="p">))</span> \ |
| <span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">"geom"</span><span class="p">,</span> <span class="s2">"buffer"</span><span class="p">,</span> <span class="s2">"bufferLength.*"</span><span class="p">)</span> \ |
| <span class="o">.</span><span class="n">show</span><span class="p">()</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p>输出:</p> |
| <div class="highlight"><pre><span></span><code>+------------------------------+--------+--------------------------------------------------+-----------------+ |
| | geom|distance| buffedGeom| length| |
| +------------------------------+--------+--------------------------------------------------+-----------------+ |
| |POLYGON ((1 1, 1 2, 2 1, 1 1))| 10.0|POLYGON ((1 -9, -0.9509032201612866 -8.80785280...|66.14518337329191| |
| +------------------------------+--------+--------------------------------------------------+-----------------+ |
| </code></pre></div> |
| <h2 id="udf-python">空间向量化 UDF(仅 Python)<a class="headerlink" href="#udf-python" title="Permanent link">¶</a></h2> |
| <p>默认情况下,您在 Python 中创建的 UDF 不是向量化的,会逐行调用,速度较慢。可以使用 <code>vectorized</code> UDF,通过 Apache Arrow 以批模式执行,从而加速。</p> |
| <p>要创建向量化 UDF,请使用 <code>sedona_vectorized_udf</code> 装饰器。当前仅支持标量 UDF,向量化 UDF 通常比普通 UDF 快得多,可能达到 2 倍。</p> |
| <div class="admonition note"> |
| <p class="admonition-title">Note</p> |
| <p>当输入类型为几何对象时,请在使用 GEO_SERIES 向量化 UDF 时显式包含 BaseGeometry 类型(例如 shapely 的 Point 或 GeoPandas 的 GeoSeries),Sedona 会借此推断类型并判断数据是否需要转换。</p> |
| </div> |
| <p>装饰器签名如下:</p> |
| <div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">sedona_vectorized_udf</span><span class="p">(</span> |
| <span class="n">udf_type</span><span class="p">:</span> <span class="n">SedonaUDFType</span> <span class="o">=</span> <span class="n">SedonaUDFType</span><span class="o">.</span><span class="n">SHAPELY_SCALAR</span><span class="p">,</span> <span class="n">return_type</span><span class="p">:</span> <span class="n">DataType</span> |
| <span class="p">):</span> <span class="o">...</span> |
| </code></pre></div> |
| <p>其中 <code>udf_type</code> 是 UDF 函数的类型,目前支持:</p> |
| <ul> |
| <li>SHAPELY_SCALAR</li> |
| <li>GEO_SERIES</li> |
| </ul> |
| <p>主要差异在于函数所接收的输入数据形式不同。下面通过两个示例对几何对象执行 buffer 操作来说明。</p> |
| <h3 id="shapely-udf">Shapely 标量 UDF<a class="headerlink" href="#shapely-udf" title="Permanent link">¶</a></h3> |
| <div class="highlight"><pre><span></span><code><span class="kn">import</span><span class="w"> </span><span class="nn">shapely.geometry.base</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">b</span> |
| <span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark</span><span class="w"> </span><span class="kn">import</span> <span class="n">sedona_vectorized_udf</span> |
| |
| |
| <span class="nd">@sedona_vectorized_udf</span><span class="p">(</span><span class="n">return_type</span><span class="o">=</span><span class="n">GeometryType</span><span class="p">())</span> |
| <span class="k">def</span><span class="w"> </span><span class="nf">vectorized_buffer</span><span class="p">(</span><span class="n">geom</span><span class="p">:</span> <span class="n">b</span><span class="o">.</span><span class="n">BaseGeometry</span><span class="p">)</span> <span class="o">-></span> <span class="n">b</span><span class="o">.</span><span class="n">BaseGeometry</span><span class="p">:</span> |
| <span class="k">return</span> <span class="n">geom</span><span class="o">.</span><span class="n">buffer</span><span class="p">(</span><span class="mf">0.1</span><span class="p">)</span> |
| </code></pre></div> |
| <h3 id="geoseries-udf">GeoSeries UDF<a class="headerlink" href="#geoseries-udf" title="Permanent link">¶</a></h3> |
| <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="kn">from</span><span class="w"> </span><span class="nn">sedona.spark</span><span class="w"> </span><span class="kn">import</span> <span class="n">sedona_vectorized_udf</span><span class="p">,</span> <span class="n">SedonaUDFType</span> |
| <span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark</span><span class="w"> </span><span class="kn">import</span> <span class="n">GeometryType</span> |
| |
| |
| <span class="nd">@sedona_vectorized_udf</span><span class="p">(</span><span class="n">udf_type</span><span class="o">=</span><span class="n">SedonaUDFType</span><span class="o">.</span><span class="n">GEO_SERIES</span><span class="p">,</span> <span class="n">return_type</span><span class="o">=</span><span class="n">GeometryType</span><span class="p">())</span> |
| <span class="k">def</span><span class="w"> </span><span class="nf">vectorized_geo_series_buffer</span><span class="p">(</span><span class="n">series</span><span class="p">:</span> <span class="n">gpd</span><span class="o">.</span><span class="n">GeoSeries</span><span class="p">)</span> <span class="o">-></span> <span class="n">gpd</span><span class="o">.</span><span class="n">GeoSeries</span><span class="p">:</span> |
| <span class="n">buffered</span> <span class="o">=</span> <span class="n">series</span><span class="o">.</span><span class="n">buffer</span><span class="p">(</span><span class="mf">0.1</span><span class="p">)</span> |
| |
| <span class="k">return</span> <span class="n">buffered</span> |
| </code></pre></div> |
| <p>调用 UDF 的方式如下:</p> |
| <div class="highlight"><pre><span></span><code><span class="c1"># Shapely 标量 UDF</span> |
| <span class="n">df</span><span class="o">.</span><span class="n">withColumn</span><span class="p">(</span><span class="s2">"buffered"</span><span class="p">,</span> <span class="n">vectorized_buffer</span><span class="p">(</span><span class="n">df</span><span class="o">.</span><span class="n">geom</span><span class="p">))</span><span class="o">.</span><span class="n">show</span><span class="p">()</span> |
| |
| <span class="c1"># GeoSeries UDF</span> |
| <span class="n">df</span><span class="o">.</span><span class="n">withColumn</span><span class="p">(</span><span class="s2">"buffered"</span><span class="p">,</span> <span class="n">vectorized_geo_series_buffer</span><span class="p">(</span><span class="n">df</span><span class="o">.</span><span class="n">geom</span><span class="p">))</span><span class="o">.</span><span class="n">show</span><span class="p">()</span> |
| </code></pre></div> |
| <h2 id="_9">保存到永久存储<a class="headerlink" href="#_9" title="Permanent link">¶</a></h2> |
| <p>要把空间 DataFrame 保存到 Hive 表、HDFS 等永久存储,最简单的做法是把 Geometry 列里的每个几何对象转换回普通字符串,再把得到的 DataFrame 保存到任意位置。</p> |
| <p>把 DataFrame 中的 Geometry 列还原为 WKT 字符串列:</p> |
| <div class="highlight"><pre><span></span><code><span class="k">SELECT</span><span class="w"> </span><span class="n">ST_AsText</span><span class="p">(</span><span class="n">countyshape</span><span class="p">)</span> |
| <span class="k">FROM</span><span class="w"> </span><span class="n">polygondf</span> |
| </code></pre></div> |
| <h2 id="geojson_1">保存为 GeoJSON<a class="headerlink" href="#geojson_1" title="Permanent link">¶</a></h2> |
| <p>自 <code>v1.6.1</code> 起,Sedona 中的 GeoJSON 数据源可把空间 DataFrame 保存为单行 JSON 文件,几何对象按 GeoJSON 格式写出:</p> |
| <div class="highlight"><pre><span></span><code>df.write.format("geojson").save("YOUR/PATH.json") |
| </code></pre></div> |
| <p>写出 GeoJSON 的更多信息请参阅 <a href="../files/geojson-sedona-spark/">此页</a>。</p> |
| <h2 id="geoparquet_1">保存为 GeoParquet<a class="headerlink" href="#geoparquet_1" title="Permanent link">¶</a></h2> |
| <p>自 v<code>1.3.0</code> 起,Sedona 原生支持写出 GeoParquet 文件:</p> |
| <div class="highlight"><pre><span></span><code><span class="n">df</span><span class="p">.</span><span class="n">write</span><span class="p">.</span><span class="n">format</span><span class="p">(</span><span class="s">"geoparquet"</span><span class="p">).</span><span class="n">save</span><span class="p">(</span><span class="n">geoparquetoutputlocation</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="s">"/GeoParquet_File_Name.parquet"</span><span class="p">)</span> |
| </code></pre></div> |
| <p>写出 GeoParquet 的更多信息请参阅 <a href="../files/geoparquet-sedona-spark/">此页</a>。</p> |
| <h2 id="postgis">保存到 Postgis<a class="headerlink" href="#postgis" title="Permanent link">¶</a></h2> |
| <p>遗憾的是,Spark SQL JDBC 数据源的 'createTableColumnTypes' 选项不支持在 PostGIS 中创建几何类型,仅识别 Spark 内置类型。这意味着您需要在 Spark 之外单独管理 PostGIS 的 schema。一种做法是先在 PostGIS 中创建好包含几何列的表,再用 Spark 写入数据;也可以先用 Spark 写入数据,然后再手动把列类型改为 geometry。</p> |
| <p>PostGIS 使用 EWKB 序列化几何对象。如果您在 Sedona 中把几何对象转换为 EWKB 格式,PostGIS 端就无需再做额外转换。</p> |
| <div class="highlight"><pre><span></span><code>my_postgis_db# create table my_table (id int8, geom geometry); |
| |
| df.withColumn("geom", expr("ST_AsEWKB(geom)") |
| .write.format("jdbc") |
| .option("truncate","true") // 不让 Spark 重建表 |
| // 其他选项 |
| .save() |
| |
| // 如果写入前没有创建表,可以在写入后修改列类型 |
| my_postgis_db# alter table my_table alter column geom type geometry; |
| </code></pre></div> |
| <h2 id="dataframe-spatialrdd">在 DataFrame 与 SpatialRDD 之间互转<a class="headerlink" href="#dataframe-spatialrdd" title="Permanent link">¶</a></h2> |
| <h3 id="dataframe-spatialrdd_1">DataFrame 转 SpatialRDD<a class="headerlink" href="#dataframe-spatialrdd_1" title="Permanent link">¶</a></h3> |
| <p>使用 SedonaSQL 的 DataFrame-RDD Adapter 将 DataFrame 转换为 SpatialRDD:</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="19:3"><input checked="checked" id="__tabbed_19_1" name="__tabbed_19" type="radio" /><input id="__tabbed_19_2" name="__tabbed_19" type="radio" /><input id="__tabbed_19_3" name="__tabbed_19" type="radio" /><div class="tabbed-labels"><label for="__tabbed_19_1">Scala</label><label for="__tabbed_19_2">Java</label><label for="__tabbed_19_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kd">var</span><span class="w"> </span><span class="n">spatialRDD</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">StructuredAdapter</span><span class="p">.</span><span class="n">toSpatialRdd</span><span class="p">(</span><span class="n">spatialDf</span><span class="p">,</span><span class="w"> </span><span class="s">"usacounty"</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">SpatialRDD</span><span class="w"> </span><span class="n">spatialRDD</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">StructuredAdapter</span><span class="p">.</span><span class="na">toSpatialRdd</span><span class="p">(</span><span class="n">spatialDf</span><span class="p">,</span><span class="w"> </span><span class="s">"usacounty"</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark</span><span class="w"> </span><span class="kn">import</span> <span class="n">StructuredAdapter</span> |
| |
| <span class="n">spatialRDD</span> <span class="o">=</span> <span class="n">StructuredAdapter</span><span class="o">.</span><span class="n">toSpatialRdd</span><span class="p">(</span><span class="n">spatialDf</span><span class="p">,</span> <span class="s2">"usacounty"</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <p><code>"usacounty"</code> 是几何列的列名,可选参数。如果不提供,将使用第一个几何列。</p> |
| <h3 id="spatialrdd-dataframe">SpatialRDD 转 DataFrame<a class="headerlink" href="#spatialrdd-dataframe" title="Permanent link">¶</a></h3> |
| <p>使用 SedonaSQL 的 DataFrame-RDD Adapter 将 SpatialRDD 转换为 DataFrame。详见 <a href="../api/javadoc/sql/org/apache/sedona/sql/utils/index.html">Adapter Scaladoc</a>。</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="20:3"><input checked="checked" id="__tabbed_20_1" name="__tabbed_20" type="radio" /><input id="__tabbed_20_2" name="__tabbed_20" type="radio" /><input id="__tabbed_20_3" name="__tabbed_20" type="radio" /><div class="tabbed-labels"><label for="__tabbed_20_1">Scala</label><label for="__tabbed_20_2">Java</label><label for="__tabbed_20_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kd">var</span><span class="w"> </span><span class="n">spatialDf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">StructuredAdapter</span><span class="p">.</span><span class="n">toDf</span><span class="p">(</span><span class="n">spatialRDD</span><span class="p">,</span><span class="w"> </span><span class="n">sedona</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">Dataset</span><span class="o"><</span><span class="n">Row</span><span class="o">></span><span class="w"> </span><span class="n">spatialDf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">StructuredAdapter</span><span class="p">.</span><span class="na">toDf</span><span class="p">(</span><span class="n">spatialRDD</span><span class="p">,</span><span class="w"> </span><span class="n">sedona</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark</span><span class="w"> </span><span class="kn">import</span> <span class="n">StructuredAdapter</span> |
| |
| <span class="n">spatialDf</span> <span class="o">=</span> <span class="n">StructuredAdapter</span><span class="o">.</span><span class="n">toDf</span><span class="p">(</span><span class="n">spatialRDD</span><span class="p">,</span> <span class="n">sedona</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <h3 id="spatialrdd-dataframe_1">保留空间分区的 SpatialRDD 转 DataFrame<a class="headerlink" href="#spatialrdd-dataframe_1" title="Permanent link">¶</a></h3> |
| <p><code>StructuredAdapter.toDf()</code> 默认不保留空间分区,因为对于大多数空间数据保留空间分区会引入重复要素。这些重复是为了在执行空间连接时保证正确性而有意引入的;但当使用 Sedona 准备数据用于分发时,通常不希望出现这些重复。</p> |
| <p>可以使用 <code>StructuredAdapter</code> 与 <code>spatialRDD.spatialPartitioningWithoutDuplicates</code> 函数得到不含重复的、按空间分区的 Sedona DataFrame。这在生成均衡的 GeoParquet 文件时特别有用,可以在文件内保留空间邻近性,从而最大化 GeoParquet 的过滤下推性能。</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="21:3"><input checked="checked" id="__tabbed_21_1" name="__tabbed_21" type="radio" /><input id="__tabbed_21_2" name="__tabbed_21" type="radio" /><input id="__tabbed_21_3" name="__tabbed_21" type="radio" /><div class="tabbed-labels"><label for="__tabbed_21_1">Scala</label><label for="__tabbed_21_2">Java</label><label for="__tabbed_21_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">spatialRDD</span><span class="p">.</span><span class="n">spatialPartitioningWithoutDuplicates</span><span class="p">(</span><span class="nc">GridType</span><span class="p">.</span><span class="nc">KDBTREE</span><span class="p">)</span> |
| <span class="c1">// 期望分区数为 10(实际数量可能略有不同)</span> |
| <span class="c1">// spatialRDD.spatialPartitioningWithoutDuplicates(GridType.KDBTREE, 10)</span> |
| <span class="kd">var</span><span class="w"> </span><span class="n">spatialDf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">StructuredAdapter</span><span class="p">.</span><span class="n">toSpatialPartitionedDf</span><span class="p">(</span><span class="n">spatialRDD</span><span class="p">,</span><span class="w"> </span><span class="n">sedona</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">spatialRDD</span><span class="p">.</span><span class="na">spatialPartitioningWithoutDuplicates</span><span class="p">(</span><span class="n">GridType</span><span class="p">.</span><span class="na">KDBTREE</span><span class="p">)</span> |
| <span class="c1">// 期望分区数为 10(实际数量可能略有不同)</span> |
| <span class="c1">// spatialRDD.spatialPartitioningWithoutDuplicates(GridType.KDBTREE, 10)</span> |
| <span class="n">Dataset</span><span class="o"><</span><span class="n">Row</span><span class="o">></span><span class="w"> </span><span class="n">spatialDf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">StructuredAdapter</span><span class="p">.</span><span class="na">toSpatialPartitionedDf</span><span class="p">(</span><span class="n">spatialRDD</span><span class="p">,</span><span class="w"> </span><span class="n">sedona</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark</span><span class="w"> </span><span class="kn">import</span> <span class="n">StructuredAdapter</span> |
| |
| <span class="n">spatialRDD</span><span class="o">.</span><span class="n">spatialPartitioningWithoutDuplicates</span><span class="p">(</span><span class="n">GridType</span><span class="o">.</span><span class="n">KDBTREE</span><span class="p">)</span> |
| <span class="c1"># 期望分区数为 10(实际数量可能略有不同)</span> |
| <span class="c1"># spatialRDD.spatialPartitioningWithoutDuplicates(GridType.KDBTREE, 10)</span> |
| <span class="n">spatialDf</span> <span class="o">=</span> <span class="n">StructuredAdapter</span><span class="o">.</span><span class="n">toSpatialPartitionedDf</span><span class="p">(</span><span class="n">spatialRDD</span><span class="p">,</span> <span class="n">sedona</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| <h3 id="spatialpairrdd-dataframe">SpatialPairRDD 转 DataFrame<a class="headerlink" href="#spatialpairrdd-dataframe" title="Permanent link">¶</a></h3> |
| <p>PairRDD 是空间连接查询或距离连接查询的结果。SedonaSQL 的 DataFrame-RDD Adapter 可以把它转换为 DataFrame,但需要提供左、右 RDD 的 schema。</p> |
| <div class="tabbed-set tabbed-alternate" data-tabs="22:3"><input checked="checked" id="__tabbed_22_1" name="__tabbed_22" type="radio" /><input id="__tabbed_22_2" name="__tabbed_22" type="radio" /><input id="__tabbed_22_3" name="__tabbed_22" type="radio" /><div class="tabbed-labels"><label for="__tabbed_22_1">Scala</label><label for="__tabbed_22_2">Java</label><label for="__tabbed_22_3">Python</label></div> |
| <div class="tabbed-content"> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kd">var</span><span class="w"> </span><span class="n">joinResultDf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">StructuredAdapter</span><span class="p">.</span><span class="n">toDf</span><span class="p">(</span><span class="n">joinResultPairRDD</span><span class="p">,</span><span class="w"> </span><span class="n">leftDf</span><span class="p">.</span><span class="n">schema</span><span class="p">,</span><span class="w"> </span><span class="n">rightDf</span><span class="p">.</span><span class="n">schema</span><span class="p">,</span><span class="w"> </span><span class="n">sedona</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="n">Dataset</span><span class="w"> </span><span class="n">joinResultDf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">StructuredAdapter</span><span class="p">.</span><span class="na">toDf</span><span class="p">(</span><span class="n">joinResultPairRDD</span><span class="p">,</span><span class="w"> </span><span class="n">leftDf</span><span class="p">.</span><span class="na">schema</span><span class="p">,</span><span class="w"> </span><span class="n">rightDf</span><span class="p">.</span><span class="na">schema</span><span class="p">,</span><span class="w"> </span><span class="n">sedona</span><span class="p">);</span> |
| </code></pre></div> |
| </div> |
| <div class="tabbed-block"> |
| <div class="highlight"><pre><span></span><code><span class="kn">from</span><span class="w"> </span><span class="nn">sedona.spark</span><span class="w"> </span><span class="kn">import</span> <span class="n">StructuredAdapter</span> |
| |
| <span class="n">joinResultDf</span> <span class="o">=</span> <span class="n">StructuredAdapter</span><span class="o">.</span><span class="n">pairRddToDf</span><span class="p">(</span><span class="n">result_pair_rdd</span><span class="p">,</span> <span class="n">leftDf</span><span class="o">.</span><span class="n">schema</span><span class="p">,</span> <span class="n">rightDf</span><span class="o">.</span><span class="n">schema</span><span class="p">,</span> <span class="n">spark</span><span class="p">)</span> |
| </code></pre></div> |
| </div> |
| </div> |
| </div> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <aside class="md-source-file"> |
| |
| |
| <span class="md-source-file__fact"> |
| <span class="md-icon" title="最后更新"> |
| <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"/></svg> |
| </span> |
| <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-datetime" title="2026年5月8日 18:06:32 UTC">2026年5月8日 18:06:32</span> |
| </span> |
| |
| |
| |
| |
| |
| </aside> |
| |
| |
| |
| |
| |
| |
| </article> |
| </div> |
| |
| |
| |
| |
| <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> |
| </div> |
| |
| <button type="button" class="md-top md-icon" data-md-component="top" hidden> |
| |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg> |
| 回到页面顶部 |
| </button> |
| |
| </main> |
| |
| <footer class="footer md-footer"> |
| <div class="container"> |
| |
| <div class="footer__top"> |
| |
| <div class="col-left"> |
| <img src="../../../image/footer/logo-footer.svg" alt="" class="footer-logo"> |
| </div> |
| |
| <div class="col-right"> |
| |
| |
| <div class="md-social"> |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://github.com/apache/sedona" target="_blank" rel="noopener" title="github.com" class="md-social__link"> |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> |
| </a> |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://twitter.com/ApacheSedona" target="_blank" rel="noopener" title="twitter.com" class="md-social__link"> |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M459.4 151.7c.3 4.5.3 9.1.3 13.6 0 138.7-105.6 298.6-298.6 298.6-59.5 0-114.7-17.2-161.1-47.1 8.4 1 16.6 1.3 25.3 1.3 49.1 0 94.2-16.6 130.3-44.8-46.1-1-84.8-31.2-98.1-72.8 6.5 1 13 1.6 19.8 1.6 9.4 0 18.8-1.3 27.6-3.6-48.1-9.7-84.1-52-84.1-103v-1.3c14 7.8 30.2 12.7 47.4 13.3-28.3-18.8-46.8-51-46.8-87.4 0-19.5 5.2-37.4 14.3-53C87.4 130.8 165 172.4 252.1 176.9c-1.6-7.8-2.6-15.9-2.6-24C249.5 95.1 296.3 48 354.4 48c30.2 0 57.5 12.7 76.7 33.1 23.7-4.5 46.5-13.3 66.6-25.3-7.8 24.4-24.4 44.8-46.1 57.8 21.1-2.3 41.6-8.1 60.4-16.2-14.3 20.8-32.2 39.3-52.6 54.3"/></svg> |
| </a> |
| |
| |
| |
| |
| |
| |
| |
| |
| <a href="https://discord.gg/9A3k5dEBsY" target="_blank" rel="noopener" title="discord.gg" class="md-social__link"> |
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M492.5 69.8c-.2-.3-.4-.6-.8-.7-38.1-17.5-78.4-30-119.7-37.1-.4-.1-.8 0-1.1.1s-.6.4-.8.8c-5.5 9.9-10.5 20.2-14.9 30.6-44.6-6.8-89.9-6.8-134.4 0-4.5-10.5-9.5-20.7-15.1-30.6-.2-.3-.5-.6-.8-.8s-.7-.2-1.1-.2C162.5 39 122.2 51.5 84.1 69c-.3.1-.6.4-.8.7C7.1 183.5-13.8 294.6-3.6 404.2c0 .3.1.5.2.8s.3.4.5.6c44.4 32.9 94 58 146.8 74.2.4.1.8.1 1.1 0s.7-.4.9-.7c11.3-15.4 21.4-31.8 30-48.8.1-.2.2-.5.2-.8s0-.5-.1-.8-.2-.5-.4-.6-.4-.3-.7-.4c-15.8-6.1-31.2-13.4-45.9-21.9-.3-.2-.5-.4-.7-.6s-.3-.6-.3-.9 0-.6.2-.9.3-.5.6-.7c3.1-2.3 6.2-4.7 9.1-7.1.3-.2.6-.4.9-.4s.7 0 1 .1c96.2 43.9 200.4 43.9 295.5 0 .3-.1.7-.2 1-.2s.7.2.9.4c2.9 2.4 6 4.9 9.1 7.2.2.2.4.4.6.7s.2.6.2.9-.1.6-.3.9-.4.5-.6.6c-14.7 8.6-30 15.9-45.9 21.8-.2.1-.5.2-.7.4s-.3.4-.4.7-.1.5-.1.8.1.5.2.8c8.8 17 18.8 33.3 30 48.8.2.3.6.6.9.7s.8.1 1.1 0c52.9-16.2 102.6-41.3 147.1-74.2.2-.2.4-.4.5-.6s.2-.5.2-.8c12.3-126.8-20.5-236.9-86.9-334.5zm-302 267.7c-29 0-52.8-26.6-52.8-59.2s23.4-59.2 52.8-59.2c29.7 0 53.3 26.8 52.8 59.2 0 32.7-23.4 59.2-52.8 59.2m195.4 0c-29 0-52.8-26.6-52.8-59.2s23.4-59.2 52.8-59.2c29.7 0 53.3 26.8 52.8 59.2 0 32.7-23.2 59.2-52.8 59.2"/></svg> |
| </a> |
| |
| </div> |
| |
| </div> |
| </div> |
| |
| <hr class="footer-hr"></hr> |
| |
| <div class="footer__bot"> |
| <div class="md-copyright"> |
| |
| <div class="md-copyright__highlight">Copyright © 2026 The Apache Software Foundation. Apache Sedona, Sedona, Apache, the Apache feather logo, and the Apache Sedona project logo are either registered trademarks or trademarks of The Apache Software Foundation in the United States and other countries. All other marks mentioned may be trademarks or registered trademarks of their respective owners. Please visit <a href="https://www.apache.org/">Apache Software Foundation</a> for more details.<img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=f3e121f6-c909-4592-8be6-5bd345768cba" /><img referrerpolicy="no-referrer-when-downgrade" src="https://analytics.apache.org/matomo.php?idsite=74&rec=1" /></div> |
| |
| <div class="md-copyright__asf-links"> |
| <a href="https://www.apache.org/licenses/">License</a> | |
| <a href="https://www.apache.org/events/current-event">Events</a> | |
| <a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a> | |
| <a href="https://www.apache.org/foundation/thanks.html">Thanks</a> | |
| <a href="https://www.apache.org/security/">Security</a> | |
| <a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy</a> | |
| <a href="https://www.apache.org/foundation/marks/">Trademarks</a> |
| </div> |
| |
| <div class="md-copyright__generator">Made with <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">Material for MkDocs</a> |
| </div> |
| |
| </div> |
| </div> |
| |
| </div> |
| </footer> |
| |
| </div> |
| <div class="md-dialog" data-md-component="dialog"> |
| <div class="md-dialog__inner md-typeset"></div> |
| </div> |
| |
| |
| |
| |
| |
| <script id="__config" type="application/json">{"annotate": null, "base": "../../..", "features": ["announce.dismiss", "content.code.copy", "content.action.edit", "search.highlight", "search.share", "search.suggest", "navigation.footer", "navigation.instant", "navigation.instant.prefetch", "navigation.tabs", "navigation.tabs.sticky", "navigation.top"], "search": "../../../assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": {"default": ["latest"], "provider": "mike"}}</script> |
| |
| |
| <script src="../../../assets/javascripts/bundle.d7400e89.min.js"></script> |
| |
| <script src="../../../assets/javascripts/main.min.js"></script> |
| |
| |
| </body> |
| </html> |