code: def path_to_geom_dicts(path, skip_invalid=True):
      
      interface = path.interface.datatype
      if interface == 'geodataframe':
          return [row.to_dict() for _, row in path.data.iterrows()]
      elif interface == 'geom_dictionary':
          return path.data
  
      geoms = []
      invalid = False
      xdim, ydim = path.kdims
      for i, path in enumerate(path.split(datatype='columns')):
          array = np.column_stack([path.pop(xdim.name), path.pop(ydim.name)])
          splits = np.where(np.isnan(array[:, :2].astype('float')).sum(axis=1))[0]
          arrays = np.split(array, splits+1) if len(splits) else [array]
          subpaths = []
          for j, arr in enumerate(arrays):
              if j != (len(arrays)-1):
                  arr = arr[:-1] # Drop nan
  
              if len(arr) == 0:
                  continue
              elif len(arr) == 1:
                  if skip_invalid:
                      continue
                  g = Point(arr[0])
                  invalid = True
              else:
                  g = LineString(arr)
              subpaths.append(g)
  
          if invalid:
              geoms += [dict(path, geometry=sp) for sp in subpaths]
              continue
          elif len(subpaths) == 1:
              geom = subpaths[0]
          elif subpaths:
              geom = MultiLineString(subpaths)
          path['geometry'] = geom
          geoms.append(path)
      return geoms
docs: Converts a Path element into a list of geometry dictionaries,
      preserving all value dimensions.