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


" TOP_LEFT="-384.899 -378.129" BOTTOM_RIGHT="994.63 -1185.18" BOUNDING_RECT="-384.899 -378.129 1379.53 807.047" STICKY="true" COLOUR="0.729412,0.509804,0.392157" CONTENTS="10 12 15 17 13 18 14 7 11 ">
#!


" TOP_LEFT="1200.01 -1187.42" BOTTOM_RIGHT="2664.94 -1449.13" BOUNDING_RECT="1200.01 -1187.42 1464.92 261.71" STICKY="true" COLOUR="0.447059,0.501961,0.239216" CONTENTS="20 16 21 ">
#!
#! #! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!0000100254250101254312712704254203052541520625400725402548229254254">#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!ifA0==0A1==0A2==25410;ifA0==50A1==101A2==25420;ifA0==127A1==127A2==030;ifA0==254A1==203A2==040;ifA0==254A1==152A2==050;ifA0==254A1==0A2==060;ifA0==254A1==0A2==25470;ifA0==229A1==254A2==25480"">#!#!#!#!#! #!#!#!#!#!#!0+A1+A2+A3+A4+A5+A6+A7"">#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#! #!#! #!#! #!#!
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)rgb-光栅到单带光栅-demo.log" LOG_APPEND NO LOG_MAX_FEATURES 200 LOG_MAX_RECORDED_FEATURES 200 FME_REPROJECTION_ENGINE FME FME_IMPLICIT_CSMAP_REPROJECTION_MODE Auto FME_GEOMETRY_HANDLING Enhanced FME_STROKE_MAX_DEVIATION 0 LOG_FILTER_MASK -1 #------------------------------------------------------------------------- MULTI_READER_CONTINUE_ON_READER_FAILURE没有 # ------------------------------------------------------------------------- 宏WORKSPACE_NAME rgb-raster-to-single-band-raster-demo宏观FME_VIEWER_APP fmedatainspector #------------------------------------------------------------------------- 包括(如果{[信息存在env (FME_TEMP) & &(文件isdirectory $ env (FME_TEMP)]}{设置gVisualizerTemp $ env (FME_TEMP)} elseif{[信息存在env(临时)& &(文件isdirectory $ env(临时)]}{设置gVisualizerTemp $ env(临时)}elseif {$ tcl_platform(平台)= =“unix”}{集gVisualizerTemp "/tmp"} else{设置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 # ------------------------------------------------------------------------- INCLUDE [ if {[string length {RGB24}]>0 && [string equal { } { }] && [string = {} } { }]} {MACRO BAND_COLOR_ENTRY BAND_COLOR_MODEL RGB_3BYTE};{宏PALETTE_COLOR_ENTRY};{宏PALETTE_KEY_ENTRY};} else {[string equals {RGB24} { }] && [字符串长度{ }]>0 &&[字符串长度{ }]>0} {puts {MACRO BAND_COLOR_ENTRY};{MACRO PALETTE_COLOR_ENTRY PALETTE_COLOR_MODEL };{MACRO PALETTE_KEY_ENTRY PALETTE_KEY_TYPE };} else {puts_real {rasterrgbcreator(rasterrgbcreator):必须为频带或调色板指定值。另一个的条目必须为空。退出1;}] FACTORY_DEF * CreationFactory FACTORY_NAME RasterRGBCreator_Creator OUTPUT FEATURE_TYPE _____CREATED_RASTER__RGB__ FACTORY_DEF * RasterCreationFactory FACTORY_NAME RasterRGBCreator INPUT FEATURE_TYPE _____CREATED_RASTER__RGB__ WIDTH 32高度32 GENERAL_CELL_TYPE颜色CREATE_PALETTE否$(BAND_COLOR_ENTRY)$(PALETTE_COLOR_ENTRY)$(PALETTE_KEY_ENTRY)X_CELL_ORIGIN 0.5 Y_CELL_ORIGIN 0.5 X_SPACING 1.0 Y_SPACING 1.0 X_UPPER_LEFT_COORD 0.0 Y_UPPER_LEFT_COORD 0.0nodata_color_value min_color_value 0,0,0.0.996078 max_color_value 0.196078,0396078,0.996078 nodata_alpha_value 0.0旋转MIN_ALPHA_VALUE max_alpha_value. rster_type Checkerboard OUTPUT CREATED FEATURE_TYPE rsterrgbcreator_created @SupplyAttributes(fme_basename, rsterrgbcreator,fme_feature_type, rsterrgbcreator) FACTORY_DEF * BranchingFactory FACTORY_NAME " rsterrgbcreator_created Brancher -1 11" INPUT FEATURE_TYPE rsterrgbcreator_created TARGET_FACTORY“$ (WB_CURRENT_CONTEXT) _CREATOR_BRANCH_TARGET“输出通过FEATURE_TYPE * @RemoveAttributes (.BranchingFactory.Count RasterRGBCreator_CREATED布兰凯尔1 11 ) # ------------------------------------------------------------------------- 包括(如果{[字符串长度{RGB24}] > 0 & & ={(字符串 } { }] && [string = {} } { }]} {MACRO BAND_COLOR_ENTRY BAND_COLOR_MODEL RGB_3BYTE};{宏PALETTE_COLOR_ENTRY};{宏PALETTE_KEY_ENTRY};} else {[string equals {RGB24} { }] && [字符串长度{ }]>0 &&[字符串长度{ }]>0} {puts {MACRO BAND_COLOR_ENTRY};{MACRO PALETTE_COLOR_ENTRY PALETTE_COLOR_MODEL };{MACRO PALETTE_KEY_ENTRY PALETTE_KEY_TYPE };} else {puts_real {RasterRGBCreator_2 (RasterRGBCreator):值必须指定波段或调色板。另一个的条目必须为空。退出1;}] FACTORY_DEF * CreationFactory FACTORY_NAME RasterRGBCreator_2_Creator输出FEATURE_TYPE _____CREATED_RASTER__RGB__ FACTORY_DEF * RasterCreationFactory FACTORY_NAME RasterRGBCreator_2输入FEATURE_TYPE _____CREATED_RASTER__RGB__宽32高32 GENERAL_CELL_TYPE颜色CREATE_PALETTE没有(BAND_COLOR_ENTRY) (PALETTE_COLOR_ENTRY)美元$(palette_key_entry) x_cell_origin 0.5 y_cell_origin 0.5 x_spacing 1.0 y_spacing 1.0 x_upper_left_coord 32 y_upper_left_coord 0.0 nodata_color_value min_color_value 0.498039,0.498039,0 max_color_value 0.996078,0.796078,0 nodata_alpha_value . $(palette_key_entry 0.0旋转MIN_ALPHA_VALUE max_alpha_value. RASTER_TYPE棋盘输出CREATED FEATURE_TYPE RasterRGBCreator_2_CREATED @SupplyAttributes(fme_basename,RasterRGBCreator_2,fme_feature_type,RasterRGBCreator_2)FACTORY_DEF * BranchingFactory FACTORY_NAME “RasterRGBCreator_2_CREATED分支器-1 13” INPUT FEATURE_TYPE RasterRGBCreator_2_CREATED TARGET_FACTORY “$(WB_CURRENT_CONTEXT)_CREATOR_BRANCH_TARGET” 的Passed FEATURE_TYPE * @RemoveAttributes(“RasterRGBCreator_2_CREATED分支器 -1 13“.BranchingFactory.count)#------------------------------------------------------------------包括[如果{[字符串长度{rgb24}]> 0 && [string等于{ } { }] && [string = {} } { }]} {MACRO BAND_COLOR_ENTRY BAND_COLOR_MODEL RGB_3BYTE};{宏PALETTE_COLOR_ENTRY};{宏PALETTE_KEY_ENTRY};} else {[string equals {RGB24} { }] && [字符串长度{ }]>0 &&[字符串长度{ }]>0} {puts {MACRO BAND_COLOR_ENTRY};{MACRO PALETTE_COLOR_ENTRY PALETTE_COLOR_MODEL };{MACRO PALETTE_KEY_ENTRY PALETTE_KEY_TYPE };} else {puts_real {rastryrgbcreator_3(rasterrgbcreator):必须为频带或调色板指定值。另一个的条目必须为空。退出1;}] FACTORY_DEF * CreationFactory FACTORY_NAME RasterRGBCreator_3_Creator OUTPUT FEATURE_TYPE _____CREATED_RASTER__RGB__ FACTORY_DEF * RasterCreationFactory FACTORY_NAME RasterRGBCreator_3 INPUT FEATURE_TYPE _____CREATED_RASTER__RGB__ WIDTH 32高度32 GENERAL_CELL_TYPE颜色CREATE_PALETTE否$(BAND_COLOR_ENTRY)$(PALETTE_COLOR_ENTRY)$(PALETTE_KEY_ENTRY)X_CELL_ORIGIN 0.5 Y_CELL_ORIGIN 0.5 X_SPACING 1.0 Y_SPACING 1.0 X_UPPER_LEFT_COORD 0.0 Y_UPPER_LEFT_COORD 32nodata_color_value min_color_value 0.996078,0.596078,0 max_color_value 0.996078,0,0 nodata_alpha_value 0.0旋转MIN_ALPHA_VALUE max_alpha_value. rster_type Checkerboard OUTPUT CREATED FEATURE_TYPE rsterrgbcreator_3_created @SupplyAttributes(fme_basename, rsterrgbcreator_3,fme_feature_type, rsterrgbcreator_3) FACTORY_DEF * BranchingFactory FACTORY_NAME " rsterrgbcreator_3_created Brancher -1 14" INPUT FEATURE_TYPE rsterrgbcreator_3_created TARGET_FACTORY“$ (WB_CURRENT_CONTEXT) _CREATOR_BRANCH_TARGET“输出通过FEATURE_TYPE * @RemoveAttributes (.BranchingFactory.Count“RasterRGBCreator_3_CREATED布兰凯尔1 14” ) # ------------------------------------------------------------------------- 包括(如果{[字符串长度{RGB24}] > 0 & & ={(字符串 } { }] && [string = {} } { }]} {MACRO BAND_COLOR_ENTRY BAND_COLOR_MODEL RGB_3BYTE};{宏PALETTE_COLOR_ENTRY};{宏PALETTE_KEY_ENTRY};} else {[string equals {RGB24} { }] && [字符串长度{ }]>0 &&[字符串长度{ }]>0} {puts {MACRO BAND_COLOR_ENTRY};{MACRO PALETTE_COLOR_ENTRY PALETTE_COLOR_MODEL };{MACRO PALETTE_KEY_ENTRY PALETTE_KEY_TYPE };} else {puts_real {rsterrgbcreator_4 (rsterrgbcreator):必须为波段或调色板指定值。另一个的条目必须为空。退出1;}] FACTORY_DEF * CreationFactory FACTORY_NAME RasterRGBCreator_4_Creator输出FEATURE_TYPE _____CREATED_RASTER__RGB__ FACTORY_DEF * RasterCreationFactory FACTORY_NAME RasterRGBCreator_4输入FEATURE_TYPE _____CREATED_RASTER__RGB__宽32高32 GENERAL_CELL_TYPE颜色CREATE_PALETTE没有(BAND_COLOR_ENTRY) (PALETTE_COLOR_ENTRY)美元$(palette_key_entry) x_cell_origin 0.5 y_cell_origin 0.5 x_spacing 1.0 y_spacing 1.0 x_upper_left_coord 32 y_upper_left_coord 32 nodata_color_value min_color_value 0.996078,0,0.996078 max_color_value 0.898039,0.996078,0.996078 nodata_alpha_value . $(palette_key_entry) x_cell_origin 0.5 y_cell_origin 0.5 x_spacing 1.0 y_spacing 1.0 x_upper_left_coord 32 0.0旋转MIN_ALPHA_VALUE max_alpha_value. rster_type Checkerboard OUTPUT CREATED FEATURE_TYPE rsterrgbcreator_4_created @SupplyAttributes(fme_basename, rsterrgbcreator_4,fme_feature_type, rsterrgbcreator_4) FACTORY_DEF * BranchingFactory FACTORY_NAME " rsterrgbcreator_4_created Brancher -1 15" INPUT FEATURE_TYPE rsterrgbcreator_4_created TARGET_FACTORY“$ (WB_CURRENT_CONTEXT) _CREATOR_BRANCH_TARGET“输出通过FEATURE_TYPE * @RemoveAttributes (.BranchingFactory.Count RasterRGBCreator_4_CREATED布兰凯尔1 15 ) # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME " $ (WB_CURRENT_CONTEXT) _CREATOR_BRANCH_TARGET“输入FEATURE_TYPE *输出FEATURE_TYPE * # ------------------------------------------------------------------------- FACTORY_DEF {*} RasterMosaicFactory FACTORY_NAME RasterMosaicker INPUT FEATURE_TYPE RasterRGBCreator_CREATED INPUT FEATURE_TYPE RasterRGBCreator_2_CREATED INPUT FEATURE_TYPE RasterRGBCreator_3_CREATED INPUT FEATURE_TYPE RasterRGBCreator_4_CREATED累加一个list_attrs_to_include { } LIST_ATTRS_TO_INCLUDE_MODE overapping_values last NODATA_OVERWRITE No INTERPOLATION_TYPE_NAME NearestNeighbor SNAPPING_TYPE RESAMPLE MERGE_PALETTES Yes OUTPUT mosaked FEATURE_TYPE RasterMosaicker_OUTPUT FACTORY_DEF * TeeFactory FACTORY_NAME "RasterMosaicker OUTPUT Splitter" INPUT FEATURE_TYPE RasterMosaicker_OUTPUT OUTPUT FEATURE_TYPE RasterMosaicker_OUTPUT_0_lvRtbr+IQ+E=OUTPUT FEATURE_TYPE RasterMosaicker_OUTPUT_1_8h+M1cO2wkQ= # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME RasterPaletteGenerator INPUT FEATURE_TYPE RasterMosaicker_OUTPUT_1_8h+M1cO2wkQ= OUTPUT FEATURE_TYPE RasterPaletteGenerator_OUTPUT @GenerateRasterPalettes(UInt8, ) # ------------------------------------------------------------------------- # 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 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]} {WithPaletteGenerated} _]_[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 WithPaletteGenerated_DirCreator OUTPUT FEATURE_TYPE __nukeme__ @Tcl2("catch {file mkdir {$(WORKSPACE_TEMP_DIR)}}") FACTORY_DEF * TeeFactory FACTORY_NAME WithPaletteGenerated_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 WithPaletteGenerated_FeatureDirector INPUT FEATURE_TYPE RasterPaletteGenerator_OUTPUT TEST &fme_type == "fme_raster" OUTPUT FAILED FEATURE_TYPE WithPaletteGenerated___NotRasterFeatures___ OUTPUT PASSED FEATURE_TYPE WithPaletteGenerated___RasterFeatures___ FACTORY_DEF * TestFactory FACTORY_NAME WithPaletteGenerated___FeatureDirector1 INPUT FEATURE_TYPE WithPaletteGenerated___NotRasterFeatures___ TEST &fme_type == "fme_point_cloud" OUTPUT FAILED FEATURE_TYPE WithPaletteGenerated___VectorFeatures___ OUTPUT PASSED FEATURE_TYPE WithPaletteGenerated___PointCloudFeatures___ # Vector features simply may get their colors overridden FACTORY_DEF * TeeFactory FACTORY_NAME WithPaletteGenerated_VectorSetterUpper INPUT FEATURE_TYPE WithPaletteGenerated___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 WithPaletteGenerated_92728a92_4eae_4836_97da_962b0aef68755_thinPointCloud {} { if {[string equal {NO_THINNING} {KEEPNPOINT}]} { FME_Execute ThinPointCloud NO_THINNING "\" \ ";} elseif {[string equal {no_thin} {MAXNUMPOINTS}]} {FME_Execute ThinPointCloud no_thin "\" \ ";} elseif {[string equal {no_thin} {FIRSTNPOINTS}]} {FME_Execute ThinPointCloud no_thin "\" \ ";} elseif {[string equal {no_thin} {LASTNPOINTS}]} {FME_Execute ThinPointCloud no_thin "\" \ ";};} FACTORY_DEF * TeeFactory FACTORY_NAME WithPaletteGenerated___PointCloudThinner输入FEATURE_TYPE WithPaletteGenerated___PointCloudFeatures___输出FEATURE_TYPE __viewme__ @Tcl2 Tcl2 proc WithPaletteGenerated_92728a92_4eae_4836_97da_962b0aef68755_prepareRaster(“WithPaletteGenerated_92728a92_4eae_4836_97da_962b0aef68755_thinPointCloud”){subsetStartRow subsetNumRows subsetStartCol subsetNumCols} {set useDI [string equal -nocase {$(FME_VIEWER_APP)} {fmedatainspector}];如果{!$useDI} {FME_Execute ApplyRasterRotation BILINEAR;};设置doResample [string equal {NoReduction} {Resample}];set doSubset [string equal {NoReduction} {Subset}]; / /设置一个子集设置doBounds [string equal {NoReduction} {BoundingBoxOnly}]; if {$doBounds} { FME_Execute GeometryType fme_polygon; } elseif {$doResample || $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 WithPaletteGenerated_RasterSetterUpper INPUT FEATURE_TYPE WithPaletteGenerated___RasterFeatures___ OUTPUT FEATURE_TYPE __viewme__ @Tcl2("WithPaletteGenerated_92728a92_4eae_4836_97da_962b0aef68755_prepareRaster { } { } { } { # WithPaletteGenerated_92728a92_4eae_4836_97da_962b0aef68755_VIS_FEAT_TYPE更改正在可视化的特性的特性类型#。DEFAULT_MACRO WithPaletteGenerated_92728a92_4eae_4836_97da_962b0aef68755_VIS_FEAT_TYPE WithPaletteGenerated$(CATMAC) DEFAULT_MACRO VISUALIZER_FEATURE_FILE $(WORKSPACE_TEMP_DIR)/$(亚搏在线SAFE_FFS_NAME)。数据检查器将限制它在WIN32上读取的最大特性数量,因此我们将相应地限制使用MAX_FEATURES_TO_RECORD指令记录的#特性数量。FACTORY_DEF * RecorderFactory FACTORY_NAME WithPaletteGenerated_Recorder输入FEATURE_TYPE __viewme__ _wb_termination_feature是的@FeatureType (TERMINATOR_@Value (_wb_termination_xformer))输入FEATURE_TYPE __viewme__ @FeatureType ($ (WithPaletteGenerated_92728a92_4eae_4836_97da_962b0aef68755_VIS_FEAT_TYPE)) FEATURE_FILE " $ (VISUALIZER_FEATURE_FILE) "CREATE_SPATIAL_INDEX " $ (VISUALIZER_CREATE_SPATIAL_INDEX) "检查员" $ (VISUALIZER_CREATE_SPATIAL_INDEX) "FSC_SCHEMA fme_basename、varchar 255. 模式记录STORE_SCANNED_METADATA RECORD_DIRECTLY_TO_DISK是的MAX_FEATURES_TO_RECORD WIN32 2000000 # ------------------------------------------------------------------------- FACTORY_DEF * RasterEvaluationFactory FACTORY_NAME RasterExpressionEvaluator输入FEATURE_TYPE RasterMosaicker_OUTPUT_0_lvRtbr +智力+ E = INTERPRETATION_LIST“UINT8; UINT8; UINT8; UINT8 UINT8; UINT8; UINT8; UINT8”EXPRESSION_LIST” 如果 一个 0 = = 0 一个 1 = = 0 一个 2 = = 254 1 0 如果 一个 0 = = 50 一个 1 = = 101 一个 2 = = 254 2 0 如果 一个 0 = = 127 一个 1 = = 127 一个 2 = = 0 3. 0 如果 一个 0 = = 254 一个 1 = = 203 一个 2 = = 0 4 0 如果 一个 0 = = 254 一个 1 = = 152 一个 2 = = 0 5 0 如果 一个 0 = = 254 一个 1 = = 0 一个 2 = = 0 6 0 如果 一个 0 = = 254 一个 1 = = 0 一个 2 = = 254 7 0 如果 一个 0 = = 229 一个 1 = = 254 一个 2 = = 254 8 0 “FORCE_FLOAT_DIVISION是的输出结果FEATURE_TYPE RasterExpressionEvaluator_RESULT # ------------------------------------------------------------------------- FACTORY_DEF * RasterEvaluationFactory FACTORY_NAME RasterExpressionEvaluator_2输入FEATURE_TYPE RasterExpressionEvaluator_RESULT INTERPRETATION_LIST UINT8 EXPRESSION_LIST” 0 +一个 1 +一个 2 +一个 3. +一个 4 +一个 5 +一个 6 +一个 7 " FORCE_FLOAT_DIVISION yes OUTPUT RESULT FEATURE_TYPE RasterExpressionEvaluator_2_RESULT FACTORY_DEF * TeeFactory FACTORY_NAME "RasterExpressionEvaluator_2 RESULT Splitter" INPUT FEATURE_TYPE RasterExpressionEvaluator_2_RESULT FEATURE_TYPE RasterExpressionEvaluator_2_RESULT_0_7vABPb9Yf38= OUTPUT FEATURE_TYPERasterExpressionEvaluator_2_RESULT_1_n / 4 iwhzpsfq = # ------------------------------------------------------------------------- FACTORY_DEF * AttrSetFactory FACTORY_NAME AttributeCreator输入FEATURE_TYPE RasterExpressionEvaluator_2_RESULT_1_n / 4 iwhzpsfq = MULTI_FEATURE_MODE没有NULL_ATTR_MODE NO_OP ATTRSET_CREATE_DIRECTIVES _PROPAGATE_MISSING_FDIVATTR_ACTION "" _palette" "SET_TO" "RGB24 . 0 0 0 0 1 0 0 254. 2 50 101 254. 3. 127 127 0 4 254. 203 0 5 254. 152 0 6 254. 0 0 7 254. 0 254. 8 229 254. 254" OUTPUT OUTPUT FEATURE_TYPE AttributeCreator_OUTPUT # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME RasterPaletteAdder INPUT FEATURE_TYPE AttributeCreator_OUTPUT OUTPUT FEATURE_TYPE RasterPaletteAdder_OUTPUT @RasterPaletteAttributes(ADD,_palette ) # ------------------------------------------------------------------------- # 假设是工作区临时dir已经设置和创建。参见ControlDefs .cpp - ControlDefs::writeVisualizerTempDir DEFAULT_MACRO WORKSPACE_TEMP_DIR INCLUDE [set grpByAttrs {};如果{[string length $grpByAttrs] > 0} {if {[string first "@EvaluateExpression" $grpByAttrs] == 0} {puts "MACRO CATMAC _$grpByAttrs";} else {set catter "";设置逗号“”;foreach attr $grpByAttrs {set catter "$catter$comma@Value(\"$attr\")";设置逗号“,_,”;}; puts "MACRO CATMAC _@Concatenate($catter)" ; } } else { puts "MACRO CATMAC " ; }; set safeName "[regsub -all {[^a-zA-Z0-9]} {WithPaletteAdded} _]_[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 WithPaletteAdded_DirCreator OUTPUT FEATURE_TYPE __nukeme__ @Tcl2("catch {file mkdir {$(WORKSPACE_TEMP_DIR)}}") FACTORY_DEF * TeeFactory FACTORY_NAME WithPaletteAdded_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 WithPaletteAdded_FeatureDirector INPUT FEATURE_TYPE RasterPaletteAdder_OUTPUT TEST &fme_type == "fme_raster" OUTPUT FAILED FEATURE_TYPE WithPaletteAdded___NotRasterFeatures___ OUTPUT PASSED FEATURE_TYPE WithPaletteAdded___RasterFeatures___ FACTORY_DEF * TestFactory FACTORY_NAME WithPaletteAdded___FeatureDirector1 INPUT FEATURE_TYPE WithPaletteAdded___NotRasterFeatures___ TEST &fme_type == "fme_point_cloud" OUTPUT FAILED FEATURE_TYPE WithPaletteAdded___VectorFeatures___ OUTPUT PASSED FEATURE_TYPE WithPaletteAdded___PointCloudFeatures___ # Vector features simply may get their colors overridden FACTORY_DEF * TeeFactory FACTORY_NAME WithPaletteAdded_VectorSetterUpper INPUT FEATURE_TYPE WithPaletteAdded___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 WithPaletteAdded_071ce096_66c8_4392_9a48_756ef36a08ef4_thinPointCloud {} { if {[string equal {NO_THINNING} {KEEPNPOINT}]} { FME_Execute ThinPointCloud NO_THINNING "\" \ ";} elseif {[string equal {no_thin} {MAXNUMPOINTS}]} {FME_Execute ThinPointCloud no_thin "\" \ ";} elseif {[string equal {no_thin} {FIRSTNPOINTS}]} {FME_Execute ThinPointCloud no_thin "\" \ ";} elseif {[string equal {no_thin} {LASTNPOINTS}]} {FME_Execute ThinPointCloud no_thin "\" \ ";};} FACTORY_DEF * TeeFactory FACTORY_NAME WithPaletteAdded___PointCloudThinner输入FEATURE_TYPE WithPaletteAdded___PointCloudFeatures___输出FEATURE_TYPE __viewme__ @Tcl2 (WithPaletteAdded_071ce096_66c8_4392_9a48_756ef36a08ef4_thinPointCloud) Tcl2 proc WithPaletteAdded_071ce096_66c8_4392_9a48_756ef36a08ef4_prepareRaster {subsetStartRowsubsetNumRows subsetStartCol subsetNumCols} {set useDI [string equal -nocase {$(FME_VIEWER_APP)} {fmedatainspector}];如果{!$useDI} {FME_Execute ApplyRasterRotation BILINEAR;};设置doResample [string equal {NoReduction} {Resample}];set doSubset [string equal {NoReduction} {Subset}]; / /设置一个子集设置doBounds [string equal {NoReduction} {BoundingBoxOnly}]; if {$doBounds} { FME_Execute GeometryType fme_polygon; } elseif {$doResample || $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 WithPaletteAdded_RasterSetterUpper INPUT FEATURE_TYPE WithPaletteAdded___RasterFeatures___ OUTPUT FEATURE_TYPE __viewme__ @Tcl2("WithPaletteAdded_071ce096_66c8_4392_9a48_756ef36a08ef4_prepareRaster { } { } { } { # WithPaletteAdded_071ce096_66c8_4392_9a48_756ef36a08ef4_VIS_FEAT_TYPE更改正在可视化的特性的特性类型#。DEFAULT_MACRO WithPaletteAdded_071ce096_66c8_4392_9a48_756ef36a08ef4_VIS_FEAT_TYPE WithPaletteAdded$(CATMAC) DEFAULT_MACRO VISUALIZER_FEATURE_FILE $(WORKSPACE_TEMP_DIR)/$(亚搏在线SAFE_FFS_NAME)。数据检查器将限制它在WIN32上读取的最大特性数量,因此我们将相应地限制使用MAX_FEATURES_TO_RECORD指令记录的#特性数量。FACTORY_DEF * RecorderFactory FACTORY_NAME WithPaletteAdded_Recorder INPUT FEATURE_TYPE __viewme__ _wb_termination_feature Yes @FeatureType(TERMINATOR_@Value(_wb_termination_xformer)) INPUT FEATURE_TYPE __viewme__ @FeatureType($(WithPaletteAdded_071ce096_66c8_4392_9a48_756ef36a08ef4_VIS_FEAT_TYPE) FEATURE_FILE "$(VISUALIZER_FEATURE_FILE)"CREATE_SPATIAL_INDEX " $ (VISUALIZER_CREATE_SPATIAL_INDEX) "检查员" $ (VISUALIZER_CREATE_SPATIAL_INDEX) "FSC_SCHEMA _palette、varchar 255. 、fme_basename varchar 255. 模式记录STORE_SCANNED_METADATA RECORD_DIRECTLY_TO_DISK是的MAX_FEATURES_TO_RECORD WIN32 2000000 # ------------------------------------------------------------------------- # 假设是工作区临时dir已经设置和创建。参见ControlDefs .cpp - ControlDefs::writeVisualizerTempDir DEFAULT_MACRO WORKSPACE_TEMP_DIR INCLUDE [set grpByAttrs {};如果{[string length $grpByAttrs] > 0} {if {[string first "@EvaluateExpression" $grpByAttrs] == 0} {puts "MACRO CATMAC _$grpByAttrs";} else {set catter "";设置逗号“”;foreach attr $grpByAttrs {set catter "$catter$comma@Value(\"$attr\")";设置逗号“,_,”;};"MACRO CATMAC _@Concatenate($catter)" ; } } else { puts "MACRO CATMAC " ; }; set safeName "[regsub -all {[^a-zA-Z0-9]} {SingleBandNoPalette} _]_[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 SingleBandNoPalette_DirCreator OUTPUT FEATURE_TYPE __nukeme__ @Tcl2("catch {file mkdir {$(WORKSPACE_TEMP_DIR)}}") FACTORY_DEF * TeeFactory FACTORY_NAME SingleBandNoPalette_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 SingleBandNoPalette_FeatureDirector INPUT FEATURE_TYPE RasterExpressionEvaluator_2_RESULT_0_7vABPb9Yf38= TEST &fme_type == "fme_raster" OUTPUT FAILED FEATURE_TYPE SingleBandNoPalette___NotRasterFeatures___ OUTPUT PASSED FEATURE_TYPE SingleBandNoPalette___RasterFeatures___ FACTORY_DEF * TestFactory FACTORY_NAME SingleBandNoPalette___FeatureDirector1 INPUT FEATURE_TYPE SingleBandNoPalette___NotRasterFeatures___ TEST &fme_type == "fme_point_cloud" OUTPUT FAILED FEATURE_TYPE SingleBandNoPalette___VectorFeatures___ OUTPUT PASSED FEATURE_TYPE SingleBandNoPalette___PointCloudFeatures___ # Vector features simply may get their colors overridden FACTORY_DEF * TeeFactory FACTORY_NAME SingleBandNoPalette_VectorSetterUpper INPUT FEATURE_TYPE SingleBandNoPalette___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 SingleBandNoPalette_ec937e8c_0109_475a_a1b4_ec2b632ef9585_thinPointCloud {} { if {[string equal {NO_THINNING} {KEEPNPOINT}]} { FME_Execute ThinPointCloud NO_THINNING "\" \ ";} elseif {[string equal {no_thin} {MAXNUMPOINTS}]} {FME_Execute ThinPointCloud no_thin "\" \ ";} elseif {[string equal {no_thin} {FIRSTNPOINTS}]} {FME_Execute ThinPointCloud no_thin "\" \ ";} elseif {[string equal {no_thin} {LASTNPOINTS}]} {FME_Execute ThinPointCloud no_thin "\" \ ";};} FACTORY_DEF * TeeFactory FACTORY_NAME SingleBandNoPalette___PointCloudThinner输入FEATURE_TYPE SingleBandNoPalette___PointCloudFeatures___输出FEATURE_TYPE __viewme__ @Tcl2 Tcl2 proc SingleBandNoPalette_ec937e8c_0109_475a_a1b4_ec2b632ef9585_prepareRaster(“SingleBandNoPalette_ec937e8c_0109_475a_a1b4_ec2b632ef9585_thinPointCloud”){subsetStartRow subsetNumRows subsetStartCol subsetNumCols} {set useDI [string equal -nocase {$(FME_VIEWER_APP)} {fmedatainspector}];如果{!$useDI} {FME_Execute ApplyRasterRotation BILINEAR;};设置doResample [string equal {NoReduction} {Resample}];set doSubset [string equal {NoReduction} {Subset}]; / /设置一个子集设置doBounds [string equal {NoReduction} {BoundingBoxOnly}]; if {$doBounds} { FME_Execute GeometryType fme_polygon; } elseif {$doResample || $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 SingleBandNoPalette_RasterSetterUpper INPUT FEATURE_TYPE SingleBandNoPalette___RasterFeatures___ OUTPUT FEATURE_TYPE __viewme__ @Tcl2("SingleBandNoPalette_ec937e8c_0109_475a_a1b4_ec2b632ef9585_prepareRaster { } { } { } { # SingleBandNoPalette_ec937e8c_0109_475a_a1b4_ec2b632ef9585_VIS_FEAT_TYPE更改正在可视化的特性的特性类型#。DEFAULT_MACRO SingleBandNoPalette_ec937e8c_0109_475a_a1b4_ec2b632ef9585_VIS_FEAT_TYPE SingleBandNoPalette$(CATMAC) DEFAULT_MACRO VISUALIZER_FEATURE_FILE $(WORKSPACE_TEMP_DIR)/$(亚搏在线SAFE_FFS_NAME)。数据检查器将限制它在WIN32上读取的最大特性数量,因此我们将相应地限制使用MAX_FEATURES_TO_RECORD指令记录的#特性数量。FACTORY_DEF * RecorderFactory FACTORY_NAME SingleBandNoPalette_Recorder输入FEATURE_TYPE __viewme__ _wb_termination_feature是的@FeatureType (TERMINATOR_@Value (_wb_termination_xformer))输入FEATURE_TYPE __viewme__ @FeatureType ($ (SingleBandNoPalette_ec937e8c_0109_475a_a1b4_ec2b632ef9585_VIS_FEAT_TYPE)) FEATURE_FILE " $ (VISUALIZER_FEATURE_FILE) "CREATE_SPATIAL_INDEX " $ (VISUALIZER_CREATE_SPATIAL_INDEX) "检查员" $ (VISUALIZER_CREATE_SPATIAL_INDEX) "FSC_SCHEMA fme_basename、varchar 255. 模式记录STORE_SCANNED_METADATA RECORD_DIRECTLY_TO_DISK是的MAX_FEATURES_TO_RECORD WIN32 2000000 # ------------------------------------------------------------------------- FACTORY_DEF * RoutingFactory FACTORY_NAME“目的地功能类型路由相关器”COMMAND_PARM_EVALUATION FEATURE_TYPE * FEATURE_TYPE_ATTRIBUTE SINGLE_PASS输入__wb_out_feat_type__输出路由FEATURE_TYPE *输出NOT_ROUTED FEATURE_TYPE __nuke_me__ @Tcl2(“FME_StatMessage 818059 [FME_GetAttribute fme_template_feature_type) 818060 818061 fme_warn ") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME输入FEATURE_TYPE“最终输出核武器”__nuke_me __ # ------------------------------------------------------------------------- FACTORY_DEF * CreationFactory 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__