ArcGIS Pro 3.7 API Reference Guide
ArcGIS.Core.Data.Knowledge.Analytics Namespace / PathsEntitiesAndRelationships Class / PathsOriginEntitiesUIDsIndexes Property
Example

In This Topic
    PathsOriginEntitiesUIDsIndexes Property
    In This Topic
    Gets the indexes (into EntitiesUIDs) of paths origin entities.
    Syntax
    Public ReadOnly Property PathsOriginEntitiesUIDsIndexes As ULong()
    public ulong[] PathsOriginEntitiesUIDsIndexes {get;}
    Example
    List out FFP Results Origin, Destination, Other Entities
    {
      //using ArcGIS.Core.Data.Knowledge.Extensions;
    
      await QueuedTask.Run(async () =>
      {
        var ffp_config = new CIMFilteredFindPathsConfiguration();
        ffp_config.Name = "List out FFP Results Origin, Destination, Other Entities";
        //set up config
        //...
    
        var results = kg.RunFilteredFindPaths(ffp_config);
    
        if (results.CountPaths == 0)
        {
          System.Diagnostics.Debug.WriteLine("FFP returned no paths");
          return;
        }
    
        //print out paths by increasing length, min cost, max cost
        var path_by_len_indices = (IEnumerable<long>)results.PathIndicesOrderedByIncreasingPathLength
                                    .Select(idx => idx.index);
        var path_by_min_cost = (IEnumerable<long>)results.PathIndicesOrderedByIncreasingMinPathCost
                                    .Select(idx => idx.index);
        var path_by_max_cost = (IEnumerable<long>)results.PathIndicesOrderedByIncreasingMaxPathCost
                                    .Select(idx => idx.index);
    
        var x = 0;
        StringBuilder sb = new StringBuilder();
    
        foreach (var path_indeces in new List<IEnumerable<long>> {
        path_by_len_indices,
        path_by_min_cost,
        path_by_max_cost})
        {
          if (x == 0)
            sb.AppendLine($"Entities by length: {path_by_len_indices.Count()}");
          else if (x == 1)
            sb.AppendLine($"Entities by min cost: {path_by_min_cost.Count()}");
          else if (x == 2)
            sb.AppendLine($"Entities by max cost: {path_by_max_cost.Count()}");
          x++;
          foreach (var path_idx in path_indeces)
          {
            var path = (ResultPath)results.MaterializePath(path_idx);
            sb.AppendLine(
              $"Path[{path_idx}] length: {path.Length}, min: {path.MinCost} max: {path.MaxCost}");
    
            var sorted_set = new SortedSet<ulong>();
            sorted_set.Add((ulong)path_idx);
            var per = results.ExtractPathsEntitiesAndRelationships(sorted_set);
    
            var origin_dest_uids = new List<string>();
            var sep = "";
    
            sb.Append(" Origin EntitiesUIDs: ");
            foreach (var idx in per.PathsOriginEntitiesUIDsIndexes)
            {
              //See 'List out FFP Results by Path Length, Min Cost, Max Cost' for
              //FormatID method above
              var uid = FormatID(per.EntitiesUIDs[idx].ToString());
              origin_dest_uids.Add(uid);
    
              var origin =
                $"{sep}{per.EntityTypeNames[per.EntityTypes[idx]]}:{uid}";
              sep = ", ";
              sb.Append($"{origin}");
            }
            sb.AppendLine("");
    
            sep = "";
            sb.Append(" Destination EntitiesUIDs: ");
            foreach (var idx in per.PathsDestinationEntitiesUIDsIndexes)
            {
              var uid = FormatID(per.EntitiesUIDs[idx].ToString());
              origin_dest_uids.Add(uid);
    
              var dest =
                $"{sep}{per.EntityTypeNames[per.EntityTypes[idx]]}:{uid}";
              sep = ", ";
              sb.Append($"{dest}");
            }
            sb.AppendLine("");
    
            sep = "";
            var idx2 = 0;
            sb.Append(" Other EntitiesUIDs: ");
            bool wereAnyOthers = false;
            foreach (var raw_uid in per.EntitiesUIDs)
            {
              var uid = FormatID(raw_uid.ToString());
              if (!origin_dest_uids.Contains(uid))
              {
                var other =
                $"{sep}{per.EntityTypeNames[per.EntityTypes[idx2]]}:{uid}";
                sep = ", ";
                sb.Append($"{other}");
                wereAnyOthers = true;
              }
              idx2++;
            }
            if (!wereAnyOthers)
              sb.Append(" <<none>>");
    
            //sb.AppendLine("");
    
            var entity_str = sb.ToString();
            System.Diagnostics.Debug.WriteLine(entity_str);
    
            sb.Clear();
            sep = "";
          }
        }
    
      });
    }
    Requirements

    Target Platforms: Windows 11 Home, Pro, Enterprise (64 bit)

    ArcGIS Pro version: 3.6 or higher.
    See Also