# !# ! # ! # ! # !# !# !# !# !# !# !# !# !# !# ! # !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# ! # !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# ! # ! # !# !# ! # !# ! # !# !# ! # !# ! # !# ! # !# ! # ! # !# !# !# !# !# !# !# !# !# !# !# ! # !# !# !# !# !# !# !# !# !# ! # !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# ! # !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# ! # !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# ! # !# !# !# !# !# !# !# !# !# !# ! # !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# ! # !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# !# ! # !# !# !# !# !# !# !# !# !# ! # !# ! # !# ! # !# ! # !# !FME_PYTHON_VERSION 27 GUI IGNORE 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 C:\用户\ jhobbins \下载\ 8589雪崩路径-botreatment-MAP-008-W-plots.kml GUI FILE_OR_URL SourceDataset_OGCKML KML_文件(*。KML; * KMZ)| * .KML; * KMZ | All_Files(*)| *资料来源谷歌KML文件或URL:包括[如果{{$(SourceDataset_OGCKML)} == {}} {{puts_real参数“SourceDataset_OGCKML”必须被给出的值}。退出1;};]#!start_header#!START_WB_HEADER READER_TYPE OGCKML READER_KEYWORD OGCKML_1 READER_GEN_DIRECTIVES OGCKML_EXPOSE_FORMAT_ATTRS ,, KML21_RASTER_READ_MODE,地面叠加层,KML21_SCAN_SCHEMA,是的,SEARCH_ENVELOPE_MINY,0,KML21_FAIL_ON_NETWORK_ERROR,不,KML21_DATASET_ENCODING ,, KML21_APPLY_MODEL_TRANSFORMS,不,USE_SEARCH_ENVELOPE,NO,KML21_DELETE_DOWNLOADED_FILES,是的,KML21_LOG_VERBOSE,不,NETWORK_AUTHENTICATION ,, SEARCH_ENVELOPE_MAXX,0,EXPOSE_ATTRS_GROUP ,, KML21_TRAVERSE_NETWORKLINKS,所有,KML21_MAX_NETWORKLINK_TRAVERSAL_DEPTH,5,_MERGE_SCHEMAS,YES,KML21_MOVE_TO_KML_WORLD_COORDSYS,是的,CLIP_TO_ENVELOPE,NO,SEARCH_ENVELOPE_MAXY,0,SEARCH_ENVELOPE_COORDINATE_SYSTEM ,, SEARCH_ENVELOPE_MINX,0 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 # The dataset this mapping file was generated from was: #! END_SOURCE_HEADER #! START_WB_HEADER DEFAULT_MACRO SourceDataset INCLUDE [ if {{$(SourceDataset)} != ""} { \ puts {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 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. # Defualt to soft clip as per the existing database 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)kml_extendedSchema.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_TIMINGS YES 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 kml_extendedSchema 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 # ------------------------------------------------------------------------- MACRO OUTPUT_NULL_FTYPE not_selected MACRO OUTPUT_NULL_FTYPE GeometryFilter_NULL MACRO OUTPUT_INSTANCE_FTYPE not_selected Lookup GeometryFilter_RouterTable "" "not_selected" fme_no_geom $(OUTPUT_NULL_FTYPE) MACRO COLLECTION_HANDLING NOT_THIS_TIME MACRO INSTANCE_FILTERING * INCLUDE [ if 0 { puts "MACRO COLLECTION_HANDLING *"; if {将“宏instance_filtering not_this_time”放入;};};如果{{$(output_instance_ftype)} ==“not_selected”} {puts“macro instance_filtering not_this_time”;};] FACTORY_DEF * TeeFactory FACTORY_NAME GeometryFilter_InputPassThrough INPUT FEATURE_TYPE Placemark_OGCKML_1 OUTPUT FEATURE_TYPE GeometryFilter___Input___ @Geometry(FIX_FMETYPE_FMEGEOMETRY)FACTORY_DEF $(INSTANCE_FILTERING)TestFactory中FACTORY_NAME GeometryFilter_InstanceTest INPUT FEATURE_TYPE GeometryFilter___Input___ TEST @Geometry(IS_GEOMETRY_INSTANCE)== 1 OUTPUT PASSED FEATURE_TYPE $(OUTPUT_INSTANCE_FTYPE)OUTPUT FAILED FEATURE_TYPE GeometryFilter___Input___ FACTORY_DEF $(COLLECTION_HANDLING)TestFactory中FACTORY_NAME GeometryFilter_CollectionTest INPUT FEATURE_TYPE GeometryFilter___Input___ TEST&fme_type == “fme_collection” OUTPUT FAILED FEATURE_TYPE GeometryFilter___Not_Collection___ OUTPUT PASSED FEATURE_TYPE GeometryFilter___Collection___ FACTORY_DEF $(COLLECTION_HANDLING)DeaggregateFactory FACTORY_NAME GeometryFilter_Deagg INPUT FEATURE_TYPE GeometryFilter___Collection___ HOMOGENIZE_COLLECTIONS YES YES RECURSIVE YES SET_FME_TYPE INSTANTIATE_GEOMETRY_INSTANCES_NEW 输出点FEATURE_TYPE GeometryFilter___HomogeneousAggregate___ OUTPUT LINE FEATURE_TYPE GeometryFilter___HomogeneousAggregate___ OUTPUT POLYGON FEATURE_TYPE GeometryFilter___HomogeneousAggregate___ OUTPUT DONUT FEATURE_TYPE GeometryFilter___HomogeneousAggregate___ OUTPUT AGGREGATE FEATURE_TYPE GeometryFilter___HomogeneousAggregate___FACTORY_DEF * TeeFactory FACTORY_NAME GeometryFilter_RouterPrepper输入FEATURE_TYPE GeometryFilter___HomogeneousAggregate___输入FEATURE_TYPE GeometryFilter___Not_Collection___输入FEATURE_TYPE GeometryFilter___Input___输出FEATURE_TYPE GeometryFilter___Prepped___ GeometryFilter_69a454d7_45f3_483a_bde5_1b037bfa63824_targetFeatureType@Lookup(GeometryFilter_RouterTable,&fme_type) FACTORY_DEF * TestFactory FACTORY_NAME GeometryFilter_Router INPUT FEATURE_TYPE geometryfilter__prepped___ TEST @Value(GeometryFilter_69a454d7_45f3_483a_bde5_1b037bfa63824_targetFeatureType) != "not_selected" OUTPUT PASSED FEATURE_TYPE * . *@FeatureType(@Value(GeometryFilter_69a454d7_45f3_483a_bde5_1b037bfa63824_targetFeatureType)) @RemoveAttributes(GeometryFilter_69a454d7_45f3_483a_bde5_1b037bfa63824_targetFeatureType) OUTPUT FAILED FEATURE_TYPE @removeattributes(geometryfilter_69a454d7_45f3_483a_bde5_1b037bfa63824_targetfeaturetype)factory_def * teefactory factory_name“geometryfilter 输出Nuker" INPUT FEATURE_TYPE GeometryFilter_ # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME AttributeExposer输入FEATURE_TYPE GeometryFilter_NULL输出FEATURE_TYPE AttributeExposer_OUTPUT # ------------------------------------------------------------------------- FACTORY_DEF * AttrSetFactory FACTORY_NAME AttributeRenamerINPUT FEATURE_TYPE AttributeExposer_OUTPUT ATTRSET_CREATE_DIRECTIVES _PROPAGATE_MISSING_FDIV ATTR_ACTION "kml_gx_track_gx_coord" "kml_gx_track_gx_coord . 0. ”“RENAME_SET_DEFAULT”““输出输出FEATURE_TYPE AttributeRenamer_OUTPUT # ------------------------------------------------------------------------- FACTORY_DEF * ElementFactory FACTORY_NAME ListExploder输入FEATURE_TYPE AttributeRenamer_OUTPUT LIST_NAME kml_gx_track_gx_coord“{}”ELEMENT_NUMBER_FIELD CLONE_GEOMETRY“_element_index”Attr_accum_mode " handle_conflict " attr_conflict_res " incoming_if_conflict " incoming_prefix " " OUTPUT ELEMENT FEATURE_TYPE ListExploder_ELEMENTS @RemoveAttributes(ElementFactory.baseCloned) OUTPUT NOLIST FEATURE_TYPE ListExploder_ . @RemoveAttributes(ElementFactory.baseCloned) fme_rejection_code MISSING_PARAMETER_LIST DEFAULT_MACRO _WB_BYPASS_TERMINATION No FACTORY_DEF * TeeFactory FACTORY_NAME ListExploder_ INPUT FEATURE_TYPE ListExploder_ 输出失败FEATURE_TYPE * @Abort(ENCODED, ListExploder 输出 一个 拒绝了 特性。 继续 如果 特性 拒绝了 改变 工作空间 参数 拒绝了 功能 处理 继续 翻译 )#----------------------------------------------------------------------- Tcl2 set AttributeSplitter_71c1474c_df59_404a_ab85_d73aead310fa4_splitDelim [FME_DecodeText { }];if {[regexp {^([1-9] [0-9] * s)+ $} [set attributes plitter_71c1474c_df59_404a_ab85_d73aead310fa4_df59_404a_ab85_d73aead310fa4_d73aead310fa4_dsplitwths [split [regsub -all {s $} { } {}] s];proc AttributeSplitter_doSplit{}{全局AttributeSplitter_71c1474c_df59_404a_ab85_d73aead310fa4_splitWidths;set source [FME_GetAttribute [FME_DecodeText {kml_gx_track_gx_coord}];设置attrNum 0;set listName [FME_DecodeText {_list}];设置attrPos 0;设置keepEmptyParts [string = {No} {No}];foreach width [set AttributeSplitter_71c1474c_df59_404a_ab85_d73aead310fa4_splitWidths]{设置endPos [expr $attrPos + $width - 1];设置位[字符串范围$source $attrPos $endPos];设置部分[字符串修剪$bit]; if { $keepEmptyParts || $part != \"\" } { FME_SetAttribute "$listName{$attrNum}" $part; incr attrNum; }; incr attrPos $width; }; }; } else { proc AttributeSplitter_doSplit {} { global AttributeSplitter_71c1474c_df59_404a_ab85_d73aead310fa4_splitDelim; set delim [set AttributeSplitter_71c1474c_df59_404a_ab85_d73aead310fa4_splitDelim]; set delimLength [string length $delim]; set source [FME_GetAttribute [FME_DecodeText {kml_gx_track_gx_coord}]]; set keepEmptyParts [string equal {No} {No}]; set bits {}; set startIndex 0; set nextIndex [string first $delim $source $startIndex]; while {$nextIndex >= 0} { lappend bits [string range $source $startIndex [expr $nextIndex-1]]; set startIndex [expr $nextIndex + $delimLength]; set nextIndex [string first $delim $source $startIndex]; }; lappend bits [string range $source $startIndex end]; set listName [FME_DecodeText {_list}]; set attrNum 0; foreach bit $bits { set trimmedPart [string trim $bit]; if { $keepEmptyParts || $trimmedPart != \"\" } { FME_SetAttribute "$listName{$attrNum}" $trimmedPart; incr attrNum; }; } } } FACTORY_DEF * TeeFactory FACTORY_NAME AttributeSplitter INPUT FEATURE_TYPE ListExploder_ELEMENTS OUTPUT FEATURE_TYPE AttributeSplitter_OUTPUT @Tcl2(AttributeSplitter_doSplit) # ------------------------------------------------------------------------- FACTORY_DEF * VertexCreatorFactory FACTORY_NAME VertexCreator INPUT FEATURE_TYPE AttributeSplitter_OUTPUT MODE REPLACE INDEX " “continue_on_error是xval”@evaluateExpression(FDIV,Float, 价值 _list 0. VertexCreator)”YVAL“@EvaluateExpression (FDIV、浮点数、 价值 _list 1 VertexCreator)”ZVAL“@EvaluateExpression (FDIV、浮点数、 价值 _list 2 ,顶点)“输出输出Feature_type vertexcreator_output输出拒绝Feature_type vertexcreator_ default_macro _wb_bypass_termination no factory_def * teefactory factory_name vertexcreator_ 输入FEATURE_TYPE VertexCreator_ 输出失败feature_type * @abort(编码,vertexcreator 输出 一个 拒绝了 特性。 继续 如果 特性 拒绝了 改变 工作空间 参数 拒绝了 功能 处理 继续 翻译 ) # ------------------------------------------------------------------------- FACTORY_DEF {*} ConnectionFactory FACTORY_NAME LineBuilder输入FEATURE_TYPE VertexCreator_OUTPUT BREAK_BEFORE_FIELD_CHANGE kml_id ACCUM_INPUT_ATTRS LIST_ATTRS_TO_INCLUDE{之一 } LIST_ATTRS_TO_INCLUDE_MODE 输出行Feature_type LineBuilder_line输出Bad_Input Feature_type LineBuilder_ DEFAULT_MACRO _wb_bypass_terminate No FACTORY_DEF * tefactory FACTORY_NAME LineBuilder_ . DEFAULT_MACRO _wb_bypass_terminate No 输入feature_type linebuilder_ 输出失败feature_type * @abort(编码,LINEBuilder 输出 一个 拒绝了 特性。 继续 如果 特性 拒绝了 改变 工作空间 参数 拒绝了 功能 处理 继续 翻译 )#----------------------------------------------------------------------- # 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]} {AttributeSplitter_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 AttributeSplitter_Output_DirCreator OUTPUT FEATURE_TYPE __nukeme__ @Tcl2("catch {file mkdir {$(WORKSPACE_TEMP_DIR)}}") FACTORY_DEF * TeeFactory FACTORY_NAME AttributeSplitter_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 AttributeSplitter_Output_FeatureDirector INPUT FEATURE_TYPE LineBuilder_LINE TEST &fme_type == "fme_raster" OUTPUT FAILED FEATURE_TYPE AttributeSplitter_Output___NotRasterFeatures___ OUTPUT PASSED FEATURE_TYPE AttributeSplitter_Output___RasterFeatures___ FACTORY_DEF * TestFactory FACTORY_NAME AttributeSplitter_Output___FeatureDirector1 INPUT FEATURE_TYPE AttributeSplitter_Output___NotRasterFeatures___ TEST &fme_type == "fme_point_cloud" OUTPUT FAILED FEATURE_TYPE AttributeSplitter_Output___VectorFeatures___ OUTPUT PASSED FEATURE_TYPE AttributeSplitter_Output___PointCloudFeatures___ # Vector features simply may get their colors overridden FACTORY_DEF * TeeFactory FACTORY_NAME AttributeSplitter_Output_VectorSetterUpper INPUT FEATURE_TYPE AttributeSplitter_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 AttributeSplitter_Output_a05845a5_6e72_4a16_8486_ce6bf85f97724_thinPointCloud {} { if {[string equal {NO_THINNING} {KEEPNPOINT}]} { FME_Execute ThinPointCloud NO_THINNING "\" \ ";} elsef {[string等于{no_thinning} {maxnumpoints}]} {fme_execute thinpointcloud no_thinning“\” \ ";} elsef {[string等于{no_thinning} {firstnpoints}]} {fme_execute thinpointcloud no_thinning“\” \ ";} elseif {[string equal {no_thin} {LASTNPOINTS}]} {FME_Execute ThinPointCloud no_thin "\" \ ";};} FACTORY_DEF * TeeFactory FACTORY_NAME attributesplitter_output__pointcloudthin INPUT FEATURE_TYPE attributesplitter_output__pointcloudfeatures___ OUTPUT FEATURE_TYPE __viewme__ @Tcl2("AttributeSplitter_Output_a05845a5_6e72_4a16_8486_ce6bf85f97724_thinPointCloud") Tcl2 procattributesplitter_output_a05845a5_6e72_4a16_8486_ce6bf85f97724_prepareeraster {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 AttributeSplitter_Output_RasterSetterUpper INPUT FEATURE_TYPE AttributeSplitter_Output___RasterFeatures___ OUTPUT FEATURE_TYPE __viewme__ @Tcl2("AttributeSplitter_Output_a05845a5_6e72_4a16_8486_ce6bf85f97724_prepareRaster { } { } { } { })现在将所有特征路由到记录器中,将其#特征类型更改为变压器名称,以便它们可以很好地查看#属性垃圾输出(u a05845a5(u 6e72)u 4a16(u 8486)ce6bf85f97724(u FEAT)类型更改被可视化特征的特征类型。默认宏属性垃圾输出(CATMAC)默认宏可视化工具(FEATURE)文件$(WORKSPACE_TEMP_DIR)/$(SAFE_FFS_NAME)。FFS默认宏可视化工具(CREATE_SPATIAL_INDEX NO.[PR#45549]数据检查器将限制在WIN32上读取的最大特征数,因此,我们将使用MAX_features_TO_record指令相应地限制这里记录的#features的数量。工厂定义*记录器工厂名称属性打印输出记录器输入功能类型查看我输出功能是功能类型(终止器值(_wb_termination_xformer))输入功能类型查看我输出功能类型($(属性打印输出)功能文件“$(可视化工具功能文件)“创建空间索引”$(可视化工具创建空间索引)”检查器亚搏在线“$(可视化工具创建空间索引)”FSC\U模式kml\U gx\U轨道\U gx\U坐标,varchar 255 、kml_id varchar 255 、_element_index 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__