arr = geom_to_array(row['geometry']) d = {(xdim.name, ydim.name): arr} d.update({vd.name: row[vd.name] for vd in dataset.vdims}) ds = dataset.clone(d, datatype=['dictionary']) for i, row in dataset.data.iterrows(): if datatype == 'geom': objs.append(row['geometry']) continue geom = row.geometry arr = geom_to_array(geom) d = {xdim.name: arr[:, 0], ydim.name: arr[:, 1]} d.update({vd.name: row[vd.name] for vd in dataset.vdims}) ds.data = d if datatype == 'array': obj = ds.array(**kwargs) elif datatype == 'dataframe': obj = ds.dframe(**kwargs) elif datatype == 'columns': obj = ds.columns(**kwargs) elif datatype is None: obj = ds.clone() else: raise ValueError("%s datatype not support" % datatype) objs.append(obj) return objs Interface.register(GeoPandasInterface) Dataset.datatype = ['geodataframe']+Dataset.datatype Path.datatype = ['geodataframe']+Path.datatype
new_el = eltype(d, kdims, vdims) if new_el.interface is GeoPandasInterface: types[-1] = GeoDataFrame new_data.append(new_el.data) continue new_dict = {} for d in new_el.dimensions(): if d in (xname, yname): scalar = False else: scalar = new_el.interface.isscalar(new_el, d) vals = new_el.dimension_values(d, not scalar) new_dict[d.name] = vals[0] if scalar else vals new_data.append(new_dict) if len(set(types)) > 1: raise DataError('Mixed types not supported') if new_data and types[0] is GeoDataFrame: data = pd.concat(new_data) else: columns = [d.name for d in kdims + vdims if d not in (xname, yname)] geom = GeoPandasInterface.geom_type(eltype) if not len(data): return GeoDataFrame([], columns=['geometry'] + columns) data = to_geopandas(new_data, xname, yname, columns, geom) return data Interface.register(GeoPandasInterface) Dataset.datatype = Dataset.datatype + ['geodataframe'] Path.datatype = Path.datatype + ['geodataframe']
return DictInterface.values(dataset, dim, expanded, flat) @classmethod def select(cls, dataset, selection_mask=None, **selection): raise NotImplementedError( 'select operation not implemented on geometries') @classmethod def iloc(cls, dataset, index): raise NotImplementedError( 'iloc operation not implemented for geometries.') @classmethod def sample(cls, dataset, samples=[]): raise NotImplementedError( 'sampling operation not implemented for geometries.') @classmethod def aggregate(cls, dataset, kdims, function, **kwargs): raise NotImplementedError( 'aggregate operation not implemented for geometries.') @classmethod def concat(cls, datasets, dimensions, vdims): raise NotImplementedError( 'concat operation not implemented for geometries.') MultiInterface.subtypes.insert(0, 'geom_dictionary') Interface.register(GeomDictInterface)