예제 #1
0
def get_brt():
    """
    Check address data source to get brt number.
    Update database accordingly.
    """
    from .models import LotProfile

    queryset = queryset_iterator(LotProfile.objects.filter(brt_id__exact=''))
    for lot_profile in queryset:
        lon = lot_profile.get_center().x
        lat = lot_profile.get_center().y
        source = settings.PHL_DATA["ADDRESSES"] + "query"
        params = {"geometry":"%f, %f" % (lon, lat), "geometryType":"esriGeometryPoint", 
                  "returnGeometry":"false", "inSR":"4326", "spatialRel":"esriSpatialRelWithin",
                  "outFields":"BRT_ID", "f":"json"}

        data =  fetch_json(source, params)

        if data:
            if "error" in data:
                print(data["error"]["details"])
            elif "features" in data:
                features = data["features"]
                if features:
                    if features[0]:
                        attributes = features[0]["attributes"]
                        lot_profile.brt_id = attributes["BRT_ID"]
                        lot_profile.save(update_fields=["brt_id",])
                        print("%s: %s updated" % (lot_profile.id, lot_profile.address))
                    else:
                        print("%s" % (lot.id))
            else:
                print("No features for %s" % (lot.id))
        else:
            print("No Data")
예제 #2
0
    def get_data_by_point(self, datasource, timeout=604800):
        pnt = self.get_center()
        lon = pnt.x
        lat = pnt.y
        source = datasource + "query"
        params = {
            "geometry": "%f, %f" % (lon, lat),
            "geometryType": "esriGeometryPoint",
            "returnGeometry": "false",
            "inSR": "4326",
            "spatialRel": "esriSpatialRelWithin",
            "outFields": "*",
            "f": "json",
        }

        try:
            data = fetch_json(source, params, timeout)

            if "features" in data:
                features = data["features"]
                if features:
                    if features[0]:
                        return features[0]["attributes"]
        except:
            return None
예제 #3
0
    def get_data_by_point(self, datasource, timeout=604800):
        pnt = self.get_center()
        lon = pnt.x
        lat = pnt.y
        source = datasource + "query"
        params = {
            "geometry": "%f, %f" % (lon, lat),
            "geometryType": "esriGeometryPoint",
            "returnGeometry": "false",
            "inSR": "4326",
            "spatialRel": "esriSpatialRelWithin",
            "outFields": "*",
            "f": "json"
        }

        try:
            data = fetch_json(source, params, timeout)

            if "features" in data:
                features = data["features"]
                if features:
                    if features[0]:
                        return features[0]["attributes"]
        except:
            return None
예제 #4
0
    def get_opa_data(self):
        source = settings.PHL_DATA["ADDRESS_API"] + urllib.quote_plus(self.address)
        params = ""

        try:
            data = fetch_json(source, params, 604800)
            if "property" in data:
                return data["property"]
        except:
            return None
예제 #5
0
    def get_opa_data(self):
        source = settings.PHL_DATA["ADDRESS_API"] + urllib.quote_plus(
            self.address)
        params = ''

        try:
            data = fetch_json(source, params, 604800)
            if "property" in data:
                return data["property"]
        except:
            return None
예제 #6
0
def get_papl_data(source, id_field, address_field, start=0):
    """
    test our database against the RDA/PAPL database
    """

    # get a list of OBJECTIDs
    url = source  + "query"
    params = {"where":"OBJECTID>0", "returnIdsOnly":"true", "f":"json"}
    dict =  fetch_json(url, params)
    id_list = sorted(dict["objectIds"])

    #loop through all data from external data source
    for id in id_list:
        if id >= start:
            # do we already have this id?
            kwargs = { id_field: id }
            qs = Lot.objects.filter(**kwargs)
            if not qs:
                url = source + str(id)
                params = {"f":"json"}
                data =  fetch_json(url, params)
                # isolate data
                if data and "feature" in data:
                    attrs = data["feature"]["attributes"]
                    address = ' '.join(attrs[address_field].split())
                    address = address.upper()
                    # get Lot or create a new Lot with relevant info
                    try:
                        obj, created = Lot.objects.get_or_create(address=address)
                        if created:
                            obj.address = address
                        #obj.is_available = True
                        setattr(obj, id_field, id)
                        obj.save()
                        print "%s, %s: %s" % (id, address, created)
                    except MultipleObjectsReturned:
                        f = open('duplicates.txt', 'a')
                        f.write(address + '\n') 
                        f.close
        else:
            print id
예제 #7
0
    def get_data_by_address(self, datasource, search_field, timeout=604800):
        source = datasource + "query"
        params = {"where":"%s=%s" % (search_field, urllib.quote_plus(self.address)),
                  "returnGeometry":"false",
                  "outFields":"*", "f":"json"}

        try:
            data =  fetch_json(source, params, timeout)
            if "features" in data:
                features = data["features"]
                if features:
                    if features[0]:
                        return features[0]["attributes"]
        except:
            return None
예제 #8
0
 def get_data_by_envelope(self, datasource, timeout=604800):
     envelope = ', '.join(map(str, self.get_center().buffer(0.00008).extent))
     source = datasource + "query"
     params = {"geometry":"%s" % envelope, "geometryType":"esriGeometryEnvelope", 
               "returnGeometry":"false", "inSR":"4326", "spatialRel":"esriSpatialRelContains",
               "outFields":"*", "f":"json"}
     try:
         data =  fetch_json(source, params, timeout)
         if "features" in data:
             features = data["features"]
             if features:
                 if features[0]:
                     return features[0]["attributes"]
     except:
         return None
예제 #9
0
    def get_data_by_address(self, datasource, search_field, timeout=604800):
        source = datasource + "query"
        params = {
            "where": "%s=%s" % (search_field, urllib.quote_plus(self.address)),
            "returnGeometry": "false",
            "outFields": "*",
            "f": "json"
        }

        try:
            data = fetch_json(source, params, timeout)
            if "features" in data:
                features = data["features"]
                if features:
                    if features[0]:
                        return features[0]["attributes"]
        except:
            return None
예제 #10
0
 def get_data_by_envelope(self, datasource, timeout=604800):
     envelope = ', '.join(map(str,
                              self.get_center().buffer(0.00008).extent))
     source = datasource + "query"
     params = {
         "geometry": "%s" % envelope,
         "geometryType": "esriGeometryEnvelope",
         "returnGeometry": "false",
         "inSR": "4326",
         "spatialRel": "esriSpatialRelContains",
         "outFields": "*",
         "f": "json"
     }
     try:
         data = fetch_json(source, params, timeout)
         if "features" in data:
             features = data["features"]
             if features:
                 if features[0]:
                     return features[0]["attributes"]
     except:
         return None
예제 #11
0
def get_missing_geom():
    queryset = queryset_iterator(Lot.objects.filter(geom__isnull=True))
    source = settings.PHL_DATA["ADDRESSES"] + "query"
    for lot in queryset:
        id = lot._get_address_id()
        if id:
            params = {"where":"OBJECTID='%s'" % (id), "outSR":4236, "returnGeometry":"true", "f":"json"}
            data = fetch_json(source, params)
            if data and "features" in data:
                if data["features"]:
                    coords = data["features"][0]["geometry"]["rings"]
                    geoJSON = json.dumps({"type": "Polygon", "coordinates": coords})
                    geom = GEOSGeometry(geoJSON)
                    geom = MultiPolygon(geom)
                    lot.geom = geom
            else:
                lot.address_id = id
            lot.save()
            print("%s - %s: %s" % (lot.id, lot.address, lot.geom))
        else:
            f = open('missing.txt', 'a')
            f.write(lot.address + '\n') 
            f.close
            print("%s - %s: missing" % (lot.id, lot.address))