Zum Hauptinhalt springen

Netzwerkverfolgung

Bitte beachten

Diese Dokumentation gilt nur für die neue Netzwerkverfolgung ab Version 24.2.194 und ist nicht abwärts kompatibel mit Versionen kleiner 24.2.194

Warnung

Start, Stop und End Feature müssen Tabellen der Topologie sein. Views können nicht verwendet werden.

Beispiel mit Benutzung des Standard Netzwerkverfolgungsdialoges und einer vorhandenen Vorlage.


//Achtung: die aufrufende Funktion muss "async" sein!!
public async void Test()
{

var api = this.Project.Application.ShowNetworkTracingDialog(); //Standard Dialog öffnen

//Auswählen eines vorhandenen Tracing Templates
//Diese muss im AppBuilder konfiguriert und dem Projekt zugewiesen sein.
//Wenn exists = false dann wurde das Template nicht gefunden und der Vorgang muss abgebrochen werden.
bool exists = api.SelectTracingTemplate("MyTemplate");

await api.SelectStartFeatureInMap(); //Wichtig, await!!
await api.SelectEndFeatureInMap();//Wichtig, await!!

//Wenn das Feature nicht aus der Karte kommen soll kann das Feature auch direkt per Code zugewiesen werden
//Die Tabelle des Features muss dazu aber im Template vorhanden sein.
//Ist die nicht der Fall wird das Feature nicht gesetzt!!
//api.SelectEndFeature(f);


api.ClearStopFeatures();
await api.SelectStopFeaturesFromMap();//Wichtig, await!!

await api.StartTracing();//Wichtig, await!!

}

Beispiel mit Benutzung des Standard Netzwerkverfolgungsdialoges und einer dynamisch erzeugten Vorlage.


//Achtung: die aufrufende Funktion muss "async" sein!!
public async void Test()
{

var api = this.Project.Application.ShowNetworkTracingDialog(); //Standard Dialog öffnen

Client.Networktracing.NetworkTracingTemplate template = new Networktracing.NetworkTracingTemplate();
template.Name = "Name"; //Anzeige Name
template.ConnectionName = "MY_DB";
template.TopologyName = "MY_TOPO";
template.FeatureClasses.Add("TABLE");

api.SelectTracingTemplate(template);

await api.SelectStartFeatureInMap();//Wichtig, await!!
await api.SelectEndFeatureInMap();//Wichtig, await!!


api.ClearStopFeatures();
await api.SelectStopFeaturesFromMap();//Wichtig, await!!

await api.StartTracing();//Wichtig, await!!


}

Beispiel ohne Nutzung den Standard Netzwerkverfolgungsdialoges


//Achtung: die aufrufende Funktion muss "async" sein!!
public async void Test()
{

DbSchemaDefinition schema = this.Project.Repository.GetDbSchema("MY_CONNECTION");

DbTopology topology = schema.Topologies["MY_TOPOLOGY"];

NetworkTracing tracing = new NetworkTracing(schema, topo);

tracing.UseCore = true; // false um das alte netzworktracing zu benutzten.

tracing.TracingDirection = NetworkFlow.Both;
tracing.TracingType = NetworkTracingType.ShortestPath;
tracing.ForceGraphRefresh = true;

//tracing.ExcludeStopFeaturesFromResult = true;
//tracing.Weighted = false; //True = shortest distance, False = path with the least amount of nodes


tracing.StartFeature = startFeature;
tracing.EndFeature = stopFeature; //Nur bei ShortestPath

//Add Stop Features (Optional)
//tracing.StopFeatures.Add(yourFeature);

//Add Stop Conditions
//tracing.StopConditions.Add("TABLE_NAME", "OPEN=1");

//Tracing starten
var result = await tracing.StartTracing(); //Muss mit await aufgerufen werden


//Achtung: StartTracing liefert maximal 20.000 Features zurück.

//Es kann sein das das Tracing Ergebniss Millionen von Featuren zurück liefert.
//Dann werden Millionen von Featuren als Ergebniss auf den Client übertragen.
//Dies kann den Client lahm legen da die Datenmengen die vom Server auf den Client übertragen werden müssen
//dann sehr gross werden und ggf auch ihren Hauptspeicher aufblassen und die Uebertragung dauert ggf sehr lange.

//TotalCount = Anzahl der gefundenen Features auf dem Server
//FeatureCount = Anzahl der bis jetzt übertragenen Features.

//Wenn nicht alle Features übertragen wurden weil es mehr als 20.000 sind
if (tracingResult.TotalCount > tracingResult.FeatureCount)
{
//Anwender warnen und fragen ob er das wirklich alles laden will!!
if (XYesNoBox.ShowDialog("{0} Features gefunden.\n{1} Features geladen.\n\nDas laden aller Feature kann lange dauern, den Hauptspeicher verbrauchen und ggf ihren Computer lahm legen\n\nWollen Sie wirklich alle laden?".Format(tracingResult.TotalCount, tracingResult.FeatureCount)))
{
//lade den rest der Daten
await tracingResult.LoadAllResults();
}
}

if (result.Succeeded)
{

foreach (var item in result.Items)
{
Feature attFeature = item.AttributFeature;
Feature geomFeature = item.GeometryFeature;
}


//tracingResult.GetFeatureList() //get all Features (Attribut Features)
//tracingResult.GetGeometryFeatureList(); //get all Geometry Features

//Get the Geometry of the shortest Path (combines all Line Features to one Linestring)
Mum.Geo.Geometry.LineString line = result.GetShortestPathGeometry();
}
else
{
XMsgBox.ShowExceptionDialog(result.ExceptionMessage);
}
}

Die Verfolgung zeigt immer ein Progress Fenster mit einem Abruch Knopf an. Der Endanwender kann den Vorgang damit jederzeit abbrechen.

Mit tracing.ShowProgressWindow = false kann dies auch ausgeschalten werden was jedoch keine gute Idee ist.

result.Canceled liefert "true" wenn der Anwender den Abbruch Knopf gedrückt hat oder wenn nicht alle Ergebnisse übertragen wurden.

Ergebniss

    foreach (var item in result.Items)
{
Feature attFeature = item.AttributFeature;
Feature geomFeature = item.GeometryFeature;
}
//tracingResult.GetFeatureList() //get all Features (Attribut Features)
//tracingResult.GetGeometryFeatureList(); //get all Geometry Features

"result.Items" liefert für jedes Ergebnis die Attribut und Geometrie FID und Tabelle zurück. Bei nicht Utility Modellen steht bei Attribut und Geometrie das gleiche.

Beachten Sie das ein Utility Attribut Feature ggf mehrerer Geometrien haben kann. Bei "result.Items" kommen immer nur die Geometrie des Attribut Features zurück die auch von der Verfolgung betroffen ist.
D.h. ein Attributfeature kann hier ggf mehrfach erscheinen.

tracingResult.GetFeatureList() liefert alle Feature zurück, im Falle von Utility Featuren stehen hier die Attribut Feature

tracingResult.GetGeometryFeatureList() liefert alle Geometrie Feature zurück

Ergebnis gruppiert nach Featuregruppen

"result.FeatureGroups" liefert das Ergebnis gruppiert nach Feature Tabellen.
Bei Utility Featuren sind dies dies die Attribut Feature!
Die kann z.B. genutzt werden wenn mittels des Ergebnisses ein Generic Dialog geöffnet werden soll.


foreach (FeatureGroup group in result.FeatureGroups)
{

//Beispiel zum öffnen eine Dialoges und Filtern der Ergebniss Feature
project.Forms.ShowForm(group.Table.Connection, group.Table.Name, group.Filter);

}

//Wenn die Featureklasse bekannt ist kann auch die Gruppe geholt werden
FeatureGroup myGroup = result.FeatureGroups.GetFeatureGroup("MY_TABLE");
project.Forms.ShowForm(group.Table.Connection, "MY_TABLE", myGroup.Filter);

Ergebnis als Feature Container zurückliefern

Ein Feature Container fasst ein Feature und seine Geometrie Feature zusammen.

result.GetFeatures() - alle Feature als Feature Container zurückliefern result.FeatureGroups - Alle Feature als Feature Container gruppiert nach Tabelle

Beachten Sie das beim Uitility Modellen bei Feature Container die gesammte Geometrie des Feature enthalten ist und nicht nur der Teil der Geometrie der in der Netzwerkverfolgung gefunden wurde.

result.GeometryFeatureGroups - alle Geometrien als Feature Container groupiert nach Tabelle

Ich habe Probleme

Sind Sie sicher das Sie eine Version grösser 24.2.192 installiert haben?