def AssocRegion(guid): region = melt.fias_AONode(guid) if not region.kind: adm_id = FindAssocPlace(region, None) if adm_id != None: assoc = melt.PlaceAssoc(region.f_id, adm_id) region.session.add(assoc) region.session.commit() region = melt.fias_AONode(guid, 2, adm_id) AssociateO(region) region.session.commit() return ":".join((region.name, str(region.kind)))
def AssocRegion(guid, session): region = melt.fias_AONode(guid, session=session) logging.info(u"Start " + region.name) if not region.kind: adm_id = FindAssocPlace(region, None) if adm_id is not None: assoc = melt.PlaceAssoc(region.f_id, adm_id) session.add(assoc) session.commit() region = melt.fias_AONode(guid, 2, adm_id) AssociateO(region) session.commit() return u":".join((region.name, str(region.kind)))
def AssociateO(elem): '''Search and save association for all subelements of elem This function should work for elements with partitially associated subs as well as elements without associated subs ''' if not elem.kind: return #Precache subs list elem.subO('all', False) #run processing for found to parse their subs for sub in tuple(elem.subO('found', False)): AssociateO(melt.fias_AONode(sub)) #find new elements for street if any for sub in tuple(elem.subO('street', False)): sub_ = melt.fias_AONode(sub) streets = FindAssocStreet(sub_, elem.geom) if streets <> None: pre = elem.session.query( melt.StreetAssoc).filter_by(ao_id=sub.f_id).all() pre = set([it.osm_way for it in pre]) for street in streets: if street not in pre: assoc = melt.StreetAssoc(sub.f_id, street) elem.session.add(assoc) elem.session.commit() AssociateO(sub_) #search for new areas subareas = Subareas(elem) for sub in tuple(elem.subO('not found', False)): if sub.fullname in way_only: continue sub_ = melt.fias_AONode(sub) adm_id = None if subareas: for name in sub_.names(): if name in subareas: adm_id = subareas.pop(name) break if adm_id is None: adm_id = FindAssocPlace(sub_, elem.geom) if not (adm_id is None): assoc = melt.PlaceAssoc(sub.f_id, adm_id) elem.session.add(assoc) elem.child_found(sub, 'found') sub_.osmid = adm_id sub_.kind = 2 AssociateO(sub_) #search for new streets for sub in tuple(elem.subO('not found', False)): if sub.fullname in pl_only: continue sub_ = melt.fias_AONode(sub) streets = FindAssocStreet(sub_, elem.geom) if not streets is None: #print sub.name, streets for street in streets: assoc = melt.StreetAssoc(sub.f_id, street) elem.session.add(assoc) elem.session.commit() elem.child_found(sub, 'street') sub_.kind = 1 sub_.osmid = streets[0] AssociateO(sub_) #Search for buildings AssocBuild(elem, 0) AssocBuild(elem, 1) elem.session.commit()