跳转至
🎉 Apache Sedona 1.9.1 已正式发布!🗺️ 新增 Geography SQL 函数、Box2D 与 Box3D 类型、栅格 Python UDF 等。查看发布说明 →

GeoPandas API coverage

The sedona.spark.geopandas package provides a GeoPandas-style API on Apache Spark. This reference describes Sedona 2.0.0 (development) against the GeoPandas 1.1.4 API catalog. These counts describe the development branch and do not apply to Sedona 1.9.1. For setup and examples, see the GeoPandas programming guide. Import sedona.spark.geopandas instead of geopandas; the tables use upstream API names so they can be compared directly with the GeoPandas catalog.

Coverage summary

91.4% API availability (160 of 175 catalogued APIs), including partial implementations.

Availability is the number of APIs marked Available / partially available divided by the total. It measures whether a named API has an implementation, not complete parameter support, identical results, or fully distributed execution. The notes below identify known restrictions.

API group Available / partially available Unsupported
GeoSeries 119 4
GeoDataFrame 26 7
Input/output 3 2
Tools 6 2
Spatial index 6 0
Total 160 15

Status definitions

  • Available / partially available: an implementation exists, with any known parameter, result, or execution limitations described in the notes. The common differences below still apply.
  • Unsupported: not implemented, raises NotImplementedError without providing the operation, or is intentionally excluded from the distributed API.

What is counted

The denominator contains the unique named methods, properties, and module functions in the GeoPandas 1.1.4 reference catalogs for GeoSeries, GeoDataFrame, input/output, tools, and spatial indexing.

Each qualified name is counted once, including missing and intentionally unsupported APIs. For example, GeoDataFrame.clip and geopandas.clip are separate catalog entries; repeated listings of GeoSeries.boundary count only once. The GeoSeries and GeoDataFrame class constructor entries, testing utilities, and the general pandas API inherited through pandas-on-Spark are excluded. Alternate constructors such as GeoDataFrame.from_features are included. GeoSeries operations inherited by GeoDataFrame are not counted again unless the GeoDataFrame catalog lists them explicitly. API links below open the upstream GeoPandas reference; they describe the target interface, not Sedona's support level.

Common differences

  • Execution and ordering: operations use Spark and generally evaluate lazily. Row order is not guaranteed unless an API explicitly preserves it. Follow pandas-on-Spark guidance for index alignment and operations across different frames.
  • Geometry engines: Sedona generally uses JTS, whereas GeoPandas uses Shapely/GEOS. Geometry ordering and some algorithm results can differ. Spatial measurements are planar; use an appropriate projected CRS for distances and areas.
  • Local results: plotting and some conversion methods collect distributed data to the driver. The notes identify these methods. Scalar aggregations materialize their required scalar result; constructors that start with local data distribute that input.
  • Nearest joins: sjoin_nearest supports point inputs and inner joins. Ties follow Sedona configuration and do not guarantee GeoPandas' complete set of tied rows. See nearest point joins.
  • Coordinate transforms: GeoSeries.transform runs a callable on worker batches, so a callable that depends on the whole coordinate array can produce different results. It requires Spark 3.5+ and Shapely 2+.

GeoSeries

API Status Notes
GeoSeries.area Available / partially available —
GeoSeries.boundary Available / partially available —
GeoSeries.bounds Available / partially available —
GeoSeries.total_bounds Available / partially available Distributed aggregation returns four bounds to the driver.
GeoSeries.length Available / partially available —
GeoSeries.geom_type Available / partially available Standalone LinearRing geometries are represented as LineString.
GeoSeries.offset_curve Available / partially available Scalar distance only; join_style and mitre_limit are accepted but ignored.
GeoSeries.distance Available / partially available —
GeoSeries.hausdorff_distance Available / partially available —
GeoSeries.frechet_distance Available / partially available densify is not supported.
GeoSeries.representative_point Available / partially available —
GeoSeries.exterior Available / partially available Returns LineString rings instead of LinearRing geometries.
GeoSeries.interiors Available / partially available Interior rings are returned as LineString geometries instead of LinearRing objects.
GeoSeries.minimum_bounding_radius Available / partially available —
GeoSeries.minimum_clearance Available / partially available —
GeoSeries.x Available / partially available —
GeoSeries.y Available / partially available —
GeoSeries.z Available / partially available —
GeoSeries.m Available / partially available —
GeoSeries.get_coordinates Available / partially available —
GeoSeries.count_coordinates Available / partially available —
GeoSeries.count_geometries Available / partially available —
GeoSeries.count_interior_rings Available / partially available —
GeoSeries.set_precision Unsupported Explicit NotImplementedError stub.
GeoSeries.get_precision Unsupported Explicit NotImplementedError stub.
GeoSeries.get_geometry Available / partially available —
GeoSeries.is_closed Available / partially available Standalone LinearRing identity is lost; empty LinearRing behavior differs.
GeoSeries.is_empty Available / partially available —
GeoSeries.is_ring Available / partially available —
GeoSeries.is_simple Available / partially available —
GeoSeries.is_valid Available / partially available —
GeoSeries.is_valid_reason Available / partially available —
GeoSeries.is_valid_coverage Available / partially available Distributed validation returns a single boolean to the driver.
GeoSeries.invalid_coverage_edges Available / partially available —
GeoSeries.has_m Available / partially available —
GeoSeries.has_z Available / partially available —
GeoSeries.is_ccw Available / partially available —
GeoSeries.contains Available / partially available —
GeoSeries.contains_properly Available / partially available —
GeoSeries.crosses Available / partially available —
GeoSeries.disjoint Available / partially available —
GeoSeries.dwithin Available / partially available —
GeoSeries.geom_equals Available / partially available —
GeoSeries.geom_equals_exact Available / partially available Standalone LinearRing and matching LineString inputs cannot be distinguished.
GeoSeries.geom_equals_identical Available / partially available Comparison uses Spark storage: LinearRing identity and some empty/NaN-Z or mixed coordinate layouts cannot be distinguished.
GeoSeries.intersects Available / partially available —
GeoSeries.overlaps Available / partially available —
GeoSeries.touches Available / partially available —
GeoSeries.within Available / partially available —
GeoSeries.covers Available / partially available —
GeoSeries.covered_by Available / partially available —
GeoSeries.relate Available / partially available —
GeoSeries.relate_pattern Available / partially available —
GeoSeries.clip_by_rect Available / partially available Uses intersection with an envelope; boundary-only intersections and empty output types differ from GeoPandas rectangle clipping.
GeoSeries.difference Available / partially available GeometryCollection operands are not generally supported by the underlying difference operation.
GeoSeries.intersection Available / partially available —
GeoSeries.symmetric_difference Available / partially available —
GeoSeries.union Available / partially available —
GeoSeries.buffer Available / partially available Array/Series distances are not supported; extra keyword arguments are ignored.
GeoSeries.centroid Available / partially available —
GeoSeries.concave_hull Available / partially available —
GeoSeries.convex_hull Available / partially available —
GeoSeries.envelope Available / partially available —
GeoSeries.extract_unique_points Available / partially available —
GeoSeries.force_2d Available / partially available —
GeoSeries.force_3d Available / partially available —
GeoSeries.make_valid Available / partially available Only method='structure' is supported; the default method='linework' raises.
GeoSeries.minimum_bounding_circle Available / partially available —
GeoSeries.maximum_inscribed_circle Available / partially available —
GeoSeries.minimum_clearance_line Available / partially available —
GeoSeries.minimum_rotated_rectangle Available / partially available —
GeoSeries.normalize Available / partially available —
GeoSeries.orient_polygons Available / partially available —
GeoSeries.remove_repeated_points Available / partially available —
GeoSeries.reverse Available / partially available —
GeoSeries.sample_points Available / partially available Only method='uniform'; RNG results/state advancement differ; extra keywords are ignored.
GeoSeries.segmentize Available / partially available —
GeoSeries.shortest_line Available / partially available —
GeoSeries.simplify Available / partially available —
GeoSeries.simplify_coverage Available / partially available Spark Classic with checkpoint storage required; finite valid 2D polygon coverage only, at most 100,000 coordinates per geometry. Conservative simplification may retain extra vertices and never removes rings or parts.
GeoSeries.snap Available / partially available Array-like tolerance is not supported.
GeoSeries.transform Available / partially available Requires Spark >=3.5 and Shapely >=2.0. Callbacks run per Spark batch and must not depend on batch boundaries or mutable state.
GeoSeries.affine_transform Available / partially available —
GeoSeries.rotate Available / partially available —
GeoSeries.scale Available / partially available —
GeoSeries.skew Available / partially available —
GeoSeries.translate Available / partially available —
GeoSeries.interpolate Available / partially available —
GeoSeries.line_merge Available / partially available directed=True is not supported.
GeoSeries.project Available / partially available —
GeoSeries.shared_paths Available / partially available —
GeoSeries.build_area Available / partially available —
GeoSeries.constrained_delaunay_triangles Available / partially available —
GeoSeries.delaunay_triangles Available / partially available Computes a separate triangulation per input geometry rather than aggregating vertices across the series.
GeoSeries.explode Available / partially available —
GeoSeries.intersection_all Available / partially available Distributed aggregation returns one geometry to the driver.
GeoSeries.polygonize Available / partially available full=True is not supported.
GeoSeries.union_all Available / partially available grid_size is not supported; non-default method values are ignored with a warning.
GeoSeries.voronoi_polygons Available / partially available Computes a separate diagram per geometry; only_edges=True is not supported.
GeoSeries.from_arrow Available / partially available Converts a local Arrow array through GeoPandas before constructing the distributed series.
GeoSeries.from_file Available / partially available Supports Shapefile, GeoJSON, GeoPackage and GeoParquet; uses format/table_name options and does not implement general GeoPandas reader keywords.
GeoSeries.from_wkb Available / partially available Only on_invalid='raise' is implemented.
GeoSeries.from_wkt Available / partially available Only on_invalid='raise' is implemented.
GeoSeries.from_xy Available / partially available Additional constructor keyword arguments support name only.
GeoSeries.to_arrow Available / partially available Collects the entire series to the driver and delegates to local GeoPandas.
GeoSeries.to_file Available / partially available Writes GeoJSON or GeoParquet through Spark; schema, engine and GeoPandas metadata options are not implemented.
GeoSeries.to_json Available / partially available Collects the entire series through a GeoDataFrame and serializes with local GeoPandas.
GeoSeries.to_wkb Available / partially available Supports hex; additional Shapely serialization keyword arguments are ignored.
GeoSeries.to_wkt Available / partially available Additional Shapely formatting keyword arguments are ignored.
GeoSeries.crs Available / partially available —
GeoSeries.set_crs Available / partially available —
GeoSeries.to_crs Available / partially available —
GeoSeries.estimate_utm_crs Available / partially available Uses aggregated bounds to select a local pyproj CRS.
GeoSeries.fillna Available / partially available Distributed alignment is lazy; invalid duplicate replacement indexes raise when evaluated. limit requires global ordering.
GeoSeries.isna Available / partially available —
GeoSeries.notna Available / partially available —
GeoSeries.clip Available / partially available Rectangular masks use ST_Intersection; boundary-only results can differ from GeoPandas fast rectangle clipping.
GeoSeries.plot Available / partially available Collects the entire series to the driver and delegates to local GeoPandas plotting.
GeoSeries.explore Unsupported No GeoSeries implementation.
GeoSeries.sindex Available / partially available Returns and caches a Sedona SpatialIndex; query options and results differ from GeoPandas (see Spatial index below).
GeoSeries.has_sindex Available / partially available —
GeoSeries.cx Available / partially available —
GeoSeries.__geo_interface__ Unsupported Intentionally excluded by the distributed API plan (issue #2230).

GeoDataFrame

API Status Notes
GeoDataFrame.from_file Available / partially available Reads Shapefile, GeoJSON, GeoPackage, and GeoParquet; GeoPandas reader options are unsupported and directory formats must be explicit.
GeoDataFrame.from_features Available / partially available Builds small local feature collections through GeoPandas before distributing them; properties follow Spark schema inference.
GeoDataFrame.from_postgis Unsupported Stub raises NotImplementedError.
GeoDataFrame.from_arrow Available / partially available Converts local GeoArrow input through GeoPandas; to_pandas_kwargs requires GeoPandas 1.1 or newer.
GeoDataFrame.to_file Available / partially available Writes GeoJSON and GeoParquet through Spark; GeoPackage output, schema, engine, and GeoPandas metadata options are unsupported.
GeoDataFrame.to_json Available / partially available Collects the distributed frame to the driver and delegates to GeoPandas.
GeoDataFrame.to_geo_dict Unsupported Intentionally unsupported local feature-collection interface for distributed data; current stub raises NotImplementedError.
GeoDataFrame.to_parquet Available / partially available Uses the Sedona GeoParquet writer and Spark options; GeoPandas/PyArrow writer-option parity is not provided.
GeoDataFrame.to_arrow Available / partially available Collects the distributed frame to the driver and delegates to GeoPandas; index=None includes the distributed index.
GeoDataFrame.to_feather Unsupported Stub raises NotImplementedError.
GeoDataFrame.to_postgis Unsupported No GeoDataFrame implementation is present.
GeoDataFrame.to_wkb Available / partially available Distributed binary and hexadecimal output work; Shapely serialization keyword options are rejected.
GeoDataFrame.to_wkt Available / partially available Distributed output works; Shapely formatting keywords are rejected and stored precision is retained rather than default six-place rounding.
GeoDataFrame.crs Available / partially available Delegates CRS metadata access to the active geometry column.
GeoDataFrame.set_crs Available / partially available Assigns or removes active-column CRS metadata, including epsg, inplace, and allow_override.
GeoDataFrame.to_crs Available / partially available Transforms the active geometry column; supports crs, epsg, and inplace.
GeoDataFrame.estimate_utm_crs Available / partially available Uses a distributed bounds aggregation; only four aggregate values reach the driver.
GeoDataFrame.rename_geometry Available / partially available Renames the active geometry column, with inplace support.
GeoDataFrame.set_geometry Available / partially available Existing-column drop=True is rejected; array-like and column selection otherwise work.
GeoDataFrame.active_geometry_name Available / partially available Returns the active geometry column label, or None.
GeoDataFrame.dissolve Available / partially available Unary union only, without grid_size; supported aggregate aliases and grouping forms are restricted, and unobserved categorical groups and MultiIndex columns are unsupported.
GeoDataFrame.explode Available / partially available Distributed geometry-part expansion supports column, ignore_index, and index_parts; non-geometry columns delegate to pandas-on-Spark.
GeoDataFrame.sjoin Available / partially available Contains-properly is unavailable; dwithin requires scalar distance; right joins retain left geometries and row order is not preserved.
GeoDataFrame.sjoin_nearest Available / partially available Point-only inner joins, default suffixes, exclusive=False, flat string columns, and single-level indexes; KNN tie behavior can omit equidistant or coincident rows.
GeoDataFrame.clip Available / partially available Rectangular masks use ST_Intersection; boundary-only results can differ from GeoPandas fast rectangle clipping.
GeoDataFrame.overlay Available / partially available All five modes are distributed; MultiIndex columns are unsupported, and keep_geom_type=None omits the conditional dropped-geometry warning.
GeoDataFrame.explore Unsupported No GeoDataFrame implementation is present.
GeoDataFrame.plot Available / partially available Collects the distributed frame to the driver and delegates to GeoPandas.
GeoDataFrame.sindex Available / partially available Returns a Sedona spatial index with different query results and options; the GeoDataFrame does not retain the index cache.
GeoDataFrame.has_sindex Available / partially available GeoDataFrame spatial-index state is not retained; use a retained active GeoSeries for cache state.
GeoDataFrame.cx Available / partially available Distributed coordinate bounding-box selection supports open, reversed, and inclusive slice bounds.
GeoDataFrame.__geo_interface__ Unsupported Intentionally unsupported local feature-collection interface for distributed data; current stub raises NotImplementedError.
GeoDataFrame.iterfeatures Unsupported Intentionally unsupported row iterator for distributed data; current stub raises NotImplementedError.

Input/output

API Status Notes
geopandas.list_layers Available / partially available GeoPackage only; string/path-like inputs only. Reads layer metadata through Spark and collects the small layer listing to pandas.
geopandas.read_file Available / partially available Reads Shapefile, GeoJSON, GeoPackage and GeoParquet only. GeoPandas bbox/mask/columns/rows/engine options are warned about and ignored; GeoPackage requires table_name rather than layer.
geopandas.read_postgis Unsupported No implementation or public export in sedona.spark.geopandas.
geopandas.read_feather Unsupported No implementation or public export in sedona.spark.geopandas.
geopandas.read_parquet Available / partially available Reads GeoParquet through Spark. The columns, storage_options, bbox and to_pandas_kwargs parameters are accepted but silently ignored (no warning); column selection and bbox filtering are not applied. Extra kwargs trigger a warning.

Tools

API Status Notes
geopandas.sjoin Available / partially available Contains-properly is unavailable; dwithin requires scalar distance; right joins retain left geometries and row order is not preserved.
geopandas.sjoin_nearest Available / partially available Point-only inner joins with exclusive=False, default suffixes, flat unique string columns and single-level indexes. All equidistant rows are not guaranteed; max_distance filters results after the KNN search.
geopandas.overlay Available / partially available All five overlay modes are implemented natively; MultiIndex columns are explicitly unsupported. keep_geom_type=None does not emit the conditional dropped-geometry warning.
geopandas.clip Available / partially available Rectangular masks use ST_Intersection; boundary-only results can differ from GeoPandas fast rectangle clipping.
geopandas.tools.geocode Unsupported No geocode implementation or tools export.
geopandas.tools.reverse_geocode Unsupported No reverse_geocode implementation or tools export.
geopandas.tools.collect Available / partially available Distributed inputs use ST_Collect_Agg and materialize only the metadata and one scalar geometry required by the API; local inputs delegate to GeoPandas.
geopandas.points_from_xy Available / partially available Constructs 2D/3D points with CRS through native expressions, but returns a distributed GeoSeries instead of upstream GeometryArray. Distributed coordinate Series must share a frame and index.

Spatial index

API Status Notes
SpatialIndex.intersection Available / partially available Bounding-box wrapper; a distributed index collects matching geometry objects to the driver instead of returning positional indices. Bounds are required as four coordinates.
SpatialIndex.is_empty Available / partially available Checks whether the input row count is zero; an input containing only null or empty geometries reports False, unlike the upstream index.
SpatialIndex.nearest Available / partially available Scalar Shapely input only with a Sedona k argument; no return_all, max_distance or exclusive arguments. Distributed results are collected geometry objects rather than the upstream index-pair array.
SpatialIndex.query Available / partially available Scalar Shapely input only; predicates limited to None/intersects/contains, without distance or output_format arguments. Distributed results are collected geometry objects; the local intersects path queries bounding boxes.
SpatialIndex.size Available / partially available Counts input rows, including null and empty geometries; upstream counts actual indexed geometries.
SpatialIndex.valid_query_predicates Available / partially available Returns a fresh set containing only None, intersects and contains, reflecting the narrower query implementation.

Maintaining this reference

When API support changes, update its status and notes, recalculate the category and overall counts, and update the percentage in the repository README badge. Keep the upstream baseline version fixed unless the entire catalog is refreshed. Adding a stub does not increase availability, and adding one supported parameter does not make an API fully compatible. The GeoPandas implementation tracker records ongoing work; this page records the implementation available in the version above.