// mergeGeometries func mergeGeometries(g *geos.Geos, geoms []*geos.Geom, geomType string) []*geos.Geom { // intersections from multiple sub-polygons // try to merge them back to a single geometry if strings.HasSuffix(geomType, "Polygon") { polygons := flattenPolygons(g, geoms) polygon := g.UnionPolygons(polygons) if polygon == nil { return nil } return []*geos.Geom{polygon} } else if strings.HasSuffix(geomType, "LineString") { linestrings := flattenLineStrings(g, geoms) linestrings = filterInvalidLineStrings(g, linestrings) if len(linestrings) == 0 { return nil } union := g.LineMerge(linestrings) return union } else if geomType == "Point" { if len(geoms) >= 1 { return geoms[0:1] } return nil } else { panic("unexpected geometry type" + geomType) } }