def geos_multipoint_from_py(ob): if isinstance(ob, MultiPoint): return geos_geom_from_py(ob) m = len(ob) try: n = len(ob[0]) except TypeError: n = ob[0]._ndim assert n == 2 or n == 3 # Array of pointers to point geometries subs = (c_void_p * m)() # add to coordinate sequence for i in range(m): coords = ob[i] geom, ndims = point.geos_point_from_py(coords) if lgeos.GEOSisEmpty(geom): raise EmptyPartError("Can't create MultiPoint with empty component") subs[i] = cast(geom, c_void_p) return lgeos.GEOSGeom_createCollection(4, subs, m), n
def geos_multilinestring_from_py(ob): # ob must be either a MultiLineString, a sequence, or # array of sequences or arrays if isinstance(ob, MultiLineString): return geos_geom_from_py(ob) obs = getattr(ob, 'geoms', ob) L = len(obs) assert L >= 1 exemplar = obs[0] try: N = len(exemplar[0]) except TypeError: N = exemplar._ndim if N not in (2, 3): raise ValueError("Invalid coordinate dimensionality") # Array of pointers to point geometries subs = (c_void_p * L)() # add to coordinate sequence for l in range(L): geom, ndims = linestring.geos_linestring_from_py(obs[l]) if lgeos.GEOSisEmpty(geom): raise EmptyPartError( "Can't create MultiLineString with empty component") subs[l] = cast(geom, c_void_p) return (lgeos.GEOSGeom_createCollection(5, subs, L), N)
def __new__(self, points=None): if points is None: # allow creation of empty multipoints, to support unpickling # TODO better empty constructor return shapely.from_wkt("MULTIPOINT EMPTY") elif isinstance(points, MultiPoint): return points m = len(points) subs = [] for i in range(m): p = point.Point(points[i]) if p.is_empty: raise EmptyPartError( "Can't create MultiPoint with empty component") subs.append(p) if len(points) == 0: return shapely.from_wkt("MULTIPOINT EMPTY") return shapely.multipoints(subs)
def __new__(self, points=None): """ Parameters ---------- points : sequence A sequence of (x, y [,z]) numeric coordinate pairs or triples or a sequence of objects that implement the numpy array interface, including instances of Point. Example ------- Construct a 2 point collection >>> from shapely.geometry import Point >>> ob = MultiPoint([[0.0, 0.0], [1.0, 2.0]]) >>> len(ob.geoms) 2 >>> type(ob.geoms[0]) == Point True """ if points is None: # allow creation of empty multipoints, to support unpickling # TODO better empty constructor return shapely.from_wkt("MULTIPOINT EMPTY") elif isinstance(points, MultiPoint): return points m = len(points) subs = [] for i in range(m): p = point.Point(points[i]) if p.is_empty: raise EmptyPartError( "Can't create MultiPoint with empty component") subs.append(p) if len(points) == 0: return shapely.from_wkt("MULTIPOINT EMPTY") return shapely.multipoints(subs)
def __new__(self, lines=None): if not lines: # allow creation of empty multilinestrings, to support unpickling # TODO better empty constructor return shapely.from_wkt("MULTILINESTRING EMPTY") elif isinstance(lines, MultiLineString): return lines lines = getattr(lines, "geoms", lines) m = len(lines) subs = [] for i in range(m): line = linestring.LineString(lines[i]) if line.is_empty: raise EmptyPartError( "Can't create MultiLineString with empty component") subs.append(line) if len(lines) == 0: return shapely.from_wkt("MULTILINESTRING EMPTY") return shapely.multilinestrings(subs)
def __new__(self, lines=None): """ Parameters ---------- lines : sequence A sequence of line-like coordinate sequences or objects that provide the numpy array interface, including instances of LineString. Example ------- Construct a collection containing one line string. >>> lines = MultiLineString( [[[0.0, 0.0], [1.0, 2.0]]] ) """ if not lines: # allow creation of empty multilinestrings, to support unpickling # TODO better empty constructor return shapely.from_wkt("MULTILINESTRING EMPTY") elif isinstance(lines, MultiLineString): return lines lines = getattr(lines, "geoms", lines) m = len(lines) subs = [] for i in range(m): line = linestring.LineString(lines[i]) if line.is_empty: raise EmptyPartError( "Can't create MultiLineString with empty component") subs.append(line) if len(lines) == 0: return shapely.from_wkt("MULTILINESTRING EMPTY") return shapely.multilinestrings(subs)