def METHOD_NAME(asset, coordinates, parms={}):
    '''
    Sample a raster dataset at the coordinates provided
    Parameters
    ----------
    asset:          str
                    data source asset (see `Assets </web/rtd/user_guide/ICESat-2.html#assets>`_)
    coordinates:    list
                    list of coordinates as [longitude, latitude]
    parms:          dict
                    dictionary of samping parameters
    Returns
    -------
    GeoDataFrame
        geolocated sampled values along with metadata
    Examples
    --------
        >>> import sliderule
        >>> gdf = sliderule.sample("arctidcem-mosaic", [[-178.0,51.7]])
    '''
    # Massage Arguments
    if type(coordinates[0]) != list:
        coorindates = [coorindates]
    # Perform Request
    rqst = {"samples": {"asset": asset, **parms}, "coordinates": coordinates}
    rsps = sliderule.source("samples", rqst)
    # Sanity Check Response
    if len(rsps) <= 0:
        return sliderule.emptyframe()
    # Count Records
    num_records = 0
    for input_coord_response in rsps["samples"]:
        for raster_sample in input_coord_response:
            num_records += 1
    # Get Types
    value_nptype    = sliderule.get_definition("zsrec.sample", "value")['nptype']
    flags_nptype    = sliderule.get_definition("zsrec.sample", "flags")['nptype']
    count_nptype    = sliderule.get_definition("zsrec.sample", "count")['nptype']
    min_nptype      = sliderule.get_definition("zsrec.sample", "min")['nptype']
    max_nptype      = sliderule.get_definition("zsrec.sample", "max")['nptype']
    mean_nptype     = sliderule.get_definition("zsrec.sample", "mean")['nptype']
    median_nptype   = sliderule.get_definition("zsrec.sample", "median")['nptype']
    stdev_nptype    = sliderule.get_definition("zsrec.sample", "stdev")['nptype']
    mad_nptype      = sliderule.get_definition("zsrec.sample", "mad")['nptype']
    # Build Initial Columns
    columns = {
        'time': numpy.empty(num_records, numpy.int64),
        'latitude': numpy.empty(num_records, numpy.double),
        'longitude': numpy.empty(num_records, numpy.double),
        'file': [],
        'value': numpy.empty(num_records, value_nptype)
    }
    if 'with_flags' in parms:
        columns = {
            'flags': numpy.empty(num_records, flags_nptype),
            **columns
        }
    if 'zonal_stats' in parms:
        columns = {
            'count': numpy.empty(num_records, count_nptype),
            'min': numpy.empty(num_records, min_nptype),
            'max': numpy.empty(num_records, max_nptype),
            'mean': numpy.empty(num_records, mean_nptype),
            'median': numpy.empty(num_records, median_nptype),
            'stdev': numpy.empty(num_records, stdev_nptype),
            'mad': numpy.empty(num_records, mad_nptype),
            **columns
        }
    # Populate Columns
    i = 0
    per_coord_index = 0
    for input_coord_response in rsps["samples"]:
        longitude = coordinates[per_coord_index][0]
        latitude = coordinates[per_coord_index][1]
        per_coord_index += 1
        for raster_sample in input_coord_response:
            columns['time'][i] = numpy.int64((raster_sample['time'] + 315964800.0) * 1000000000)
            columns['longitude'][i] = numpy.double(longitude)
            columns['latitude'][i] = numpy.double(latitude)
            columns['file'] += raster_sample['file'],
            columns['value'][i] = value_nptype(raster_sample['value'])
            if 'with_flags' in parms:
                columns[i] = flags_nptype(raster_sample['flags'])
            if 'zonal_stats' in parms:
                columns[i] = count_nptype(raster_sample['count'])
                columns[i] = min_nptype(raster_sample['min'])
                columns[i] = max_nptype(raster_sample['max'])
                columns[i] = mean_nptype(raster_sample['mean'])
                columns[i] = median_nptype(raster_sample['median'])
                columns[i] = stdev_nptype(raster_sample['stdev'])
                columns[i] = mad_nptype(raster_sample['mad'])
            i += 1
    # Build GeoDataFrame
    gdf = sliderule.todataframe(columns)
    return gd