Example #1
0
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)
Example #2
0
    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    
Example #3
0
    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
Example #4
0
 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 
Example #5
0
 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"
Example #7
0
    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
Example #8
0
    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