skriptovaným parametrem<\/A>:<\/P> <\/P>
import arcpy
scratchGDB = arcpy.CreateScratchName("xyz",".gdb","Workspace",arcpy.env.scratchFolder)
arcpy.AddMessage('Používám scratch GDB {}'.format(scratchGDB))
return scratchGDB<\/code><\/pre><P> <\/P><P>Složka scratch se nachází podobně:<\/P><P> <\/P><pre class="lia-code-sample language-python"><code>import arcpy
scratchFolder = str(arcpy.env.scratchFolder)
arcpy.AddMessage('Používám scratch složku {}'.format(scratchFolder))
return scratchFolder<\/code><\/pre><P> <\/P><P>Když je sdílen jako webový nástroj, log ukazuje tyto zprávy:<\/P><P><STRONG>Používám scratch GDB C:\Users\arcgis\AppData\Local\Temp\scratch\xx0.gdb<BR \/></STRONG><STRONG>Používám scratch složku C:\Users\arcgis\AppData\Local\Temp\scratch<BR \/></STRONG><\/P><P>Nyní ta silná část, použití ArcPy v <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 skriptu<\/A> k opětovnému vytvoření lokalizační služby. Kód pro vytvoření lokalizátoru vznikl jako kopie z historie po spuštění nástroje Create Locator, zbytek jen z čtení nápovědy.<\/P><P> <\/P><pre class="lia-code-sample language-python"><code># Pokud jsou úpravy, pak znovu vytvořit portálový lokalizátor
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'):
# Vytvořit nebo znovu vytvořit lokalizátor pokud jsou změny dat
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")
# Vytvořit SD draft a 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 = 'Lokalizátor Point Address With Units pro město San Francisco aktualizován v {} PST'.format(sfNowStr)
summary += '\nPostaveno ze zdroje dat Socrata: 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)
# Nahrát locator
if analyze_messages['errors'] == {}:
arcpy.SignInToPortal(portalURL,portalUser,portalPassword)
arcpy.server.StageService(sddraft_file,sd_file)
arcpy.server.UploadServiceDefinition(sd_file,serverURL)
# Vyčistit scratch GDB
try:
arcpy.management.Delete(scratchGDB)
except:
pass
Takže to je ETL nástroj, který jsem publikoval jako webový nástroj. Než přejdu k tomu, jak orchestrujeme webový nástroj, mám pár tipů na tvorbu a publikaci.<\/P>
- ETL nástroj je bez parametrů, pokud jde o geoprocessingové prostředí, protože jsem nastavil všechny jeho vstupy tak, aby nebyly<\/EM> publikovány. To obchází chování s vstupním CSV souborem, který je na URL: ArcGIS Enterprise nemůže zaregistrovat URL jako datový sklad ani zkopírovat data na server za běhu, takže to prostě skryjeme tím, že parametr nepublikujeme.<\/LI>ETL nástroj používá několik webových připojení pro přístup k portálu a autentizaci do emailové služby. Tyto připojení dostanete na server tak, že je zkopírujete jako XML soubory z menu Tools>Options>Web Connections, zkopírujete je na server, přihlásíte se na server jako vlastník služby arcgis, spustíte Workbench z fmeworkbench.exe<\/STRONG> a importujete je ze stejného rozhraní. Po importu každé připojení nezapomeňte znovu autentizovat.<\/LI>Protože používáme scratch prostředí na serveru, které je sdílené mezi procesy (toto chování se může změnit), geoprocessingová služba webového nástroje je nastavena tak, aby běžela maximálně v 1 instanci, což nám zabraňuje v nechtěném konfliktu mezi instancemi zapisujícími do scratch file geodatabáze (více úloh bude čekat ve frontě). Pokud potřebujete publikovat více webových nástrojů zapisujících do serverového prostředí, pak je přepracujte tak, aby používaly dočasné pracovní prostory.<\/LI><\/UL>V tuto chvíli máme webový nástroj, který dělá to, co chceme, teď ho musíme orchestrace podle plánu<\/STRONG>. K tomu používáme hostovaný Notebook v ArcGIS Online. Toto je první notebook, který jsem kdy vytvořil (můj no-code background je vidět), takže pokud to dokážu já, dokážete to i vy. Webový nástroj běží na mém portálu, ale můj notebook běží v Online<\/STRONG>. To pro notebook není problém, webový nástroj neběží v Online<\/STRONG>, pod kapotou notebook jen autentizuje do portálu a posílá REST požadavek submitJob<\/STRONG>. Online notebooky vědí, jak se připojit k portal GIS instancím. Tady je jednobuněčný notebook (Standard runtime):<\/P>
Online hosted Notebook<\/span><\/span><\/P> Jak těžké to je? Neskutečně jednoduché.<\/STRONG> Nejtěžší bylo získat certifikát od IT lidí, který by portál akceptoval při komunikaci s ArcGIS Online (zaslouží se o to můj kolega Renato S.). Všechno jsem udělal tak, že jsem četl nápovědu a nahradil příklady cestami a jmény svými. Abych našel jméno funkce po importu webového toolboxu, dal jsem kód do IDLE a intellisense mi ukázal metody.<\/P>Pak při úpravě notebooku jsem šel do editoru úloh a nastavil svůj notebook tak, aby běžel ve všední dny v 6 ráno. Pozor, časovač editoru úloh používá lokální čas podle vašeho prohlížeče.<\/P>Nyní mohu nechat systém(y) běžet a každý den má moje organizace aktuální locator udržovaný v portálu!<\/P>
Detaily položky Locator plus dnešní email s adresními změnami<\/span><\/span><\/P> <\/P> <\/P>