def geojson(request): try: westlng = request.GET["westlng"] eastlng = request.GET["eastlng"] northlat = request.GET["northlat"] southlat = request.GET["southlat"] except KeyError: return json_response({}) wkt = ( "POLYGON((" "%(w)s %(s)s, " "%(w)s %(n)s, " "%(e)s %(n)s, " "%(e)s %(s)s, " "%(w)s %(s)s" "))" % {"w": westlng, "e": eastlng, "s": southlat, "n": northlat} ) qs = Parcel.objects.filter(geom__intersects=wkt).prefetch_mapped() features = [] serializer = UIParcelSerializer() for parcel in qs: feature = Feature(parcel.id) feature.geometry = { "type": parcel.geom.geom_type, "coordinates": parcel.geom.coords, } feature.properties = serializer.one(parcel) features.append(feature) output = GeoJSON.GeoJSON().encode(features, to_string=False) return json_response(output)
def decode(self, query_set, generator = False): results = [] for res in query_set: feature = Feature(res.pk) if self.pickled_geometry: feature.geometry = pickle.loads(res.geometry) elif self.geodjango: geometry = None geom = getattr(res, self.geodjango) if geom: geometry = {} geometry['type'] = geom.geom_type geometry['coordinates'] = geom.coords feature.geometry = geometry if self.pickled_properties: props = getattr(res, self.pickled_properties) feature.properties = pickle.loads(props.encode("utf-8")) if self.properties: for p in self.properties: feature.properties[p] = getattr(res, p) results.append(feature) return results
def decode(self, query_set, generator=False): results = [] for res in query_set: feature = Feature(res.pk) if self.pickled_geometry: feature.geometry = pickle.loads(res.geometry) elif self.geodjango: geometry = None geom = getattr(res, self.geodjango) if geom: geometry = {} geometry['type'] = geom.geom_type geometry['coordinates'] = geom.coords feature.geometry = geometry if self.pickled_properties: props = getattr(res, self.pickled_properties) feature.properties = pickle.loads(props.encode("utf-8")) if self.properties: for p in self.properties: feature.properties[p] = getattr(res, p) results.append(feature) return results
def _createFeature(self, feature_dict, id = None): """Private. Not designed to be used externally.""" feature = Feature(id) if feature_dict.has_key('geometry'): feature.geometry = feature_dict['geometry'] if feature_dict.has_key('properties'): feature.properties = feature_dict['properties'] return feature
def _createFeature(self, feature_dict, id=None): """Private. Not designed to be used externally.""" feature = Feature(id) if feature_dict.has_key("geometry"): feature.geometry = feature_dict["geometry"] if feature_dict.has_key("properties"): feature.properties = feature_dict["properties"] return feature
def decode(self, query_set, generator=False): results = [] for res in query_set: feature = Feature(res.id) if self.pickled_geometry: feature.geometry = pickle.loads(res.geometry) elif self.geodjango: geom = getattr(res, self.geodjango) geometry = {} geometry["type"] = geom.geom_type geometry["coordinates"] = geom.coords feature.geometry = geometry if self.pickled_properties: props = getattr(res, self.pickled_properties) feature.properties = pickle.loads(props.encode("utf-8")) if self.properties: for p in self.properties: feature.properties[p] = getattr(res, p) if self.style: feature.properties["style"] = self.style if self.relation_data: for method, models in self.relation_data.iteritems(): if method == "set_count": for model in models: try: result = getattr(res, model + "_set") count = getattr(result, "count") feature.properties[model + "_" + method] = count() except AttributeError, err: feature.properties[model + "_" + method] = "AttributeError" if method == "values_list": for model in models: try: result = getattr(res, model) all_list = list(result.values_list()) feature.properties[model + "_" + method] = all_list except AttributeError, err: feature.properties[model + "_" + method] = "AttributeError" if method == "display": for model in models: try: display = "get_%s_display" % (model) result = getattr(res, display) feature.properties[model + "_" + method] = result() except AttributeError, err: feature.properties[model + "_" + method] = "AttributeError"
def decode(self, query_set, generator=False): results = [] for res in query_set: feature = Feature(res.id) if self.pickled_geometry: feature.geometry = pickle.loads(res.geometry) elif self.geodjango: geom = getattr(res, self.geodjango) geometry = {} geometry['type'] = geom.geom_type geometry['coordinates'] = geom.coords feature.geometry = geometry if self.pickled_properties: props = getattr(res, self.pickled_properties) feature.properties = pickle.loads(props.encode("utf-8")) if self.properties: for p in self.properties: # This simple change allows us to span relationships between models: # feature.properties[p] = getattr(res, p) feature.properties[p] = reduce(getattr, p.split('__'), res) # An argument can be passed to access querysets (one to many relationships) # from each Feature returned, appending the querysets to the value's 'properties' if self.queries: for q in self.queries: itemslist = [] for queryresult in q.getset(res): item = {} for k, v in queryresult.iteritems(): item[k] = v itemslist.append(item) feature.properties[q.queryparameters] = itemslist results.append(feature) return results
def decode(self, query_set, generator = False): results = [] for res in query_set: feature = Feature(res.id) if self.pickled_geometry: feature.geometry = pickle.loads(res.geometry) elif self.geodjango: geom = getattr(res, self.geodjango) geometry = {} geometry['type'] = geom.geom_type geometry['coordinates'] = geom.coords feature.geometry = geometry if self.pickled_properties: props = getattr(res, self.pickled_properties) feature.properties = pickle.loads(props.encode("utf-8")) if self.properties: for p in self.properties: # This simple change allows us to span relationships between models: # feature.properties[p] = getattr(res, p) feature.properties[p] = reduce(getattr, p.split('__'), res) # An argument can be passed to access querysets (one to many relationships) # from each Feature returned, appending the querysets to the value's 'properties' if self.queries: for q in self.queries: itemslist = [] for queryresult in q.getset(res): item = {} for k,v in queryresult.iteritems(): item[k] = v itemslist.append(item) feature.properties[q.queryparameters] = itemslist results.append(feature) return results