docs: def validate(self, fixerrors=True):
          """
          Validates that the geometry is correctly formatted according to the geometry type. 
  
          Parameters:
  
          - **fixerrors** (optional): Attempts to fix minor errors without raising exceptions (defaults to True)
  
          Returns:
          
          - True if the geometry is valid.
  
          Raises:
  
          - An Exception if not valid. 
          """
  
          # validate nullgeometry or has type and coordinates keys
          if not self._data:
              # null geometry, no further checking needed
              return True
          elif "type" not in self._data or "coordinates" not in self._data:
              raise Exception("A geometry dictionary or instance must have the type and coordinates entries")
          
          # first validate geometry type
          if not self.type in ("Point","MultiPoint","LineString","MultiLineString","Polygon","MultiPolygon"):
              if fixerrors:
                  coretype = self.type.lower().replace("multi","")
                  if coretype == "point":
                      newtype = "Point"
                  elif coretype == "linestring":
                      newtype = "LineString"
                  elif coretype == "polygon":
                      newtype = "Polygon"
                  else:
                      raise Exception('Invalid geometry type. Must be one of: "Point","MultiPoint","LineString","MultiLineString","Polygon","MultiPolygon"')
                  
                  if self.type.lower().startswith("multi"):
                      newtype = "Multi" + newtype
                      
                  self.type = newtype
              else:
                  raise Exception('Invalid geometry type. Must be one of: "Point","MultiPoint","LineString","MultiLineString","Polygon","MultiPolygon"')
  
          # then validate coordinate data type
          coords = self._data["coordinates"]
          if not isinstance(coords, (list,tuple)): raise Exception("Coordinates must be a list or tuple type")
  
          # then validate coordinate structures
          if self.type == "Point":
              if not len(coords) == 2: raise Exception("Point must be one coordinate pair")
          elif self.type in ("MultiPoint","LineString"):
              if not len(coords) > 1: raise Exception("MultiPoint and LineString must have more than one coordinates")
          elif self.type == "MultiLineString":
              for line in coords:
                  if not len(line) > 1: raise Exception("All LineStrings in a MultiLineString must have more than one coordinate")
          elif self.type == "Polygon":
              for exterior_or_holes in coords:
                  if not len(exterior_or_holes) >= 3: raise Exception("The exterior and all holes in a Polygon must have at least 3 coordinates")
          elif self.type == "MultiPolygon":
              for eachmulti in coords:
                  for exterior_or_holes in eachmulti:
                      if not len(exterior_or_holes) >= 3: raise Exception("The exterior and all holes in all Polygons of a MultiPolygon must have at least 3 coordinates")
  
          # validation successful
          return True