Convert an unknown data input into a geojson dictionary.

def process_data(self, data):
        """Convert an unknown data input into a geojson dictionary."""
        if isinstance(data, dict):
            self.embed = True
            return data
        elif isinstance(data, str):
            if data.lower().startswith(('http:', 'ftp:', 'https:')):
                if not self.embed:
                    self.embed_link = data
                return requests.get(data).json()
            elif data.lstrip()[0] in '[{':  # This is a GeoJSON inline string
                self.embed = True
                return json.loads(data)
            else:  # This is a filename
                if not self.embed:
                    self.embed_link = data
                with open(data) as f:
                    return json.loads(f.read())
        elif hasattr(data, '__geo_interface__'):
            self.embed = True
            if hasattr(data, 'to_crs'):
                data = data.to_crs(epsg='4326')
            return json.loads(json.dumps(data.__geo_interface__))
        else:
            raise ValueError('Cannot render objects with any missing geometries'
                             ': {!r}'.format(data))