func CellsToMultiPolygon()

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
}