You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sedona.apache.org by ji...@apache.org on 2026/05/11 19:08:01 UTC
(sedona) 02/12: [GH-2909] Translate documentation landing pages to Chinese (#2922)
This is an automated email from the ASF dual-hosted git repository.
jiayuasu pushed a commit to branch branch-1.9.0
in repository https://gitbox.apache.org/repos/asf/sedona.git
commit c4613115cf5453050aa0592d11f3df1647b8ec46
Author: Jia Yu <ji...@apache.org>
AuthorDate: Thu May 7 11:53:02 2026 -0700
[GH-2909] Translate documentation landing pages to Chinese (#2922)
(cherry picked from commit 304859290cc85e12a82015ec746a4025ba1e067e)
---
.../stylesheets/components/_lang-switch.scss | 50 +++
docs-overrides/assets/stylesheets/extra.scss | 1 +
docs-overrides/main.html | 360 ++++++++++++++-------
docs-overrides/partials/alternate.html | 15 +
docs/download.zh.md | 63 ++++
docs/sedonaflink.zh.md | 111 +++++++
docs/sedonasnow.zh.md | 55 ++++
docs/sedonaspark.zh.md | 135 ++++++++
8 files changed, 680 insertions(+), 110 deletions(-)
diff --git a/docs-overrides/assets/stylesheets/components/_lang-switch.scss b/docs-overrides/assets/stylesheets/components/_lang-switch.scss
new file mode 100644
index 0000000000..df515fa9c8
--- /dev/null
+++ b/docs-overrides/assets/stylesheets/components/_lang-switch.scss
@@ -0,0 +1,50 @@
+.sd-lang-switch {
+ display: inline-flex;
+ align-items: stretch;
+ margin: 0 0.4rem;
+ padding: 2px;
+ border: 1px solid rgba(255, 255, 255, 0.45);
+ border-radius: 999px;
+ background: rgba(255, 255, 255, 0.08);
+ font-size: 0.72rem;
+ line-height: 1;
+
+ &__item {
+ display: inline-flex;
+ align-items: center;
+ padding: 0.28rem 0.7rem;
+ color: rgba(255, 255, 255, 0.85);
+ text-decoration: none;
+ border-radius: 999px;
+ font-weight: 600;
+ letter-spacing: 0.02em;
+ transition: background-color 120ms ease, color 120ms ease;
+
+ &:hover,
+ &:focus {
+ color: #ffffff;
+ background-color: rgba(255, 255, 255, 0.18);
+ }
+
+ &--active {
+ color: #ca463a;
+ background-color: #ffffff;
+
+ &:hover,
+ &:focus {
+ color: #ca463a;
+ background-color: #ffffff;
+ }
+ }
+ }
+}
+
+@media (max-width: 600px) {
+ .sd-lang-switch {
+ font-size: 0.68rem;
+
+ &__item {
+ padding: 0.22rem 0.55rem;
+ }
+ }
+}
diff --git a/docs-overrides/assets/stylesheets/extra.scss b/docs-overrides/assets/stylesheets/extra.scss
index 632f78effe..ff3d71722b 100644
--- a/docs-overrides/assets/stylesheets/extra.scss
+++ b/docs-overrides/assets/stylesheets/extra.scss
@@ -13,6 +13,7 @@
@import "components/footer";
@import "components/sidebar";
@import "components/search-tags";
+@import "components/lang-switch";
// Pages
@import "pages/page-home";
diff --git a/docs-overrides/main.html b/docs-overrides/main.html
index 652d9c4d85..1098300f0b 100644
--- a/docs-overrides/main.html
+++ b/docs-overrides/main.html
@@ -1,9 +1,17 @@
{% extends "base.html" %}
+{# Locale shared across all blocks below. Detected once via mkdocs-static-i18n's
+ reconfigure_material flag, which sets config.theme.language per build. #}
+{%- set cur_lang = config.theme.language if config.theme.language in ['en', 'zh'] else 'en' -%}
+
{% block outdated %}
-You're not viewing the latest stable version.
+{%- set outdated_msg = {
+ 'en': ['You\'re not viewing the latest stable version.', 'Click here to go to the latest stable version.'],
+ 'zh': ['您当前查看的不是最新稳定版本。', '点击此处跳转到最新稳定版本。']
+} -%}
+{{ outdated_msg[cur_lang][0] }}
<a href="{{ '../' ~ base_url }}">
- <strong>Click here to go to the latest stable version.</strong>
+ <strong>{{ outdated_msg[cur_lang][1] }}</strong>
</a>
{% endblock %}
@@ -20,14 +28,146 @@ You're not viewing the latest stable version.
{% endblock %}
{% block header %}
+ {%- set announcement = {
+ 'en': 'Apache Sedona 1.9.0 is out now, featuring Spark 4.1 support, proj4sedona CRS transformation, Bing Tile functions, and more!',
+ 'zh': 'Apache Sedona 1.9.0 已正式发布,新增 Spark 4.1 支持、proj4sedona 坐标系转换、Bing Tile 函数等众多特性!'
+ } -%}
<div style="background: #CA463A; color: white; text-align: center; padding: 0.5rem;">
- <a href="setup/release-notes/" title="Announcement">Apache Sedona 1.9.0 is out now, featuring Spark 4.1 support, proj4sedona CRS transformation, Bing Tile functions, and more!</a>
+ <a href="{{ 'setup/release-notes/' | url }}" title="Announcement">{{ announcement[cur_lang] }}</a>
</div>
{{ super() }} {# This renders the original header below your test bar #}
{% endblock %}
{% block container %}
- {% if page.is_homepage %}
+ {% set is_home = page.is_homepage or (page.file and page.file.src_uri in ['index.md', 'index.zh.md']) %}
+ {% if is_home %}
+ {%- set i18n = {
+ 'en': {
+ 'hero_subtitle': 'Apache Sedona™ makes it easy to process spatial datasets of any scale.',
+ 'hero_cta': 'Get Started',
+ 'global_scale_title_1': 'QUERY and JOIN',
+ 'global_scale_title_2': 'from local to global scale',
+ 'typed_gps': 'GPS points',
+ 'typed_buildings': 'buildings',
+ 'typed_parcels': 'parcels',
+ 'typed_trips': 'trips',
+ 'typed_places': 'places',
+ 'typed_businesses': 'businesses',
+ 'typed_land': 'land',
+ 'typed_vegetation': 'vegetation',
+ 'typed_rasters': 'rasters',
+ 'typed_vectors': 'vectors',
+ 'typed_tabular': 'tabular tables',
+ 'get_started_title': 'Get started in seconds',
+ 'get_started_desc': 'Install SedonaDB, or run Sedona on distributed systems when you need additional scale.',
+ 'install_sedonadb_cta': 'Install SedonaDB',
+ 'deploy_title': 'Deploy Sedona where you need it',
+ 'deploy_desc': 'Choose the right runtime for your infrastructure, from local setups to distributed and cloud-native systems.',
+ 'tag_local': 'Local',
+ 'tag_batch': 'Batch',
+ 'tag_streaming': 'Streaming',
+ 'tag_cloud': 'Cloud',
+ 'sedonadb_desc': 'Standalone runtime for local processing and development.',
+ 'sedonaspark_desc': 'Distributed batch processing on Apache Spark clusters.',
+ 'sedonaflink_desc': 'Real-time spatial analytics using Apache Flink.',
+ 'sedonasnow_desc': 'Native spatial support inside Snowflake environments.',
+ 'sedona_cloud_title': 'Sedona in the Cloud',
+ 'sedona_cloud_desc': 'Integrated spatial support in your preferred cloud environment',
+ 'sedona_cloud_cta': 'Explore the ecosystem',
+ 'industries_title': 'Want to share your Sedona use case?',
+ 'industries_subtitle': 'Join our Discord or create a GitHub Discussion so we can collaborate.',
+ 'industry_mobility': 'Mobility',
+ 'industry_telecom': 'Telecom',
+ 'industry_data': 'Data and map production',
+ 'industry_logistics': 'Logistics',
+ 'industry_energy': 'Energy',
+ 'industry_finance': 'Finance',
+ 'features_title': 'Apache Sedona at a glance',
+ 'features_desc': 'Core features that define Sedona’s geospatial performance',
+ 'feature_scalable_title': 'Scalable',
+ 'feature_scalable_desc': 'Works with small or large datasets with Spark, Flink, or locally.',
+ 'feature_complete_title': 'Feature Complete',
+ 'feature_complete_desc': '300+ spatial functions, support for spatial file formats, and compatible with lakehouses and databases.',
+ 'feature_raster_title': 'Raster and Vector Support',
+ 'feature_raster_desc': 'Analyze both raster and vector datasets.',
+ 'feature_portable_title': 'Portable',
+ 'feature_portable_desc': 'Easy to run locally, in the cloud, or with any data platform.',
+ 'feature_fast_title': 'Fast',
+ 'feature_fast_desc': 'Optimized execution for single node or distributed cluster environments.',
+ 'feature_fast_cta': 'See the benchmarks',
+ 'feature_familiar_title': 'Familiar',
+ 'feature_familiar_desc': 'Supports many programming languages and runnable in the environment where you feel most comfortable.',
+ 'community_title': 'Join the community',
+ 'community_desc': 'Discover what our community has to say about their Apache Sedona experience.',
+ 'events_title': 'Monthly community meetings and programming conferences',
+ 'events_cta': 'Find Events',
+ 'events_decor_pre': 'Sedona ',
+ 'events_decor_strong': 'Events'
+ },
+ 'zh': {
+ 'hero_subtitle': 'Apache Sedona™ 让处理任意规模的空间数据变得轻而易举。',
+ 'hero_cta': '立即开始',
+ 'global_scale_title_1': '查询与连接',
+ 'global_scale_title_2': '从本地到全球规模',
+ 'typed_gps': 'GPS 轨迹点',
+ 'typed_buildings': '建筑',
+ 'typed_parcels': '地块',
+ 'typed_trips': '出行',
+ 'typed_places': '场所',
+ 'typed_businesses': '商户',
+ 'typed_land': '土地',
+ 'typed_vegetation': '植被',
+ 'typed_rasters': '栅格',
+ 'typed_vectors': '矢量',
+ 'typed_tabular': '表格数据',
+ 'get_started_title': '几秒钟即可上手',
+ 'get_started_desc': '安装 SedonaDB,或在需要更大规模时将 Sedona 部署到分布式系统。',
+ 'install_sedonadb_cta': '安装 SedonaDB',
+ 'deploy_title': '在任何需要的地方部署 Sedona',
+ 'deploy_desc': '从本地环境到分布式与云原生系统,选择最适合您基础设施的运行时。',
+ 'tag_local': '本地',
+ 'tag_batch': '批处理',
+ 'tag_streaming': '流处理',
+ 'tag_cloud': '云端',
+ 'sedonadb_desc': '面向本地处理与开发的独立运行时。',
+ 'sedonaspark_desc': '在 Apache Spark 集群上的分布式批处理。',
+ 'sedonaflink_desc': '基于 Apache Flink 的实时空间分析。',
+ 'sedonasnow_desc': '在 Snowflake 环境中提供原生空间支持。',
+ 'sedona_cloud_title': '云端的 Sedona',
+ 'sedona_cloud_desc': '在您所选的云环境中集成空间能力',
+ 'sedona_cloud_cta': '探索生态系统',
+ 'industries_title': '想分享您的 Sedona 应用案例?',
+ 'industries_subtitle': '加入我们的 Discord,或在 GitHub Discussions 发起讨论,与我们协作。',
+ 'industry_mobility': '出行',
+ 'industry_telecom': '电信',
+ 'industry_data': '数据与地图生产',
+ 'industry_logistics': '物流',
+ 'industry_energy': '能源',
+ 'industry_finance': '金融',
+ 'features_title': 'Apache Sedona 概览',
+ 'features_desc': '定义 Sedona 地理空间性能的核心特性',
+ 'feature_scalable_title': '可扩展',
+ 'feature_scalable_desc': '可在 Spark、Flink 或本地处理小型或大型数据集。',
+ 'feature_complete_title': '功能完备',
+ 'feature_complete_desc': '300+ 空间函数,支持多种空间文件格式,并与数据湖仓和数据库兼容。',
+ 'feature_raster_title': '同时支持栅格与矢量',
+ 'feature_raster_desc': '可同时分析栅格与矢量数据集。',
+ 'feature_portable_title': '可移植',
+ 'feature_portable_desc': '易于在本地、云端或任何数据平台上运行。',
+ 'feature_fast_title': '高性能',
+ 'feature_fast_desc': '面向单节点或分布式集群环境的优化执行。',
+ 'feature_fast_cta': '查看基准测试',
+ 'feature_familiar_title': '熟悉易用',
+ 'feature_familiar_desc': '支持多种编程语言,可在您最熟悉的环境中使用。',
+ 'community_title': '加入社区',
+ 'community_desc': '听听社区对 Apache Sedona 使用体验的分享。',
+ 'events_title': '每月社区会议与技术大会',
+ 'events_cta': '查看活动',
+ 'events_decor_pre': 'Sedona ',
+ 'events_decor_strong': '活动'
+ }
+ } -%}
+ {%- set t = i18n[cur_lang] -%}
<div class="page-home">
<!-- Section Hero -->
@@ -35,24 +175,24 @@ You're not viewing the latest stable version.
<div class="container">
<div class="logo-wrap">
- <img src="image/home/hero/logo.svg" alt="" class="logo">
+ <img src="{{ "image/home/hero/logo.svg" | url }}" alt="" class="logo">
<h1 class="page-title">Apache Sedona</h1>
</div>
<div class="section-description editor">
- Apache Sedona™ makes it easy to process spatial datasets of any scale.
+ {{ t.hero_subtitle }}
</div>
<div class="btn-group">
<a href="{{ page.next_page.url | url }}" title="{{ page.next_page.title | striptags }}" class="btn btn-black">
- Get Started
+ {{ t.hero_cta }}
</a>
</div>
</div>
<div class="img-bg-wrap">
- <img src="image/home/hero/mountains-desktop.svg" alt="" class="img-bg">
+ <img src="{{ "image/home/hero/mountains-desktop.svg" | url }}" alt="" class="img-bg">
</div>
</section>
@@ -63,24 +203,24 @@ You're not viewing the latest stable version.
<div class="col-left">
<div class="section-title">
- <div>QUERY and JOIN</div>
+ <div>{{ t.global_scale_title_1 }}</div>
<p class="typed-wrap"><span class="typed"></span></p>
<div class="typed-strings">
- <p>GPS points</p>
- <p>buildings</p>
- <p>parcels</p>
- <p>trips</p>
- <p>places</p>
- <p>businesses</p>
- <p>land</p>
- <p>vegetation</p>
- <p>rasters</p>
- <p>vectors</p>
- <p>tabular tables</p>
+ <p>{{ t.typed_gps }}</p>
+ <p>{{ t.typed_buildings }}</p>
+ <p>{{ t.typed_parcels }}</p>
+ <p>{{ t.typed_trips }}</p>
+ <p>{{ t.typed_places }}</p>
+ <p>{{ t.typed_businesses }}</p>
+ <p>{{ t.typed_land }}</p>
+ <p>{{ t.typed_vegetation }}</p>
+ <p>{{ t.typed_rasters }}</p>
+ <p>{{ t.typed_vectors }}</p>
+ <p>{{ t.typed_tabular }}</p>
</div>
- <div>from local to global scale</div>
+ <div>{{ t.global_scale_title_2 }}</div>
</div>
<div class="section-description editor"></div>
</div>
@@ -163,15 +303,15 @@ docker run -d -p 8888:8888 -p 8085:8085 apache/sedona:latest
</div>
<div class="col-right">
<h2 class="section-title">
- Get started in seconds
+ {{ t.get_started_title }}
</h2>
<div class="section-description editor">
- Install SedonaDB, or run Sedona on distributed systems when you need additional scale.
+ {{ t.get_started_desc }}
</div>
<div class="bth-group">
<a href="/sedonadb" class="btn btn-red">
<span class="caption">
- Install SedonaDB
+ {{ t.install_sedonadb_cta }}
</span>
</a>
</div>
@@ -183,19 +323,19 @@ docker run -d -p 8888:8888 -p 8085:8085 apache/sedona:latest
<!-- Section Deploy -->
<section class="section-deploy">
<div class="container">
- <h2 class="section-title">Deploy Sedona where you need it</h2>
- <div class="section-description editor">Choose the right runtime for your infrastructure, from local setups to distributed and cloud-native systems.</div>
+ <h2 class="section-title">{{ t.deploy_title }}</h2>
+ <div class="section-description editor">{{ t.deploy_desc }}</div>
<div class="info-grid">
<div class="info-item">
<div class="info-item__tag">
- <img src="image/home/deploy/desktop.svg" alt="" class="">
+ <img src="{{ "image/home/deploy/desktop.svg" | url }}" alt="" class="">
<div class="caption">
- Local
+ {{ t.tag_local }}
</div>
</div>
<h3 class="info-item__title">SedonaDB</h3>
- <div class="info-item__description editor">Standalone runtime for local processing and development.</div>
+ <div class="info-item__description editor">{{ t.sedonadb_desc }}</div>
<div class="info-item__cta">
<a href="/sedonadb" class="btn-link">
<span class="caption">SedonaDB</span>
@@ -211,13 +351,13 @@ docker run -d -p 8888:8888 -p 8085:8085 apache/sedona:latest
<div class="info-item">
<div class="info-item__tag">
- <img src="image/home/deploy/database.svg" alt="" class="">
+ <img src="{{ "image/home/deploy/database.svg" | url }}" alt="" class="">
<div class="caption">
- Batch
+ {{ t.tag_batch }}
</div>
</div>
<h3 class="info-item__title">SedonaSpark</h3>
- <div class="info-item__description editor">Distributed batch processing on Apache Spark clusters.</div>
+ <div class="info-item__description editor">{{ t.sedonaspark_desc }}</div>
<div class="info-item__cta">
<a href="sedonaspark" class="btn-link">
<span class="caption">SedonaSpark</span>
@@ -233,13 +373,13 @@ docker run -d -p 8888:8888 -p 8085:8085 apache/sedona:latest
<div class="info-item">
<div class="info-item__tag">
- <img src="image/home/deploy/signal.svg" alt="" class="">
+ <img src="{{ "image/home/deploy/signal.svg" | url }}" alt="" class="">
<div class="caption">
- Streaming
+ {{ t.tag_streaming }}
</div>
</div>
<h3 class="info-item__title">SedonaFlink</h3>
- <div class="info-item__description editor">Real-time spatial analytics using Apache Flink.</div>
+ <div class="info-item__description editor">{{ t.sedonaflink_desc }}</div>
<div class="info-item__cta">
<a href="sedonaflink" class="btn-link">
<span class="caption">SedonaFlink</span>
@@ -255,14 +395,14 @@ docker run -d -p 8888:8888 -p 8085:8085 apache/sedona:latest
<div class="info-item">
<div class="info-item__tag">
- <img src="image/home/deploy/snowflake.svg" alt="" class="">
+ <img src="{{ "image/home/deploy/snowflake.svg" | url }}" alt="" class="">
<div class="caption">
- Batch
+ {{ t.tag_batch }}
</div>
</div>
<h3 class="info-item__title">SedonaSnow</h3>
<div class="info-item__description editor">
- Native spatial support inside Snowflake environments.
+ {{ t.sedonasnow_desc }}
</div>
<div class="info-item__cta">
<a href="sedonasnow" class="btn-link">
@@ -279,16 +419,16 @@ docker run -d -p 8888:8888 -p 8085:8085 apache/sedona:latest
<div class="info-item info-item--wide">
<div class="info-item__tag">
- <img src="image/home/deploy/cloud.svg" alt="" class="">
+ <img src="{{ "image/home/deploy/cloud.svg" | url }}" alt="" class="">
<div class="caption">
- Cloud
+ {{ t.tag_cloud }}
</div>
</div>
- <h3 class="info-item__title">Sedona in the Cloud</h3>
- <div class="info-item__description editor">Integrated spatial support in your preferred cloud environment</div>
+ <h3 class="info-item__title">{{ t.sedona_cloud_title }}</h3>
+ <div class="info-item__description editor">{{ t.sedona_cloud_desc }}</div>
<div class="info-item__cta">
<a href="setup/overview/" class="btn-link">
- <span class="caption">Explore the ecosystem</span>
+ <span class="caption">{{ t.sedona_cloud_cta }}</span>
<span class="icon">
<svg width="19" height="19" viewBox="0 0 19 19" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3.95831 9.5H15.0416" stroke="#CA463A" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" />
@@ -309,10 +449,10 @@ docker run -d -p 8888:8888 -p 8085:8085 apache/sedona:latest
<div class="container">
<div class="content-box">
- <h2 class="section-title">Want to share your Sedona use case?</h2>
+ <h2 class="section-title">{{ t.industries_title }}</h2>
<div class="section__subtitle editor">
- Join our Discord or create a GitHub Discussion so we can collaborate.
+ {{ t.industries_subtitle }}
</div>
<div class="industries-tabs">
@@ -320,22 +460,22 @@ docker run -d -p 8888:8888 -p 8085:8085 apache/sedona:latest
<div class="industries-tabs__head-wrap">
<div class="industries-tabs__head">
<div class="industries-tabs__head-item active">
- Mobility
+ {{ t.industry_mobility }}
</div>
<div class="industries-tabs__head-item ">
- Telecom
+ {{ t.industry_telecom }}
</div>
<div class="industries-tabs__head-item">
- Data and map production
+ {{ t.industry_data }}
</div>
<div class="industries-tabs__head-item">
- Logistics
+ {{ t.industry_logistics }}
</div>
<div class="industries-tabs__head-item">
- Energy
+ {{ t.industry_energy }}
</div>
<div class="industries-tabs__head-item">
- Finance
+ {{ t.industry_finance }}
</div>
</div>
</div>
@@ -345,63 +485,63 @@ docker run -d -p 8888:8888 -p 8085:8085 apache/sedona:latest
<div data-tab="Mobility" class="industries-tabs__body-item active">
<div class="industries-grid">
<div class="grid-item">
- <img src="image/home/industries/bmw.svg" alt="" class="">
+ <img src="{{ "image/home/industries/bmw.svg" | url }}" alt="" class="">
</div>
<div class="grid-item">
- <img src="image/home/industries/gm.svg" alt="" class="">
+ <img src="{{ "image/home/industries/gm.svg" | url }}" alt="" class="">
</div>
<div class="grid-item">
- <img src="image/home/industries/placer-ai.svg" alt="" class="">
+ <img src="{{ "image/home/industries/placer-ai.svg" | url }}" alt="" class="">
</div>
<div class="grid-item">
- <img src="image/home/industries/arity.svg" alt="" class="">
+ <img src="{{ "image/home/industries/arity.svg" | url }}" alt="" class="">
</div>
</div>
</div>
<div data-tab="Telecom" class="industries-tabs__body-item">
<div class="industries-grid">
- <div class="grid-item"><img src="image/home/industries/comcast.svg" alt="" class=""></div>
- <div class="grid-item"><img src="image/home/industries/at&t.svg" alt="" class=""></div>
- <div class="grid-item"><img src="image/home/industries/telus.svg" alt="" class=""></div>
- <div class="grid-item"><img src="image/home/industries/t-mobile.svg" alt="" class=""></div>
+ <div class="grid-item"><img src="{{ "image/home/industries/comcast.svg" | url }}" alt="" class=""></div>
+ <div class="grid-item"><img src="{{ "image/home/industries/at&t.svg" | url }}" alt="" class=""></div>
+ <div class="grid-item"><img src="{{ "image/home/industries/telus.svg" | url }}" alt="" class=""></div>
+ <div class="grid-item"><img src="{{ "image/home/industries/t-mobile.svg" | url }}" alt="" class=""></div>
</div>
</div>
<div data-tab="Data and map production" class="industries-tabs__body-item">
<div class="industries-grid">
- <div class="grid-item"><img src="image/home/industries/space-x.svg" alt="" class=""></div>
- <div class="grid-item"><img src="image/home/industries/maxar.svg" alt="" class=""></div>
- <div class="grid-item"><img src="image/home/industries/mapbox.svg" alt="" class=""></div>
- <div class="grid-item"><img src="image/home/industries/tom-tom.svg" alt="" class=""></div>
+ <div class="grid-item"><img src="{{ "image/home/industries/space-x.svg" | url }}" alt="" class=""></div>
+ <div class="grid-item"><img src="{{ "image/home/industries/maxar.svg" | url }}" alt="" class=""></div>
+ <div class="grid-item"><img src="{{ "image/home/industries/mapbox.svg" | url }}" alt="" class=""></div>
+ <div class="grid-item"><img src="{{ "image/home/industries/tom-tom.svg" | url }}" alt="" class=""></div>
</div>
</div>
<div data-tab="Logistics" class="industries-tabs__body-item">
<div class="industries-grid">
- <div class="grid-item"><img src="image/home/industries/instacart.svg" alt="" class=""></div>
- <div class="grid-item"><img src="image/home/industries/uber.svg" alt="" class=""></div>
- <div class="grid-item"><img src="image/home/industries/UnitedAirlines.svg" alt="" class=""></div>
- <div class="grid-item"><img src="image/home/industries/Boeing.svg" alt="" class=""></div>
+ <div class="grid-item"><img src="{{ "image/home/industries/instacart.svg" | url }}" alt="" class=""></div>
+ <div class="grid-item"><img src="{{ "image/home/industries/uber.svg" | url }}" alt="" class=""></div>
+ <div class="grid-item"><img src="{{ "image/home/industries/UnitedAirlines.svg" | url }}" alt="" class=""></div>
+ <div class="grid-item"><img src="{{ "image/home/industries/Boeing.svg" | url }}" alt="" class=""></div>
</div>
</div>
<div data-tab="Energy" class="industries-tabs__body-item">
<div class="industries-grid">
- <div class="grid-item"><img src="image/home/industries/shell.svg" alt="" class=""></div>
- <div class="grid-item"><img src="image/home/industries/DukeEnergy.svg" alt="" class=""></div>
- <div class="grid-item"><img src="image/home/industries/PG&E.svg" alt="" class=""></div>
- <div class="grid-item"><img src="image/home/industries/Southern_Company.svg" alt="" class=""></div>
+ <div class="grid-item"><img src="{{ "image/home/industries/shell.svg" | url }}" alt="" class=""></div>
+ <div class="grid-item"><img src="{{ "image/home/industries/DukeEnergy.svg" | url }}" alt="" class=""></div>
+ <div class="grid-item"><img src="{{ "image/home/industries/PG&E.svg" | url }}" alt="" class=""></div>
+ <div class="grid-item"><img src="{{ "image/home/industries/Southern_Company.svg" | url }}" alt="" class=""></div>
</div>
</div>
<div data-tab="Finance" class="industries-tabs__body-item">
<div class="industries-grid">
- <div class="grid-item"><img src="image/home/industries/Allstate.svg" alt="" class=""></div>
- <div class="grid-item"><img src="image/home/industries/CapitalOne.svg" alt="" class=""></div>
- <div class="grid-item"><img src="image/home/industries/cigna.svg" alt="" class=""></div>
- <div class="grid-item"><img src="image/home/industries/JPMorganChase.svg" alt="" class=""></div>
- <div class="grid-item"><img src="image/home/industries/StateFarm.svg" alt="" class=""></div>
+ <div class="grid-item"><img src="{{ "image/home/industries/Allstate.svg" | url }}" alt="" class=""></div>
+ <div class="grid-item"><img src="{{ "image/home/industries/CapitalOne.svg" | url }}" alt="" class=""></div>
+ <div class="grid-item"><img src="{{ "image/home/industries/cigna.svg" | url }}" alt="" class=""></div>
+ <div class="grid-item"><img src="{{ "image/home/industries/JPMorganChase.svg" | url }}" alt="" class=""></div>
+ <div class="grid-item"><img src="{{ "image/home/industries/StateFarm.svg" | url }}" alt="" class=""></div>
</div>
</div>
@@ -427,51 +567,51 @@ docker run -d -p 8888:8888 -p 8085:8085 apache/sedona:latest
<!-- Section Features -->
<section class="section-features">
<div class="container">
- <h2 class="section-title">Apache Sedona at a glance</h2>
- <div class="section-description editor">Core features that define Sedona’s geospatial performance</div>
+ <h2 class="section-title">{{ t.features_title }}</h2>
+ <div class="section-description editor">{{ t.features_desc }}</div>
<div class="features-grid">
<div class="feature-item">
<div class="feature-item__icon">
- <img src="image/home/features/scalable.svg" alt="" class="">
+ <img src="{{ "image/home/features/scalable.svg" | url }}" alt="" class="">
</div>
- <h3 class="feature-item__title">Scalable</h3>
- <div class="feature-item__description editor">Works with small or large datasets with Spark, Flink, or locally.</div>
+ <h3 class="feature-item__title">{{ t.feature_scalable_title }}</h3>
+ <div class="feature-item__description editor">{{ t.feature_scalable_desc }}</div>
</div>
<div class="feature-item">
<div class="feature-item__icon">
- <img src="image/home/features/waves.svg" alt="" class="">
+ <img src="{{ "image/home/features/waves.svg" | url }}" alt="" class="">
</div>
- <h3 class="feature-item__title">Feature Complete</h3>
- <div class="feature-item__description editor">300+ spatial functions, support for spatial file formats, and compatible with lakehouses and databases.</div>
+ <h3 class="feature-item__title">{{ t.feature_complete_title }}</h3>
+ <div class="feature-item__description editor">{{ t.feature_complete_desc }}</div>
</div>
<div class="feature-item">
<div class="feature-item__icon">
- <img src="image/home/features/picture.svg" alt="" class="">
+ <img src="{{ "image/home/features/picture.svg" | url }}" alt="" class="">
</div>
- <h3 class="feature-item__title">Raster and Vector Support</h3>
- <div class="feature-item__description editor">Analyze both raster and vector datasets.</div>
+ <h3 class="feature-item__title">{{ t.feature_raster_title }}</h3>
+ <div class="feature-item__description editor">{{ t.feature_raster_desc }}</div>
</div>
<div class="feature-item">
<div class="feature-item__icon">
- <img src="image/home/features/cloud.svg" alt="" class="">
+ <img src="{{ "image/home/features/cloud.svg" | url }}" alt="" class="">
</div>
- <h3 class="feature-item__title">Portable</h3>
- <div class="feature-item__description editor">Easy to run locally, in the cloud, or with any data platform.</div>
+ <h3 class="feature-item__title">{{ t.feature_portable_title }}</h3>
+ <div class="feature-item__description editor">{{ t.feature_portable_desc }}</div>
</div>
<div class="feature-item">
<div class="feature-item__icon">
- <img src="image/home/features/rocket.svg" alt="" class="">
+ <img src="{{ "image/home/features/rocket.svg" | url }}" alt="" class="">
</div>
- <h3 class="feature-item__title">Fast</h3>
- <div class="feature-item__description editor">Optimized execution for single node or distribute cluster environments.</div>
+ <h3 class="feature-item__title">{{ t.feature_fast_title }}</h3>
+ <div class="feature-item__description editor">{{ t.feature_fast_desc }}</div>
<div class="feature-item__cta">
<a href="https://github.com/apache/sedona-spatialbench" class="btn-link">
- <span class="caption">See the benchmarks</span>
+ <span class="caption">{{ t.feature_fast_cta }}</span>
<span class="icon">
<svg width="19" height="19" viewBox="0 0 19 19" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3.95831 9.5H15.0416" stroke="#CA463A" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" />
@@ -484,10 +624,10 @@ docker run -d -p 8888:8888 -p 8085:8085 apache/sedona:latest
<div class="feature-item">
<div class="feature-item__icon">
- <img src="image/home/features/code.svg" alt="" class="">
+ <img src="{{ "image/home/features/code.svg" | url }}" alt="" class="">
</div>
- <h3 class="feature-item__title">Familiar</h3>
- <div class="feature-item__description editor">Supports many programming languages and runnable in the environment where you feel most comfortable.</div>
+ <h3 class="feature-item__title">{{ t.feature_familiar_title }}</h3>
+ <div class="feature-item__description editor">{{ t.feature_familiar_desc }}</div>
</div>
@@ -510,8 +650,8 @@ docker run -d -p 8888:8888 -p 8085:8085 apache/sedona:latest
<!-- Section Community -->
<section class="section-community">
<div class="container">
- <h2 class="section-title">Join the community</h2>
- <div class="section-description editor">Discover what our community has to say about their Apache Sedona experience.</div>
+ <h2 class="section-title">{{ t.community_title }}</h2>
+ <div class="section-description editor">{{ t.community_desc }}</div>
<div class="btn-group">
<a href="https://github.com/apache/sedona/discussions" class="btn btn-light-red">
<span class="caption">
@@ -546,7 +686,7 @@ docker run -d -p 8888:8888 -p 8085:8085 apache/sedona:latest
<div class="community-card">
<div class="community-card__author">
<div class="author-avatar">
- <img src="image/home/community/author.jpg" alt="" class="">
+ <img src="{{ "image/home/community/author.jpg" | url }}" alt="" class="">
</div>
<div class="author-info">
<div class="author-name">Sean Rose</div>
@@ -560,7 +700,7 @@ docker run -d -p 8888:8888 -p 8085:8085 apache/sedona:latest
<div class="community-card">
<div class="community-card__author">
<div class="author-avatar">
- <img src="image/home/community/author.jpg" alt="" class="">
+ <img src="{{ "image/home/community/author.jpg" | url }}" alt="" class="">
</div>
<div class="author-info">
<div class="author-name">Sean Rose</div>
@@ -574,7 +714,7 @@ docker run -d -p 8888:8888 -p 8085:8085 apache/sedona:latest
<div class="community-card">
<div class="community-card__author">
<div class="author-avatar">
- <img src="image/home/community/author.jpg" alt="" class="">
+ <img src="{{ "image/home/community/author.jpg" | url }}" alt="" class="">
</div>
<div class="author-info">
<div class="author-name">Sean Rose</div>
@@ -588,7 +728,7 @@ docker run -d -p 8888:8888 -p 8085:8085 apache/sedona:latest
<div class="community-card">
<div class="community-card__author">
<div class="author-avatar">
- <img src="image/home/community/author.jpg" alt="" class="">
+ <img src="{{ "image/home/community/author.jpg" | url }}" alt="" class="">
</div>
<div class="author-info">
<div class="author-name">Sean Rose</div>
@@ -602,7 +742,7 @@ docker run -d -p 8888:8888 -p 8085:8085 apache/sedona:latest
<div class="community-card">
<div class="community-card__author">
<div class="author-avatar">
- <img src="image/home/community/author.jpg" alt="" class="">
+ <img src="{{ "image/home/community/author.jpg" | url }}" alt="" class="">
</div>
<div class="author-info">
<div class="author-name">Sean Rose</div>
@@ -627,21 +767,21 @@ docker run -d -p 8888:8888 -p 8085:8085 apache/sedona:latest
<div class="content-box">
<div class="content-box__inner">
<h2 class="section-title">
- Monthly community meetings and programming conferences
+ {{ t.events_title }}
</h2>
<div class="btn-group">
<a href="community/contact/" class="btn btn-red">
<span class="caption">
- Find Events
+ {{ t.events_cta }}
</span>
</a>
</div>
</div>
- <img src="image/home/events/corner-mountains.svg" alt="" class="corner-img">
+ <img src="{{ "image/home/events/corner-mountains.svg" | url }}" alt="" class="corner-img">
<div class="events-line">
- <div>Sedona <strong>Events</strong></div>
- <div>Sedona <strong>Events</strong></div>
- <div>Sedona <strong>Events</strong></div>
+ <div>{{ t.events_decor_pre }}<strong>{{ t.events_decor_strong }}</strong></div>
+ <div>{{ t.events_decor_pre }}<strong>{{ t.events_decor_strong }}</strong></div>
+ <div>{{ t.events_decor_pre }}<strong>{{ t.events_decor_strong }}</strong></div>
</div>
</div>
</div>
diff --git a/docs-overrides/partials/alternate.html b/docs-overrides/partials/alternate.html
new file mode 100644
index 0000000000..e038aad5c4
--- /dev/null
+++ b/docs-overrides/partials/alternate.html
@@ -0,0 +1,15 @@
+{% if config.extra.alternate and config.extra.alternate | length > 1 %}
+<nav class="sd-lang-switch" aria-label="{{ lang.t('select.language') }}">
+ {% for alt in config.extra.alternate %}
+ {%- set is_active = (alt.lang == config.theme.language) -%}
+ <a
+ href="{{ alt.link | url }}"
+ hreflang="{{ alt.lang }}"
+ lang="{{ alt.lang }}"
+ target="_self"
+ class="sd-lang-switch__item{% if is_active %} sd-lang-switch__item--active{% endif %}"
+ {% if is_active %}aria-current="true"{% endif %}
+ >{{ alt.name }}</a>
+ {% endfor %}
+</nav>
+{% endif %}
diff --git a/docs/download.zh.md b/docs/download.zh.md
new file mode 100644
index 0000000000..585535de18
--- /dev/null
+++ b/docs/download.zh.md
@@ -0,0 +1,63 @@
+<!--
+ 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.
+ -->
+
+## GitHub 代码仓库
+
+最新源代码:[GitHub 代码仓库](https://github.com/apache/sedona/)
+
+历史 GeoSpark 版本:[GitHub Releases](https://github.com/apache/sedona/releases)
+
+每次提交到 master 分支后自动构建的二进制 JAR 包:[GitHub Action](https://github.com/apache/sedona/actions/workflows/java.yml)
+
+## 校验完整性
+
+[公钥](https://downloads.apache.org/sedona/KEYS)
+
+[校验说明](https://www.apache.org/info/verification.html)
+
+## 版本
+
+### 1.9.0
+
+| | 从 ASF 下载 | 校验和 | 签名 |
+|:-----------------:|:----------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------:|
+| 源代码 | [src](https://www.apache.org/dyn/closer.lua/sedona/1.9.0/apache-sedona-1.9.0-src.tar.gz) | [sha512](https://downloads.apache.org/sedona/1.9.0/apache-sedona-1.9.0-src.tar.gz.sha512) | [asc](https://downloads.apache.org/sedona/1.9.0/apache-sedona-1.9.0-src.tar.gz.asc) |
+| 二进制 | [bin](https://www.apache.org/dyn/closer.lua/sedona/1.9.0/apache-sedona-1.9.0-bin.tar.gz) | [sha512](https://downloads.apache.org/sedona/1.9.0/apache-sedona-1.9.0-bin.tar.gz.sha512) | [asc](https://downloads.apache.org/sedona/1.9.0/apache-sedona-1.9.0-bin.tar.gz.asc) |
+
+### 1.8.1
+
+| | 从 ASF 下载 | 校验和 | 签名 |
+|:-----------------:|:----------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------:|
+| 源代码 | [src](https://www.apache.org/dyn/closer.lua/sedona/1.8.1/apache-sedona-1.8.1-src.tar.gz) | [sha512](https://downloads.apache.org/sedona/1.8.1/apache-sedona-1.8.1-src.tar.gz.sha512) | [asc](https://downloads.apache.org/sedona/1.8.1/apache-sedona-1.8.1-src.tar.gz.asc) |
+| 二进制 | [bin](https://www.apache.org/dyn/closer.lua/sedona/1.8.1/apache-sedona-1.8.1-bin.tar.gz) | [sha512](https://downloads.apache.org/sedona/1.8.1/apache-sedona-1.8.1-bin.tar.gz.sha512) | [asc](https://downloads.apache.org/sedona/1.8.1/apache-sedona-1.8.1-bin.tar.gz.asc) |
+
+### 1.7.2
+
+| | 从 ASF 下载 | 校验和 | 签名 |
+|:-----------------:|:----------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------:|
+| 源代码 | [src](https://www.apache.org/dyn/closer.lua/sedona/1.7.2/apache-sedona-1.7.2-src.tar.gz) | [sha512](https://downloads.apache.org/sedona/1.7.2/apache-sedona-1.7.2-src.tar.gz.sha512) | [asc](https://downloads.apache.org/sedona/1.7.2/apache-sedona-1.7.2-src.tar.gz.asc) |
+| 二进制 | [bin](https://www.apache.org/dyn/closer.lua/sedona/1.7.2/apache-sedona-1.7.2-bin.tar.gz) | [sha512](https://downloads.apache.org/sedona/1.7.2/apache-sedona-1.7.2-bin.tar.gz.sha512) | [asc](https://downloads.apache.org/sedona/1.7.2/apache-sedona-1.7.2-bin.tar.gz.asc) |
+
+### 历史版本
+
+历史版本的 Sedona 已归档,可在以下位置找到:[Apache 归档](https://archive.apache.org/dist/sedona/)(1.2.1-incubating 及之后的版本)。
+
+## 安全
+
+如有安全相关问题,请参阅 https://www.apache.org/security/
diff --git a/docs/sedonaflink.zh.md b/docs/sedonaflink.zh.md
new file mode 100644
index 0000000000..0888e4825e
--- /dev/null
+++ b/docs/sedonaflink.zh.md
@@ -0,0 +1,111 @@
+<!--
+ 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.
+ -->
+
+# SedonaFlink
+
+SedonaFlink 将地理空间函数集成到 Apache Flink 中,是构建依赖地理空间数据的流式管道的理想选择。
+
+以下是 SedonaFlink 的一些典型应用场景:
+
+* 从 Kafka 读取地理空间数据并写入 Iceberg
+* [实时分析交通密度](https://www.alibabacloud.com/help/en/flink/realtime-flink/use-cases/analyze-traffic-density-with-flink-and-apache-sedona)
+* 电信行业的实时网络规划与优化
+
+下面是一些示例代码片段:
+
+=== "Java"
+
+ ```java
+ sedona.createTemporaryView("myTable", tbl)
+ Table geomTbl = sedona.sqlQuery("SELECT ST_GeomFromWKT(geom_polygon) as geom_polygon, name_polygon FROM myTable")
+ geomTbl.execute().print()
+ ```
+
+=== "PyFlink"
+
+ ```python
+ table_env.sql_query("SELECT ST_ASBinary(ST_Point(1.0, 2.0))").execute().collect()
+ ```
+
+## 主要特性
+
+* **实时地理空间流处理**,满足低延迟处理需求。
+* **可扩展**,适用于大规模流式管道。
+* 基于 Flink 的时间窗口实现**事件时间处理**。
+* 提供**精确一次(Exactly Once)**处理保证。
+* **可移植**,易于在任何 Flink 运行时中部署。
+* **开源**,遵循 Apache 软件基金会的准则进行管理。
+
+## 为什么在 Flink 上使用 Sedona?
+
+Flink 是为流式数据而设计的,Sedona 在此基础上为其加入了地理空间处理能力。
+
+大多数地理空间处理发生在 Spark 或 PostGIS 这类批处理系统中,对于延迟要求不高的场景这没有问题。
+
+而当需要实时处理地理空间数据时,Sedona on Flink 的优势就会显现出来。
+
+Flink 可以为地理空间查询提供毫秒级的延迟。
+
+Flink 拥有完善的容错机制,即使在故障发生时,地理空间管道也不会丢失数据。
+
+Sedona on Flink 可以在 Flink 支持的任何环境中运行,包括 Kubernetes、YARN 以及独立集群。
+
+## 工作原理
+
+Sedona 直接集成到 Flink 的 Table API 和 SQL 引擎中。
+
+在搭建 Flink 环境时注册 Sedona 的空间函数,即可在 SQL 查询中使用 `ST_Point`、`ST_Contains`、`ST_Distance` 等函数。
+
+Sedona 同时支持 Flink 的 DataStream API 与 Table API,可根据自身工作流程选用。
+
+空间运算作为 Flink 分布式执行的一部分运行,因此地理空间计算会自动在集群中并行执行。
+
+Sedona 在 Flink 内部以二进制方式存储几何对象,从而保持较低的内存占用与较高的处理速度。
+
+执行空间连接时,Sedona 在底层使用空间索引,使查询能够快速完成。
+
+容错由 Flink 的检查点(checkpoint)机制处理。如果某个节点崩溃,地理空间状态可以从最近一次检查点恢复。
+
+通常的流程是:从 Kafka 或文件系统等数据源读取地理空间数据,使用 Sedona 的空间函数进行处理,然后将结果写入 Iceberg 等数据汇。
+
+整条 SedonaFlink 管道持续运行,新事件会实时流过空间转换逻辑。
+
+## 与其他方案的对比
+
+对于较小的数据集,可能并不需要分布式集群,使用 SedonaDB 即可。
+
+对于大规模批处理管道,可以使用 SedonaSpark。
+
+下面是 SedonaFlink 与几种流式方案的直接对比。
+
+**SedonaFlink 与 Sedona on Spark Structured Streaming**
+
+Spark Streaming 采用微批(micro-batch)模式,而 Flink 是逐事件处理。在某些工作流中,这能让 Flink 的延迟更低。
+
+Flink 的状态管理也更为成熟。
+
+如果已经深度使用 Spark 生态,且 Spark Structured Streaming 的延迟可以满足需求,可以选择 Spark;如果对延迟有非常严苛的要求,建议选择 Flink。
+
+**Sedona on Flink 与 PostGIS**
+
+PostGIS 非常适合用于 OLTP 工作负载下的地理空间数据存储与查询,但它并不是为流式处理而设计的。
+
+如果使用 PostGIS 处理流式工作负载,需要持续从流处理器中查询数据库,这会增加延迟,并对数据库造成压力。
+
+SedonaFlink 在数据流转过程中即对地理空间数据进行处理,从而避免了与数据库之间的往返开销。
diff --git a/docs/sedonasnow.zh.md b/docs/sedonasnow.zh.md
new file mode 100644
index 0000000000..fbaa56f5ea
--- /dev/null
+++ b/docs/sedonasnow.zh.md
@@ -0,0 +1,55 @@
+<!--
+ 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.
+ -->
+
+# SedonaSnow
+
+SedonaSnow 将 Apache Sedona 的 200 多个地理空间函数直接引入到 Snowflake 环境中,作为 Snowflake 原生空间函数的有力补充。
+
+## 主要优势
+
+* **200+ 空间函数**:例如 3D 距离、几何对象校验、精度归约等
+* **高性能空间连接**:Sedona 针对空间连接做了专门优化
+* **无缝集成**:与 Snowflake 原生函数协同工作
+* **数据无需移动**:所有处理都在 Snowflake 内部完成
+
+## 快速上手
+
+下面是一个使用 SedonaSnow 在 Snowflake 表上执行查询的示例。
+
+```sql
+USE DATABASE SEDONASNOW;
+
+SELECT SEDONA.ST_GeomFromWKT(wkt) AS geom
+FROM your_table;
+
+SELECT SEDONA.ST_3DDistance(geom1, geom2) FROM spatial_data;
+```
+
+下面是一个空间连接的示例:
+
+```sql
+SELECT * FROM lefts, rights
+WHERE lefts.cellId = rights.cellId;
+```
+
+可以看出,SedonaSnow 能够无缝地接入现有的 Snowflake 环境。
+
+## 后续步骤
+
+如果您正在 Snowflake 中进行严肃的空间分析工作,SedonaSnow 是一个非常合适的选择。它运行速度快,并提供了丰富的空间函数。SedonaSnow 在不需要将数据迁移到其他平台的前提下,突破了 Snowflake 内置空间函数的能力限制。
diff --git a/docs/sedonaspark.zh.md b/docs/sedonaspark.zh.md
new file mode 100644
index 0000000000..cb3db6198e
--- /dev/null
+++ b/docs/sedonaspark.zh.md
@@ -0,0 +1,135 @@
+<!--
+ 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.
+ -->
+
+# SedonaSpark
+
+SedonaSpark 在 Apache Spark 之上扩展了一套丰富、开箱即用的分布式空间数据集和函数,能够在多台机器之间高效地加载、处理和分析大规模空间数据。当数据集规模超过单机处理能力时,SedonaSpark 是一个非常合适的选择。
+
+=== "SQL"
+
+ ```sql
+ SELECT superhero.name
+ FROM city, superhero
+ WHERE ST_Contains(city.geom, superhero.geom)
+ AND city.name = 'Gotham'
+ ```
+
+=== "PySpark"
+
+ ```python
+ sedona.sql("""
+ SELECT superhero.name
+ FROM city, superhero
+ WHERE ST_Contains(city.geom, superhero.geom)
+ AND city.name = 'Gotham'
+ """)
+ ```
+
+=== "Java"
+
+ ```java
+ Dataset<Row> result = spark.sql(
+ "SELECT superhero.name " +
+ "FROM city, superhero " +
+ "WHERE ST_Contains(city.geom, superhero.geom) " +
+ "AND city.name = 'Gotham'"
+ );
+ ```
+
+=== "Scala"
+
+ ```scala
+ sedona.sql("""
+ SELECT superhero.name
+ FROM city, superhero
+ WHERE ST_Contains(city.geom, superhero.geom)
+ AND city.name = 'Gotham'
+ """)
+ ```
+
+=== "R"
+
+ ```r
+ result <- sql("
+ SELECT superhero.name
+ FROM city, superhero
+ WHERE ST_Contains(city.geom, superhero.geom)
+ AND city.name = 'Gotham'
+ ")
+ ```
+
+## 主要特性
+
+* **极致性能**:SedonaSpark 在集群中的多个节点上并行执行计算,使大规模计算能够快速完成。
+* 支持**多种文件格式**,包括 GeoJSON、Shapefile、GeoParquet、STAC、JDBC、OSM PBF、CSV 和 PostGIS。
+* 提供多种**语言 API**,包括 SQL、Python、Java、Scala 和 R。
+* **可扩展**:可根据数据规模水平扩展到数十、数百乃至数千个节点,使用 SedonaSpark 处理海量空间数据集。
+* **可移植**:易于在自定义环境中运行,可在本地或云端(如 AWS EMR、Microsoft Fabric、Google DataProc)部署。
+* **可扩展定制**:可以使用自定义逻辑对 SedonaSpark 进行扩展,以满足特定的地理空间数据分析需求。
+* **开源**:Apache Sedona 是一个开源项目,遵循 Apache 软件基金会的相关准则进行管理。
+* 提供更多扩展能力,例如 [最近邻搜索](https://sedona.apache.org/latest/api/sql/NearestNeighbourSearching/) 以及诸如 [DBSCAN](https://sedona.apache.org/latest/tutorial/sql/#cluster-with-dbscan) 等空间统计算法。
+
+## 可移植性
+
+SedonaSpark 易于在本地、Docker 中或主流云平台上运行。
+
+SedonaSpark 设计为可在任何能运行 Spark 的环境中运行。许多云厂商都提供 Spark 运行时,Sedona 可以作为依赖库添加进去。
+
+在本地运行 Sedona 也很方便,可以在将代码部署到生产数据集之前快速迭代。
+
+## 使用 Spark 和 Sedona 处理矢量数据的示例
+
+下面看一下如何使用 Spark 和 Sedona 在矢量数据集上完成一次完整的工作流程。
+
+我们使用 Overture Maps Foundation 提供的基础水体数据,将纽约市地区的所有水体绘制到地图上。首先读取数据并创建视图:
+
+```
+base_water = sedona.table("open_data.overture_maps_foundation.base_water")
+base_water.createOrReplaceTempView("base_water_view")
+```
+
+然后过滤出纽约市地区范围内的水体:
+
+```python
+spot = "POLYGON ((-74.174194 40.509623, -73.635864 40.509623, -73.635864 40.93634, -74.174194 40.93634, -74.174194 40.509623))"
+query = f"""
+select id, geometry from base_water_view
+where ST_Contains(ST_GeomFromWKT('{spot}'), geometry)
+"""
+res = sedona.sql(query)
+```
+
+Sedona 与主流的可视化库无缝集成,可以轻松地从 Sedona DataFrame 创建地图。仅需两行代码即可生成一张地图:
+
+```python
+kepler_map = SedonaKepler.create_map()
+SedonaKepler.add_df(kepler_map, df=res, name="Tri-state water")
+```
+
+地图效果非常出色!
+
+
+
+通过这张地图,可以清晰地看到纽约市地区的所有河流、湖泊乃至游泳池。
+
+## 有疑问?
+
+欢迎在 GitHub Discussions 发起讨论,或者加入 Discord 社区向开发者提问。
+
+我们期待与您协作!