#!#! #! #! #!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #! #!#!#! #!#!#! #!#! #!#!#!#! #!#! #!#! #!#! #! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#! #!#! #!#! #!#! #!#!FME_PYTHON_VERSION 27 GUI忽略SourceDataset_LAS_1,LAS_IN_EXPOSE_ATTRS_GROUP_LAS_1,LAS_IN_SEARCH_ENVELOPE_MINX_LAS_1,LAS_IN_SEARCH_ENVELOPE_MINY_LAS_1,LAS_IN_SEARCH_ENVELOPE_MAXX_LAS_1,LAS_IN_SEARCH_ENVELOPE_MAXY_LAS_1,LAS_IN_CLIP_TO_ENVELOPE_LAS_1,LAS_IN_NETWORK_AUTHENTICATION_LAS_1,SEARCH_ENVELOPE_COORDINATE_SYSTEM_LAS_1,DestDataset_SKP_1,SKP_OUT_MERGE_COPLANAR_FACES_SKP_1,SKP_OUT_REPROJECT_TO_LOCAL_COORDSYS_SKP_1,SKP_OUT_VERSION_SKP_1 DEFAULT_MACRO SourceDataset_LAS $(FME_MF_DIR)325BenchTripleFault_static.las GUI的多文件SourceDataset_LAS LAS_Files(*拉斯维加斯; *。LAZ; *。zlas; *。lasd)| * .las; *。laz; *。zlas; *。lasd | las_files(*。las)| * .las | compreting_las_files(*。laz)| * .laz | esri_optimized_las_files(* .zlas)| * .zlas | esri_las_dataset_files(*。lasd)| * .lasd | all_files(*)| *源ASPRS LAS文件:DEFAULT_MACRO DESTDATASET_SKP C:\ USER \ ENG。Abeer Heikal \ Desktop \ Quick Terrain Robert Gui Dirname destdataset_skp destination google sketchup文件夹:包括[if {$(sourceatataset_las)} == {}} {puts_real {参数'sourceatataset_las'必须给出一个值。};退出1;};]包括[如果{{$(destdataset_skp)} == {}} {puts_real {参数'destdataset_skp'必须给出一个值。};退出1;};]#!start_header#! START_WB_HEADER READER_TYPE LAS READER_KEYWORD LAS_1 READER_GEN_DIRECTIVES SEARCH_ENVELOPE_MAXX,0,SEARCH_ENVELOPE_MINX,0,CLIP_TO_ENVELOPE,NO,SEARCH_ENVELOPE_MAXY,0,SEARCH_ENVELOPE_MINY,0,USE_SEARCH_ENVELOPE,NO,GROUP_BY_DATASET,No,LAS_EXPOSE_FORMAT_ATTRS,,_MERGE_SCHEMAS,YES,EXPOSE_ATTRS_GROUP, WRITER_TYPE MULTI_WRITER MULTI_WRITER_DATASET_ORDER BY_ID MULTI_WRITER_FIRST_WRITER_ID 0 MULTI_WRITER_TYPE{0} SKP MULTI_WRITER_KEYWORD{0} SKP_1 #! END_WB_HEADER #! START_WB_HEADER MACRO WB_KEYWORD "LAS_1" #! END_WB_HEADER #! START_SOURCE_HEADER LAS LAS_1 # ======================================================================= # The following GUI line prompts for a file to be used as the source LAS file. # The user input is stored in a macro, which is then used to define # the dataset to be read. # 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_LAS_1 $(SourceDataset)} \ } ] #! END_WB_HEADER #! START_SOURCE_HEADER LAS LAS_1 DEFAULT_MACRO SourceDataset_LAS_1 $(SourceDataset_LAS) GUI MULTIFILE SourceDataset_LAS_1 LAS_Files(*.las;*.laz;*.zlas;*.lasd)|*.las;*.laz;*.zlas;*.lasd|LAS_Files(*.las)|*.las|Compressed_LAS_Files(*.laz)|*.laz|Esri_Optimized_LAS_Files(*.zlas)|*.zlas|Esri_LAS_Dataset_Files(*.lasd)|*.lasd|All_files(*)|* Source ASPRS LAS File(s): LAS_1_READER_META_ATTRIBUTES fme_dataset DEFAULT_MACRO LAS_IN_GROUP_BY_DATASET_LAS_1 No LAS_1_GROUP_BY_DATASET "$(LAS_IN_GROUP_BY_DATASET_LAS_1)" DEFAULT_MACRO LAS_IN_EXPOSE_ATTRS_GROUP_LAS_1 LAS_1_EXPOSE_ATTRS_GROUP "$(LAS_IN_EXPOSE_ATTRS_GROUP_LAS_1)" GUI DISCLOSUREGROUP LAS_IN_EXPOSE_ATTRS_GROUP_LAS_1 LAS_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 LAS_IN_SEARCH_ENVELOPE_MINX_LAS_1 0 LAS_1_SEARCH_ENVELOPE "$(LAS_IN_SEARCH_ENVELOPE_MINX_LAS_1)" GUI OPTIONAL FLOAT LAS_IN_SEARCH_ENVELOPE_MINX_LAS_1 Minimum X: # =========================================================================== DEFAULT_MACRO LAS_IN_SEARCH_ENVELOPE_MINY_LAS_1 0 LAS_1_SEARCH_ENVELOPE "$(LAS_IN_SEARCH_ENVELOPE_MINY_LAS_1)" GUI OPTIONAL FLOAT LAS_IN_SEARCH_ENVELOPE_MINY_LAS_1 Minimum Y: # =========================================================================== DEFAULT_MACRO LAS_IN_SEARCH_ENVELOPE_MAXX_LAS_1 0 LAS_1_SEARCH_ENVELOPE "$(LAS_IN_SEARCH_ENVELOPE_MAXX_LAS_1)" GUI OPTIONAL FLOAT LAS_IN_SEARCH_ENVELOPE_MAXX_LAS_1 Maximum X: # =========================================================================== DEFAULT_MACRO LAS_IN_SEARCH_ENVELOPE_MAXY_LAS_1 0 LAS_1_SEARCH_ENVELOPE "$(LAS_IN_SEARCH_ENVELOPE_MAXY_LAS_1)" GUI OPTIONAL FLOAT LAS_IN_SEARCH_ENVELOPE_MAXY_LAS_1 Maximum Y: # =========================================================================== # 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 LAS_IN_CLIP_TO_ENVELOPE_LAS_1 NO LAS_1_CLIP_TO_ENVELOPE "$(LAS_IN_CLIP_TO_ENVELOPE_LAS_1)" GUI OPTIONAL CHECKBOX LAS_IN_CLIP_TO_ENVELOPE_LAS_1 YES%NO Clip to Search Envelope # =========================================================================== DEFAULT_MACRO LAS_IN_NETWORK_AUTHENTICATION_LAS_1 LAS_1_NETWORK_AUTHENTICATION "$(LAS_IN_NETWORK_AUTHENTICATION_LAS_1)" GUI OPTIONAL AUTHENTICATOR LAS_IN_NETWORK_AUTHENTICATION_LAS_1 CONTAINER%GROUP%CONTAINER_TITLE%"Network Authentication"%PROMPT_TYPE%NETWORK Network Authentication # =========================================================================== DEFAULT_MACRO LAS_IN_ATTRIBUTE_READING_LAS_1 ALL LAS_1_ATTRIBUTE_READING "$(LAS_IN_ATTRIBUTE_READING_LAS_1)" # PR:31021 # Include this file in workbench source preamble section to enable the ability # to specify a coordinate system for search envelope processing # =========================================================================== DEFAULT_MACRO SEARCH_ENVELOPE_COORDINATE_SYSTEM_LAS_1 GUI OPTIONAL COORDSYS SEARCH_ENVELOPE_COORDINATE_SYSTEM_LAS_1 Search Envelope Coordinate System: LAS_1_SEARCH_ENVELOPE_COORDINATE_SYSTEM "$(SEARCH_ENVELOPE_COORDINATE_SYSTEM_LAS_1)" # =========================================================================== LAS_1_DATASET "$(SourceDataset_LAS_1)" #! END_SOURCE_HEADER #! START_WB_HEADER MACRO WB_KEYWORD "SKP_1" #! END_WB_HEADER #! START_DEST_HEADER SKP SKP_1 #! END_DEST_HEADER #! START_WB_HEADER DEFAULT_MACRO DestDataset INCLUDE [ if {"$(DestDataset)" != ""} { \ puts {DEFAULT_MACRO DestDataset_SKP_1 $(DestDataset)} \ } ] #! END_WB_HEADER #! START_DEST_HEADER SKP SKP_1 DEFAULT_MACRO DestDataset_SKP_1 $(DestDataset_SKP) GUI DIRNAME DestDataset_SKP_1 Destination Google Sketchup Folder: DEFAULT_MACRO SKP_OUT_MERGE_COPLANAR_FACES_SKP_1 No SKP_1_MERGE_COPLANAR_FACES "$(SKP_OUT_MERGE_COPLANAR_FACES_SKP_1)" GUI CHOICE SKP_OUT_MERGE_COPLANAR_FACES_SKP_1 Yes%No Merge Coplanar Faces: DEFAULT_MACRO SKP_OUT_REPROJECT_TO_LOCAL_COORDSYS_SKP_1 Yes SKP_1_REPROJECT_TO_LOCAL_COORDSYS "$(SKP_OUT_REPROJECT_TO_LOCAL_COORDSYS_SKP_1)" GUI CHOICE SKP_OUT_REPROJECT_TO_LOCAL_COORDSYS_SKP_1 Yes%No Move to Local Coordinate System: DEFAULT_MACRO SKP_OUT_VERSION_SKP_1 2016 SKP_1_VERSION "$(SKP_OUT_VERSION_SKP_1)" GUI LOOKUP_CHOICE SKP_OUT_VERSION_SKP_1 "Google Version 3",3%"Google Version 4",4%"Google Version 5",5%"Google Version 6",6%"Google Version 7",7%"Google Version 8",8%"Trimble Version 2013",2013%"Trimble Version 2014",2014%"Trimble Version 2015",2015%"Trimble Version 2016",2016 SketchUp Version: # ============================================================================ # Opt in for destination dataset type vs format type validation DEFAULT_MACRO SKP_OUT_DESTINATION_DATASETTYPE_VALIDATION_SKP_1 Yes SKP_1_DESTINATION_DATASETTYPE_VALIDATION "$(SKP_OUT_DESTINATION_DATASETTYPE_VALIDATION_SKP_1)" DEFAULT_MACRO SKP_OUT_COORDINATE_SYSTEM_GRANULARITY_SKP_1 FEATURE SKP_1_COORDINATE_SYSTEM_GRANULARITY "$(SKP_OUT_COORDINATE_SYSTEM_GRANULARITY_SKP_1)" SKP_1_DATASET "$(DestDataset_SKP_1)" #! END_DEST_HEADER #! START_WB_HEADER #! END_WB_HEADER #! END_HEADER LOG_FILENAME "$(FME_MF_DIR)Point cloud to 3D terrain Model without buildings..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_LAS_1 LAS_1 DEFAULT_MACRO DATASET_KEYWORD_SKP_1 SKP_1 # ------------------------------------------------------------------------- LAS_1_READER_META_ATTRIBUTES fme_basename fme_feature_type # ------------------------------------------------------------------------- MULTI_READER_CONTINUE_ON_READER_FAILURE No # ------------------------------------------------------------------------- MACRO WORKSPACE_NAME Point cloud to 3D terrain Model without buildings. 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 # ------------------------------------------------------------------------- LAS_1_DEF LAS # ------------------------------------------------------------------------- FACTORY_DEF * RoutingFactory FACTORY_NAME "Router and Unexpected Input Remover" COMMAND_PARM_EVALUATION SINGLE_PASS MULTI_READER_KEYWORD LAS_1 INPUT FEATURE_TYPE * ROUTE LAS LAS_1::LAS TO FME_GENERIC ::LAS ALIAS_GEOMETRY MERGE_INPUT Yes OUTPUT ROUTED FEATURE_TYPE * LAS_1_MERGE_DEF LAS_1::LAS EXACT LAS # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME "LAS (LAS_1) Splitter" INPUT FEATURE_TYPE LAS OUTPUT FEATURE_TYPE LAS_LAS_1 DEFAULT_MACRO WB_CURRENT_CONTEXT # ------------------------------------------------------------------------- # First determine which function we are going to be using -- we can do # this statically at parse time for efficiency sake MACRO GeometryExtractor_Function INCLUDE [ if {{fmebinary} == {fmebinary} } { puts {MACRO GeometryExtractor_Function @Geometry(TO_ATTRIBUTE_BINARY,"_geometry") } } elseif {{fmebinary} == {fmehex} } { puts {MACRO GeometryExtractor_Function @Geometry(TO_ATTRIBUTE_BINARY_HEX,"_geometry") } } elseif {{fmebinary} == {fmexml} } { puts {MACRO GeometryExtractor_Function @Geometry(TO_ATTRIBUTE,"_geometry") } } elseif {{fmebinary} == {polyline} } { puts {MACRO GeometryExtractor_Function @Geometry(TO_ATTRIBUTE_POLYLINE,"_geometry", }} else {{fmebinary} == {wkt}} {puts {MACRO GeometryExtractor_Function @OGCGeometry(to_attribute,fmebinary,"_geometry",)}} , }} else {{fmebinary} == {wkb} || {fmebinary} == {wkbhex}} {puts {MACRO GeometryExtractor_Function @OGCGeometry(to_attribute,fmebinary,"_geometry",)}} }} elseif {{fmebinary} == {GEOJSON} || {fmebinary} == {ESRIJSON}} {puts {MACRO GeometryExtractor_Function @JSONGeometry(TO_ATTRIBUTE,fmebinary,"_geometry")}} elseif {{fmebinary} == {KML}} {puts {MACRO GeometryExtractor_Function @KMLGeometry(TO_ATTRIBUTE,"_geometry")}} }} else {{fmebinary} == {georgss_simple}} {puts {MACRO GeometryExtractor_Function @ georgssgeometry (TO_ATTRIBUTE,fmebinary,"_geometry",)}} )}} elseif {{fmebinary} == {GML_2.1.2} || {fmebinary} == {GML_3.1.1} || {fmebinary} == {GML_3.2.1}} {puts {MACRO GeometryExtractor_Function @GMLGeometry(TO_ATTRIBUTE,fmebinary,"_geometry", , }} else {{fmebinary} == {geohash}} {puts {MACRO GeometryExtractor_Function @GeoHash(TO_ATTRIBUTE,"_geometry", "_geometry",)}} }} else {{fmebinary} == {ogeosms}} {puts {MACRO GeometryExtractor_Function @OGCGeometry(to_attribute,fmebinary,"_geometry",)}} )}}} earth {{fmebinary} == {geosms} ||{fmebinary} == {geo}} {puts {宏geometryextractor_function @ogceetometry(to_attribute,fmebinary,“_ geometry”)}} elsef {{fmebinary} == {mgrs} {puts {宏geometryextractor_function @supplyattributes(_geometry,@mgrs(to_mgrs, , , " #在默认情况下,宏没有任何内容,这意味着我们不删除。如果我们想移除,然后我们确定宏宏GeometryExtractor_GeometryRemoveFunction包括(如果{{没有}= ={是的}}{把{宏GeometryExtractor_GeometryRemoveFunction @RemoveGeometry ()}}] FACTORY_DEF * TeeFactory FACTORY_NAME GeometryExtractor输入FEATURE_TYPE LAS_LAS_1输出FEATURE_TYPE GeometryExtractor_OUTPUT美元(GeometryExtractor_Function)$ (GeometryExtractor_GeometryRemoveFunction ) # ------------------------------------------------------------------------- FACTORY_DEF * TransformFact: 6: TINGenerator FACTORY_NAME TINGenerator FACTORY_META_PARAMS TRANSFORMER_NAME: TINGenerator TRANSFORMER_PARAMS: XFORMER_NAME, TINGenerator, TRANSFORMER_GROUP, PARAMETERS_GROUP, GROUP_BY,宽容,50MULTI_PROCESS EXTREME GROUPS_ARE_ORDERED NO INPUT POINTS/LINES FEATURE_TYPE GeometryExtractor_OUTPUT OUTPUT TIN_SURFACE FEATURE_TYPE TINGenerator_TIN_SURFACE FACTORY_DEF * TeeFactory FACTORY_NAME "TINGenerator TIN_SURFACE Splitter" INPUT FEATURE_TYPE TINGenerator_TIN_SURFACE_0_F8PjERrfgLI= OUTPUTFEATURE_TYPE TINGenerator_TIN_SURFACE_1_PUyRiamXg / Q = # ------------------------------------------------------------------------- # 设置指令所有通过meta属性添加到功能。#我们这样做是为了让用户看到所有可能的信息在查看#功能。READER_META_ATTRIBUTES fme_feature_type fme_dataset fme_basename #假设已经设置并创建了工作区临时目录。参见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 "" ; 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]} {TINGenerator_TINSurface} _]_[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 TINGenerator_TINSurface_DirCreator OUTPUT FEATURE_TYPE __nukeme__ @Tcl2("catch {file mkdir {$(WORKSPACE_TEMP_DIR)}}") FACTORY_DEF * TeeFactory FACTORY_NAME TINGenerator_TINSurface_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 TINGenerator_TINSurface_FeatureDirector INPUT FEATURE_TYPE TINGenerator_TIN_SURFACE_0_F8PjERrfgLI= TEST &fme_type == "fme_raster" OUTPUT FAILED FEATURE_TYPE TINGenerator_TINSurface___NotRasterFeatures___ OUTPUT PASSED FEATURE_TYPE TINGenerator_TINSurface___RasterFeatures___ FACTORY_DEF * TestFactory FACTORY_NAME TINGenerator_TINSurface___FeatureDirector1 INPUT FEATURE_TYPE TINGenerator_TINSurface___NotRasterFeatures___ TEST &fme_type == "fme_point_cloud" OUTPUT FAILED FEATURE_TYPE TINGenerator_TINSurface___VectorFeatures___ OUTPUT PASSED FEATURE_TYPE TINGenerator_TINSurface___PointCloudFeatures___ # Vector features simply may get their colors overridden FACTORY_DEF * TeeFactory FACTORY_NAME TINGenerator_TINSurface_VectorSetterUpper INPUT FEATURE_TYPE TINGenerator_TINSurface___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 TINGenerator_TINSurface_cc9f0cc0_8d93_432b_9124_911bf64b442e1_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 "\" \""; }; } 工厂定义*工厂工厂名称生成器TINSurface点云稀释剂输入特性类型生成器TINSurface点云特性输出特性类型viewme@Tcl2(“TINGenerator TINSurface cc9f0cc0 8d93\U 432b\U 9124\U 911BF64B44E1点云”)Tcl2进程生成器{subsetStartRow subsetNumRows subsetStartCol subsetNumCols}{set useDI[string equal-nocase{$(FME_VIEWER_APP)}{fmedatainspector};如果{!$useDI}{FME_执行ApplyRasterRotation双线性;};set doResample[string equal noreducation};set doSubset[string equal{noreducation}{Subset}];set doBounds[string equal{noreducation}{BoundingBoxOnly}];if{$doBounds}{FME_Execute GeometryType FME_polygon;}elseif{$doResample | |$doSubset}{set注释集{首先,我们需要为所有属性设置前缀。之所以这样做,是因为我们将调用@RaserProperties,并且我们希望确保它不会覆盖任何现有属性。};设置KatrPrefix“;”设置所有名称[FME_AttributeNames];foreach oldName$allNames{set newName$kAttrPrefix;append newName$oldName;FME_rename属性$newName$oldName;};FME_执行RaserProperties光栅;if{$doResample}{set oldNumCols[FME_GetAttribute _num_columns];set oldNumRows[FME_GetAttribute _num_rows];set oldspaccingx[FME_GetAttribute _spacex];set oldspaccingy[FME_GetAttribute _spacey];设置kMinNumCells 32;设置kMinNumCells 512;设置注释{只有当两个维度都大于最小的num cells,并且至少有一个维度大于最大值时,我们才会重新采样。};如果{$oldNumRows>$kMinNumCells&&$OldNumCools>$kMinNumCells&($oldNumRows>$kMinNumCells | |$OldNumCools>$KmaxCells)}{set newSpacingX 1.0;set newSpacingY 1.0;如果{$oldNumRows>$oldNumCols}{set comment{如果我们的行数多于列数,我们需要选择一个间距,将行数减少到我们选择的最大值。};set newSpacingY[expr 1.0*$oldNumRows*$oldspaccingy/$kMaxNumCells];set newSpacingX[expr 1.0*$newSpacingY/$oldspaccingy*$oldspaccingx];设置注释{现在我们需要检查这样做是否会导致列低于最小值。如果是这样,请选择间距,使我们只下降到最小值(而不是过去)。};设置newNumCols[expr$oldNumCols*$oldspaccingx/$newspaccingx];如果{$newNumCols<$kMinNumCells}{set newSpacingX[expr 1.0*$oldNumCols*$oldSpacingX/$kMinNumCells];set newSpacingY[expr 1.0*$newSpacingX/$oldSpacingX*$oldspaccingy];};};}否则{set comment{这与上述情况相同,只是行和列的角色相反。};set newSpacingX[expr 1.0*$oldNumCols*$olds*$oldSpacingX/$oldspaccingx/$kMaxNumCells];set newSpacingY[expr 1.0*$newSpacingX/$oldSpacingX*$oldspaccingy];set newNumRows[expr$oldNumRows*$oldspaccingy/$newspaccingy];如果{$newNumRows<$kMinNumCells}{set newSpacingY[expr 1.0*$oldNumRows*$oldspaccingy/$kMinNumCells];set newSpacingX[expr 1.0*$newspaccingy/$oldspaccingy*$oldspaccingy*$oldspaccingx];};};FME_Execute ResampleRaster CELL_SIZE$newSpacingX$newSpacingY NearestNeighbor;};}elseif{$doSubset}{set comment{获取某些字符串的值,这些字符串可能是属性或常量。请注意,我们传入了正在使用的属性前缀,因为如果其中一个确实是属性,它实际上不会是字符串中的确切名称(因为我们重命名了上面的所有属性。)};set rasterNumRows[FME_GetAttribute _num_rows];set rasterNumCols[FME_GetAttribute _num_columns];set comment{如果指定的起始位置实际上在光栅内,则只进行子集设置。};如果{$subsetStartRow<$rasterNumRows&$subsetStartCol<$rasterNumCols}{set comment{现在将子集绑定到光栅的大小,这样我们就不会创建填充。};如果{[expr$subsetStartRow+$subsetNumRows]>$rasterNumRows}{set subsetNumRows[expr$rasterNumRows-$subsetStartRow];};如果{[expr$subsetStartCol+$subsetNumCols]>$rasterNumCols}{set subsetNumCols[expr$rasterNumCols-$subsetStartCol];};FME_Execute substraster$subsetStartRow$subsetNumRows$subsetStartCol$subsetNumCols;};};设置注释{删除@RasterProperties添加的所有属性并从实际属性中删除前缀。我们假设它们都以下划线开头。};FME_Execute RemoveAttributes FME_regexp_match{^};foreach oldName$allNames{set newName$kattrfix;append newName$oldName;FME_RenameAttribute$oldName$newName;};};}工厂定义*TeeFactory工厂名称TINGenerator\u TINSurface\u RasterSetterUpper输入特征类型TINGenerator\u TINSurface\uuuuuuuuuu光栅特征\uuuuuuuuuuuuuuuuuuuuuuuuu输出特征\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu(“TingGenerator_TINSurface_cc9f0cc0_8d93_432b_9124_911bf64b442e1_prepareRaster{ } { } { } { # TINGenerator_TINSurface_cc9f0cc0_8d93_432b_9124_911bf64b442e1_VIS_FEAT_TYPE更改正在可视化的特性的特性类型#。DEFAULT_MACRO TINGenerator_TINSurface_cc9f0cc0_8d93_432b_9124_911bf64b442e1_VIS_FEAT_TYPE TINGenerator_TINSurface$(CATMAC) DEFAULT_MACRO VISUALIZER_FEATURE_FILE $(WORKSPACE_TEMP_DIR)/$(亚搏在线SAFE_FFS_NAME)。数据检查器将限制它在WIN32上读取的最大特性数量,因此我们将相应地限制使用MAX_FEATURES_TO_RECORD指令记录的#特性数量。FACTORY_DEF * RecorderFactory FACTORY_NAME TINGenerator_TINSurface_Recorder INPUT FEATURE_TYPE __viewme__ _wb_termination_feature Yes @FeatureType(TERMINATOR_@Value(_wb_termination_xformer)) INPUT FEATURE_TYPE __viewme__ @FeatureType($(tingenerator_tinsurface_cc9f0cc0_8d93_432b_9124_911bf64b442e1_vis_feature_type) FEATURE_FILE" $ (VISUALIZER_FEATURE_FILE) "CREATE_SPATIAL_INDEX " $ (VISUALIZER_CREATE_SPATIAL_INDEX) "检查员" $ (VISUALIZER_CREATE_SPATIAL_INDEX) "FSC_SCHEMA MODE RECORD RECORD_DIRECTLY_TO_DISK YES MAX_FEATURES_TO_RECORD WIN32 2000000 # ------------------------------------------------------------------------- FACTORY_DEF * RoutingFactory FACTORY_NAME "Destination Feature Type Routing correlation " COMMAND_PARM_EVALUATION SINGLE_PASS INPUT FEATURE_TYPE * ROUTE FME_GENERIC . FSC_SCHEMA MODE RECORD RECORD_DIRECTLY_TO_DISK YES MAX_FEATURES_TO_RECORD WIN32 2000000 # -------------------------------------------------------------------------TINGenerator_TIN_SURFACE_1_PUyRiamXg/Q= TO SKP __GO_TO_FINAL_OUTPUT_ROUTER__ multi_writer_id,0, SupplyAttributes 编码 __wb_out_feat_type__ 拉斯 几何Feature_type_attribute __wb_out_feat_type__输出路由Feature_type *输出not_routed feature_type __nuke_me__ @ tcl2(“fme_statmessage 818059 [fme_getattribute fme_template_feature_type] 818060 818061 fme_warn”)#---a-------------------------------------------------------------------------------------------------factory_def * teefactory factory_name“最终输出nuker”输入feature_type __nuke_me__#--------------------------------------------------------------- Factory_def * creationfactory create_at_end输出feature_type __nukeme__ @tcl(“如果[文件存在{$(workspace_temp_dir)}] {set文件[glob -nocomplin -directory {$(workspace_temp_dir)} -tails * .ffs];如果{[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__ # ------------------------------------------------------------------------- SKP_1_DEF LAS