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")
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
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
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
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
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
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
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
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
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
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))