best to work in local coordinates
" POSITION="10501.16084523895 4154.6027660276595" TOP_LEFT="10501.16084523895 4154.6027660276595" BOTTOM_RIGHT="10881.358813588136 4012.1016410164093" BOUNDING_RECT="10501.16084523895 4154.6027660276595 380.19796834918634 142.50112501125011" ORDER="500000000000248" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.78431372549019607,0.19607843137254902" SIZE_POLICY="10" ANCHORED_NODE="16">Find points within 161m
" POSITION="10525.16084523895 3349.2669026690255" TOP_LEFT="10525.16084523895 3349.2669026690255" BOTTOM_RIGHT="10955.16084523895 3350.2669026690255" BOUNDING_RECT="10525.16084523895 3349.2669026690255 430 -1" ORDER="500000000000261" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.78431372549019607,0.19607843137254902" SIZE_POLICY="10" ANCHORED_NODE="20">Create group Id
" POSITION="11175.879416055161 3914.8975589755887" TOP_LEFT="11175.879416055161 3914.8975589755887" BOTTOM_RIGHT="11174.879416055161 3915.8975589755887" BOUNDING_RECT="11175.879416055161 3914.8975589755887 -1 -1" ORDER="500000000000262" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.78431372549019607,0.19607843137254902" SIZE_POLICY="10" ANCHORED_NODE="32">Move largest number of neighbors to top of list
" POSITION="11753.009947360475 3952.3979339793382" TOP_LEFT="11753.009947360475 3952.3979339793382" BOTTOM_RIGHT="12245.9972199722 3809.896808968088" BOUNDING_RECT="11753.009947360475 3952.3979339793382 492.98727261172462 142.50112501125011" ORDER="500000000000264" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.78431372549019607,0.19607843137254902" SIZE_POLICY="10" ANCHORED_NODE="19">Test if point is already grouped
" POSITION="12351.323185047093 3952.3979339793382" TOP_LEFT="12351.323185047093 3952.3979339793382" BOTTOM_RIGHT="12782.323185047093 3953.3979339793382" BOUNDING_RECT="12351.323185047093 3952.3979339793382 431 -1" ORDER="500000000000265" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.78431372549019607,0.19607843137254902" SIZE_POLICY="10" ANCHORED_NODE="36">Add id to used point list
" POSITION="14094.891188911884 3664.2706527065266" TOP_LEFT="14094.891188911884 3664.2706527065266" BOTTOM_RIGHT="14093.891188911884 3665.2706527065266" BOUNDING_RECT="14094.891188911884 3664.2706527065266 -1 -1" ORDER="500000000000267" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.78431372549019607,0.19607843137254902" SIZE_POLICY="10" ANCHORED_NODE="12">Build groups
" POSITION="14200.157732827323 3161.3946839468372" TOP_LEFT="14200.157732827323 3161.3946839468372" BOTTOM_RIGHT="14199.157732827323 3162.3946839468372" BOUNDING_RECT="14200.157732827323 3161.3946839468372 -1 -1" ORDER="500000000000268" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.78431372549019607,0.19607843137254902" SIZE_POLICY="10" ANCHORED_NODE="44">Color groups for display
" POSITION="14704.272282722823 3664.2706527065266" TOP_LEFT="14704.272282722823 3664.2706527065266" BOTTOM_RIGHT="14703.272282722823 3665.2706527065266" BOUNDING_RECT="14704.272282722823 3664.2706527065266 -1 -1" ORDER="500000000000269" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.78431372549019607,0.19607843137254902" SIZE_POLICY="10" ANCHORED_NODE="45">This transformer accepts any features, but features that don't have area geometry will not be used.
Every resulting point will hold attributes that are held by an input area feature containing the point spatially.
If a point is contained by two or more areas in a same group (i.e. the areas are overlapping), the attributes will be migrated from any one of them.
Note:
This is an experimental transformer. Before adding it to your workspace, check enough whether the implementation is suitable to your purpose.
The implementation has been inspired by this thread in FME Community Answers.
Stratified random point in FME
http://fmepedia.safe.com/CommunityAnswers?id=906a0000000d3suAAA
" doc_dynamic_input_attrs="0" doc_extents="7206 2113" doc_top_left="-1425 -1553" fme_document_guid="f43efd25-5719-4db2-abd9-7f56543c38fb" fme_document_priorguid="f8108d54-3033-47f9-8884-2d177ad47848" fme_process_count="NO_PARALLELISM" fme_process_groups_ordered="No" fme_process_group_by="" fmx_attribute_propogation_mode="AUTO" guid="f43efd25-5719-4db2-abd9-7f56543c38fb" history="2014-09-20,TakashiParameters
Group By:
Select attributes that should be used to group input features.
Number of Points:
Specify the number of points to be created.
If you specified the "Group By" parameter, this parameter means the number of points per a group.
Otherwise, it means the total number of points to be created.
" use_markdown="" view_position="-300.003 584.381" xform_deprecated="No" zoom_scale="100"> #!Density of points for each box belonging to same group will be approximately identical.
" POSITION="294 -686" TOP_LEFT="294 -686" BOTTOM_RIGHT="1195 -794" BOUNDING_RECT="294 -686 901 108" ORDER="500000000000000" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.78431372549019607,0.19215686274509805" SIZE_POLICY="10" ANCHORED_NODE="0">randompointgenerator.group_by.lappend 价值观 FME_GetAttribute 景点 返回 加入 价值观 _ 宏复制器@Tcl2(“”)包括[if{[string length{}]==0}{put{MACRO COPIER 1}}}MACRO outputtr“randompointgenerator.group_id”包括[if{[string length{randompointgenerator.group_id}==0}{put{MACRO outputtr}}工厂工厂名称$(randompointgenerator_工作区名称)}tclu“$(RandomPointGenerator\u WORKSPACE\u NAME)\u ParameterFetcher\u OUTPUT”份数$(复印机)输出功能\u类型“$(RandomPointGenerator\u WORKSPACE\u NAME)\u TclCaller\u OUTPUT”$(OutputTR)@Tcl2(“concatGroupByAttributeValues”)\#--------------------------------------------------------------工厂\u DEF*SortFactory工厂\u名称$(RandomPointGenerator\u WORKSPACE\u NAME)\分类器输入功能\u TYPE“$(RandomPointGenerator\u WORKSPACE\u NAME)\ TclCaller\u输出“按RandomPointGenerator.group排序”\ id ALPHA升序输出排序功能\u TYPE“$(RandomPointGenerator\u WORKSPACE\u NAME)\分类器\u排序的“工厂定义*工厂名称”$(RandomPointGenerator\u WORKSPACE\u NAME)\分类器排序的拆分器“输入功能”类型“$(随机点生成器“工作区”名称)“\u排序的”输出功能”类型“$(随机点生成器“工作区”名称)“\u排序的”\u排序的”\u 0\u xVKS7A8AJxE=“输出功能”类型“$(随机点生成器“工作区”名称)\u排序的”\u排序的”\u 1+dZRsoI37hM=“\35;--------------------------------------------------------------------------包括[设置宏行“宏$(随机点生成器\u工作区\u名称)\u属性移动器\u列表\u EXP”;foreach attr[split”“{set attr[FME_DecodeText$attr];集合attr[regsub“{}$”$attr“{}.*]”;设置attr[regsub-all“{}”$attr“{\[0-9\]+}]”;追加宏行“,^$attr$”;};放入$macroLine;]工厂名称$(RandomPointGenerator工作区名称)$(RandomPointGenerator工作区名称)$(RandomPointGenerator工作区名称)$工厂名称$(RandomPointGenerator工作区名称)$属性移动器输入特征类型“$(RandomPointGenerator工作区名称)$(RandomPointGenerator.group by)排序器@RemoveAttributes(fme_regexp_match“$($(RandomPointGenerator_WORKSPACE_NAME)(u AttributeRemover_LIST_EXP))---------------------------------------------包括[设置宏行“宏$(RandomPointGenerator_WORKSPACE_NAME)(u AttributeKeeper)b7623860(da88)4a37_b3da9027473779AE511_LIST_EXP”;foreach attr[split”“{set attr[FME_DecodeText$attr];集合attr[regsub“{}$”$attr“{}.*]”;设置attr[regsub-all“{}”$attr“{\[0-9\]+}]”;追加宏行“,^$attr$”;};放入$macroLine;]工厂名称$(RandomPointGenerator工作区名称)$(RandomPointGenerator工作区名称)$工厂名称$(RandomPointGenerator工作区名称)$属性保持器输入功能\u类型“$(RandomPointGenerator工作区名称)\u排序器\u排序\u 0\u xVKS7A8AJxE=“输出{特征\u类型”$(RandomPointGenerator工作区名称)\u属性保持器\u输出”@kepatteributes(RandomPointGenerator.group\u id,fme\u regexp匹配,“^fme$($(RandomPointGenerator\u WORKSPACE\u NAME)$属性保持器\u b7623860\u da88\u 4a37\u b3da\u 902747379ae511\u LIST\u EXP)}第三十七天---------------------------------------------工厂定义*DeaggregateFactory\u NAME$(RandomPointGenerator\u WORKSPACE\u NAME)\u解聚集器输入特性\u类型”$(RandomPointGenerator\u WORKSPACE\u NAME)\u AttributeKeeper\u输出“ATTR\u ACCUM\u模式”处理\u冲突“ATTR\u冲突\u RES”传入\u如果\u冲突“传入\u前缀” “递归是SPLIT_COMPOSITES无INSTANTIATE_GEOMETRY_INSTANCES_NEW没有SET_FME_TYPE是输出点FEATURE_TYPE ”$(RandomPointGenerator_WORKSPACE_NAME)_Deaggregator_DEAGGREGATED“ 输出线路FEATURE_TYPE ”$(RandomPointGenerator_WORKSPACE_NAME)_Deaggregator_DEAGGREGATED“ 输出面FEATURE_TYPE ”$(RandomPointGenerator_WORKSPACE_NAME)_Deaggregator_DEAGGREGATED“ 输出DONUT FEATURE_TYPE ”$(RandomPointGenerator_WORKSPACE_NAME)_Deaggregator_DEAGGREGATED“ OUTPUT骨料FEATURE_TYPE “$(RandomPointGenerator_WORKSPACE_NAME)_Deaggregator_DEAGGREGATED” #------------------------------------------------------------------------- FACTORY_DEF * TransformFact:3:AreaOnAreaOverlayer FACTORY_NAME "$(RandomPointGenerator_WORKSPACE_NAME)_AreaOnAreaOverlayer" FACTORY_META_PARAMS TRANSFORMER_NAME:"$(RandomPointGenerator_WORKSPACE_NAME)_AreaOnAreaOverlayer" TRANSFORMER_PARAMS:XFORMER_NAME,$(RandomPointGenerator_WORKSPACE_NAME)_AreaOnAreaOverlayer,TRANSFORMER_GROUP,,PARAMETERS_GROUP,,GRP_BY,randompointgenerator.group_id,OVC_ATTR,,LIST_NAME, PROCESS_GROUP_BY randompointgenerator.group_id MULTI_PROCESS "NO_PARALLELISM" GROUPS_ARE_ORDERED Yes INPUT AREA FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Deaggregator_DEAGGREGATED" OUTPUT AREA FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_AreaOnAreaOverlayer_AREA" # ------------------------------------------------------------------------- INCLUDE [ if { ({Plane Area} == {Sloped Area}) } { puts {MACRO $(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator_func @Area(REJECTABLE,SLOPED_AREAS,"1")}; } else { puts {MACRO $(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator_func @Area(REJECTABLE,"1")}; } ] FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_AreaOnAreaOverlayer_AREA" @RenameAttributes(FME_STRICT,___fme_rejection_code___,fme_rejection_code) OUTPUT FEATURE_TYPE ___TOREJECTOR___ "_area1" $($(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator_func) FACTORY_DEF * TestFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator_Rejector INPUT FEATURE_TYPE ___TOREJECTOR___ TEST @Value(fme_rejection_code) != "" OUTPUT FAILED FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator_OUTPUT" @RenameAttributes(FME_STRICT,fme_rejection_code,___fme_rejection_code___) # ------------------------------------------------------------------------- # check if we have to do the min bounding box calculation INCLUDE [ if { {BB} == {MINBB} } { puts {MACRO $(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_BBFunc @Bounds(MIN_BOUNDING,,)}; } else { puts {MACRO $(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_BBFunc @Bounds(___MINX,___MAXX,___MINY,___MAXY,___MINZ,___MAXZ,GEOMETRIC) @Tcl2($(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_ab3e94db_45e4_4002_a67b_d995074e94dc11_set_geom_and_type)}; } ] Tcl2 proc $(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_ab3e94db_45e4_4002_a67b_d995074e94dc11_set_geom_and_type {} { if {[FME_Coordinates numCoords] > 0} { FME_Execute RemoveGeometry; set minX [FME_GetAttribute ___MINX]; set minY [FME_GetAttribute ___MINY]; set maxX [FME_GetAttribute ___MAXX]; set maxY [FME_GetAttribute ___MAXY]; if { [string is double $minX] && [string is double $maxX] } { set xSame [expr $minX == $maxX] } else { set xSame [string equal $minX $maxX] }; if { [string is double $minY] && [string is double $maxY] } { set ySame [expr $minY == $maxY] } else { set ySame [string equal $minY $maxY] }; FME_Coordinates addCoord $minX $minY; if {$xSame && $ySame} { FME_Execute GeometryType fme_point; FME_SetAttribute fme_type fme_point } elseif {$xSame || $ySame} { FME_Coordinates addCoord $maxX $maxY; FME_Execute GeometryType fme_line; FME_SetAttribute fme_type fme_line } else { FME_Coordinates addCoord $minX $maxY; FME_Coordinates addCoord $maxX $maxY; FME_Coordinates addCoord $maxX $minY; FME_Coordinates addCoord $minX $minY; FME_Execute GeometryType fme_polygon; FME_SetAttribute fme_type fme_area }; FME_UnsetAttributes ___MINX ___MAXX ___MINY ___MAXY ___MINZ ___MAXZ; set width [expr $maxX - $minX]; set length [expr $maxY - $minY]; if {$width > $length} { set temp $length; set length $width; set width $temp; }; if { {} != {} } { FME_SetAttribute {""} $width; }; if { {} != {} } { FME_SetAttribute {""} $length; } } } FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator_OUTPUT" OUTPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_BOX" @Force2D() $($(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_BBFunc) # ------------------------------------------------------------------------- FACTORY_DEF * TransformFact:11:Dissolver FACTORY_NAME "$(RandomPointGenerator_WORKSPACE_NAME)_Dissolver" FACTORY_META_PARAMS TRANSFORMER_NAME:"$(RandomPointGenerator_WORKSPACE_NAME)_Dissolver" TRANSFORMER_PARAMS:XFORMER_NAME,$(RandomPointGenerator_WORKSPACE_NAME)_Dissolver,TRANSFORMER_GROUP,,GROUP_BY,randompointgenerator.group_id,PARAMETERS_GROUP,,DIS_ATTR,,ATTR_ACCUM_GROUP,,ACCUM_INPUT_ATTRS,No,SUM,_area1,AV,,WEIGHT,,LIST_NAME,,PARAMETERS_GROUP_ADVANCED,,NO_OVRLP,No PROCESS_GROUP_BY randompointgenerator.group_id MULTI_PROCESS "NO_PARALLELISM" GROUPS_ARE_ORDERED Yes INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_BOX" OUTPUT AREA FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Dissolver_AREA" # ------------------------------------------------------------------------- # check if we have to do the min bounding box calculation INCLUDE [ if { {BB} == {MINBB} } { puts {MACRO $(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_2_BBFunc @Bounds(MIN_BOUNDING,,)}; } else { puts {MACRO $(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_2_BBFunc @Bounds(___MINX,___MAXX,___MINY,___MAXY,___MINZ,___MAXZ,GEOMETRIC) @Tcl2($(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_2_5de1800f_f80b_4723_9ccf_fbe922ad202311_set_geom_and_type)}; } ] Tcl2 proc $(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_2_5de1800f_f80b_4723_9ccf_fbe922ad202311_set_geom_and_type {} { if {[FME_Coordinates numCoords] > 0} { FME_Execute RemoveGeometry; set minX [FME_GetAttribute ___MINX]; set minY [FME_GetAttribute ___MINY]; set maxX [FME_GetAttribute ___MAXX]; set maxY [FME_GetAttribute ___MAXY]; if { [string is double $minX] && [string is double $maxX] } { set xSame [expr $minX == $maxX] } else { set xSame [string equal $minX $maxX] }; if { [string is double $minY] && [string is double $maxY] } { set ySame [expr $minY == $maxY] } else { set ySame [string equal $minY $maxY] }; FME_Coordinates addCoord $minX $minY; if {$xSame && $ySame} { FME_Execute GeometryType fme_point; FME_SetAttribute fme_type fme_point } elseif {$xSame || $ySame} { FME_Coordinates addCoord $maxX $maxY; FME_Execute GeometryType fme_line; FME_SetAttribute fme_type fme_line } else { FME_Coordinates addCoord $minX $maxY; FME_Coordinates addCoord $maxX $maxY; FME_Coordinates addCoord $maxX $minY; FME_Coordinates addCoord $minX $minY; FME_Execute GeometryType fme_polygon; FME_SetAttribute fme_type fme_area }; FME_UnsetAttributes ___MINX ___MAXX ___MINY ___MAXY ___MINZ ___MAXZ; set width [expr $maxX - $minX]; set length [expr $maxY - $minY]; if {$width > $length} { set temp $length; set length $width; set width $temp; }; if { {} != {} } { FME_SetAttribute {""} $width; }; if { {} != {} } { FME_SetAttribute {""} $length; } } } FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_2 INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Dissolver_AREA" OUTPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_2_BOX" @Force2D() $($(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_2_BBFunc) # ------------------------------------------------------------------------- INCLUDE [ if { ({Plane Area} == {Sloped Area}) } { puts {MACRO $(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator_2_func @Area(REJECTABLE,SLOPED_AREAS,"1")}; } else { puts {MACRO $(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator_2_func @Area(REJECTABLE,"1")}; } ] FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator_2 INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_2_BOX" @RenameAttributes(FME_STRICT,___fme_rejection_code___,fme_rejection_code) OUTPUT FEATURE_TYPE ___TOREJECTOR___ "_area2" $($(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator_2_func) FACTORY_DEF * TestFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator_2_Rejector INPUT FEATURE_TYPE ___TOREJECTOR___ TEST @Value(fme_rejection_code) != "" OUTPUT FAILED FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator_2_OUTPUT" @RenameAttributes(FME_STRICT,fme_rejection_code,___fme_rejection_code___) # ------------------------------------------------------------------------- DEFAULT_MACRO __$(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator_79bc4b52_e282_475b_bb2c_3149bc664b4311_GROUP_BY MACRO __$(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator_79bc4b52_e282_475b_bb2c_3149bc664b4311_GROUP_BY randompointgenerator.group_id DYNAMIC_FUNCTION_CONFIGURATION Python FMEOBJECTS DYNAMIC_FUNCTION_CONFIGURATION Python import StatisticsCalculator DYNAMIC_FUNCTION_CONFIGURATION Python "StatisticsCalculator.connectTransformer( '$(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator',{ 'GROUP_BY_MACRO':'__$(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator_79bc4b52_e282_475b_bb2c_3149bc664b4311_GROUP_BY', 'GROUP_BY':'randompointgenerator.group_id', 'STATS_ATTRS':'_area1 _area2', 'SUM_ATTR':'_sum', 'COMPUTE_HISTOGRAM':'NO', 'HISTO_ATTR':' ”, 'PREPEND_ATTR_NAME': '是的',无:无})” FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator_InputProcessor INPUT FEATURE_TYPE “$(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator_2_OUTPUT” 输出FEATURE_TYPE __ORIGINAL__ @Python(StatisticsCalculator.recordFeature,$(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator)FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator_UnneededInputNuker INPUT FEATURE_TYPE __ORIGINAL__输出FEATURE_TYPE “$(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator_COMPLETE” FACTORY_DEF * SortFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator_CompleteOutputter INPUT FEATURE_TYPE __UNUSED_INPUT_TO_GUARANTEE_FACTORY_DOESNT_CONSUME_EVERYTHING__ INPUT FEATURE_TYPE “$(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator_COMPLETE” 输出已排序FEATURE_TYPE“$(RandomPointGenerator_WORKSPACE_NAME)_statisticscalculator_compl.ETE” @Python(StatisticsCalculator.summarizeStatistics,$(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator,__ ORIGINAL__)FACTORY_DEF * CreationFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator_SummaryCreator CREATE_AT_END NUMBER_TO_CREATE 1 FACTORY_DEF * ElementFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator_SummaryExploder LIST_NAME $(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator_stats {} MODE LEAN_AND_MEAN CLONE_GEOMETRY没有INPUT FEATURE_TYPE __UNUSED_INPUT_TO_GUARANTEE_FACTORY_DOESNT_CONSUME_EVERYTHING__#------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_BoundsExtractor INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator_COMPLETE" OUTPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_BoundsExtractor_OUTPUT" @Bounds(_xmin,_xmax,_ymin,_ymax,,,GEOMETRIC) # ------------------------------------------------------------------------- FACTORY_DEF * AttrSetFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_AttributeCreator_2 ATTRSET_PROPAGATE_MISSING YES INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_BoundsExtractor_OUTPUT" ATTR _num_group FME_CONDITIONAL:DEFAULT_VALUE' 评估 1.0 * $($(RandomPointGenerator_WORKSPACE_NAME)_NUM_POINTS $编码)* 价值 _area2._sum 价值 _area1._sum “BOOL_OP; OR; COMPOSITE_TEST; ;测试 评估 1.0 * $($(RandomPointGenerator_WORKSPACE_NAME)_NUM_POINTS $编码)* 价值 _area2._sum 价值 _area1._sum <$($(RandomPointGenerator_WORKSPACE_NAME)_MIN_NUM) '$($(RandomPointGenerator_WORKSPACE_NAME)_MIN_NUM)' FME_NUM_CONDITIONS2 ___ ATTR _ratio 评估 双倍的 价值 _area2 价值 _area2._sum ATTR _width 评估 价值 _xmax - 价值 _xmin ATTR _height 评估 价值 _ymax - 价值 _ymin 输出输出FEATURE_TYPE “$(RandomPointGenerator_WORKSPACE_NAME)_AttributeCreator_2_OUTPUT” #------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_ExpressionEvaluator INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_AttributeCreator_2_OUTPUT" OUTPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_ExpressionEvaluator_OUTPUT" "_num" "@EvaluateExpression(FLOAT, ㈡ CEIL. $($(RandomPointGenerator_WORKSPACE_NAME)_DENSIFY_FACTOR $编码)* 价值 _num_group * 价值 _比率 ,$(RandomPointGenerator_WORKSPACE_NAME)_ExpressionEvaluator)”#------------------------------------------------------------------------- FACTORY_DEF * VertexCreatorFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_VertexCreator INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_ExpressionEvaluator_OUTPUT" MODE REPLACE INDEX 0 CONTINUE_ON_ERROR YES XVAL "@EvaluateExpression(FLOAT, 价值 _xmin 美元(RandomPointGenerator_WORKSPACE_NAME) _VertexCreator)”YVAL“@EvaluateExpression(浮动, 价值 _ymin ,$(RandomPointGenerator_WORKSPACE_NAME)_VertexCreator)”输出端输出FEATURE_TYPE “$(RandomPointGenerator_WORKSPACE_NAME)_VertexCreator_OUTPUT” #-------------------------------------------------------------------------有[组macroLine“宏$(RandomPointGenerator_WORKSPACE_NAME)_AttributeKeeper_2_341b5245_6e6d_4d97_b109_379136b6a17e11_LIST_EXP“;的foreach ATTR [分裂 “”] {集ATTR [FME_DecodeText $ ATTR]; [ “{} *” regsub “{} $” $ ATTR]组ATTR;集ATTR [regsub -all “{}”$ ATTR “{\ [0-9 \] +}”];追加macroLine “^ $ ATTR $”;};放$ macroLine;] FACTORY_DEF {*} TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_AttributeKeeper_2 INPUT FEATURE_TYPE“$(RandomPointGenerator_WORKSPACE_NAME)_VertexCreator_OUTPUT “OUTPUT {FEATURE_TYPE ”$(RandomPointGenerator_WORKSPACE_NAME)_AttributeKeeper_2_OUTPUT“ @KeepAttributes(randompointgenerator.group_id,_width,_height,_num,fme_regexp_match,” ^ _ FME $($(RandomPointGenerator_WORKSPACE_NAME)_AttributeKeeper_2_341b5245_6e6d_4d97_b109_379136b6a17e11_LIST_EXP)“)}#------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_Cloner_Cloner INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_AttributeKeeper_2_OUTPUT" NUMBER_OF_COPIES "@EvaluateExpression(FLOAT, 价值 _num ,$(RandomPointGenerator_WORKSPACE_NAME)_Cloner)” REJECT_INVALID是输出复制 “$(RandomPointGenerator_WORKSPACE_NAME)_Cloner_COPY” #------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_Offsetter INPUT FEATURE_TYPE “$(RandomPointGenerator_WORKSPACE_NAME)_Cloner_COPY” 输出FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_Offsetter_Offset @Offset(“@ EvaluateExpression(FLOAT, 兰德 * 价值 _宽度 ,$(randompointgenerator_workspace_name)_offsetter)“,”@ evaluateExpression(float, 兰德 * 价值 _高度 ,$(RandomPointGenerator_WORKSPACE_NAME)_Offsetter) “ ”0“)FACTORY_DEF * TestFactory中FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_Offsetter_PointCloudOffsetter INPUT FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_Offsetter_Offset测试与fme_type == ”fme_point_cloud“ TEST ”“!= ”“ BOOLEAN_OPERATOR和输出PASSED FEATURE_TYPE” $(RandomPointGenerator_WORKSPACE_NAME)_Offsetter_OFFSET” @TransformPointCloud(OFFSET)OUTPUT失败FEATURE_TYPE “$(RandomPointGenerator_WORKSPACE_NAME)_Offsetter_OFFSET” #------------------------------------------------------------------------- INCLUDE [组macroLine“MACRO $(RandomPointGenerator_WORKSPACE_NAME)_AttributeKeeper_3_c02755c4_36bd_4bc7_8bf2_87f747914f8211_LIST_EXP “;的foreach ATTR [分裂 ”“] {集ATTR [FME_DecodeText $ ATTR];组ATTR [regsub ”{} $“ $ ATTR ”{} *。“];组ATTR [regsub,所有”{} “$ ATTR ”{\ [0-9 \] +}“];追加macroLine” ^ $ ATTR $“;};放$ macroLine;] FACTORY_DEF {*} TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_AttributeKeeper_3 INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Offsetter_OFFSET" OUTPUT { FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_AttributeKeeper_3_OUTPUT" @KeepAttributes(randompointgenerator.group_id,fme_regexp_match,"^fme_$($(RandomPointGenerator_WORKSPACE_NAME)_AttributeKeeper_3_c02755c4_36bd_4bc7_8bf2_87f747914f8211_LIST_EXP)") } # ------------------------------------------------------------------------- FACTORY_DEF {*} SpatialFilterFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_SpatialFilter INPUT BASE FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_AttributeRemover_OUTPUT" INPUT CANDIDATE FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_AttributeKeeper_3_OUTPUT" PREDICATE "INTERSECTS" USE_BOUNDING_BOX NO MULTIPLE_BASES YES MERGE_BASE_ATTR YES BOOLEAN_OPERATOR OR DIMENSION 2 GROUP_BY { randompointgenerator.group_id } CURVE_BOUNDARY_RULE ENDPOINTS_MOD2 OUTPUT PASSED FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_SpatialFilter_PASSED" # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_ExpressionEvaluator_2 INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_SpatialFilter_PASSED" OUTPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_ExpressionEvaluator_2_OUTPUT" "randompointgenerator.rand" "@EvaluateExpression(FLOAT, 兰德 ,$(RandomPointGenerator_WORKSPACE_NAME)_ExpressionEvaluator_2)”#------------------------------------------------------------------------- FACTORY_DEF * SortFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_Sorter_2 INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_ExpressionEvaluator_2_OUTPUT" SORT_BY randompointgenerator.group_id ALPHA ASCENDING randompointgenerator.rand NUMERIC ASCENDING OUTPUT SORTED FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Sorter_2_SORTED" # ------------------------------------------------------------------------- INCLUDE [ puts "MACRO REAL_RATE [expr $($(RandomPointGenerator_WORKSPACE_NAME)_NUM_POINTS) * -1 ]" ] FACTORY_DEF {*} SamplingFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_Sampler SAMPLE_RATE $(REAL_RATE) GROUP_BY { randompointgenerator.group_id } INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Sorter_2_SORTED" OUTPUT SAMPLED FEATURE_TYPE ___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 $(RandomPointGenerator_WORKSPACE_NAME)_Sampler_Sampled INPUT FEATURE_TYPE ___SAMPLED___ OUTPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Sampler_SAMPLED" # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_BulkAttributeRemover INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Sampler_SAMPLED" OUTPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_BulkAttributeRemover_OUTPUT" @RemoveAttributes(fme_regexp_match,randompointgenerator.) FACTORY_DEF * TeeFactory FACTORY_NAME "$(RandomPointGenerator_WORKSPACE_NAME)_Point1550271943 Output Collector" INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_BulkAttributeRemover_OUTPUT" OUTPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Point" INCLUDE [puts {MACRO WB_CURRENT_CONTEXT $(WB_OLD_CONTEXT_$(RandomPointGenerator_WORKSPACE_NAME))}] FACTORY_DEF * TeeFactory FACTORY_NAME "RandomPointGenerator Point Output Renamer/Nuker" INPUT FEATURE_TYPE RandomPointGenerator_Point OUTPUT FEATURE_TYPE RandomPointGenerator_Point # ------------------------------------------------------------------------- # Create the DomainName that this transformer will use. # Because @Count itself will evalute the expression to calculate the # domain, we don't need to do anything in Tcl per feature going by INCLUDE [ set domainPrefix {}; if { {Global} == {Local} } { set domainPrefix [FME_EncodeText {Counter_}]; }; puts "MACRO Counter_FULL_DOMAIN ${domainPrefix}counter"; ] FACTORY_DEF * ExecuteFunctionFactory FACTORY_NAME Counter_Rejector COMMAND_PARM_EVALUATION SINGLE_PASS INPUT FEATURE_TYPE RandomPointGenerator_Point FUNCTION_DEFINITION @Count(REJECTABLE_WITH_FLAG,fme_encoded,$(Counter_FULL_DOMAIN),"0") RESULT_ATTRIBUTE "Point_ID" OUTPUT COMPLETE FEATURE_TYPE Counter_OUTPUT OUTPUT REJECTED FEATURE_TYPE Counter_ FACTORY_DEF * TeeFactory FACTORY_NAME“计数器 变压器输出Nuker” INPUT FEATURE_TYPE Counter_ #------------------------------------------------------------------------- # Generate the name of the Global Variable that we will store the coordinate # system name in. This variable name will be group specific if we are grouping # features, something like: # CommonLocalReprojector__creation_instance_0_targetCS # CommonLocalReprojector__creation_instance_1_targetCS # # Because of GROUP_BY's WHOLE_LINE modifier the 'split' line will be ignored if # GROUP_BY is blank. # # Use of ::csv::split and quoting of global var names allows us to support # grouping by attribute names that contain spaces. Haven't quite worked out # when, if ever, we support attribute names that contain quotes - thought I had # used them while testing this, but now they result in "unbalanced quotes" # errors. # # You can't have blank lines in these INCLUDE blocks! A blank line is # apparently considered the the end of the TCL and no further lines are # executed. And semicolons are needed because this block will be treated as a # single line in the workspace. INCLUDE [ package require csv; set targetNameMacro {MACRO CommonLocalReprojector_TARGETCS_VARIABLE_NAME CommonLocalReprojector}; set sourceNameMacro {MACRO CommonLocalReprojector_SOURCECS_VARIABLE_NAME CommonLocalReprojector}; set attrs [list]; foreach attr $attrs { set nameValPair {}; append nameValPair [FME_EncodeText $attr] {_@EvaluateExpression(STRING_ENCODED, 价值 } [FME_EncodeText $ ATTR] { ,CommonLocalReprojector)};追加targetNameMacro {_} $ nameValPair;追加sourceNameMacro {_} $ nameValPair;};追加targetNameMacro {_targetCS};追加sourceNameMacro {_sourceCS};放$ targetNameMacro;放$ sourceNameMacro;]#重新投影包围盒成AZMED / AZMEA,然后存储在一个全局变量的#得到的系统的名称。FACTORY_DEF {*} BoundingBoxFactory FACTORY_NAME CommonLocalReprojector_BoundingBoxFactory INPUT FEATURE_TYPE Counter_OUTPUT BOUNDING_BOX_TYPE几何输出BOUNDING_BOX FEATURE_TYPE CommonLocalReprojector_nuke_me @Reproject(FME ,, _ AZMED _, - )@GlobalVariable($(CommonLocalReprojector_TARGETCS_VARIABLE_NAME),@CoordSys())输出ORIGINAL FEATURE_TYPE CommonLocalReprojector_Originals#这使我们忽略 output from factories that will otherwise result in # "orphan features" warnings in the log. FACTORY_DEF * TeeFactory FACTORY_NAME CommonLocalReprojector_Nuker INPUT FEATURE_TYPE CommonLocalReprojector_nuke_me # Because PR#32183 makes a source CS required for dynamic reprojection, this # check might seem redundant. But we aren't actually doing dynamic reprojection # on the original features - we are reprojecting to an instance of a dynamic # system, which means tagging features without a CS is totally reasonable. We # can only hope to catch this when the bounding box is reprojected, and that # will depend on the order of the features with differing coordinate systems. # # Imagine two features with ,CS1分别。因为在全球源CS变种一个空字符串被解释为#“看见没有特色”,我们就无法检测到#不匹配。此外,BoundingBoxFactory会发出#边框与CS1的坐标系统,从而动态重投影就不会失败。FACTORY_DEF * TestFactory中FACTORY_NAME CommonLocalReprojector_CoordSysPresentTester INPUT FEATURE_TYPE CommonLocalReprojector_Originals TEST @CoordSys()!= “” 的Passed FEATURE_TYPE CommonLocalReprojector_originalsWithCs OUTPUT失败FEATURE_TYPE * @Abort( “所有功能,才能确定一个共同的本地系统中打上坐标系”)#让我们确保每个组中的每个特征具有相同的初始CS - 否则#我们注定要做可怕的事情。FACTORY_DEF * TestFactory中FACTORY_NAME CommonLocalReprojector_CoordSysConsistentTester INPUT FEATURE_TYPE CommonLocalReprojector_originalsWithCs TEST @GlobalVariable($(CommonLocalReprojector_SOURCECS_VARIABLE_NAME))== “” TEST @GlobalVariable($(CommonLocalReprojector_SOURCECS_VARIABLE_NAME))== @CoordSys()BOOLEAN_OPERATOR OR的Passed FEATURE_TYPE CommonLocalReprojector_validatedOriginals @GlobalVariable($(CommonLocalReprojector_SOURCECS_VARIABLE_NAME)@CoordSys())OUTPUT失败FEATURE_TYPE * @Abort( “每一组中的所有功能,必须标记有相同的坐标系。预计 '@GlobalVariable($(CommonLocalReprojector_SOURCECS_VARIABLE_NAME))',但发现 '@CoordSys()'”)#重新投影每个特征到存储在全局变量中的坐标系。#通过这种工厂BoundingBoxFactory之后出现的,我们可以肯定#的边框将在原有的特色,之前发布。FACTORY_DEF * SortFactory FACTORY_NAME CommonLocalReprojector_FeatureHolder INPUT FEATURE_TYPE CommonLocalReprojector_validatedOriginals输出已排序FEATURE_TYPE CommonLocalReprojector_OUTPUT @Reproject(FME ,, @全局变量($(CommonLocalReprojector_TARGETCS_VARIABLE_NAME)),2D, - )#------------------------------------------------------------------------- DEFAULT_MACRO INPUT_BASE_LINES FACTORY_DEF {*} ProximityFactory FACTORY_NAME NeighborFinder $(INPUT_BASE_LINES) INPUT CANDIDATE FEATURE_TYPE CommonLocalReprojector_OUTPUT REQUIRE_BASE NO K_NEAREST "" "161" INSERT_VERTEX_ON_BASE No TAKE_MEASURES_FROM_CANDIDATE Yes COMPUTE_MEASURES_MODE CONTINUOUS REJECT_NULL Yes CANDIDATE_FEATURES_FIRST No CLOSE_CANDIDATES_LIST "Points{}" LIST_ATTRS_TO_INCLUDE { Point_ID } LIST_ATTRS_TO_INCLUDE_MODE SELECTED DISTANCE_ATTR _distance TREAT_POLYGON_AS LINE NEVER_OVERWRITE_MERGED_ATTRS Yes MERGE_ATTRS "NO" ATTR_ACCUM_MODE " “ATTR_CONFLICT_RES” “INCOMING_PREFIX” “REJECT_INVALID_GEOM YES OUTPUT MATCHED FEATURE_TYPE NeighborFinder_MATCHED @RenameAttributes(_angle,角度,_candidate_angle,candidate_angle,_candidate_label_angle,candidate_label_angle,_closest_candidate_x,closest_candidate_x,_closest_candidate_y,closest_candidate_y,_closest_base_x,closest_base_x,_closest_base_y,closest_base_y)OUTPUT UNMATCHED_BASE FEATURE_TYPE NeighborFinder_UNMATCHED_BASE#------------------------------------------------------------------------- # Create the DomainName that this transformer will use. # Because @Count itself will evalute the expression to calculate the # domain, we don't need to do anything in Tcl per feature going by INCLUDE [ set domainPrefix {}; if { {Global} == {Local} } { set domainPrefix [FME_EncodeText {Counter_2_}]; }; puts "MACRO Counter_2_FULL_DOMAIN ${domainPrefix}group"; ] FACTORY_DEF * ExecuteFunctionFactory FACTORY_NAME Counter_2_Rejector COMMAND_PARM_EVALUATION SINGLE_PASS INPUT FEATURE_TYPE NeighborFinder_MATCHED INPUT FEATURE_TYPE NeighborFinder_UNMATCHED_BASE FUNCTION_DEFINITION @Count(REJECTABLE_WITH_FLAG,fme_encoded,$(Counter_2_FULL_DOMAIN),"0") RESULT_ATTRIBUTE "Group_ID" OUTPUT COMPLETE FEATURE_TYPE Counter_2_OUTPUT OUTPUT REJECTED FEATURE_TYPE Counter_2_ FACTORY_DEF * TeeFactory FACTORY_NAME“Counter_2 变压器输出Nuker” INPUT FEATURE_TYPE Counter_2_ #------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME ListElementCounter INPUT FEATURE_TYPE Counter_2_OUTPUT OUTPUT FEATURE_TYPE ListElementCounter_OUTPUT "_element_count" @NumElements("Points ”,编码 ) # ------------------------------------------------------------------------- FACTORY_DEF * SortFactory FACTORY_NAME分选机输入FEATURE_TYPE ListElementCounter_OUTPUT SORT_BY _element_count数字降序输出排序FEATURE_TYPE Sorter_SORTED # ------------------------------------------------------------------------- DEFAULT_MACROWB_CURRENT_CONTEXT MACRO VariableRetriever_2_VAR @EvaluateExpression(FDIV,STRING_ENCODED, 价值 Point_ID ,VariableRetriever_2)有[如果{{}全球== {本地}} {{放MACRO VariableRetriever_2_VAR $(WB_CURRENT_CONTEXT)_ @ EvaluateExpression(FDIV,STRING_ENCODED, 价值 Point_ID ,VariableRetriever_2)};};FACTORY_DEF * TeeFactory FACTORY_NAME VariableRetriever_2 INPUT FEATURE_TYPE Sorter_SORTED输出FEATURE_TYPE VariableRetriever_2_OUTPUT @GlobalVariable(fme_encoded,$(VariableRetriever_2_VAR),fme_result_attribute,_value)#------------------------------------------------------------------------- FACTORY_DEF* TestFactory中FACTORY_NAME Tester_2 INPUT FEATURE_TYPE VariableRetriever_2_OUTPUT TEST @EvaluateExpression(FDIV,STRING_ENCODED, 价值 _价值 ,Tester_2)NOT_ = 1 ENCODED BOOLEAN_OPERATOR OR OUTPUT PASSED FEATURE_TYPE Tester_2_PASSED FACTORY_DEF * TeeFactory FACTORY_NAME “Tester_2 PASSED分配器” INPUT FEATURE_TYPE Tester_2_PASSED OUTPUT FEATURE_TYPE Tester_2_PASSED_0_f2TGGhc / G74 = OUTPUT FEATURE_TYPE Tester_2_PASSED_1_4bBqa4ASLBM =#-------------------------------------------------------------------------FACTORY_DEF * ElementFactory FACTORY_NAME ListExploder INPUT FEATURE_TYPE Tester_2_PASSED_0_f2TGGhc/g74= LIST_NAME "Points{}" ELEMENT_NUMBER_FIELD "_element_index" CLONE_GEOMETRY ATTR_ACCUM_MODE "HANDLE_CONFLICT" ATTR_CONFLICT_RES "INCOMING_IF_CONFLICT" INCOMING_PREFIX " “输出元件FEATURE_TYPE ListExploder_ELEMENTS @RemoveAttributes(ElementFactory.baseCloned)#------------------------------------------------------------------------- DEFAULT_MACRO WB_CURRENT_CONTEXT MACRO VariableRetriever_VAR @EvaluateExpression(FDIV,STRING_ENCODED, 价值 Point_ID {if {{Global} == {Local}} {puts {MACRO VariableRetriever_VAR $(WB_CURRENT_CONTEXT)_@EvaluateExpression(FDIV,STRING_ENCODED, 价值 Point_ID ,variableretriever)};};FACTORY_DEF * TeeFactory FACTORY_NAME VariableRetriever INPUT FEATURE_TYPE ListExploder_ELEMENTS输出FEATURE_TYPE VariableRetriever_OUTPUT @GlobalVariable(fme_encoded,$(VariableRetriever_VAR),fme_result_attribute,_value)#------------------------------------------------------------------------- FACTORY_DEF* testfactory factory_name测试仪输入feature_type variableretriever_output测试@evaluateExpression(FDIV,String_Encoded, 价值 _价值 ,测试仪)NOT_ = 1 ENCODED BOOLEAN_OPERATOR OR OUTPUT PASSED FEATURE_TYPE Tester_PASSED#------------------------------------------------------------------------- FACTORY_DEF * VertexCreatorFactory FACTORY_NAME VertexCreator INPUT FEATURE_TYPE Tester_PASSED MODE REPLACE INDEX " “CONTINUE_ON_ERROR YES XVAL” @EvaluateExpression(FDIV,FLOAT, 价值 closest_candidate_x ,顶点)“YVAL”@EvaluateExpression(FDIV,Float, 价值 closest_candidate_y ,VertexCreator)”输出端输出FEATURE_TYPE VertexCreator_OUTPUT#------------------------------------------------------------------------- DEFAULT_MACRO WB_CURRENT_CONTEXT MACRO VariableSetter_VAR @EvaluateExpression(FDIV,STRING_ENCODED, 价值 Point_ID ,VariableSetter)有[如果{{}全球== {本地}} {{放MACRO VariableSetter_VAR $(WB_CURRENT_CONTEXT)_ @ EvaluateExpression(FDIV,STRING_ENCODED, 价值 Point_ID ,VariableSetter)};}] FACTORY_DEF * TeeFactory FACTORY_NAME VariableSetter INPUT FEATURE_TYPE Tester_2_PASSED_1_4bBqa4ASLBM = INPUT FEATURE_TYPE VertexCreator_OUTPUT OUTPUT FEATURE_TYPE VariableSetter_OUTPUT @GlobalVariable(fme_encoded,$(VariableSetter_VAR), “1”)#-------------------------------------------------------------------------DEFAULT_MACRO Aggregator_BREAK_ATTR INCLUDE [if {"No" == "Yes"} {puts {MACRO Aggregator_BREAK_ATTR BREAK_BEFORE_FIELD_CHANGE Group_ID} }] FACTORY_DEF {*} AggregateFactory FACTORY_NAME Aggregator INPUT FEATURE_TYPE VariableSetter_OUTPUT MODE ONE_LEVEL GROUP_BY { Group_ID } $(Aggregator_BREAK_ATTR) REMOVE_GEOMETRY NO ACCUMULATE_ATTRIBUTES One LIST_NAME "_list{}" LIST_ATTRS_TO_INCLUDE { Point_ID } LIST_ATTRS_TO_INCLUDE_MODE SELECTED SEPARATOR PRODUCE_MULTIS YES OUTPUT AGGREGATE FEATURE_TYPE Aggregator_AGGREGATE # ------------------------------------------------------------------------- FACTORY_DEF {*} NeighborColorSetterFactory FACTORY_NAME FeatureColorSetter INPUT FEATURE_TYPE Aggregator_AGGREGATE ALGORITHM RANDOM RANDOM_MODE RAND_WITH_CAP RANDOM_COLOR_CAP "0" REJECT_INVALID_PARAMS YESOUTPUT COLORED FEATURE_TYPE FeatureColorSetter_COLORED # ------------------------------------------------------------------------- # 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]} {Groups} _]_[expr round(rand() * 1000000)]_[clock clicks -milliseconds]"; puts "MACRO SAFE_FFS_NAME $safeName"; ] FACTORY_DEF {*} InspectorFactory FACTORY_NAME Groups_Prepper COMMAND_PARM_EVALUATION SINGLE_PASS INPUT FEATURE_TYPE FeatureColorSetter_COLORED GROUP_ATTRIBUTE __inspector_feature_type_attr__ GROUP_BY { } GROUP_ATTRIBUTE_PREFIX { Groups } 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 Groups_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 Group_ID,varchar 255. ,CMANAME,varchar 255. ,point_id,varchar 255. ,_distance,VARCHAR 255. ,_angle,VARCHAR 255. 、_candidate_angle varchar 255. 、_candidate_label_angle varchar 255. ,_closest_candidate_x,VARCHAR 255. 、_closest_candidate_y varchar 255. ,_closest_base_x,varchar 255. 、_closest_base_y varchar 255. ,距离,VARCHAR 255. ,角度,VARCHAR 255. ,candidate_angle,VARCHAR 255. ,candidate_label_angle,VARCHAR 255. ,closest_candidate_x,VARCHAR 255. ,closest_candidate_y,VARCHAR 255. ,closest_base_x,VARCHAR 255. ,closest_base_y,VARCHAR 255. ,_element_count,VARCHAR