skriptgesteuerten Parameter<\/A> gefunden:<\/P> <\/P>
import arcpy
scratchGDB = arcpy.CreateScratchName("xyz",".gdb","Workspace",arcpy.env.scratchFolder)
arcpy.AddMessage('Verwende temporäre GDB {}'.format(scratchGDB))
return scratchGDB<\/code><\/pre><P> <\/P><P>Der temporäre Ordner wird ähnlich gefunden:<\/P><P> <\/P><pre class="lia-code-sample language-python"><code>import arcpy
scratchFolder = str(arcpy.env.scratchFolder)
arcpy.AddMessage('Verwende temporären Ordner {}'.format(scratchFolder))
return scratchFolder<\/code><\/pre><P> <\/P><P>Wenn als Web-Tool geteilt zeigt das Protokoll diese Meldungen:<\/P><P><STRONG>Verwende temporäre GDB C:\Users\arcgis\AppData\Local\Temp\scratch\xx0.gdb<\/STRONG><BR \/><STRONG>Verwende temporären Ordner C:\Users\arcgis\AppData\Local\Temp\scratch<\/STRONG><\/P><P>Jetzt der kraftvolle Teil: Verwendung von ArcPy in einem <A title="Shutdown Scripts" href="https:\/\/docs.safe.com\/fme\/2022.0\/html\/DataInterop_Documentation/FME_Workbench/Workbench/Startup_and_Shutdown_Python_Scripts.htm" target="_blank" rel="noopener nofollow noreferrer">Shutdown-Skript<\/A>, um den Lokator-Dienst neu zu erstellen. Der Lokator-Erstellungscode stammt ursprünglich aus einer Kopie eines Verlaufsobjekts nach einem Create Locator Tool-Lauf, der Rest nur aus dem Lesen der Hilfe.<\/P><P> <\/P><pre class="lia-code-sample language-python"><code># Wenn es Bearbeitungen gibt, dann den Portal-Lokator neu erstellen
import arcpy
import datetime
import fme
import os
import pytz
scratchGDB = fme.macroValues['ScratchGDB']
scratchFolder = fme.macroValues['ScratchFolder']
portalURL = fme.macroValues['PortalURL']
serverURL = fme.macroValues['ServerURL']
portalUser = fme.macroValues['PortalUser']
portalPassword = fme.macroValues['PortalPassword']
arcpy.env.workspace = scratchGDB
arcpy.env.overwriteOutput = True
if arcpy.Exists('Edits') and arcpy.Exists('AddressesWithUnits'):
# Erstelle oder erstelle den Lokator neu wenn es Datenänderungen gibt
arcpy.geocoding.CreateLocator("USA",
r"{}\\AddressesWithUnits PointAddress".format(scratchGDB),
"'PointAddress.HOUSE_NUMBER AddressesWithUnits.Full_Address_Number';"+
"'PointAddress.STREET_NAME AddressesWithUnits.Street_Name';"+
"'PointAddress.STREET_SUFFIX_TYPE AddressesWithUnits.Street_Type';"+
"'PointAddress.SUB_ADDRESS_UNIT AddressesWithUnits.Unit_Number';"+
"'PointAddress.NEIGHBORHOOD AddressesWithUnits.Neighborhood';"+
"'PointAddress.CITY AddressesWithUnits.City';"+
"'PointAddress.SUBREGION AddressesWithUnits.County';"+
"'PointAddress.REGION AddressesWithUnits.Region';"+
"'PointAddress.POSTAL AddressesWithUnits.ZIP_Code';"+
"'PointAddress.COUNTRY AddressesWithUnits.Country';",
r"{}\\SanFrancisco".format(scratchFolder),
"ENG",None,None,None,"GLOBAL_HIGH")
# Erstelle den SD Entwurf und SD
locator_path = os.path.join(scratchFolder,'SanFrancisco')
sddraft_file = os.path.join(scratchFolder,'SanFrancisco.sddraft')
sd_file = os.path.join(scratchFolder,'SanFrancisco.sd')
service_name = 'SanFrancisco'
pst = pytz.timezone('US\\Pacific')
sfNow = datetime.datetime.now(pst)
sfNowStr = sfNow.strftime('%Y:%m:%d %H:%M:%S')
summary = 'Point Address With Units locator for the City of San Francisco updated at {} PST'.format(sfNowStr)
summary += '\\nBuilt from the Socrata data source: https:\/\/data.sfgov.org\\/Geographic-Locations-and-Boundaries\\/Addresses-with-Units-Enterprise-Addressing-System\\/ramy-di5m'
tags = 'San Francisco,EAS'
analyze_messages = arcpy.CreateGeocodeSDDraft(locator_path,
sddraft_file,
service_name,
copy_data_to_server = True,
summary = summary,
tags = tags,
max_result_size=50,
max_batch_size=1000,
suggested_batch_size=150,
overwrite_existing_service=True)
# Den Locator hochladen
if analyze_messages['errors'] == {}:
arcpy.SignInToPortal(portalURL,portalUser,portalPassword)
arcpy.server.StageService(sddraft_file,sd_file)
arcpy.server.UploadServiceDefinition(sd_file,serverURL)
# Die temporäre GDB bereinigen
try:
arcpy.management.Delete(scratchGDB)
except:
pass
Das ist also das ETL-Tool, das ich als Web Tool veröffentlicht habe. Bevor wir dazu kommen, wie wir das Web Tool orchestrieren, habe ich ein paar Tipps zum Erstellen und Veröffentlichen.<\/P>
- Das ETL-Tool ist parameterlos, was die Geoverarbeitungsumgebung betrifft, weil ich alle Eingaben so eingestellt habe, dass sie nicht<\/EM> veröffentlicht werden. Das umgeht ein Verhalten mit einer Eingabe-CSV-Datei, die sich an einer URL befindet: ArcGIS Enterprise kann eine URL nicht als Datenspeicher registrieren oder die Daten zur Laufzeit auf den Server kopieren, also verstecken wir sie einfach, indem wir den Parameter nicht veröffentlichen.<\/LI>Das ETL-Tool verwendet einige Webverbindungen, um auf das Portal zuzugreifen und sich bei einem E-Mail-Dienst zu authentifizieren. Diese bekommen Sie auf den Server, indem Sie sie als XML-Dateien aus dem Menü Tools>Options>Web Connections exportieren, auf den Server kopieren, sich dort als arcgis-Dienstbesitzer anmelden, Workbench über fmeworkbench.exe<\/STRONG> starten und sie über dieselbe Oberfläche importieren. Stellen Sie sicher, jede Verbindung nach dem Import neu zu authentifizieren.<\/LI>Da wir die temporäre Umgebung (scratch environment) auf dem Server verwenden, die zwischen Prozessen geteilt wird (dieses Verhalten kann sich ändern), ist der Geoverarbeitungsdienst des Web Tools so eingestellt, dass er maximal in 1 Instanz läuft. Das verhindert Konflikte zwischen Instanzen beim Schreiben in die temporäre File-Geodatabase (mehrere Jobs werden in die Warteschlange gestellt). Wenn Sie mehrere Web Tools veröffentlichen müssen, die in die Serverumgebung schreiben, dann refaktorieren Sie diese so, dass sie temporäre Arbeitsbereiche verwenden.<\/LI><\/UL>An diesem Punkt haben wir ein Web Tool, das tut, was wir wollen. Jetzt müssen wir es zeitgesteuert orchestrieren<\/STRONG>. Dafür verwenden wir ein gehostetes Notebook in ArcGIS Online. Dies ist das erste Notebook, das ich je erstellt habe (mein No-Code-Hintergrund zeigt sich), also wenn ich es kann, können Sie es auch. Das Web Tool läuft auf meinem Portal, aber mein Notebook läuft in Online<\/STRONG>. Das ist kein Problem für das Notebook, das Web Tool wird nicht in Online ausgeführt<\/STRONG>, unter der Haube authentifiziert sich das Notebook nur beim Portal und sendet eine submitJob<\/STRONG>-REST-Anfrage. Online-Notebooks wissen, wie man sich mit Portal-GIS-Instanzen verbindet. Hier ist das Einzelseiten-Notebook (Standardlaufzeit):<\/P>
Online hosted Notebook<\/span><\/span><\/P> Wie schwer ist das? Verrückt einfach.<\/STRONG> Der schwierigste Teil war es, ein Zertifikat von der IT zu bekommen, das das Portal akzeptiert, wenn es von ArcGIS Online kontaktiert wird (mein Kollege Renato S. bekommt dafür Anerkennung). Alles was ich gemacht habe war die Hilfe zu lesen und Beispielpfade und Namen durch meine eigenen zu ersetzen. Um den Funktionsnamen nach dem Import des Web Toolboxes zu finden, habe ich den Code einfach in IDLE eingegeben, damit Intellisense mir die Methoden anzeigen konnte.<\/P>Dann habe ich beim Bearbeiten des Notebooks den Aufgaben-Editor geöffnet und mein Notebook so eingerichtet, dass es an Wochentagen um 6 Uhr morgens läuft. Beachten Sie, dass der Zeitwähler im Aufgaben-Editor lokale Zeitwerte aus Ihrem Browser verwendet.<\/P>Jetzt kann ich das System laufen lassen und jeden Tag hat meine Organisation einen aktuellen Locator im Portal gepflegt!<\/P>
Locator-Elementdetails plus heutige Adressänderungen E-Mail<\/span><\/span><\/P> <\/P> <\/P>