#!#! #! #! #!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #! #!#!#!#! #!#!#! #!

Explode all the attributes and ignore all the numeric and FME fields.

" POSITION="-64 -235.75043750437504" TOP_LEFT="-64 -235.75043750437504" BOTTOM_RIGHT="743.75743757437567 -422.0020000200002" BOUNDING_RECT="-64 -235.75043750437504 807.75743757437567 186.25156251562515" ORDER="500000000000120" FOLLOW_ANCHOR="true" INFO_NODE="false" CUSTOM_USER_COLOR="false" COLOUR="1,1,0.95686274509803926,0.78431372549019607" SIZE_POLICY="10" ANCHORED_NODE="11">
#!

Select the values that have the max length, and pick the first one

" POSITION="2368 -320" TOP_LEFT="2368 -320" BOTTOM_RIGHT="3228.2835628356283 -462.50112501125011" BOUNDING_RECT="2368 -320 860.28356283562835 142.50112501125011" ORDER="499999999999999" FOLLOW_ANCHOR="true" INFO_NODE="false" CUSTOM_USER_COLOR="false" COLOUR="1,1,0.95686274509803926,0.78431372549019607" SIZE_POLICY="10" ANCHORED_NODE="18">
#!

Group by _attr_name,

and calculate the max length

" POSITION="1792 -576" TOP_LEFT="1792 -576" BOTTOM_RIGHT="2373.2558125581254 -718.50112501125011" BOUNDING_RECT="1792 -576 581.2558125581254 142.50112501125011" ORDER="500000000000130" FOLLOW_ANCHOR="true" INFO_NODE="false" CUSTOM_USER_COLOR="false" COLOUR="1,1,0.95686274509803926,0.78431372549019607" SIZE_POLICY="10" ANCHORED_NODE="4">
#!

Sort the list of attributes alphatically or longest first

" POSITION="3392 -320" TOP_LEFT="3392 -320" BOTTOM_RIGHT="3947.0407504075038 -462.50112501125011" BOUNDING_RECT="3392 -320 555.04075040750377 142.50112501125011" ORDER="499999999999998" FOLLOW_ANCHOR="true" INFO_NODE="false" CUSTOM_USER_COLOR="false" COLOUR="1,1,0.95686274509803926,0.78431372549019607" SIZE_POLICY="10" ANCHORED_NODE="26">
#!

NB: Selecting "Type Is STRING" doesn't work, as it selects all attributes!!

" POSITION="-64 -1536" TOP_LEFT="-64 -1536" BOTTOM_RIGHT="817.25831258312587 -1535" BOUNDING_RECT="-64 -1536 881.25831258312587 -1" ORDER="499999999999997" FOLLOW_ANCHOR="true" INFO_NODE="false" CUSTOM_USER_COLOR="false" COLOUR="1,1,0.95686274509803926,0.78431372549019607" SIZE_POLICY="10" ANCHORED_NODE="16">
#!#!#!#!#!#!
#! #!#! #!#! #! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#! #!#! #!#! #!#! #!#!
FME_PYTHON_VERSION 37 GUI IGNORE SourceDataset_FILEGDB_1,FILEGDB_IN_FME_CONNECTION_GROUP_FILEGDB_1,FILEGDB_IN_ADVANCED_FILEGDB_1,FILEGDB_IN_BEGIN_SQL_FILEGDB_1,FILEGDB_IN_END_SQL_FILEGDB_1,FILEGDB_IN_STRIP_GUID_GLOBALID_BRACES_FILEGDB_1,FILEGDB_IN_GEOMETRY_FILEGDB_1,FILEGDB_IN_SIMPLE_DONUT_GEOMETRY_FILEGDB_1,FILEGDB_IN_USE_SEARCH_ENVELOPE_FILEGDB_1,FILEGDB_IN_SEARCH_ENVELOPE_MINX_FILEGDB_1,FILEGDB_IN_SEARCH_ENVELOPE_MINY_FILEGDB_1,FILEGDB_IN_SEARCH_ENVELOPE_MAXX_FILEGDB_1,FILEGDB_IN_SEARCH_ENVELOPE_MAXY_FILEGDB_1,FILEGDB_IN_SEARCH_ENVELOPE_COORDINATE_SYSTEM_FILEGDB_1,FILEGDB_IN_CLIP_TO_ENVELOPE_FILEGDB_1,FILEGDB_IN_NETWORK_AUTHENTICATION_FILEGDB_1 DEFAULT_MACRO SourceDataset_FILEGDB S:\ 41526164 - UU城市蠕变\ UrbanCreep.gdb GUIsource_geodatabase sourceDataset_filegdb文件地理数据库:包括[if {{$(sourceatataSet_filegdb)} == {}} {puts_real {参数'sourceatataset_filegdb'必须给出一个值。};退出1;};]#!start_header#!START_WB_HEADER READER_TYPE MULTI_READER MULTI_READER_TYPE {0} FILEGDB MULTI_READER_KEYWORD {0} FILEGDB_1 MULTI_READER_GEN_DIRECTIVES {0} BEGIN_SQL ,, ADVANCED ,, GEOMETRY ,, SIMPLE_DONUT_GEOMETRY,简单,TABLELIST,Buildings_wABPCount_CPnt,SEARCH_ENVELOPE_MINX,0,END_SQL ,, SEARCH_ENVELOPE_MAXX,0,EXPOSE_ATTRS_GROUP ,, QUERY_FEATURE_TYPES_FOR_MERGE_FILTERS,是的,filegb_expose_format_attrs ,,搜索_envelope_miny,0,search_envelope_maxy,0,search_envelope,no,strip_guid_globalid_braces,yes,search_envelope_coords_system,no riter_type null writer_keyword null_dest null_dest_dataset null#!END_WB_HEADER # !start_wb_header宏wb_keyword“filegdb_1”#!END_WB_HEADER # ! START_SOURCE_HEADER FILEGDB FILEGDB_1 # The dataset this mapping file was generated from was: #! END_SOURCE_HEADER #! START_WB_HEADER DEFAULT_MACRO SourceDataset INCLUDE [ if {{$(SourceDataset)} != ""} { \ puts {DEFAULT_MACRO SourceDataset_FILEGDB_1 $(SourceDataset)} \ } ] #! END_WB_HEADER #! START_SOURCE_HEADER FILEGDB FILEGDB_1 DEFAULT_MACRO SourceDataset_FILEGDB_1 $(SourceDataset_FILEGDB) GUI SOURCE_GEODATABASE SourceDataset_FILEGDB_1 File Geodatabase: DEFAULT_MACRO FILEGDB_IN_QUERY_FEATURE_TYPES_FOR_MERGE_FILTERS_FILEGDB_1 Yes FILEGDB_1_QUERY_FEATURE_TYPES_FOR_MERGE_FILTERS "$(FILEGDB_IN_QUERY_FEATURE_TYPES_FOR_MERGE_FILTERS_FILEGDB_1)" DEFAULT_MACRO FILEGDB_IN_FME_CONNECTION_GROUP_FILEGDB_1 GUI OPTIONAL DISCLOSUREGROUP FILEGDB_IN_FME_CONNECTION_GROUP_FILEGDB_1 FILEGDB_IN_NAMED_CONNECTION Database Connection DEFAULT_MACRO FILEGDB_IN_ADVANCED_FILEGDB_1 GUI OPTIONAL DISCLOSUREGROUP FILEGDB_IN_ADVANCED_FILEGDB_1 FILEGDB_IN_BEGIN_SQL_FILEGDB_1%FILEGDB_IN_END_SQL_FILEGDB_1%FILEGDB_IN_GEOMETRY_FILEGDB_1%FILEGDB_IN_STRIP_GUID_GLOBALID_BRACES_FILEGDB_1 Advanced DEFAULT_MACRO FILEGDB_IN_BEGIN_SQL_FILEGDB_1 FILEGDB_1_BEGIN_SQL "$(FILEGDB_IN_BEGIN_SQL_FILEGDB_1)" GUI OPTIONAL TEXT_EDIT_SQL_CFG FILEGDB_IN_BEGIN_SQL_FILEGDB_1 MODE,SQL;FORMAT,FILEGDB SQL To Run Before Read DEFAULT_MACRO FILEGDB_IN_END_SQL_FILEGDB_1 FILEGDB_1_END_SQL "$(FILEGDB_IN_END_SQL_FILEGDB_1)" GUI OPTIONAL TEXT_EDIT_SQL_CFG FILEGDB_IN_END_SQL_FILEGDB_1 MODE,SQL;FORMAT,FILEGDB SQL To Run After Read DEFAULT_MACRO FILEGDB_IN_STRIP_GUID_GLOBALID_BRACES_FILEGDB_1 yes FILEGDB_1_STRIP_GUID_GLOBALID_BRACES "$(FILEGDB_IN_STRIP_GUID_GLOBALID_BRACES_FILEGDB_1)" GUI CHOICE FILEGDB_IN_STRIP_GUID_GLOBALID_BRACES_FILEGDB_1 yes%no Strip braces off GlobalID and GUID: DEFAULT_MACRO FILEGDB_IN_GEOMETRY_FILEGDB_1 GUI OPTIONAL DISCLOSUREGROUP FILEGDB_IN_GEOMETRY_FILEGDB_1 FILEGDB_IN_SIMPLE_DONUT_GEOMETRY_FILEGDB_1 Geometry # ============================================================================ # Option to use simple donut geometry creation, which is faster than the # original creation method, but less meticulous at detecting and correcting # geometric anomalies DEFAULT_MACRO FILEGDB_IN_SIMPLE_DONUT_GEOMETRY_FILEGDB_1 simple FILEGDB_1_SIMPLE_DONUT_GEOMETRY "$(FILEGDB_IN_SIMPLE_DONUT_GEOMETRY_FILEGDB_1)" GUI LOOKUP_CHOICE FILEGDB_IN_SIMPLE_DONUT_GEOMETRY_FILEGDB_1 "\"Orientation Only\",simple"%"\"Orientation and Spatial Relationship\",complex" Donut Geometry Detection DEFAULT_MACRO FILEGDB_IN_EXPOSE_ATTRS_GROUP_FILEGDB_1 FILEGDB_1_EXPOSE_ATTRS_GROUP "$(FILEGDB_IN_EXPOSE_ATTRS_GROUP_FILEGDB_1)" # Include this file in source setting section to add native search envelope processing # Zero as a default means we don't do any search -- this makes workbench happier DEFAULT_MACRO FILEGDB_IN_USE_SEARCH_ENVELOPE_FILEGDB_1 NO FILEGDB_1_USE_SEARCH_ENVELOPE "$(FILEGDB_IN_USE_SEARCH_ENVELOPE_FILEGDB_1)" GUI ACTIVEDISCLOSUREGROUP FILEGDB_IN_USE_SEARCH_ENVELOPE_FILEGDB_1 FILEGDB_IN_SEARCH_ENVELOPE_MINX_FILEGDB_1%FILEGDB_IN_SEARCH_ENVELOPE_MINY_FILEGDB_1%FILEGDB_IN_SEARCH_ENVELOPE_MAXX_FILEGDB_1%FILEGDB_IN_SEARCH_ENVELOPE_MAXY_FILEGDB_1%FILEGDB_IN_SEARCH_ENVELOPE_COORDINATE_SYSTEM_FILEGDB_1%FILEGDB_IN_CLIP_TO_ENVELOPE_FILEGDB_1%FILEGDB_IN_SEARCH_METHOD%FILEGDB_IN_SEARCH_METHOD_FILTER%FILEGDB_IN_SEARCH_ORDER%FILEGDB_IN_SEARCH_FEATURE%FILEGDB_IN_DUMMY_SEARCH_ENVELOPE_PARAMETER Use Search Envelope # =========================================================================== GUI LOOKUP FILEGDB_IN_SEARCH_ENVELOPE_MINX_FILEGDB_1 ,0 filegdb_in_search_envelope minx_filegdb_1 0 filegdb_1_search_envelope "$(filegdb_in_search_envelope minx_filegdb_1)"GUI可选浮FILEGDB_IN_SEARCH_ENVELOPE_MINX_FILEGDB_1最小X : # =========================================================================== GUI查找FILEGDB_IN_SEARCH_ENVELOPE_MINY_FILEGDB_1 ,0 default_macro filegdb_in_search_envelope miny_filegdb_1 0 filegdb_1_search_envelope "$(filegdb_in_search_envelope miny_filegdb_1)"GUI可选浮FILEGDB_IN_SEARCH_ENVELOPE_MINY_FILEGDB_1最低Y : # =========================================================================== GUI查找FILEGDB_IN_SEARCH_ENVELOPE_MAXX_FILEGDB_1 ,0 default_macro filegdb_in_search_envelope maxx_filegdb_1 0 filegdb_1_search_envelope "$(filegdb_in_search_envelope maxx_filegdb_1)"GUI可选浮FILEGDB_IN_SEARCH_ENVELOPE_MAXX_FILEGDB_1最大X : # =========================================================================== GUI查找FILEGDB_IN_SEARCH_ENVELOPE_MAXY_FILEGDB_1 ,0 default_macro filegdb_in_search_envelope maxy_filegdb_1 0 filegdb_1_search_envelope "$(filegdb_in_search_envelope e_maxy_filegdb_1)"GUI可选浮FILEGDB_IN_SEARCH_ENVELOPE_MAXY_FILEGDB_1最大Y : # =========================================================================== GUI查找FILEGDB_IN_SEARCH_ENVELOPE_COORDINATE_SYSTEM_FILEGDB_1 filegdb_in_search_envele_coordinate_system_filegdb_1 filegdb_1_search_envelope "$(filegdb_in_search_envelope e_coordinate_system_filegdb_1)"GUI可选COORDSYS FILEGDB_IN_SEARCH_ENVELOPE_COORDINATE_SYSTEM_FILEGDB_1搜索信封坐标系统 : # =========================================================================== GUI查找FILEGDB_IN_CLIP_TO_ENVELOPE_FILEGDB_1 , no filegdb_in_clip_to_envelope filegdb_1 no filegdb_1_clip_to_envelope "$(filegdb_in_clip_to_envelope)"GUI可选复选框FILEGDB_IN_CLIP_TO_ENVELOPE_FILEGDB_1是的%不夹搜索信封 # # =========================================================================== DEFAULT_MACRO FILEGDB_IN_NETWORK_AUTHENTICATION_FILEGDB_1 FILEGDB_1_NETWORK_AUTHENTICATION " $ (FILEGDB_IN_NETWORK_AUTHENTICATION_FILEGDB_1) "GUI可选身份FILEGDB_IN_NETWORK_AUTHENTICATION_FILEGDB_1容器%组% CONTAINER_TITLE %“网络身份验证”% PROMPT_TYPE %网络网络身份验证 # ============================================================================ DEFAULT_MACRO FILEGDB_IN_ATTRIBUTE_READING_FILEGDB_1 DEFLINE FILEGDB_1_ATTRIBUTE_READING" $ (FILEGDB_IN_ATTRIBUTE_READING_FILEGDB_1) "# ============================================================================ 19238年FILEGDB_1_GENERATE_FME_BUILD_NUM FILEGDB_1_DATASET " $ (SourceDataset_FILEGDB_1) "#!END_SOURCE_HEADER # !START_WB_HEADER # !END_WB_HEADER # !END_HEADER LOG_FILENAME " $ (FME_MF_DIR) MaxAttributeLengthCalculator.log“LOG_APPEND不LOG_TIMINGS是的LOG_FILTER_MASK 1 LOG_MAX_FEATURES 200 LOG_MAX_RECORDED_FEATURES 200 FME_REPROJECTION_ENGINE FME FME_IMPLICIT_CSMAP_REPROJECTION_MODE汽车FME_GEOMETRY_HANDLING增强FME_STROKE_MAX_DEVIATION 0 DEFAULT_MACRO DATASET_KEYWORD_FILEGDB_1 FILEGDB_1 # ------------------------------------------------------------------------- FILEGDB_1_READER_META_ATTRIBUTES fme_feature_type # ------------------------------------------------------------------------- FILEGDB_1_MAX_FEATURES 1000 MULTI_READER_CONTINUE_ON_READER_FAILURE No # ------------------------------------------------------------------------- MACRO WORKSPACE_NAME MaxAttributeLengthCalculator 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 # ------------------------------------------------------------------------- FACTORY_DEF * RoutingFactory FACTORY_NAME "Router and Unexpected Input Remover" COMMAND_PARM_EVALUATION SINGLE_PASS MULTI_READER_KEYWORD $(DATASET_KEYWORD_FILEGDB_1) INPUT FEATURE_TYPE * ROUTE FILEGDB FILEGDB_1::Buildings_wABPCount_CPnt multi_reader_keyword,$(DATASET_KEYWORD_FILEGDB_1) TO FME_GENERIC ::Buildings_wABPCount_CPnt ALIAS_GEOMETRY MERGE_INPUT Yes OUTPUT ROUTED FEATURE_TYPE * FILEGDB_1_MERGE_DEF FILEGDB_1::Buildings_wABPCount_CPnt EXACT Buildings_wABPCount_CPnt DEFLINE filegdb_type,geodb_point,filegdb_where_wwjd,,fme_attribute_reading,defined,BldID,double,TOID,text 16 , smallint BasementFlag BldArea、双ABPCount,短整型,PrimaryABP_UPRN,翻倍,PrimaryABP_Sub_Building_Name、文本 60 、PrimaryABP_Building_Name、文本 60 , smallint PrimaryABP_Building_Number PrimaryABP_Dep_Thoroughfare_Name、文本 80 、PrimaryABP_Thoroughfare_Name、文本 80 、PrimaryABP_Double_Dependent_Locality、文本 35 、PrimaryABP_Dependent_Locality、文本 35 、PrimaryABP_Post_Town、文本 30. 、PrimaryABP_Postcode、文本 8 、PrimaryABP_Full_Address、文本 200 、PrimaryABP_Classification_Code、文本 6 、PrimaryABP_Classification_Desc、文本 120 、PrimaryABP_Primary_Desc、文本 29 、PrimaryABP_Secondary_Desc、文本 120 、PrimaryABP_Tertiary_Desc、文本 113 、PrimaryABP_Quaternary_Desc、文本 51 、PrimaryABP_Creep_Category、文本 27 , smallint PrimaryABP_NRPFlag PrimaryABP_NRD_Description、文本 34 、PrimaryABP_NRD_MCM_Code、文本 9 、PrimaryABP_MCM_NRD_Description、文本 24 ,PrimaryABP_MCM_Code,smallint,OBJECTID, OBJECTID # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME "Buildings_wABPCount_CPnt (FILEGDB_1) Splitter" INPUT FEATURE_TYPE Buildings_wABPCount_CPnt OUTPUT FEATURE_TYPE Buildings_wABPCount_CPnt_FILEGDB_1 DEFAULT_MACRO WB_CURRENT_CONTEXT #------------------------------------------------------------------------- FACTORY_DEF * AttributeFactory FACTORY_NAME AttributeExploder输入FEATURE_TYPE Buildings_wABPCount_CPnt_FILEGDB_1 ATTR_NAME_LABEL“_attr_name ATTR_VALUE_LABEL“_attr_value KEEP_GEOMETRY没有KEEP_ATTRIBUTES EXPLODING_TYPE EXPLODE_AS_FEATURES LIST_NAME” {}“输出爆炸FEATURE_TYPE AttributeExploder_OUTPUT # ------------------------------------------------------------------------- FACTORY_DEF * TestFactory FACTORY_NAME Tester_2输入FEATURE_TYPE AttributeExploder_OUTPUT测试@EvaluateExpression (FDIV STRING_ENCODED, 价值 _attr_value / / / / / / / / / / / 价值 _attr_name / / / / / / / / / / 价值 _attr_name Tester_2) NOT_BEGINS_WITH multi_编码BOOLEAN_OPERATOR复合COMPOSITE_TEST_EXPR“1和2和3的输出通过FEATURE_TYPE Tester_2_PASSED # ------------------------------------------------------------------------- Tcl2 proc StringLengthCalculator_calc_len {} {FME_SetAttribute{“_length”}(字符串长度(FME_GetAttribute{“_attr_value”}]]} FACTORY_DEF * TeeFactory FACTORY_NAME StringLengthCalculator INPUT FEATURE_TYPE Tester_2_PASSED OUTPUT FEATURE_TYPE StringLengthCalculator_OUTPUT @Tcl2(StringLengthCalculator_calc_len) # ------------------------------------------------------------------------- DEFAULT_MACRO __StatisticsCalculator_4e2ad2f9_220e_4ad5_acec_01788b1dd93314_GROUP_BY MACRO __StatisticsCalculator_4e2ad2f9_220e_4ad5_acec_01788b1dd93314_GROUP_BY _attr_name MACRO StatisticsCalculator_4e2ad2f9_220e_4ad5_acec_01788b1dd93314_PORT_SPECIFIED no INCLUDE [puts_real {$(StatisticsCalculator_4e2ad2f9_220e_4ad5_acec_01788b1dd93314_PORT_SPECIFIED)} DYNAMIC_FUNCTION_CONFIGURATION Python FMEOBJECTS DYNAMIC_FUNCTION_CONFIGURATION Python import StatisticsCalculator DYNAMIC_FUNCTION_CONFIGURATION Python "StatisticsCalculator.connectTransformer( 'StatisticsCalculator',{ 'GROUP_BY_MACRO':'__StatisticsCalculator_4e2ad2f9_220e_4ad5_acec_01788b1dd93314_GROUP_BY', 'GROUP_BY':'_attr_name', 'STATS_ATTRS':'_length', 'MAX_ATTR':'_max', 'COMPUTE_HISTOGRAM':'NO', 'HISTO_ATTR':' ', 'PREPEND_ATTR_NAME':'No', 'encoded_result_attrs':True, 'cumulative_mode':'$(StatisticsCalculator_4e2ad2f9_220e_4ad5_acec_01788b1dd93314_PORT_SPECIFIED)', None:None})"FACTORY_DEF * TeeFactory FACTORY_NAME StatisticsCalculator_InputProcessor INPUT FEATURE_TYPE StringLengthCalculator_OUTPUT OUTPUT FEATURE_TYPE __ORIGINAL__ @Python(StatisticsCalculator. recordfeature,StatisticsCalculator) FACTORY_DEF * TeeFactory FACTORY_NAME statisticscalculator_unneeddedinputnuker INPUT FEATURE_TYPE __ORIGINAL__ OUTPUT FEATURE_TYPEStatisticsCalculator_COMPLETE FACTORY_DEF * SortFactory FACTORY_NAME StatisticsCalculator_CompleteOutputter INPUT FEATURE_TYPE __UNUSED_INPUT_TO_GUARANTEE_FACTORY_DOESNT_CONSUME_EVERYTHING__ INPUT FEATURE_TYPE StatisticsCalculator_COMPLETE OUTPUT SORTED FEATURE_TYPE StatisticsCalculator_COMPLETE @Python(StatisticsCalculator.summarizeStatistics,StatisticsCalculator,__ORIGINAL__) FACTORY_DEF * CreationFactory FACTORY_NAME StatisticsCalculator_SummaryCreator CREATE_AT_END NUMBER_TO_CREATE 1 FACTORY_DEF * ElementFactory FACTORY_NAME StatisticsCalculator_SummaryExploder LIST_NAME StatisticsCalculator_stats{} MODE LEAN_AND_MEAN CLONE_GEOMETRY no INPUT FEATURE_TYPE __UNUSED_INPUT_TO_GUARANTEE_FACTORY_DOESNT_CONSUME_EVERYTHING__ # ------------------------------------------------------------------------- FACTORY_DEF * TestFactory FACTORY_NAME Tester INPUT FEATURE_TYPE StatisticsCalculator_COMPLETE TEST @EvaluateExpression(FDIV,STRING_ENCODED, 价值 _length 、测试人员)= @EvaluateExpression (FDIV STRING_ENCODED, 价值 _max 、测试人员)编码BOOLEAN_OPERATOR或COMPOSITE_TEST_EXPR“1”输出通过FEATURE_TYPE Tester_PASSED # ------------------------------------------------------------------------- # 如果我们做最后N特性,那么乘数为0。如果我们先做N,乘数是-1。# For RANDOM, we need to treat LAST N as if it is first N (i.e. have a -1) #这是什么?:在比率乘数。INCLUDE [if {{-1} == {0} && {ORIGINAL} == {ORIGINAL}} {puts "MACRO REAL_MODE LAST";"MACRO REAL_RATE 1";} else {"MACRO REAL_MODE ORIGINAL";"MACRO REAL_RATE [expr 1 * (-1 ?-1: -1)]";}] FACTORY_DEF {*} SamplingFactory FACTORY_NAME Sampler COMMAND_PARM_EVALUATION SINGLE_PASS SAMPLE_RATE $(REAL_RATE) SAMPLE_ORDER $(REAL_MODE) GROUP_BY {_attr_name} INPUT FEATURE_TYPE Tester_PASSED OUTPUT SAMPLED FEATURE_TYPE ___SAMPLED___ #这个TeeFactory是需要的,因为如果Sampler没有OUTPUT子句,它仍然会输出特性 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 * SortFactory FACTORY_NAME Sorter INPUT FEATURE_TYPE Sampler_SAMPLED SORT_BY _attr_name ALPHA ASCENDING OUTPUT SORTED FEATURE_TYPE Sorter_SORTED # ------------------------------------------------------------------------- # 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]} {StatisticsCalculator_Complete} _]_[expr round(rand() * 1000000)]_[clock clicks -milliseconds]"; puts "MACRO SAFE_FFS_NAME $safeName"; ] FACTORY_DEF {*} InspectorFactory FACTORY_NAME StatisticsCalculator_Complete_Prepper COMMAND_PARM_EVALUATION SINGLE_PASS INPUT FEATURE_TYPE Sorter_SORTED GROUP_ATTRIBUTE __inspector_feature_type_attr__ GROUP_BY { } GROUP_ATTRIBUTE_PREFIX { StatisticsCalculator_Complete } 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 StatisticsCalculator_Complete_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 _attr_name,varchar 255 、_attr_value varchar 255 、_length varchar 255 、_max 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 __ # ------------------------------------------------------------------------- DEFAULT_MACRO FME_LAUNCH_VIEWER_APP没有FACTORY_DEF * CreationFactory FACTORY_NAME VisualizerProcessor CREATE_AT_END输出FEATURE_TYPE __NUKEME__ @TCL(“如果{{$ (FME_LAUNCH_VIEWER_APP)} = ={是的}}{如果[文件存在{$ (WORKSPACE_TEMP_DIR)}][水珠{设置文件-nocomplain -directory {$(WORKSPACE_TEMP_DIR)} -tails *.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__