gescripte parameter<\/A>:<\/P> <\/P>
import arcpy
scratchGDB = arcpy.CreateScratchName("xyz",".gdb","Workspace",arcpy.env.scratchFolder)
arcpy.AddMessage('Gebruik scratch GDB {}'.format(scratchGDB))
return scratchGDB<\/code><\/pre><P> <\/P><P>De scratch-map wordt op vergelijkbare wijze gevonden:<\/P><P> <\/P><pre class="lia-code-sample language-python"><code>import arcpy
scratchFolder = str(arcpy.env.scratchFolder)
arcpy.AddMessage('Gebruik scratch map {}'.format(scratchFolder))
return scratchFolder<\/code><\/pre><P> <\/P><P>Wanneer gedeeld als webtool toont het logboek deze berichten:<\/P><P><STRONG>Gebruik scratch GDB C:\Users\arcgis\AppData\Local\Temp\scratch\xx0.gdb<\/STRONG><BR \/><STRONG>Gebruik scratch map C:\Users\arcgis\AppData\Local\Temp\scratch<\/STRONG><\/P><P>Nu het krachtige deel, gebruikmakend van ArcPy in een <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 script<\/A> om de locator-service opnieuw te creëren. De locator-creatiecode is oorspronkelijk gekopieerd uit een geschiedenisitem na het uitvoeren van Create Locator tool, de rest komt gewoon uit het lezen van de help.<\/P><P> <\/P><pre class="lia-code-sample language-python"><code># Als er bewerkingen zijn dan maak of hermaak je de portal locator
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'):
# Maak of hermaak de locator als er datawijzigingen zijn
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")
# Maak het SD conceptbestand en SD bestand
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 voor City of San Francisco bijgewerkt op {} PST'.format(sfNowStr)
summary += '\\nGebouwd vanuit de Socrata-datasource: 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)
# Upload de locator
if analyze_messages['errors'] == {}:
arcpy.SignInToPortal(portalURL,portalUser,portalPassword)
arcpy.server.StageService(sddraft_file,sd_file)
arcpy.server.UploadServiceDefinition(sd_file,serverURL)
# Ruim de scratch GDB op
try:
arcpy.management.Delete(scratchGDB)
except:
pass
Dus dat is de ETL tool die ik als een webtool heb gepubliceerd. Voordat we verder gaan met hoe we de webtool orkestreren, heb ik een paar tips over het maken en publiceren.<\/P>
- De ETL tool heeft geen parameters wat betreft de geoprocessing omgeving, omdat ik al zijn inputs heb ingesteld op niet<\/EM> te publiceren. Dit omzeilt een gedrag met een input CSV-bestand dat op een URL staat: ArcGIS Enterprise kan een URL niet registreren als een datastore of de data naar de server kopiëren tijdens runtime, dus verbergen we het gewoon door de parameter niet te publiceren.<\/LI>De ETL tool gebruikt een paar webverbindingen om toegang te krijgen tot het portal en zich te authenticeren bij een e-mailservice. Je krijgt deze op de server door ze als XML-bestanden te kopiëren vanuit het menu Tools>Options>Web Connections, ze naar de server te kopiëren, in te loggen op de server als de arcgis service-eigenaar, Workbench te starten via fmeworkbench.exe<\/STRONG> en ze te importeren vanuit dezelfde interface. Zorg ervoor dat je elke verbinding opnieuw authenticatieert na het importeren.<\/LI>Aangezien we de scratch-omgeving op de server gebruiken, die gedeeld wordt tussen processen (dit gedrag kan veranderen), is de geoprocessing service van de webtool ingesteld om maximaal in 1 instantie te draaien, dit voorkomt dat we per ongeluk concurrentie krijgen tussen instanties die naar de scratch file geodatabase schrijven (meerdere taken worden in wachtrij geplaatst). Als je meerdere webtools moet publiceren die naar de serveromgeving schrijven, refactor ze dan om tijdelijke werkruimtes te gebruiken.<\/LI><\/UL>Op dit punt hebben we een webtool die doet wat we willen, nu moeten we het orkestreren volgens een schema<\/STRONG>. Hiervoor gebruiken we een hosted Notebook in ArcGIS Online. Dit is het eerste notebook dat ik ooit heb gemaakt (mijn no-code achtergrond komt hier duidelijk naar voren) dus als ik het kan, kun jij het ook. De webtool draait op mijn portal maar mijn notebook draait in Online<\/STRONG>. Dat is geen probleem voor het notebook, de webtool wordt niet uitgevoerd in Online<\/STRONG>, onderhuids authenticatieert het notebook gewoon bij het portal en stuurt een submitJob<\/STRONG> REST-verzoek. Online notebooks weten hoe ze verbinding moeten maken met portal GIS-instanties. Hier is het single-cell notebook (Standard runtime):<\/P>
Online hosted Notebook<\/span><\/span><\/P> Hoe moeilijk is dat? Super eenvoudig.<\/STRONG> Het moeilijkste was het krijgen van een certificaat van de IT-mensen dat het portal zou accepteren wanneer er contact werd gemaakt vanuit ArcGIS Online (mijn collega Renato S. krijgt daarvoor de eer). Alles wat ik deed was de help lezen en voorbeeldcodes vervangen door mijn paden en namen. Om de functienaam te vinden die ik moest gebruiken na het importeren van de web toolbox zette ik gewoon de code in IDLE zodat intellisense me de methoden kon geven.<\/P>Vervolgens ging ik tijdens het bewerken van het notebook naar de Tasks editor en stelde mijn notebook zo in dat hij doordeweeks om 6 uur 's ochtends draait. Let op dat de tijdkiezer van de taakeditor lokale tijdwaarden gebruikt van je browserclient.<\/P>Nu kan ik het systeem/de systemen laten draaien en heeft mijn organisatie elke dag een up-to-date locator die wordt onderhouden in een portal!<\/P>
Locator item details plus today's address changes email<\/span><\/span><\/P> <\/P> <\/P>