Mer

Hvorfor fungerer ikke ArcPy -script for å bruke symbologi?


Dette er det første python -skriptet jeg har prøvd å skrive, og jeg kan ikke finne ut hvorfor det ikke fungerer. Alt jeg vil gjøre er å bruke symbologi fra ett lag til et annet.

Arbeidskode:

# Navn: ApplySym.py # Formål: bruk symbologien fra ett lag til et annet # Importer systemmoduler importer arcpy fra arcpy import env #import os env.workspace = "C:  Users  jrutledge  Desktop  ArcGIS" inputLayer = "TEST.lyr" symbologyLayer = "LTSig_Template.lyr" arcpy.ApplySymbologyFromLayer_management (inputLayer, symbologyLayer)

Feilmelding:

Traceback (siste anrop sist): Fil "C:  Users  jrutledge  Desktop  Well DB Run 2_2015 (pluss GAMA)  ArcMaps2015_2  Python  ImportSymbology.py", linje 11, i  inputLayer = arcpy.Layer (r "C:  Users  jrutledge  Desktop  Well DB Run 2_2015 (pluss GAMA)  ArcMaps2015_2  MapOutput  ByWell  ShapeFiles  T00010_SOURCE_TEMPERATURE_C_C_ Events.lyr") AttributeError: 'module' object no attribute Lag'

Kode:

# Formål: bruk symbologien fra ett lag til et annet # Importer systemmoduler import arcpy fra arcpy import env import os env.workspace = r "C:  Users  jrutledge  Desktop  Well DB Run 2_2015 (pluss GAMA)  ArcMaps2015_2  MapOutput  ByWell  ShapeFiles "inputLayer = arcpy.mapping.Layer (r" C:  Users  jrutledge  Desktop  Well DB Run 2_2015 (pluss GAMA)  ArcMaps2015_2  MapOutput  ByWell  ShapeFiles  T00010_SOURCE_TEMPERATURE_C_Cy Events.lyr ") symb. .mapping.Layer (r "C:  Users  jrutledge  Desktop  Well DB Run 2_2015 (pluss GAMA)  ArcMaps2015_2  MapOutput  ByWell  ShapeFiles  T71850_NITRATE_LT_DIR.lyr") arcpy.ApplySymbologyFromLayer_management (inputLayer) symbology

Gammel kode (originalt forsøk): RuntimeError: Object: Feil ved kjøring av verktøyet

# Navn: ApplySym.py # Formål: bruk symbologien fra ett lag til et annet # Importer systemmoduler importere arcpy fra arcpy import env # Angi gjeldende arbeidsområde env.workspace = "C:  Users  jrutledge  Desktop  Well DB Run 2_2015 (pluss GAMA)  ArcMaps2015_2  MapOutput  ByWell  ShapeFiles " # Sett lag for å bruke symbologi på inputLayerFile = arcpy.mapping.Layer (r" C:  Users  jrutledge  Desktop  Well DB Run 2_2015 (pluss GAMA)  ArcMaps2015_2  MapOutput  ByWell  ShapeFiles  T00010_SOURCE_TEMPERATURE_C_C_ Events.lyr ") inputLayer = arcpy.mapping.ListLayers (inputLayerFile," T00010_SOURCE_TEMPERATURE_C_C_ Events ") # Angi lag som utgangssymbol vil være basert på symbologi" lag "som utgangssymboler" (Arkiv) ". Users  jrutledge  Desktop  Well DB Run 2_2015 (pluss GAMA)  ArcMaps2015_2  MapOutput  ByWell  ShapeFiles  T71850_NITRATE_LT_DIR.lyr ") symbologyLayer = arcpy.mapping.ListLayers (symbologyLayerFile," T71850_NITRATE_T_LOG_DIR_LINE_TIRLOGY_DIRLATE_ til input -laget arcpy.ApplySymbologyFromLayer_m anagement (inputLayer, symbologyLayer)

Tusen takk for alle som prøver å løse problemet mitt. Endelig fant jeg ut hva som forårsaket feilen min. Det var ikke et syntaksproblem.

Lagfilene jeg prøvde å bruke hadde kildeinformasjon i en tabell i en geodatabase. Av en eller annen grunn kunne arcpy ikke få tilgang til den skikkelig. Jeg eksporterte kildetabellen til en formfil. Lag lagfilene på nytt, så kilden nå var den nye formfilen. Nå kjører programmet riktig.


Prøv dette:

inputLayer = r "C:  Users  jrutledge  Desktop  Well DB Run 2_2015 (pluss GAMA)  ArcMaps2015_2  MapOutput  ByWell  ShapeFiles  T00010_SOURCE_TEMPERATURE_C_C_ Events.lyr" symbologyLayer = r "C:  Users  jrutledge  Desktop  Well DB Kjør 2_2015 (pluss GAMA)  ArcMaps2015_2  MapOutput  ByWell  ShapeFiles  T71850_NITRATE_LT_DIR.lyr "arcpy.ApplySymbologyFromLayer_management (inputLayer, symbologyLayer)

Dette verktøyet krever ganske enkelt et inngangslag og et symbologilag.


Jeg vil begynne med å bytte ut:

env.workspace = "C:  Users  jrutledge  Desktop  Well DB Run 2_2015 (pluss GAMA)  ArcMaps2015_2  MapOutput  ByWell  ShapeFiles"

med:

env.workspace = r "C:  Users  jrutledge  Desktop  Well DB Run 2_2015 (pluss GAMA)  ArcMaps2015_2  MapOutput  ByWell  ShapeFiles"

Du må legge til lagene i datarammen før du kan bruke symbologi på dem - ditt nåværende skript og andre løsninger har så langt ingen referanser til MXD eller dataframe. Avhengig av om du jobber med den nåværende åpne MXD eller en annen lagret MXD, må du referere til kartdokumentet. Sjekk denne ArcGIS -hjelpeartikkelen for en detaljert forklaring.

Følgende kode kan tilpasses dataene dine og legges inn direkte i python -vinduet i en tom MXD for testing

importere arcpy #get referanse til MXD og dataframe mxd = arcpy.mapping.MapDocument ("CURRENT") df = mxd.activeDataFrame #get referanse til kilden til symbologien og legg til MXD symbologySource = arcpy.mapping.Layer (r " C:  yourLayerPath  yourSourceLayer.lyr ") arcpy.mapping.AddLayer (df, symbologySource," AUTO_ARRANGE ") #get referanse til filen for å bruke symbologi og legge til MXD symbologyTarget = arcpy.mapping.Layer (r" C:  yourLayerPath  yourTargetLayer.lyr ") arcpy.mapping.AddLayer (df, symbologyTarget," AUTO_ARRANGE ") #apply symbology arcpy.ApplySymbologyFromLayer_management (symbologyTarget, symbologySource)

Du trenger noe mellom det @barbarossa har, og du har allerede:

inputLayer = arcpy.mapping.Layer (r "C:  Users  jrutledge  Desktop  Well DB Run 2_2015 (pluss GAMA)  ArcMaps2015_2  MapOutput  ByWell  ShapeFiles  T00010_SOURCE_TEMPERATURE_C_C_ Events.lyr") symbologyLayer = arcpy.ma. r "C:  Users  jrutledge  Desktop  Well DB Run 2_2015 (pluss GAMA)  ArcMaps2015_2  MapOutput  ByWell  ShapeFiles  T71850_NITRATE_LT_DIR.lyr") arcpy.ApplySymbologyFromLayer_management (inputLayer, symbologyLayer)

Etter min erfaring er ListLayers () best brukt med et kartdokument, eller kanskje et gruppelag, men det er unødvendig med et enkelt lag.


Se videoen: GIS Tools: ArcMapArcGIS Tool for connecting points (September 2021).