//using ArcGIS.Core.Data.Knowledge.Extensions;
await QueuedTask.Run(() =>
{
//use defaults...
var kg_config = new CIMKnowledgeGraphCentralityConfiguration();
//include all entities from the kg in the subgraph
//(no filters)
var kg_subgraph = new CIMKnowledgeGraphSubGraph();
//include all centrality measures
CentralityMeasure[] measures = [
CentralityMeasure.Degree,
CentralityMeasure.InDegree,
CentralityMeasure.OutDegree,
CentralityMeasure.Coreness,
CentralityMeasure.Betweenness,
CentralityMeasure.Closeness,
CentralityMeasure.Harmonic,
CentralityMeasure.Eigenvector,
CentralityMeasure.PageRank
];
//compute centrality
var kg_centrality_results = kg.ComputeCentrality(
kg_config, kg_subgraph, measures);
//output results - results include measure scores for all entities
//in all types in the subgraph
System.Diagnostics.Debug.WriteLine("Centrality Results:");
foreach (var named_type in kg_centrality_results.NamedTypes)
{
System.Diagnostics.Debug.WriteLine($"Named type: {named_type}");
foreach (var uid in kg_centrality_results.GetUidsForNamedType(named_type))
{
//measure scores include one score per measure in the input measures array
var scores = kg_centrality_results.Scores[uid];
StringBuilder sb = new StringBuilder();
var sep = "";
//or use kg_centrality_results.Scores.Measures.Length
//kg_centrality_results.Scores.Measures is there for convenience
for (int m = 0; m < measures.Length; m++)
{
sb.Append($"{sep}{measures[m].ToString()}: {scores[m]}");
sep = ", ";
}
System.Diagnostics.Debug.WriteLine($" '{uid}' {sb.ToString()}");
}
}
});