Exemplo n.º 1
0
def add_remote_ways(coll):
    """Takes a collection of elements and adds way references for
    nodes if they don't have tags, or existing ways
    """
    nodes = [ele for ele in coll if (ele['type'] == 'node'
                                     and not ele['tags']
                                     and not ele.has_key('_ways'))]
    for node in nodes:
        if node['tags'] or node.has_key('_ways'):
            # It only needs to have one way for us to care. We're not
            # looking at all the object relationships, just the first
            # right now
            continue
        data = osmapi.getWaysforNode(node['id'])
        xml = et.XML(data.encode('utf-8'))
        ways = [parser.parseWay(way) for way in xml.findall('way')]
        for way in ways:
            coll.append(way)
            # This is a lot of looping we could avoid if we had an index...
            for nd in nodes:
                if not nd['id'] in way['nd']:
                    continue
                if nd.has_key('_ways'):
                    nd['_ways'].append(way)
                else:
                    nd['_ways'] = [way]
Exemplo n.º 2
0
def add_remote_ways(coll):
    """Takes a collection of elements and adds way references for
    nodes if they don't have tags, or existing ways
    """
    logging.debug("Adding remote way references. %d items in the collection." %
                  (len(coll)))
    nodes = [
        ele for ele in coll
        if (ele['type'] == 'node' and not ele.get('tags')
            and not ele.get('_ways') and not ele.get('_relations'))
    ]
    logging.debug("%d nodes to consider" % (len(nodes)))
    logging.debug("Nodes: \n%s" % pformat(nodes))
    for node in nodes:
        if node['tags'] or node.get('_ways') or node.get('_relations'):
            # It only needs to have one way for us to care. We're not
            # looking at all the object relationships, just the first
            # right now
            continue
        logging.debug("Node %s has no remote ways or relations. Retrieving." %
                      str(node['id']))
        data = osmapi.getWaysforNode(node['id'])
        xml = et.XML(data.encode('utf-8'))
        ways = [parser.parseWay(way) for way in xml.findall('way')]
        for way in ways:
            logging.debug("Adding new way %s to collection" % way['id'])
            logging.debug(pformat(way))
            coll.append(way)
            target_nodes = [
                retrieve(coll, 'node', node_id) for node_id in way['nd']
            ]
            target_nodes = [node for node in target_nodes if node]
            logging.debug("%d nodes potentially effected" % len(target_nodes))
            for node in target_nodes:
                logging.debug("Adding way reference for way %s to node %s" %
                              (str(way['id']), str(node['id'])))
                if node.has_key('_ways'):
                    node['_ways'].append(way['id'])
                else:
                    node['_ways'] = [way['id']]
            logging.debug("Done adding references for way %s" % way['id'])
Exemplo n.º 3
0
def add_remote_ways(coll):
    """Takes a collection of elements and adds way references for
    nodes if they don't have tags, or existing ways
    """
    logging.debug("Adding remote way references. %d items in the collection." % (len(coll)))
    nodes = [
        ele
        for ele in coll
        if (ele["type"] == "node" and not ele.get("tags") and not ele.get("_ways") and not ele.get("_relations"))
    ]
    logging.debug("%d nodes to consider" % (len(nodes)))
    logging.debug("Nodes: \n%s" % pformat(nodes))
    for node in nodes:
        if node["tags"] or node.get("_ways") or node.get("_relations"):
            # It only needs to have one way for us to care. We're not
            # looking at all the object relationships, just the first
            # right now
            continue
        logging.debug("Node %s has no remote ways or relations. Retrieving." % str(node["id"]))
        data = osmapi.getWaysforNode(node["id"])
        xml = et.XML(data.encode("utf-8"))
        ways = [parser.parseWay(way) for way in xml.findall("way")]
        for way in ways:
            logging.debug("Adding new way %s to collection" % way["id"])
            logging.debug(pformat(way))
            coll.append(way)
            target_nodes = [retrieve(coll, "node", node_id) for node_id in way["nd"]]
            target_nodes = [node for node in target_nodes if node]
            logging.debug("%d nodes potentially effected" % len(target_nodes))
            for node in target_nodes:
                logging.debug("Adding way reference for way %s to node %s" % (str(way["id"]), str(node["id"])))
                if node.has_key("_ways"):
                    node["_ways"].append(way["id"])
                else:
                    node["_ways"] = [way["id"]]
            logging.debug("Done adding references for way %s" % way["id"])