#!#! #! #! #!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #! #!#!#! #!#!#! #!#! #!#!#!#! #!#! #!#! #!#! #! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#! #!#! #!#! #!#! #!#!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 | lasd | las_files(*。las)| * .las | commetting_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目的地Google SketchUp文件夹:包括[如果{{$(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", )}}elseif{{fmebinary}=={wkt}}{将{MACRO GeometryExtractor}函数@OGCGeometry(to{u attribute,fmebinary,“\u geometry”, , )}}elseif{{fmebinary}=={wkb}| |{fmebinary}=={wkbhex}}{puts{MACRO GeometryExtractor}Function@OGCGeometry(to{u attribute,fmebinary,“\u geometry”, )}}elseif{{fmebinary}=={GEOJSON}{124;{fmebinary}=={ESRIJSON}}{puts{MACRO GeometryExtractor\u Function@JSONGeometry(TO{u ATTRIBUTE,fmebinary,“\u geometry”)}elseif{fmebinary}=={KML}}{puts{MACRO GeometryExtractor\u Function@KMLGeometry(TO{u ATTRIBUTE,fmebinary,“\u geometry”, )}}elseif{{fmebinary}=={GEORSS\u SIMPLE}}{puts{MACRO GeometryExtractor\u Function@GeoRSSGeometry(TO \u ATTRIBUTE,fmebinary,“\u geometry”, )}}elseif{{fmebinary}=={GML琰u 2.1.2}|{fmebinary}=={GML琰u 3.1.1}| |{fmebinary}=={GML琰u 3.2.1}{puts{MACRO GeometryExtractor琰Function@GMLGeometry(TO琰ATTRIBUTE,fmebinary,“\u geometry”, , )}}elseif{{fmebinary}=={geohash}}{将{MACRO GeometryExtractor\u Function@geohash(到\u属性,“\u geometry”, )}}elseif{{fmebinary}=={ogeosms}}}{将{MACRO GeometryExtractor}函数@OGCGeometry(到{u属性,fmebinary,“\u几何体”, )}}elseif{{fmebinary}=={geosms}{124;{fmebinary}=={geo}}{puts{MACRO GeometryExtractor\u Function@OGCGeometry(to{u attribute,fmebinary,“\u geometry”)}elseif{fmebinary}=={mgrs}}{puts{MACRO GeometryExtractor\u Function@SupplyAttributes({u geometry,@mgrs(to{mgrs, , ,“ “))}}}}}]#下一步确定我们是否应该在解析时间删除几何图形,默认情况下,宏没有,意味着我们不会删除。如果我们想删除,那么我们将设置宏这样做MACRO GeometryExtractor_GeometryRemoveFunction有[如果{{}无== {是}} {{放MACRO GeometryExtractor_GeometryRemoveFunction @RemoveGeometry()}}] FACTORY_DEF * TeeFactory FACTORY_NAME GeometryExtractor INPUT FEATURE_TYPE LAS_LAS_1输出FEATURE_TYPE GeometryExtractor_OUTPUT $(GeometryExtractor_Function)$(GeometryExtractor_GeometryRemoveFunction)#------------------------------------------------------------------------------------------,宽容,50多个多重extreme groups_are_ordered无输入点/行Feature_type geometryextractor_output输出tin_surface feature_type tingenerator_tin_surface factory_def * teefactory factory_name“tingenerator tin_surface splitter”输入feature_type tingenerator_tin_surface输出功能_type tingenerator_tin_surface_0_f8pjerrfgli =输出特点_type tingenerator_tin_surface_1_puyriamxg / q =#---a---------------------------------------------------------#该指令将所有元属性添加到功能。#我们这样做,因此用户在已查看的#功能中查看所有可能的信息。Reader_Meta_Attributes FME_Feature_type FME_Dataset FME_BaseName#假设是已设置和创建工作空间TEMP DIR。请参阅controledefs.cpp - controlyefs :: writevisualizertempdir default_macro workspace_temp_dir包括[设置grpbyattrs {};如果{[字符串长度$ grpbyatts]> 0} {if {[字符串首先“@evaluateExpression”$ grpbyattrs“== 0} {puts”宏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\u thinging}{MAXNUMPOINTS}]}{FME\u Execute ThinPointCloud NO\u thinging“\” \“”;}elseif{[string equal{NO\u thinging}{FIRSTNPOINTS}]}{FME\u Execute ThinPointCloud NO\u thinging“\” \“”} elsef {[string等于{no_thinning} {lastnpoints}]} {fme_execute thinpointcloud no_thinning“\” \""; }; }工厂定义*TeeFactory工厂名称TINGenerator\u TINSurface\u PointCloudThinner输入特征类型TINGenerator\u TINSurface\u PointCloudFeatures\u输出特征类型viewme\uuu2@Tcl2(“TINGenerator\u TINSurface\u cc9f0cc0\u 8d93\u 432b\u 9124\u 911bf64b442e1\u thinPointCloud”)Tcl2过程TINGenerator\u TINSurface\u cc9f0cc0\u 8d93\u 432b\u 9124\u 911bf64b442e1\u prepareRaster{subsetStartRow subsetNumRows subsetStartCol subsetNumCols}{set useDI[string equal-nocase{$(FME\u VIEWER APP)}{fmedatainspector}];if{!$useDI}{FME\u Execute ApplyRasterRotation BILINEAR;};set doResample[string equal{noreducation}{Resample}];set doSubset[string equal{noreducation}{Subset}];set doBounds[string equal{noreducation}{BoundingBoxOnly}];if{$doBounds}{FME\u Execute GeometryType FME\u polygon;}elseif{$doResample{124;{doSubset}{set comment}首先,我们需要为所有属性添加前缀。之所以这样做是因为我们要调用@RasterProperties,并且我们要确保它不会覆盖任何现有的属性。};set kAttrPrefix“.”;set allNames[FME\u AttributeNames];foreach oldName$allNames{set newName$kAttrPrefix;append newName$oldName;FME\u RenameAttribute$newName$oldName;};FME\u Execute RasterProperties RASTER;if{$doResample}{set oldNumCols[FME\u GetAttribute \u num columns];set oldNumRows[FME\u GetAttribute \u num rows];set oldSpacingX[FME_GetAttribute _spacing _x];set oldSpacingY[FME_GetAttribute _spacing _y];set kMinNumCells 32;set kMaxNumCells 512;set comment{只有当两个维度都大于最小单元格数且至少有一个大于最大单元格数时,我们才会重新采样。};如果{$oldNumRows>$kMinNumCells&&$oldNumCols>$kMinNumCells&&($oldNumRows>$kMaxNumCells | |$oldNumCols>$kMaxNumCells)}{设置newSpacingX 1.0;设置newSpacingY 1.0;如果{$oldNumRows>$oldNumCols}{设置注释{如果行数多于列数,则需要选择将行数减少到所选最大值的间距。};set newSpacingY[expr 1.0*$oldNumRows*$oldspaccingy/$kMaxNumCells];set newSpacingX[expr 1.0*$newSpacingY/$oldspaccingy*$oldspaccingx];set comment{现在我们需要检查这样做是否会导致列低于最小值。如果是这样的话,选择这样的间距,我们只去最小(而不是过去)。};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{除了行和列的角色不同,这与上述情况相同颠倒的。};set newSpacingX[expr 1.0*$oldnumols*$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\u Execute ResampleRaster CELL\u 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{现在将子集绑定到光栅的大小,这样我们就不会创建填充。};if{[expr$subsetStartRow+$subsetNumRows]>$rasterNumRows}{set subsetNumRows[expr$rasterNumRows-$subsetStartRow];};if{[expr$subsetStartCol+$subsetNumCols]>$rasterNumCols}{set subsetNumCols[expr$rasterNumCols-$subsetStartCol];};FME_Execute substraster$subsetStartRow$subsetNumRows$subsetStartCol$subsetNumCols;};};set comment{删除@RasterProperties添加的所有属性,并从实际属性中删除前缀。我们假设它们都以下划线开头。};FME_Execute RemoveAttributes FME_regexp_match{^};foreach oldName$allNames{set newName$kAttrPrefix;append newName$oldName;FME_RenameAttribute$oldName$newName;};};}FACTORY_DEF*teefctory FACTORY_NAME TINGenerator_TINSurface_RasterSetterUpper INPUT FEATURE_TYPE TINGenerator_TINSurface_RasterFeatures_uuuuuuoutput FEATURE_TYPE_uuviewme_uu2@Tcl2(“TINGenerator_TINSurface_cc9f0cc0_8d93_432b_9124_911bf64b442; prepareRaster{ } { } { } { })现在将所有特征路由到记录器中,将它们的#特征类型更改为transformer名称,以便它们可以很好地查看#TingGeneratorŠTINSurfaceŠcc9f0cc0Š8d93 bŠ9124Š911bf64b442e1ŠVISŠFEATŠ类型更改被可视化特征的特征类型。默认的_MACRO TINGenerator_TINSurface_cc9f0cc0_8d93_432b_9124_911bf64b442e1_VIS_FEAT_TYPE TINGenerator_TINSurface$(CATMAC)默认的_MACRO VISUALIZER_FEATURE FILE$(WORKSPACE_TEMP_DIR)/$(SAFE_FFS_NAME)。FFS默认的_MACRO VISUALIZER_CREATE_SPATIAL_INDEX NO#[PR]数据检查器将限制在WIN32上读取的最大功能数,因此,我们将使用MAX#features#TO#record指令相应地限制这里记录的#feature亚搏在线s的数量。工厂定义*记录器工厂名称发电机表面记录器输入特性类型视图名称终止特性是特性类型(终止符@值(\u wb\u termination\u xformer))输入特征类型\uu viewme\uuuuu@FeatureType($(TINGenerator\u TINSurface\u cc9f0cc0\u 8d93\u 432b\u 9124\u 911bf64b442e1\u VIS特征类型))特征文件“$(VISUALIZER_FEATURE_FILE)”创建空间索引“$(VISUALIZER_CREATE_SPATIAL_INDEX)”检查器“$(VISUALIZER_CREATE_SPATIAL_INDEX)”FSC_架构模式记录记录记录直接\u到磁盘是最大\u FEATURES_到\u记录WIN32 2000000#-----------------------------------------------------------------工厂定义*路由工厂名称“Destination Feature Type Routing Correlator”命令\u PARM \u EVALUATION SINGLE \u PASS INPUT Feature \u Type*ROUTE FME \u GENERIC TingGenerator \u TIN \u SURFACE \u 1 \u PUyRiamXg/Q=到SKP \u GO \u到\u FINAL \u OUTPUT \u ROUTER \u multi \u writer \u id,0, 供应 编码的 __wb\u out\u feat\u类型__ 拉斯维加斯 几何特征类型\属性\输出\功能类型\输出已路由特征\类型*输出未路由特征\类型\核子\ me \ uuu2@Tcl2(“FME \ u StatMessage 818059[FME \ u GetAttribute FME \ u template \功能\类型]818060 818061 FME \ u warn”)\------------------------------------------------------------------工厂\定义*工厂\名称“Final”Output Nuker“输入特征类型”\uuu nuke\u me\uuuuuuuu35;----------------------------------------------工厂定义*创建工厂创建\u结束输出特征类型”\uuu NUKEME\uuuuTCL(“如果[文件存在{$(工作区临时目录)}{设置文件[glob-nocomplain-目录{$(工作区临时目录)}-尾部*.ffs];如果{[llength$files]==1}{set theFile{$(WORKSPACE\u TEMP\u DIR)/};append theFile[lindex$files 0];eval FME\u Execute System\173\042$(FME\u HOME\u UNIX)/fmedatainspector\042--可视化工具--单个应用程序--关闭时删除--无源提示-f FFS$theFile&\175;}elseif{[llength$files]==0}{catch{file delete-force{$(WORKSPACE\u TEMP\u 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 fileNoExt$fileNoExt};eval FME\u Execute System\173\042$(FME\u HOME\u UNIX)/fmedatainspector\042--可视化工具--单个应用程序--关闭时删除--无源提示-d{$(WORKSPACE\u TEMP\u DIR)}-a ffs-f ffs$filesNoExt&\175;};};“)工厂定义*工厂输入特性类型-----------------------------------------------------------------------SKP 1定义LAS