Netzwerkverfolgung
Diese Dokumentation gilt nur für die neue Netzwerkverfolgung ab Version 24.2.40 und ist nicht abwärts kompatibel mit Versionen kleiner 24.2.40
Die Netzwerkverfolgung kann sich bis zum offizellen Release von 24.2. noch jederzeit ändern.
Start, Stop und End Feature müssen in Tabellen/Views der Topologie sein.
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 dynmaisch 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
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)
{
// result.FeatureGroups liefert das Ergebnis gruppiert nach Feature Tabellen
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);
//Oder die einzelnen Feature der Tabelle zurückgeben.
foreach (FeatureContainer featureContainer in group.GetFeatures())
{
//featureContainer.Feature //Das Attribut Feature oder Geometrie Feature
//featureContainer.GeometryFeature //Das Geometry Feature
//featureContainer.Geometry //Die Geometrie
//Wenn es nicht ein ein Utility oder Label Feature ist,
//dann ist .Feature und .GeometryFeature das gleiche.
//Bei Utility, Label featuren etc sind diese verschieden.
}
}
//Wahlweise kann man alle Ergebnis Feature un gruppiert zurueck liefern
foreach (FeatureContainer featureContainer in result.GetFeatures())
{
}
//Wenn die Faetureklasse bekannt ist kann auch die Gruppe geholt werden
FeatureGroup myGroup = result.FeatureGroups.GetFeatureGroup("MY_TABLE");
//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.
Ab Version 24.2.146 / 25.1.17
Bei Utility Modellen hat ein Feature eine separate Geometrie Tabelle. Dafür wurden nun folgende erweitere Funktion zur Verfügung gestellt.
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.result.GeometryFeatureGroups
liefert alle Geometrien gruppiert nach Tabellen zurückresult.GetGeometryFeatures
liefert alle Geometrie Feature zurückresult.FeatureGroups
Diese bereits vorhandene Funktion liefert immer die Attribut Tabelle zurück. Handelt es sich um keine Utility Feature dann ist dies auch gleichzeitig die Geometrie Tabelle.