Více

Nastavení dvou definičních dotazů jako parametrů v nástroji Python Script způsobuje: RuntimeError: LayerObject: Set attribute definitionQuery neexistuje

Nastavení dvou definičních dotazů jako parametrů v nástroji Python Script způsobuje: RuntimeError: LayerObject: Set attribute definitionQuery neexistuje


Vytvořil jsem skript, který přidá definiční dotazy do každé vrstvy v mxd v závislosti na názvu vrstvy.

To fungovalo dobře jako samostatný skript, ale když se ho pokusím použít jako skriptový nástroj s arcpy.GetParameterAsText (), na druhý dotaz selže.

Zde je úryvek:

import arcpy arcpy.env.overwriteOutput = True mxd = arcpy.mapping.MapDocument (arcpy.GetParameterAsText (0)) def applyDefQuery (mxd): df = arcpy.mapping.ListDataFrames (mxd, "") [0] vrstvy = arc mapping.ListLayers (mxd, "", df) pro vrstvu ve vrstvách: if layer.name == "PROJECT_POLYGON": layer.definitionQuery = arcpy.GetParameterAsText (1) else: layer.definitionQuery = arcpy.GetParameterAsTdxt (2) save () applyDefQuery (mxd)

Cílem je připravit mxd na QA/QC, když subdodavatel vrátí pokladnu s tunou vrstev. Skript by měl vybrat všechny polygony oblasti projektu, které v rámci nich upravili, a pro každou další vrstvu vybrat záznamy, které upravil subdodavatel.

Zkoušel jsem to řešit různými způsoby: přidáním druhé funkce pro druhý dotaz, vyjmutím ze smyčky for a spuštěním před podmíněným příkazem, hledáním hodnot null v polích editoru namísto těch, které jsem ' hledám (obával jsem se, že formát hodnot - 'COMPANY editorname' způsoboval problém, protože obsahoval únikový znak). Zdá se, že nic nefunguje, kromě ponechání třetího pole v GUI prázdného a spuštění prvního definičního dotazu.

Zde jsou parametry skriptovacího nástroje:

a vstup, který k tomu předávám:

a chyba:

Provádění: QCPrep "C:  Users  bhamson  Documents  Company Check-INs  VisualQC_04142015  VisualQC_04162015_2 (1) .mxd" "" CONTRACT '"=' AAA-CO-11-001_005 '" "" EDITOR "LIKE' COMPANY %'"Čas zahájení: Út 5. května 18:30:38 2015 Spuštění skriptu QCPrep… Selhání skriptu QCPrep… Traceback (poslední volání poslední): Soubor" C:  Users  bhamson  Documents  Company Check-INs  VisualQC_04142015  QCPrep .py ", řádek 17, v  soubor applyDefQuery (mxd) "C:  Users  bhamson  Documents  Company Check-INs  VisualQC_04142015  QCPrep.py", řádek 14, v applyDefQuery layer.definitionQuery = arcpy.GetParameterAsText (2) Soubor "c:  soubory programu ( x86)  arcgis  desktop10.2  arcpy  arcpy  arcobjects  _base.py ", řádek 89, v _set return setattr (self._arc_object, attr_name, cval (val)) RuntimeError: LayerObject: Set attribute definitionQuery neexistuje

Nepodařilo se spustit (QCPrep). Selhalo v Út 05. května 18:30:56 2015 (Uplynulý čas: 17,58 sekundy)

Máte představu, v čem by mohl být problém?


Je možné, že máte vrstvy, které nepodporují definiční dotazy. Jako rastrová vrstva nebo dokonce skupinová vrstva.

Navrhuji přidat nějakou další logiku, která použije definiční dotaz pouze na vrstvy funkcí. Něco takového:

def applyDefQuery (mxd): df = arcpy.mapping.ListDataFrames (mxd, "") [0] vrstvy = arcpy.mapping.ListLayers (mxd, "", df) pro vrstvu ve vrstvách: if layer.isFeatureLayer: if vrstva. name == "PROJECT_POLYGON": layer.definitionQuery = arcpy.GetParameterAsText (1) else: layer.definitionQuery = arcpy.GetParameterAsText (2) mxd.save ()

Můžete si přečíst více o vlastnostech vrstvy tady.


Podívejte se na video: MS Access 10 - SQL upiti