#!#! #! #!#! #!#! #!#! #!#! #!#! #!#!#!#!#!#!#! #!#! #!#! #! #!#!#! #! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!rand $(ATTR_2) SET_TO rand $(ATTR_3) SET_TO rand $(ATTR_4) SET_TO rand $(ATTR_5) SET_TO rand">#!#!#!#!#!#!#!#!#! #!#!#!#!#!rand">#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#! #!#! #!#! #! #! #!#!#! #!

Explode into key value pairs

" POSITION="-2490.9172059749708 366.75376546953635" TOP_LEFT="-2490.9172059749708 366.75376546953635" BOTTOM_RIGHT="-2060.9172059749708 367.75376546953635" BOUNDING_RECT="-2490.9172059749708 366.75376546953635 430 -1" ORDER="500000000000029" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.78431372549019607,0.19607843137254902" SIZE_POLICY="10" ANCHORED_NODE="2">
#!

Filter out prefix

" POSITION="-1697.9733584876781 323.0033279651613" TOP_LEFT="-1697.9733584876781 323.0033279651613" BOTTOM_RIGHT="-1267.9733584876781 324.0033279651613" BOUNDING_RECT="-1697.9733584876781 323.0033279651613 430 -1" ORDER="500000000000030" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.78431372549019607,0.19607843137254902" SIZE_POLICY="10" ANCHORED_NODE="10">
#!

Test for empty or null values

" POSITION="-1051.9501967549509 399.06361515031165" TOP_LEFT="-1051.9501967549509 399.06361515031165" BOTTOM_RIGHT="-621.95019675495087 400.06361515031165" BOUNDING_RECT="-1051.9501967549509 399.06361515031165 430 -1" ORDER="500000000000031" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.78431372549019607,0.19607843137254902" SIZE_POLICY="10" ANCHORED_NODE="4">
#!

Perform a full join

" POSITION="1224.1044449166423 314.31317764593661" TOP_LEFT="1224.1044449166423 314.31317764593661" BOTTOM_RIGHT="1654.1044449166423 315.31317764593661" BOUNDING_RECT="1224.1044449166423 314.31317764593661 430 -1" ORDER="500000000000032" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.78431372549019607,0.19607843137254902" SIZE_POLICY="10" ANCHORED_NODE="29">
#!
#! #!#! #! #!#! #!#!#! #! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #! #!#! #!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#! #!#!
#!
#! #!#!
FME_PYTHON_VERSION 2or3 DEFAULT_MACRO ATTR_1 name GUI STRING_ENCODED ATTR_1 NO_ICON%ALLOW_NEW Att_1: DEFAULT_MACRO ATTR_2 height GUI STRING_ENCODED ATTR_2 NO_ICON%ALLOW_NEW Att_1: DEFAULT_MACRO ATTR_3 depth GUI STRING_ENCODED ATTR_3 NO_ICON%ALLOW_NEW Att_1: DEFAULT_MACRO ATTR_4 attribute_4 GUI STRING_ENCODED ATTR_4 NO_ICON%ALLOW_NEW Att_1:DEFAULT_MACRO ATTR_5 attribute_5 GUI STRING_ENCODED ATTR_5 NO_ICON%ALLOW_NEW Att_1: INCLUDE [if {{$(ATTR_1)} == {}} {puts_real {Parameter 'ATTR_1' must be given a value.};退出1;};[if {{$(ATTR_2)} == {}} {puts_real {Parameter 'ATTR_2' must be given a value.};};退出1;};[if {{$(ATTR_3)} == {}} {puts_real {Parameter 'ATTR_3' must be given a value.};};退出1;}; ] INCLUDE [ if {{$(ATTR_4)} == {}} { puts_real {Parameter 'ATTR_4' must be given a value.}; exit 1; }; ] INCLUDE [ if {{$(ATTR_5)} == {}} { puts_real {Parameter 'ATTR_5' must be given a value.}; exit 1; }; ] #! START_HEADER #! START_WB_HEADER READER_TYPE MULTI_READER WRITER_TYPE NULL WRITER_KEYWORD NULL_DEST NULL_DEST_DATASET null #! END_WB_HEADER #! START_WB_HEADER #! END_WB_HEADER #! END_HEADER LOG_FILENAME "$(FME_MF_DIR)emptyattributecounter.log" LOG_APPEND NO LOG_TIMINGS YES LOG_FILTER_MASK -1 LOG_MAX_FEATURES 200 LOG_MAX_RECORDED_FEATURES 200 FME_REPROJECTION_ENGINE FME FME_IMPLICIT_CSMAP_REPROJECTION_MODE Auto FME_GEOMETRY_HANDLING Enhanced FME_STROKE_MAX_DEVIATION 0 MAPPING_FILE_ID EmptyAttributeCounter # ------------------------------------------------------------------------- MULTI_READER_CONTINUE_ON_READER_FAILURE No # ------------------------------------------------------------------------- MACRO WORKSPACE_NAME emptyattributecounter MACRO FME_VIEWER_APP fmedatainspector # ------------------------------------------------------------------------- INCLUDE [ if {[info exists env(FME_TEMP)] && [file isdirectory $env(FME_TEMP)]} {set gVisualizerTemp $env(FME_TEMP)} elseif {[info exists env(TEMP)] && [file isdirectory $env(TEMP)]} {set gVisualizerTemp $env(TEMP)} elseif { $tcl_platform(platform) == "unix" } {set gVisualizerTemp "/tmp"} else {set gVisualizerTemp c:}; regsub -all {[ ,&]} {$(WORKSPACE_NAME)} {_} wsname; set gVisualizerTemp $gVisualizerTemp/${wsname}_[clock format [clock seconds] -format %H%M%S]; puts "MACRO WORKSPACE_TEMP_DIR $gVisualizerTemp"; MACRO VISUALIZER_FEATURE_FILE $(WORKSPACE_TEMP_DIR)/inspector.ffs MACRO VISUALIZER_SCHEMA_FILE $(WORKSPACE_TEMP_DIR)/inspector.fsc MACRO VISUALIZER_CREATE_SPATIAL_INDEX YES DEFAULT_MACRO WB_CURRENT_CONTEXT # ------------------------------------------------------------------------- Tcl2 proc Creator_CoordSysRemover {} { global FME_CoordSys; set FME_CoordSys {}; } MACRO Creator_XML NOT_ACTIVATED MACRO Creator_CLASSIC NOT_ACTIVATED MACRO Creator_2D3D 2D_GEOMETRY MACRO Creator_COORDS 包括[如果{{geometry对象} == {geometry对象}} {puts {macro creator_xml *}}]包括[if {geometry对象} == {2d coordent列表}} {puts {宏creator_2d3d 2d_geometry};Puts {宏creator_classic *}}]包括[if {geometry对象】== {3d coordent列表}} {puts {宏creator_2d3d 3d_geometry};放置{macro creator_classic *}}]包括[if {geometry对象} == {2d min / max box}} {set注释{我们需要将minx尖锐的maxx maxy转换为坐标的完整多边形列表};设置splitCoords [strond [string trim { }]];if {[llength $ splitcoords]> 4} {set trimmedcoords {};foreach项目$ splastcoords {如果{$项目!= {}} {lappend trimmedcoords $ Item}};设置splitcoords $ trimmedcoords;};if {[llength $ splitcoords]!= 4} {错误{creator:坐标列表预计将是四个数字的空间分隔列表,为“minx miny maxx maxy” - ` ' 是无效的};};设置minx [Lindex $ splitCoords 0];设置Miny [Lindex $ SplitCoords 1];设置maxx [lindex $ splitcoords 2];设置maxy [lindex $ splitcoords 3];Puts“Macro Creator_coords $ minx $ miny $ minx $ maxy $ maxx $ maxy $ maxx $ miny $ minx $ miny”;放{宏creator_2d3d 2d_geometry};puts {宏creator_classic *}}] foress_def $(creator_xml)creationfactory factory_name creator_xml_creator create_at_end没有输出feature_type _____created______ @geometry(from_encoded_string, ?XML. version = 1.0 编码= US_ASCII. 独立= 没有 几何 尺寸= 2 几何 )FACTORY_DEF $(Creator_CLASSIC)CreationFactory FACTORY_NAME Creator_CLASSIC_Creator $(Creator_2D3D)$(Creator_COORDS)CREATE_AT_END无输出FEATURE_TYPE _____CREATED______ FACTORY_DEF * TeeFactory FACTORY_NAME Creator_Cloner INPUT FEATURE_TYPE _____CREATED______ @ TCL2(Creator_CoordSysRemover)@CoordSys()NUMBER_OF_COPIES 50 COPY_NUMBER_ATTRIBUTE “_creation_instance” 输出FEATURE_TYPE Creator_CREATED fme_feature_type造物主FACTORY_DEF * BranchingFactory FACTORY_NAME “Creator_CREATED分支器-1 8” INPUT FEATURE_TYPE Creator_CREATED TARGET_FACTORY “$(WB_CURRENT_CONTEXT)_CREATOR_BRANCH_TARGET” MAXIMUM_COUNT无的Passed FEATURE_TYPE *#------------------------------------------------------------------------ FACTORY_DEF * TeeFactory FACTORY_NAME “$(WB_CURRENT_CONTEXT)_CREATOR_BRANCH_TARGET” INPUT FEATURE_TYPE * OUTPUT FEATURE_TYPE *#-------------------------------------------------------------------------#如果我们正在做最后N个特征,则该乘法器进来作为0。#如果我们正在进行n,乘法器是-1。#对于随机,我们需要治疗最后一个,好像它是第一个(即有-1)#那就是什么?:在速率乘数中确实如此。包括[if {{1} == {0} && {random} == {noriginal}} {puts“宏real_mode last”;把“宏real_rate 3”放了;} else {puts“宏real_mode随机”;放出“宏real_rate [expr 3 *(1?1:-1)]”; } ] FACTORY_DEF {*} SamplingFactory FACTORY_NAME Sampler COMMAND_PARM_EVALUATION SINGLE_PASS SAMPLE_RATE $(REAL_RATE) SAMPLE_ORDER $(REAL_MODE) INPUT FEATURE_TYPE Creator_CREATED OUTPUT SAMPLED FEATURE_TYPE ___SAMPLED___ OUTPUT NOT_SAMPLED FEATURE_TYPE Sampler_NOT_SAMPLED # This TeeFactory is needed because Sampler will still output features if it has no OUTPUT clauses specified. # This way we behave nicely even if there are no output connections on the transformer. See PR#28886. FACTORY_DEF * TeeFactory FACTORY_NAME Sampler_Sampled INPUT FEATURE_TYPE ___SAMPLED___ OUTPUT FEATURE_TYPE Sampler_SAMPLED # ------------------------------------------------------------------------- FACTORY_DEF {*} AttrSetFactory FACTORY_NAME AttributeCreator_2 COMMAND_PARM_EVALUATION SINGLE_PASS INPUT FEATURE_TYPE Sampler_NOT_SAMPLED MULTI_FEATURE_MODE NO NULL_ATTR_MODE NO_OP ATTRSET_CREATE_DIRECTIVES _PROPAGATE_MISSING_FDIV ATTR_ACTION { "" "$(ATTR_1)" "SET_TO" "" } ATTR_ACTION { "" "$(ATTR_2)" "SET_TO" "" } ATTR_ACTION { "" "$(ATTR_3)" "SET_TO" "" } ATTR_ACTION { "" "$(ATTR_4)" "SET_TO" "" } ATTR_ACTION { "" "$(ATTR_5)" "SET_TO" " 兰特 “}输出输出FEATURE_TYPE AttributeCreator_2_OUTPUT#------------------------------------------------------------------------- FACTORY_DEF {*} AttrSetFactory FACTORY_NAME AttributeCreator COMMAND_PARM_EVALUATION SINGLE_PASS INPUT FEATURE_TYPE Sampler_SAMPLED MULTI_FEATURE_MODE NO NULL_ATTR_MODE NO_OP ATTRSET_CREATE_DIRECTIVES _PROPAGATE_MISSING_FDIV ATTR_ACTION {“” “$(ATTR_1)”, “SET_TO”“ 兰特 “} {ATTR_ACTION ”“ ”$(ATTR_2)“, ”SET_TO“” 兰特 “} {ATTR_ACTION ”“ ”$(ATTR_3)“, ”SET_TO“” 兰特 “} {ATTR_ACTION ”“ ”$(ATTR_4)“, ”SET_TO“” 兰特 “} {ATTR_ACTION ”“ ”$(ATTR_5)“, ”SET_TO“” 兰特 “}输出输出FEATURE_TYPE AttributeCreator_OUTPUT#------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME端输入FEATURE_TYPE AttributeCreator_2_OUTPUT输入FEATURE_TYPE AttributeCreator_OUTPUT输出FEATURE_TYPE Junction_Output#------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME “EmptyAttributeCounter AttributeExploder_Input输入珍藏” INPUT FEATURE_TYPE Junction_Output输出FEATURE_TYPE EmptyAttributeCounter_AttributeExploder_Input MACRO EmptyAttributeCounter_WORKSPACE_NAME EmptyAttributeCounter宏$(EmptyAttributeCounter_WORKSPACE_NAME)_XFORMER_NAME EmptyAttributeCounter宏$(EmptyAttributeCounter_WORKSPACE_NAME)_TRANSFORMER_GROUP宏$(EmptyAttributeCounter_WORKSPACE_NAME)___ COMPOUND_PARAMETERS宏$(EmptyAttributeCounter_WORKSPACE_NAME)_SUB_DOC_NAME EmptyAttributeCounter宏$(EmptyAttributeCounter_WORKSPACE_NAME)_PREFIX muilti_DEFAULT_MACRO EmptyAttributeCounter_WORKSPACE_NAME “” 有[看跌{MACRO WB_OLD_CONTEXT _ $(EmptyAttributeCounter_WORKSPACE_NAME)$(WB_CURRENT_CONTEXT)};看跌期权{MACRO WB_CURRENT_CONTEXT $(EmptyAttributeCounter_WORKSPACE_NAME)}] FACTORY_DEF * TeeFactory FACTORY_NAME “$(EmptyAttributeCounter_WORKSPACE_NAME)_AttributeExploder_Input1550073417输入分” INPUT FEATURE_TYPE “$(EmptyAttributeCounter_WORKSPACE_NAME)_AttributeExploder_Input” 输出FEATURE_TYPE “$(EmptyAttributeCounter_WORKSPACE_NAME)_AttributeExploder_Input” #------------------------------------------------------------------------- FACTORY_DEF * AttributeFactory FACTORY_NAME $(EmptyAttributeCounter_WORKSPACE_NAME)_AttributeExploder INPUT FEATURE_TYPE “$(EmptyAttributeCounter_WORKSPACE_NAME)_AttributeExploder_Input” ATTR_NAME_LABEL “_attr_name” ATTR_VALUE_LABEL “_attr_value” KEEP_GEOMETRY没有KEEP_ATTRIBUTES没有EXPLODING_TYPE EXPLODE_AS_FEATURES LIST_NAME“ {}“产出FEATURE_TYPE爆炸”(EmptyAttributeCounter_WORKSPACE_NAME) _AttributeExploder_OUTPUT美元 " # ------------------------------------------------------------------------- FACTORY_DEF * TestFactory FACTORY_NAME $ (EmptyAttributeCounter_WORKSPACE_NAME) _Tester_3输入FEATURE_TYPE " $ (EmptyAttributeCounter_WORKSPACE_NAME) _AttributeExploder_OUTPUT”CASE_INSENSITIVE_TEST @EvaluateExpression (FDIV STRING_ENCODED, 价值 _attr_name. ,$(EmptyAttributeCounter_WORKSPACE_NAME)_Tester_3)BEGINS_WITH fme_ ENCODED CASE_INSENSITIVE_TEST @EvaluateExpression(FDIV,STRING_ENCODED, 价值 _attr_name. 美元(EmptyAttributeCounter_WORKSPACE_NAME) _Tester_3) BEGINS_WITH @EvaluateExpression (FDIV STRING_ENCODED, ((EmptyAttributeCounter_WORKSPACE_NAME) _PREFIX)美元美元,美元(EmptyAttributeCounter_WORKSPACE_NAME) _Tester_3)编码BOOLEAN_OPERATOR或输出失败FEATURE_TYPE # " $ (EmptyAttributeCounter_WORKSPACE_NAME) _Tester_3_FAILED”------------------------------------------------------------------------- FACTORY_DEF * TestFactory FACTORY_NAME $ (EmptyAttributeCounter_WORKSPACE_NAME) _Tester输入FEATURE_TYPE " $ (EmptyAttributeCounter_WORKSPACE_NAME) _Tester_3_FAILED“测试_attr_value ATTRIBUTE_IS_EMPTY”“编码测试_attr_value ATTRIBUTE_VALUE_NULL”“BOOLEAN_OPERATOR编码或输出通过FEATURE_TYPE " $ (EmptyAttributeCounter_WORKSPACE_NAME) _Tester_PASSED“输出FEATURE_TYPE失败”(EmptyAttributeCounter_WORKSPACE_NAME) _Tester_FAILED美元 " # ------------------------------------------------------------------------- # 创建这个变压器将使用的域名。#因为@Count本身将计算表达式来计算#域,我们不需要在Tcl中通过INCLUDE [set domainPrefix {};如果{{Local} == {Local}} {set domainPrefix [FME_EncodeText {$(EmptyAttributeCounter_WORKSPACE_NAME)_Counter_}];};"MACRO $(EmptyAttributeCounter_WORKSPACE_NAME)_Counter_FULL_DOMAIN ${domainPrefix}@EvaluateExpression(FDIV,STRING_ENCODED, 价值 _attr_name. 美元(EmptyAttributeCounter_WORKSPACE_NAME) _Counter)”;] FACTORY_DEF * ExecuteFunctionFactory FACTORY_NAME $ (EmptyAttributeCounter_WORKSPACE_NAME) _Counter_Rejector COMMAND_PARM_EVALUATION SINGLE_PASS输入FEATURE_TYPE " $ (EmptyAttributeCounter_WORKSPACE_NAME) _Tester_PASSED“FUNCTION_DEFINITION @Count (REJECTABLE_WITH_FLAG fme_encoded,美元($ (EmptyAttributeCounter_WORKSPACE_NAME) _Counter_FULL_DOMAIN),“1”)RESULT_ATTRIBUTE "emp_count" OUTPUT COMPLETE FEATURE_TYPE "$(EmptyAttributeCounter_WORKSPACE_NAME)_Counter_OUTPUT" OUTPUT REJECTED FEATURE_TYPE "$(EmptyAttributeCounter_WORKSPACE_NAME)_Counter_ . " FACTORY_DEF * tefactory FACTORY_NAME "$(EmptyAttributeCounter_WORKSPACE_NAME)_Counter . 变压器输出Nuker “INPUT FEATURE_TYPE” $(EmptyAttributeCounter_WORKSPACE_NAME)_Counter_ “#------------------------------------------------------------------ DEFAULT_MACRO __ $(EmptyAttributeCounter_WORKSPACE_NAME)_StatisticsCalculator_c86143dd_1e55_4e28_82e5_dc87d1db1fe28_GROUP_BY MACRO __ $(EmptyAttributeCounter_WORKSPACE_NAME)_StatisticsCalculator_c86143dd_1e55_4e28_82e5_dc87d1db1fe28_GROUP_BY _attr_name DYNAMIC_FUNCTION_CONFIGURATION的Python FMEOBJECTS DYNAMIC_FUNCTION_CONFIGURATION Python的进口StatisticsCalculator DYNAMIC_FUNCTION_CONFIGURATION蟒“StatisticsCalculator.connectTransformer( '$(EmptyAttributeCounter_WORKSPACE_NAME)_StatisticsCalculator',{ 'GROUP_BY_MACRO': '__ $(EmptyAttributeCounter_WORKSPACE_NAME)_StatisticsCalculator_c86143dd_1e55_4e28_82e5_dc87d1db1fe28_GROUP_BY', 'GROUP_BY': '_ attr_name', 'STATS_ATTRS': 'emp_count', 'MAX_ATTR': 'empty_attributes','compute_histograph':'no','histo_attr':' ”, 'PREPEND_ATTR_NAME': '没有', 'encoded_result_attrs':真,无:无})” FACTORY_DEF * TeeFactory FACTORY_NAME $(EmptyAttributeCounter_WORKSPACE_NAME)_StatisticsCalculator_InputProcessor INPUT FEATURE_TYPE “$(EmptyAttributeCounter_WORKSPACE_NAME)_Counter_OUTPUT” 输出FEATURE_TYPE __ORIGINAL__ @Python(StatisticsCalculator.recordFeature,$(EmptyAttributeCounter_WORKSPACE_NAME)_StatisticsCalculator)FACTORY_DEF * TeeFactory FACTORY_NAME $(EmptyAttributeCounter_WORKSPACE_NAME)_StatisticsCalculator_UnneededInputNuker INPUT FEATURE_TYPE __ORIGINAL__ FACTORY_DEF * SortFactory FACTORY_NAME $(EmptyAttributeCounter_WORKSPACE_NAME)_StatisticsCalculator_CompleteOutputter INPUT FEATURE_TYPE __UNUSED_INPUT_TO_GUARANTEE_FACTORY_DOESNT_CONSUME_EVERYTHING__ FACTORY_DEF * CreationFactory FACTORY_NAME $(EmptyAttributeCounter_WORKSPACE_NAME)_StatisticsCalculator_SummaryCreator CREATE_AT_END NUMBER_TO_CREATE 1个OUTPUT FEATURE_TYPE“$(EmptyAttributeCounter_WORKSPACE_NAME)_StatisticsCalculator_SUMMARY“ 工厂_DEF * ElementFactory FACTORY_NAME $(EmptyAttributeCounter_WORKSPACE_NAME)_StatisticsCalculator_SummaryExploder LIST_NAME $(EmptyAttributeCounter_WORKSPACE_NAME)_StatisticsCalculator_stats {} MODE LEAN_AND_MEAN CLONE_GEOMETRY没有输入FEATURE_TYPE __UNUSED_INPUT_TO_GUARANTEE_FACTORY_DOESNT_CONSUME_EVERYTHING__ INPUT FEATURE_TYPE “$(EmptyAttributeCounter_WORKSPACE_NAME)_StatisticsCalculator_SUMMARY” @Python(StatisticsCalculator.summarizeStatistics,$(EmptyAttributeCounter_WORKSPACE_NAME)_StatisticsCalculator,__ SINGLE_GUY__)输出元件FEATURE_TYPE “$(EmptyAttributeCounter_WORKSPACE_NAME)_StatisticsCalculator_SUMMARY” @Geometry(FIX_FMETYPE_FMEGEOMETRY)#-------------------------------------------------------------------------#创建,该变压器将使用域名。#因为@Count本身将计算表达式来计算#域,我们不需要在Tcl中通过INCLUDE [set domainPrefix {};如果{{本地} == {本地}} {设定domainPrefix [FME_EncodeText {$(EmptyAttributeCounter_WORKSPACE_NAME)_Counter_2_}];};看跌期权“宏$(EmptyAttributeCounter_WORKSPACE_NAME)_Counter_2_FULL_DOMAIN $ {} domainPrefix @EvaluateExpression(FDIV,STRING_ENCODED, 价值 _attr_name. ,$(EmptyAttributeCounter_WORKSPACE_NAME)_Counter_2) “;] FACTORY_DEF * ExecuteFunctionFactory FACTORY_NAME $(EmptyAttributeCounter_WORKSPACE_NAME)_Counter_2_Rejector COMMAND_PARM_EVALUATION SINGLE_PASS INPUT FEATURE_TYPE ”$(EmptyAttributeCounter_WORKSPACE_NAME)_Tester_FAILED“ FUNCTION_DEFINITION @count(REJECTABLE_WITH_FLAG,fme_encoded,$($(EmptyAttributeCounter_WORKSPACE_NAME)_Counter_2_FULL_DOMAIN),” 1")RESULT_ATTRIBUTE “present_count” 输出完成FEATURE_TYPE “$(EmptyAttributeCounter_WORKSPACE_NAME)_Counter_2_OUTPUT” 输出拒绝的FEATURE_TYPE“$(EmptyAttributeCounter_WORKSPACE_NAME)_Counter_2_ “FACTORY_DEF * TeeFactory FACTORY_NAME” $(EmptyAttributeCounter_WORKSPACE_NAME)_Counter_2 变压器输出Nuker “INPUT FEATURE_TYPE” $(EmptyAttributeCounter_WORKSPACE_NAME)_Counter_2_ " # ------------------------------------------------------------------------- DEFAULT_MACRO __ (EmptyAttributeCounter_WORKSPACE_NAME) _StatisticsCalculator_2_e915ef4b_3b51_442a_9a68_056e46c738358_GROUP_BY宏观__美元(EmptyAttributeCounter_WORKSPACE_NAME) _StatisticsCalculator_2_e915ef4b_3b51_442a_9a68_056e46c738358_GROUP_BY _attr_nameDYNAMIC_FUNCTION_CONFIGURATION Python FMEOBJECTS DYNAMIC_FUNCTION_CONFIGURATION Python import StatisticsCalculator DYNAMIC_FUNCTION_CONFIGURATION Python "StatisticsCalculator。connectTransformer ((EmptyAttributeCounter_WORKSPACE_NAME) _StatisticsCalculator_2美元,{“GROUP_BY_MACRO”:“__ (EmptyAttributeCounter_WORKSPACE_NAME) _StatisticsCalculator_2_e915ef4b_3b51_442a_9a68_056e46c738358_GROUP_BY美元”,“GROUP_BY”:“_attr_name”,“STATS_ATTRS”:“present_count”,“MAX_ATTR”:“present_attributes”,“COMPUTE_HISTOGRAM”:“不”,“HISTO_ATTR”:“ ”, 'PREPEND_ATTR_NAME': '没有', 'encoded_result_attrs':真,无:无})” FACTORY_DEF * TeeFactory FACTORY_NAME $(EmptyAttributeCounter_WORKSPACE_NAME)_StatisticsCalculator_2_InputProcessor INPUT FEATURE_TYPE “$(EmptyAttributeCounter_WORKSPACE_NAME)_Counter_2_OUTPUT” 输出FEATURE_TYPE __ORIGINAL__ @Python(StatisticsCalculator.recordFeature,$(EmptyAttributeCounter_WORKSPACE_NAME)_StatisticsCalculator_2)FACTORY_DEF * TeeFactory FACTORY_NAME $(EmptyAttributeCounter_WORKSPACE_NAME)_StatisticsCalculator_2_UnneededInputNuker INPUT FEATURE_TYPE __ORIGINAL__ FACTORY_DEF * SortFactory FACTORY_NAME $(EmptyAttributeCounter_WORKSPACE_NAME)_StatisticsCalculator_2_CompleteOutputter INPUT FEATURE_TYPE __UNUSED_INPUT_TO_GUARANTEE_FACTORY_DOESNT_CONSUME_EVERYTHING__ FACTORY_DEF * CreationFactory FACTORY_NAME $(EmptyAttributeCounter_WORKSPACE_NAME)_StatisticsCalculator_2_SummaryCreator CREATE_AT_END NUMBER_TO_CREATE 1 OUTPUT FEATURE_TYPE“$(EmptyAttributeCounter_WORKSPACE_NAME)_StatisticsCalculator_2_SUMMARY” FACTORY_DEF * ElementFactory FACTORY_NAME $(EmptyAttributeCounter_WORKSPACE_NAME)_StatisticsCalculator_2_SummaryExploder LIST_NAME $(EmptyAttributeCounter_WORKSPACE_NAME)_StatisticsCalculator_2_stats {} MODE LEAN_AND_MEAN CLONE_GEOMETRY没有输入FEATURE_TYPE __UNUSED_INPUT_TO_GUARANTEE_FACTORY_DOESNT_CONSUME_EVERYTHING__ INPUT FEATURE_TYPE “$(EmptyAttributeCounter_WORKSPACE_NAME)_StatisticsCalculator_2_SUMMARY” @Python(StatisticsCalculator.summarizeStatistics,$(EmptyAttributeCounter_WORKSPACE_NAME)_StatisticsCalculator_2,__ SINGLE_GUY__)输出元件FEATURE_TYPE “$(EmptyAttributeCounter_WORKSPACE_NAME)_StatisticsCalculator_2_SUMMARY” @Geometry(FIX_FMETYPE_FMEGEOMETRY)#------------------------------------------------------------------------- FACTORY_DEF {*} FeatureJoinerFactory FACTORY_NAME $(EmptyAttributeCounter_WORKSPACE_NAME)_FeatureJoiner输入left feature_type“$(extuptattributecounter_workspace_name)_statisticscalculator_2_summary”输入右特征_type“$(extentattributecounter_workspace_name)_statisticscalculator_summary“join_mode full joxys _attr_name _attr_name自动attr_conflict_res use_left geometry_handling use_left输出加入feature_type”$(extuptattributecounter_workspace_name)_featurejoiner_joined“#-----------------------------------------------------------------------------------------------------------------*} AttrSetFactory COMMAND_PARM_EVALUATION SINGLE_PASS FACTORY_NAME $(EmptyAttributeCounter_WORKSPACE_NAME)_AttributeManager INPUT FEATURE_TYPE “$(EmptyAttributeCounter_WORKSPACE_NAME)_FeatureJoiner_JOINED” MULTI_FEATURE_MODE NO NULL_ATTR_MODE NO_OP ATTRSET_CREATE_DIRECTIVES _PROPAGATE_MISSING_FDIV ACTION_COLUMN 3 DEF_VAL_COLUMN 2 ATTR_ACTION { “_attr_name”, “属性” “” “RENAME_SET_VALUE”}输出的输出FEATURE_TYPE“$(extuptattributecounter_workspace_name)_attributemanager_output“#------------------------------------------------------------------------ TCL2 PROC $(Extentattributecounter_Workspace_name)_nullattributemapper_3ebdfef2_efec_4ff9_aaf0_fb81f6bb238c5_null_replacer {otherValue NEWVALUE的regexp} {集ATTRS [分裂{present_attributes empty_attributes} {}];设置解码真;if {{selected} == {all}} {set attrs [fme_attributenames];设置解码FALSE; }; set decodedVal [FME_DecodeText $otherValue]; set decodedRegExp [FME_DecodeText $regExp]; foreach attr $attrs { set act {NOOP}; if {$decode} { set attr [FME_DecodeText $attr]; }; if {[FME_AttributeExists $attr]} { set attrVal [FME_GetAttribute $attr]; if {[FME_IsAttributeNull $attr] } { if {[string first {SETNULL} {SETNULL}] != -1} { set act {SETVALUE}; }; } elseif { [string first {EMPTY} {SETNULL}] != -1 && $attrVal == {}} { set act {SETVALUE}; } elseif { $otherValue != {} && [string equal $attrVal $decodedVal]} { set act {SETVALUE}; } elseif { $decodedRegExp != {} } { set results [FME_GetRegex $decodedRegExp $attrVal]; if {[llength [lindex $results 0]] > 0} { set act {SETVALUE}; } }; } elseif {[string first {MISSINGATTR} {SETNULL}] != -1} { set act {SETVALUE}; }; if {$act == {DELETEATTR} } { FME_UnsetAttributes $attr; } elseif { $act == {SETVALUE} } { FME_SetAttribute $attr [FME_DecodeText $newValue]; } elseif { $act == {SETNULL} } { FME_SetAttributeNull $attr; } elseif { $act == {EMPTY} } { FME_SetAttribute $attr {}; }; }; } FACTORY_DEF * TeeFactory FACTORY_NAME $(EmptyAttributeCounter_WORKSPACE_NAME)_NullAttributeMapper INPUT FEATURE_TYPE "$(EmptyAttributeCounter_WORKSPACE_NAME)_AttributeManager_OUTPUT" OUTPUT FEATURE_TYPE "$(EmptyAttributeCounter_WORKSPACE_NAME)_NullAttributeMapper_OUTPUT" @Tcl2("$(EmptyAttributeCounter_WORKSPACE_NAME)_NullAttributeMapper_3ebdfef2_efec_4ff9_aaf0_fb81f6bb238c5_null_replacer {} {0} {}") FACTORY_DEF * TeeFactory FACTORY_NAME "$(EmptyAttributeCounter_WORKSPACE_NAME)_AttributeManager_Output1550073417 Output Collector" INPUT FEATURE_TYPE "$(EmptyAttributeCounter_WORKSPACE_NAME)_NullAttributeMapper_OUTPUT" OUTPUT FEATURE_TYPE "$(EmptyAttributeCounter_WORKSPACE_NAME)_AttributeManager_Output" INCLUDE [puts {MACRO WB_CURRENT_CONTEXT $(WB_OLD_CONTEXT_$(EmptyAttributeCounter_WORKSPACE_NAME))}] FACTORY_DEF * TeeFactory FACTORY_NAME "EmptyAttributeCounter AttributeManager_Output Output Renamer/Nuker" INPUT FEATURE_TYPE EmptyAttributeCounter_AttributeManager_Output OUTPUT FEATURE_TYPE EmptyAttributeCounter_AttributeManager_Output # ------------------------------------------------------------------------- # Assumption is that the workspace temp dir has been already set and created. See controldefs.cpp - ControlDefs::writeVisualizerTempDir DEFAULT_MACRO WORKSPACE_TEMP_DIR INCLUDE [ set safeName "[regsub -all {[^a-zA-Z0-9]} {FeatureMerger_Merged} _]_[expr round(rand() * 1000000)]_[clock clicks -milliseconds]"; puts "MACRO SAFE_FFS_NAME $safeName"; ] FACTORY_DEF {*} InspectorFactory FACTORY_NAME FeatureMerger_Merged_Prepper COMMAND_PARM_EVALUATION SINGLE_PASS INPUT FEATURE_TYPE EmptyAttributeCounter_AttributeManager_Output GROUP_ATTRIBUTE __inspector_feature_type_attr__ GROUP_BY { } GROUP_ATTRIBUTE_PREFIX { FeatureMerger_Merged } RASTER_REDUCTION NoReduction POINT_CLOUD_REDUCTION NO_THINNING OUTPUT RESULT FEATURE_TYPE __viewme__ # Now route all the features into the recorder, changing their # feature type to the transformer name so that they view nicely DEFAULT_MACRO VISUALIZER_FEATURE_FILE $(WORKSPACE_TEMP_DIR)/$(SAFE_FFS_NAME).ffs DEFAULT_MACRO VISUALIZER_CREATE_SPATIAL_INDEX NO # [PR#45549] The Data Inspector will limit the maximum number of features # it reads on WIN32, so we will correspondingly limit the number of # features we record here using the MAX_FEATURES_TO_RECORD directive. FACTORY_DEF * RecorderFactory FACTORY_NAME FeatureMerger_Merged_Recorder COMMAND_PARM_EVALUATION SINGLE_PASS INPUT FEATURE_TYPE __viewme__ _wb_termination_feature Yes @FeatureType(TERMINATOR_@Value(_wb_termination_xformer)) INPUT FEATURE_TYPE __viewme__ @FeatureType(@Value(__inspector_feature_type_attr__)) @RemoveAttributes(__inspector_feature_type_attr__) FEATURE_FILE "$(VISUALIZER_FEATURE_FILE)" STORE_SCANNED_SCHEMA YES CREATE_SPATIAL_INDEX "$(VISUALIZER_CREATE_SPATIAL_INDEX)" INSPECTOR "$(VISUALIZER_CREATE_SPATIAL_INDEX)" FSC_SCHEMA Attribute,varchar 255. ,present_attributes,VARCHAR 255. ,empty_attributes,VARCHAR 255. 模式记录STORE_SCANNED_METADATA RECORD_DIRECTLY_TO_DISK是的MAX_FEATURES_TO_RECORD WIN32 2000000 # ------------------------------------------------------------------------- FACTORY_DEF * RoutingFactory FACTORY_NAME“目的地功能类型路由相关器”COMMAND_PARM_EVALUATION FEATURE_TYPE * FEATURE_TYPE_ATTRIBUTE SINGLE_PASS输入__wb_out_feat_type__输出路由FEATURE_TYPE *输出NOT_ROUTED FEATURE_TYPE __nuke_me__ @Tcl2(“FME_StatMessage 818059 [FME_GetAttribute fme_template_feature_type) 818060 818061 fme_warn ") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME输入FEATURE_TYPE“最终输出核武器”__nuke_me __ # ------------------------------------------------------------------------- FACTORY_DEF * CreationFactory FACTORY_NAME VisualizerProcessor CREATE_AT_END输出FEATURE_TYPE __NUKEME__ @TCL(“如果[文件存在{$ (WORKSPACE_TEMP_DIR)}]{设置文件[水珠-nocomplain目录{$ (WORKSPACE_TEMP_DIR)}反面* .ffs];如果{[llength $files] == 1} {set theFile {$(WORKSPACE_TEMP_DIR)/};添加文件[lindex $files 0];eval FME_Execute System \173\042$(FME_HOME_UNIX)/fmedatainspector\042——visualizer——single-application——delete-on-close——no-source-prompt -f FFS \042$theFile\042 & \175;} else {[llength $files] == 0} {catch {file delete -force {$(WORKSPACE_TEMP_DIR)}};} else {set filesNoExt {};设置lastfile {};foreach {fileName} [lsort $files] {set fileNoExt [string trimright $fileName {.ffs}]; if [regexp {(.*)_[0-9]*$} $fileNoExt wholething fileNoExtBase] { if { $fileNoExtBase == $lastfile } { continue } }; set lastfile $fileNoExt; lappend filesNoExt $fileNoExt }; eval FME_Execute System \173\042$(FME_HOME_UNIX)/fmedatainspector\042 --visualizer --single-application --delete-on-close --no-source-prompt -d {$(WORKSPACE_TEMP_DIR)} -a ffs -f FFS $filesNoExt & \175; }; }; ") FACTORY_DEF * TeeFactory FACTORY_NAME VisualizerCleaner INPUT FEATURE_TYPE __NUKEME__