<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def tilequery( self, map_id, lon=None, lat=None, radius=None, limit=None, dedupe=None, geometry=None, layers=None, ):
 """Returns data about specific features from a vector tileset. Parameters map_id : str or list The tileset's unique identifier in the format username.id. map_id may be either a str with one value or a list with multiple values. lon : float The longitude to query, where -180 is the minimum value and 180 is the maximum value. lat : float The latitude to query, where -85.0511 is the minimum value and 85.0511 is the maximum value. radius : int, optional The approximate distance in meters to query, where 0 is the minimum value. (There is no maximum value.) If None, the default value is 0. limit : int, optional The number of features to return, where 1 is the minimum value and 50 is the maximum value. If None, the default value is 5. dedupe : bool, optional Whether to remove duplicate results. If None, the default value is True. geometry : str, optional The geometry type to query. layers : list, optional The list of layers to query. If a specified layer does not exist, then the Tilequery API will skip it. If no layers exist, then the API will return an empty GeoJSON FeatureCollection. Returns ------- request.Response The response object with a GeoJSON FeatureCollection of features at or near the specified longitude and latitude. """


        # If map_id is a list, then convert it to a str
        # of comma-separated values.

        if isinstance(map_id, list):
            map_id = ",".join(map_id)

        # Validate lon and lat.

        lon = self._validate_lon(lon)
        lat = self._validate_lat(lat)

        # Create dict to assist in building URI resource path.

        path_values = dict(
            api_name=self.api_name, lon=lon, lat=lat
        )

        # Build URI resource path.

        path_part = "/" + map_id + "/{api_name}/{lon},{lat}.json"
        uri = URITemplate(self.base_uri + path_part).expand(**path_values)

        # Build URI query_parameters.

        query_parameters = dict()

        if radius is not None:
            radius = self._validate_radius(radius)
            query_parameters["radius"] = radius

        if limit is not None:
            limit = self._validate_limit(limit)
            query_parameters["limit"] = limit

        if dedupe is not None:
            query_parameters["dedupe"] = "true" if True else "false"

        if geometry is not None:
            geometry = self._validate_geometry(geometry)
            query_parameters["geometry"] = geometry

        if layers is not None:
            query_parameters["layers"] = ",".join(layers)

        # Send HTTP GET request.

        response = self.session.get(uri, params=query_parameters)
        self.handle_http_error(response)

        # To be consistent with other services,
        # add geojson method to response object.

        def geojson():
            return response.json()

        response.geojson = geojson

        return response