def get_notampoints_on_line(latlon1,latlon2,dist_nm): zoomlevel=13 distmax=mapper.approx_scale(mapper.latlon2merc(latlon1,zoomlevel),zoomlevel,dist_nm) px1,py1=mapper.latlon2merc(latlon1,zoomlevel) px2,py2=mapper.latlon2merc(latlon2,zoomlevel) a=Vertex(int(px1),int(py1)) b=Vertex(int(px2),int(py2)) line=Line(a,b) crosses=[] for kind,items in get_notam_objs_cached().items(): if kind!="areas": for item in items: x,y=mapper.latlon2merc(mapper.from_str(item['pos']),zoomlevel) d=line.approx_dist(Vertex(int(x),int(y))) clo=line.approx_closest(Vertex(int(x),int(y))) alongd=(clo-a).approxlength() totd=(a-b).approxlength() #print "AlongD: %s, totd: %s"%(alongd,totd) #print "Line: %s, notam coord: %s, closest: %s"%((a,b),(x,y),clo) #print "Item %s, d: %s, distmax: %s"%(item,d,distmax) if totd<1e-6: perc=0 else: perc=alongd/totd if d<distmax: #print "Yielding item." yield dict(item=item,alongperc=perc)
def get_any_space_on_line(latlon1,latlon2): return list( chain( get_airspaces_on_line(latlon1,latlon2), #get_polygons_on_line(latlon1,latlon2,cache.get_airspaces()), get_polygons_on_line(latlon1,latlon2,cache.get_aip_sup_areas()), get_polygons_on_line(latlon1,latlon2,get_notam_objs_cached()['areas']) ))
def get_notampoints(lat,lon,zoomlevel): clickx,clicky=mapper.latlon2merc((lat,lon),zoomlevel) for kind,items in get_notam_objs_cached().items(): if kind!="areas": for item in items: x,y=mapper.latlon2merc(mapper.from_str(item['pos']),zoomlevel) radius=10 d=(clickx-x)**2+(clicky-y)**2 if d<=(radius)**2: yield item
def get_notam_areas_on_line(latlon1,latlon2): return get_polygons_on_line(latlon1,latlon2,get_notam_objs_cached()['areas'])
def get_notam_areas(lat,lon): return get_polygons_around(lat,lon,get_notam_objs_cached()['areas'])