'Render a single tile, return a SaveableResponse instance.'

def renderTile(self, width, height, srs, coord):

    (minx, miny, maxx, maxy) = self.layer.envelope(coord)
    y = (miny + ((maxy - miny) / 2))
    x = (minx + ((maxx - minx) / 2))
    (sw_lat, sw_lon) = self.unproject(minx, miny)
    (ne_lat, ne_lon) = self.unproject(maxx, maxy)
    (center_lat, center_lon) = self.unproject(x, y)
    bbox = ('%s:[%s    TO    %s]    AND    %s:[%s    TO    %s]' % (self.lon_field, sw_lon, ne_lon, self.lat_field, sw_lat, ne_lat))
    query = bbox
    if self.solr_radius:
        query = ('{!%s    lat=%s    long=%s    radius=%s    calc=arc    unit=km}%s' % (self.query_parser, center_lat, center_lon, self.solr_radius, bbox))
    kwargs = {}
    if (self.query != '*:*'):
        kwargs['fq'] = self.query
    kwargs['omitHeader'] = 'true'
    rsp_fields = []
    if self.solr_fields:
        rsp_fields = self.solr_fields.split(',')
        if (not (self.lat_field in rsp_fields)):
            rsp_fields.append(self.lat_field)
        if (not (self.lon_field in rsp_fields)):
            rsp_fields.append(self.lon_field)
        kwargs['fl'] = ','.join(rsp_fields)
    response = {'type': 'FeatureCollection', 'features': []}
    total = None
    start = 0
    rows = 1000
    while ((not total) or (start < total)):
        kwargs['start'] = start
        kwargs['rows'] = rows
        rsp = self.solr.search(query, **kwargs)
        if (not total):
            total = rsp.hits
        if (total == 0):
            break
        for row in rsp:
            if len(rsp_fields):
                for (key, ignore) in row.items():
                    if (not (key in rsp_fields)):
                        del row[key]
            row['geometry'] = {'type': 'Point', 'coordinates': (row[self.lon_field], row[self.lat_field])}
            del row[self.lat_field]
            del row[self.lon_field]
            if (self.id_field != ''):
                row['id'] = row[self.id_field]
            response['features'].append(row)
        start += rows
    return SaveableResponse(response)
