def ballooning(info): balloon_text = """\ <html> <head> <style> .logo { height: 3em; } .label { font-weight: bold; } </style> </head> <body> <div class="bln"> <img class="logo" src="http://cchdo.ucsd.edu/images/logos/CCHDO_logo.png"> <p> <span class="label"><a href="http://seahunt.ucsd.edu/cruise/$[expocode]">ExpoCode</a>:</span> <a href="http://cchdo.ucsd.edu/cruise/$[expocode]">$[expocode]</a> </p> <p> <span class="label">Line:</span> <span class="value">$[line]</span> </p> <p> <span class="label">Aliases:</span> <span class="value">$[alias]</span> </p> <p> <span class="label">Ship/Country:</span> <span class="value">$[ship]/$[country]</span> </p> <p> <span class="label">Chief Scientists:</span> <span class="value">$[chisci]</span> </p> <p> <span class="label">Cruise Dates:</span> <span class="value">$[date_start] - $[date_end]</span> </p> </div> </body> </html> """ balloon_style = KML.BalloonStyle( KML.text(balloon_text), KML.textColor('ff000000'), KML.bgColor('ffebceb7'), ) return balloon_style
def createPlacemarker(self, kmlname, kmlcolor, kmlcount, coords): pmcoords = coords # str(coords).rstrip('\n') kmldescr = kmlcount colorpoly, colortxt = kmlcolor # kmlnamep = kmlname kmlnamef = '<h2 align="center" style="color:#' + colortxt + '">' + kmlname[:5] + ' ' + kmlname[ 5:] + '</h2>' descript = ( '<table> ' '<tr>' '<td><b>Anzahl Hunde: </b></td>' '<td align="right"><b>' + str(kmldescr) + '</b></td>' '</tr>' '<tr>' '<td>Überhöhungsfaktor: </td>' '<td align="right">' + str(self.uef) + '</td>' '</tr>' '</tr>' '<tr>' '<td>Datenquelle: </td>' '<td align="right"><a href="https://data.stadt-zuerich.ch/">OpenData Zürich</a></td>' '</tr>' '</table>') pm1 = KML.Placemark( KML.name(kmlnamef), KML.description(descript), KML.Style( KML.PolyStyle(KML.color(colorpoly), ), KML.LineStyle( KML.width('0'), KML.color(colorpoly), ), KML.BalloonStyle(KML.displayMode('default')), ), KML.Polygon( KML.extrude(1), KML.tessellate(0), KML.altitudeMode('relativeToGround'), KML.outerBoundaryIs(KML.LinearRing(KML.coordinates(pmcoords))), ), ) return pm1
def makeExtendedDataElements(datadict): '''Converts a dictionary to ExtendedData/Data elements''' edata = KML.ExtendedData() for key, value in datadict.items(): edata.append(KML.Data(KML.value(value), name=key + "_")) return edata # create a KML document with a folder and a default style stylename = "earthquake-balloon-style" balloonstyle = KML.BalloonStyle( KML.text(""" <table Border=1> <tr><th>Earthquake ID</th><td>$[Eqid_]</td></tr> <tr><th>Magnitude</th><td>$[Magnitude_]</td></tr> <tr><th>Depth</th><td>$[Depth_]</td></tr> <tr><th>Datetime</th><td>$[Datetime_]</td></tr> <tr><th>Coordinates</th><td>($[Lat_],$[Lat_])</td></tr> <tr><th>Region</th><td>$[Region_]</td></tr> </table>"""), ) doc = KML.Document() iconstyles = [ [2, 'ff000000'], [3, 'ffff0000'], [4, 'ff00ff55'], [5, 'ffff00aa'], [6, 'ff00ffff'], [7, 'ff0000ff'], ]
id="transBluePoly", ), KML.Style( KML.LineStyle(KML.width("1.5"), ), KML.PolyStyle(KML.color("7d00ff00"), ), id="transGreenPoly", ), KML.Style( KML.LineStyle(KML.width("1.5"), ), KML.PolyStyle(KML.color("7d00ffff"), ), id="transYellowPoly", ), KML.Style( KML.BalloonStyle( KML.text(""" <b>$[name]</b> <br /><br /> $[description] """), ), id="noDrivingDirections", ), KML.Folder( KML.name("Placemarks"), KML.description( "These are just some of the different kinds of placemarks with" "which you can mark your favorite places"), KML.LookAt( KML.longitude("-122.0839597145766"), KML.latitude("37.42222904525232"), KML.altitude("0"), KML.heading("-148.4122922628044"), KML.tilt("40.5575073395506"),
def tab_kml(self): df1 = self.run_files['file_input']['table_file'] bb = self.run_files['file_input']['file_name'] stylename = "earthquake-balloon-style" balloonstyle = KML.BalloonStyle( KML.text(""" <table Border=1> <tr><th>Earthquake ID</th><td>$[Eqid_]</td></tr> <tr><th>Magnitude</th><td>$[Magnitude_]</td></tr> <tr><th>Depth</th><td>$[Depth_]</td></tr> <tr><th>Datetime</th><td>$[Datetime_]</td></tr> <tr><th>Coordinates</th><td>($[Lat_],$[Lat_])</td></tr> <tr><th>Region</th><td>$[Region_]</td></tr> </table>"""), ) doc = KML.Document() iconstyles = [ [1, 'ff000000'], [2, 'ffff0000'], [3, 'ff00ff55'], [4, 'ffff00aa'], [5, 'ff00ffff'], [6, 'ff0000ff'], ] for threshold, color in iconstyles: doc.append( KML.Style(KML.IconStyle( KML.color(color), KML.scale(1.1), KML.Icon( KML.href( 'http://www.gstatic.com/mapspro/images/stock/503-wht-blank_maps.png' )), KML.hotspot('', x='16', y='31', xunits='pixels', yunits='insetPixels'), ), KML.LabelStyle(KML.scale(1.1)), id='icon-503-{}-normal'.format(color))) def element(g, i): for k, row in g.iterrows(): if len(iconstyles) > int(i): jj = int(i) + 1 elif len(iconstyles) <= int(i): jj = int(i) - (len(iconstyles) - 1) pm = KML.Placemark( KML.name("specimen={0}".format(row['specimen_voucher'])), KML.styleUrl('#icon-503-{}-normal'.format( iconstyles[jj][-1])), KML.Point( KML.coordinates("{0},{1}".format( row['longitude'], row['latitude'])))) fld.append(pm) return fld for i, g in df1.groupby('species_number'): fld = KML.Folder( KML.name(f'species number: {"unassigned" if i=="0" else i}')) gg = element(g, i) doc.append(gg) self.result_files['kml_file'] = doc self.result_files['file_name'] = bb
def KML_file_header(self, icon, tour_name): if tour_name == "Stadium Tour": icon_ok = icon[0] else: icon_ok = "../img/"+icon[0] kml_doc = KML.kml( KML.Document( KML.Style( KML.IconStyle( KML.scale('2.5'), KML.Icon( KML.href(icon_ok) ), ), KML.LabelStyle( KML.color("ff80ccff"), KML.scale(2) ), KML.BalloonStyle( KML.text("$[description]") ), KML.LineStyle( KML.color('bf00aaff'), KML.width(5) ), id=stylename ), KML.Style( KML.IconStyle( KML.scale('2.5'), KML.Icon( KML.href("../img/"+icon[1]) ), ), KML.LabelStyle( KML.color("ff80ccff"), KML.scale(4) ), KML.LineStyle( KML.color('FFFF0000'), GX.outerColor('FF4CBB17'), GX.physicalWidth('25000'), GX.outerWidth('0.40') ), id=stylename2 ), GX.Tour( KML.name(tour_name), GX.Playlist(), ), KML.Folder( KML.name('Features'), KML.Style( KML.ListStyle( KML.listItemType("checkHideChildren") ) ), id='features', ), ), ) return kml_doc
def _convert_(self, request): from pykml.factory import KML_ElementMaker as KML from lxml import etree ## create the database if self.use_stat: raise (NotImplementedError) else: db = self.sub.to_db(wkt=True, to_disk=True) meta = request.ocg if request.environ['SERVER_PORT'] == '80': portstr = '' else: portstr = ':{port}'.format(port=request.environ['SERVER_PORT']) url = '{protocol}://{server}{port}{path}'.format( protocol='http', port=portstr, server=request.environ['SERVER_NAME'], path=request.environ['PATH_INFO'], ) description = ( '<table border="1">' '<tbody>' '<tr><th>Archive</th><td>{archive}</td></tr>' '<tr><th>Emissions Scenario</th><td>{scenario}</td></tr>' '<tr><th>Climate Model</th><td>{model}</td></tr>' '<tr><th>Run</th><td>{run}</td></tr>' '<tr><th>Output Variable</th><td>{variable}</td></tr>' '<tr><th>Units</th><td>{units}</td></tr>' '<tr><th>Start Time</th><td>{start}</td></tr>' '<tr><th>End Time</th><td>{end}</td></tr>' '<tr>' '<th>Request URL</th>' '<td><a href="{url}">{url}</a></td>' '</tr>' '<tr>' '<th>Other Available Formats</th>' '<td>' '<a href="{url}">KML</a> - Keyhole Markup Language<br/>' '<a href="{url_kmz}">KMZ</a> - Keyhole Markup Language (zipped)<br/>' '<a href="{url_shz}">Shapefile</a> - ESRI Shapefile<br/>' '<a href="{url_csv}">CSV</a> - Comma Separated Values (text file)<br/>' '<a href="{url_json}">JSON</a> - Javascript Object Notation' '</td>' '</tr>' '</tbody>' '</table>').format( archive=meta.archive.name, scenario=meta.scenario, model=meta.climate_model, run=meta.run, variable=meta.variable, units=meta.variable.units, simout=meta.simulation_output.netcdf_variable, start=meta.temporal[0], end=meta.temporal[-1], operation=meta.operation, url=url, url_kmz=url.replace('.kml', '.kmz'), url_shz=url.replace('.kml', '.shz'), url_csv=url.replace('.kml', '.csv'), url_json=url.replace('.kml', '.geojson'), ) ##### TODO: build linked urls on the fly #from piston.emitters import Emitter #Emitter.EMITTERS.keys() #['xml', 'sqlite', 'nc', 'shz', 'kml', 'kcsv', 'django', 'json', 'html', 'meta', 'lshz', 'csv', 'pickle', 'kmz'] doc = KML.kml( KML.Document( KML.name('Climate Simulation Output'), KML.open(1), KML.description(description), KML.snippet( '<i>Click for metadata!</i>', maxLines="2", ), KML.StyleMap( KML.Pair( KML.key('normal'), KML.styleUrl('#style-normal'), ), KML.Pair( KML.key('highlight'), KML.styleUrl('#style-highlight'), ), id="smap", ), KML.Style( KML.LineStyle( KML.color('ff0000ff'), KML.width('2'), ), KML.PolyStyle(KML.color('400000ff'), ), id="style-normal", ), KML.Style( KML.LineStyle( KML.color('ff00ff00'), KML.width('4'), ), KML.PolyStyle(KML.color('400000ff'), ), KML.BalloonStyle( KML.text(( '<script type="text/javascript" src="http://dygraphs.com/dygraph-combined.js">' '</script>' '<div id="graphdiv"></div>' '<script type="text/javascript">' 'g = new Dygraph(' 'document.getElementById("graphdiv"),' '$[csv_data],' '{{' 'ylabel: \'{param} [{units}]\',' 'legend: \'always\'' '}}' ');' '</script>').format( param=meta.variable.name, units=meta.variable.units, ))), id="style-highlight", ), #Time Folders will be appended here ), ) try: s = db.Session() # create a folder to hold the geometries geom_fld = KML.Folder(KML.name('Geometries'), ) for geom in s.query(db.Geometry).all(): coord_list = geom.as_kml_coords() multigeom_args = [ KML.Polygon( KML.tessellate('1'), KML.outerBoundaryIs( KML.LinearRing(KML.coordinates(coords.text), ), ), ) for coords in coord_list ] # TODO: sort values by time to speed loading values = [ '{0},{1}'.format( datetime.strftime(val.time, "%Y-%m-%d %H:%M:%S"), val.value) for val in geom.values ] pm = KML.Placemark( KML.name('Geometry'), KML.ExtendedData( KML.Data( KML.value('"Date,{param}\\n{data}"'.format( param=meta.variable.name, data='\\n'.join(values))), name="csv_data", ), ), KML.description(''), KML.styleUrl('#smap'), KML.MultiGeometry(*multigeom_args), ) geom_fld.append(pm) doc.Document.append(geom_fld) # for time in s.query(db.Time).all(): # # create a folder for the time # timefld = KML.Folder( ## KML.Style( ## KML.ListStyle( ## KML.listItemType('checkHideChildren'), ## KML.bgColor('00ffffff'), ## KML.maxSnippetLines('2'), ## ), ## ), # KML.name(time.as_xml_date()), # # placemarks will be appended here # ) # for val in time.values: # poly_desc = ( # '<table border="1">' # '<tbody>' # '<tr><th>Variable</th><td>{variable}</td></tr>' # '<tr><th>Date/Time (UTC)</th><td>{time}</td></tr>' # '<tr><th>Value</th><td>{value:.{digits}f} {units}</td></tr>' # '</tbody>' # '</table>' # ).format( # variable=meta.variable.name, # time=val.time_ref.as_xml_date(), # value=val.value, # digits=3, # units=meta.variable.units, # ) # # coords = val.geometry.as_kml_coords() # timefld.append( # KML.Placemark( # KML.name('Geometry'), # KML.description(poly_desc), # KML.styleUrl('#smap'), # KML.Polygon( # KML.tessellate('1'), # KML.outerBoundaryIs( # KML.LinearRing( # KML.coordinates(coords), # ), # ), # ), # ) # ) # doc.Document.append(timefld) # pass finally: s.close() # return the pretty print string output = etree.tostring(doc, pretty_print=True) # Unescape newline characters #return(output.replace('&#10;','\\n')) return (output)
def getkml(self): avgalt = sum([i.Altitude for i in self.waypoints]) / float(len(self.waypoints)) minlat = min([i.Latitude for i in self.waypoints]) minlon = min([i.Longitude for i in self.waypoints]) maxlon = max([i.Longitude for i in self.waypoints]) maxlat = max([ i.Latitude + (i.Altitude - avgalt) / (60.0 * 1852.0 * math.cos(math.radians(-20))) for i in self.waypoints ]) if abs(maxlon - minlon) > abs(maxlat - minlat): rang = abs(maxlon - minlon) * 60.0 * 1852.0 / ( 2.0 * math.sin(math.radians(self.hfov) / 2.0)) * 1.2 else: rang = abs(maxlat - minlat) * 60.0 * 1852.0 / ( 2.0 * math.sin(math.radians(self.hfov) / 2.0)) * 16.0 / 9.0 txtwaypoints = ' '.join([ '%f,%f,%f' % (i.Longitude, i.Latitude, i.Altitude) for i in self.waypoints ]) txtsmoothed = ' '.join([ '%f,%f,%f' % (i.Longitude, i.Latitude, i.Altitude) for i in self.smoothed ]) wfolder = KML.Folder( KML.name('WayPoint Markers'), KML.visibility(1), ) pfolder = KML.Folder( KML.name('POI Markers'), KML.visibility(1), ) vfolder = KML.Folder( KML.name('WayPoint Views'), KML.visibility(0), ) playlist = GX.Playlist() #TODO: CDATA virtmission = KML.kml( KML.Document( KML.name(self.mission), KML.LookAt( KML.latitude((minlat + maxlat) / 2.0), KML.longitude((minlon + maxlon) / 2.0), KML.altitude(avgalt), KML.heading(0), KML.tilt(70), KML.range(rang), KML.altitudeMode("absolute"), GX.horizFov(self.hfov), ), GX.Tour( KML.name('Virtual Mission'), playlist, ), KML.Style( KML.LineStyle( KML.color('FF00FFFF'), KML.width(2), ), KML.PolyStyle(KML.color('4C00FFFF'), ), id='wpstyle', ), KML.Style( KML.LineStyle( KML.color('FFFF00FF'), KML.width(2), ), KML.PolyStyle(KML.color('4CFF00FF'), ), id='smoothstyle', ), KML.Style( KML.IconStyle( KML.Icon( KML.href( 'http://maps.google.com/mapfiles/kml/paddle/wht-blank.png' ), ), ), KML.BalloonStyle( KML.text( '\n<h3>WayPoint $[Waypoint]</h3>\n<table border="0" width="200">\n<tr><td>Altitude (msl) <td>$[Altitude_Abs] m\n<tr><td>Altitude (rtg) <td>$[Altitude_Gnd] m\n<tr><td>Heading<td>$[Heading] degrees\n<tr><td>Gimbal Tilt<td> $[Gimbal] degrees\n</tr></table>\n' ), KML.bgColor('ffffffbb'), ), id='wpmarkers', ), KML.Style( KML.IconStyle( KML.Icon( KML.href( 'http://maps.google.com/mapfiles/kml/paddle/red-stars.png' ), ), ), KML.BalloonStyle( KML.text( '\n<h3>POI $[POI]</h3>\n <table border="0" width="200">\n <tr><td>Altitude (msl) <td>$[Altitude_Abs] m\n <tr><td>Altitude (rtg) <td>$[Altitude_Gnd] m\n </tr></table>\n' ), KML.bgColor('ffffffbb'), ), id='poimarkers', ), KML.Folder( KML.name('Diagnostics'), KML.Placemark( KML.name('WayPoint Path'), KML.visibility(0), KML.styleUrl('#wpstyle'), KML.LineString( KML.extrude(1), KML.tessellate(1), KML.altitudeMode('absolute'), KML.coordinates(txtwaypoints), ), ), wfolder, pfolder, vfolder, KML.Placemark( KML.name('Smooth Flight Path'), KML.visibility(1), KML.styleUrl('#smoothstyle'), KML.LineString( KML.extrude(1), KML.tessellate(1), KML.altitudeMode('absolute'), KML.coordinates(txtsmoothed), ), ), ), )) for wp in self.smoothed: playlist.append( GX.FlyTo( GX.duration(wp.LegTime), GX.flyToMode('smooth'), KML.Camera( KML.latitude(wp.Latitude), KML.longitude(wp.Longitude), KML.altitude(wp.Altitude), KML.heading(wp.Heading), KML.tilt(wp.GimbalTilt), KML.roll(0), KML.altitudeMode("absolute"), GX.horizFov(self.hfov), ), ), ) playlist.append(GX.Wait(GX.duration(0), ), ) for wp in self.waypoints: wfolder.append( KML.Placemark( KML.name('WP%02d' % (wp.Num)), KML.visibility(1), KML.styleUrl('#wpmarkers'), KML.ExtendedData( KML.Data(KML.value(wp.Num), name='Waypoint'), KML.Data(KML.value(round(wp.Altitude, 0)), name='Altitude_Abs'), KML.Data(KML.value(round(wp.Altitude - wp.GroundAlt, 0)), name='Altitude_Gnd'), KML.Data(KML.value(round(wp.Heading, 0)), name='Heading'), KML.Data(KML.value(round(wp.GimbalTilt - 90.0, 0)), name='Gimbal'), ), KML.Point( KML.altitudeMode("absolute"), KML.extrude(1), KML.coordinates( '%f,%f,%f' % (wp.Longitude, wp.Latitude, wp.Altitude)), ), ), ) for poi in self.pois: num = self.pois.index(poi) + 1 pfolder.append( KML.Placemark( KML.name('POI%02d' % num), KML.visibility(1), KML.styleUrl('#poimarkers'), KML.ExtendedData( KML.Data(KML.value(num), name='POI'), KML.Data(KML.value(round(poi.Altitude, 0)), name='Altitude_Abs'), KML.Data(KML.value( round(poi.Altitude - poi.GroundAlt, 0)), name='Altitude_Gnd'), ), KML.Point( KML.altitudeMode("absolute"), KML.extrude(1), KML.coordinates( '%f,%f,%f' % (poi.Longitude, poi.Latitude, poi.Altitude)), ), ), ) for wp in self.smoothed: if wp.Num is None: continue vfolder.append( KML.Document( KML.name('WP%03d' % (wp.Num)), KML.visibility(0), KML.Camera( KML.latitude(wp.Latitude), KML.longitude(wp.Longitude), KML.altitude(wp.Altitude), KML.heading(wp.Heading), KML.tilt(wp.GimbalTilt), KML.roll(0), KML.altitudeMode("absolute"), GX.horizFov(self.hfov), ), ), ) return etree.tostring(virtmission, pretty_print=True)
KML.BalloonStyle( KML.text( '<table border="0"> ' '<tr><td><b>CVEGEO</b></td><td>$[28_Manzanas_INV2016/CVEGEO]</td></tr> ' '<tr><td><b>VIVTOT</b></td><td>$[28_Manzanas_INV2016/VIVTOT]</td></tr> ' '<tr><td><b>TVIVHAB</b></td><td>$[28_Manzanas_INV2016/TVIVHAB]</td></tr> ' '<tr><td><b>P_TVIVHAB</b></td><td>$[28_Manzanas_INV2016/P_TVIVHAB]</td></tr> ' '<tr><td><b>TVIVPAR</b></td><td>$[28_Manzanas_INV2016/TVIVPAR]</td></tr> ' '<tr><td><b>P_TVIVPAR</b></td><td>$[28_Manzanas_INV2016/P_TVIVPAR]</td></tr> ' '<tr><td><b>TVIVPARHAB</b></td><td>$[28_Manzanas_INV2016/TVIVPARHAB]</td></tr> ' '<tr><td><b>PVIVPARHAB</b></td><td>$[28_Manzanas_INV2016/PVIVPARHAB]</td></tr> ' '<tr><td><b>VIVPAR_DES</b></td><td>$[28_Manzanas_INV2016/VIVPAR_DES]</td></tr> ' '<tr><td><b>P_VIVPAR_D</b></td><td>$[28_Manzanas_INV2016/P_VIVPAR_D]</td></tr> ' '<tr><td><b>VIVPAR_UT</b></td><td>$[28_Manzanas_INV2016/VIVPAR_UT]</td></tr> ' '<tr><td><b>P_VIVPAR_U</b></td><td>$[28_Manzanas_INV2016/P_VIVPAR_U]</td></tr> ' '<tr><td><b>VIVNOHAB</b></td><td>$[28_Manzanas_INV2016/VIVNOHAB]</td></tr> ' '<tr><td><b>P_VIVNOHAB</b></td><td>$[28_Manzanas_INV2016/P_VIVNOHAB]</td></tr> ' '<tr><td><b>VPH_PISODT</b></td><td>$[28_Manzanas_INV2016/VPH_PISODT]</td></tr> ' '<tr><td><b>P_V_PISODT</b></td><td>$[28_Manzanas_INV2016/P_V_PISODT]</td></tr> ' '<tr><td><b>VPH_C_ELEC</b></td><td>$[28_Manzanas_INV2016/VPH_C_ELEC]</td></tr> ' '<tr><td><b>P_V_C_ELEC</b></td><td>$[28_Manzanas_INV2016/P_V_C_ELEC]</td></tr> ' '<tr><td><b>VPH_AGUADV</b></td><td>$[28_Manzanas_INV2016/VPH_AGUADV]</td></tr> ' '<tr><td><b>P_V_AGUADV</b></td><td>$[28_Manzanas_INV2016/P_V_AGUADV]</td></tr> ' '<tr><td><b>VPH_DRENAJ</b></td><td>$[28_Manzanas_INV2016/VPH_DRENAJ]</td></tr> ' '<tr><td><b>P_V_DRENAJ</b></td><td>$[28_Manzanas_INV2016/P_V_DRENAJ]</td></tr> ' '<tr><td><b>VPH_EXCUSA</b></td><td>$[28_Manzanas_INV2016/VPH_EXCUSA]</td></tr> ' '<tr><td><b>P_V_EXCUSA</b></td><td>$[28_Manzanas_INV2016/P_V_EXCUSA]</td></tr> ' '<tr><td><b>V_3MASOCUP</b></td><td>$[28_Manzanas_INV2016/V_3MASOCUP]</td></tr> ' '<tr><td><b>P_3MASOCUP</b></td><td>$[28_Manzanas_INV2016/P_3MASOCUP]</td></tr> ' '<tr><td><b>PROOCUP_C</b></td><td>$[28_Manzanas_INV2016/PROOCUP_C]</td></tr> ' '<tr><td><b>POBTOT</b></td><td>$[28_Manzanas_INV2016/POBTOT]</td></tr> ' '<tr><td><b>P0A14A</b></td><td>$[28_Manzanas_INV2016/P0A14A]</td></tr> ' '<tr><td><b>PP0A14A</b></td><td>$[28_Manzanas_INV2016/PP0A14A]</td></tr> ' '<tr><td><b>P15A29A</b></td><td>$[28_Manzanas_INV2016/P15A29A]</td></tr> ' '<tr><td><b>PP15A29A</b></td><td>$[28_Manzanas_INV2016/PP15A29A]</td></tr> ' '<tr><td><b>P30A59A</b></td><td>$[28_Manzanas_INV2016/P30A59A]</td></tr> ' '<tr><td><b>PP30A59A</b></td><td>$[28_Manzanas_INV2016/PP30A59A]</td></tr> ' '<tr><td><b>P_60YMAS</b></td><td>$[28_Manzanas_INV2016/P_60YMAS]</td></tr> ' '<tr><td><b>PP_60YMAS</b></td><td>$[28_Manzanas_INV2016/PP_60YMAS]</td></tr> ' '<tr><td><b>PCON_LIM</b></td><td>$[28_Manzanas_INV2016/PCON_LIM]</td></tr> ' '<tr><td><b>PPCON_LIM</b></td><td>$[28_Manzanas_INV2016/PPCON_LIM]</td></tr> ' '<tr><td><b>GRAPROES</b></td><td>$[28_Manzanas_INV2016/GRAPROES]</td></tr> ' '<tr><td><b>ACESOPER_</b></td><td>$[28_Manzanas_INV2016/ACESOPER_]</td></tr> ' '<tr><td><b>ACESOAUT_</b></td><td>$[28_Manzanas_INV2016/ACESOAUT_]</td></tr> ' '<tr><td><b>RECUCALL_</b></td><td>$[28_Manzanas_INV2016/RECUCALL_]</td></tr> ' '<tr><td><b>SENALIZA_</b></td><td>$[28_Manzanas_INV2016/SENALIZA_]</td></tr> ' '<tr><td><b>ALUMPUB_</b></td><td>$[28_Manzanas_INV2016/ALUMPUB_]</td></tr> ' '<tr><td><b>TELPUB_</b></td><td>$[28_Manzanas_INV2016/TELPUB_]</td></tr> ' '<tr><td><b>BANQUETA_</b></td><td>$[28_Manzanas_INV2016/BANQUETA_]</td></tr> ' '<tr><td><b>GUARNICI_</b></td><td>$[28_Manzanas_INV2016/GUARNICI_]</td></tr> ' '<tr><td><b>ARBOLES_</b></td><td>$[28_Manzanas_INV2016/ARBOLES_]</td></tr> ' '<tr><td><b>RAMPAS_</b></td><td>$[28_Manzanas_INV2016/RAMPAS_]</td></tr> ' '<tr><td><b>PUESSEMI_</b></td><td>$[28_Manzanas_INV2016/PUESSEMI_]</td></tr> ' '<tr><td><b>PUESAMBU_</b></td><td>$[28_Manzanas_INV2016/PUESAMBU_]</td></tr> ' '<tr><td><b>ACESOPER_C</b></td><td>$[28_Manzanas_INV2016/ACESOPER_C]</td></tr> ' '<tr><td><b>ACESOAUT_C</b></td><td>$[28_Manzanas_INV2016/ACESOAUT_C]</td></tr> ' '<tr><td><b>RECUCALL_C</b></td><td>$[28_Manzanas_INV2016/RECUCALL_C]</td></tr> ' '<tr><td><b>SENALIZA_C</b></td><td>$[28_Manzanas_INV2016/SENALIZA_C]</td></tr> ' '<tr><td><b>ALUMPUB_C</b></td><td>$[28_Manzanas_INV2016/ALUMPUB_C]</td></tr> ' '<tr><td><b>TELPUB_C</b></td><td>$[28_Manzanas_INV2016/TELPUB_C]</td></tr> ' '<tr><td><b>BANQUETA_C</b></td><td>$[28_Manzanas_INV2016/BANQUETA_C]</td></tr> ' '<tr><td><b>GUARNICI_C</b></td><td>$[28_Manzanas_INV2016/GUARNICI_C]</td></tr> ' '<tr><td><b>ARBOLES_C</b></td><td>$[28_Manzanas_INV2016/ARBOLES_C]</td></tr> ' '<tr><td><b>RAMPAS_C</b></td><td>$[28_Manzanas_INV2016/RAMPAS_C]</td></tr> ' '<tr><td><b>PUESSEMI_C</b></td><td>$[28_Manzanas_INV2016/PUESSEMI_C]</td></tr> ' '<tr><td><b>PUESAMBU_C</b></td><td>$[28_Manzanas_INV2016/PUESAMBU_C]</td></tr> ' '<tr><td><b>ENT</b></td><td>$[28_Manzanas_INV2016/ENT]</td></tr> ' '<tr><td><b>NOM_ENT</b></td><td>$[28_Manzanas_INV2016/NOM_ENT]</td></tr> ' '<tr><td><b>MUN</b></td><td>$[28_Manzanas_INV2016/MUN]</td></tr> ' '<tr><td><b>NOM_MUN</b></td><td>$[28_Manzanas_INV2016/NOM_MUN]</td></tr> ' '<tr><td><b>LOC</b></td><td>$[28_Manzanas_INV2016/LOC]</td></tr> ' '<tr><td><b>NOM_LOC</b></td><td>$[28_Manzanas_INV2016/NOM_LOC]</td></tr> ' '<tr><td><b>AGEB</b></td><td>$[28_Manzanas_INV2016/AGEB]</td></tr> ' '<tr><td><b>MZA</b></td><td>$[28_Manzanas_INV2016/MZA]</td></tr> ' '<tr><td><b>FECHA_POLI</b></td><td>$[28_Manzanas_INV2016/FECHA_POLI]</td></tr> ' '<tr><td><b>FECHA_INF</b></td><td>$[28_Manzanas_INV2016/FECHA_INF]</td></tr> ' '<tr><td><b>FECHA_CEU</b></td><td>$[28_Manzanas_INV2016/FECHA_CEU]</td></tr> ' '<tr><td><b>OID</b></td><td>$[28_Manzanas_INV2016/OID]</td></tr> ' '</table> ' ), ),