google / s2geometry

Computational geometry and spatial indexing on the sphere
http://s2geometry.io/
Apache License 2.0
2.29k stars 302 forks source link

Calculate S2 of polygon with OOM Error in golang #329

Closed gzqlovemxq closed 11 months ago

gzqlovemxq commented 12 months ago

I use golang to calaulate a s2 cells of a polygon [[104.3694198,30.2951281],[104.3633136,30.2962483],[104.365088,30.2959228],[104.3694198,30.2951281]]

And I found it usually happened when the area of polygon is very small.

Is there any bug for S2 Golang with handling this scenario?

        s2Points := make([]s2.Point, 0, len(coords))
    for _, points := range coords {
        for i := 0; i < len(points)-1; i++ {
            s2Points = append(s2Points, s2.PointFromLatLng(s2.LatLngFromDegrees(points[i][1], points[i][0])))
        }
    }

    s2Loop := s2.LoopFromPoints(s2Points)
    if err := s2Loop.Validate(); err != nil {
        return nil, err
    }

    if ok, err := isCCWOrder(coords); err != nil {
        return nil, err
    } else if !ok {
        s2Loop.Invert()
    }

    rc := &s2.RegionCoverer{MinLevel: 14, MaxLevel: 14, MaxCells: 1e7}
    cells := rc.Covering(s2Loop)
smcallis commented 12 months ago

The Go fork of S2 is maintained at https://github.com/golang/geo, I'd recommend opening this issue over there for better visibility.

gzqlovemxq commented 12 months ago

Got it, have moved with this issue and Thank for your advising.