#!#! #! #!#! #!#! #!#! #!#! #!#! #!#! #!#! #!#! #!#! #! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#! #!#! #!#! #!#! #!#!FME_PYTHON_版本27#!开始ɻ标题ɻ!启动WB_HEADER READER_TYPE MULTI_READER WRITER_TYPE NULL WRITER_KEYWORD NULL_DEST NULL_DEST_DATASET NULL#!结束_WB_HEADER#!开始_WB_HEADER#!结束_WB_HEADER#!结束头日志文件名“$(FME_MF_DIR)1_发送日志“LOG_APPEND NO LOG_FILTER_MASK-1 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——多读卡器继续打开读卡器失败否-宏工作区名1发送宏FME查看器默认宏WB当前上下文FME_CoordSys;设置FME_CoordSys{};}宏创建者XML未激活宏创建者CLASSIC未激活宏创建者2D3D 2D几何宏创建者COORDS 0 0 100 100 INCLUDE[如果{2D Min/Max Box}={GEOMETRY Object}{puts{MACRO Creator XML*}]INCLUDE[如果{2D Min/Max Box}={2D Coordinate List}{puts{MACRO Creator 2D3D 2D几何体};puts{MACRO Creator经典*}}]INCLUDE[如果{2D Min/Max Box}={3D坐标列表}}{puts{MACRO Creator{2D3D 3D_GEOMETRY};puts{MACRO Creator{u CLASSIC*}]INCLUDE[如果{2D Min/Max Box}={2D Min/Max Box}{设置注释{我们需要将minX minY maxX的坐标转换成一个完整的多边形坐标列表};设置split COORDS[分割[字符串修剪{00 100 100}]];如果{[llength$splitCoords]>4}{设置trimmedCoords{};对于每个项$splitCoords{如果{$item!={}{lappend trimmedCoords$item};设置splitCoords$trimmedCoords;};如果{[llength$splitCoords]!=4}{错误{创建者:坐标列表应该是一个用空格分隔的四个数字的列表,因为“minx miny maxx maxy”—“0 0 100 100”无效};};设置minx[lindex$splitCoords 0];设置miny[lindex$splitCoords 1];设置maxx[lindex$splitCoords 2];设置maxy[lindex$splitCoords 3];将“宏创建者坐标$minX$minX$minX$maxY$maxX$maxY$maxX$minX$minX$minY”;将{MACRO Creator二维几何体};将{MACRO Creator经典*}]FACTORY DEF$(Creator XML)CreationFactory工厂名称Creator XML Creator CREATE放置在{END no OUTPUT FEATURE TYPE}创建的{, )FACTORY_DEF $(Creator_CLASSIC)CreationFactory FACTORY_NAME Creator_CLASSIC_Creator $(Creator_2D3D)$(Creator_COORDS)CREATE_AT_END无输出FEATURE_TYPE _____CREATED______ FACTORY_DEF * TeeFactory FACTORY_NAME Creator_Cloner INPUT FEATURE_TYPE _____CREATED______ @ TCL2(Creator_CoordSysRemover)@CoordSys()NUMBER_OF_COPIES 1 COPY_NUMBER_ATTRIBUTE “_creation_instance” 输出FEATURE_TYPE Creator_CREATED fme_feature_type造物主FACTORY_DEF * BranchingFactory FACTORY_NAME “Creator_CREATED分支器-1 4” INPUT FEATURE_TYPE Creator_CREATED TARGET_FACTORY “$(WB_CURRENT_CONTEXT)_CREATOR_BRANCH_TARGET” MAXIMUM_COUNT无的Passed FEATURE_TYPE *#------------------------------------------------------------------------ FACTORY_DEF * TeeFactory FACTORY_NAME “$(WB_CURRENT_CONTEXT)_CREATOR_BRANCH_TARGET” INPUT FEATURE_TYPE * OUTPUT FEATURE_TYPE *#-------------------------------------------------------------------------#首先确定哪些功能我们将使用 - 我们可以做这#静态在分析时为了效率起见MACRO GeometryExtractor_Function INCLUDE [如果{{WKT} == {fmebinary}} {{放MACRO GeometryExtractor_Function @Geometry(TO_ATTRIBUTE_BINARY, “_几何”)}} elseif的{{WKT} == {fmehex}} {{放MACRO GeometryExtractor_Function @Geometry(TO_ATTRIBUTE_BINARY_HEX, “_几何”)}} elseif的{{WKT} == {fmexml}} {{放MACRO GeometryExtractor_Function @Geometry(TO_ATTRIBUTE, “_几何”)}} elseif的{{WKT}== {折线}} {{放MACRO GeometryExtractor_Function @Geometry(TO_ATTRIBUTE_POLYLINE, “_几何”, )}} elseif的{{WKT} == {WKT}} {{放MACRO GeometryExtractor_Function @OGCGeometry(to_attribute,WKT, “_几何”,1.2,FLOAT_64)}} elseif的{{WKT} == {} WKB ||{WKT} == {wkbhex}} {{放MACRO GeometryExtractor_Function @OGCGeometry(to_attribute,WKT, “_几何”,1.2)}} elseif的{{WKT} == {}以GeoJSON ||{WKT} == {ESRIJSON}} {{放MACRO GeometryExtractor_Function @JSONGeometry(TO_ATTRIBUTE,WKT, “_几何”, )}elseif{{wkt}={KML}{将{MACRO GeometryExtractor\u函数@KML geometry(TO\u属性,“\u几何”, )}elseif{{wkt}={GEORSS_SIMPLE}{将{MACRO GeometryExtractor_Function@GEORSS geometry(TO_ATTRIBUTE,wkt,“\u geometry”, )}elseif{{wkt}=={GML_2.1.2}{{{wkt}=={GML_3.1.1}{wkt}={GML_3.2.1}}{puts{MACRO GeometryExtractor@GML geometry(TO_ATTRIBUTE,wkt,“\u geometry”, ,NO)}} elseif的{{WKT} == {地理散列}} {{放MACRO GeometryExtractor_Function @GeoHash(TO_ATTRIBUTE, “_几何”, )}elseif{{wkt}={ogeosms}{将{MACRO GeometryExtractor\u函数@OGCGeometry(to\u attribute,wkt,“\u geometry”, )}} elseif的{{WKT} == {} geosms ||{WKT} == {地理}} {{放MACRO GeometryExtractor_Function @OGCGeometry(to_attribute,WKT, “_几何”)}} elseif的{{WKT} == {MGRS}} {{放MACRO GeometryExtractor_Function @SupplyAttributes(_geometry,@MGRS(TO_MGRS, “)}elseif{{wkt}={mssql}{puts{MACRO GeometryExtractor@SerializeGeometry(to_attribute,wkt,”“u geometry,” “}}elseif{{wkt}={iso6709}{将{MACRO GeometryExtractor@GeographicPoint函数放入{geographic属性,”“geometry” “” “)}} elseif的{{WKT} == {qlikmaps}} {{放MACRO GeometryExtractor_Function @Geometry(TO_ATTRIBUTE_QLIKMAPS_POLYLINE,” _几何”, )}}]#下一步确定是否应该删除几何体,并在解析时执行此操作一次#默认情况下,宏没有任何内容,这意味着我们不删除。如果我们想移除,然后,我们将设置宏以执行此操作宏GeometryExtractor GeometryRemoveFunction INCLUDE[如果{No}={Yes}{puts{macro GeometryExtractor GeometryRemoveFunction@RemoveGeometry()}]FACTORY\u DEF*TeeFactory FACTORY\u NAME GeometryExtractor INPUT FEATURE\u TYPE Creator创建的输出FEATURE\u TYPE\uUuUuUuUuUuUuUuUuUuUuUuUuUuUuUu@RenameAttributes(FME\u STRICT,___fme_拒绝代码,fme_拒绝代码)$(GeometryExtractor_函数)$(GeometryExtractor_GeometryRemoveFunction)FACTORY_DEF*TestFactory_NAME GeometryExtractor_Rejector INPUT FEATURE_TYPE_uuutorejector_uuuuuutest@Value(fme_拒绝代码)!“”输出传递的特征类型GeometryExtractor_ @RemoveAttributes(___ fme_rejection_code___)OUTPUT失败FEATURE_TYPE GeometryExtractor_OUTPUT @RenameAttributes(FME_STRICT,fme_rejection_code,___ fme_rejection_code___)DEFAULT_MACRO _WB_BYPASS_TERMINATION没有FACTORY_DEF * TeeFactory FACTORY_NAME GeometryExtractor_ 输入特征型GeometryExtractor_ 输出失败FEATURE_TYPE * @Abort(编码GeometryExtractor 输出 一个 拒绝 特色。 继续 翻译 什么时候 特征 拒绝 更改 工作区 参数 翻译 拒绝 特色 处理 继续 翻译 )#-------------------------------------------------------------------------#------------------------------------------------------------------------------#确定“NULL”设备,所以我们可以保证,我们没有得到杂散输出#搞乱我们的标准输出,如果我们在后台运行#工作区见http://wiki.tcl.tk/1649了在tcl_platform#变量的说明中, “平台” 的一部分似乎已经有效值在Windows,Unix,和Macintosh的#(后者是实际的前OS X)TCL2如果{$ tcl_platform(平台)== {窗}}{设定:: null_device {NUL:};组:: __ WR_ENV_HELPER__ {};}其他{集:: null_device {的/ dev / null的};组:: __ WR_ENV_HELPER__ {的/ usr / bin中/ env的FME_SUBPROCESS_RUN_DETACHED = 1};};#------------------------------------------------------------------------------#逃生现有双引号,然后在双引号包裹TCL2 PROC quotifyForParameterFileV3 {sourceString} {如果{[字符串长度$ sourceString] == 0} {返回{\ “\”}; }; set doQuote 0; if {[string first { } $sourceString] != -1} { set doQuote 1; }; set sourceString [string map {{\"} {\\"}} $sourceString]; if {$doQuote == 1} { set sourceString \\"$sourceString\\"; }; return $sourceString; }; # ------------------------------------------------------------------------------ # Main runner procedure, takes in a parameter list as string which is delimited # by \x07 (BELL) character and the workspace to run Tcl2 proc WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_runner { parmListString workspaceFile } { global WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_commands; global WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_batch_count; incr WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_batch_count 0; if { [info exists WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_commands] == 0 } { set WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_commands {}; }; set workspaceFileUnix [regsub -all {\\} $workspaceFile {/}]; set parmListString [string range $parmListString 1 end-1]; set comment { Build up the command line in a list, which we'll write it out to a parameter file. }; set commandArguments {}; set commandArgumentsToLog {}; set workspaceToRun [quotifyForParameterFileV3 $workspaceFileUnix]; lappend commandArguments $workspaceToRun; lappend commandArgumentsToLog $workspaceToRun; set parameterList [split $parmListString \x07]; set parmTypes [split {TEXT,FILENAME,CHOICE} {,}]; foreach {parmName parmValue} $parameterList {parmType} $parmTypes { set parmValue [quotifyForParameterFileV3 $parmValue]; lappend commandArguments --$parmName; lappend commandArgumentsToLog --$parmName; lappend commandArguments $parmValue; if { [string first {PASSWORD} $parmType] != -1 } { lappend commandArgumentsToLog {*********}; } else { lappend commandArgumentsToLog $parmValue; }; }; lappend WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_commands [join $commandArguments " "]; incr WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_batch_count; if { {No} == {No} && {1} > 1 && $WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_batch_count <= {1} } { FME_LogMessage fme_inform 933450 WorkspaceRunner $commandArgumentsToLog; } else { FME_LogMessage fme_inform 933451 WorkspaceRunner $commandArgumentsToLog; }; if { {No} != {No} || $WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_batch_count == {1} } { set WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_batch_count 0; set commandFile [WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_writeCommandFile $WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_commands]; if { $commandFile == {} } { return FAILURE; }; set WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_commands {}; lappend cmdArgs {*}$::__WR_ENV_HELPER__ {$(FME_HOME_UNIX)/fme} COMMAND_FILE $commandFile; } else { return SUCCESS; }; return [WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_runCommand $cmdArgs $workspaceFileUnix]; } # ------------------------------------------------------------------------------ # When batching commands, any overflow commands will be run at the end. Say you # batch by 2 and there are 5 incoming features. Then we will have 2 batches with # 2 commands each and 1 overflow batch with 1 command Tcl2 proc WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_flushPending { } { global WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_commands; if { [info exists WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_commands] == 1 && [llength $WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_commands] > 0 } { set workspaceToRun [lindex $WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_commands 0]; set commandFile [WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_writeCommandFile $WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_commands]; if { $commandFile == {} } { return FAILURE; }; set WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_commands {}; lappend commandArguments {*}$::__WR_ENV_HELPER__ {$(FME_HOME_UNIX)/fme} COMMAND_FILE $commandFile; return [WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_runCommand $commandArguments $workspaceToRun]; }; return SUCCESS; } # ------------------------------------------------------------------------------ # Build and run the command Tcl2 proc WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_runCommand {commandArguments workspaceFileUnix} { if { {No} == {No} } { lappend commandArguments \">$::null_device\"; lappend commandArguments \"<$::null_device\"; }; set comment { The below 2>@1 forces any standard error output to go into the msg variable or to NULL if we're running in the background. }; lappend commandArguments {2>@1}; if { {No} == {No} } { lappend commandArguments {&}; }; if { {No} == {No} } { after 1000; while { [FME_CanSpawnFme ] == {0} } { after 2000; }; }; if { No == {No} && {1} > 1 } { FME_LogMessage fme_inform 933452 WorkspaceRunner $commandArguments; } else { FME_LogMessage fme_inform 933453 WorkspaceRunner $commandArguments; }; if {[catch {eval [concat exec $commandArguments] } msg ]} { set msg [regsub {\015*\012child[^\012]*$} $msg {}]; FME_LogMessage fme_warn 933454 WorkspaceRunner $workspaceFileUnix "\n\n$msg\n"; FME_SetAttribute _failure_message $msg; return FAILURE; } else { global WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_process_count; incr WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_process_count; if { {No} == {No} } { FME_LogMessage fme_inform 933455 WorkspaceRunner $workspaceFileUnix; global WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_all_processes; lappend WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_all_processes $msg; } else { FME_LogMessage fme_inform 933456 WorkspaceRunner $workspaceFileUnix; }; return SUCCESS; }; } # ------------------------------------------------------------------------------ # Create and write commands to command file Tcl2 proc WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_writeCommandFile { commands } { set commandFile [FME_TempFilename wsr_cm_]; if { [catch { set cmdFileId [open $commandFile "w"] } msg ] } { FME_LogMessage fme_warn 933457 WorkspaceRunner $commandFile "\n\n$msg\n"; FME_SetAttribute _failure_message $msg; return {}; }; fconfigure $cmdFileId -encoding utf-8; puts $cmdFileId {#! encoding=\"utf-8\"}; puts $cmdFileId DELETE_FILE_AFTER_LOAD; foreach {command} $commands { puts $cmdFileId $command; }; close $cmdFileId; return $commandFile; } # ------------------------------------------------------------------------------ # Use \x07 (BELL) character as the delimiter when writing WORKSPACE_PARAMETERS # to mapping file FACTORY_DEF * TestFactory FACTORY_NAME WorkspaceRunner_ExecutorAndRouter INPUT FEATURE_TYPE GeometryExtractor_OUTPUT TEST @Tcl2("WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_runner {(GEOMETRY@EvaluateExpression(FDIV,STRING, _几何 ,工作区Runner)DestDataset_FFS@EvaluateExpression(FDIV,STRING,$(FME_MF_DIR_USERTYPED$encode)result.ffs,WorkspaceRunner)KIND_LONGOGC Well Known Text)} {@EvaluateExpression(FDIV,STRING,$(FME_MF_DIR$encode)2_receive.fmw,WorkspaceRunner)}") == SUCCESS OUTPUT PASSED FEATURE_TYPE WorkspaceRunner_SUCCEEDED OUTPUT FAILED FEATURE_TYPE WorkspaceRunner_FAILED Tcl2 proc WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_summarizer { } { global WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_process_count; set comment { incr 0 creates the variable if it wasn't present }; incr WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_process_count 0; FME_SetAttribute _proc_count [set WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_process_count]; global WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_all_processes; if {[info exists WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_all_processes]} { set index 0; foreach pid [set WorkspaceRunner_3f4ef0df_02d3_4106_a63f_691b3e099d404_all_processes] { FME_SetAttribute \"_processes{$index}\" $pid; incr index; } } } FACTORY_DEF * CreationFactory FACTORY_NAME WorkspaceRunner_SummaryMaker CREATE_AT_END yes # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME WorkspaceRunner_Failed_Logger INPUT FEATURE_TYPE WorkspaceRunner_FAILED OUTPUT FEATURE_TYPE WorkspaceRunner_Failed_LOGGED @Log(ENCODED, "WorkspaceRunner_Failed: 特征是:”, “20”, “20”, “”,INFO,LOG_ONLY,WorkspaceRunner_Failed_1a5bc19d_819e_464b_881a_9244a14057dc4)FACTORY_DEF * TeeFactory FACTORY_NAME “WorkspaceRunner_Failed LOGGED变压器输出Nuker” INPUT FEATURE_TYPE WorkspaceRunner_Failed_LOGGED#------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME WorkspaceRunner_Succeeded_Logger INPUT FEATURE_TYPE WorkspaceRunner_SUCCEEDED输出FEATURE_TYPE WorkspaceRunner_Succeeded_LOGGED @Log(编码,“WorkspaceRunner_Succeeded: 特征是:”, “20”, “20”, “”,INFO,LOG_ONLY,WorkspaceRunner_Succeeded_8272566c_2276_461f_bd28_8edf7c3c12064)FACTORY_DEF * TeeFactory FACTORY_NAME “WorkspaceRunner_Succeeded LOGGED变压器输出Nuker” INPUT FEATURE_TYPE WorkspaceRunner_Succeeded_LOGGED#------------------------------------------------------------------------- FACTORY_DEF * RoutingFactory FACTORY_NAME “目标要素类型路由相关器” COMMAND_PARM_EVALUATION SINGLE_PASS INPUT FEATURE_TYPE * FEATURE_TYPE_ATTRIBUTE __wb_out_feat_type__输出连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 “最终输出Nuker” INPUT FEATURE_TYPE __nuke_me__