Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Viz rasterization joins polygon rings: a spurious segment in ST_Pixelize and the outline renderer, and a gap in the filled polygon

Open
#3,469 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

@Mayukh-D is already working on this.

Since Oct 19, 2026.

  • #3485 by @Mayukh-D — open

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
77/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
java
Domain
backend, data

Research direction

Start by reading RasterizationUtils.FindPixelCoordinates, which the issue identifies as the source of both outline and fill behavior. Trace how it handles polygon coordinates, then add coverage for polygons with holes and empty polygons in the relevant tests. Done means each ring is outlined without joining segments, filled pixels cover the polygon interior while excluding holes, and empty polygons do not throw.

Written by the indexing model from the issue text.

Description

Expected behavior

For a polygon with holes, ST_Pixelize (and the RDD visualization operators) should return the outline pixels of each ring, and the filled rasterization used by choropleth maps should cover the interior minus the holes.

Actual behavior

Both polygon paths in RasterizationUtils.FindPixelCoordinates read Polygon.getCoordinates(), which concatenates the exterior ring and the holes.

  • Outline: tracing the concatenated coordinates also draws a segment from the end of the exterior ring to the start of the first hole (and between consecutive holes), and repeats the exterior's first pixel.
  • Fill: the concatenated coordinates are turned into a single ring, which crosses itself along that same segment, so the interior pixels on it are dropped and the hole is only left out by accident. An empty polygon fails with an IndexOutOfBoundsException.

Steps to reproduce

SELECT ST_Pixelize(
  ST_GeomFromWKT('POLYGON ((0.5 0.5, 9.5 0.5, 9.5 9.5, 0.5 9.5, 0.5 0.5), (4.5 4.5, 6.5 4.5, 6.5 6.5, 4.5 6.5, 4.5 4.5))'),
  10, 10, ST_PolygonFromEnvelope(0, 0, 10, 10))

This returns 48 pixels: the 36 of the exterior ring and the 8 of the hole, plus (1,1), (2,2), (3,3) on a segment joining them and a second (0,0). The filled path on the same polygon returns 52 pixels instead of 55, missing (1,1), (2,2) and (3,3).

Found while working on #1272. I'm a student contributing as part of a university software engineering course, and I'd like to fix this by handling each ring separately: tracing each ring for the outline, and building the pixel-space polygon with its holes for the fill.

Dominant language
Java
Stars
2.4k
Forks
794
Avg merge
1d 10h
Merged PRs (30d)
59

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from apache/sedona

All issues in apache/sedona

Similar issues

More Java issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.