diff --git a/README.md b/README.md index b4f659d8dd..d810d0346e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,4 @@ - - Apache Sedona - +[![Apache Sedona](docs/image/sedona_logo.png)](https://sedona.apache.org/) [![Scala and Java build](https://github.com/apache/sedona/actions/workflows/java.yml/badge.svg)](https://github.com/apache/sedona/actions/workflows/java.yml) [![Python build](https://github.com/apache/sedona/actions/workflows/python.yml/badge.svg)](https://github.com/apache/sedona/actions/workflows/python.yml) [![R build](https://github.com/apache/sedona/actions/workflows/r.yml/badge.svg)](https://github.com/apache/sedona/actions/workflows/r.yml) [![Docker image build](https://github.com/apache/sedona/actions/workflows/docker-build.yml/badge.svg)](https://github.com/apache/sedona/actions/workflows/docker-build.yml) [![Example project build](https://github.com/apache/sedona/actions/workflows/example.yml/badge.svg)](https://github.com/apache/sedona/actions/workflows/example.yml) [![Docs build](https://github.com/apache/sedona/actions/workflows/docs.yml/badge.svg)](https://github.com/apache/sedona/actions/workflows/docs.yml) @@ -38,7 +36,7 @@ Join the Sedona monthly community office hour: [Google Calendar](https://calenda Apache Sedona™ is a spatial computing engine that enables developers to easily process spatial data at any scale within modern cluster computing systems such as Apache Spark and Apache Flink. Sedona developers can express their spatial data processing tasks in Spatial SQL, Spatial Python or Spatial R. Internally, Sedona provides spatial data loading, indexing, partitioning, and query processing/optimization functionality that enable users to efficiently analyze spatial data at any scale. -Sedona Ecosystem +![](docs/image/sedona-ecosystem.png "Sedona Ecosystem") ### Features diff --git a/docs/api/flink/Function.md b/docs/api/flink/Function.md index 4c132d5907..5c6b2f6f32 100644 --- a/docs/api/flink/Function.md +++ b/docs/api/flink/Function.md @@ -616,8 +616,9 @@ SELECT ST_Buffer(ST_GeomFromWKT('POINT(0 0)'), 10, false, 'quad_segs=2') ``` Output: -![Point buffer with 8 quadrant segments](../../image/point-buffer-quad-8.png){: width="100px"} -![Point buffer with 2 quadrant segments](../../image/point-buffer-quad-2.png){: width="100px"} + +![Point buffer with 8 quadrant segments](../../image/point-buffer-quad-8.png) +![Point buffer with 2 quadrant segments](../../image/point-buffer-quad-2.png) 8 Segments   2 Segments @@ -628,8 +629,9 @@ SELECT ST_Buffer(ST_GeomFromWKT('LINESTRING(0 0, 50 70, 100 100)'), 10, false, ' ``` Output: -![Original Linestring](../../image/linestring-og.png "Original Linestring"){: width="150px"} -![Original Linestring with buffer on the left side](../../image/linestring-left-side.png "Original Linestring with buffer on the left side"){: width="150px"} + +![Original Linestring](../../image/linestring-og.png "Original Linestring") +![Original Linestring with buffer on the left side](../../image/linestring-left-side.png "Original Linestring with buffer on the left side") Original Linestring   Left side buffed Linestring @@ -2659,7 +2661,7 @@ Format: `ST_Snap(input: Geometry, reference: Geometry, tolerance: double)` Input geometry: -![ST_Snap base example](../../image/st_snap/st-snap-base-example.png "ST_Snap base example"){: width="250"} +![ST_Snap base example](../../image/st_snap/st-snap-base-example.png "ST_Snap base example") SQL Example: @@ -2673,7 +2675,7 @@ SELECT ST_Snap( Output: -![ST_Snap applied example](../../image/st_snap/st-snap-applied.png "ST_Snap applied example"){: width="250"} +![ST_Snap applied example](../../image/st_snap/st-snap-applied.png "ST_Snap applied example") ``` POLYGON ((236877.58 -6.61, 236878.29 -8.35, 236879.98 -8.33, 236879.72 -7.63, 236880.69 -6.81, 236877.58 -6.61), (236878.45 -7.01, 236878.43 -7.52, 236879.29 -7.5, 236878.63 -7.22, 236878.76 -6.89, 236878.45 -7.01)) diff --git a/docs/api/snowflake/vector-data/Function.md b/docs/api/snowflake/vector-data/Function.md index a7e55bb391..b8df7cd1a3 100644 --- a/docs/api/snowflake/vector-data/Function.md +++ b/docs/api/snowflake/vector-data/Function.md @@ -459,8 +459,8 @@ SELECT ST_Buffer(ST_GeomFromWKT('POINT(0 0)'), 10, false, 'quad_segs=2') Output: -Point buffer with 8 quadrant segments -Point buffer with 2 quadrant segments +![Point buffer with 8 quadrant segments](../../../image/point-buffer-quad-8.png) +![Point buffer with 2 quadrant segments](../../../image/point-buffer-quad-2.png) 8 Segments   2 Segments @@ -472,8 +472,8 @@ SELECT ST_Buffer(ST_GeomFromWKT('LINESTRING(0 0, 50 70, 100 100)'), 10, false, ' Output: -Original Linestring -Original Linestring with buffer on the left side +![Original Linestring](../../../image/linestring-og.png "Original Linestring") +![Original Linestring with buffer on the left side](../../../image/linestring-left-side.png "Original Linestring with buffer on the left side") Original Linestring   Left side buffed Linestring @@ -2054,7 +2054,7 @@ Format: `ST_Snap(input: Geometry, reference: Geometry, tolerance: double)` Input geometry: - +![](../../../image/st_snap/st-snap-base-example.png "ST_Snap Base example") SQL Example: @@ -2068,7 +2068,7 @@ SELECT ST_Snap( Output: - +![](../../../image/st_snap/st-snap-applied.png "ST_Snap applied example") ``` POLYGON ((236877.58 -6.61, 236878.29 -8.35, 236879.98 -8.33, 236879.72 -7.63, 236880.69 -6.81, 236877.58 -6.61), (236878.45 -7.01, 236878.43 -7.52, 236879.29 -7.5, 236878.63 -7.22, 236878.76 -6.89, 236878.45 -7.01)) diff --git a/docs/api/sql/Function.md b/docs/api/sql/Function.md index 07c2908079..7406fe1331 100644 --- a/docs/api/sql/Function.md +++ b/docs/api/sql/Function.md @@ -611,8 +611,8 @@ SELECT ST_Buffer(ST_GeomFromWKT('POINT(0 0)'), 10, false, 'quad_segs=2') Output: -![Point buffer with 8 quadrant segments](../../image/point-buffer-quad-8.png "Point buffer with 8 quadrant segments"){: width="100px"} -![Point buffer with 2 quadrant segments](../../image/point-buffer-quad-2.png "Point buffer with 2 quadrant segments"){: width="100px"} +![Point buffer with 8 quadrant segments](../../image/point-buffer-quad-8.png "Point buffer with 8 quadrant segments") +![Point buffer with 2 quadrant segments](../../image/point-buffer-quad-2.png "Point buffer with 2 quadrant segments") 8 Segments   2 Segments @@ -624,8 +624,8 @@ SELECT ST_Buffer(ST_GeomFromWKT('LINESTRING(0 0, 50 70, 100 100)'), 10, false, ' Output: -![Original Linestring](../../image/linestring-og.png "Original Linestring"){: width="150px"} -![Original Linestring with buffer on the left side](../../image/linestring-left-side.png "Original Linestring with buffer on the left side"){: width="150px"} +![Original Linestring](../../image/linestring-og.png "Original Linestring") +![Original Linestring with buffer on the left side](../../image/linestring-left-side.png "Original Linestring with buffer on the left side") Original Linestring   Left side buffed Linestring @@ -2647,7 +2647,7 @@ Format: `ST_Snap(input: Geometry, reference: Geometry, tolerance: double)` Input geometry: -![ST_Snap base example](../../image/st_snap/st-snap-base-example.png "ST_Snap base example"){: width="250px"} +![ST_Snap base example](../../image/st_snap/st-snap-base-example.png "ST_Snap base example") SQL Example: @@ -2661,7 +2661,7 @@ SELECT ST_Snap( Output: -![ST_Snap applied example](../../image/st_snap/st-snap-applied.png "ST_Snap applied example"){: width="250px"} +![ST_Snap applied example](../../image/st_snap/st-snap-applied.png "ST_Snap applied example") ``` POLYGON ((236877.58 -6.61, 236878.29 -8.35, 236879.98 -8.33, 236879.72 -7.63, 236880.69 -6.81, 236877.58 -6.61), (236878.45 -7.01, 236878.43 -7.52, 236879.29 -7.5, 236878.63 -7.22, 236878.76 -6.89, 236878.45 -7.01)) diff --git a/docs/api/sql/Raster-operators.md b/docs/api/sql/Raster-operators.md index 6a82c67397..b1847c188b 100644 --- a/docs/api/sql/Raster-operators.md +++ b/docs/api/sql/Raster-operators.md @@ -452,15 +452,15 @@ SELECT RS_GeoReferrence(ST_MakeEmptyRaster(1, 3, 4, 100.0, 200.0,2.0, -3.0, 0.1, Introduction: Returns an array of parameters that represent the GeoTransformation of the raster. The array contains the following values: -- 0: pixel width along west-east axis (x axis) -- 1: pixel height along north-south axis (y axis) +- 0: pixel width along west-east axis (x-axis) +- 1: pixel height along north-south axis (y-axis) - 2: Rotation of the raster -- 3: Angular separation between x axis and y axis +- 3: Angular separation between x-axis and y-axis - 4: X ordinate of upper-left coordinate - 5: Y ordinate of upper-left coordinate !!!note - Refer to [this image](https://www.researchgate.net/figure/Relation-between-the-cartesian-axes-x-y-and-i-j-axes-of-the-pixels_fig3_313860913) for a clear understanding between i & j axis and x & y axis. + Refer to [this image](https://www.researchgate.net/figure/Relation-between-the-cartesian-axes-x-y-and-i-j-axes-of-the-pixels_fig3_313860913) for a clear understanding between i & j axis and x & y-axis. Format: `RS_GeoTransform(raster: Raster)` @@ -884,7 +884,7 @@ Output: ### RS_BandNoDataValue -Introduction: Returns the no data value of the given band of the given raster. If no band is given, band 1 is assumed. The band parameter is 1-indexed. If there is no no data value associated with the given band, RS_BandNoDataValue returns null. +Introduction: Returns the no data value of the given band of the given raster. If no band is given, band 1 is assumed. The band parameter is 1-indexed. If there is no data value associated with the given band, RS_BandNoDataValue returns null. !!!Note If the given band does not lie in the raster, RS_BandNoDataValue throws an IllegalArgumentException @@ -1440,7 +1440,7 @@ Since: `v1.5.1` Original Raster: -![Original raster](../../image/original-raster-clip.png "Original raster"){: width="400px"} +![Original raster](../../image/original-raster-clip.png "Original raster") SQL Example @@ -1454,7 +1454,7 @@ SELECT RS_Clip( Output: -![Cropped raster](../../image/cropped-raster.png "Cropped raster"){: width="400px"} +![Cropped raster](../../image/cropped-raster.png "Cropped raster") SQL Example @@ -1468,7 +1468,7 @@ SELECT RS_Clip( Output: -![Clipped raster](../../image/clipped-raster.png "Clipped raster"){: width="400px"} +![Clipped raster](../../image/clipped-raster.png "Clipped raster") ### RS_Interpolate @@ -1528,8 +1528,8 @@ SELECT RS_Interpolate(raster, 1, 2.0, 'Variable', 12, 1000) Output (Shown as heatmap): -![Original raster](../../image/heatmap_Interpolate.png "Original raster"){: width="400px"} -![Interpolated raster](../../image/heatmap_Interpolate2.png "Interpolated raster"){: width="400px"} +![Original raster](../../image/heatmap_Interpolate.png "Original raster") +![Interpolated raster](../../image/heatmap_Interpolate2.png "Interpolated raster") ### RS_MetaData @@ -2009,7 +2009,7 @@ Since: `v1.5.0` The `colX`, `rowY`, and `bandIndex` are 1-indexed. If `keepNoData` is `true`, the pixels with NoData value will not be set to the corresponding value in `newValues`. The `newValues` should be provided in rows. -The geometry variant of this function accepts all types of Geometries and it sets the `newValue` in the specified region under the `geom`. +The geometry variant of this function accepts all types of Geometries, and it sets the `newValue` in the specified region under the `geom`. !!!note If the shape of `newValues` doesn't match with provided `width` and `height`, `IllegalArgumentException` is thrown. diff --git a/docs/community/develop.md b/docs/community/develop.md index d6708bd2bc..6d48f4b13a 100644 --- a/docs/community/develop.md +++ b/docs/community/develop.md @@ -14,7 +14,7 @@ We recommend [Intellij IDEA](https://www.jetbrains.com/idea/) with Scala plugin #### Go to the Sedona root folder (not a submodule folder) and choose `open` -![](../image/ide-java-2.png){: width="500px"} +![](../image/ide-java-2.png) #### The IDE might show errors @@ -43,7 +43,7 @@ Make sure you reload the `pom.xml` or reload the maven project. The IDE will ask #### The final project structure should be like this: -![](../image/ide-java-3.png){: width="400px"} +![](../image/ide-java-3.png) ### Run unit tests @@ -60,11 +60,11 @@ More details can be found on [Compile Sedona](../setup/compile.md) In the IDE, right-click a test case and run this test case. -![](../image/ide-java-6.png){: width="400px"} +![](../image/ide-java-6.png) The IDE might tell you that the PATH does not exist as follows: -![](../image/ide-java-7.png){: width="600px"} +![](../image/ide-java-7.png) Go to `Edit Configuration` diff --git a/docs/image/clipped-raster.png b/docs/image/clipped-raster.png index b88943c9fc..7b76e3c5fa 100644 Binary files a/docs/image/clipped-raster.png and b/docs/image/clipped-raster.png differ diff --git a/docs/image/cropped-raster.png b/docs/image/cropped-raster.png index 4942cf7361..0bbf6c30e0 100644 Binary files a/docs/image/cropped-raster.png and b/docs/image/cropped-raster.png differ diff --git a/docs/image/heatmap_Interpolate.png b/docs/image/heatmap_Interpolate.png index e7a9204a2c..ce1eeae9d6 100644 Binary files a/docs/image/heatmap_Interpolate.png and b/docs/image/heatmap_Interpolate.png differ diff --git a/docs/image/heatmap_Interpolate2.png b/docs/image/heatmap_Interpolate2.png index a15fcd386c..0c148c3fef 100644 Binary files a/docs/image/heatmap_Interpolate2.png and b/docs/image/heatmap_Interpolate2.png differ diff --git a/docs/image/heatmapnycsmall.png b/docs/image/heatmapnycsmall.png index 04510e29c5..b85ffb5edd 100644 Binary files a/docs/image/heatmapnycsmall.png and b/docs/image/heatmapnycsmall.png differ diff --git a/docs/image/ide-java-6.png b/docs/image/ide-java-6.png index deb1fcd2d1..58755abf13 100644 Binary files a/docs/image/ide-java-6.png and b/docs/image/ide-java-6.png differ diff --git a/docs/image/ide-java-7.png b/docs/image/ide-java-7.png index ba8b627c04..8a8c4f877b 100644 Binary files a/docs/image/ide-java-7.png and b/docs/image/ide-java-7.png differ diff --git a/docs/image/linestring-left-side.png b/docs/image/linestring-left-side.png index 160eb07b9c..ad0c94564f 100644 Binary files a/docs/image/linestring-left-side.png and b/docs/image/linestring-left-side.png differ diff --git a/docs/image/linestring-og.png b/docs/image/linestring-og.png index 5f6f9c264f..32fbfa0870 100644 Binary files a/docs/image/linestring-og.png and b/docs/image/linestring-og.png differ diff --git a/docs/image/original-raster-clip.png b/docs/image/original-raster-clip.png index a6dd1c759b..499eb4a544 100644 Binary files a/docs/image/original-raster-clip.png and b/docs/image/original-raster-clip.png differ diff --git a/docs/image/point-buffer-quad-2.png b/docs/image/point-buffer-quad-2.png index 52d0b62822..ee8da5e3da 100644 Binary files a/docs/image/point-buffer-quad-2.png and b/docs/image/point-buffer-quad-2.png differ diff --git a/docs/image/point-buffer-quad-8.png b/docs/image/point-buffer-quad-8.png index ce16d1e9b6..bff7bda82e 100644 Binary files a/docs/image/point-buffer-quad-8.png and b/docs/image/point-buffer-quad-8.png differ diff --git a/docs/image/st_snap/st-snap-applied.png b/docs/image/st_snap/st-snap-applied.png index 9c8ef6fd20..41321790e7 100644 Binary files a/docs/image/st_snap/st-snap-applied.png and b/docs/image/st_snap/st-snap-applied.png differ diff --git a/docs/image/st_snap/st-snap-base-example.png b/docs/image/st_snap/st-snap-base-example.png index ae7a4ff584..a684fd80ee 100644 Binary files a/docs/image/st_snap/st-snap-base-example.png and b/docs/image/st_snap/st-snap-base-example.png differ diff --git a/docs/image/usrail.png b/docs/image/usrail.png index 2507f6a8cf..635a2a2f51 100644 Binary files a/docs/image/usrail.png and b/docs/image/usrail.png differ diff --git a/docs/image/ustweet.png b/docs/image/ustweet.png index 5c5c575cd1..62767d4ea9 100644 Binary files a/docs/image/ustweet.png and b/docs/image/ustweet.png differ diff --git a/docs/setup/fabric.md b/docs/setup/fabric.md index b7e0ac3229..1db3bacc7b 100644 --- a/docs/setup/fabric.md +++ b/docs/setup/fabric.md @@ -4,31 +4,31 @@ This tutorial will guide you through the process of installing Sedona on Microso Go to the [Microsoft Fabric portal](https://app.fabric.microsoft.com/) and choose the `Data Engineering` option. -![](../../image/fabric/fabric-1.png) +![](../image/fabric/fabric-1.png) ## Step 2: Create a Microsoft Fabric Data Engineering environment On the left side, click `My Workspace` and then click `+ New` to create a new `Environment`. Let's name it `ApacheSedona`. -![](../../image/fabric/fabric-2.png) +![](../image/fabric/fabric-2.png) ## Step 3: Select the Apache Spark version In the `Environment` page, click the `Home` tab and select the appropriate version of Apache Spark. You will need this version to install the correct version of Apache Sedona. -![](../../image/fabric/fabric-3.png) +![](../image/fabric/fabric-3.png) ## Step 4: Install the Sedona Python package In the `Environment` page, click the `Public libraries` tab and then type in `apache-sedona`. Please select the appropriate version of Apache Sedona. The source is `PyPI`. -![](../../image/fabric/fabric-4.png) +![](../image/fabric/fabric-4.png) ## Step 5: Save and publish the environment Click the `Save` button and then click the `Publish` button to save and publish the environment. This will create the environment with the Apache Sedona Python package installed. The publishing process will take about 10 minutes. -![](../../image/fabric/fabric-5.png) +![](../image/fabric/fabric-5.png) ## Step 6: Download Sedona jars @@ -48,15 +48,15 @@ abfss://9e9d4196-870a-4901-8fa5-e24841492ab8@onelake.dfs.fabric.microsoft.com/e1 abfss://9e9d4196-870a-4901-8fa5-e24841492ab8@onelake.dfs.fabric.microsoft.com/e15f3695-af7e-47de-979e-473c3caa9f5b/Files/geotools-wrapper-1.5.1-28.2.jar ``` -![](../../image/fabric/fabric-6.png) +![](../image/fabric/fabric-6.png) -![](../../image/fabric/fabric-7.png) +![](../image/fabric/fabric-7.png) ## Step 8: Start the notebook with the Sedona environment and install the jars In the notebook page, select the `ApacheSedona` environment you created before. -![](../../image/fabric/fabric-8.png) +![](../image/fabric/fabric-8.png) In the notebook, you can install the jars by running the following code. Please replace the `spark.jars` with the `ABFS` paths of the 2 jars you uploaded in the previous step. @@ -85,4 +85,4 @@ sedona.sql("SELECT ST_GeomFromEWKT('SRID=4269;POINT(40.7128 -74.0060)')").show() If you see the output of the point, then the installation is successful. -![](../../image/fabric/fabric-9.png) +![](../image/fabric/fabric-9.png) diff --git a/docs/tutorial/sql.md b/docs/tutorial/sql.md index 1d635e69f8..6d28998a26 100644 --- a/docs/tutorial/sql.md +++ b/docs/tutorial/sql.md @@ -603,7 +603,7 @@ SedonaPyDeck.create_choropleth_map(df=groupedresult, plot_col='AirportCount') !!!Note `plot_col` is a required argument informing SedonaPyDeck of the column name used to render the choropleth effect. -![](../image/choropleth.gif){: width="1000px"} +![](../image/choropleth.gif) The dataset used is available [here](https://github.com/apache/sedona/tree/4c5fa8333b2c61850d5664b878df9493c7915066/binder/data/ne_50m_airports) and can also be found in the example notebook available [here](https://github.com/apache/sedona/blob/4c5fa8333b2c61850d5664b878df9493c7915066/binder/ApacheSedonaSQL_SpatialJoin_AirportsPerCountry.ipynb) @@ -618,7 +618,7 @@ Example (referenced from overture notebook available via binder): SedonaPyDeck.create_geometry_map(df_building, elevation_col='height') ``` -![](../image/buildings.gif){: width="1000px"} +![](../image/buildings.gif) !!!Tip `elevation_col` is an optional argument which can be used to render a 3D map. Pass the column with 'elevation' values for the geometries here. @@ -633,7 +633,7 @@ Example: SedonaPyDeck.create_scatterplot_map(df=crimes_df) ``` -![](../image/points.gif){: width="1000px"} +![](../image/points.gif) The dataset used here is the Chicago crimes dataset, available [here](https://github.com/apache/sedona/blob/sedona-1.5.0/spark/common/src/test/resources/Chicago_Crimes.csv) @@ -647,7 +647,7 @@ Example: SedonaPyDeck.create_heatmap(df=crimes_df) ``` -![](../image/heatmap.gif){: width="1000px"} +![](../image/heatmap.gif) The dataset used here is the Chicago crimes dataset, available [here](https://github.com/apache/sedona/blob/sedona-1.5.0/spark/common/src/test/resources/Chicago_Crimes.csv) @@ -671,7 +671,7 @@ Example (referenced from an example notebook via the binder): SedonaKepler.create_map(df=groupedresult, name="AirportCount") ``` -![](../image/sedona_customization.gif){: width="1000px"} +![](../image/sedona_customization.gif) The dataset used is available [here](https://github.com/apache/sedona/tree/4c5fa8333b2c61850d5664b878df9493c7915066/binder/data/ne_50m_airports) and can also be found in the example notebook available [here](https://github.com/apache/sedona/blob/4c5fa8333b2c61850d5664b878df9493c7915066/binder/ApacheSedonaSQL_SpatialJoin_AirportsPerCountry.ipynb) diff --git a/docs/tutorial/viz-gallery.md b/docs/tutorial/viz-gallery.md index 3185c25215..68e7d4f95d 100644 --- a/docs/tutorial/viz-gallery.md +++ b/docs/tutorial/viz-gallery.md @@ -1,4 +1,5 @@ -![](../image/usrail.png){: width="250"} -![](../image/ustweet.png){: width="250"} +![](../image/usrail.png) -![](../image/heatmapnycsmall.png){: width="500px"} +![](../image/ustweet.png) + +![](../image/heatmapnycsmall.png) diff --git a/mkdocs.yml b/mkdocs.yml index 2b9ea36bf7..2b3896843a 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -23,7 +23,7 @@ nav: - Install on Wherobots: setup/wherobots.md - Install on Databricks: setup/databricks.md - Install on AWS EMR: setup/emr.md - - Install on Microsfot Fabric: setup/fabric.md + - Install on Microsoft Fabric: setup/fabric.md - Set up Spark cluster manually: setup/cluster.md - Install with Apache Flink: - Install Sedona Scala/Java: setup/flink/install-scala.md @@ -164,7 +164,7 @@ extra: current_rc: 1.5.1-rc1 current_snapshot: 1.5.1-SNAPSHOT next_version: 1.6.0 -copyright: Copyright © 2024 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 Apache Software Foundation for more details. +copyright: Copyright © 2024 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 Apache Software Foundation for more details. markdown_extensions: - admonition