// 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 } g.DestroyLater(polygon) 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) for _, l := range union { g.DestroyLater(l) } return union } else if geomType == "Point" { if len(geoms) >= 1 { for _, p := range geoms { g.DestroyLater(p) } return geoms[0:1] } return nil } else { panic("unexpected geometry type" + geomType) } }