• arcgis python 参数验证


    import arcpy
    class ToolValidator(object):
      """Class for validating a tool's parameter values and controlling
      the behavior of the tool's dialog."""
    
      def __init__(self):
        """Setup arcpy and the list of tool parameters."""
        self.params = arcpy.GetParameterInfo()
    
      def initializeParameters(self):
        """Refine the properties of a tool's parameters.  This method is
        called when the tool is opened."""
        return
    
      def updateParameters(self):
        """Modify the values and properties of parameters before internal
        validation is performed.  This method is called whenever a parameter
        has been changed."""
        if self.params[0].value:
            try:
                desc = arcpy.Describe(self.params[0].value)
                shapeType = desc.shapeType
                sr = desc.spatialReference
                gcsOrMercator = False if not sr.GCSName and sr.PCSName.upper().find("MERCATOR") == -1 else True
    
                if shapeType.upper() == "POINT":
                    self.params[1].filter.list = ["POINT_X_Y_Z_M"]
                elif shapeType.upper() == "MULTIPOINT":
                    self.params[1].filter.list = ["CENTROID", "PART_COUNT", "EXTENT"]
                elif shapeType.upper() == "POLYLINE":
                    if desc.hasZ:
                        lineList = ["LENGTH", "LENGTH_GEODESIC", "LENGTH_3D", "LINE_START_MID_END", "CENTROID", "CENTROID_INSIDE", "PART_COUNT", "POINT_COUNT", "LINE_BEARING", "EXTENT"]
                    else:
                        lineList = ["LENGTH", "LENGTH_GEODESIC", "LINE_START_MID_END", "CENTROID", "CENTROID_INSIDE", "PART_COUNT", "POINT_COUNT", "LINE_BEARING", "EXTENT"]
                    self.params[1].filter.list = lineList
                    if gcsOrMercator:
                        lineList.remove("LENGTH")
                        if desc.hasZ:
                            lineList.remove("LENGTH_3D")
                        self.params[1].filter.list = lineList
                elif shapeType.upper() == "POLYGON":
                    polyList = ["AREA", "AREA_GEODESIC", "PERIMETER_LENGTH", "PERIMETER_LENGTH_GEODESIC", "CENTROID", "CENTROID_INSIDE", "LINE_START_MID_END", "PART_COUNT", "POINT_COUNT", "EXTENT"]
                    self.params[1].filter.list = polyList
                    if gcsOrMercator:
                        polyList.remove("AREA")
                        polyList.remove("PERIMETER_LENGTH")
                        self.params[1].filter.list = polyList
    
                if self.params[1].value:
                    self.params[5].parameterDependencies = [0]
                    self.params[5].schema.clone = True
                    newFields = []
                    propDict = {"POINT_X_Y_Z_M":            ["POINT_X",
                                                             "POINT_Y",
                                                             "POINT_Z",
                                                             "POINT_M"],
                                "PART_COUNT":               ["PART_COUNT"],
                                "CENTROID":                 ["CENTROID_X",
                                                             "CENTROID_Y",
                                                             "CENTROID_Z",
                                                             "CENTROID_M"],
                                "EXTENT":                   ["EXT_MIN_X",
                                                             "EXT_MIN_Y",
                                                             "EXT_MAX_X",
                                                             "EXT_MAX_Y"],
                                "POINT_COUNT":              ["PNT_COUNT"],
                                "LINE_START_MID_END":       ["START_X",
                                                             "START_Y",
                                                             "START_Z",
                                                             "START_M",
                                                             "MID_X",
                                                             "MID_Y",
                                                             "MID_Z",
                                                             "MID_M",
                                                             "END_X",
                                                             "END_Y",
                                                             "END_Z",
                                                             "END_M"],
                                "LINE_BEARING":             ["BEARING"],
                                "CENTROID_INSIDE":          ["INSIDE_X",
                                                             "INSIDE_Y",
                                                             "INSIDE_Z",
                                                             "INSIDE_M"],
                                "LENGTH":                   ["LENGTH"],
                                "PERIMETER_LENGTH":         ["PERIMETER"],
                                "AREA":                     ["POLY_AREA"],
                                "LENGTH_GEODESIC":          ["LENGTH_GEO"],
                                "AREA_GEODESIC":            ["AREA_GEO"],
                                "LENGTH_3D":                ["LENGTH_3D"],
                                "PERIMETER_LENGTH_GEODESIC":["PERIM_GEO"],
                                }
                    currentFields = [x.name for x in desc.fields]
                    for prop in str(self.params[1].value).split(";"):
                        try:
                            for field in propDict[prop]:
                                if not field in currentFields:
                                    newField = arcpy.Field()
                                    newField.type, newField.name = "DOUBLE", field
                                    newFields.append(newField)
                        except:
                            pass
                    self.params[5].schema.additionalFields = newFields
            except:
                pass
        return
    
    
      def updateMessages(self):
        """Modify the messages created by internal validation for each tool
        parameter.  This method is called after internal validation."""
        return
    ============================================================
    class ToolValidator:
      """Class for validating a tool's parameter values and controlling
      the behavior of the tool's dialog."""
    
      def __init__(self):
        """Setup the Geoprocessor and the list of tool parameters."""
        import arcpy
        self.params = arcpy.GetParameterInfo()
    
      def initializeParameters(self):
        """Refine the properties of a tool's parameters.  This method is
        called when the tool is opened."""
        return
    
      def updateParameters(self):
        """Modify the values and properties of parameters before internal
        validation is performed.  This method is called whenever a parmater
        has been changed."""
        import arcpy
    
        if self.params[0].value:
          mxd = arcpy.mapping.MapDocument(self.params[0].value.value)
          
          #The following will display an error if mxd is not DDP enabled
          testDDP = mxd.dataDrivenPages
    
          #Generate unique list of layer names
          lyrs = arcpy.mapping.ListLayers(mxd)
          layerList = []
          for lyr in lyrs:
            layerList.append(lyr.name)
          uniqueLayerList = list(set(layerList))
          uniqueLayerList.sort()
          
          if not self.params[1].altered:
            self.params[1].filter.list = uniqueLayerList
    
          #Generate unique list of field names
          if self.params[1].altered:
            selectedLayer = self.params[1].value
            layerRef = arcpy.mapping.ListLayers(mxd, selectedLayer)[0]
            fields = arcpy.ListFields(layerRef.dataSource)
            fieldList = []
            for field in fields:
              fieldList.append(field.name)
            uniqueFieldList = list(set(fieldList))
            uniqueFieldList.sort()
            self.params[2].filter.list = uniqueFieldList
    
          #Generate unique list of page names
          if self.params[2].altered:
            fieldName = self.params[2].value
            rows = arcpy.SearchCursor(layerRef.dataSource)
            row = rows.next()
            pageNameList = []
            while row:
              if row.getValue(fieldName) not in pageNameList:
                pageNameList.append(row.getValue(fieldName))
              row = rows.next()
            pageNameList.sort()
            self.params[3].filter.list = pageNameList
            
          #Generate the printer list   
          printerList = arcpy.mapping.ListPrinterNames()
          if not self.params[1].altered:
            self.params[4].filter.list = printerList
    
        return
    
      def updateMessages(self):
        """Modify the messages created by internal validation for each tool
        parameter.  This method is called after internal validation."""
        return
    
    
    
     
  • 相关阅读:
    HIVE(2) 之 常用函数
    HIVE的Shell操作
    HIVE常用函数(1)聚合函数和序列函数
    版本控制系统之SVN和GIT的区别
    【PyQt5】信号与槽+装饰器定义槽函数
    【PyQt5】信号与槽+多线程
    【PyQt5】信号与槽用法进阶
    【PyQt5】信号与槽用法入门
    【python之路】【5、函数学习】带装饰器的函数作业【老男孩第2期全栈】
    【python之路】【4、文件操作】数据类型、文件操作-作业 用文件储存三级菜单并执行
  • 原文地址:https://www.cnblogs.com/gisoracle/p/11365257.html
Copyright © 2020-2023  润新知