@access.public
    @describeRoute(
        Description('Search for an item by geospatial data.')
        .param('q', 'Search query as a JSON object.', required=True)
        .param('limit', 'Result set size limit (default=50).', required=False,
               dataType='integer')
        .param('offset', 'Offset into result set (default=0).', required=False,
               dataType='integer')
        .errorResponse()
    )
    def find(self, params):
        """
        Search for an item by geospatial data.

        :param params: parameters to the API call, including 'q'.
        :type params: dict[str, unknown]
        :returns: filtered fields of the matching items with geospatial data
                 appended to the 'geo' field of each item.
        :rtype: list[dict[str, unknown]]
        :raise RestException: on malformed API call.
        """
        self.requireParams(('q',), params)

        try:
            query = bson.json_util.loads(params['q'])
        except __HOLE__:
            raise RestException("Invalid JSON passed as 'q' parameter.")

        limit, offset, sort = self.getPagingParameters(params, 'lowerName')

        return self._find(query, limit, offset, sort)
dataset/ETHPy150Open girder/girder/plugins/geospatial/server/geospatial.py/GeospatialItem.find