NCCOOS Trac Projects: Top | Web | Platforms | Processing | Viz | Sprints | Sandbox | (Wind)

Changeset 486

Show
Ignore:
Timestamp:
02/21/12 14:00:31
Author:
haines
Message:

creates goto kml from GCCS output

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • pyglider/trunk/pyglider/pyglider.py

    r485 r486  
    33   parse_glider_mail 
    44   generate_track_kml 
     5 
     6   parse_glider_goto_ma 
     7   generate_waypoint_kml 
    58    
    69""" 
     
    4952# glider = 'ramses' 
    5053# data = parse_glider_mail(lines, glider) 
     54# 
     55# fn = '/home/localuser/realtime/gccs/goto-list/goto_l10_1329750438.ma' 
     56# lines = load_data(fn) 
     57# glider = 'ramses' 
     58# data = parse_glider_goto_ma(lines, glider) 
    5159 
    5260# -------------------------------------------------------------------     
     61 
    5362def parse_glider_mail(lines, glider): 
    5463    msg_split_patt = r'From root\@dockserver' 
     
    318327            html_report_str = data[-1]['description'] 
    319328            html_report_str = html_report_str + '\n'.join(html_report) 
    320             print html_report_str 
     329            # print html_report_str 
    321330            data[-1]['description'] = html_report_str 
    322331    # close for-loop of msg in gms: 
    323332    return data 
    324333 
     334 
    325335def generate_track_kml(data, glider): 
    326336    """ Use pykml to generate kml file for each glider from parsed mail data 
    327337    A glider track consists of a line and placemarks for each surfacing 
    328338     
    329     Usage: kml_doc_str = surface_report_kml(data, glider) 
     339    Usage: kml_doc_str = generate_track_kml(data, glider) 
    330340    """ 
    331341 
     
    395405    doc.Document.append( 
    396406        KML.Style( 
    397             KML.IconStyle( 
    398                 KML.scale(0.8), 
    399                 KML.color("7d0000ff"), 
    400                 KML.Icon(KML.href("icons/cross-hairs.png"))), 
    401             KML.LabelStyle( 
    402                 KML.scale(0.8)), 
    403             id="histWayPosnIcon") 
    404         )     
    405     doc.Document.append( 
    406         KML.Style( 
    407407            KML.LineStyle( 
    408408                KML.color("7dff0000"), 
     
    434434    track_line = KML.Placemark( 
    435435        KML.name(glider), 
     436        KML.description(glider), 
    436437        KML.styleUrl(linestyle), 
    437438        KML.LineString( 
     
    497498    if d['wlon'] and d['wlat']: 
    498499        wp_pm = KML.Placemark( 
    499             KML.name('Target Waypoint'), 
     500            # KML.name('Surface Report Waypoint'), 
    500501            # surface report data 
    501             KML.description(''),  
     502            KML.description('Surface Report Waypoint'),  
    502503            KML.styleUrl("#lastWayPosnIcon"), 
    503504            KML.Point( 
     
    523524    return track_kml 
    524525 
     526def parse_glider_goto_ma(lines, glider): 
     527    data = [] 
     528    m = re.search(r'\<start\:waypoints\>(.*)\<end\:waypoints\>', ''.join(lines), re.MULTILINE|re.S) 
     529    latlonstr = m.group(1) 
     530    latlons = re.split(r'\n', latlonstr) 
     531    for ll in latlons: 
     532        m = re.search(r'^\s*(-?\d{2})(\d{2}\.\d+)\s*(-?\d{2})(\d{2}\.\d+).*$', ll, re.MULTILINE) 
     533        if m: 
     534            # 
     535            lat_deg = float(m.group(3)) 
     536            lat_min = float(m.group(4)) 
     537            # lat_hem = m.group(4).upper() 
     538            # 
     539            lon_deg = float(m.group(1)) 
     540            lon_min = float(m.group(2)) 
     541            # lon_hem = m.group(7).upper() 
     542            if lat_deg<0: 
     543                lat = lat_deg - lat_min/60. 
     544            else: 
     545                lat = lat_deg + lat_min/60. 
     546            if lon_deg<0: 
     547                lon = lon_deg - lon_min/60. 
     548            else: 
     549                lon = lon_deg + lon_min/60. 
     550        else: 
     551            lat = None 
     552            lon = None 
     553        if lat and lon: 
     554            data.append({'glider': glider,  
     555                         'name': '', 
     556                         'description': '<div><code>'+ll+'</code></div>', 
     557                         'lon': lon, 
     558                         'lat': lat}) 
     559    # close for-loop 
     560    return data 
     561 
     562def generate_waypoint_kml(data, glider): 
     563    """ 
     564    Use pykml  
     565 
     566    Usage: kml_doc_str = generate_waypoint_kml(data, glider) 
     567    """ 
     568    from pykml.factory import KML_ElementMaker as KML 
     569    import lxml.etree 
     570 
     571    doc = KML.kml( 
     572        KML.Document( 
     573            KML.Name(glider + "_waypoint"), 
     574            KML.Style( 
     575                KML.IconStyle( 
     576                    KML.scale(0.7), 
     577                    KML.color("ff00ff00"), 
     578                    KML.Icon(KML.href("icons/square.png")) 
     579                    ), 
     580                KML.LabelStyle( 
     581                    KML.color("ff00ff00"), 
     582                    KML.scale(0.8)), 
     583                id="lastPosnIcon") 
     584            ) 
     585        ) 
     586    doc.Document.append( 
     587        KML.Style( 
     588        KML.IconStyle( 
     589          KML.scale(0.7), 
     590          KML.color("7dff00ff"), 
     591          KML.Icon(KML.href("icons/square.png")) 
     592          ), 
     593        KML.LabelStyle( 
     594          KML.scale(0.7) 
     595          ), 
     596        id="gotoPosnIcon") 
     597        ) 
     598 
     599 
     600    doc.Document.append( 
     601        KML.Style( 
     602            KML.LineStyle( 
     603                KML.color("7dff0000"), 
     604                KML.width(2) 
     605                ),   
     606            id="transBlueLine") 
     607        ) 
     608    doc.Document.append( 
     609        KML.Style( 
     610            KML.LineStyle( 
     611                KML.color("7d00ff00"), 
     612                KML.width(2) 
     613                ),   
     614            id="transGreenLine") 
     615        ) 
     616     
     617    if glider == 'ramses': 
     618        linestyle = "#transBlueLine" 
     619    elif glider == 'pelagia': 
     620        linestyle = "#transGreenLine" 
     621    else: 
     622        linestyle = "" 
     623     
     624    coord_str = "" 
     625    for d in data: 
     626        if d['lat'] and d['lon']: 
     627            coord_str = coord_str + "%f,%f,%f\n" % (d['lon'], d['lat'], 0.) 
     628     
     629    waypoint_line = KML.Placemark( 
     630        KML.name(glider), 
     631        KML.description(glider+' goto'), 
     632        KML.styleUrl(linestyle), 
     633        KML.LineString( 
     634            KML.altitudeMode("absolute"), 
     635            KML.coordinates(coord_str) 
     636            ) 
     637        ) 
     638    # glider placemarks (pms) 
     639    pms = [] 
     640    for d in data[:-1]: 
     641        pms.append( 
     642            KML.Placemark( 
     643                # short time stamp 
     644                KML.description(d['description']), 
     645                KML.styleUrl("#gotoPosnIcon"), 
     646                KML.Point( 
     647                    KML.altitudeMode("absolute"), 
     648                    KML.coordinates("%f,%f,%f" % (d['lon'], d['lat'], 0.)) 
     649                    ) 
     650                ) 
     651            ) 
     652 
     653    d = data[-1] 
     654    wp_folder = KML.Folder( 
     655        KML.name(d['glider']), 
     656        waypoint_line, 
     657        ) 
     658    for pm in pms: 
     659        wp_folder.append(pm) 
     660    doc.Document.append( 
     661        wp_folder 
     662        ) 
     663    track_kml = lxml.etree.tostring(doc, pretty_print=True) 
     664    return track_kml 
     665 
  • pyglider/trunk/pyglider/pytrack_kml.py

    r471 r486  
    2929        f.close() 
    3030 
     31        import glob 
     32 
     33        if glider == 'ramses': 
     34            globstr = 'l10' 
     35        elif glider == 'pelagia': 
     36            globstr = 'l20' 
     37             
     38        fns = glob.glob('/home/localuser/realtime/gccs/goto-list/*'+globstr+'*.ma') 
     39        fns.sort() 
     40        fn = fns[-2] # last one is latest.ma 
     41         
     42        lines = pyglider.load_data(fn) 
     43        data = pyglider.parse_glider_goto_ma(lines, glider) 
     44         
     45        kml = pyglider.generate_waypoint_kml(data, glider) 
     46        ofn = '/home/localuser/realtime/tracks/'+glider+'_waypoint.kml' 
     47        f = open(ofn, 'w') 
     48        f.write(kml) 
     49        f.close()                 
     50 
    3151    except: 
    3252        pass