Mehr

ArcObjects .NET – Schließen/Freigeben von FeatureClass, Workspace, Factory


Ich habe einen langwierigen Prozess. Ich möchte Ressourcenlecks oder nicht autorisierte Datenbankverbindungen verhindern.

In Abständen während des Prozesses möchte ich dies tun:

  1. Holen Sie sich eine ArcSDE (Oracle) Workspace Factory
  2. öffne einen Arbeitsbereich ab Werk (an diesem Punkt erhalte ich eine offene Datenbankverbindung)
  3. Abrufen einer vorhandenen Feature-Class oder Tabelle im Workspace,
  4. Abfrage der Feature-Class oder Tabelle, Schleife über den Cursor, um mein Geschäft zu erledigen
  5. dann alles loslassen/schließen, so dass:

    • Die Datenbankverbindung und die Tabellensperre aus ArcSDE/Oracle-Perspektive (wie durch etwas wie "sdemon -o info -I users" oder eine Abfrage der Tabelle sde.table_locks offenbart) wird geschlossen/freigegeben.
    • der Prozess ist resistent gegen ArcSDE/Oracle-Neustarts (d. h. ich lasse nichts hängen, was später nach dem nächtlichen Neustart nicht funktioniert)
    • Alle RCW-, COM-Referenzen und Speicher werden freigegeben.

Grundsätzlich ist aufgrund der Langfristigkeit des Prozesses Ich möchte wirklich sicher sein, dass ich keine Ressourcenlecks oder Rogue-Verbindungen habe und mein Prozess ArcSDE/Oracle-Neustarts überstehen kann.

Ich habe Diskussionen gesehen wie:

Und das, aus dem ich zitiere

Jede Workspace-Factory verwaltet einen Pool aktuell verbundener, aktiver Workspaces, auf die von der Anwendung verwiesen wird. Wenn eine der zuvor aufgelisteten Open*-Methoden aufgerufen wird, überprüft die Workspace-Factory, ob zuvor ein Workspace mit einem übereinstimmenden Satz von Eigenschaften geöffnet wurde. Wenn dies der Fall ist, wird ein Verweis auf die vorhandene Instanz zurückgegeben.

All das legt mir nahe, dass ich sollte release (z. B. ComReleaser-Klasse oder äquivalente Marshal.ReleaseComObject()-Schleife), wahrscheinlich in dieser Reihenfolge:

  • Mauszeiger
  • Featureclass/Tabelle
  • Arbeitsplatz
  • Arbeitsplatz Fabrik

Dann gibt es Diskussionen wie diese, in denen die Leute all das tun und vielleicht sogar System.GC.Collect() einstreuen und ihre Datenbankverbindung immer noch lebt.

Oh Gurus, was ist die letzte reine Dope dazu?


Sie haben in Ihrem Beitrag bereits viele Aspekte behandelt. Um Ihre Frage zu erweitern, folgen Sie jedoch immer diesem Muster:

if (obj!=null) ESRI.ArcGIS.ADF.ComReleaser.ReleaseCOMObject(obj); obj = null;

Dann ruf anSystem.GC.Collect()um den Garbage Collector zu zwingen, alle Verweise auf das DBMS zu entfernen.

Die Veröffentlichungsreihenfolge muss Cursors, Features (IFeature), FeatureClasses, Workspaces und andere instanziierte ArcObjects sein.

ArcGIS Desktop und ArcEngine-Anwendung sind STA (Single-Threaded-Anwendung). Es ist weder sicher noch ratsam, ArcObjects threadübergreifend (Worker) zu verwenden; Um dies zu erreichen, kann man die Serialisierung und Deserialisierung von Objekten verwenden. Weitere Details finden Sie hier.


Abrufen der COM-Klassenfactory für eine Komponente mit CLSID fehlgeschlagen aufgrund des folgenden Fehlers: 80040154

Ich habe einen Windows-Dienst mit C#.NET entwickelt, um einen PDF-Bericht zu generieren. Um eine PDF-Datei zu generieren, verwende ich eine DLL eines Drittanbieters. Die Anwendung läuft auf meiner Windows XP-Plattform. Als ich den Dienst in der 64-Bit-Version von Windows Server 2008 bereitgestellt habe, habe ich diesen Fehler erhalten:

Das Abrufen der COM-Klassenfactory für die Komponente mit der CLSID <46521B1F-0A5B-4871-A4C2-FD5C9276F4C6> ist aufgrund des folgenden Fehlers fehlgeschlagen: 80040154.

Ich habe die DLL mit dem Befehl regsvr32 registriert. Ich kann diese CLSID in der Registrierung sehen. Aber das Problem besteht weiterhin.

Was könnte das Problem sein?


ArcObjects .NET – Schließen/Freigeben von FeatureClass, Workspace, Factory – Geografische Informationssysteme

ArcObject .Net mit VS 2013

Bitte nehmen Sie dieses Repository als Notiz, um Sie durch das AO-Setup, Debugging und die Entwicklung zu führen.

Lektion 1: Umgebung einrichten und Debuggen

OK, starten wir unser erstes AO-Projekt in VS2013! In der Menüleiste: DATEI -> Neues Projekt, dann öffnen Sie die Baumstruktur im linken Bereich des sich öffnenden Dialogfelds, suchen Sie nach Visual C# -> ArcGIS -> Desktop-Add-Ins -> ArcMap-Add-In.

Stellen Sie im ArGIS Add-Ins Wizard sicher, dass die Option "Button" unter Add-In-Typen aktiviert ist. Dadurch wird eine Vorlage eines Schaltflächensteuerelements für ArcMap erstellt. Sie sollten eine cs-Datei mit dem Namen "Button1.cs" finden können. Bitte ersetzen Sie diese Datei durch das an hier. Bevor wir das Schaltflächen-Steuerelement erstellen, öffnen Sie den Soultion Explorer Ihres VS 2013, klicken Sie mit der rechten Maustaste auf den Projektnamen und wählen Sie Eigenschaften. Doppelcheck 2 Plätze:

  1. Das Zielframework im Anwendungsabschnitt sollte ".NET Framework 4" sein.
  2. Stellen Sie im Abschnitt Debug sicher, dass "Externes Programm starten" als Ihr ArcMap-Programm festgelegt ist

Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Referenzen und wählen Sie "ArcGIS-Referenzen hinzufügen". Wir benötigen die folgenden zwei Referenzen, um diese Lösung zu erstellen. Sie sind in dieser Standardvorlage nicht enthalten:

Jetzt können Sie die Lösung erstellen! Bevor Sie dies tun, müssen wir auf ArcMap-Seite noch einige Reinigungsarbeiten erledigen. Wechseln Sie zu Ihrem ArcMap-Installationsordner, normalerweise befindet er sich unter: C:Program Files (x86)ArcGISDesktop10.3in, suchen Sie eine Datei namens "ArcMap.exe.config". Öffnen Sie es mit Administratorrechten. Es ist eine XML-Datei und durchsuchen Sie den folgenden Abschnitt am Anfang der Datei:

ArcMap ist standardmäßig für die Ausführung mit .Net Framework Runtime 2.0 konfiguriert, was einen Konflikt mit dem Schaltflächensteuerelement darstellt, das wir in VS 2013 erstellen werden. Kommentieren Sie diese Zeile aus und entkommentieren Sie die obige Zeile, um .Net Framework Runtime 4.0 für ArcMap zu aktivieren . OK, jetzt sollten Sie es ohne Probleme erstellen können. Um sicherzustellen, dass wir für den folgenden Abschnitt auf der gleichen Seite sind, überprüfen Sie bitte Ihre Datei "config.esriaddinx". Sie finden diese Datei im Projektmappen-Explorer. Folgendes habe ich (ich habe nicht verwandte Abschnitte entfernt)

Es gibt uns eine gute Zusammenfassung des Tools, das wir gerade erstellt haben. Sein Name ist "ArcMapAddin1" und sein Ziel ist ArcMap 10.3, das mit .Net Framework Common Lauguage Runtime 4.0 ausgeführt wird. Dieses Schaltflächen-Steuerelement erhielt die Überschrift "Meine Schaltfläche" und wurde unter "Add-In-Steuerelemente" kategorisiert. Behalte diese im Hinterkopf, du wirst sie später brauchen.

Wenn wir in VS2013 auf die Schaltfläche "Start" mit grünem Pfeil klicken, sollten Sie sehen, dass ArcMap gestartet wird. VS2013 wird alle schmutzigen Jobs für uns erledigen: ArcMap 10.3 aufrufen und den Debugger an seinen Prozess anhängen, alle erforderlichen Symbole aus verschiedenen Assemblys laden, um das Debuggen zu erleichtern. Wir sind dann bereit zu debuggen!

Sie können in Button1.cs einen Haltepunkt in jede Quellzeile setzen, aber es passiert nichts, oder? Dies liegt daran, dass dieses Steuerelement eine UI-Komponente ist und erfordert, dass der Benutzer darauf klickt, um eine Aktion aufzurufen. Wo ist unser Button? Es ist nicht auf der Benutzeroberfläche! Nun, es ist wirklich unpraktisch und ESRI kann einen besseren Job machen, indem es die Schaltfläche während des Debuggens automatisch zur Symbolleiste hinzufügt.

Wie auch immer, wir müssen dies manuell tun. Sie müssen zu Anpassen -> Add-In Manager gehen, Sie sollten unsere Schaltfläche unter "Meine Add-Ins" sehen können, dank ESRI! Der Name sollte mit dem Namen in config.esriaddinx übereinstimmen, der XML-Datei, auf die ich Sie bitte, zu achten.

Klicken Sie dann auf die Schaltfläche "Anpassen". Auf der Registerkarte Symbolleisten können Sie eine neue Symbolleiste für unsere Arbeit erstellen. Ich habe eine mit dem Namen "Monkeybar" erstellt, Sie können sie wie auch immer benennen, stellen Sie nur sicher, dass sie nicht die vorhandenen in ArcMap dupliziert. Wechseln Sie zur Registerkarte Befehle, der linke Bereich listet alle verfügbaren Kategorien auf. Erinnern Sie sich, was ich Ihnen gesagt habe? Der Kategoriename ist "Add-In Controls"! Wenn Sie darauf klicken, sollten Sie auf der rechten Seite "Mein Button" als Befehl sehen können.

Jetzt können Sie "Mein Button" auf Ihre neue Symbolleiste ziehen! Im nächsten Schritt werden der Karte einige Ebenen hinzugefügt. Der schnellste Weg, dies zu tun, besteht darin, eine Grundkarte hinzuzufügen, die auch das Koordinatensystem einbringt. Ich habe mich für ESRI World Topo entschieden. Es hat eine Web-Mercator-Projektion. Meine mxd-Datei findet ihr hier

Wenn Sie jetzt auf die Schaltfläche klicken (standardmäßig ist sie mit einem blauen runden Symbol versehen), sollten Sie vier rote runde Punkte an den vier Ecken der Karte sehen können. Möglicherweise müssen Sie vollständig zoomen, um sie zu sehen. Wenn Sie in Zeile 59 von Button1.cs einen Haltepunkt setzen und auf unsere Schaltfläche in ArcMap klicken, wird die Ausführung angehalten und Sie können die Quelle von Button1.cs in VS2013 Schritt für Schritt debuggen.

Möglicherweise stellen Sie fest, dass die meisten Logiken von Button1.cs außerhalb der OnClick-Funktion liegen. Was ist, wenn Sie den Code beispielsweise in Zeile 33 debuggen möchten? Nun, diese Funktion heißt "der Standardkonstruktor der Klasse" und wird nur einmal aufgerufen, wenn diese Schaltfläche jedes Mal zum ersten Mal angeklickt wird. Um die darin enthaltenen Codes zu debuggen, müssen wir die aktuelle Debug-Sitzung beenden, indem wir in VS 2013 auf die Schaltfläche mit dem roten Quadrat klicken, dann einen neuen Breakpoint in Zeile 33 setzen und von vorne beginnen.

Übrigens, kann mir jemand sagen, was die Zeile 36 bedeutet? Wofür steht der Abschnitt auf der rechten Seite des +=-Zeichens? Wenn Sie es nicht wissen, ist es an der Zeit, C# durchzugehen, bevor Sie mit zukünftigen Lektionen fortfahren.

Lektion 2: Erledigen Sie die schwere Arbeit außerhalb von ArcMap

Als Arcpy veröffentlicht wurde, war eines der aufregenden Dinge, dass GIS-Anwender die Datenverarbeitungsarbeit erledigen konnten, ohne dass ArcMap geöffnet wurde. AO ermöglicht Ihnen dies vom ersten Tag an, Sie benötigen nur ein bisschen mehr Programmieraufwand :)

In dieser Sitzung werden wir eine Windows-Befehlszeilenanwendung entwickeln, die ohne ArcMap ausgeführt werden kann (Dies ist nicht ganz richtig: Wenn Sie keine ArcEngine-Lizenz haben, müssen Sie ArcMap trotzdem auf dem System installiert haben um den Lizenzzugang zu erhalten). Wie auch immer, lasst uns die Augen schließen und so tun, als wäre ArcMap hier nicht auf dem Radar.

Um einen lustigen Fall zu machen, habe ich mich entschieden, mit einigen echten Daten aus der Great Lakes Restoration Database zu spielen. Über seine Kartenschnittstelle können Sie alle GLRD-Projekte im csv-Format herunterladen. Wir nehmen diesen Dump als Quelldaten. Jede Zeile dieser Datei enthält einen Projektdatensatz mit lat/lon, den wir in eine Point-Feature-Class umwandeln können. Wenn Sie ein GISer sind und dies wahrscheinlich schon Hunderte Male getan haben, werden Sie sich vielleicht fragen: Was macht daran Spaß? Okay, lass uns etwas Spaß hinzufügen: Was ist, wenn ich das Projekt nur für den Bundesstaat Michigan extrahieren möchte? Wenn Sie immer noch Probleme haben, den Ort zum Herunterladen dieser CSV-Datei zu finden, klicken Sie bitte hier.

Gehen wir zurück zu VS2013. DATEI -> Projekt, im linken Bereich im Fenster Neues Projekt: Installiert -> Vorlagen -> Visual C# -> ArcGIS, wenn Sie auf "ArcObjects erweitern" klicken, werden im mittleren Bereich alle verfügbaren Vorlagen angezeigt, wählen Sie bitte "Konsolenanwendung ( Desktop)". Sie sollten "ArcGIS Project Wizard" sehen. Auf der ersten Seite behalten wir alles als Standard bei und klicken auf "Next". Anschließend müssen Sie den Lizenztyp für Ihre ESRI-Produkte auswählen, damit das Programm weiß, welche Komponenten in Ihr Programm integriert werden können. Ich habe "Erweitert" gewählt und dann auf Fertig stellen geklickt, um die Vorlage zu laden.

Wenn Sie "Solution Explorer" öffnen, sollten Sie zwei von ESRI erstellte cs-Dateien sehen. Bitte ersetzen Sie hier "Program.cs". Bevor Sie das Programm erstellen, müssen Sie einige zusätzliche Referenzen hinzufügen. Erinnern Sie sich an den ersten Schritt von "ArcGIS Project Wizard"? Ich habe Sie davon überzeugt, es zu überspringen, Sie könnten dort sogar zusätzliche Referenzen laden.

1.ESRI.ArcGIS.Version 2.ESRI.ArcGIS.Geodatabase 3.ESRI.ArcGIS.Geometry

Jetzt sollten Sie in der Lage sein, das Programm zu erstellen. Dieses Tool soll unter der Befehlszeile mit zwei Argumenten ausgeführt werden:

C:DesktopConsoleApplication1.exe glrd.csv michigan

Das erste Argument ist der Pfad zu der gerade heruntergeladenen CSV-Datei, das zweite ist der Name des Staates. Wenn Sie diese beiden Argumente nicht eingeben, wird das Programm sofort beendet. Dann fragen Sie sich vielleicht: Wie könnte ich das insdie VS2013 einrichten? Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, gehen Sie dann zu "Eigenschaften", fügen Sie unter Debug die Argumente in "Befehlszeilenargumente" ein. Auf diese Weise wird jedes Mal, wenn Sie das Programm debuggen, das Material, das Sie dort abgelegt haben, an das Programm weitergegeben.

Dies ist eine "eigenständige" App und wir werden unseren Fokus auf den Code legen. Im Code werden zwei Aufgaben ausgeführt:

  1. Parsen einer Excel-CSV-Datei mit SQL-Abfrage
  2. Erstellen Sie eine File-Geodatabase und füllen Sie sie mit Punktgeometrie und -attributen

Die erste Aufgabe ist notwendig, wenn wir zuerst den Inhalt filtern müssen. Für den von mir erstellten Fall möchten wir nur die Projekte in einem einzigen Great Lakes State herausfinden. Dies haben wir in Zeile 33 erreicht, indem wir OleDbCommand gegen Excel verwendet haben. Microsoft bietet einen sehr sauberen Ansatz, um Excel-Daten mithilfe von SQL-Anweisungen zu bearbeiten. Ich empfehle es sehr für Ihre Programmierarbeit.

Wenn wir eine positive Anzahl von Projekten für einen Bundesstaat finden, können wir sie in eine Geodatabase einfügen. Bitte achten Sie auf den Ablauf dieses Prozesses:

  1. Rufen Sie die Factory ab, die dateibasierte Geodatabases erstellen kann, siehe Zeile 135.
  2. Erstellen Sie eine neue Feature-Class bei Linie 147.
  3. Schleifen Sie die Projektdatensätze in einer Schleife, erstellen Sie ein neues Feature und fügen Sie sie dann über FeatureBuffer und FeatureCursor in die Feature-Class ein, die für die Masseneinfügung empfohlen werden. Siehe Zeile 156. Wenn die Schleife fertig ist, leeren Sie den curosr, um alle Datensätze zurück auf die Festplatte zu schreiben.

Während der Feature-Class-Erstellung müssen Sie Folgendes definieren:

Dies ist ein ziemlich Standardverfahren. Ich bin überrascht, dass ESRI dafür kein Snippet oder Codebeispiel hat. Ich finde das nur bei ESRI github account. Beachten Sie, dass das Beispiel "esriDataSourcesFile.TextFileWorkspaceFactory" verwendet, was den Programmierer vom direkten Umgang mit der CSV-Datei befreit. Die Freiheit kommt jedoch immer aus dem Verständnis des Systems. Mit dem von mir vorgestellten Ansatz haben Sie jetzt mehr Flexibilität beim Umgang mit Excel-Dateien.

Bevor wir zum Abschluss kommen, gehen wir noch einmal auf die Standardvorlage zurück, die ESRI uns anbietet:

Dies sind die Routinen zum Initialisieren von ESRI-Komponenten einschließlich der Lizenzierung, um dann am Ende alles herunterzufahren. Ihr Code, der ESRI-Zeug enthält, sollte dazwischen geschrieben werden.

Bevor wir ablehnen, könnten Sie bitte einen Blick auf die Signatur der Funktion ParseCSV werfen, was bedeutet List<dynamic>? Wenn Sie den Code sorgfältig lesen, was ist die Art des Zeugs, das wir in Zeile 38 in die Liste werfen? Auch hier, wenn Sie keine Ahnung haben, müssen Ihre C#-Kenntnisse aktualisiert werden!

Okay, wir sind alle fertig. Möge die Macht bis zum nächsten Mal mit dir sein!

Lektion 3: ArcObjects oder ArcPy, Sein oder Nichtsein

Zunächst einmal habe ich nicht die Absicht, hier einen heiligen Krieg zu entfachen. Beide sind großartig! Ich möchte nur den Unterschied zwischen AO und AP an einem bestimmten Fall veranschaulichen. Unabhängig davon, ob Sie ein AO- oder AP-Unterstützer sind, kann dies hoffentlich hilfreich sein, um das richtige Tool für die richtige Aufgabe auszuwählen.

Lassen Sie uns zunächst die Aufgabe beschreiben: Wenn Sie mit Graph als Datenstruktur im Kontext der Informatik vertraut sind, wissen Sie vielleicht, dass es eine grundlegende Struktur ist, um jede Art von Operationen durchzuführen, wie z. B. Netzwerkverfolgung, kürzester Pfad, maximaler Fluss usw. Bei einem vorgefertigten Dataset NHD Plus für Great Lakes im File-Geodatabase-Format möchten wir das Diagramm in seiner angrenzenden Listenform erstellen. Bei einer sorgfältigen Untersuchung der Geodatabase haben wir festgestellt, dass zwei Feature-Classes für diese Aufgabe besonders nützlich sind: NHD_Flowline und Hydro_Net_Junctions. Wie Sie vielleicht wissen, ist NHD Plus ein Datensatz, der mit einem Stream-Netzwerk unter Verwendung der ESRI-Technologie verarbeitet und erstellt wurde. Die ESRI-Geodatabase ist jedoch proprietär, sodass wir vorhandene Daten nicht zum Erstellen unserer Nachbarschaftsliste nutzen können (ich übertreibe hier tatsächlich ein wenig, da ESRI eine Open-Source-C++-Bibliothek zum Bearbeiten dateibasierter Geodatabases bereitstellt).

Durch die Verwendung dieser beiden Feature-Classes konnten wir unsere Arbeit mit ArcPy auf recht einfache Weise erledigen. Hier ist der Code. Möglicherweise stellen Sie fest, dass das Skript eine shp-Datei anstelle einer Geodatabase verwendet hat. Ich habe nicht gelogen, ich habe hier eine Version mit Geodatabase. Wenn Sie für meinen Arbeitgeber arbeiten, sollten Sie es einsehen können. Wenn Sie dieses Skript auf Ihrem Desktop mit installiertem ArcMap 10.3 und NHD Plus für Great Lakes einrichten (lassen Sie es mich wissen, wenn Sie diese 'NHDPlusV21_GL_04.gdb' für den Test benötigen), können Sie feststellen, dass es bis zu 6 Minuten dauern kann 12 Stunden abgeschlossen. Ich wette, Sie werden auch bemerken, dass der Engpass hier und hier ist.

Können wir da etwas verbessern? Leider können wir nicht viel tun, da ESRI ArcPy nur begrenzte Funktionen zur Verfügung gestellt hat, hauptsächlich die Geoverarbeitung mit dem, was in der Toolbox von ArcMap enthalten ist. Mit anderen Worten, alle Ihre ArcPy-Skripte tun eines: eine Kombination aus einer beliebigen Anzahl von Tools, die ESRI in ArcMap anbietet. Sie haben zwar 64-Bit-Kapazität, aber für diesen Fall, der eher CPU-gebunden ist, nicht viel Hilfe.

Lassen Sie uns die Münze werfen und die andere Seite überprüfen: ArcObjects .Net, dieser böse Nachfolger von ArcObject für Visual Basic bietet einen dünnen Layer-Wrapper auf ArcObjects-COMs und soll in der Lage sein, auf jeden Aspekt der ESRI-Technologien zuzugreifen, nun, wenn Sie haben richtige Lizenz erworben. Um ein faires Spiel zu haben, bleiben wir bei der gleichen Methodik wie ArcPy. Wir glauben, dass wir mit AO ein besser funktionierendes C#-Skript haben könnten, basierend auf der Tatsache, dass AO eine feinere Granularität als AP in Bezug auf die Programmierung bietet. Indem wir diese beiden Engpässe aufbrechen und eine Schicht tiefer in AO gehen, können wir einen Unterschied machen.

Lassen Sie uns zuerst den langweiligen Teil erklären: Hier sind zwei POCOs, um den Knoten und seine Nachfolger darzustellen:

Vertex als Knoten wird verwendet, um die Knoten-ID, die Anzahl der eingehenden Streams und am wichtigsten: die in einer Liste gespeicherten Downstream-Knoten zu verfolgen. Die DownstreamNode-Klasse enthält die Knoten-ID, die eingehende Stream-ID und am wichtigsten: die Geschwindigkeitsdaten in einer Liste (unser ursprünglicher Gedanke ist, diese Geschwindigkeit zu verwenden, um die Reisezeit entlang von Strömen zu berechnen).

Im C#-Skript müssen wir die dateibasierte Geodatabase öffnen und die Referenzen auf Feature-Classes abrufen, die wir untersuchen möchten:

Da wir jetzt Feature-Classes in der Hand haben, können wir die räumlichen Abfragen in Angriff nehmen, die normalerweise in ArcPy mit drei Codezeilen ausgeführt werden:

Die dritte Zeile "arcpy.SelectLayerByLocation_management" ist der Schlüssel. Da wir jeden Knotenpunkt gegen den NHD_Flowline-Layer durchlaufen müssen (ein Punkt gegen alle Polylinien), vermuten wir, dass "SelectLayerByLocation_management" aufgrund des Designs ineffizient sein könnte. "SelectLayerByLocation_management" ist wahrscheinlich so programmiert:

  1. Räumlichen Index auf NHD_Flowline erstellen
  2. Durchsuchen Sie den Index mit einem bestimmten Punkt und finden Sie alle Kandidaten, die sich auf einem Unterbaum von Polylinien befinden
  3. Lineares Scannen aller Kandidaten gegen einen bestimmten Punkt unter Verwendung geometrischer Operatoren, um falsch positive Ergebnisse auszuschließen
  4. Ergebnismenge zurückgeben

Es ist möglich, dass der erste Schritt, der Index, jedes Mal neu erstellt wird, wenn wir "arcpy.SelectLayerByLocation_management" aufrufen, was eine Verschwendung ist. Was ist, wenn wir es einmal erstellen und für alle Punkte denselben Index verwenden? Mir wurde gesagt, dass die räumliche AO-Abfrage mithilfe von:

Ich bin mir nicht sicher, wie es implementiert wurde, aber es sieht wirklich ähnlich aus wie "arcpy.SelectLayerByLocation_management". Also entscheide ich mich für einen anderen Weg: "IFeatureIndex" und "IIndexQuery2", was vielversprechend erscheint, da es uns eine feinere Skalierungskontrolle ermöglicht. Hier ist mein Code:

Wir erstellen eine FeatureIndex-Coclass und bitten sie, den räumlichen Index für die angegebene Feature-Class zu erstellen (anscheinend erstellt FeatureIndex tatsächlich einen Index im Dateisystem, ich dachte, es könnte den Index in der Geodatabase nutzen.) IIndexQuery2 mit einer Methode namens: IntersectedFeatures. Wenn wir richtig liegen, werden die obigen Schritte 2 bis 4 ausgeführt.

Wir können Codes ganz einfach mit C# als ESRI-Konsolenanwendung zusammenstellen, wenn Sie meinen vorherigen Tutorials gefolgt sind. Erwähnenswert ist die Berechnung der geodätischen Länge einer Polylinie mit Längen-/Breitenkoordinaten. In ArcPy ist wiederum nur eine Codezeile erforderlich:

Sie denken vielleicht, dass es so einfach sein soll. Nun, halten Sie sich Ihren Gedanken, sehen Sie, wie dies in AO gemacht wurde, da polyLine eine IPolyline ist:

Entschuldigung, fragen Sie mich nicht, wie eine Standard-LinearUnitClass-Instanz hier funktionieren könnte. Es ist chaotisch genug. Ich hielt meinen Impuls, meinen eigenen Haversine-Code dort zu platzieren, weil ich vertraue, dass ESRI eine bessere Lösung in der Nähe des Nord- / Südpols hat. Du musst es glauben! :) Wieder wurde mir von einem AO-Guru gesagt, dass diese geodätische Länge auf Polylinien auf Segmentebene mit einer anderen Methode durchgeführt werden sollte. Ich habe nicht so viel gegraben: Ich habe meinen C#-Code tatsächlich absichtlich etwas unordentlich gemacht, ich habe sogar versucht, Linq zu verwenden, aber C#s Linq ist im Vergleich zum Listenverständnis von Python blass. Denn ich weiß: C# auf CLR gegen COM auf der Windows-Plattform wird definitiv schneller sein als Python, ganz zu schweigen davon, dass ArcPy über dem Wrapper-Wrapper von Wrappern liegt.

Wenn Sie den Code erfolgreich kompilieren konnten, beeilen Sie sich nicht, ihn auszuführen, eine Tasse Kaffee zu kochen und Ihr Lieblingsbuch in Händen zu halten, das letzte ArcPy-Skript hat Stunden gedauert! Nun, auf meinem Laptop hatte ich Zeit, eine Tasse Kaffee zu trinken und einige Neuigkeiten online zu lesen, aber überraschenderweise war diese AO-Version in 15 Minuten fertig! Meine Mathe ist schlecht, kann mir jemand sagen, wie oft diese schneller ist als die AP-Version?

Auch hier möchte ich nicht beweisen, dass AO besser ist als AP oder Sie davon überzeugen, zu AO zu wechseln. Ich möchte jedem die Möglichkeit geben, seine Wissensdatenbank zu aktualisieren und über den Tellerrand hinauszudenken! Es ist möglich, dass Sie den Überblick über die Leistung verlieren, während Sie die weniger Codezeilen von ArcPy genießen. Ich mag ArcPy, wirklich, aber in vielen Szenarien habe ich das Gefühl, ein T-Shirt für einen Teenager zu tragen. Mein Rat lautet also: Wenn Ihnen die Leistung wichtig ist oder Sie das Gefühl haben, dass ArcPy zu langsam für Sie war, sollten Sie ArcObject verwenden, das Sie normalerweise nicht enttäuschen wird, zumindest diesmal nicht für unseren Testfall. :)

Ich weiß, ich weiß, wir sollten über ArcObject diskutieren, nicht über ArcPy. Allerdings zuvor auf "ArcObject .Net with VS 2013". (In Ordnung, wir sind keine TV-Serie:), Ich war schockiert über den Leistungsgewinn durch den Wechsel von ArcPy zu ArcObject. Ich dachte, es könnte sich lohnen, ArcPy, seine Implementierung und seine Fähigkeiten zu untersuchen. Wenn Sie ArcPy nicht erlernen möchten, ignorieren Sie dieses Kapitel.

ArcPy wurde erstmals 2010 mit der Realse von ArcGIS 10 eingeführt (nun, es ist wirklich nur 9.4, aber die Benennung 10 ließ es neuer klingen. ). Tatsächlich gab es "arcgisscripting" zurück zu ArcGIS 9.2, es unterstützte nicht nur Python, sondern auch andere Skriptsprachen wie VBScript, Perl. Doch kurz nachdem Microsoft die Unterstützung für VB, VBScript und Jscript eingestellt hatte, entschied ESRI, alle Skripte außer Python fallen zu lassen. Es sollte nur Skriptfunktionen für Geoverarbeitungsaufgaben bereitstellen. Die Geoverarbeitungs-Toolbox wurde in ArcMap 9.2 eingeführt. Es wurde entwickelt, um bestimmte Datenverarbeitungsarbeiten zu vereinfachen:

  1. Analyse-Toolbox
  2. Kartografie-Toolbox
  3. Konvertierungs-Toolbox
  4. Datenmanagement-Toolbox
  5. Werkzeugkasten bearbeiten
  6. Werkzeugkasten für Geokodierung
  7. Toolbox für lineare Referenzierung
  8. Multidimensionale Toolbox
  9. Toolbox für räumliche Statistik

In ArcPy wird jede Geoverarbeitungsfunktion in ArcMap als Funktion innerhalb von ArcPy-Modulen definiert. Sie können die Contex-Hülle einer Point-Feature-Class mit den folgenden zwei Codezeilen generieren:

Die Funktion "MinimumBoundingGeometry_management" entspricht dem Werkzeug von "Minimum Bounding Geometry", das in ArcMap-> Toolbox -> Data Management zu finden ist. ArcPy automatisiert dieses Werkzeug einfach, indem es dem Benutzer ermöglicht, Parameter dieses Werkzeugs programmgesteuert zu senden. Nach einem zweiten Blick werden Sie vielleicht feststellen, dass alle Funktionen der gleichen Namenskonvention folgen:

Toolname + '_' + Toolbox-Alias

Wenn Sie den Alias ​​einer bestimmten Toolbox nicht sicher sind, klicken Sie mit der rechten Maustaste auf die Toolbox und dann auf die Eigenschaft.

Laut dem ESRI-Blog ist hier der Zweck von ArcPy:

"ArcPy ist ein Site-Paket, das auf dem erfolgreichen Arcgisscripting-Modul aufbaut (und ein Nachfolger davon ist). Sein Ziel ist es, den Grundstein für eine nützliche und produktive Methode zur Durchführung von geografischen Datenanalysen, Datenkonvertierungen, Datenmanagement und Kartenautomatisierung zu schaffen mit Python."

In der ersten Edition von ArcPy werden neben der Geoverarbeitung auch noch einige andere Module bereitgestellt: Mapping (arcpy.mapping), Spatial Analysis (arcpy.sa) und Geostatistical Analyst (arcpy.ga). In 10.1 wurden Datenzugriff (arcpy.da) und Zeit (arcpy.time) eingeführt. Es enthält auch einige andere Bibliotheken/Dienstprogramme.

Wie wir alle wissen, kann die gesamte ESRI-Produktionsanpassung über ArcObject erfolgen und ArcObject wurde auf der Grundlage von Microsoft COM gegen Windows-Systeme entwickelt. Geoverarbeitungswerkzeuge können beispielsweise über die GPDispatch-Coclass (Coclass-Definition) ausgeführt werden. Es erlaubt dem Benutzer nur, Argumente per Zeichenfolge einzusenden und das Ergebnis zu konsumieren, das die Schnittstelle zurückgibt. Daher nennt ESRI es ein "grobkörniges Objekt", siehe hier. ArcPy implementiert jedoch seine Geoverarbeitungsfunktionen zusätzlich zu dieser Schnittstelle. Wie aus einigen ESRI-Dokumenten hervorgeht, ist ArcPy ebenfalls ein grobkörnigeres Modell.

"Arcpy.mapping wurde für den professionellen GIS-Analysten (sowie für Entwickler) entwickelt. Traditionell mussten die oben aufgeführten Szenarien mit ArcObjects durchgeführt werden und es erwies sich oft als sehr schwierig, die Programmierumgebung für den durchschnittlichen GIS-Profi zu erlernen. Arcpy.mapping ist ein grobkörniges Objektmodell, was bedeutet, dass die Funktionen so konzipiert sind, dass eine einzelne arcpy.mapping-Funktion viele Zeilen ArcObjects-Code ersetzen kann."

Daher können Sie mit ArcPy in nur wenigen Codezeilen leicht erstaunliche Dinge erledigen:

Die obigen Codes rendern alle Funktionen im mxd unter Verwendung der im mxd definierten Konfiguration in eine PDF-Datei.

Vielleicht möchten Sie sich fragen: Sollten wir ArcPy als Ersatz für ArcObject in Betracht ziehen? Dennoch, laut ESRI:

„Arcpy.mapping ist kein Ersatz für ArcObjects, sondern eher eine Alternative für die verschiedenen unterstützten Szenarien. ArcObjects ist weiterhin für eine detailliertere Entwicklung und Anwendungsanpassung erforderlich, während arcpy.mapping für die Automatisierung des Inhalts vorhandener Kartendokumente und Layer gedacht ist Datei."

Vielleicht möchten Sie auch wissen: Kann ArcPy ArcObject direkt aufrufen? Die Antwort ist nein. Aber ich bin mir sicher, ArcPy kommuniziert immer noch irgendwie indirekt und implizit mit ArcObject. Wie immer hat "Neugier die Katze getötet". Ich werde die Haube von ArcPy ein wenig öffnen und sehen, was da drin ist. Auf meinem Desktop wurde ArcPy installiert unter:

C:Programme (x86)ArcGISDesktop10.2arcpyarcpy

Darin finden Sie eine klassische Python-Modulpaketstruktur. Es gibt dort einen Unterordner namens "arcobjects", sind Sie überzeugt? Ich bin sicher, Sie sind es nicht. Öffnen wir also einige py-Dateien. Die Klasse "MapDocument" ist in _mapping.py definiert. Die Deklaration der Klasse lautet wie folgt:

Wenn Sie mit C# oder Java vertraut sind, können Sie "Mixins" als Schnittstelle in Betracht ziehen. In MapDocument ist kein expliziter Konstruktor definiert, daher können Sie gemäß Pythons Method Resolution Order (MRO, Depth-First vor 2.3 und C3-Algorithmus nach, das Verhalten von MRO durch class.mro()), die Konstruktoren seiner Basisklassen, untersuchen wird aufgerufen:

Es scheint, dass MapDocumentMethods die Funktionen seiner Basisklasse aufruft drin direkt, wenn super() tatsächlich seine Basisklasse zurückgibt. Da es sich hier jedoch um Mehrfachvererbung handelt, super(MapDocumentMethods, self).drin(mxd) ruft tatsächlich den Konstruktor der zweiten Basisklasse von MapDocument auf: "_BaseArcObject". Wenn Sie mehr über die ausgefallenen Verhaltensweisen von Super erfahren möchten, klicken Sie bitte hier. Werfen wir einen Blick auf _BaseArcObject:

Es verfügt über einen Konstruktor, der Eingabeargumente mit variabler Länge annehmen kann. Es definiert auch eine statische Member-Variable, "_arc_object". Die Funktion "gp._gp.CreateObject" ist tatsächlich im Namensraum "Geoverarbeitung" definiert. Erinnern Sie sich, dass wir erwähnt haben, dass Geoverarbeitung das erste Modul ist, das für ArcPy eingeführt wurde? Für gp ist es eine Instanz der Klasse Geoprocessor:

Jetzt sind wir beim Ursprung angelangt: ArcPy kommuniziert mit ArcObject über "arcgisscripting", dem Vorgänger von ArcPy. Sie finden arcgisscripting nicht im ArcPy-Ordner, es befindet sich tatsächlich unter "C:Program Files (x86)ArcGISDesktop10.2in" mit dem Namen "arcgisscripting.pyd", was eigentlich eine DLL ist.

Wie bereits im vorherigen und in diesem Kapitel besprochen, müssen Sie aufgrund der Interoperabilität mit COM mit Leistungseinbußen rechnen, wenn Sie ArcPy und nicht ArcObject verwenden. Wie viel Verlust Sie bekommen können, hängt wirklich von den Aufgaben ab. Hier ist ein Benchmark, den ich im Internet gegen ArcGIS 9.3 gründe. @dbGLC hat mich daran erinnert, dass diese Grafik aus einer Präsentation stammt, in der die Möglichkeit diskutiert wird, AO COM direkt mit Python aufzurufen, indem einige Python-COM-Pakete wie Comtypes verwendet werden. Der ursprüngliche Diskussionsthread ist hier. Dort finden Sie viele tolle Ideen.

Auch dieses Kapitel soll Ihnen helfen zu verstehen, was ArcPy ausmacht. Sowohl ArcObject als auch ArcPy sind großartige Werkzeuge für verschiedene Szenarien. Wenn Sie mehr über ArcPy erfahren möchten, empfehle ich die Repos von ESRI auf Github hier. Lassen Sie es mich wissen, wenn Sie eine teure Geoverarbeitungsfunktion finden, die in einer riesigen Schleife aufgerufen wird. :)

Lektion 5: ArcObjects-Objektmodelldiagramm (OMD)

Wenn Sie ein erfahrener AO-Entwickler sind, egal, ob Sie VBA, VB, VB.Net, C#, Java oder C++ bevorzugen (geordnet nach der Popularität:), sollten Sie diese Diagramme manchmal zumindest zum Nachschlagen verwenden. Nun, wenn Sie ein AO-Neuling sind, genau wie ich, werden Sie vielleicht das Gefühl haben, dass ich übertrieben bin. Ich werde dir keine Vorwürfe machen, denn das dachte ich mir auch. Sobald Sie jedoch ernsthaft mit der Implementierung einer Funktion über AO beginnen, sind diese Diagramme Ihre ultimative Waffe, insbesondere nach einigen zeitraubenden Google-Suchen. Kein Scherz, ich habe immer mit meinen Kollegen gescherzt: Ein Senior Developer ist jemand, der ein technisches Rätsel lösen kann, das von Suchmaschinen nicht beantwortet wird. Leider fällt ArcObjects mehr in diese Kategorie als andere Technologien! Zwei Gründe: 1. AO hat eine relativ kleine Benutzergruppe 2. ESRI hat sehr schlechte Arbeit geleistet, um die API-Dokumentation der Entwickler zu pflegen. Ich zahle 1.500 Dollar pro Jahr für ein EDN-Abonnement, aber ich fühle mich immer noch öfter hilflos, als ich erwartet hatte.

Die Leute lernen immer aus ihren eigenen Lektionen (na ja, jemand fällt mehr als einmal in den gleichen Fluss). Nach einigen frustrierenden Erfahrungen mit Google- und EDN-Dokumenten erinnerte ich mich plötzlich an die Zeit, als ich jung war: Ich sah diese AO-Gurus, die vor einem riesigen Whiteboard mit einem ein paar Meter langen Diagramm standen und grübelten. Ich erinnerte mich daran, dass das Diagramm, auf das sie starren, AO Object Model Diagram heißt, auch bekannt als OMD (Oh My Darling)! Moment mal, wo sind meine Lieblinge? Auf meinem Desktop befinden sie sich in:

C:Programme (x86)ArcGISDeveloperKit10.4Diagrams

In diesem Ordner befinden sich 68 PDFs, für die vorherige AO-Version waren es viel weniger. Wenn Sie wie ich ein Amateur sind, empfehle ich Ihnen, zuerst GeoDatabaseObjectModel.pdf zu lesen. Es enthält die meisten Dinge, die Sie möglicherweise benötigen, um mit der AO-Programmierung zu beginnen. Schauen wir uns gemeinsam um!

Zuallererst müssen Sie verstehen, dass ESRI ein aufrichtiger Anhänger von UML ist. Alle diese seltsamen Symbole, die Sie vielleicht sehen, werden tatsächlich von UML-Klassendiagrammen mit einigen ESRI-Erfindungen abgeleitet. Hier ist eine gute Referenz für das UML-Klassendiagramm. Wenn Sie nicht 3 Minuten damit verbringen möchten, diese Konzepte und zugehörigen Symbole durchzugehen, hat ESRI in jedem Diagramm eine UML 101.

ESRI hat ihre Erfindung gemacht. Was sind Inbound-Interface und Outbound-Interface? Selbst nachdem ich die UML-Klasse für einen vollständigen Semaster belegt habe, gibt es keine Ahnung, was zum Teufel sie sein könnten! Keine Sorge, ESRI bietet Erklärungen in seiner Reihe "Learning ArcObjects", die für jede Version online und offline verfügbar ist. Hier ist das Kapitel: Lesen von OMDs. Jetzt wissen Sie vielleicht, dass die eingehende Schnittstelle die Schnittstelle ist, die die angegebene Klasse tatsächlich implementiert, die ausgehende Schnittstelle tatsächlich die Ereignisregistrierung ist, ESRI sie als Ereignissenke bezeichnet. Es ist ein Trick der alten Schule, um Ihren Event-Handler zu registrieren. Wenn Sie so naiv sind wie ich, können Sie es einfach als Event im Kontext von .Net betrachten.

Erinnern Sie sich, dass ich zuvor erwähnt habe, dass diese Gurus ORM so groß wie eine Karte im kleinen Maßstab mit einem Plotter gedruckt haben? Warum? Wenn Sie GeoDatabaseObjectModel.pdf öffnen, sehen Sie möglicherweise Folgendes, es sei denn, Sie haben einen extrem großen LED-Fernseher als Bildschirm:

Jetzt wissen Sie, warum Plotter notwendig ist, oder :)

Wenn Sie die Schnittstelle kennen, für die Sie sich interessieren, ist es immer praktisch, das entsprechende OMD direkt nachzuschlagen. Andernfalls haben Sie das Gefühl, ein Versteckspiel zu spielen.

OK, spielen wir das Versteckspiel. Hier ist der Deal: Ich möchte eine dateibasierte GeoDatabase öffnen und die Informationen zu den darin enthaltenen Feature-Classes abrufen. Wenn Sie ein Programmierer sind, wissen Sie vielleicht, dass das Öffnen einer Datei von der Festplatte normalerweise einige Funktionen wie "open" oder "openfile" usw. verwendet. Da wir OOP sind, gibt es eine Klasse, die wir diese Funktion anwenden können. Bevor du in den Ozean von My Darlings eintauchst, greife ich deine Arme und sage: Moment mal, noch etwas muss ich erwähnen: drei Überlebensregeln für das Spielen mit My Darlings (OMD):

ich. Während der Schnittstellenablaufverfolgung wissen Sie jedes Mal, wenn eine Schnittstelle erreicht wird, die IUnknown implementiert, dass dies das Ende ist. Beachten Sie, dass ich die bearbeitete "Schnittstelle" nicht die Klasse verwende? AO basiert auf dem Microsoft COM-Standard. Es bedeutet im Grunde, dass jeder Funktionsaufruf gegen eine Instanz einer Art von Schnittstelle erfolgen sollte. Per Protokoll muss jede unter der Domäne von COM definierte Schnittstelle eine IUnknown-Schnittstelle implementieren. Machen Sie sich keine Sorgen, was in IUnknown enthalten ist, es ist keine schlechte Idee, es unbekannt zu halten. Alles, was Sie wissen müssen, ist, dass es eine Sackgasse ist, sobald wir eine Schnittstelle in OMD sehen, die IUnknown direkt implementiert. Wir haben die oberste Ebene der OMD-Hierarchie erreicht.

WorkspaceFactory ist eine Klasse, die IWorkspaceFactory implementiert, die eine eingehende Schnittstelle ist und IUnknown implementiert. Dies sagt uns, dass IWorkspaceFactory eine Schnittstelle der obersten Ebene ist.

II. Der Zugriff auf Funktionen, die in einer Schnittstelle definiert sind, erfolgt immer über eine Instanz eines bestimmten Klassentyps. Dieser Klassentyp ist entweder eine Coclass oder eine "instanziierbare" Klasse, bei der es sich um einen Klassentyp handelt, dessen Instanz nur durch andere Klassen abgerufen werden kann. Dies kann bedeuten, dass entweder aus der Fabrik, Singleton oder Upcasting abgerufen werden. Lassen Sie uns weiterhin WorkspaceFactory als Beispiel verwenden.

In .Net sind die WorkspaceFactory auf OMD als zwei Einheiten implementiert: Schnittstelle "WorkspaceFactory" und Klasse "WorkspaceFactoryClass", die die Schnittstelle "WorkspaceFactory" zusammen mit anderen Schnittstellen implementiert, die WorkspaeFactory gemäß OMD tun sollte. "WorkspaceFactory" ist eine leere Schnittstelle, die wahrscheinlich als Platzhalter fungiert. Warum? Ich weiß es nicht. Wenn du es weißt, lass es mich wissen :)

Aus der Dekompilierung können wir erkennen, dass der Konstruktor von WorkspaceFactoryClass den Zugriffsmodifizierer "internal" hat, was bedeutet, dass auf ihn nur innerhalb der Assembly zugegriffen werden kann. "extern" bedeutet, dass dieser Konstruktor an anderer Stelle implementiert ist. Das dem Konstruktor zugeordnete Attribut MethodImpl wird mit MethodImplOptions.InternalCall zugewiesen, was angibt, dass "der Aufruf intern ist, dh er ruft eine Methode auf, die innerhalb der Common Language Runtime implementiert ist.". All dies stellt sicher, dass wir in unserem Code keine Instanz von WorkspaceFactoryClass erstellen können. Daher qualifiziert sich WorkspaceFactoryClass als ein Klasse "unmittelbar".

Auf OMD können abstrakte Klasse, instanziierbare Klasse und Co-Klasse leicht durch die Form des Rechtecks ​​identifiziert werden. Abstrakte Klasse ist 2D-schattiertes Rechteck, instanziierbare Klasse ist 3D-Rechteck ohne Schatten, Co-Klasse ist 3D-schattiertes Rechteck.

III. Da diese Klassen in der Regel mehrere Schnittstellen implementieren. Es ist sehr typisch, in AO-Code zu sehen, dass Sie, um auf eine in Interface D deklarierte Methode zuzugreifen, die in Klasse C implementiert ist, zuerst eine Instanz der Klasse A erhalten und sie dann mit "as" in eine Schnittstelle B umwandeln müssen. Da Klasse C sowohl Interface B als auch Interface D implementiert, wandeln Sie jetzt alles, was Sie in der Hand haben, von B nach D um.

Jetzt können Sie tauchen! Der einzige Hinweis, den wir haben, ist, dass anscheinend auf alle Datensätze über das Abstract Factory-Entwurfsmuster zugegriffen wird. Da wir eine dateibasierte GDB öffnen möchten, finde ich FileGDBWorkspaceFactory in DataSourcesGDBObjectModel.pdf

Es hat ein schattiertes 3D-Rechteck, sodass wir eine Instanz von FileGDBWorkspaceFactory direkt initialisieren oder so etwas über einen Reflektor erstellen können. Es hat eine eingehende Schnittstelle: IWorkspaceFactory und diese Schnittstelle wird in GeoDatabaseObjectModel.pdf beschrieben. Siehe das vorherige Bild, es hat eine Funktion namens "OpenFromFile()", was die Methode ist, die wir erwarten. Diese Methode gibt eine IWorkspace-Schnittstelle zurück, siehe folgendes Diagramm:

Beachten Sie, dass IFeatureWorkspace implementiert wird, da wir nach einer Möglichkeit suchen, auf Feature-Class-Informationen zuzugreifen. Dies scheint interessant zu sein. OK, es hat zwei Methoden: OpenFeatureClass und OpenFeatureDataset, die erste ist für den Zugriff auf eine Feature-Class, wenn der Alias-Name der Feature-Class im Voraus bekannt ist, die letztere hingegen dient zum Schleifen von Feature-Classes innerhalb einer Feature-Class Dataset, wenn die Namen der Feature-Classes unbekannt sind, aber der Name des Feature-Class-Datasets angegeben ist.

Durch die Untersuchung der Deklaration von FeatureDataset definiert die IFeatureClassContainer-Schnittstelle den Zugriff auf IFeatureClass über den Index. Dies sind genau die Funktionen, von denen wir hoffen, dass sie alle Feature-Classes innerhalb einer Datei-GDB durchlaufen. Unten ist der Code, um diesen Vorgang zu demonstrieren. Dies ist eine direkte Kopie aus meinem Projekt, das die Entwicklung einer SOE erfordert.

Nun, ich hoffe, dieses Beispiel ist einfach genug, um Ihnen eine Vorstellung von der Verwendung von OMD zu geben. Ehrlich gesagt bin ich mir nicht sicher, ob ich hier einen guten Job gemacht habe. Falls nicht, lass es mich wissen. :)

Lektion 6: ArcGIS Server Object Extension (SOE) und Geoprocessing Tool##

Ich habe seit einiger Zeit keine Gelegenheit mehr, diese Serie zu aktualisieren. Ich habe einige Notizen, die ich für unser Projekt gemacht habe, hier kopiert / eingefügt. Nach meiner persönlichen Erfahrung sind diese beiden serverseitigen Entwicklungsansätze beide nützlich, obwohl SOE populärer und leistungsfähiger zu sein scheint, bietet das Geoverarbeitungstool eine Möglichkeit für Entwickler, die von Arcpy migrieren. Außerdem verfügt das Geoverarbeitungswerkzeug über einen natürlichen Workflow, der bereits für die Bearbeitung von Geoverarbeitungsaufgaben erstellt wurde, deren Ausführung lange dauern kann. Wenn Sie meine Meinung fragen, muss ich sagen "Luke, wende Gewalt an!".

###Serverobjekterweiterung (SOE)###

####Einführung Entwickeln von Serverobjekterweiterungen (SOE) ist die von ESRI angebotene Standardmethode zum Anpassen des Verhaltens des ArcGIS-Servers. Natürlich ist SOE auch ein COM.

Die beste Referenz für diese Funktion, wenn Sie SDK installiert haben, finden Sie in der Hilfedatei:

ArcObjects SDK for ArcGIS 10.4 -> ArcObjects-Hilfe für .NET-Entwickler -> Entwickeln mit ArcGIS -> Erweitern von ArcGIS for Server -> Entwickeln von Serverobjekterweiterungen

Das Memo hier wird Sie NICHT bei der Entwicklung einer SOE anleiten. Stattdessen verfolgen wir das Verfahren zum ordnungsgemäßen Debuggen, Erstellen und Bereitstellen von SOE auf Desktop- und ArcGIS-Servern.

Nun, seien Sie nicht enttäuscht, wenn Sie hierher kommen und erwarten, zu lernen, wie man SOE programmiert. Folgen Sie dem Dokument, das im SDK-Helfer aufgeführt ist, sollten Sie in der Lage sein, dies zu tun. Wenn Sie eine Verknüpfung mit einem vollständigen Beispiel benötigen, können Sie diesen ESRI-Github ausprobieren.

####Debuggen Ohne ArcGIS Server muss das SOE-Debugging auf Unit-Test-Ebene durchgeführt werden. Wenn Sie die SOE-Logik nicht aus der standardmäßigen SOE-Vorlagencodedatei heraustrennen möchten, versuchen Sie es mit einem Mock-up-Framework wie moq. Die ESRI-Entwickler haben ihre Klassen jedoch nicht "mockup-freundlich" gemacht, zum Beispiel ist die ServerLogger-Klasse als versiegelte Klasse definiert, die verhindert, dass die meisten Mockup-Frameworks erben und durch Mock ersetzen.

Wenn Sie über Debug-Kapazität über ArcGIS Server verfügen, finden Sie hier einige Tipps:

  1. Stellen Sie sicher, dass Sie das SOE-Projekt mit dem Administratorkonto öffnen
  2. Stellen Sie beim Anfügen an die ArcGIS Server-Prozesse sicher, dass Sie alle ArcSOC.exe mit dem Typ von . auswählen (Gelang es)

Ich konnte den Code in Init, Shutdown und Construct nicht debuggen. SOE wird im ArcSOC-Container ausgeführt. Da diese 3 Funktionen während des Aufbaus und Herunterfahrens des SOE aufgerufen werden, ist es schwer zu sagen, an welchen Prozess ich mich anhängen kann.

####Bereitstellen der SOE-Bereitstellung erfolgt in zwei Schritten, vorausgesetzt, der SOE-Typ ist MapServer und der Dienst ist REST.

  1. Wenn Sie ein SOE-Projekt in VS erstellen, wird eine "soe"-Datei als Archiv erstellt. Gehen Sie in ArcGIS Server Manager zu Site -> Extensions -> Add Extension, laden Sie diese "soe"-Datei hoch und ArcGIS Server übernimmt alles für Sie, z. B. die COM-Registrierung.
  2. Bereiten Sie Kartendaten in ArcMap vor und veröffentlichen Sie diese als Kartenservices mit der Option "Staging", was bedeutet "Nicht hochladen, nur Daten vorbereiten". Dadurch wird eine SD-Datei unter "C:UsershellocomradeAppDataLocalESRIDesktop10.4Staging" erstellt. Füttern Sie in ArcGIS Server Manager Services -> Publish Service den Assistenten mit der sd-Datei und überprüfen Sie unter Capabilities die in Schritt 1 hochgeladene SOE. Wenn alles gut geht, wird der Kartenservice mit Ihrer SOE gestartet.
  3. Gehen Sie zu "http://localhost:6080/arcgis/rest/services/" und wählen Sie den in Schritt 2 definierten Kartendienst aus, scrollen Sie nach unten zum Ende der Seite, Sie sollten "Unterstützte Erweiterungen" sehen.

####Einführung Entwicklung einer benutzerdefinierten Geoverarbeitungsfunktion wird eine "neue" Funktion von ESRI über ArcPy veröffentlicht? Tatsächlich wurde diese Funktion seit Version 9.3 für ArcObject .Net bereitgestellt. Die Dokumentation war jedoch im Buch "versteckt" und ESRI schien zu schüchtern, diese Funktion den AO-Entwicklern vorzustellen. Sie können nicht einmal eine Vorlage in der Visual Studio-Integration für dieses Feature über das AO .Net SDK finden. Du musst das Ganze von Grund auf neu erarbeiten

Die beste Referenz für diese Funktion, wenn Sie SDK installiert haben, finden Sie in der Hilfedatei:

ArcObjects SDK for ArcGIS 10.4 -> ArcObjects-Hilfe für .NET-Entwickler -> Entwickeln mit ArcGIS -> ArcObjects lernen -> ArcObjects erweitern -> Benutzerdefinierte Geoverarbeitungsfunktionswerkzeuge

Ich hoffe, Sie verstehen jetzt, warum ich sagte, ESRI sei diesbezüglich schüchtern. Sehen Sie die Baumstruktur?

Das Memo hier wird Sie NICHT bei der Erstellung eines solchen Tools anleiten. Stattdessen verfolgen wir das Verfahren zum ordnungsgemäßen Erstellen und Bereitstellen dieses Werkzeugs in ArcMap und auf dem ArcGIS-Server.

Nun, seien Sie nicht enttäuscht, wenn Sie hierher kommen und erwarten, zu lernen, wie man ein solches Tool programmiert. Wenn Sie dem im SDK-Helper aufgelisteten Dokument folgen, sollten Sie dies tun können. Wenn Sie eine Verknüpfung mit einem vollständigen Beispiel benötigen, die im SDK-Hilfsdokument fehlt, sollten Sie diesen ESRI-Github ausprobieren.

Eine Randnotiz: Wenn Sie IGPFunction2 implementieren, kann IsLicensed einfach ohne Bedingung true zurückgeben, wenn Sie sicher sind, dass dieses Tool nicht an Dritte weitergegeben wird, die möglicherweise die Art der Lizenz nicht kennen, insbesondere Erweiterungen, die erforderlich sind. Warum? Wenn Sie dieses Tool auf Desktop, Engine und Server verwenden möchten, müssen Sie alle in einem if überprüfen. sonst wenn. Andernfalls, wenn Sie es vergessen haben und isLicensed false zurückgibt, funktioniert Ihr Tool nicht. Warum einfach ohne Prüfung true von isLicensed zurückgeben und die Hosting-Software (unser Tool ist nur eine DLL) dem Benutzer mitteilen lassen, ob das Tool durch Auslösen einer Ausnahme während der Laufzeit ausgeführt werden kann? :) Es ist jedoch nicht elegant.

####Registrierung Bei einer kompilierungsbereiten Quellcodebasis als verwaltetes COM in VS 2013 würde ich als erstes mit der rechten Maustaste auf den Projektnamen -> Eigenschaften -> Build klicken und "Für COM-Interop registrieren" aktivieren. Dadurch wird der Typ in der Assembly für den COM-Client über das Dienstprogramm RegAsm.exe sichtbar. Wenn dies überprüft wird, generiert der C#-Compiler eine tlb-Datei und verwendet die tlb-Datei, um die Registrierung abzuschließen. Dieser Schritt tut es tatsächlich NICHT klingen für die ArcGIS 10-Serie nicht mehr notwendig. ESRI beschloss, sowohl natives COM als auch verwaltetes COM zu registrieren, ohne das Systemregister über sein eigenes Tool zu verwenden.ESRIRegAsm.exe". Was zum Teufel? Sogar ESRI vertraut der MS-Systemregistrierung nicht mehr, traurig.

"Zusätzliche Produktinformationen müssen bei der Registrierung mit einem Esri-Dienstprogramm namens ESRIRegAsm.exe bereitgestellt werden. ESRIRegAsm.exe ersetzt das standardmäßige Microsoft RegAsm.exe-Dienstprogramm."

Wenn Sie über ein ArcGIS-Klassenbibliotheksprojekt verfügen, das über eine ArcGIS-Vorlage erstellt wurde, erfolgt die Registrierung automatisch als Post-Build-Ereignis. Aus diesem Grund kann das ArcMap-Add-In immer automatisch in ArcMap angezeigt werden. Dies gilt jedoch nicht für unseren Fall, da wir eine GP-Funktion entwickeln, die von ESRI in Bezug auf die VS-Integration nicht so gut unterstützt wird.

Aber es ist ok. ESRI ist nicht so gemein. Durchsuchen Sie einfach den Ordner für Ihre kompilierte DLL, klicken Sie mit der rechten Maustaste darauf, im Kontextmenü, siehe "Registrieren"? Das wird es tun! Ist die Welt perfekt? Nein! Wenn dieser Dialog zur Registrierung angezeigt wird, können Sie das Produkt wie "Desktop" oder "Engine" oder beides sehen. Dann müssen Sie einen für die Registrierung auswählen.

Der ganze Zweck eines GP-Werkzeugs besteht jedoch darin, dass es als GP-Service auf dem ArcGIS-Server arbeiten kann. Wo ist meine ArcGIS-Serverregistrierung? Es stellte sich heraus, dass es zwei ESRIRegAsm.exe gibt! Eine für die 32-Bit-Linie von ESRI, die andere für die 64-Bit-Serverlinie.

32 Bit: C:Programme (x86)Gemeinsame DateienArcGISin

64-Bit: C:ProgrammeGemeinsame DateienArcGISin

Wenn Sie Ihr Tool für den Server registrieren möchten, verwenden Sie die zweite Binärdatei in der Befehlszeile. (Stellen Sie sicher, dass Sie cmd mit Administratorrechten öffnen coz-Befehlszeile wird nicht nach der Bestätigung der Administratorberechtigung gefragt, wie dies bei anderen Software der Fall sein kann, sodass Sie die Fehlermeldung "Kann nicht auf Festplatte schreiben" erhalten). Das habe ich gemacht:

"C:ProgrammeGemeinsame DateienArcGISinesriregasm.exe" c: empGPNetTrace.dll

Ich habe die Option /p: absichtlich ignoriert, sodass ich im Popup-Dialogfeld aufgefordert werde, das Produkt auszuwählen, mit dem ich mich registrieren möchte. Eine Sache, die Sie vielleicht wissen möchten, ist: Sobald die Registrierung abgeschlossen ist und das Produkt eingeschaltet ist, beispielsweise ArcGIS Server, wird diese DLL am registrierten Ort, in unserem Fall unter C:Temp, durch den Prozess gesperrt. Sie können es nicht aktualisieren. Dann mach's NICHT Wenn Sie dll in Ihrem bin- oder obj-Ordner für ein VS-Projekt registrieren, kann VS-Linker keine dll mehr für Sie erstellen.

Zuerst müssen Sie dieses Werkzeug als Toolbox zu ArcMap hinzufügen. Im Katalogfenster. Erstellen Sie eine neue Toolbox unter "Meine Toolbox" und klicken Sie dann mit der rechten Maustaste auf die neu erstellte Toolbox Add->Tool. Dadurch wird eine Liste aller registrierten Toolboxen angezeigt, einschließlich der gerade registrierten. Wie finden Sie unser Tool? Nun, es hängt vom Werkzeug selbst ab.

Die zweite Funktion "GetFunctionNames" ist eine in der Schnittstelle "IGPFunctionFactory" definierte Methode, die erforderlich ist, damit die ESRI-Software den Werkzeugnamen aus der Implementierung dieser Schnittstelle extrahieren kann. Der Name, der in der Toolbox-Liste als Root angezeigt wird, ist "name.Category", was "NetworkNavigation" ist, und der Name des zusätzlichen Tools ist name.DisplayName, was "Network Trace" ist, intern wird dieses Tool nach Name verfolgt .Name, der "TraceNetwork" ist. Jetzt sollten Sie das Werkzeug finden und zu ArcMap hinzufügen können.

Alles klar, das Vorspiel ist fertig. Lass uns debuggen! Da unser Tool als DLL kompiliert wurde, müssen wir den Debugger an die Binärdatei anhängen, die tatsächlich Code in unserer Bibliothek ausführt. Unter VS Debug->Attach to Process. Um dies zu tun, möchten Sie sicherstellen, dass Sie VS mit einem Administratorkonto öffnen.

Angenommen, Sie schaffen es, mit Ihrem Code eine 64-Bit-Hintergrundverarbeitung zu erzielen, bedeutet dies, dass Sie

in deinem Code. Wenn es direkt beim Ausführen fehlschlägt, geht das Gerücht um, dass Ihre DLL nicht richtig bei 64bit ESRIRegAsm.exe registriert wurde. Ich kann dieses Teil nicht auf meinem Desktop zum Laufen bringen, aber vielleicht haben Sie Glück. Wenn dies der Fall ist, müssen Sie den Debugger mit dem Prozess namens . anhängen "RuntimeLocalSerer.exe". Es gibt tatsächlich zwei Prozesse mit demselben Namen. Einer wird für verwaltete CLR ausgeführt, der andere für natives COM. Ich glaube, Sie sollten eine Verbindung mit einem verwalteten herstellen (Überprüfen Sie die Spalte Typ in der Tabelle "Verfügbare Prozesse". Das heißt, Sie können beide anhängen, indem Sie die Strg-Taste auf der Tastatur drücken, während Sie auf den Namen des Prozesses klicken.

Sagen wir, die 64-Bit-Hintergrundverarbeitung funktioniert bei Ihnen nicht gut. Anschließend müssen Sie es in ArcMap deaktivieren. Geoverarbeitung -> Geoverarbeitungsoptionen -> Hintergrundverarbeitung -> Aktivieren, deaktivieren Sie das Kontrollkästchen "Aktivieren", um die Hintergrundverarbeitung zu deaktivieren. Jetzt können Sie den Debugger einfach mit dem ArcMap-Prozess anhängen.


Multi-Root-Workspaces

Arbeitsbereiche mit mehreren Stammverzeichnissen sind eine erweiterte Funktion von VS Code, mit der Sie mehrere verschiedene Ordner als Teil des Arbeitsbereichs konfigurieren können. Anstatt einen Ordner als Arbeitsbereich zu öffnen, öffnen Sie eine <name>.code-workspace-JSON-Datei, die die Ordner des Arbeitsbereichs auflistet. Beispielsweise:

Ein in VS Code geöffneter Multi-Root-Workspace

Hinweis: Der visuelle Unterschied zwischen dem Öffnen eines Ordners und dem Öffnen einer .code-workspace-Datei kann subtil sein. Um Ihnen einen Hinweis darauf zu geben, dass eine .code-Workspace-Datei geöffnet wurde, zeigen einige Bereiche der Benutzeroberfläche (z. B. das Stammverzeichnis des Datei-Explorers) ein zusätzliches (Arbeitsplatz) Suffix neben dem Namen.

Unbenannte Multi-Root-Workspaces

Es ist einfach, Ordner in Ihrem Arbeitsbereich hinzuzufügen oder zu entfernen. Sie können zunächst einen Ordner in VS Code öffnen und später nach Belieben weitere Ordner hinzufügen. Sofern Sie nicht bereits eine .code-Workspace-Datei geöffnet haben, erstellt VS Code beim ersten Hinzufügen eines zweiten Ordners zu einem Workspace automatisch einen "unbenannten" Im Hintergrund verwaltet VS Code automatisch eine untitled.code-workspace-Datei für Sie, die alle Ordner und Arbeitsbereichseinstellungen Ihrer aktuellen Sitzung enthält. Der Arbeitsbereich bleibt "unbenannt", bis Sie sich entscheiden, ihn auf der Festplatte zu speichern.

Ein unbenannter Multi-Root-Workspace, der in VS Code geöffnet wurde

Hinweis: Es gibt wirklich keinen Unterschied zwischen einem unbenannten Arbeitsbereich und einem gespeicherten Arbeitsbereich, außer der Tatsache, dass ein unbenannter Arbeitsbereich automatisch für Sie erstellt und immer wiederhergestellt wird, bis Sie ihn speichern. Unbenannte Arbeitsbereiche löschen wir automatisch (nachdem wir Sie um Bestätigung gebeten haben), wenn Sie ein Fenster schließen, in dem ein unbenannter Arbeitsbereich geöffnet wird.


Empfänger 4.12 für Windows

Hinweis: Citrix empfiehlt, die neueste Version der Citrix Workspace-App herunterzuladen. Version 1904 oder höher enthält kritische Sicherheitsfixes. Weitere Informationen finden Sie im Knowledge Center-Artikel CTX251986

Kompatibel mit
Windows 10, 8.1, 7, 2008R2, Thin PC sowie Windows Server 2016, 2012 und 2012R2.

Prüfsummen ADB1AFF0625F6EE0C9745F6F8C523398CF3F4732EB3D2CA5966E97AE6D57536F

Behoben, um die automatische Aktualisierung des Empfängers zu aktivieren

Aktion erforderlich, um automatische Updates auf Receiver fortzusetzen.
Vor kurzem wurde ein neues Sicherheitszertifikat veröffentlicht, um die Sicherheit von Citrix Receiver weiter zu verbessern. Dieses Zertifikat deaktiviert jedoch die Funktion zur automatischen Aktualisierung des Empfängers. Es ist wichtig, dass Sie Laden Sie das kürzlich veröffentlichte Receiver Auto Update Tool herunter und installieren Sie es, um die Receiver Update-Funktionalität wiederherzustellen.

Die vollständige Liste der Funktionen finden Sie in der Produktdokumentation.

Leistungsstarker Zugriff auf virtuelle Windows-Apps und -Desktops, Zugriff von überall über Ihren Desktop, das Startmenü, die Receiver-Benutzeroberfläche oder den Webzugriff mit Chrome, Internet Explorer oder Firefox.

Citrix Receiver kann auf Domänen- und Nicht-Domänen-PCs, Tablets und Thin Clients verwendet werden. Bietet eine leistungsstarke Nutzung von virtualisierten Skype for Business-, Branchen- und HDX 3D Pro-Engineering-Apps, Multimedia und lokalem App-Zugriff.

Verfügbare Sprachen
Englisch, Französisch, Deutsch, Japanisch, Koreanisch, Russisch, Vereinfachtes Chinesisch, Spanisch und Traditionelles Chinesisch.

Skripts zum Bereitstellen von Citrix Receiver für Windows

Diese ZIP-Datei enthält Beispielskripts zum Bereitstellen und Konfigurieren von Citrix Receiver. Es handelt sich um einen optionalen Download, der von Citrix als Beispiel bereitgestellt wird. Vor der Verwendung müssen IT-Administratoren die Skripte an ihre Umgebung anpassen. Die Deinstallations- und Installationsskripts können wie im Upgrade-Handbuch für Citrix Receiver für Windows (CTX135933) angegeben verwendet werden.

Citrix ADMX/ADML-Vorlagen für den Gruppenrichtlinien-Editor

Diese ZIP-Datei enthält ADMX- und ADML-Dateien zum Bereitstellen und Konfigurieren von Citrix Receiver mit dem Gruppenrichtlinienobjekt-Editor. Es handelt sich um einen optionalen Download, der von IT-Administratoren verwendet werden soll und nicht für Endbenutzer gedacht ist. Die administrativen Vorlagen (ADMX- und ADML-Dateien) können wie im Upgrade-Handbuch für Citrix Receiver für Windows (CTX135933) angegeben verwendet werden.


8 neue Möglichkeiten, um Firstline Worker zu stärken und ihre Arbeitsweise mit Microsoft 365 zu verändern

Unternehmen an der Spitze der digitalen Transformation erkennen, wie wichtig es ist, all ihren Mitarbeitern die richtigen Technologien und Tools zur Verfügung zu stellen. Aus diesem Grund ist in Branchen wie Einzelhandel, Gastgewerbe und Fertigung eine Bewegung im Gange, um die Firstline Workforce – die mehr als 2 Milliarden Menschen weltweit, die in service- oder aufgabenorientierten Rollen arbeiten – digital zu stärken.

Mit Microsoft 365, der Produktivitäts-Cloud der Welt, sind wir in der einzigartigen Position, Unternehmen aller Größen und Branchen dabei zu unterstützen, ihren Mitarbeitern die Tools und das Fachwissen zur Verfügung zu stellen, die sie für ihre optimale Arbeit benötigen, ohne die Sicherheit ihrer Organisation oder ihrer Kunden zu beeinträchtigen ' Daten. Um Firstline-Mitarbeitern die benötigten Tools zur Verfügung zu stellen, müssen Unternehmen einzigartige Benutzererfahrungen, Sicherheit und Compliance sowie IT-Management berücksichtigen.

Microsoft 365 für Firstline-Mitarbeiter

Microsoft 365 kombiniert intuitive, erstklassige Produktivitäts-Apps mit intelligenten Cloud-Diensten, um Ihre Firstline Workforce zu stärken.

Es ist inspirierend zu sehen, wie Branchenführer wie IKEA und Mattress Firm das Mitarbeiterengagement steigern und das Kundenerlebnis verbessern, indem sie Tools wie Microsoft Teams in die Hände ihrer Firstline Workforce geben. IKEA verbindet alle im Unternehmen mit vertrauten Funktionen wie Chat und Videoanrufen und digitalisiert Firstline-Prozesse wie das Schichtmanagement, um Zeit und Kosten zu sparen.

Dieses Video wurde von Microsoft mit Zustimmung der Ingka Group erstellt.

Mattress Firm bietet Firstline-Mitarbeitern Echtzeitzugriff auf die Informationen, Ressourcen und das Fachwissen, die sie benötigen, um Kunden zu begeistern und ein besseres Einkaufserlebnis zu bieten.

Vor der Messe der National Retail Federation (NRF) in der nächsten Woche freuen wir uns, neue Funktionen für Firstline Worker in Microsoft 365 vorstellen zu können.

Neue Tools, die es Firstline-Mitarbeitern erleichtern, zu kommunizieren und Aufgaben zu verwalten

  1. Walkie-Talkie in Teams—Dieses neue Push-to-Talk-Erlebnis ermöglicht eine klare, sofortige und sichere Sprachkommunikation über die Cloud und verwandelt mitarbeiter- oder unternehmenseigene Smartphones und Tablets in ein Walkie-Talkie. Die nativ in Teams integrierte Funktionalität reduziert die Anzahl der Geräte, die Mitarbeiter mitführen müssen, und senkt die Kosten für die IT. Im Gegensatz zu analogen Geräten mit unsicheren Netzwerken müssen sich Kunden keine Sorgen mehr um Übersprechen oder Abhören durch Außenstehende machen. Und da Walkie Talkie über Wi-Fi oder Mobilfunkdaten funktioniert, kann es standortübergreifend verwendet werden. Die Funktion wird in der mobilen App von Teams verfügbar sein und in das neu vorgestellte Samsung Galaxy XCover Pro integriert werden, ein Gerät, das für Mitarbeiter an vorderster Front jeder Branche entwickelt wurde. Walkie Talkie wird in der ersten Hälfte dieses Jahres als private Vorschau in Teams verfügbar sein.

Intuitives Push-to-Talk-Erlebnis, um Teammitglieder über Abteilungen und Standorte hinweg zu verbinden.

  1. Aufgaben-Targeting, Veröffentlichung und BerichterstellungMit Tasks in Teams können Kunden jetzt eine konsistente Ausführung von Filialabläufen in großem Maßstab an allen Standorten eines Unternehmens vorantreiben. Die Unternehmens- und Regionalleitung kann Aufgabenlisten gezielt an die entsprechenden Standorte, wie beispielsweise bestimmte Einzelhandelsgeschäfte, senden und deren Fortschritt durch automatische Echtzeitberichte verfolgen. Manager verfügen über Tools, mit denen sie Aktivitäten in ihren Filialen einfach steuern können, und Firstline Worker haben eine einfache priorisierte Liste, die über ihr persönliches oder vom Unternehmen ausgegebenes Gerät verfügbar ist und ihnen genau zeigt, was als nächstes zu tun ist. Aufgaben zum Targeting, Veröffentlichen und Reporting kommen in Teams in der ersten Hälfte dieses Jahres.

Die Unternehmenszentrale kann Aufgaben standortübergreifend zielen, zuweisen und verfolgen. Firstline-Mitarbeiter können die ihnen zugewiesenen Aufgaben und im gesamten Geschäft anzeigen.

  1. Workforce-Management-Integrationen—Kunden, die führende Workforce-Management-Systeme von Drittanbietern wie Kronos und JDA für Planung und Zeiterfassung verwenden, können jetzt direkt mit der Integration in Shifts über Shifts Graph-APIs und SDK beginnen. Zu den unterstützten Szenarien gehören die Verwaltung von Schichten, Dienstplänen, Dienstplangruppen, Tauschanträgen, Urlaubsanträgen und offenen Schichtanträgen. Der JDA-Connector für Shifts ist Open Source und auf GitHub verfügbar. Der Kronos-Connector für Shifts wird im Laufe dieses Quartals auch auf GitHub verfügbar sein.

Verbesserte Identitäts- und Zugriffsverwaltungsfunktionen, die es IT-Experten erleichtern, die Produktivität und Sicherheit von Firstline Workern zu gewährleisten

  1. SMS-Anmeldung– Mit der SMS-Anmeldung können sich Firstline-Mitarbeiter mit einmaligen SMS-Codes bei ihrem Azure Active Directory (Azure AD)-Konto anmelden, wodurch die Notwendigkeit verringert wird, sich Benutzernamen und Kennwörter für alle ihre Microsoft 365- und benutzerdefinierten Anwendungen zu merken. Nach der Registrierung wird der Benutzer aufgefordert, seine Telefonnummer einzugeben, wodurch ein SMS-Text mit einem Einmalpasswort generiert wird. Die SMS-Anmeldung ist ein Single Sign-On (SSO)-Erlebnis, das es Firstline-Mitarbeitern ermöglicht, nahtlos auf alle Apps zuzugreifen, für die sie autorisiert sind. Diese neue Anmeldemethode kann für ausgewählte Gruppen aktiviert und auf Benutzerebene im My Staff-Portal konfiguriert werden, wodurch die IT entlastet wird.

Einmalige SMS-Codes auf Mobilgeräten, um die Anmeldung für Firstline Worker zu optimieren.

  1. Abmeldung von gemeinsam genutzten Geräten—Viele Firstline Worker verwenden ein einzelnes Tablet oder Mobilgerät, das zwischen den Schichten geteilt wird. Dies kann das Unternehmen vor einzigartige Sicherheitsherausforderungen stellen, wenn verschiedene Mitarbeiter, die Zugriff auf verschiedene Arten von Daten haben, im Laufe eines Tages dasselbe Gerät verwenden. Mit der gemeinsamen Geräteabmeldung können sich Firstline-Mitarbeiter am Ende ihrer Schicht mit einem Klick von allen ihren Microsoft 365- und benutzerdefinierten Anwendungen und Browsersitzungen abmelden – und verhindern, dass auf ihre Daten sowie jeder Zugriff auf Kundendaten zugegriffen werden kann an den nächsten Benutzer dieses Geräts.

Mit einem Klick können sich Firstline Worker von einem gemeinsam genutzten Android-Gerät abmelden und sich von allen Anwendungen und Browsersitzungen abmelden, um zu verhindern, dass sensible Daten mit anderen Gerätebenutzern geteilt werden.

  1. Zugriffssteuerung außerhalb der Schicht für die Teams-App– IT-Administratoren können Teams jetzt so konfigurieren, dass der Zugriff der Mitarbeiter auf die App auf ihrem persönlichen Gerät außerhalb der Arbeitszeit eingeschränkt wird. Diese Funktion trägt dazu bei, dass Mitarbeiter nicht unfreiwillig außerhalb der Schicht arbeiten, und hilft Arbeitgebern, die Arbeitsvorschriften einzuhalten. Diese Funktion wird in diesem Quartal für Kunden eingeführt.

Zeigen Sie eine Nachricht an und/oder deaktivieren Sie den Zugriff auf die Teams-App, wenn Mitarbeiter der ersten Linie außerhalb der Schicht sind.

  1. Delegierte Benutzerverwaltung—Firstline-Manager können das Zurücksetzen von Kennwörtern genehmigen und Mitarbeitern ermöglichen, ihre Telefonnummern für die SMS-Anmeldung zu verwenden, alles über ein einziges anpassbares Portal, das von der IT für Firstline-Manager aktiviert wird. Die delegierte Benutzerverwaltung kann Firstline-Managern Zugriff auf das My Staff-Portal geben, sodass sie Mitarbeiterprobleme lösen können, wodurch die Belastung der IT durch das Identitätsmanagement verringert wird und die Mitarbeiter mit den Apps verbunden bleiben, die sie bei der Arbeit benötigen.

Über das My Staff-Portal ermöglicht die delegierte Benutzerverwaltung einem Firstline-Manager, die Anmeldeinformationen seines Teams zu verwalten und beim Zurücksetzen von Kennwörtern zu helfen.

  1. Eingehende Bereitstellung von SAP SuccessFactors an Azure AD– Der Benutzerbereitstellungsdienst von Azure AD lässt sich jetzt in SAP SuccessFactors integrieren, wodurch es einfacher denn je ist, die Identitäten von Firstline-Workern in großem Umfang für jede Anwendung mit Azure AD zu integrieren und zu verwalten. Dieses Feature – in der öffentlichen Vorschauversion – baut auf der Möglichkeit auf, Benutzer von Workday aus für Azure AD bereitzustellen, ein weiteres beliebtes Human Capital Management (HCM)-System, das bereits allgemein verfügbar ist. Die Integration mit diesen Aufzeichnungssystemen hilft der IT, das Onboarding und die Produktivität der Firstline Worker vom ersten Tag an zu skalieren.

Da der Benutzerbereitstellungsdienst von Azure AD jetzt in SAP SuccessFactors sowie in Workday integriert ist, ist es einfacher denn je, Firstline Workers-Benutzeridentitäten in großem Umfang zu integrieren. Hier gezeigt, können Sie den Bereitstellungszyklus starten und den Bereitstellungsvorgang anhand der Fortschrittsleiste und der Bereitstellungsprotokolle verfolgen.

Alle diese Funktionen werden voraussichtlich in der ersten Hälfte dieses Jahres eingeführt, sofern nicht anders angegeben.

Befähigung von Firstline-Mitarbeitern, einen Wettbewerbsvorteil zu erlangen

Neue Forschungsergebnisse in Zusammenarbeit mit Harvard Business Review Analytic Services heben das ungenutzte Potenzial von Firstline Workern im Einzelhandel hervor.

Vorausschauen

Dies ist nur der nächste Schritt auf unserem Weg, jede Person und jede Organisation auf dem Planeten zu befähigen, mehr zu erreichen. Unser Ziel ist es, Tools und Erfahrungen für den modernen Arbeitsplatz und für Mitarbeiter auf allen Ebenen der Organisation zu entwickeln. Wir werden weiterhin zweckgerichtete Firstline Worker-Funktionen und -Erfahrungen in Partnerschaft mit unseren Kunden und Branchenführern entwickeln und auf den Markt bringen. Und wir werden weiterhin Innovationen entwickeln und Funktionen entwickeln, die die Arbeit vereinfachen, Menschen zusammenbringen und großen und kleinen Unternehmen helfen, mehr zu erreichen. Besuchen Sie uns nächste Woche auf der NRF 2020 am Stand #4501.


ArcObjects .NET – Schließen/Freigeben von FeatureClass, Workspace, Factory – Geografische Informationssysteme

  • Deutsch
  • Englisch
  • Spanisch
  • Französisch
  • Italiano
  • 日本語
  • 한국어
  • Portugiesisch
  • усский
  • 简体 中文
  • Tschechisch
  • Polieren

Innovation und kollaboratives, synchronisiertes Programmmanagement für neue Programme

Integration mechanischer, softwaretechnischer und elektronischer Systemtechnologien für Fahrzeugsysteme

Konsumgüter und Einzelhandel

Produktinnovation durch effektives Management integrierter Rezepturen, Verpackungs- und Herstellungsprozesse

Die Entwicklung neuer Produkte nutzt Daten, um Qualität und Rentabilität zu verbessern und Markteinführungszeiten und Kosten zu reduzieren

Zusammenarbeit in der Lieferkette bei Design, Bau, Wartung und Stilllegung geschäftskritischer Anlagen

Industriemaschinen & Schwermaschinen

Integration der Fertigungsprozessplanung mit Konstruktion und Engineering für die heutige Maschinenkomplexität

Transparenz, Compliance und Rechenschaftspflicht für die Versicherungs- und Finanzbranche

Schiffbau-Innovation zur nachhaltigen Senkung der Kosten für die Entwicklung zukünftiger Flotten

Siemens PLM Software, ein führender Anbieter von Medien- und Telekommunikationssoftware, bietet digitale Lösungen für Spitzentechnologie zur Unterstützung komplexer Produkte in einem sich schnell ändernden Markt.

Medizinprodukte und Pharmazeutika

„Personalisierte Produktinnovation“ durch Digitalisierung, um Marktanforderungen zu erfüllen und Kosten zu senken

Schnellere Markteinführungszeit, weniger Fehler für die Softwareentwicklung

Entfernen Sie Barrieren und wachsen Sie, während Sie Ihr Endergebnis beibehalten. Wir demokratisieren die robustesten digitalen Zwillinge für Ihre kleinen und mittleren Unternehmen.


484 Gedanken zu &ldquoWorkspace Environment Management (WEM) 2106&rdquo

Ich habe ein Problem mit der Bereinigung von wem-Profilen. Es scheint, dass die Profile zu lange Pfade haben und das Bereinigungstool mit “Fehler beim Scannen von Profilen!” fehlschlägt. Wenn ich ein einzelnes Profil scanne und die Dateien mit den längsten Pfaden entferne, funktioniert alles einwandfrei. Gibt es dafür einen Workaround? Wir betreiben 1912 ltsr cu2.

Sakari, ich melde mich hier, weil mir das schon oft begegnet ist. Google Chrome ist berüchtigt für diese wirklich tiefen Unterordnerbäume für seine Daten (mit langen Zeichenfolgen zufälliger Zeichen für einen einzelnen Ordnernamen). Ich glaube, die Ursache des Problems ist die Laufwerkszuordnung und der Kontext der Anwendung. Wenn sich das Profil des Benutzers auf einem Netzlaufwerk wie y: befindet, das servernamesomethingUPM_Profiles zugeordnet ist, wenn eine andere Anwendung (wie WEM) versucht, direkt über den UNC-Pfad auf diese Ordner zuzugreifen, wird die Länge um 40 oder mehr verlängert Zeichen. Ich bin mir nicht sicher, wie ich es lösen soll, dachte aber, es wäre hilfreich zu wissen, wie diese Pfade (die zu lang sind, um zu existieren) erstellt wurden.

Wir haben auf WEM 2012 und den folgenden Ordner aktualisiert
“C:Program Files (x86)NorskaleNorskale Infrastructure ServicesDBSync” existiert nicht mehr. Hast du eine Ahnung, ob das normales Verhalten ist?

Ich vermute, dass sie diesen Ordner entfernt haben, als sie die ältere Agent-Cache-Synchronisierungstechnologie entfernt haben.

Hey Carl, haben Sie Probleme gesehen, bei denen Sie den WEM-Splashscreen deaktivieren, aber er funktioniert nicht, er zeigt immer noch den Splash-Screen beim Anmelden an?


Erforderliche Parameter

Anlagen

Verwenden Sie diesen Parameter, um einen oder mehrere Standorte anzugeben, die als Einrichtungen dienen. Dieser Service identifiziert die beste Einrichtung oder Einrichtungen, um die Bedarfspunkte zu bedienen.

  • url — Geben Sie eine REST-Abfrageanforderung an ein beliebiges ArcGIS Server-Feature, eine Karte oder einen Geoverarbeitungs-Service an, der ein JSON-Feature-Set zurückgibt. Diese Eigenschaft ist optional. Es müssen jedoch entweder Features oder eine URL angegeben werden.
  • Features — Geben Sie ein Array von Features an. Diese Eigenschaft ist optional. Es müssen jedoch entweder die Features oder die URL-Eigenschaft angegeben werden.

    Geometrie —Geben Sie die Eingabepunktgeometrie an, die x- und y-Eigenschaften zusammen mit einer SpatialReference-Eigenschaft enthält. Wenn die SpatialReference-Eigenschaft für das gesamte JSON definiert ist, muss diese Eigenschaft nicht für jede Geometrie definiert werden. Dadurch wird die Größe der JSON-Eingabe verringert, wenn die Eingabe viele Funktionen enthält, und die Leistung verbessert. Diese Eigenschaft ist nicht erforderlich, wenn sich die Koordinaten im selben Raumbezug wie Ihr Netzwerk-Dataset befinden. Wenn sich die Koordinaten in einem anderen Raumbezug befinden, müssen Sie die bekannte ID (WKID) des Raumbezugs angeben. Siehe geografisches Koordinatensystem und projiziertes Koordinatensystem, um WKID-Werte nachzuschlagen.

Als bewährte Methode wird empfohlen, die SpatialReference explizit anzugeben und sie für die gesamte JSON anstelle jeder einzelnen Geometrie anzugeben.

Attribute für Einrichtungen

Beim Definieren der Einrichtungen können Sie mit den folgenden Attributen Eigenschaften für jede Einrichtung festlegen, z. B. ihren Namen oder Typ:

Der Name der Einrichtung. Der Name ist im Namen der Ausgabezuordnungszeilen enthalten, wenn die Einrichtung Teil der Lösung ist.

  • 0 (Kandidat) – Eine Einrichtung, die Teil der Lösung sein kann.
  • 1 (Erforderlich) – Eine Einrichtung, die Teil der Lösung sein muss.
  • 2 (Konkurrent) – Eine konkurrierende Einrichtung, die potenziell die Nachfrage aus Ihren Einrichtungen entfernt. Wettbewerbereinrichtungen sind spezifisch für die Problemtypen Maximierung des Marktanteils und Zielmarktanteils, sie werden bei anderen Problemtypen ignoriert.

Die relative Gewichtung der Fazilität, die verwendet wird, um die Attraktivität, Erwünschtheit oder Verzerrung einer Fazilität im Vergleich zu einer anderen zu bewerten.

Ein Wert von 2,0 kann beispielsweise die Präferenz von Kunden erfassen, die im Verhältnis 2 zu 1 in einer Einrichtung einkaufen gegenüber einer anderen Einrichtung. Zu den Faktoren, die sich möglicherweise auf das Gewicht der Einrichtung auswirken, gehören die Quadratmeterzahl, die Nachbarschaft und das Alter des Gebäudes. Andere Gewichtungswerte als eins werden nur von den Problemtypen "Marktanteil maximieren" und "Ziel-Marktanteil" berücksichtigt, sie werden in anderen Problemtypen ignoriert.

Der Impedanzwert, bei dem die Suche nach Bedarfspunkten von einer bestimmten Einrichtung beendet werden soll. Der Bedarfspunkt kann keiner Einrichtung zugewiesen werden, die über dem hier angegebenen Wert liegt.

Mit diesem Attribut können Sie für jeden Bedarfspunkt einen anderen Cutoff-Wert angeben. Beispielsweise stellen Sie möglicherweise fest, dass Menschen in ländlichen Gebieten bereit sind, eine Entfernung von bis zu 16 km zurückzulegen, um eine Einrichtung zu erreichen, während Städter nur bis zu 3 km zurücklegen. Sie können dieses Verhalten modellieren, indem Sie den Cutoff-Wert für alle Bedarfspunkte in ländlichen Gebieten auf 10 und den Cutoff-Wert der Bedarfspunkte in städtischen Gebieten auf 2 setzen.

Das Feld "Kapazität" ist spezifisch für den Problemtyp "Maximierte kapazitive Abdeckung", die anderen Problemtypen ignorieren dieses Feld.

Die Kapazität gibt an, wie viel gewichtete Nachfrage die Anlage decken kann. Überschüssiger Bedarf wird einer Einrichtung nicht zugeteilt, selbst wenn dieser Bedarf innerhalb des standardmäßigen Messgrenzwerts der Einrichtung liegt.

Jeder dem Feld Capacity zugewiesene Wert überschreibt den Parameter Default Capacity ( Default_Capacity in Python) für die angegebene Einrichtung.

Geben Sie die Richtung an, in der ein Fahrzeug ankommen und von der Einrichtung abfahren kann.

Als Wert dieses Attributs muss eine der ganzen Zahlen angegeben werden, die in der Spalte Codierter Wert in der folgenden Tabelle aufgeführt sind. Die Werte in der Spalte Einstellung sind die beschreibenden Namen für CurbApproach-Attributwerte, die Sie möglicherweise bei der Verwendung der Erweiterungssoftware ArcGIS Network Analyst gesehen haben.

Das Fahrzeug kann die Anlage in beide Richtungen an- und abfahren, sodass eine Kehrtwende an der Anlage zulässig ist. Diese Einstellung kann gewählt werden, wenn es möglich und erwünscht ist, dass Ihr Fahrzeug auf der Anlage wenden kann. Diese Entscheidung kann von der Breite der Straße und dem Verkehrsaufkommen abhängen oder ob die Anlage über einen Parkplatz verfügt, auf dem Fahrzeuge einfahren und wenden können.

Alle Ankunfts- und Abfahrtskombinationen sind mit der Bordsteinkante Beidseitig zulässig.

Wenn sich das Fahrzeug der Anlage nähert und diese verlässt, muss sich die Anlage auf der rechten Fahrzeugseite befinden. Eine Kehrtwende ist verboten. Dies wird typischerweise für Fahrzeuge wie Busse verwendet, die mit der Bushaltestelle auf der rechten Seite ankommen müssen.

Die zulässige Ankunfts- und Abfahrtskombination für die rechte Seite des Fahrzeugbordsteins wird angezeigt.

Wenn sich das Fahrzeug der Anlage nähert und sie verlässt, muss sich die Anlage auf der linken Seite des Fahrzeugs befinden. Eine Kehrtwende ist verboten. Dies wird typischerweise für Fahrzeuge wie Busse verwendet, die mit der Bushaltestelle auf der linken Seite ankommen müssen.

Die zulässige Ankunfts- und Abfahrtskombination für die linke Fahrzeugbordsteinanfahrt wird angezeigt.

Wenn sich das Fahrzeug der Anlage nähert, kann sich die Anlage auf beiden Seiten des Fahrzeugs befinden, bei der Abfahrt muss das Fahrzeug jedoch in die gleiche Richtung weiterfahren, in die es angekommen ist. Eine Kehrtwende ist verboten.

Die zulässigen Ankunfts- und Abfahrtskombinationen für den Bordsteinanflug ohne Wenden werden angezeigt.

Das Attribut CurbApproach ist für beide Arten von nationalen Fahrnormen ausgelegt: Rechtsverkehr (USA) und Linksverkehr (Großbritannien). Betrachten Sie zunächst einen Vorfall auf der linken Seite eines Fahrzeugs. Es befindet sich immer auf der linken Seite, egal ob das Fahrzeug auf der linken oder rechten Fahrbahnhälfte fährt. Was sich mit den nationalen Fahrnormen ändern kann, ist Ihre Entscheidung, sich einem Unfall aus einer von zwei Richtungen zu nähern, dh er landet auf der rechten oder linken Seite des Fahrzeugs. Wenn Sie beispielsweise zu einem Vorfall gelangen möchten und keine Fahrspur zwischen dem Fahrzeug und dem Vorfall vorhanden ist, wählen Sie 1 (Rechte Fahrzeugseite) in den USA und 2 (Linke Fahrzeugseite) in Großbritannien.

Bei Rechtsverkehr ist die Bordsteinkante, die das der Anlage am nächsten liegende Fahrzeug verlässt, die rechte Fahrzeugseite. Bei Linksverkehr ist die Bordsteinanfahrt, die das der Anlage am nächsten liegende Fahrzeug verlässt, die linke Fahrzeugseite.

Die Richtung, in die sich ein Punkt bewegt. Die Einheiten sind Grad und werden im Uhrzeigersinn vom wahren Norden aus gemessen. Dieses Feld wird in Verbindung mit dem BearingTol-Feld verwendet.

Peilungsdaten werden normalerweise automatisch von einem mobilen Gerät gesendet, das mit einem GPS-Empfänger ausgestattet ist. Versuchen Sie, Peilungsdaten einzuschließen, wenn Sie einen sich bewegenden Eingabeort laden, z. B. einen Fußgänger oder ein Fahrzeug.

Die Verwendung dieses Felds verhindert tendenziell das Hinzufügen von Positionen zu den falschen Kanten, was beispielsweise auftreten kann, wenn sich ein Fahrzeug in der Nähe einer Kreuzung oder einer Überführung befindet. Die Peilung hilft dem Werkzeug auch, zu bestimmen, auf welcher Straßenseite sich der Punkt befindet.

Der Peilungstoleranzwert erstellt einen Bereich akzeptabler Peilungswerte, wenn sich verschiebende Punkte an einer Kante mithilfe des Felds Peilung lokalisieren. Liegt der Wert im Feld Peilung im Bereich akzeptabler Werte, die aus der Peilungstoleranz an einer Kante generiert werden, kann der Punkt dort als Netzwerkposition hinzugefügt werden, andernfalls wird der nächste Punkt an der nächstnächsten Kante ausgewertet.

Die Einheiten sind in Grad und der Standardwert ist 30. Die Werte müssen größer als 0 und kleiner als 180 sein. Ein Wert von 30 bedeutet, dass beim Versuch von Network Analyst, eine Netzwerkposition an einer Kante hinzuzufügen, ein Bereich akzeptabler Peilungswerte 15 Grad zu beiden Seiten der Kante (links und rechts) und in beiden digitalisierten Richtungen der Kante erzeugt.

Dieses Feld wird nur im Berechnungsprozess verwendet, wenn die Felder Bearing und BearingTol ebenfalls Werte enthalten. Die Eingabe eines NavLatency-Feldwerts ist jedoch optional, selbst wenn Werte in Bearing und BearingTol vorhanden sind. NavLatency gibt an, wie viel Kosten voraussichtlich ab dem Zeitpunkt vergehen werden, an dem GPS-Informationen von einem fahrenden Fahrzeug an einen Server gesendet werden und ab dem Zeitpunkt, an dem die verarbeitete Route vom Navigationsgerät des Fahrzeugs empfangen wird.

Die Einheiten der NavLatency sind dieselben wie die Einheiten des Impedanzattributs.

Syntaxbeispiele für Einrichtungen

Syntax zum Angeben von Einrichtungen mithilfe einer JSON-Struktur für Funktionen

Syntax zum Angeben von Einrichtungen mithilfe einer URL, die eine JSON-Antwort zurückgibt

Beispiele für Einrichtungen

Beispiel 1: Angeben von Einrichtungen im selben Raumbezug wie Ihr Netzwerk-Dataset mithilfe einer JSON-Struktur. Das Beispiel zeigt auch, wie einige Attribute für die Vorfälle angegeben werden.

Beispiel 2: Angeben von Einrichtungen im Web Mercator-Raumbezug mithilfe einer JSON-Struktur

Beispiel 3: Angeben von Einrichtungen mithilfe einer URL

Die URL führt eine Abfrage nach einigen Features von einem Kartendienst durch. Es kann auch eine URL angegeben werden, die Features von einem Feature-Service abfragt.

Nachfragepunkte

Verwenden Sie diesen Parameter, um einen oder mehrere Bedarfspunkte anzugeben. Der Dienst identifiziert die besten Einrichtungen hauptsächlich basierend darauf, wie die Einrichtungen die angegebenen Bedarfspunkte bedienen.

  • url — Geben Sie eine REST-Abfrageanforderung an ein beliebiges ArcGIS Server-Feature, eine Karte oder einen Geoverarbeitungs-Service an, der ein JSON-Feature-Set zurückgibt. Diese Eigenschaft ist optional. Es müssen jedoch entweder Features oder eine URL angegeben werden.
  • Features — Geben Sie ein Array von Features an. Diese Eigenschaft ist optional. Es müssen jedoch entweder die Features oder die URL-Eigenschaft angegeben werden.

    Geometrie —Geben Sie die Eingabepunktgeometrie an, die x- und y-Eigenschaften zusammen mit einer SpatialReference-Eigenschaft enthält. Wenn die SpatialReference-Eigenschaft für das gesamte JSON definiert ist, muss diese Eigenschaft nicht für jede Geometrie definiert werden. Dadurch wird die Größe der JSON-Eingabe verringert, wenn die Eingabe viele Funktionen enthält, und die Leistung verbessert. Diese Eigenschaft ist nicht erforderlich, wenn sich die Koordinaten im selben Raumbezug wie Ihr Netzwerk-Dataset befinden. Wenn sich die Koordinaten in einem anderen Raumbezug befinden, müssen Sie die bekannte ID (WKID) des Raumbezugs angeben. Siehe geografisches Koordinatensystem und projiziertes Koordinatensystem, um WKID-Werte nachzuschlagen.

Als bewährte Methode wird empfohlen, die SpatialReference explizit anzugeben und sie für die gesamte JSON anstelle jeder einzelnen Geometrie anzugeben.

Attribute für demand_points

Wenn Sie die Bedarfspunkte angeben, können Sie für jeden die Eigenschaften wie Name oder Gewicht festlegen, indem Sie die folgenden Attribute verwenden:

Der Name des Bedarfspunkts. Der Name ist im Namen der Ausgabezuordnungslinie oder -linien enthalten, wenn der Bedarfspunkt Teil der Lösung ist.

Der Name der Gruppe, zu der der Bedarfspunkt gehört. Dieses Feld wird für die Problemtypen "Kapazierte Abdeckung maximieren", "Zielmarktanteil" und "Marktanteil maximieren" ignoriert.

Wenn Bedarfspunkte einen gemeinsamen Gruppennamen haben, ordnet der Solver alle Mitglieder der Gruppe derselben Einrichtung zu. (Wenn Einschränkungen, wie z. B. eine Grenzentfernung, verhindern, dass einer der Bedarfspunkte in der Gruppe dieselbe Einrichtung erreicht, wird keiner der Bedarfspunkte zugewiesen.)

Die relative Gewichtung des Bedarfspunkts. Ein Wert von 2,0 bedeutet, dass der Bedarfspunkt doppelt so wichtig ist wie einer mit einer Gewichtung von 1,0. Wenn Bedarfspunkte beispielsweise Haushalte darstellen, kann das Gewicht die Anzahl der Personen in jedem Haushalt angeben.

Der Impedanzwert, bei dem die Suche nach Bedarfspunkten von einer bestimmten Einrichtung beendet werden soll. Der Bedarfspunkt kann keiner Einrichtung zugewiesen werden, die über dem hier angegebenen Wert liegt.

Mit diesem Attribut können Sie für jeden Bedarfspunkt einen Cutoff-Wert angeben. Beispielsweise stellen Sie möglicherweise fest, dass Menschen in ländlichen Gebieten bereit sind, bis zu 16 km weit zu fahren, um eine Einrichtung zu erreichen, während Menschen in städtischen Gebieten nur bis zu 3 km zurücklegen. Sie können dieses Verhalten modellieren, indem Sie den Cutoff-Wert für alle Bedarfspunkte in ländlichen Gebieten auf 10 und den Cutoff-Wert der Bedarfspunkte in städtischen Gebieten auf 2 setzen.

Die Einheiten für diesen Attributwert werden durch den Parameter measure_units angegeben.

Ein Wert für dieses Attribut überschreibt den Standardsatz für die Analyse mit dem Parameter default_measurement_cutoff.Der Standardwert ist Null , was dazu führt, dass der vom Parameter default_measurement_cutoff festgelegte Standardwert für alle Bedarfspunkte verwendet wird.

Überschreiben Sie den Standardwert, der für die Analyse durch den Parameter measure_transformation_model festgelegt wurde.

Überschreiben Sie den Standardwert, der für die Analyse durch den Parameter measure_transformation_model festgelegt wurde.

Geben Sie die Richtung an, in der ein Fahrzeug am Bedarfspunkt ankommen oder davon abfahren kann. Als Wert dieses Attributs muss eine der ganzen Zahlen angegeben werden, die in der Spalte Codierter Wert in der folgenden Tabelle aufgeführt sind. Die Werte in der Spalte Einstellung sind die beschreibenden Namen für die CurbApproach-Attributwerte, die Sie möglicherweise bei Verwendung der Erweiterungssoftware ArcGIS Network Analyst gesehen haben.

Das Fahrzeug kann den Bedarfspunkt in beide Richtungen anfahren und verlassen.

Alle Ankunfts- und Abfahrtskombinationen sind mit der Bordsteinkante Beidseitig zulässig.

Wenn sich das Fahrzeug dem Bedarfspunkt nähert oder verlässt, muss sich der Bedarfspunkt auf der rechten Fahrzeugseite befinden. Dies wird typischerweise für Fahrzeuge wie Busse verwendet, die mit der Bushaltestelle auf der rechten Seite ankommen müssen.

Die zulässige Ankunfts- und Abfahrtskombination für die rechte Seite des Fahrzeugbordsteins wird angezeigt.

Wenn sich das Fahrzeug dem Bedarfspunkt nähert oder verlässt, muss sich der Bedarfspunkt auf der linken Seite des Fahrzeugs befinden. Dies wird typischerweise für Fahrzeuge wie Busse verwendet, die mit der Bushaltestelle auf der linken Seite ankommen müssen.

Die zulässige Ankunfts- und Abfahrtskombination für die linke Fahrzeugbordsteinanfahrt wird angezeigt.

Wenn sich das Fahrzeug dem Bedarfspunkt nähert, kann sich der Bedarfspunkt auf beiden Seiten des Fahrzeugs befinden, bei der Abfahrt muss das Fahrzeug jedoch in die gleiche Richtung weiterfahren, in die es angekommen ist. Eine Kehrtwende ist verboten.

Die zulässigen Ankunfts- und Abfahrtskombinationen für den Bordsteinanflug ohne Wenden werden angezeigt.

Das Attribut CurbApproach ist für beide Arten von nationalen Fahrnormen ausgelegt: Rechtsverkehr (USA) und Linksverkehr (Großbritannien). Betrachten Sie zunächst einen Bedarfspunkt auf der linken Seite eines Fahrzeugs. Es befindet sich immer auf der linken Seite, egal ob das Fahrzeug auf der linken oder rechten Fahrbahnhälfte fährt. Was sich mit den nationalen Fahrnormen ändern kann, ist Ihre Entscheidung, sich einem Bedarfspunkt aus einer von zwei Richtungen zu nähern, dh er landet auf der rechten oder linken Seite des Fahrzeugs. Wenn Sie beispielsweise an einem Bedarfspunkt ankommen möchten und keine Fahrspur zwischen dem Fahrzeug und dem Bedarfspunkt haben, wählen Sie 1 (rechte Fahrzeugseite) in den Vereinigten Staaten und 2 (linke Fahrzeugseite) in den Vereinigten Staaten Königreich.

Bei Rechtsverkehr ist die Bordsteinanfahrt, die das Fahrzeug am nächsten zum Bedarfspunkt verlässt, auf der rechten Seite des Fahrzeugs. Bei Linksverkehr ist die Bordsteinanfahrt, die das dem Bedarfspunkt am nächsten liegende Fahrzeug verlässt, die linke Seite des Fahrzeugs.

Die Richtung, in die sich ein Punkt bewegt. Die Einheiten sind Grad und werden im Uhrzeigersinn vom wahren Norden aus gemessen. Dieses Feld wird in Verbindung mit dem BearingTol-Feld verwendet.

Peilungsdaten werden normalerweise automatisch von einem mobilen Gerät gesendet, das mit einem GPS-Empfänger ausgestattet ist. Versuchen Sie, Peilungsdaten einzuschließen, wenn Sie einen sich bewegenden Eingabeort laden, z. B. einen Fußgänger oder ein Fahrzeug.

Die Verwendung dieses Felds verhindert tendenziell das Hinzufügen von Positionen zu den falschen Kanten, was beispielsweise auftreten kann, wenn sich ein Fahrzeug in der Nähe einer Kreuzung oder einer Überführung befindet. Die Peilung hilft dem Werkzeug auch, zu bestimmen, auf welcher Straßenseite sich der Punkt befindet.

Der Peilungstoleranzwert erstellt einen Bereich akzeptabler Peilungswerte, wenn sich verschiebende Punkte an einer Kante mithilfe des Felds Peilung lokalisieren. Liegt der Wert im Feld Peilung im Bereich akzeptabler Werte, die aus der Peilungstoleranz an einer Kante generiert werden, kann der Punkt dort als Netzwerkposition hinzugefügt werden, andernfalls wird der nächste Punkt an der nächstnächsten Kante ausgewertet.

Die Einheiten sind in Grad und der Standardwert ist 30. Die Werte müssen größer als 0 und kleiner als 180 sein. Ein Wert von 30 bedeutet, dass beim Versuch von Network Analyst, eine Netzwerkposition an einer Kante hinzuzufügen, ein Bereich akzeptabler Peilungswerte 15 Grad zu beiden Seiten der Kante (links und rechts) und in beiden digitalisierten Richtungen der Kante erzeugt.

Dieses Feld wird nur im Berechnungsprozess verwendet, wenn die Felder Bearing und BearingTol ebenfalls Werte enthalten. Die Eingabe eines NavLatency-Feldwerts ist jedoch optional, selbst wenn Werte in Bearing und BearingTol vorhanden sind. NavLatency gibt an, wie viel Kosten voraussichtlich ab dem Zeitpunkt vergehen werden, an dem GPS-Informationen von einem fahrenden Fahrzeug an einen Server gesendet werden und ab dem Zeitpunkt, an dem die verarbeitete Route vom Navigationsgerät des Fahrzeugs empfangen wird.

Die Einheiten der NavLatency sind dieselben wie die Einheiten des Impedanzattributs.

Syntaxbeispiele für demand_points

Syntax zum Angeben von Bedarfspunkten mithilfe einer JSON-Struktur für Features

Syntax zum Angeben von Bedarfspunkten mithilfe einer URL, die eine JSON-Antwort zurückgibt

Beispiele für demand_points

Beispiel 1: Angeben von Bedarfspunkten im Raumbezug des Netzwerk-Datasets mithilfe einer JSON-Struktur. Das Beispiel zeigt auch, wie einige Attribute für die Bedarfspunkte angegeben werden.

Beispiel 2: Angeben von Bedarfspunkten im Web Mercator-Raumbezug mithilfe einer JSON-Struktur

Beispiel 3: Angeben von Bedarfspunkten mithilfe einer URL

Die URL führt eine Abfrage nach einigen Features von einem Kartendienst durch. Es kann auch eine URL angegeben werden, die Features von einem Feature-Service abfragt.

Zeichen

Verwenden Sie diesen Parameter, um ein Token anzugeben, das die Identität eines Benutzers bereitstellt, der über die Berechtigungen zum Zugriff auf den Dienst verfügt. Auf der Seite "Zugriff auf Dienste" finden Sie weitere Informationen darüber, wie ein solches Zugriffstoken erhalten werden kann.

Beispiel (ersetzen Sie <yourToken> durch ein gültiges Token):

Verwenden Sie diesen Parameter, um das Antwortformat anzugeben. Der Parameter kann html , json oder pjson als Argumente haben, zum Beispiel f=json . Der pjson-Wert wird zum Drucken der JSON-Antwort in einem hübschen Format verwendet.


Fehlerbehebung bei blockierten .NET Framework-Installationen und -Deinstallationen

Wenn Sie das Web- oder Offline-Installationsprogramm für .NET Framework 4.5 oder höher ausführen, tritt möglicherweise ein Problem auf, das die Installation von .NET Framework verhindert oder blockiert. Die folgende Tabelle listet mögliche Blockierungsprobleme auf und enthält Links zu Informationen zur Fehlerbehebung.

In Windows 8 und höher ist .NET Framework eine Betriebssystemkomponente und kann nicht unabhängig deinstalliert werden. Updates für das .NET Framework erscheinen in der Installierte Updates Registerkarte der Systemsteuerung Programme und Funktionen App. Bei Betriebssystemen, auf denen das .NET Framework nicht vorinstalliert ist, erscheint das .NET Framework im Ein Programm deinstallieren oder ändern Registerkarte (oder die Hinzufügen entfernen Programme Registerkarte) der Programm und Funktionen App in der Systemsteuerung. Informationen zu den Windows-Versionen, auf denen .NET Framework vorinstalliert ist, finden Sie unter Systemanforderungen.

Da die 4.x-Versionen von .NET Framework direkte Updates sind, können Sie eine frühere Version von .NET Framework 4.x nicht auf einem System installieren, auf dem bereits eine neuere Version installiert ist. Auf einem System mit Windows 10 Fall Creators Update können Sie beispielsweise .NET Framework 4.6.2 nicht installieren, da .NET Framework 4.7.1 mit dem Betriebssystem vorinstalliert ist.

Sie können bestimmen, welche Versionen von .NET Framework auf einem System installiert sind. Weitere Informationen finden Sie unter Gewusst wie: Bestimmen, welche .NET Framework-Versionen installiert sind.

In dieser Tabelle bezieht sich 4.5.x auf .NET Framework 4.5 und seine Point-Releases 4.5.1 und 4.5.2, 4.6.x bezieht sich auf .NET Framework 4.6 und seine Point-Releases 4.6.1 und 4.6.2 4. , 4.7.x bezieht sich auf .NET Framework 4.7 und seine Punktversionen 4.7.1 und 4.7.2, und 4.8 bezieht sich auf .NET Framework 4.8.

Probleme mit der Programmkompatibilität

Die Installation von .NET Framework 4.5 oder seiner Point Releases schlägt mit einem 1603-Fehlercode fehl oder blockiert, wenn es im Windows-Programmkompatibilitätsmodus ausgeführt wird. Das Programmkompatibilitätsassistent weist darauf hin, dass .NET Framework möglicherweise nicht richtig installiert wurde, und fordert Sie auf, es mit der empfohlenen Einstellung (Programmkompatibilitätsmodus) erneut zu installieren. Der Programmkompatibilitätsmodus könnte auch vom Programmkompatibilitäts-Assistenten bei früheren fehlgeschlagenen oder abgebrochenen Versuchen, das .NET Framework-Setup auszuführen, festgelegt worden sein.

Das .NET Framework-Installationsprogramm kann nicht im Programmkompatibilitätsmodus ausgeführt werden. Um dieses Blockierungsproblem zu beheben, müssen Sie den Registrierungs-Editor verwenden, um sicherzustellen, dass die Einstellung für den Kompatibilitätsmodus nicht systemweit aktiviert ist:

Wählen Sie das Start und wählen Sie dann Lauf.

In dem Lauf Dialogfeld, geben Sie "regedit" ein und wählen Sie dann OK.

Navigieren Sie im Registrierungseditor zu den folgenden Unterschlüsseln:

HKEY_CURRENT_USERSOFTWAREMicrosoftWindows NTCurrentVersionAppCompatFlagsCompatibility AssistantPersisted

Suchen Sie in der Spalte Name nach den Download-Namen für .NET Framework 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1 oder 4.7.2, je nachdem, welche Version Sie verwenden installieren und löschen Sie diese Einträge. Informationen zu Downloadnamen finden Sie im Artikel Installieren von .NET Framework für Entwickler.

Führen Sie das .NET Framework-Installationsprogramm für Version 4.5, 4.5.1, 4.5.2 oder 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1 oder 4.7.2 erneut aus.


Schau das Video: How to set environments in ArcMap (Oktober 2021).