golang / geo

S2 geometry library in Go
Apache License 2.0
1.69k stars 182 forks source link

Calculate S2 of polygon with OOM Error in golang #103

Open gzqlovemxq opened 1 year ago

gzqlovemxq commented 1 year 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)