Example #1
0
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>&Uuml;berh&ouml;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&uuml;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
Example #3
0
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'],
]
Example #4
0
     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"),
Example #5
0
    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
Example #6
0
    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
Example #7
0
    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('&amp;#10;','\\n'))
        return (output)
Example #8
0
    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)
Example #9
0
      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> '
        ),
      ),