code: def read_geojson(cls, path_or_json_or_string):
          
          assert path_or_json_or_string
          data = None
          if isinstance(path_or_json_or_string, (dict, list)):
              data = path_or_json_or_string
          try:
              data = json.loads(path_or_json_or_string)
          except ValueError:
              pass
          try:
              path = path_or_json_or_string
              if path.endswith('.gz') or path.endswith('.gzip'):
                  import gzip
                  contents = gzip.open(path, 'r').read().decode('utf-8')
              else:
                  contents = open(path, 'r').read()
              data = json.loads(contents)
          except FileNotFoundError:
              pass
          # TODO web address
          assert data, 'MapData accepts a valid geoJSON object, geoJSON string, or path to a geoJSON file'
          return cls(cls._read_geojson_features(data))
docs: Read a geoJSON string, object, or file. Return a dict of features keyed by ID.