Changeset a56d591 in osmose-backend


Ignore:
Timestamp:
Jan 3, 2013 9:10:55 PM (7 years ago)
Author:
Jocelyn Jaubert <jocelyn.jaubert@…>
Branches:
master
Children:
abc2a04
Parents:
dd5c955
git-author:
Jocelyn Jaubert <jocelyn.jaubert@…> (01/01/2013 13:50:18)
git-committer:
Jocelyn Jaubert <jocelyn.jaubert@…> (03/01/2013 21:10:55)
Message:

Reduce memory usage by storing only admin_level for ways and relations in analyser_admin_level

File:
1 edited

Legend:

Unmodified
Added
Removed
  • analysers/analyser_admin_level.py

    rdd5c955 ra56d591  
    3131        self.ways = {} 
    3232        self.rels = {} 
     33 
    3334    def WayCreate(self, data): 
    3435        if data[u"tag"].get(u"boundary", None) <> u"administrative": 
    3536            return 
    36         self.ways[data["id"]] = data 
     37        if not "admin_level" in data[u"tag"]: 
     38            return 
     39        self.ways[data["id"]] = data[u"tag"]["admin_level"] 
     40 
    3741    def RelationCreate(self, data): 
    3842        if data[u"tag"].get(u"boundary", None) <> u"administrative": 
    3943            return 
    40         self.rels[data["id"]] = data 
     44        if not "admin_level" in data[u"tag"]: 
     45            return 
     46        self.rels[data["id"]] = data[u"tag"]["admin_level"] 
    4147 
    4248########################################################################### 
     
    5561                         "desc": { "en": "Wrong administrative level", 
    5662                                   "fr": "Mauvais niveau administratif"} 
     63                       } 
     64        self._Err[2] = { "item": 6050, 
     65                         "level": 1, 
     66                         "desc": { "en": "admin_level unreadable", 
     67                                   "fr": "admin_level illisible"} 
    5768                       } 
    5869 
     
    8697        for rid in rdta: 
    8798 
     99            rta = self.RelationGet(rid) 
     100            if not rta: 
     101                continue 
     102 
    88103            try: 
    89                 level = int(rdta[rid]["tag"]["admin_level"]) 
     104                level = int(rdta[rid]) 
    90105            except: 
    91106                # find node in relation 
    92                 wid = [x["ref"] for x in rdta[rid]["member"] if x["type"]=="way"] 
     107                wid = [x["ref"] for x in rta["member"] if x["type"]=="way"] 
    93108                if not wid: 
    94109                    continue 
     
    102117                    continue 
    103118                # add error to xml 
    104                 self._outxml.startElement("error", {"class":"1"}) 
     119                self._outxml.startElement("error", {"class":"2"}) 
    105120                self._outxml.Element("text", {"lang":"fr", "value":"admin_level illisible"}) 
    106121                self._outxml.Element("text", {"lang":"en", "value":"admin_level unreadable"}) 
    107                 self._outxml.RelationCreate(rdta[rid]) 
     122                self._outxml.RelationCreate(rta) 
    108123                self._outxml.Element("location", {"lat":str(nta["lat"]),"lon":str(nta["lon"])}) 
    109124                self._outxml.endElement("error") 
    110125                continue 
    111126 
    112             for m in rdta[rid][u"member"]: 
     127            for m in rta[u"member"]: 
    113128                if m[u"type"] == u"way": 
    114129                    if m[u"ref"] in way_to_level: 
     
    123138 
    124139            try: 
    125                 level = int(wdta[wid]["tag"]["admin_level"]) 
     140                level = int(wdta[wid]) 
    126141            except: 
    127                 self._outxml.startElement("error", {"class":"1"}) 
     142                wta = self.WayGet(wid) 
     143                if not wta: 
     144                    continue 
     145 
     146                self._outxml.startElement("error", {"class":"2"}) 
    128147                self._outxml.Element("text", {"lang":"fr", "value":"admin_level illisible"}) 
    129148                self._outxml.Element("text", {"lang":"en", "value":"admin_level unreadable"}) 
    130                 self._outxml.WayCreate(wdta[wid]) 
    131                 n =  self.NodeGet(wdta[wid]["nd"][0]) 
     149                wta["tag"]["admin_level"] = wdta[wid] 
     150                self._outxml.WayCreate(wta) 
     151                n = self.NodeGet(wta["nd"][0]) 
    132152                if n: 
    133153                    self._outxml.Element("location", {"lat":str(n["lat"]),"lon":str(n["lon"])}) 
     
    136156 
    137157            if way_to_level[wid] not in [99, level]: 
     158                wta = self.WayGet(wid) 
     159                if not wta: 
     160                    continue 
     161 
    138162                self._outxml.startElement("error", {"class":"1"}) 
    139163                self._outxml.Element("text", {"lang":"fr", "value":"admin_level devrait être %d"%way_to_level[wid]}) 
    140164                self._outxml.Element("text", {"lang":"en", "value":"admin_level should be %d"%way_to_level[wid]}) 
    141                 self._outxml.WayCreate(wdta[wid]) 
    142                 n = self.NodeGet(wdta[wid]["nd"][0]) 
     165                wta["tag"]["admin_level"] = wdta[wid] 
     166                self._outxml.WayCreate(wta) 
     167                n = self.NodeGet(wta["nd"][0]) 
    143168                if n: 
    144169                    self._outxml.Element("location", {"lat":str(n["lat"]),"lon":str(n["lon"])}) 
Note: See TracChangeset for help on using the changeset viewer.