コード例 #1
0
ファイル: elements.py プロジェクト: rweait/changemonger
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]
コード例 #2
0
ファイル: elements.py プロジェクト: ppawel/changemonger
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'])
コード例 #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)
        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'])
コード例 #4
0
def way(id, version = None):
    """Gets a way from the OSM API and returns it as a complete element"""
    data = osmapi.getWay(id, version)
    xml = et.XML(data.encode('utf-8'))
    root = xml.find('way')
    return parser.parseWay(root)
コード例 #5
0
def way(id, version=None):
    """Gets a way from the OSM API and returns it as a complete element"""
    data = osmapi.getWay(id, version)
    xml = et.XML(data)
    root = xml.find('way')
    return parser.parseWay(root)