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

location of points

" POSITION="740.632 -1201.01" TOP_LEFT="740.632 -1201.01" BOTTOM_RIGHT="739.632 -1200.01" BOUNDING_RECT="740.632 -1201.01 -1 -1" ORDER="5e+14" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.784314,0.196078" SIZE_POLICY="8" COMMENT_TYPE="REGULAR" ANCHORED_NODE="16">
#!

flight Numbers

" POSITION="1366.51 -1201.01" TOP_LEFT="1366.51 -1201.01" BOTTOM_RIGHT="1365.51 -1200.01" BOUNDING_RECT="1366.51 -1201.01 -1 -1" ORDER="5e+14" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.784314,0.196078" SIZE_POLICY="8" COMMENT_TYPE="REGULAR" ANCHORED_NODE="17">
#!

Counties

" POSITION="1123.76 -896.26" TOP_LEFT="1123.76 -896.26" BOTTOM_RIGHT="1122.76 -895.26" BOUNDING_RECT="1123.76 -896.26 -1 -1" ORDER="5e+14" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.784314,0.196078" SIZE_POLICY="8" COMMENT_TYPE="REGULAR" ANCHORED_NODE="22">
#!
#! #!#! #!#!#! #! #!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#! #!#! #!#! #!Creates random points within the area of entire input features.

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

" legal_terms_conditions="

Copyright (c) 2014 pragmatica inc.

Permission is granted to anyone, free of charge, to use, modify and distribute the object code form of this transformer for any purpose, subject to the following restrictions:

1) The origin of this transformer and associated FME(R) software must not be misrepresented.

2) This transformer may only be used in conjunction with a validly licensed copy of FME software.

THIS SOFTWARE IS PROVIDED BY PRAGMATICA INC. "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL PRAGMATICA INC. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

" view_position="672 567" zoom_scale="100" requirements_keyword="none" is_visible="false" fmx_attribute_propogation_mode="AUTO" requirements="

FME 2014 SP3+

" fme_document_guid="f43efd25-5719-4db2-abd9-7f56543c38fb" doc_dynamic_input_attrs="0" fme_process_group_by="" usage="

Parameters

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.

" category="Pragmatica" history="2014-09-20,TakashiIijima,OriginalImplementation" fme_process_groups_ordered="No" doc_extents="7206 2113" title="RandomPointGenerator"> #! #!#!#!#!#!#! #!

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="5e+14" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.784314,0.192157" SIZE_POLICY="10" COMMENT_TYPE="REGULAR" ANCHORED_NODE="0">
#!#!
#! #!#! #!#!#!#!#!#!#!#! #! #!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!Evaluate1.0*$(NUM_POINTS)*Value_area2._sumValue_area1._sum'BOOL_OP;OR;COMPOSITE_TEST;;TEST Evaluate1.0*$(NUM_POINTS)*Value_area2._sumValue_area1._sum < $(MIN_NUM)'$(MIN_NUM)'FME_NUM_CONDITIONS2___",_ratio,EvaluatedoubleValue_area2Value_area2._sum,_width,EvaluateValue_xmax-Value_xmin,_height,EvaluateValue_ymax-Value_ymin">#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#! #!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#! #! #!#! #!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#! #!#!
#!
#! #!#!
fme_python_version 27#!start_header#!start_wb_header reader_type null reader_keyword null_source null_source_dataset null 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)flightscounties.log”log_append no log_max_features 200 log_max_recorded_features 200 fme_repropre_engine fme fme_implicitic_csmap_reproperry_handling增强fme_stroke_max_deviation 0 log_timings是log_filter_mask -1#---a----------------------------------------------------------------- MULTI_READER_CONTINUE_ON_READER_FAILURE No # ------------------------------------------------------------------------- MACRO WORKSPACE_NAME FlightsCounties 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_2_CoordSysRemover {} { global FME_CoordSys; set FME_CoordSys {}; } MACRO Creator_2_XML NOT_ACTIVATED MACRO Creator_2_CLASSIC NOT_ACTIVATED MACRO Creator_2_2D3D 2D_GEOMETRY MACRO Creator_2_COORDS INCLUDE [if {{Geometry Object} == {Geometry Object}} {puts {MACRO Creator_2_2D3D 2D_GEOMETRY};}] INCLUDE [if {{Geometry Object} == {Geometry Object}} {puts {MACRO Creator_2_2D3D 2D_GEOMETRY};[if {{Geometry Object} == {3D坐标列表}}{puts {MACRO Creator_2_2D3D 3D_GEOMETRY};{{Geometry Object} == {2D Min/Max Box}} {set comment{我们需要将坐标minX minY maxX maxY转换为一个完整的多边形坐标列表};set splitCoords [split [string trim]{/ /设置字符串长度 }]];如果{[llength $splitCoords] > 4} {set trimmedCoords {};foreach item $splitCoords {if {$item != {}} {lappend trimmedCoords $item}};设置splitCoords trimmedCoords美元;};如果{[llength $splitCoords] != 4} {error {Creator_2:坐标列表应该是一个以空格分隔的列表,包含4个数字,如'minx miny maxx max ' - ' 的是无效的};};设置minX [lindex $splitCoords 0];set minY [lindex $splitCoords 1]; / /设置lindex $splitCoords 1set maxX [lindex $splitCoords 2]; / /设置索引set maxY [lindex $splitCoords 3]; / /设置maxYMACRO creator_coords $minX $minY $minX $max $max $max $max $minY $minX $minY";{MACRO Creator_2_2D3D 2D_GEOMETRY};{MACRO Creator_2_CLASSIC *}}] FACTORY_DEF $(Creator_2_XML) CreationFactory FACTORY_NAME Creator_2_XML_Creator CREATE_AT_END no OUTPUT FEATURE_TYPE _____CREATED______ @Geometry(FROM_ENCODED_STRING, ?XML. version = 1.0 编码= US_ASCII 独立的= 没有 几何学 多边形 x = -1 y = -1 x = 1 y = -1 x = 1 y = 1 x = -1 y = 1 x = -1 y = -1 多边形 几何学 )FACTORY_DEF $(Creator_2_CLASSIC)CreationFactory FACTORY_NAME Creator_2_CLASSIC_Creator $(Creator_2_2D3D)$(Creator_2_COORDS)CREATE_AT_END无输出FEATURE_TYPE _____CREATED______ FACTORY_DEF * TeeFactory FACTORY_NAME Creator_2_Cloner INPUT FEATURE_TYPE _____CREATED______ NUMBER_OF_COPIES 1 OUTPUT FEATURE_TYPE Creator_2_CREATED @ TCL2(Creator_2_CoordSysRemover)@CoordSys()fme_feature_type Creator_2 FACTORY_DEF * TeeFactory FACTORY_NAME“Creator_2 CREATED分配器” INPUT FEATURE_TYPE Creator_2_CREATED OUTPUT FEATURE_TYPE Creator_2_CREATED_0_YoZgL8R6ba0 = OUTPUT FEATURE_TYPE Creator_2_CREATED_1_ejQG + 6re7QA = FACTORY_DEF * BranchingFactory FACTORY_NAME “Creator_2_CREATED_0_YoZgL8R6ba0 =分支器-1 10” INPUT FEATURE_TYPE Creator_2_CREATED_0_YoZgL8R6ba0 = TARGET_FACTORY “$(WB_CURRENT_CONTEXT)_CREATOR_BRANCH_TARGET” OUTPUT PASSED FEATURE_TYPE * @RemoveAttributes(”Creator_2_CREATED_0_YoZgL8R6ba0 =分支器-1 10" .BranchingFactory.Count)FACTORY_DEF * BranchingFactory FACTORY_NAME“Creator_2_CREATED_1_ejQG + 6re7QA = -1分支器23" INPUT FEATURE_TYPE Creator_2_CREATED_1_ejQG + 6re7QA = TARGET_FACTORY “$(WB_CURRENT_CONTEXT)_CREATOR_BRANCH_TARGET” 的Passed FEATURE_TYPE * @RemoveAttributes( “Creator_2_CREATED_1_ejQG + 6re7QA = -1分支器23” .BranchingFactory.Count)#------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME "$(WB_CURRENT_CONTEXT)_CREATOR_BRANCH_TARGET" INPUT FEATURE_TYPE * OUTPUT FEATURE_TYPE * # ------------------------------------------------------------------------- GlobalVariable Tiler_NUM_TO_CREATE 0 INCLUDE [ if {($(FME_BUILD_NUM) < 5669) || [FME_ComponentIsLicensed -factory PointCloudTilingFactory]} { puts "MACRO POINT_CLOUD_TILER_IN *"; } else { puts "MACRO POINT_CLOUD_TILER_IN NOT_THIS_TIME"; } ] FACTORY_DEF * TeeFactory FACTORY_NAME Tiler_CleanUpAttrs INPUT FEATURE_TYPE Creator_2_CREATED_1_ejQG+6re7QA= OUTPUT FEATURE_TYPE Tiler___CleanedUpInput___ @RemoveAttributes("_column","_row") FACTORY_DEF * TestFactory FACTORY_NAME Tiler_ClippeePointCloudFilter INPUT FEATURE_TYPE Tiler___CleanedUpInput___ TEST &fme_type == "fme_point_cloud" OUTPUT PASSED FEATURE_TYPE Tiler___PointCloudTilees___ OUTPUT FAILED FEATURE_TYPE Tiler___OtherTilees___ FACTORY_DEF $(POINT_CLOUD_TILER_IN) PointCloudTilingFactory FACTORY_NAME Tiler_PointCloudTiler INPUT FEATURE_TYPE Tiler___PointCloudTilees___ NUM_HORIZONTAL_TILES "2" NUM_VERTICAL_TILES "2" TILE_COLUMN_ATTRIBUTE "_column" TILE_ROW_ATTRIBUTE "_row" OUTPUT TILES FEATURE_TYPE Tiler_TILED FACTORY_DEF * TeeFactory FACTORY_NAME Tiler_StartSplitter INPUT FEATURE_TYPE Tiler___OtherTilees___ OUTPUT FEATURE_TYPE Tiler__TO_BOUNDS__ OUTPUT FEATURE_TYPE Tiler__TO_CLIPPER_CLIPPEE__ FACTORY_DEF * BoundingBoxFactory FACTORY_NAME Tiler_BoundsByTileSize INPUT FEATURE_TYPE Tiler__TO_BOUNDS__ BOUNDING_BOX_TYPE GRID_POLYGONS GRID_CELL_COUNT "2" "2" GRID_ROW_ATTR "_row" GRID_COL_ATTR "_column" OUTPUT BOUNDING_BOX FEATURE_TYPE Tiler__TO_CLIPPER_CLIPPER__ FACTORY_DEF * ClippingFactory FACTORY_NAME Tiler_Clipper INPUT CLIPPEE FEATURE_TYPE Tiler__TO_CLIPPER_CLIPPEE__ @SupplyAttributes(__Tiler_temp_orientation__, @Orient()) INPUT CLIPPER FEATURE_TYPE Tiler__TO_CLIPPER_CLIPPER__ MULTICLIP YES CLIPPEE_ON_BOUNDARY INSIDE MERGE_CLIPPER_ATTRIBUTES YES MODE COMPLETE CONNECT_Z_MODE IGNORE_AND_MAKE_PATH OUTPUT INSIDE FEATURE_TYPE Tiler__FINISHED__ OUTPUT CLIPPED_INSIDE FEATURE_TYPE Tiler__CLIPPED__ FACTORY_DEF * TeeFactory FACTORY_NAME Tiler_ReorientLHR INPUT FEATURE_TYPE Tiler__CLIPPED__ __Tiler_temp_orientation__ left_hand_rule OUTPUT FEATURE_TYPE Tiler__FINISHED__ @Orient( LEFT_HAND_RULE ) FACTORY_DEF * TeeFactory FACTORY_NAME Tiler_RemoveOrientAttr INPUT FEATURE_TYPE Tiler__FINISHED__ INPUT FEATURE_TYPE Tiler__CLIPPED__ OUTPUT FEATURE_TYPE Tiler_TILED @RemoveAttributes(false,__Tiler_temp_orientation__) # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME "RandomPointGenerator Area Input Collector" INPUT FEATURE_TYPE Creator_2_CREATED_0_YoZgL8R6ba0= OUTPUT FEATURE_TYPE RandomPointGenerator_Area MACRO RandomPointGenerator_WORKSPACE_NAME RandomPointGenerator MACRO $(RandomPointGenerator_WORKSPACE_NAME)_XFORMER_NAME RandomPointGenerator MACRO $(RandomPointGenerator_WORKSPACE_NAME)_TRANSFORMER_GROUP MACRO $(RandomPointGenerator_WORKSPACE_NAME)___COMPOUND_PARAMETERS MACRO $(RandomPointGenerator_WORKSPACE_NAME)_SUB_DOC_NAME RandomPointGenerator MACRO $(RandomPointGenerator_WORKSPACE_NAME)_GROUP_BY MACRO $(RandomPointGenerator_WORKSPACE_NAME)_NUM_POINTS 50 MACRO $(RandomPointGenerator_WORKSPACE_NAME)_MIN_NUM 10 MACRO $(RandomPointGenerator_WORKSPACE_NAME)_DENSIFY_FACTOR 2 DEFAULT_MACRO RandomPointGenerator_WORKSPACE_NAME "" INCLUDE [puts {MACRO WB_OLD_CONTEXT_$(RandomPointGenerator_WORKSPACE_NAME) $(WB_CURRENT_CONTEXT)}; puts {MACRO WB_CURRENT_CONTEXT $(RandomPointGenerator_WORKSPACE_NAME)}] FACTORY_DEF * TeeFactory FACTORY_NAME "$(RandomPointGenerator_WORKSPACE_NAME)_Area1478100727 Input Splitter" INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Area" OUTPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Area" # ------------------------------------------------------------------------- MACRO OUTPUT_AREA_FTYPE not_selected MACRO OUTPUT_AREA_FTYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_AREA MACRO OUTPUT_ELLIPSE_FTYPE not_selected MACRO OUTPUT_ELLIPSE_FTYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_ELLIPSE MACRO OUTPUT_INSTANCE_FTYPE not_selected Lookup $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_RouterTable "" "not_selected" fme_area $(OUTPUT_AREA_FTYPE) fme_ellipse $(OUTPUT_ELLIPSE_FTYPE) MACRO COLLECTION_HANDLING NOT_THIS_TIME MACRO INSTANCE_FILTERING * INCLUDE [ if 0 { puts "MACRO COLLECTION_HANDLING *"; if {看跌期权 “MACRO INSTANCE_FILTERING NOT_THIS_TIME”;};};如果{{$(OUTPUT_INSTANCE_FTYPE)} == “not_selected”} {放 “MACRO INSTANCE_FILTERING NOT_THIS_TIME”;};] FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_InputPassThrough INPUT FEATURE_TYPE “$(RandomPointGenerator_WORKSPACE_NAME)_Area” 输出FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___ Input___ @Geometry(FIX_FMETYPE_FMEGEOMETRY)FACTORY_DEF $(INSTANCE_FILTERING)TestFactory中FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_InstanceTest INPUT FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___ Input___TEST @Geometry(IS_GEOMETRY_INSTANCE)== 1 OUTPUT PASSED FEATURE_TYPE $(OUTPUT_INSTANCE_FTYPE)OUTPUT失败FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___ Input___ FACTORY_DEF $(COLLECTION_HANDLING)TestFactory中FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_CollectionTest INPUT FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___ Input___测试与fme_type == “fme_collection”OUTPUT失败FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___ Not_Collection___的Passed FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___ Collection___ FACTORY_DEF $(COLLECTION_HANDLING)DeaggregateFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_Deagg INPUT FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___ Collection___ HOMOGENIZE_COLLECTIONS YES YES递推YES SET_FME_TYPE INSTANTIATE_GEOMETRY_INSTANCES_NEW 输出点FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___ HomogeneousAggregate___输出线路FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___ HomogeneousAggregate___输出面FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___ HomogeneousAggregate___输出DONUT FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___ HomogeneousAggregate___产出的总FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___ HomogeneousAggregate___ FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_RouterPrepper INPUTFEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___ HomogeneousAggregate___ INPUT FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___ Not_Collection___ INPUT FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___ Input___ OUTPUT FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___坦然___$(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_c4692e30_c760_49b7_8f7a_087dc596d55b3_targetFeatureType @Lookup($(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_RouterTable,&fme_type) FACTORY_DEF * TestFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_Router INPUT FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter___Prepped___ TEST @Value($(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_c4692e30_c760_49b7_8f7a_087dc596d55b3_targetFeatureType) != "not_selected" OUTPUT PASSED FEATURE_TYPE * @FeatureType(@Value($(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_c4692e30_c760_49b7_8f7a_087dc596d55b3_targetFeatureType)) @RemoveAttributes($(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_c4692e30_c760_49b7_8f7a_087dc596d55b3_targetFeatureType) OUTPUT FAILED FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_ " @RemoveAttributes($(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_c4692e30_c760_49b7_8f7a_087dc596d55b3_targetFeatureType) FACTORY_DEF * TeeFactory FACTORY_NAME "$(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter . 输出Nuker“输入Feature_type”$(RANDOMPOINTGONERATOR_WARTSSPACE_NAME)_geometryFilter_ “#------------------------------------------------------------------ Tcl2 proc $(RandomPointGenerator_WORKSPACE_NAME)_ParameterFetcher_doFetch {} { foreach {name val} {"randompointgenerator.group_by {$($(RandomPointGenerator_WORKSPACE_NAME)_GROUP_BY$encode)}"} { if { [string match {* *} $ val] == 1} {set val [fme_execute evaluate表达{string} $ val {$(randompointgenerator_workspace_name)_parameterfetcher}];} elsef {[string match {* fme_conditional *} $ val] == 1} {set val [fme_execute evaluate表达{string} $ val {$(randompointgenerator_workspace_name)_parameterfetcher}];} else {set val [fme_decodetextorattrttr $ val];};FME_SetAttribute [FME_DecodeText $名称] $ VAL}} FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_ParameterFetcher INPUT FEATURE_TYPE “$(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_AREA” INPUT FEATURE_TYPE “$(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_ELLIPSE” 输出FEATURE_TYPE “$(RandomPointGenerator_WORKSPACE_NAME)_ParameterFetcher_OUTPUT” @ TCL2($(randompointgenerator_workspace_name)_parameterfetcher_dofetch)#---------------------------------------------------------------------------------------- tcl2 fme_decode proc concatGroupByAttributeValues foreach attr FME_GetAttribute randompointgenerator.group_by 拉佩德 FME_GetAttribute attr 返回 加入 _ MACRO COPIER @Tcl2("") INCLUDE [if {[string length {}] == 0} {puts {MACRO COPIER 1}} MACRO OUTPUTATTR "randompointgenerator. "group_id" INCLUDE [if{[字符串长度{随机点生成器。group_id}] = = 0}{把{宏OUTPUTATTR}} FACTORY_DEF * TeeFactory FACTORY_NAME美元(RandomPointGenerator_WORKSPACE_NAME) _TclCaller输入FEATURE_TYPE " $ (RandomPointGenerator_WORKSPACE_NAME) _ParameterFetcher_OUTPUT“NUMBER_OF_COPIES美元(复印机)输出FEATURE_TYPE RandomPointGenerator_WORKSPACE_NAME _TclCaller_OUTPUT“美元”(OUTPUTATTR)@Tcl2(“concatGroupByAttributeValues ") # ------------------------------------------------------------------------- FACTORY_DEF * SortFactory FACTORY_NAME $ (RandomPointGenerator_WORKSPACE_NAME) _Sorter输入FEATURE_TYPE " $ (RandomPointGenerator_WORKSPACE_NAME) _TclCaller_OUTPUT“SORT_BY randompointgenerator。group_id ALPHA ASCENDING OUTPUT SORTED FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Sorter_SORTED" FACTORY_DEF * TeeFactory FACTORY_NAME "$(RandomPointGenerator_WORKSPACE_NAME)_Sorter_SORTED Splitter" INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Sorter_SORTED" OUTPUT FEATURE_TYPE" $ (RandomPointGenerator_WORKSPACE_NAME) _Sorter_SORTED_0_xVKS7A8AJxE = "输出FEATURE_TYPE”(RandomPointGenerator_WORKSPACE_NAME) _Sorter_SORTED_1_ + dZRsoI37hM美元 =" # ------------------------------------------------------------------------- 包括设置macroLine”宏$ (RandomPointGenerator_WORKSPACE_NAME) _AttributeKeeper_7d6a818c_c1a4_4e93_936d_db85b28d5ebd3_LIST_EXP”;foreach attr [split ""]{设置attr [FME_DecodeText $attr];设置attr [regsub "{}$" $attr "{}.*"];设置attr [regsub -all "{}" $attr "{\[0-9\]+}"];附加macroLine”^ attr美元”;}; puts $macroLine; ] FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_AttributeKeeper INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Sorter_SORTED_0_xVKS7A8AJxE=" OUTPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_AttributeKeeper_OUTPUT" @KeepAttributes(randompointgenerator.group_id,fme_regexp_match,"^fme_$($(RandomPointGenerator_WORKSPACE_NAME)_AttributeKeeper_7d6a818c_c1a4_4e93_936d_db85b28d5ebd3_LIST_EXP)") # ------------------------------------------------------------------------- FACTORY_DEF * DeaggregateFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_Deaggregator INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_AttributeKeeper_OUTPUT" RECURSIVE Yes SPLIT_COMPOSITES No INSTANTIATE_GEOMETRY_INSTANCES_NEW No SET_FME_TYPE Yes OUTPUT POINT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Deaggregator_DEAGGREGATED" OUTPUT LINE FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Deaggregator_DEAGGREGATED" OUTPUT POLYGON FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Deaggregator_DEAGGREGATED" OUTPUT DONUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Deaggregator_DEAGGREGATED" OUTPUT AGGREGATE 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___) DEFAULT_MACRO _WB_BYPASS_TERMINATION No FACTORY_DEF * TeeFactory FACTORY_NAME "$(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator_ “INPUT FEATURE_TYPE” $(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator_ "输出失败FEATURE_TYPE * @Abort(ENCODED, RandomPointGenerator_AreaCalculator . 输出 一种 拒绝了 功能 .) # ------------------------------------------------------------------------- # 检查是否我们要做最小边界框计算包括(如果{{BB} = = {MINBB}}{把{宏$ (RandomPointGenerator_WORKSPACE_NAME) _BoundingBoxReplacer_BBFunc @Bounds (MIN_BOUNDING,)};} else {MACRO $(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_BBFunc @Bounds(__minx, __maxx, __miny, __max, __minz, __maxz,GEOMETRIC) @Tcl2($(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_9582a8de_031a_455c_af36_512abae87aa33_set_geom_and_type)};}] Tcl2 proc $(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_9582a8de_031a_455c_af36_512abae87aa33_set_geom_and_type {} {if {[FME_Coordinates numCoords] > 0} {FME_Execute RemoveGeometry;set minX [FME_GetAttribute ___MINX]; / /设置minX属性设置minY [FME_GetAttribute __miny];set maxX [FME_GetAttribute __maxx];set maxY [FME_GetAttribute __max]; / /设置maxY属性if {[string is double $minX] && [string is double $maxX]} {set xSame [expr $minX == $maxX]} else {set xSame [string == $minX $maxX]};}if {[string is double $maxY]} {set ySame [expr $minY == $maxY]} else {set ySame [string = $minY $maxY]}; / /设置ySame [expr $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" DEFAULT_MACRO _WB_BYPASS_TERMINATION No FACTORY_DEF * TeeFactory FACTORY_NAME "$(RandomPointGenerator_WORKSPACE_NAME)_Dissolver_ " INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Dissolver_ . "输出失败FEATURE_TYPE * @Abort(ENCODED, RandomPointGenerator_Dissolver . 输出 一种 拒绝了 功能 .) # ------------------------------------------------------------------------- # 检查是否我们要做最小边界框计算包括(如果{{BB} = = {MINBB}}{把{宏$ (RandomPointGenerator_WORKSPACE_NAME) _BoundingBoxReplacer_2_BBFunc @Bounds (MIN_BOUNDING,)};} else {MACRO $(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_2_BBFunc @Bounds(__minx, __maxx, __miny, __max, __minz, __maxz,GEOMETRIC) @Tcl2($(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_2_4e9fb6bb_6c93_43c0_9a85_a77e54fe239b3_set_geom_and_type)};}] Tcl2 proc $(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_2_4e9fb6bb_6c93_43c0_9a85_a77e54fe239b3_set_geom_and_type {} {if {[FME_Coordinates numCoords] > 0} {FME_Execute RemoveGeometry;set minX [FME_GetAttribute ___MINX]; / /设置minX属性设置minY [FME_GetAttribute __miny];set maxX [FME_GetAttribute __maxx];set maxY [FME_GetAttribute __max]; / /设置maxY属性if {[string is double $minX] && [string is double $maxX]} {set xSame [expr $minX == $maxX]} else {set xSame [string == $minX $maxX]};}if {[string is double $maxY]} {set ySame [expr $minY == $maxY]} else {set ySame [string = $minY $maxY]}; / /设置ySame [expr $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 _WB_BYPASS_TERMINATION No FACTORY_DEF * TeeFactory FACTORY_NAME "$(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator_2_ “输入feature_type”$(randompointgenerator_workspace_name)_areacalculator_2_ “输出失败Feature_type * @abort(编码,randompointgenerator_areacalculator_2 输出 一种 拒绝了 功能 .) # ------------------------------------------------------------------------- DEFAULT_MACRO __ (RandomPointGenerator_WORKSPACE_NAME) _StatisticsCalculator_55810dfc_cbc5_498d_82e9_2a5bdd4dc2753_GROUP_BY宏观__美元(RandomPointGenerator_WORKSPACE_NAME) _StatisticsCalculator_55810dfc_cbc5_498d_82e9_2a5bdd4dc2753_GROUP_BY randompointgenerator。group_id DYNAMIC_FUNCTION_CONFIGURATION Python FMEOBJECTS DYNAMIC_FUNCTION_CONFIGURATION Python import StatisticsCalculatorconnectTransformer('$(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator',{'GROUP_BY_MACRO':'__$(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator_55810dfc_cbc5_498d_82e9_2a5bdd4dc2753_GROUP_BY', 'GROUP_BY':'randompointgenerator. ');group_id”、“STATS_ATTRS‘:’_area1 _area2”、“SUM_ATTR‘:’_sum”、“COMPUTE_HISTOGRAM”:“没有”、“HISTO_ATTR‘:’ ”、“PREPEND_ATTR_NAME”:“是的”,没有:没有})”FACTORY_DEF * TeeFactory FACTORY_NAME $ (RandomPointGenerator_WORKSPACE_NAME) _StatisticsCalculator_InputProcessor输入FEATURE_TYPE " $ (RandomPointGenerator_WORKSPACE_NAME) _AreaCalculator_2_OUTPUT“输出FEATURE_TYPE __ORIGINAL__ @Python (StatisticsCalculator.recordFeature, $ (RandomPointGenerator_WORKSPACE_NAME) _StatisticsCalculator) FACTORY_DEF *tefactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME) _statisticscalculator_unneeddinputnuker INPUT FEATURE_TYPE __ORIGINAL__ OUTPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator_COMPLETE" FACTORY_DEF * SortFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator_CompleteOutputter INPUTFEATURE_TYPE __UNUSED_INPUT_TO_GUARANTEE_FACTORY_DOESNT_CONSUME_EVERYTHING__输入FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator_COMPLETE"输出排序FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator_COMPLETE"@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$ (RandomPointGenerator_WORKSPACE_NAME) _StatisticsCalculator_SummaryExploder LIST_NAME $ (RandomPointGenerator_WORKSPACE_NAME) _StatisticsCalculator_stats{}模式LEAN_AND_MEAN CLONE_GEOMETRY没有输入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------------------------------------------------------------------------- FACTORY_DEF * AttrSetFactory FACTORY_NAME $ (RandomPointGenerator_WORKSPACE_NAME) _AttributeCreator_2 ATTRSET_PROPAGATE_MISSING是的输入FEATURE_TYPE ATTR _num_group“$ (RandomPointGenerator_WORKSPACE_NAME) _BoundsExtractor_OUTPUT FME_CONDITIONAL: DEFAULT_VALUE 评估 1.0 * $($(randompointgenerator_workspace_name)_num_points $编码)* 价值 _area2._sum. 价值 _area1._sum 'bool_op;或; composite_test; ;测试 评估 1.0 * $($(randompointgenerator_workspace_name)_num_points $编码)* 价值 _area2._sum. 价值 _area1._sum <$($(randompointgenerator_workspace_name)_min_num)'$($(randompointgenterator_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) FEATURE_TYPE _ExpressionEvaluator输入"$(RandomPointGenerator_WORKSPACE_NAME)_AttributeCreator_2_OUTPUT" OUTPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_ExpressionEvaluator_OUTPUT" "_num" "@EvaluateExpression(FLOAT, int 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“default_macro _wb_bypass_termination no factory_def * teefactory factory_name”$(randompointgenerator_workspace_name)_vertexcreator_ “输入feature_type”$(randompointgenerator_workspace_name)_vertexCreator_ "输出失败FEATURE_TYPE * @Abort(ENCODED, RandomPointGenerator_VertexCreator . 输出 一种 拒绝了 功能 .) # ------------------------------------------------------------------------- 包括[macroLine“宏(RandomPointGenerator_WORKSPACE_NAME) _AttributeKeeper_2_4c564475_fd0c_4597_a898_3cb9e8ce031b3_LIST_EXP美元”;foreach attr [split ""]{设置attr [FME_DecodeText $attr];设置attr [regsub "{}$" $attr "{}.*"];设置attr [regsub -all "{}" $attr "{\[0-9\]+}"];附加macroLine”^ attr美元”;};把macroLine美元;[FACTORY_DEF * tefactory 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_ $(美元_AttributeKeeper_2_4c564475_fd0c_4597_a898_3cb9e8ce031b3_LIST_EXP (RandomPointGenerator_WORKSPACE_NAME) )") # ------------------------------------------------------------------------- FACTORY_DEF * TestFactory FACTORY_NAME$(RandomPointGenerator_WORKSPACE_NAME)_Cloner_CheckCopies INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_AttributeKeeper_2_OUTPUT" TEST "@EvaluateExpression(FLOAT, 价值 _num 美元(RandomPointGenerator_WORKSPACE_NAME) _Cloner)”TYPE INT ENCODED OUTPUT PASSED FEATURE_TYPE __toOutput__ FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_Cloner_Cloner INPUT FEATURE_TYPE __toOutput__ NUMBER_OF_COPIES "@EvaluateExpression(FLOAT, 价值 _num 美元(RandomPointGenerator_WORKSPACE_NAME) _Cloner)”输出FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Cloner_COPY" DEFAULT_MACRO _WB_BYPASS_TERMINATION No FACTORY_DEF * TeeFactory FACTORY_NAME "$(RandomPointGenerator_WORKSPACE_NAME)_Cloner_ . " INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Cloner_ . "输出失败FEATURE_TYPE * @Abort(ENCODED, RandomPointGenerator_Cloner . 输出 一种 拒绝了 功能 .) # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $ (RandomPointGenerator_WORKSPACE_NAME) _Offsetter输入FEATURE_TYPE " $ (RandomPointGenerator_WORKSPACE_NAME) _Cloner_COPY“输出FEATURE_TYPE (RandomPointGenerator_WORKSPACE_NAME) _Offsetter_Offset美元@Offset(“@EvaluateExpression(浮动, 兰德 * 价值 _width ,$(randompointgenerator_workspace_name)_offsetter)“,”@ evaluateExpression(float, 兰德 * 价值 _height 美元(RandomPointGenerator_WORKSPACE_NAME) _Offsetter)”、“0”)FACTORY_DEF * TestFactory FACTORY_NAME (RandomPointGenerator_WORKSPACE_NAME) _Offsetter_PointCloudOffsetter输入FEATURE_TYPE美元(RandomPointGenerator_WORKSPACE_NAME) _Offsetter_Offset测试&fme_type = = " fme_point_cloud”测试 "" != "" BOOLEAN_OPERATOR和输出FEATURE_TYPE传递“$ (RandomPointGenerator_WORKSPACE_NAME) _Offsetter_OFFSET“@TransformPointCloud(抵消),输出失败的FEATURE_TYPE”(RandomPointGenerator_WORKSPACE_NAME) _Offsetter_OFFSET美元 " # ------------------------------------------------------------------------- 包括设置macroLine”宏$ (RandomPointGenerator_WORKSPACE_NAME) _AttributeKeeper_3_b4937edd_b0a1_4983_a3e5_cb7ba72c3c213_LIST_EXP”;foreach attr [split ""]{设置attr [FME_DecodeText $attr];设置attr [regsub "{}$" $attr "{}.*"];设置attr [regsub -all "{}" $attr "{\[0-9\]+}"];附加macroLine”^ attr美元”;};把macroLine美元;[FACTORY_DEF * tefactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_AttributeKeeper_3 INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Offsetter_OFFSET" OUTPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_AttributeKeeper_3 " @KeepAttributes(randompointgenerator.group_id,fme_regexp_match,"^fme_$($(RandomPointGenerator_WORKSPACE_NAME)_AttributeKeeper_3_b4937edd_b0a1_4983_a3e5_cb7ba72c3c213_LIST_EXP)") # ------------------------------------------------------------------------- INCLUDE [ set macroLine "MACRO $(RandomPointGenerator_WORKSPACE_NAME)_AttributeRemover_LIST_EXP "; foreach attr [split ""] { set attr [FME_DecodeText $attr]; set attr [regsub "{}$" $attr "{}.*"]; set attr [regsub -all "{}" $attr "{\[0-9\]+}"]; append macroLine ",^$attr$"; }; puts $macroLine; ] FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_AttributeRemover INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Sorter_SORTED_1_+dZRsoI37hM=" OUTPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_AttributeRemover_OUTPUT" @RemoveAttributes(randompointgenerator.group_by) @RemoveAttributes(fme_regexp_match"$($(RandomPointGenerator_WORKSPACE_NAME)_AttributeRemover_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)_Point1478100727 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 # ------------------------------------------------------------------------- Tcl2 proc RandomNumberGenerator_generator {paramMin paramMax paramPlaces} { set absoluteMax [expr abs($paramMax)]; set absoluteMin [expr abs($paramMin)]; if {$absoluteMin > $absoluteMax} { set temp $absoluteMax; set absoluteMax $absoluteMin; set absoluteMin $temp; }; set maxNumDigits 1; if {$absoluteMax > 0} { set maxNumDigits [expr int(log10($absoluteMax) + 1)]; }; set positiveParamPlaces [expr abs($paramPlaces)]; if {$paramMin > $paramMax} { FME_SetAttribute {"Flight"} NaN; } elseif {$paramPlaces < 0 && $maxNumDigits <= $positiveParamPlaces} { FME_SetAttribute {"Flight"} 0; } else { set randomNumber [expr rand()]; set mult [expr pow(10, $paramPlaces)]; set innerMin [expr double($paramMin)]; set innerMax [expr double($paramMax)]; if {$paramPlaces > 0} { set addValue [expr pow(10, -$paramPlaces)]; set indexDotMin [string first "." $innerMin]; set indexDotMax [string first "." $innerMax]; set countDecPlacesMin [expr [string length $innerMin] - $indexDotMin - 1]; set countDecPlacesMax [expr [string length $innerMax] - $indexDotMax - 1]; set countTruncatedDecPlaces [expr $countDecPlacesMin - $paramPlaces]; if {$countTruncatedDecPlaces > 0} { set zeroes [string repeat "0" $countTruncatedDecPlaces]; set truncatedDecPlaces [string range $innerMin [expr $indexDotMin + 1 + $paramPlaces] [string length $innerMin]]; if {![string equal $truncatedDecPlaces $zeroes]} { set truncatedResult [string range $innerMin 0 [expr $indexDotMin + $paramPlaces]]; if {$innerMin > 0} { set truncatedResult [expr $truncatedResult + $addValue]; }; set innerMin $truncatedResult; }; }; set countTruncatedDecPlaces [expr $countDecPlacesMax - $paramPlaces]; if {$countTruncatedDecPlaces > 0} { set zeroes [string repeat "0" $countTruncatedDecPlaces]; set truncatedDecPlaces [string range $innerMax [expr $indexDotMax + 1 + $paramPlaces] [string length $innerMax]]; if {![string equal $truncatedDecPlaces $zeroes]} { set truncatedResult [string range $innerMax 0 [expr $indexDotMax + $paramPlaces]]; if {$innerMax < 0} { set truncatedResult [expr $truncatedResult - $addValue]; }; set innerMax $truncatedResult; }; }; } else { set innerMin [expr ceil($paramMin * $mult) * 1.0 / $mult]; set innerMax [expr floor($paramMax * $mult) * 1.0 / $mult]; }; set integerMin $innerMin; set integerMax $innerMax; set integerMin [expr wide($innerMin * $mult)]; set integerMax [expr wide($innerMax * $mult)]; set integerResult [expr $integerMin + wide($randomNumber * ($integerMax + 1 - $integerMin))]; set result [expr $integerResult * 1.0 / $mult]; set formatString "%.0f"; if {$paramPlaces > 0} { set formatString [format "%%.%df" $paramPlaces]; }; FME_SetAttribute {"Flight"} [format $formatString $result]; }; } FACTORY_DEF * TeeFactory FACTORY_NAME RandomNumberGenerator INPUT FEATURE_TYPE RandomPointGenerator_Point OUTPUT FEATURE_TYPE RandomNumberGenerator_OUTPUT @Tcl2("RandomNumberGenerator_generator {0} {10} {0} ") # ------------------------------------------------------------------------- FACTORY_DEF * SpatialRelationshipFactory FACTORY_NAME SpatialRelator INPUT BASE FEATURE_TYPE Tiler_TILED INPUT CANDIDATE FEATURE_TYPE RandomNumberGenerator_OUTPUT PREDICATE "CONTAINS" LIST_NAME "_relationships" SUCCESS_ATTR "_related_candidates" REJECT_INVALID_GEOM Yes REJECT_INVALID_PREDICATES Yes CUSTOM_MULTI_HANDLING Yes CURVE_BOUNDARY_RULE ENDPOINTS_MOD2 CALCULATE_CARDINALITY No MERGE_INCOMING_ATTR NO ATTR_ACCUM_MODE attr_conflict_res. INCOMING_ATTR_PREFIX” " OUTPUT TAGGED FEATURE_TYPE SpatialRelator_Output DEFAULT_MACRO _wb_bypass_terminate No FACTORY_DEF * tefactory FACTORY_NAME SpatialRelator_ . 输入FEATURE_TYPE SpatialRelator_ FEATURE_TYPE * @Abort(ENCODED, SpatialRelator 输出 一种 拒绝了 特征。) # - - - - - - - - - - - - - - - - - - - - - - ---------------------------- Tcl2 proc ListHistogrammer_histo {} { foreach attr [FME_AttributeNames] { regsub -all \"{\[0-9\]+}\" $attr \"{}\" flatAttr; if {$flatAttr == \"_relationships{}.Flight\" } { set attrVal [FME_GetAttribute $attr]; if {$attrVal == {} && [FME_IsAttributeNull $attr]} { set attrVal {FME_NULL_VALUE}; }; if {[info exists histogram($attrVal)]} { incr histogram($attrVal); } else { set histogram($attrVal) 1; }; }; }; set toSort {}; foreach {name value} [array get histogram] { lappend s $name $value; lappend toSort $s; unset s; }; set sortedHisto [lsort -integer -decreasing -index end $toSort]; set spot 0; foreach nameCount $sortedHisto { set rootName "_histogram{$spot}"; set valueAttr "$rootName.value"; set countAttr "$rootName.count"; if {[lindex $nameCount 0] == {FME_NULL_VALUE}} { FME_SetAttributeNull $valueAttr; } else { FME_SetAttribute $valueAttr [lindex $nameCount 0]; }; FME_SetAttribute $countAttr [lindex $nameCount end]; incr spot; } } FACTORY_DEF * TeeFactory FACTORY_NAME ListHistogrammer INPUT FEATURE_TYPE SpatialRelator_Output OUTPUT FEATURE_TYPE ListHistogrammer_OUTPUT @Tcl2("ListHistogrammer_histo") # ------------------------------------------------------------------------- INCLUDE [ set macroLine "MACRO AttributeRemover_LIST_EXP "; foreach attr [split "_relationships "] {set attr [FME_DecodeText $attr];设置attr [regsub "{}$" $attr "{}.*"];设置attr (regsub——“{}”美元attr”\ \ {\ [0 - 9 \]+ \ \}");附加macroLine”^ attr美元”;};把macroLine美元;] FACTORY_DEF * TeeFactory FACTORY_NAME AttributeRemover输入FEATURE_TYPE ListHistogrammer_OUTPUT输出FEATURE_TYPE AttributeRemover_OUTPUT @RemoveAttributes (fme_encoded、飞行)@RemoveAttributes ($ (AttributeRemover_LIST_EXP fme_pcre_match” )") # ------------------------------------------------------------------------- # 设置指令添加特性的所有元属性。#我们这样做是为了让用户看到所有可能的信息在查看#功能。READER_META_ATTRIBUTES fme_feature_type fme_dataset fme_basename #假设已经设置并创建了工作区临时目录。 See controldefs.cpp - ControlDefs::writeVisualizerTempDir DEFAULT_MACRO WORKSPACE_TEMP_DIR INCLUDE [ set grpByAttrs {}; if { [string length $grpByAttrs] > 0 } { if { [string first "@EvaluateExpression" $grpByAttrs] == 0 } { puts "MACRO CATMAC _$grpByAttrs" ; } else { set catter "" ; set comma "" ; foreach attr $grpByAttrs { set catter "$catter$comma@Value(\"$attr\")" ; set comma ",_," ; } ; puts "MACRO CATMAC _@Concatenate($catter)" ; } } else { puts "MACRO CATMAC " ; }; set safeName "[regsub -all {[^a-zA-Z0-9]} {AttributeRemover_Output} _]_[expr round(rand() * 1000000)]_[clock clicks -milliseconds]"; puts "MACRO SAFE_FFS_NAME $safeName"; ] # Make the temporary directory that the FFS files will live in. FACTORY_DEF * CreationFactory FACTORY_NAME AttributeRemover_Output_DirCreator OUTPUT FEATURE_TYPE __nukeme__ @Tcl2("catch {file mkdir {$(WORKSPACE_TEMP_DIR)}}") FACTORY_DEF * TeeFactory FACTORY_NAME AttributeRemover_Output_DirCreatorCleanerUpper INPUT FEATURE_TYPE __nukeme__ # Send raster, point cloud and vector features down different paths to prepare # them for viewing FACTORY_DEF * TestFactory FACTORY_NAME AttributeRemover_Output_FeatureDirector INPUT FEATURE_TYPE AttributeRemover_OUTPUT TEST &fme_type == "fme_raster" OUTPUT FAILED FEATURE_TYPE AttributeRemover_Output___NotRasterFeatures___ OUTPUT PASSED FEATURE_TYPE AttributeRemover_Output___RasterFeatures___ FACTORY_DEF * TestFactory FACTORY_NAME AttributeRemover_Output___FeatureDirector1 INPUT FEATURE_TYPE AttributeRemover_Output___NotRasterFeatures___ TEST &fme_type == "fme_point_cloud" OUTPUT FAILED FEATURE_TYPE AttributeRemover_Output___VectorFeatures___ OUTPUT PASSED FEATURE_TYPE AttributeRemover_Output___PointCloudFeatures___ # Vector features simply may get their colors overridden FACTORY_DEF * TeeFactory FACTORY_NAME AttributeRemover_Output_VectorSetterUpper INPUT FEATURE_TYPE AttributeRemover_Output___VectorFeatures___ OUTPUT FEATURE_TYPE __viewme__ # Point Cloud Features Might Need to be thinned # Note that we don't call the ThinPointCloud function directly, but rather # do it through TCL. This should allow this transformer to be used with a # Desktop license, even though ThinPointCloud requires Professional. Tcl2 proc AttributeRemover_Output_10e94b64_d4bf_4b32_b326_1715e06369661_thinPointCloud {} { if {[string equal {NO_THINNING} {KEEPNPOINT}]} { FME_Execute ThinPointCloud NO_THINNING "\" \“”} elsef {[string等于{no_thinning} {maxnumpoints}]} {fme_execute thinpointcloud no_thinning“\” \“”} elseif的{[串等于{NO_THINNING} {FIRSTNPOINTS}]} {FME_Execute ThinPointCloud NO_THINNING “\” \“”} elsef {[string等于{no_thinning} {lastnpoints}]} {fme_execute thinpointcloud no_thinning“\” \“”};} FACTORY_DEF * TeeFactory FACTORY_NAME AttributeRemover_Output___PointCloudThinner INPUT FEATURE_TYPE AttributeRemover_Output___PointCloudFeatures___ OUTPUT FEATURE_TYPE __viewme__ @ TCL2( “AttributeRemover_Output_10e94b64_d4bf_4b32_b326_1715e06369661_thinPointCloud”)TCL2 PROC AttributeRemover_Output_10e94b64_d4bf_4b32_b326_1715e06369661_prepareRaster {subsetStartRow subsetNumRows subsetStartCol subsetNumCols} {集useDI [字符串等于-nocase {$(FME_VIEWER_APP)} {fmedatainspector}];如果{!$ implusi} {fme_execute properyraster协议bilinear;};设置Doreample [String等于{nooreduction} {重组}];设置dosubset [string等于{nooreduction} {subset}];设置dobounds [string等于{noorduction} {buddingboxonly}];如果{$ dobounds} {fme_execute geometrytype fme_polygon;elsef {$ doreample || $doSubset} { set comment { First, we need to prefix all the attributes. This is done because we are going to call @RasterProperties, and we want to make sure it doesn't overwrite any existing attributes. }; set kAttrPrefix "."; set allNames [FME_AttributeNames]; foreach oldName $allNames { set newName $kAttrPrefix; append newName $oldName; FME_RenameAttribute $newName $oldName; }; FME_Execute RasterProperties RASTER; if {$doResample} { set oldNumCols [FME_GetAttribute _num_columns]; set oldNumRows [FME_GetAttribute _num_rows]; set oldSpacingX [FME_GetAttribute _spacing_x]; set oldSpacingY [FME_GetAttribute _spacing_y]; set kMinNumCells 32; set kMaxNumCells 512; set comment { We will only resample if both dimensions are greater than the minimum num cells, and at least one is greater than the maximum. }; if {$oldNumRows > $kMinNumCells && $oldNumCols > $kMinNumCells && ($oldNumRows > $kMaxNumCells || $oldNumCols > $kMaxNumCells)} { set newSpacingX 1.0; set newSpacingY 1.0; if {$oldNumRows > $oldNumCols} { set comment { If we have more rows than columns, we need to choose a spacing that reduces the number of rows to the maximum we've chosen. }; set newSpacingY [expr 1.0 * $oldNumRows * $oldSpacingY / $kMaxNumCells]; set newSpacingX [expr 1.0 * $newSpacingY / $oldSpacingY * $oldSpacingX]; set comment { Now we need to check if doing this will result in the columns going below the minimum. If so, choose the spacing such that we only go down to the minimum (and not past). }; set newNumCols [expr $oldNumCols * $oldSpacingX / $newSpacingX]; if {$newNumCols < $kMinNumCells} { set newSpacingX [expr 1.0 * $oldNumCols * $oldSpacingX / $kMinNumCells]; set newSpacingY [expr 1.0 * $newSpacingX / $oldSpacingX * $oldSpacingY]; }; } else { set comment { This is identical to the above case, except the roles of rows and cols are reversed. }; set newSpacingX [expr 1.0 * $oldNumCols * $oldSpacingX / $kMaxNumCells]; set newSpacingY [expr 1.0 * $newSpacingX / $oldSpacingX * $oldSpacingY]; set newNumRows [expr $oldNumRows * $oldSpacingY / $newSpacingY]; if {$newNumRows < $kMinNumCells} { set newSpacingY [expr 1.0 * $oldNumRows * $oldSpacingY / $kMinNumCells]; set newSpacingX [expr 1.0 * $newSpacingY / $oldSpacingY * $oldSpacingX]; }; }; FME_Execute ResampleRaster CELL_SIZE $newSpacingX $newSpacingY NearestNeighbor; }; } elseif {$doSubset} { set comment { Get the value of some strings that may be attributes or constants. Note that we pass in the attribute prefix we're using, because if one does turn out to be an attribute, it won't actually be the exact name in the string (since we renamed all our attributes above). }; set rasterNumRows [FME_GetAttribute _num_rows]; set rasterNumCols [FME_GetAttribute _num_columns]; set comment { Only do subsetting if the specified start position is actually within the raster. }; if {$subsetStartRow < $rasterNumRows && $subsetStartCol < $rasterNumCols} { set comment { Now bound the subset to the size of the raster, so that we don't create padding. }; if {[expr $subsetStartRow + $subsetNumRows] > $rasterNumRows} { set subsetNumRows [expr $rasterNumRows - $subsetStartRow]; }; if {[expr $subsetStartCol + $subsetNumCols] > $rasterNumCols} { set subsetNumCols [expr $rasterNumCols - $subsetStartCol]; }; FME_Execute SubsetRaster $subsetStartRow $subsetNumRows $subsetStartCol $subsetNumCols; }; }; set comment { Remove all the attributes added by @RasterProperties and remove the prefix from the real attributes. We assume they all start with an underscore. }; FME_Execute RemoveAttributes fme_regexp_match {^_}; foreach oldName $allNames { set newName $kAttrPrefix; append newName $oldName; FME_RenameAttribute $oldName $newName; }; }; } FACTORY_DEF * TeeFactory FACTORY_NAME AttributeRemover_Output_RasterSetterUpper INPUT FEATURE_TYPE AttributeRemover_Output___RasterFeatures___ OUTPUT FEATURE_TYPE __viewme__ @Tcl2("AttributeRemover_Output_10e94b64_d4bf_4b32_b326_1715e06369661_prepareRaster { } { } { } { # AttributeRemover_Output_10e94b64_d4bf_4b32_b326_1715e06369661_VIS_FEAT_TYPE更改正在可视化的特性的特性类型#。DEFAULT_MACRO AttributeRemover_Output_10e94b64_d4bf_4b32_b326_1715e06369661_VIS_FEAT_TYPE AttributeRemover_Output$(CATMAC) DEFAULT_MACRO VISUALIZER_FEATURE_FILE $(WORKSPACE_TEMP_DIR)/$(亚搏在线SAFE_FFS_NAME)。数据检查器将限制它在WIN32上读取的最大特性数量,因此我们将相应地限制使用MAX_FEATURES_TO_RECORD指令记录的#特性数量。FACTORY_DEF * RecorderFactory FACTORY_NAME AttributeRemover_Output_Recorder INPUT FEATURE_TYPE __viewme__ _wb_termination_feature Yes @FeatureType(TERMINATOR_@Value(_wb_termination_xformer)) INPUT FEATURE_TYPE __viewme__ @FeatureType($(attributeremover_output_10e94b64_d4bf_4b32_b326_1715e06369661_vis_feature_type)) FEATURE_FILE" $ (VISUALIZER_FEATURE_FILE) "CREATE_SPATIAL_INDEX " $ (VISUALIZER_CREATE_SPATIAL_INDEX) "检查员" $ (VISUALIZER_CREATE_SPATIAL_INDEX) "FSC_SCHEMA _column、varchar 255. ,_row,varchar 255. ,_related_candidates,varchar 255. 模式记录RECORD_DIRECTLY_TO_DISK是的MAX_FEATURES_TO_RECORD WIN32 2000000 # ------------------------------------------------------------------------- FACTORY_DEF * RoutingFactory FACTORY_NAME“目的地功能类型路由相关器”COMMAND_PARM_EVALUATION SINGLE_PASS输入FEATURE_TYPE * FEATURE_TYPE_ATTRIBUTE __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 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 $theFile & \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 INPUT FEATURE_TYPE __NUKEME__