# # Walk through all OSM ways checking for ones with no name # for way in osm_tree.findall('way'): named=False uuid=None for tag in way.findall('tag'): if tag.attrib['k'] == 'name': named=True elif tag.attrib['k'] == 'geobase:uuid': uuid=tag.attrib['v'] if named == False and uuid != None: #Apply StatsCan Name if nameMatchHandler.nameHash.has_key(uuid): nameTags=nameMatchHandler.nameHash[uuid] name = nameTags['NAME'] if nameTags['TYPE'] != None: name = name + expandStreetType(nameTags['TYPE']) if nameTags['DIRECTION'] != None: name = name + ' ' + nameTags['DIRECTION'] way.append(ET.Element('tag', k='name', v=name)) way.append(ET.Element('tag',k='statscan:rbuid',v=nameTags['RB_UID'])) #has key #not named #for osm_tree.write(options.outputfile)
def completeWay(self): self.completed=True #Post Processing. #Exclude nodes that are not in the bounding region. shape=LineString(self.coords) #print "Checking Intersection on %s" % str(self.coords) if (self.boundary<>None and self.boundary.intersects(shape)==False ): #Mark this object as excluded + incomplete self.outOfBounds=True return for coord in self.coords: key = str(coord[0]) + '-' + str(coord[1]) if not self.nodehash.get(key): node_id = str(len(self.nodes)) newnode = ET.Element("node", visible='true', id=node_id, lat=str(coord[1]), lon=str(coord[0])) self.nodes.append(newnode) self.nodehash[key] = node_id self.way_element.append(ET.Element('nd', ref=self.nodehash[key])) self.localize() # Catch all transcanada/yellowhead highway segments that we may have missed if self.tags.has_key('alt_name:en'): if ('TransCanada Highway' in self.tags['alt_name:en'] or 'Yellowhead Highway' in self.tags['alt_name:en']) and self.tags['highway'] != 'motorway': self.tags['highway'] = 'trunk' if 'TransCanada Highway' in self.tags['alt_name:en']: self.tags['nat_name:en']='TransCanada Highway' self.tags['nat_name:fr']='Route Transcanadienne' if 'Yellowhead Highway' in self.tags['alt_name:en']: self.tags['nat_name:en']='Yellowhead Highway' # Convert the sets back to semicolon separated strings if self.tags.has_key('ref'): self.tags['ref'] = setToString(self.tags['ref']); if self.tags.has_key('name')==False: if self.dataset <> 'Quebec' and self.tags.has_key('alt_name:en'): self.tags['name']=setToString(self.tags['alt_name:en']) elif self.tags.has_key('alt_name:fr'): self.tags['name']=setToString(self.tags['alt_name:fr']) if self.tags.has_key('alt_name:en'): self.tags['alt_name:en'] = setToString(self.tags['alt_name:en']) if self.tags.has_key('alt_name:en'): self.tags['alt_name:en'] = setToString(self.tags['alt_name:en']) if self.tags.has_key('alt_name:fr'): self.tags['alt_name:fr'] = setToString(self.tags['alt_name:fr']) if self.placeName != None: self.placeName=self.placeName + ',' + self.dataset else: self.placeName=self.dataset if self.placeName != None: #Only set is in, if we at least have a province. self.placeName=self.placeName + ',Canada' self.tags['is_in']=self.placeName # Convert the tags to xml nodes # # If no name is defined, check nameHash # to see if one is available in the external # dataset. if not self.tags.has_key('name'): uuid=self.tags['geobase:uuid'] if self.nameHash.has_key(uuid) : nameTags=self.nameHash[uuid] if nameTags['NAME'] != None: self.tags['name'] = nameTags['NAME'] if nameTags['TYPE'] != None: self.tags['name']=self.tags['name'] + expandStreetType(nameTags['TYPE']) if nameTags['DIRECTION'] != None: self.tags['name']=self.tags['name']+ ' '+ nameTags['DIRECTION'] if nameTags['RB_UID'] != None: self.tags['statscan:rbuid'] = nameTags['RB_UID'] #TODO filter out Unknown etc... for key, value in self.tags.iteritems(): self.way_element.append(ET.Element('tag', k=key,v=value)) self.way_element.append(ET.Element('tag',k='attribution',v=self.attribution)) self.way_element.append(ET.Element('tag',k='source',v=self.source)) self.nid=self.tags['geobase:uuid'] self.tags = None