in h3.go [341:380]
func CellsToMultiPolygon(cells []Cell) ([]GeoPolygon, error) {
if len(cells) == 0 {
return nil, nil
}
h3Indexes := cellsToC(cells)
cLinkedGeoPolygon := new(C.LinkedGeoPolygon)
if err := toErr(C.cellsToLinkedMultiPolygon(&h3Indexes[0], C.int(len(h3Indexes)), cLinkedGeoPolygon)); err != nil {
return nil, err
}
ret := []GeoPolygon{}
// traverse polygons for linked list of polygons
currPoly := cLinkedGeoPolygon
for currPoly != nil {
loops := []GeoLoop{}
// traverse loops for a polygon
currLoop := currPoly.first
for currLoop != nil {
loop := []LatLng{}
// traverse points for a loop
currPt := currLoop.first
for currPt != nil {
loop = append(loop, latLngFromC(currPt.vertex))
currPt = currPt.next
}
loops = append(loops, loop)
currLoop = currLoop.next
}
ret = append(ret, GeoPolygon{GeoLoop: loops[0], Holes: loops[1:]})
currPoly = currPoly.next
}
C.destroyLinkedMultiPolygon(cLinkedGeoPolygon)
return ret, nil
}