def __str__(self): geom = self['geometry'] or '{}' if isinstance(geom, dict): return json.dumps(self, cls=JSONEncoder) keys = self.viewkeys() - {'geometry'} props = json.dumps({k: self[k] for k in keys}, cls=JSONEncoder)[1:-1] feature = '{"geometry": %s, %s}' % (geom, props) return feature
def geojson(self): if not self.is_serialized('geometry'): return self._dumps() geom = self['geometry'] or '{}' keys = self.viewkeys() - {'geometry'} props = json.dumps({k: self[k] for k in keys}, cls=JSONEncoder)[1:-1] return '{"geometry": %s, %s}' % (str(geom), props)
def geojson(self): if not self.has_serialized_geom: return self._dumps() features = ','.join(map(str, self['features'])) keys = self.viewkeys() - {'features'} collection = '%s, "features": [' % json.dumps( {k: self[k] for k in keys}, cls=JSONEncoder)[:-1] return ''.join([collection, features, ']}'])
def to_python(self, value): if value in self.empty_values: return None # Work with a single GeoJSON geometry or a Feature. Avoid parsing # overhead unless we have a true "Feature". if '"Feature",' in value: d = json.loads(value) value = json.dumps(d.get('geometry')) elif isinstance(value, collections.Mapping): value = json.dumps(value.get('geometry') or value) # Handle a comma delimited extent. elif list(value).count(',') == 3: value = Envelope(value.split(',')).polygon.ExportToWkt() try: geom = gdal.OGRGeometry(value) except (gdal.OGRException, TypeError, ValueError): raise forms.ValidationError(self.error_messages['invalid_geom']) if not geom.srs: geom.srid = self.srid or self.widget.map_srid return geom
def to_python(self, value): if value in self.empty_values: return None # Work with a single GeoJSON geometry or a Feature. Avoid parsing # overhead unless we have a true "Feature". if '"Feature",' in value: d = json.loads(value) value = json.dumps(d.get('geometry')) # Handle a comma delimited extent. elif list(value).count(',') == 3: value = Envelope(value.split(',')).polygon.ExportToWkt() try: geom = gdal.OGRGeometry(value) except (gdal.OGRException, TypeError, ValueError): raise forms.ValidationError(self.error_messages['invalid_geom']) if not geom.srs: geom.srid = self.srid or self.widget.map_srid return geom
def to_python(self, value): if value in self.empty_values: return None sref = None # Work with a single GeoJSON geometry or a Feature. value = json.loads(value) if '"Feature",' in value else value if isinstance(value, collections.Mapping): feat = sc.as_feature(value) value = json.dumps(feat.get('geometry') or value) sref = feat.srs # Handle a comma delimited extent. elif list(value).count(',') == 3: value = Envelope(value.split(',')).polygon.ExportToWkt() try: geom = gdal.OGRGeometry(value, srs=getattr(sref, 'wkt', None)) except (gdal.OGRException, TypeError, ValueError): raise forms.ValidationError(self.error_messages['invalid_geom']) if not geom.srs: geom.srid = self.srid or self.widget.map_srid return geom
def to_python(self, value): if value in self.empty_values: return None sref = None # Work with a single GeoJSON geometry or a Feature. value = json.loads(value) if '"Feature"' in value else value if isinstance(value, collections.Mapping): feat = sc.as_feature(value) value = json.dumps(feat.get('geometry') or value) sref = feat.srs # Handle a comma delimited extent. elif list(value).count(',') == 3: value = Envelope(value.split(',')).polygon.ExportToWkt() try: geom = gdal.OGRGeometry(value, srs=getattr(sref, 'wkt', None)) except (gdal.GDALException, TypeError, ValueError): raise forms.ValidationError(self.error_messages['invalid_geom'], code='invalid_geom') if not geom.srs: geom.srid = self.srid or self.widget.map_srid return geom
def _dumps(self): return json.dumps(self, cls=JSONEncoder)
def to_internal_value(self, data): # forms.GeometryField cannot handle geojson dicts. if isinstance(data, collections.Mapping): data = json.dumps(data) field = fields.GeometryField(widget=forms.BaseGeometryWidget()) return field.to_python(data)
def to_internal_value(self, data): # forms.GeometryField cannot handle geojson dicts. if isinstance(data, dict): data = json.dumps(data) return forms.GeometryField().to_python(data)
def from_native(self, value): # forms.GeometryField cannot handle geojson dicts. if isinstance(value, dict): value = json.dumps(value) return super(GeometryField, self).from_native(value)
def __str__(self): features = ','.join(map(str, self['features'])) keys = self.viewkeys() - {'features'} collection = '%s, "features": [' % json.dumps( {k: self[k] for k in keys}, cls=JSONEncoder)[:-1] return ''.join([collection, features, ']}'])