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

该键值对总是

加入的功能,但不

忘记暴露属性

如果你真的想看到/使用

他们在您的工作!

“#!位置=” 1195.29 61.8729" #!TOP_LEFT = “1195.29 61.8729” #!BOTTOM_RIGHT = “1194.29 62.8729” #!BOUNDING_RECT = “1195.29 61.8729 -1 -1” #!ORDER = “5E + 14” #!FOLLOW_ANCHOR =“真” #!INFO_NODE = “假” #!COLOR = “1,1,0.784314,0.196078” #!SIZE_POLICY = “8” #!COMMENT_TYPE = “常规” #!ANCHORED_NODE = “8” #!/>#!

特点在键值对

找不到

“#!位置=” 1204.96 -1287.91" #!TOP_LEFT = “1204.96 -1287.91” #!BOTTOM_RIGHT = “1203.96 -1286.91” #!BOUNDING_RECT = “1204.96 -1287.91 -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="12" #! /> #!

您可以设置键和值

列表属性参数的任何

指数(这里0被选择)。

变压器将弄清楚

你实际上指的是整个

列表(例如kml_data {}。名称,而不是

kml_data的{0}。名称)

“#!位置=” 369.391 157.874" #!TOP_LEFT = “369.391 157.874” #!BOTTOM_RIGHT = “368.391 158.874” #!BOUNDING_RECT = “369.391 157.874 -1 -1” #!ORDER = “5E + 14” #!FOLLOW_ANCHOR =“真” #!INFO_NODE = “假” #!COLOR = “1,1,0.784314,0.196078” #!SIZE_POLICY = “8” #!COMMENT_TYPE = “规则的” #!ANCHORED_NODE = “5” #!/>#! #!
#! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #! #!
FME_PYTHON_VERSION 27 GUI忽略SourceDataset_OGCKML_1,OGCKML_IN_KML21_LOG_VERBOSE_OGCKML_1,OGCKML_IN_KML21_RASTER_READ_MODE_OGCKML_1,OGCKML_IN_KML21_SCAN_SCHEMA_OGCKML_1,OGCKML_IN_KML21_FAIL_ON_NETWORK_ERROR_OGCKML_1,OGCKML_IN_KML21_DELETE_DOWNLOADED_FILES_OGCKML_1,OGCKML_IN_KML21_TRAVERSE_NETWORKLINKS_OGCKML_1,OGCKML_IN_KML21_MAX_NETWORKLINK_TRAVERSAL_DEPTH_OGCKML_1,OGCKML_IN_KML21_DATASET_ENCODING_OGCKML_1,OGCKML_IN_KML21_MOVE_TO_KML_WORLD_COORDSYS_OGCKML_1,OGCKML_IN_KML21_APPLY_MODEL_TRANSFORMS_OGCKML_1,OGCKML_IN_EXPOSE_ATTRS_GROUP_OGCKML_1,OGCKML_IN_SEARCH_ENVELOPE_MINX_OGCKML_1,OGCKML_IN_SEARCH_ENVELOPE_MINY_OGCKML_1,OGCKML_IN_SEARCH_ENVELOPE_MAXX_OGCKML_1,OGCKML_IN_SEARCH_ENVELOPE_MAXY_OGCKML_1,OGCKML_IN_SEARCH_ENVELOPE_COORDINATE_SYSTEM_OGCKML_1,OGCKML_IN_CLIP_TO_ENVELOPE_OGCKML_1,OGCKML_IN_NETWORK_AUTHENTICATION_OGCKML_1 DEFAULT_MACRO SourceDataset_OGCKML $(FME_MF_DIR)8684前哨-1b-MP-20170502t191500-20170505t191500.kml GUI FILE_OR_URL SourceDataset_OGCKML KML_Files(* KML。*.kmz)|*.kml;*.kmz|All_Files(*)|* Source Google KML File or URL: INCLUDE [ if {{$(SourceDataset_OGCKML)} == {}} { puts_real {Parameter 'SourceDataset_OGCKML' must be given a value.};出口1;};]#!START_HEADER#!START_WB_HEADER READER_TYPE OGCKML READER_KEYWORD OGCKML_1 READER_GEN_DIRECTIVES NETWORK_AUTHENTICATION ,, KML21_MOVE_TO_KML_WORLD_COORDSYS,是的,KML21_TRAVERSE_NETWORKLINKS,所有,KML21_RASTER_READ_MODE,地面叠加层,KML21_LOG_VERBOSE,不,EXPOSE_ATTRS_GROUP,FME_DISCLOSURE_OPEN,SEARCH_ENVELOPE_MAXX,0,KML21_APPLY_MODEL_TRANSFORMS,不,SEARCH_ENVELOPE_MAXY,0,SEARCH_ENVELOPE_COORDINATE_SYSTEM ,, CLIP_TO_ENVELOPE,NO,KML21_SCAN_SCHEMA,是的,KML21_MAX_NETWORKLINK_TRAVERSAL_DEPTH,5,_MERGE_SCHEMAS,YES,USE_SEARCH_ENVELOPE,NO,SEARCH_ENVELOPE_MINX,0,SEARCH_ENVELOPE_MINY,0,KML21_FAIL_ON_NETWORK_ERROR,否KML21_DELETE_DOWNLOADED_FILES,YES,OGCKML_EXPOSE_FORMAT_ATTRS,kml_data 。显示名称 kml_buffer kml_data .display_name_raw_text kml_buffer kml_data 。名称 kml_buffer kml_data 。值 kml_buffer kml_extended_data_xml kml_buffer,KML21_DATASET_ENCODING,WRITER_TYPE NULL WRITER_KEYWORD NULL_DEST NULL_DEST_DATASET空#!END_WB_HEADER#!START_WB_HEADER MACRO WB_KEYWORD “OGCKML_1” #!END_WB_HEADER#!START_SOURCE_HEADER OGCKML OGCKML_1#从生成此映射文件的数据集:#!END_SOURCE_HEADER#!START_WB_HEADER DEFAULT_MACRO SourceDataset有[如果{{$(SourceDataset)}!= “”} {\ {放DEFAULT_MACRO SourceDataset_OGCKML_1 $(SourceDataset)} \}]#!END_WB_HEADER#!START_SOURCE_HEADER OGCKML OGCKML_1 DEFAULT_MACRO SourceDataset_OGCKML_1 $(SourceDataset_OGCKML) GUI FILE_OR_URL SourceDataset_OGCKML_1 KML_Files(*.kml;*.kmz)|*.kml;*.kmz|All_Files(*)|* Source Google KML File or URL: DEFAULT_MACRO OGCKML_IN_KML21_LOG_VERBOSE_OGCKML_1 No OGCKML_1_KML21_LOG_VERBOSE "$(OGCKML_IN_KML21_LOG_VERBOSE_OGCKML_1)" GUI CHOICE OGCKML_IN_KML21_LOG_VERBOSE_OGCKML_1 Yes%No Verbose Logging: DEFAULT_MACRO OGCKML_IN_KML21_RASTER_READ_MODE_OGCKML_1 GroundOverlay OGCKML_1_KML21_RASTER_READ_MODE "$(OGCKML_IN_KML21_RASTER_READ_MODE_OGCKML_1)" GUI OPTIONAL CHOICE OGCKML_IN_KML21_RASTER_READ_MODE_OGCKML_1 All%GroundOverlay%None Read Overlays as Rasters: DEFAULT_MACRO OGCKML_IN_KML21_SCAN_SCHEMA_OGCKML_1 Yes OGCKML_1_KML21_SCAN_SCHEMA "$(OGCKML_IN_KML21_SCAN_SCHEMA_OGCKML_1)" GUI CHOICE OGCKML_IN_KML21_SCAN_SCHEMA_OGCKML_1 Yes%No Scan Schema: DEFAULT_MACRO OGCKML_IN_KML21_FAIL_ON_NETWORK_ERROR_OGCKML_1 No OGCKML_1_KML21_FAIL_ON_NETWORK_ERROR "$(OGCKML_IN_KML21_FAIL_ON_NETWORK_ERROR_OGCKML_1)" GUI CHOICE OGCKML_IN_KML21_FAIL_ON_NETWORK_ERROR_OGCKML_1 Yes%No Fail on Network Errors: DEFAULT_MACRO OGCKML_IN_KML21_DELETE_DOWNLOADED_FILES_OGCKML_1 Yes OGCKML_1_KML21_DELETE_DOWNLOADED_FILES "$(OGCKML_IN_KML21_DELETE_DOWNLOADED_FILES_OGCKML_1)" GUI CHOICE OGCKML_IN_KML21_DELETE_DOWNLOADED_FILES_OGCKML_1 Yes%No Delete Downloaded Files: DEFAULT_MACRO OGCKML_IN_KML21_TRAVERSE_NETWORKLINKS_OGCKML_1 All OGCKML_1_KML21_TRAVERSE_NETWORKLINKS "$(OGCKML_IN_KML21_TRAVERSE_NETWORKLINKS_OGCKML_1)" GUI OPTIONAL CHOICE OGCKML_IN_KML21_TRAVERSE_NETWORKLINKS_OGCKML_1 No%Local%All Traverse NetworkLinks: DEFAULT_MACRO OGCKML_IN_KML21_MAX_NETWORKLINK_TRAVERSAL_DEPTH_OGCKML_1 5 OGCKML_1_KML21_MAX_NETWORKLINK_TRAVERSAL_DEPTH "$(OGCKML_IN_KML21_MAX_NETWORKLINK_TRAVERSAL_DEPTH_OGCKML_1)" GUI OPTIONAL INTEGER OGCKML_IN_KML21_MAX_NETWORKLINK_TRAVERSAL_DEPTH_OGCKML_1 Maximum NetworkLinks Traversal Depth: DEFAULT_MACRO OGCKML_IN_KML21_DATASET_ENCODING_OGCKML_1 OGCKML_1_KML21_DATASET_ENCODING "$(OGCKML_IN_KML21_DATASET_ENCODING_OGCKML_1)" GUI OPTIONAL ENCODING OGCKML_IN_KML21_DATASET_ENCODING_OGCKML_1 * Force Dataset Encoding: DEFAULT_MACRO OGCKML_IN_KML21_MOVE_TO_KML_WORLD_COORDSYS_OGCKML_1 Yes OGCKML_1_KML21_MOVE_TO_KML_WORLD_COORDSYS "$(OGCKML_IN_KML21_MOVE_TO_KML_WORLD_COORDSYS_OGCKML_1)" GUI CHOICE OGCKML_IN_KML21_MOVE_TO_KML_WORLD_COORDSYS_OGCKML_1 Yes%No Move To World Coordinate System: DEFAULT_MACRO OGCKML_IN_KML21_APPLY_MODEL_TRANSFORMS_OGCKML_1 No OGCKML_1_KML21_APPLY_MODEL_TRANSFORMS "$(OGCKML_IN_KML21_APPLY_MODEL_TRANSFORMS_OGCKML_1)" GUI CHOICE OGCKML_IN_KML21_APPLY_MODEL_TRANSFORMS_OGCKML_1 Yes%No Apply Transformations To Models: DEFAULT_MACRO OGCKML_IN_EXPOSE_ATTRS_GROUP_OGCKML_1 FME_DISCLOSURE_OPEN OGCKML_1_EXPOSE_ATTRS_GROUP "$(OGCKML_IN_EXPOSE_ATTRS_GROUP_OGCKML_1)" GUI DISCLOSUREGROUP OGCKML_IN_EXPOSE_ATTRS_GROUP_OGCKML_1 OGCKML_EXPOSE_FORMAT_ATTRS Schema Attributes # Include this file in source setting section to add external search envelope processing # Zero as a default means we don't do any search -- this makes workbench happier # =========================================================================== DEFAULT_MACRO OGCKML_IN_SEARCH_ENVELOPE_MINX_OGCKML_1 0 OGCKML_1_SEARCH_ENVELOPE "$(OGCKML_IN_SEARCH_ENVELOPE_MINX_OGCKML_1)" GUI OPTIONAL FLOAT OGCKML_IN_SEARCH_ENVELOPE_MINX_OGCKML_1 Minimum X: # =========================================================================== DEFAULT_MACRO OGCKML_IN_SEARCH_ENVELOPE_MINY_OGCKML_1 0 OGCKML_1_SEARCH_ENVELOPE "$(OGCKML_IN_SEARCH_ENVELOPE_MINY_OGCKML_1)" GUI OPTIONAL FLOAT OGCKML_IN_SEARCH_ENVELOPE_MINY_OGCKML_1 Minimum Y: # =========================================================================== DEFAULT_MACRO OGCKML_IN_SEARCH_ENVELOPE_MAXX_OGCKML_1 0 OGCKML_1_SEARCH_ENVELOPE "$(OGCKML_IN_SEARCH_ENVELOPE_MAXX_OGCKML_1)" GUI OPTIONAL FLOAT OGCKML_IN_SEARCH_ENVELOPE_MAXX_OGCKML_1 Maximum X: # =========================================================================== DEFAULT_MACRO OGCKML_IN_SEARCH_ENVELOPE_MAXY_OGCKML_1 0 OGCKML_1_SEARCH_ENVELOPE "$(OGCKML_IN_SEARCH_ENVELOPE_MAXY_OGCKML_1)" GUI OPTIONAL FLOAT OGCKML_IN_SEARCH_ENVELOPE_MAXY_OGCKML_1 Maximum Y: # =========================================================================== DEFAULT_MACRO OGCKML_IN_SEARCH_ENVELOPE_COORDINATE_SYSTEM_OGCKML_1 OGCKML_1_SEARCH_ENVELOPE "$(OGCKML_IN_SEARCH_ENVELOPE_COORDINATE_SYSTEM_OGCKML_1)" GUI OPTIONAL COORDSYS OGCKML_IN_SEARCH_ENVELOPE_COORDINATE_SYSTEM_OGCKML_1 Search Envelope Coordinate System: # =========================================================================== # BUG18999: We now have a soft clip to fall back on like native spatial index # thus we are reintroducing the clip to envelop as an option for users.#按现有databas Defualt软夹e readers we are emulating DEFAULT_MACRO OGCKML_IN_CLIP_TO_ENVELOPE_OGCKML_1 NO OGCKML_1_CLIP_TO_ENVELOPE "$(OGCKML_IN_CLIP_TO_ENVELOPE_OGCKML_1)" GUI OPTIONAL CHECKBOX OGCKML_IN_CLIP_TO_ENVELOPE_OGCKML_1 YES%NO Clip to Search Envelope # =========================================================================== DEFAULT_MACRO OGCKML_IN_NETWORK_AUTHENTICATION_OGCKML_1 OGCKML_1_NETWORK_AUTHENTICATION "$(OGCKML_IN_NETWORK_AUTHENTICATION_OGCKML_1)" GUI OPTIONAL AUTHENTICATOR OGCKML_IN_NETWORK_AUTHENTICATION_OGCKML_1 CONTAINER%GROUP%CONTAINER_TITLE%"Network Authentication"%PROMPT_TYPE%NETWORK Network Authentication # =========================================================================== DEFAULT_MACRO OGCKML_IN_ATTRIBUTE_READING_OGCKML_1 ALL OGCKML_1_ATTRIBUTE_READING "$(OGCKML_IN_ATTRIBUTE_READING_OGCKML_1)" OGCKML_1_DATASET "$(SourceDataset_OGCKML_1)" #!END_SOURCE_HEADER#!START_WB_HEADER #!END_WB_HEADER#!END_HEADER LOG_FILENAME "$(FME_MF_DIR)example-LKVPE.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 DEFAULT_MACRO DATASET_KEYWORD_OGCKML_1 OGCKML_1 # ------------------------------------------------------------------------- OGCKML_1_READER_META_ATTRIBUTES fme_feature_type # ------------------------------------------------------------------------- MULTI_READER_CONTINUE_ON_READER_FAILURE No # ------------------------------------------------------------------------- MACRO WORKSPACE_NAME example-LKVPE 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 # ------------------------------------------------------------------------- OGCKML_1_DEF Placemark # ------------------------------------------------------------------------- FACTORY_DEF * RoutingFactory FACTORY_NAME "Router and Unexpected Input Remover" COMMAND_PARM_EVALUATION SINGLE_PASS MULTI_READER_KEYWORD OGCKML_1 INPUT FEATURE_TYPE * ROUTE OGCKML OGCKML_1::Placemark TO FME_GENERIC ::Placemark ALIAS_GEOMETRY MERGE_INPUT Yes OUTPUT ROUTED FEATURE_TYPE * OGCKML_1_MERGE_DEF OGCKML_1::Placemark EXACT Placemark # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME "Placemark (OGCKML_1) Splitter" INPUT FEATURE_TYPE Placemark OUTPUT FEATURE_TYPE Placemark_OGCKML_1 DEFAULT_MACRO WB_CURRENT_CONTEXT # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME "ListKeyValuePairExtractor Input Input Collector" INPUT FEATURE_TYPE Placemark_OGCKML_1 OUTPUT FEATURE_TYPE ListKeyValuePairExtractor_Input MACRO ListKeyValuePairExtractor_WORKSPACE_NAME ListKeyValuePairExtractor MACRO $(ListKeyValuePairExtractor_WORKSPACE_NAME)_XFORMER_NAME ListKeyValuePairExtractor MACRO $(ListKeyValuePairExtractor_WORKSPACE_NAME)_TRANSFORMER_GROUP MACRO $(ListKeyValuePairExtractor_WORKSPACE_NAME)___COMPOUND_PARAMETERS MACRO $(ListKeyValuePairExtractor_WORKSPACE_NAME)___KEY_ATTR kml_data{0}.name MACRO $(ListKeyValuePairExtractor_WORKSPACE_NAME)___VAL_ATTR kml_data{0}.value MACRO $(ListKeyValuePairExtractor_WORKSPACE_NAME)___ATTR_CONFLICT_RES 1 INCLUDE_CUSTOM_TRANSFORMER_VER ListKeyValuePairExtractor:1 FACTORY_DEF * TeeFactory FACTORY_NAME "ListKeyValuePairExtractor Output Output Renamer/Nuker" INPUT FEATURE_TYPE ListKeyValuePairExtractor_Output OUTPUT FEATURE_TYPE ListKeyValuePairExtractor_Output FACTORY_DEF * TeeFactory FACTORY_NAME "ListKeyValuePairExtractor Output Renamer/Nuker" INPUT FEATURE_TYPE ListKeyValuePairExtractor_ OUTPUT FEATURE_TYPE ListKeyValuePairExtractor_ # ------------------------------------------------------------------------- # 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一套catter “$ catter $ @逗号值(\” $ ATTR \ “)”;集逗号 “_”;};看跌期权 “MACRO CATMAC _ @:连接($ catter)”;}}其他{放 “MACRO CATMAC”;};集saf亚搏在线eName “[regsub -all {[^ A-ZA-Z0-9]} {拒绝} _] _ [EXPR轮(RAND()* 1000000)] _ [时钟点击-milliseconds]”;看跌期权 “MACRO 亚搏在线SAFE_FFS_NAME $ safeName”;]#做的临时目录的FFS文件将居住。FACTORY_DEF * CreationFactory FACTORY_NAME Rejected_DirCreator输出FEATURE_TYPE __nukeme__ @ TCL2( “捉{文件的mkdir {$(WORKSPACE_TEMP_DIR)}}”)FACTORY_DEF * TeeFactory FACTORY_NAME Rejected_DirCreatorCleanerUpper INPUT FEATURE_TYPE __nukeme__#发送光栅,点云和载体功能下降不同的路径,以备#他们 viewing FACTORY_DEF * TestFactory FACTORY_NAME Rejected_FeatureDirector INPUT FEATURE_TYPE ListKeyValuePairExtractor_ 测试与fme_type == “fme_raster” 输出失败FEATURE_TYPE Rejected___NotRasterFeatures___输出PASSED FEATURE_TYPE Rejected___RasterFeatures___ FACTORY_DEF * TestFactory中FACTORY_NAME Rejected___FeatureDirector1 INPUT FEATURE_TYPE Rejected___NotRasterFeatures___测试与fme_type == “fme_point_cloud”,通过FEATURE_TYPE Rejected___PointCloudFeatures___#矢量输出失败FEATURE_TYPE Rejected___VectorFeatures___ OUTPUT简单功能可能会得到他们的颜色覆盖的FACTORY_DEF * TeeFactory FACTORY_NAME Rejected_VectorSetterUpper INPUT FEATURE_TYPE Rejected___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.这应该允许这种变压器具有#桌面授权使用,即使ThinPointCloud需要专业。TCL2 PROC Rejected_61384898_14c4_4401_9c9b_f2c580c35f7d0_thinPointCloud {} {如果{[串等于{NO_THINNING} {KEEPNPOINT}]} {FME_Execute ThinPointCloud NO_THINNING “\” \ “”;} elseif的{[串等于{NO_THINNING} {MAXNUMPOINTS}]} {FME_Execute ThinPointCloud NO_THINNING “\” \ “”;} elseif的{[串等于{NO_THINNING} {FIRSTNPOINTS}]} {FME_Execute ThinPointCloud NO_THINNING “\” \ “”;} elseif的{[串等于{NO_THINNING} {LASTNPOINTS}]} {FME_Execute ThinPointCloud NO_THINNING “\” \ “”;};} FACTORY_DEF * TeeFactory FACTORY_NAME Rejected___PointCloudThinner INPUT FEATURE_TYPE Rejected___PointCloudFeatures___ OUTPUT FEATURE_TYPE __viewme__ @ TCL2( “Rejected_61384898_14c4_4401_9c9b_f2c580c35f7d0_thinPointCloud”)TCL2 PROC Rejected_61384898_14c4_4401_9c9b_f2c580c35f7d0_prepareRaster {subsetStartRow subsetNumRows subsetStartCol subsetNumCols} {集useDI [字符串等于-nocase {$(FME_VIEWER_APP)} {fmedatainspector}];如果{$ useDI!} {FME_Execute ApplyRasterRotation双线性;};集doResample [字符串等于{NoReduction} {重新取样}];集doSubset [字符串等于{NoReduction} {子集}];集doBounds [字符串等于{NoReduction} {BoundingBoxOnly}];如果{$ doBounds} {FME_Execute GeometryType fme_polygon;} {ELSEIF $ doResample || $doSubset} { set comment { First, we need to prefix all the attributes.这样做是因为我们要调用@RasterProperties,我们要确保它不会覆盖所有现有属性。};设置kAttrPrefix “”;集allNames [FME_AttributeNames];的foreach使用oldName $ {allNames设置了newName $ kAttrPrefix;追加了newName $使用oldName;FME_RenameAttribute $ $了newName使用oldName;};FME_Execute RasterProperties光栅;如果{$ doResample} {集oldNumCols [FME_GetAttribute _num_columns];集oldNumRows [FME_GetAttribute _num_rows];集oldSpacingX [FME_GetAttribute _spacing_x];集oldSpacingY [FME_GetAttribute _spacing_y];集kMinNumCells 32;集kMaxNumCells 512;集评论{我们只会重新取样若有两个尺寸比最低NUM细胞更大,并且至少有一个是大于最大值。};如果{$ oldNumRows> $ kMinNumCells && $ oldNumCols> $ kMinNumCells &&($ oldNumRows> $ kMaxNumCells || $ oldNumCols> $ kMaxNumCells)} {设定newSpacingX 1.0;集newSpacingY 1.0;如果{$ oldNumRows> $ oldNumCols} {集评论{如果我们有比列更多的行,我们需要选择减少的行数,以我们所选择的最大间距。};集newSpacingY [EXPR 1.0 * $ oldNumRows * $ oldSpacingY / $ kMaxNumCells];集newSpacingX [EXPR 1.0 * $ newSpacingY / $ oldSpacingY * $ oldSpacingX];集评论{现在,我们需要检查,如果这样做将导致持续低于最低列。如果是这样,选择的间隔,使得我们只深入到最低(而不是过去)。};集newNumCols [EXPR $ oldNumCols * $ oldSpacingX / $ newSpacingX];如果{$ newNumCols <$ kMinNumCells} {设定newSpacingX [EXPR 1.0 * $ oldNumCols * $ oldSpacingX / $ kMinNumCells];集newSpacingY [EXPR 1.0 * $ newSpacingX / $ oldSpacingX * $ oldSpacingY];};}否则{集评论{这是与上述相同的情况下,除了行列数的作用是相反的。};集newSpacingX [EXPR 1.0 * $ oldNumCols * $ oldSpacingX / $ kMaxNumCells];集newSpacingY [EXPR 1.0 * $ newSpacingX / $ oldSpacingX * $ oldSpacingY];set newNumRows [expr $oldNumRows * $oldSpacingY / $newSpacingY];if {$newNumRows < $kMinNumCells} { set newSpacingY [expr 1.0 * $oldNumRows * $oldSpacingY / $kMinNumCells];集newSpacingX [EXPR 1.0 * $ newSpacingY / $ oldSpacingY * $ oldSpacingX];};};FME_Execute ResampleRaster CELL_SIZE $newSpacingX $newSpacingY NearestNeighbor;};} {ELSEIF $ doSubset} {集评论{获取一些字符串,可能是属性或常量的值。请注意,我们通过在属性前缀我们使用,因为如果一个人变成是一个属性,它实际上不会字符串中的确切名称(因为我们改名上述所有的属性)。};集rasterNumRows [FME_GetAttribute _num_rows];集rasterNumCols [FME_GetAttribute _num_columns];集评论{只有做到子集划分,如果指定起始位置实际上是光栅内。};如果{$ subsetStartRow <$ rasterNumRows && $ subsetStartCol <$ rasterNumCols} {集评论{现在绑定的子集光栅的大小,因此我们不创建填充。};如果{[EXPR $ subsetStartRow + $ subsetNumRows]> $ rasterNumRows} {集subsetNumRows [EXPR $ rasterNumRows - $ subsetStartRow];};如果{[EXPR $ subsetStartCol + $ subsetNumCols]> $ rasterNumCols} {集subsetNumCols [EXPR $ rasterNumCols - $ subsetStartCol];};FME_Execute SubsetRaster $ subsetStartRow $ subsetNumRows $ subsetStartCol $ subsetNumCols;};};集评论{由@RasterProperties删除所有添加的属性和真实属性,去掉前缀。我们假设他们都开始用下划线。};FME_Execute RemoveAttributes fme_regexp_match {^ _};的foreach使用oldName $ {allNames设置了newName $ kAttrPrefix;追加了newName $使用oldName;FME_RenameAttribute $使用oldName $了newName;};};} FACTORY_DEF * TeeFactory FACTORY_NAME Rejected_RasterSetterUpper INPUT FEATURE_TYPE Rejected___RasterFeatures___ OUTPUT FEATURE_TYPE __viewme__ @Tcl2("Rejected_61384898_14c4_4401_9c9b_f2c580c35f7d0_prepareRaster { } { } { } { }") # Now route all the features into the recorder, changing their # feature type to the transformer name so that they view nicely # Rejected_61384898_14c4_4401_9c9b_f2c580c35f7d0_VIS_FEAT_TYPE changes the feature types # of the features being visualized. DEFAULT_MACRO Rejected_61384898_14c4_4401_9c9b_f2c580c35f7d0_VIS_FEAT_TYPE Rejected$(CATMAC) DEFAULT_MACRO VISUALIZER_FEATURE_FILE $(WORKSPACE_TEMP_DIR)/$(SAFE_FFS_NAME).ffs DEFAULT_MACRO VISUALIZER_CREATE_SPATIAL_INDEX NO # [PR#45549] The Data Inspector will limit the maximum number of features # it reads on WIN32, so we will correspondingly limit the number of # features we record here using the MAX_FEATURES_TO_RECORD directive. FACTORY_DEF * RecorderFactory FACTORY_NAME Rejected_Recorder INPUT FEATURE_TYPE __viewme__ _wb_termination_feature Yes @FeatureType(TERMINATOR_@Value(_wb_termination_xformer)) INPUT FEATURE_TYPE __viewme__ @FeatureType($(Rejected_61384898_14c4_4401_9c9b_f2c580c35f7d0_VIS_FEAT_TYPE)) FEATURE_FILE "$(VISUALIZER_FEATURE_FILE)" CREATE_SPATIAL_INDEX "$(VISUALIZER_CREATE_SPATIAL_INDEX)" INSPECTOR "$(VISUALIZER_CREATE_SPATIAL_INDEX)" FSC_SCHEMA _error,varchar 255 模式录制STORE_SCANNED_METADATA RECORD_DIRECTLY_TO_DISK是MAX_FEATURES_TO_RECORD WIN32 2000000#------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME AttributeExposer INPUT FEATURE_TYPE ListKeyValuePairExtractor_Output OUTPUT FEATURE_TYPE AttributeExposer_OUTPUT # ------------------------------------------------------------------------- # Assumption is that the workspace temp dir has been already set and created.See controldefs.cpp - ControlDefs::writeVisualizerTempDir DEFAULT_MACRO WORKSPACE_TEMP_DIR INCLUDE [ set grpByAttrs {};if { [string length $grpByAttrs] > 0 } { if { [string first "@EvaluateExpression" $grpByAttrs] == 0 } { puts "MACRO CATMAC _$grpByAttrs" ;} else { set catter "" ;set comma "" ;的foreach ATTR $ {grpByAttrs一套catter “$ catter $ @逗号值(\” $ ATTR \ “)”;集逗号 “_”;};看跌期权 “MACRO CATMAC _ @:连接($ catter)”;}}其他{放 “MACRO CATMAC”;};set safeName "[regsub -all {[^a-zA-Z0-9]} {Output} _]_[expr round(rand() * 1000000)]_[clock clicks -milliseconds]";看跌期权 “MACRO 亚搏在线SAFE_FFS_NAME $ safeName”;]#做的临时目录的FFS文件将居住。FACTORY_DEF * CreationFactory FACTORY_NAME Output_DirCreator OUTPUT FEATURE_TYPE __nukeme__ @Tcl2("catch {file mkdir {$(WORKSPACE_TEMP_DIR)}}") FACTORY_DEF * TeeFactory FACTORY_NAME 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 Output_FeatureDirector INPUT FEATURE_TYPE AttributeExposer_OUTPUT TEST &fme_type == "fme_raster" OUTPUT FAILED FEATURE_TYPE Output___NotRasterFeatures___ OUTPUT PASSED FEATURE_TYPE Output___RasterFeatures___ FACTORY_DEF * TestFactory FACTORY_NAME Output___FeatureDirector1 INPUT FEATURE_TYPE Output___NotRasterFeatures___ TEST &fme_type == "fme_point_cloud" OUTPUT FAILED FEATURE_TYPE Output___VectorFeatures___ OUTPUT PASSED FEATURE_TYPE Output___PointCloudFeatures___ # Vector features simply may get their colors overridden FACTORY_DEF * TeeFactory FACTORY_NAME Output_VectorSetterUpper INPUT FEATURE_TYPE 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.这应该允许这种变压器具有#桌面授权使用,即使ThinPointCloud需要专业。Tcl2 proc Output_ba5a684b_6d5f_4594_8a52_38b6fa691ade2_thinPointCloud {} { if {[string equal {NO_THINNING} {KEEPNPOINT}]} { FME_Execute ThinPointCloud NO_THINNING "\" \ “”;} elseif的{[串等于{NO_THINNING} {MAXNUMPOINTS}]} {FME_Execute ThinPointCloud NO_THINNING “\” \ “”;} elseif的{[串等于{NO_THINNING} {FIRSTNPOINTS}]} {FME_Execute ThinPointCloud NO_THINNING “\” \ “”;} elseif的{[串等于{NO_THINNING} {LASTNPOINTS}]} {FME_Execute ThinPointCloud NO_THINNING “\” \ “”;};} FACTORY_DEF * TeeFactory FACTORY_NAME Output___PointCloudThinner INPUT FEATURE_TYPE Output___PointCloudFeatures___ OUTPUT FEATURE_TYPE __viewme__ @Tcl2("Output_ba5a684b_6d5f_4594_8a52_38b6fa691ade2_thinPointCloud") Tcl2 proc Output_ba5a684b_6d5f_4594_8a52_38b6fa691ade2_prepareRaster {subsetStartRow subsetNumRows subsetStartCol subsetNumCols} { set useDI [string equal -nocase {$(FME_VIEWER_APP)} {fmedatainspector}];如果{$ useDI!} {FME_Execute ApplyRasterRotation双线性;};集doResample [字符串等于{NoReduction} {重新取样}];集doSubset [字符串等于{NoReduction} {子集}];集doBounds [字符串等于{NoReduction} {BoundingBoxOnly}];如果{$ doBounds} {FME_Execute GeometryType fme_polygon;} {ELSEIF $ doResample || $doSubset} { set comment { First, we need to prefix all the attributes.这样做是因为我们要调用@RasterProperties,我们要确保它不会覆盖所有现有属性。};设置kAttrPrefix “”;集allNames [FME_AttributeNames];的foreach使用oldName $ {allNames设置了newName $ kAttrPrefix;追加了newName $使用oldName;FME_RenameAttribute $ $了newName使用oldName;};FME_Execute RasterProperties光栅;如果{$ doResample} {集oldNumCols [FME_GetAttribute _num_columns];集oldNumRows [FME_GetAttribute _num_rows];集oldSpacingX [FME_GetAttribute _spacing_x];集oldSpacingY [FME_GetAttribute _spacing_y];集kMinNumCells 32;集kMaxNumCells 512;集评论{我们只会重新取样若有两个尺寸比最低NUM细胞更大,并且至少有一个是大于最大值。};如果{$ oldNumRows> $ kMinNumCells && $ oldNumCols> $ kMinNumCells &&($ oldNumRows> $ kMaxNumCells || $ oldNumCols> $ kMaxNumCells)} {设定newSpacingX 1.0;集newSpacingY 1.0;如果{$ oldNumRows> $ oldNumCols} {集评论{如果我们有比列更多的行,我们需要选择减少的行数,以我们所选择的最大间距。};集newSpacingY [EXPR 1.0 * $ oldNumRows * $ oldSpacingY / $ kMaxNumCells];集newSpacingX [EXPR 1.0 * $ newSpacingY / $ oldSpacingY * $ oldSpacingX];集评论{现在,我们需要检查,如果这样做将导致持续低于最低列。如果是这样,选择的间隔,使得我们只深入到最低(而不是过去)。};集newNumCols [EXPR $ oldNumCols * $ oldSpacingX / $ newSpacingX];如果{$ newNumCols <$ kMinNumCells} {设定newSpacingX [EXPR 1.0 * $ oldNumCols * $ oldSpacingX / $ kMinNumCells];集newSpacingY [EXPR 1.0 * $ newSpacingX / $ oldSpacingX * $ oldSpacingY];};}否则{集评论{这是与上述相同的情况下,除了行列数的作用是相反的。};集newSpacingX [EXPR 1.0 * $ oldNumCols * $ oldSpacingX / $ kMaxNumCells];集newSpacingY [EXPR 1.0 * $ newSpacingX / $ oldSpacingX * $ oldSpacingY];set newNumRows [expr $oldNumRows * $oldSpacingY / $newSpacingY];if {$newNumRows < $kMinNumCells} { set newSpacingY [expr 1.0 * $oldNumRows * $oldSpacingY / $kMinNumCells];集newSpacingX [EXPR 1.0 * $ newSpacingY / $ oldSpacingY * $ oldSpacingX];};};FME_Execute ResampleRaster CELL_SIZE $newSpacingX $newSpacingY NearestNeighbor;};} {ELSEIF $ doSubset} {集评论{获取一些字符串,可能是属性或常量的值。请注意,我们通过在属性前缀我们使用,因为如果一个人变成是一个属性,它实际上不会字符串中的确切名称(因为我们改名上述所有的属性)。};集rasterNumRows [FME_GetAttribute _num_rows];集rasterNumCols [FME_GetAttribute _num_columns];集评论{只有做到子集划分,如果指定起始位置实际上是光栅内。};如果{$ subsetStartRow <$ rasterNumRows && $ subsetStartCol <$ rasterNumCols} {集评论{现在绑定的子集光栅的大小,因此我们不创建填充。};如果{[EXPR $ subsetStartRow + $ subsetNumRows]> $ rasterNumRows} {集subsetNumRows [EXPR $ rasterNumRows - $ subsetStartRow];};如果{[EXPR $ subsetStartCol + $ subsetNumCols]> $ rasterNumCols} {集subsetNumCols [EXPR $ rasterNumCols - $ subsetStartCol];};FME_Execute SubsetRaster $ subsetStartRow $ subsetNumRows $ subsetStartCol $ subsetNumCols;};};集评论{由@RasterProperties删除所有添加的属性和真实属性,去掉前缀。我们假设他们都开始用下划线。};FME_Execute RemoveAttributes fme_regexp_match {^ _};的foreach使用oldName $ {allNames设置了newName $ kAttrPrefix;追加了newName $使用oldName;FME_RenameAttribute $使用oldName $了newName;};};} FACTORY_DEF * TeeFactory FACTORY_NAME Output_RasterSetterUpper INPUT FEATURE_TYPE Output___RasterFeatures___ OUTPUT FEATURE_TYPE __viewme__ @ TCL2(“Output_ba5a684b_6d5f_4594_8a52_38b6fa691ade2_prepareRaster { } { } { } { }“)#现在将所有功能集成在录像机,改变他们#功能类型变压器的名字,让他们查看很好#Output_ba5a684b_6d5f_4594_8a52_38b6fa691ade2_VIS_FEAT_TYPE改变所显现的特征要素类型#。DEFAULT_MACRO Output_ba5a684b_6d5f_4594_8a52_38b6fa691ade2_VIS_FEAT_TYPE输出$(CATMAC)DEFAULT_MACRO VISUALIZER_FEATURE_FILE $(WORKSPACE_TEMP_DIR)/ $亚搏在线(SAFE_FFS_NAME).ffs DEFAULT_MACRO VISUALIZER_CREATE_SPATIAL_INDEX NO#[PR#45549]数据Inspector将限制#它读取WIN32,所以我们会相应地限制#数量特征,我们在这里记录使用的特征的最大数量 MAX_FEATURES_TO_RECORD directive. FACTORY_DEF * RecorderFactory FACTORY_NAME Output_Recorder INPUT FEATURE_TYPE __viewme__ _wb_termination_feature Yes @FeatureType(TERMINATOR_@Value(_wb_termination_xformer)) INPUT FEATURE_TYPE __viewme__ @FeatureType($(Output_ba5a684b_6d5f_4594_8a52_38b6fa691ade2_VIS_FEAT_TYPE)) FEATURE_FILE "$(VISUALIZER_FEATURE_FILE)" CREATE_SPATIAL_INDEX "$(VISUALIZER_CREATE_SPATIAL_INDEX)" INSPECTOR "$(VISUALIZER_CREATE_SPATIAL_INDEX)" FSC_SCHEMA DatatakeId,varchar 255 ,模式,VARCHAR 255 ,ObservationDuration,VARCHAR 255 ,ObservationTimeStart,VARCHAR 255 ,ObservationTimeStop,VARCHAR 255 ,OrbitAbsolute,VARCHAR 255 ,OrbitRelative,VARCHAR 255 ,极化,VARCHAR 255 ,SatelliteId,VARCHAR 255 ,在行幅,VARCHAR 255 模式录制STORE_SCANNED_METADATA RECORD_DIRECTLY_TO_DISK是MAX_FEATURES_TO_RECORD WIN32 2000000#------------------------------------------------------------------------- FACTORY_DEF * RoutingFactory FACTORY_NAME "Destination Feature Type Routing Correlator" COMMAND_PARM_EVALUATION SINGLE_PASS INPUT FEATURE_TYPE * FEATURE_TYPE_ATTRIBUTE __wb_out_feat_type__ OUTPUT ROUTED FEATURE_TYPE * OUTPUT 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 "Final Output Nuker" INPUT FEATURE_TYPE __nuke_me__ # ------------------------------------------------------------------------- FACTORY_DEF * CreationFactory CREATE_AT_END OUTPUT FEATURE_TYPE __NUKEME__ @TCL("if [file exists {$(WORKSPACE_TEMP_DIR)}] {set files [glob -nocomplain -directory {$(WORKSPACE_TEMP_DIR)} -tails *.ffs]; if {[llength $files] == 1} { set theFile {$(WORKSPACE_TEMP_DIR)/}; append theFile [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; } elseif { [llength $files] == 0 } { catch { file delete -force {$(WORKSPACE_TEMP_DIR)} }; } else { set filesNoExt {}; set 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__