solution_070e.py

#!/usr/bin/python2
# ====================================================================
# bounding box = left,bottom,right,top (west,south,east,north)
# ====================================================================

import overpy

# -------------------------------------------------------------------
# ---- convert to degrees:int, minutes:int, seconds:int, seconds:float
# -------------------------------------------------------------------

def dms(deg:float) -> tuple:
    neg = False
    if deg < 0.0:
        neg = True
        deg = -deg
    d  = int(deg)
    mf = abs(deg - d) * 60.0
    m = int(mf)
    sf = (mf - m) * 60.0
    s = int(sf)
    if neg:return(-d,-m,-s,-sf)
    return (d,m,s,sf)


# --------------------------------------------------------------------
# ---- display bbox as dms
# ---- bounding box = lat south, lon west, lat north, lon east
# --------------------------------------------------------------------

def display_bbox_dms(bbox):

    ll = ['lat (south)','lon (west)','lat (north)','lon (east)']

    for i in range(4):
        d,m,s,sf = dms(bbox[i])
        print(f'{ll[i]:11} deg={d:>4} min={m:>3} sec={s:>3}'+\
              f'  ({bbox[i]:.6})')

    return
        

# --------------------------------------------------------------------
# -- main
# --------------------------------------------------------------------

bbox = [ 34.1470, -118.1449, 34.1479, -118.1440 ]

display_bbox_dms(bbox)

# ---- overpass API query

api = overpy.Overpass()

qry = f'node({bbox[0]},{bbox[1]},{bbox[2]},{bbox[3]});out;'

result = api.query(qry)

nod_l = len(result.nodes)

print(f'results nodes: {nod_l}')

way_l = len(result.ways)

print(f'results ways: {way_l}')

rel_l = len(result.relations)

print(f'results relations: {rel_l}')

# ---- display nodes sith tags

if nod_l > 0:
    print()
    for i in range(nod_l):
        node = result.nodes[i]
        if len(node.tags) > 0:
            print('--------------------------')
            print(f'node: {node.id}')
            print(f'node.tag: {node.tags}')