Open
Conversation
4920f15 to
20a3455
Compare
Contributor
There was a problem hiding this comment.
Pull request overview
This PR adds comprehensive Bing Tile functionality to Apache Sedona, addressing issue #1327. The implementation provides 9 functions for working with Bing Maps tile coordinates, enabling conversion between geographic coordinates and Bing tile quad-keys, as well as spatial queries over tile grids.
Changes:
- Adds core BingTile utility class with coordinate conversion, validation, and spatial query algorithms
- Implements 9 public API functions: ST_BingTile, ST_BingTileAt, ST_BingTilesAround, ST_BingTileZoomLevel, ST_BingTileX, ST_BingTileY, ST_BingTilePolygon, ST_BingTileCellIDs, and ST_BingTileToGeom
- Provides complete integration across Spark, Flink, Snowflake, and Python with comprehensive test coverage (31 common tests, 23 Spark SQL, 16 Spark DataFrame, 9 Flink, 18 Snowflake tests)
Reviewed changes
Copilot reviewed 19 out of 19 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| common/src/main/java/org/apache/sedona/common/utils/BingTile.java | Core implementation of Bing Tile system with coordinate conversions and spatial queries |
| common/src/main/java/org/apache/sedona/common/Functions.java | Public API functions for Bing Tile operations |
| common/src/test/java/org/apache/sedona/common/FunctionsTest.java | Comprehensive unit tests covering all functions and edge cases |
| spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/Functions.scala | Spark expression classes for Bing Tile functions |
| spark/common/src/main/scala/org/apache/spark/sql/sedona_sql/expressions/st_functions.scala | Spark DataFrame API bindings |
| spark/common/src/main/scala/org/apache/sedona/sql/UDF/Catalog.scala | Spark function catalog registration |
| spark/common/src/test/scala/org/apache/sedona/sql/functions/STBingTileFunctions.scala | Spark SQL tests |
| spark/common/src/test/scala/org/apache/sedona/sql/dataFrameAPITestScala.scala | Spark DataFrame API tests |
| flink/src/main/java/org/apache/sedona/flink/expressions/Functions.java | Flink function implementations |
| flink/src/main/java/org/apache/sedona/flink/Catalog.java | Flink function catalog registration |
| flink/src/test/java/org/apache/sedona/flink/FunctionTest.java | Flink tests |
| snowflake/src/main/java/org/apache/sedona/snowflake/snowsql/UDFs.java | Snowflake V1 UDF implementations (WKB binary I/O) |
| snowflake/src/main/java/org/apache/sedona/snowflake/snowsql/UDFsV2.java | Snowflake V2 UDF implementations (GeoJSON String I/O) |
| snowflake-tester/src/test/java/org/apache/sedona/snowflake/snowsql/TestFunctions.java | Snowflake V1 tests |
| snowflake-tester/src/test/java/org/apache/sedona/snowflake/snowsql/TestFunctionsV2.java | Snowflake V2 tests |
| python/sedona/spark/sql/st_functions.py | PySpark bindings with type hints and documentation |
| docs/api/sql/Function.md | Spark API documentation with examples |
| docs/api/flink/Function.md | Flink API documentation with examples |
| docs/api/snowflake/vector-data/Function.md | Snowflake API documentation with examples |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Ported from bing-tile-hive and Trino implementations. Adds 9 functions: - ST_BingTile(x, y, zoom) / ST_BingTileAt(lat, lon, zoom) - ST_BingTileQuadKey, ST_BingTileZoomLevel, ST_BingTileX, ST_BingTileY - ST_BingTilePolygon, ST_BingTileCellIDs, ST_BingTileToGeom Includes bindings for Spark, Flink, and Python. Tests use reference values from Trino's TestBingTileFunctions.
20a3455 to
6e96147
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Did you read the Contributor Guide?
Is this PR related to a ticket?
[GH-XXX] my subject. Closes Add Support for Bing Tile functions #1327What changes were proposed in this PR?
Adds 9 Bing Tile functions for working with Bing Maps tile coordinates. The functions convert between geographic coordinates and Bing tile quad-keys, and support spatial queries over tile grids.
New Functions
ST_BingTile(tileX, tileY, zoomLevel)ST_BingTileAt(longitude, latitude, zoomLevel)ST_BingTilesAround(longitude, latitude, zoomLevel)ST_BingTileZoomLevel(quadKey)ST_BingTileX(quadKey)ST_BingTileY(quadKey)ST_BingTilePolygon(quadKey)ST_BingTileCellIDs(geometry, zoomLevel)ST_BingTileToGeom(quadKeys)Design Decisions
"123") rather than a custom BingTile type, for compatibility with all Sedona engines.ST_BingTileAtandST_BingTilesAroundtake(longitude, latitude, zoomLevel), consistent with Sedona's existingST_Point(x, y)convention.ST_BingTileCellIDsuses brute-force enumeration for zoom < 10 and recursive quadtree subdivision from zoom 10 for higher zoom levels, balancing simplicity and performance.Modules Changed
BingTile.javautility class; public API inFunctions.javaFunctions.scala), DataFrame API (st_functions.scala), UDF catalog (Catalog.scala)st_functions.pyHow was this patch tested?
Tests across all engines, using reference values from Trino's
TestBingTileFunctions:FunctionsTest.javacovering all functions, edge cases (antimeridian, poles, max zoom), and error casesSTBingTileFunctions.scaladataFrameAPITestScala.scalaFunctionTest.javaTestFunctions.java(V1) andTestFunctionsV2.java(V2)Did this PR include necessary documentation updates?