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

Randomise point per random chosen box

" POSITION="5673.08 -1679.18" TOP_LEFT="5673.08 -1679.18" BOTTOM_RIGHT="5672.08 -1678.18" BOUNDING_RECT="5673.08 -1679.18 -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="17">
#!

Complex boundaries may require more boxes to get 100% hit

Set increased parameter "Resolution"

" POSITION="1863.37 -1420.65" TOP_LEFT="1863.37 -1420.65" BOTTOM_RIGHT="1862.37 -1419.65" BOUNDING_RECT="1863.37 -1420.65 -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="3">
#!#!#!#!#!#!#!#!#!#!
#! #!#! #!#!#!#!#! #! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!ValueBUURTCODEValue_columnValue_row">#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#! #!#! #!#! #!#!
FME_PYTHON_VERSION 27 GUI IGNORE SourceDataset_ESRISHAPE_1,ESRISHAPE_IN_ENCODING_ESRISHAPE_1,ESRISHAPE_IN_EXPOSE_ATTRS_GROUP_ESRISHAPE_1,ESRISHAPE_IN_SEARCH_ENVELOPE_MINX_ESRISHAPE_1,ESRISHAPE_IN_SEARCH_ENVELOPE_MINY_ESRISHAPE_1,ESRISHAPE_IN_SEARCH_ENVELOPE_MAXX_ESRISHAPE_1,ESRISHAPE_IN_SEARCH_ENVELOPE_MAXY_ESRISHAPE_1,ESRISHAPE_IN_SEARCH_ENVELOPE_COORDINATE_SYSTEM_ESRISHAPE_1,ESRISHAPE_IN_CLIP_TO_ENVELOPE_ESRISHAPE_1,ESRISHAPE_IN_ADVANCED_ESRISHAPE_1,ESRISHAPE_IN_TRIM_PRECEDING_SPACES_ESRISHAPE_1,ESRISHAPE_IN_GEOMETRY_ESRISHAPE_1,ESRISHAPE_IN_SIMPLE_DONUT_GEOMETRY_ESRISHAPE_1,ESRISHAPE_IN_MEASURES_AS_Z_ESRISHAPE_1,ESRISHAPE_IN_DISSOLVE_HOLES_ESRISHAPE_1,ESRISHAPE_IN_REPORT_BAD_GEOMETRY_ESRISHAPE_1,ESRISHAPE_IN_NETWORK_AUTHENTICATION_ESRISHAPE_1 DEFAULT_MACRO SourceDataset_ESRISHAPE H:\地理数据\ Bestuursgrenzen \ Buurt.shp GUI多文件SourceDataset_ESRISHAPE形状文件(* SHP)| * .SHP | Compressed_Shapefiles(* SHZ)| * .shz | All_Files(*)| *资料来源ESRI的shapefile(S):DEFAULT_MACRO分辨率50 GUIINTEGER分辨率分辨率:DEFAULT_MACRO Seedsize 100 GUI INTEGER Seedsize采样率(N):INCLUDE [如果{{$(SourceDataset_ESRISHAPE)} {==}} {puts_real {参数 'SourceDataset_ESRISHAPE' 必须被给出的值};。出口1;};] INCLUDE [如果{{$(分辨率)} {==}} {puts_real {参数 '分辨率' 必须被给出的值}。出口1;};] INCLUDE [如果{{$(Seedsize)} {==}} {puts_real {参数 'Seedsize' 必须被给出的值}。出口1; }; ] #! START_HEADER #! START_WB_HEADER READER_TYPE ESRISHAPE READER_KEYWORD ESRISHAPE_1 READER_GEN_DIRECTIVES CHECK_NUMERIC_FIELDS,yes,REPORT_BAD_GEOMETRY,no,ADVANCED,,SEARCH_ENVELOPE_MINX,0,TRIM_PRECEDING_SPACES,yes,SEARCH_ENVELOPE_MINY,0,_MERGE_SCHEMAS,YES,SEARCH_ENVELOPE_COORDINATE_SYSTEM,,USE_SEARCH_ENVELOPE,NO,UPPER_CASE_ATTR_NAMES,No,SEARCH_ENVELOPE_MAXX,0,EXPOSE_ATTRS_GROUP,,MEASURES_AS_Z,no,DISSOLVE_HOLES,no,SIMPLE_DONUT_GEOMETRY,simple,ESRISHAPE_EXPOSE_FORMAT_ATTRS,,ENCODING,,SEARCH_ENVELOPE_MAXY,0,GEOMETRY,,CLIP_TO_ENVELOPE,NO,READER_PARAMETERS, WRITER_TYPE NULL WRITER_KEYWORD NULL_DEST NULL_DEST_DATASET null #! END_WB_HEADER #! START_WB_HEADER MACRO WB_KEYWORD "ESRISHAPE_1" #! END_WB_HEADER #! START_SOURCE_HEADER ESRISHAPE ESRISHAPE_1 # ============================================================================ # The following GUI line prompts for the source shapefiles # 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_ESRISHAPE_1 $(SourceDataset)} \ } ] #! END_WB_HEADER #! START_SOURCE_HEADER ESRISHAPE ESRISHAPE_1 DEFAULT_MACRO SourceDataset_ESRISHAPE_1 $(SourceDataset_ESRISHAPE) GUI MULTIFILE SourceDataset_ESRISHAPE_1 Shapefiles(*.shp)|*.shp|Compressed_Shapefiles(*.shz)|*.shz|All_Files(*)|* Source Esri Shapefile(s): # ===================================================================== # Provide some control over what attributes have the user-selected # encoding applied. Normally all attributes are updated after being # read, but the following lines exclude from this treatment all # attributes whose names start with fme_ or shape_. ESRISHAPE_1_UNENCODED_ATTR_PREFIX fme_ shape_ #Added default value for dissolve holes so that default for DI is consistent with workbench DEFAULT_MACRO ESRISHAPE_IN_DISSOLVE_HOLES_ESRISHAPE_1 no ESRISHAPE_1_DISSOLVE_HOLES "$(ESRISHAPE_IN_DISSOLVE_HOLES_ESRISHAPE_1)" # ============================================================================ # Determines whether the attribute names should be uppercased, or whether they # should stay as specified in the shapefile. Once the mapping file/workspace # has been generated, the value for this keyword should not be changed. DEFAULT_MACRO ESRISHAPE_IN_UPPER_CASE_ATTR_NAMES_ESRISHAPE_1 No ESRISHAPE_1_UPPER_CASE_ATTR_NAMES "$(ESRISHAPE_IN_UPPER_CASE_ATTR_NAMES_ESRISHAPE_1)" # ============================================================================ # The following keyword allows the user to choose what encoding to # use for reading the shapefile, overrides dbf file LDID or .cpg # file if present. DEFAULT_MACRO ESRISHAPE_IN_ENCODING_ESRISHAPE_1 ESRISHAPE_1_ENCODING "$(ESRISHAPE_IN_ENCODING_ESRISHAPE_1)" GUI OPTIONAL ENCODING ESRISHAPE_IN_ENCODING_ESRISHAPE_1 ANSI%SYSTEM%BIG5%EUC%HKBIG5%ISO%OEM%SJIS%UTF-8%CP437%CP708%CP720%CP737%CP775%CP850%CP852%CP855%CP857%CP860%CP861%CP862%CP863%CP864%CP865%CP866%CP869%CP874%CP932%CP936%CP950%CP1250%CP1251%CP1252%CP1253%CP1254%CP1255%CP1256%CP1257%CP1258%ISO8859-1%ISO8859-2%ISO8859-3%ISO8859-4%ISO8859-5%ISO8859-6%ISO8859-7%ISO8859-8%ISO8859-9%ISO-8859-11%ISO8859-13%ISO8859-15%WINDOWS-874 Character Encoding #Note: Using the search envelope requires the shape index files (.sbnand.sbx) DEFAULT_MACRO ESRISHAPE_IN_EXPOSE_ATTRS_GROUP_ESRISHAPE_1 ESRISHAPE_1_EXPOSE_ATTRS_GROUP "$(ESRISHAPE_IN_EXPOSE_ATTRS_GROUP_ESRISHAPE_1)" GUI DISCLOSUREGROUP ESRISHAPE_IN_EXPOSE_ATTRS_GROUP_ESRISHAPE_1 ESRISHAPE_EXPOSE_FORMAT_ATTRS Schema Attributes # Include this file in source setting section to add native search envelope processing # Zero as a default means we don't do any search -- this makes workbench happier # =========================================================================== DEFAULT_MACRO ESRISHAPE_IN_SEARCH_ENVELOPE_MINX_ESRISHAPE_1 0 ESRISHAPE_1_SEARCH_ENVELOPE "$(ESRISHAPE_IN_SEARCH_ENVELOPE_MINX_ESRISHAPE_1)" GUI OPTIONAL FLOAT ESRISHAPE_IN_SEARCH_ENVELOPE_MINX_ESRISHAPE_1 Minimum X: # =========================================================================== DEFAULT_MACRO ESRISHAPE_IN_SEARCH_ENVELOPE_MINY_ESRISHAPE_1 0 ESRISHAPE_1_SEARCH_ENVELOPE "$(ESRISHAPE_IN_SEARCH_ENVELOPE_MINY_ESRISHAPE_1)" GUI OPTIONAL FLOAT ESRISHAPE_IN_SEARCH_ENVELOPE_MINY_ESRISHAPE_1 Minimum Y: # =========================================================================== DEFAULT_MACRO ESRISHAPE_IN_SEARCH_ENVELOPE_MAXX_ESRISHAPE_1 0 ESRISHAPE_1_SEARCH_ENVELOPE "$(ESRISHAPE_IN_SEARCH_ENVELOPE_MAXX_ESRISHAPE_1)" GUI OPTIONAL FLOAT ESRISHAPE_IN_SEARCH_ENVELOPE_MAXX_ESRISHAPE_1 Maximum X: # =========================================================================== DEFAULT_MACRO ESRISHAPE_IN_SEARCH_ENVELOPE_MAXY_ESRISHAPE_1 0 ESRISHAPE_1_SEARCH_ENVELOPE "$(ESRISHAPE_IN_SEARCH_ENVELOPE_MAXY_ESRISHAPE_1)" GUI OPTIONAL FLOAT ESRISHAPE_IN_SEARCH_ENVELOPE_MAXY_ESRISHAPE_1 Maximum Y: # =========================================================================== DEFAULT_MACRO ESRISHAPE_IN_SEARCH_ENVELOPE_COORDINATE_SYSTEM_ESRISHAPE_1 ESRISHAPE_1_SEARCH_ENVELOPE "$(ESRISHAPE_IN_SEARCH_ENVELOPE_COORDINATE_SYSTEM_ESRISHAPE_1)" GUI OPTIONAL COORDSYS ESRISHAPE_IN_SEARCH_ENVELOPE_COORDINATE_SYSTEM_ESRISHAPE_1 Search Envelope Coordinate System: # =========================================================================== DEFAULT_MACRO ESRISHAPE_IN_CLIP_TO_ENVELOPE_ESRISHAPE_1 NO ESRISHAPE_1_CLIP_TO_ENVELOPE "$(ESRISHAPE_IN_CLIP_TO_ENVELOPE_ESRISHAPE_1)" GUI OPTIONAL CHECKBOX ESRISHAPE_IN_CLIP_TO_ENVELOPE_ESRISHAPE_1 YES%NO Clip to Search Envelope DEFAULT_MACRO ESRISHAPE_IN_CHECK_NUMERIC_FIELDS_ESRISHAPE_1 yes ESRISHAPE_1_CHECK_NUMERIC_FIELDS "$(ESRISHAPE_IN_CHECK_NUMERIC_FIELDS_ESRISHAPE_1)" GUI DISCLOSUREGROUP ESRISHAPE_IN_ADVANCED_ESRISHAPE_1 TRIM_PRECEDING_SPACES%GEOMETRY Advanced DEFAULT_MACRO ESRISHAPE_IN_TRIM_PRECEDING_SPACES_ESRISHAPE_1 yes ESRISHAPE_1_TRIM_PRECEDING_SPACES "$(ESRISHAPE_IN_TRIM_PRECEDING_SPACES_ESRISHAPE_1)" GUI CHOICE ESRISHAPE_IN_TRIM_PRECEDING_SPACES_ESRISHAPE_1 yes%no Trim Preceding Spaces GUI DISCLOSUREGROUP ESRISHAPE_IN_GEOMETRY_ESRISHAPE_1 SIMPLE_DONUT_GEOMETRY%MEASURES_AS_Z%DISSOLVE_HOLES%REPORT_BAD_GEOMETRY Geometry # ============================================================================ # Option to use simple donut geometry creation, which is faster than the # original creation method, but less meticulous at detecting and correcting # geometric anomalies (i.e.holeswithinholes) DEFAULT_MACRO ESRISHAPE_IN_SIMPLE_DONUT_GEOMETRY_ESRISHAPE_1 simple ESRISHAPE_1_SIMPLE_DONUT_GEOMETRY "$(ESRISHAPE_IN_SIMPLE_DONUT_GEOMETRY_ESRISHAPE_1)" GUI LOOKUP_CHOICE ESRISHAPE_IN_SIMPLE_DONUT_GEOMETRY_ESRISHAPE_1 "Orientation Only",simple%"Orientation and Spatial Relationship",complex Donut Geometry Detection # ============================================================================ # The following GUI line sets whether measure values in the shapefiles should # be treated as elevations. DEFAULT_MACRO ESRISHAPE_IN_MEASURES_AS_Z_ESRISHAPE_1 no ESRISHAPE_1_MEASURES_AS_Z "$(ESRISHAPE_IN_MEASURES_AS_Z_ESRISHAPE_1)" GUI CHOICE ESRISHAPE_IN_MEASURES_AS_Z_ESRISHAPE_1 yes%no Treat Measures as Elevation # ============================================================================ # The following keyword sets whether the reader dissolves holes in donuts. ESRISHAPE_1_DISSOLVE_HOLES "$(ESRISHAPE_IN_DISSOLVE_HOLES_ESRISHAPE_1)" GUI CHOICE ESRISHAPE_IN_DISSOLVE_HOLES_ESRISHAPE_1 yes%no Dissolve Adjacent Holes # ============================================================================ # The following keyword sets whether bad geometry should be reported via # the shape_geometry_error{} list attribute. DEFAULT_MACRO ESRISHAPE_IN_REPORT_BAD_GEOMETRY_ESRISHAPE_1 no ESRISHAPE_1_REPORT_BAD_GEOMETRY "$(ESRISHAPE_IN_REPORT_BAD_GEOMETRY_ESRISHAPE_1)" GUI CHOICE ESRISHAPE_IN_REPORT_BAD_GEOMETRY_ESRISHAPE_1 yes%no Report Geometry Anomalies # =========================================================================== DEFAULT_MACRO ESRISHAPE_IN_NETWORK_AUTHENTICATION_ESRISHAPE_1 ESRISHAPE_1_NETWORK_AUTHENTICATION "$(ESRISHAPE_IN_NETWORK_AUTHENTICATION_ESRISHAPE_1)" GUI OPTIONAL AUTHENTICATOR ESRISHAPE_IN_NETWORK_AUTHENTICATION_ESRISHAPE_1 CONTAINER%GROUP%CONTAINER_TITLE%"Network Authentication"%PROMPT_TYPE%NETWORK Network Authentication # =========================================================================== DEFAULT_MACRO ESRISHAPE_IN_ATTRIBUTE_READING_ESRISHAPE_1 ALL ESRISHAPE_1_ATTRIBUTE_READING "$(ESRISHAPE_IN_ATTRIBUTE_READING_ESRISHAPE_1)" ESRISHAPE_1_DATASET "$(SourceDataset_ESRISHAPE_1)" #! END_SOURCE_HEADER #! START_WB_HEADER #! END_WB_HEADER #! END_HEADER LOG_FILENAME "$(FME_MF_DIR)Random point in Polygons.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_ESRISHAPE_1 ESRISHAPE_1 # ------------------------------------------------------------------------- ESRISHAPE_1_READER_META_ATTRIBUTES fme_feature_type # ------------------------------------------------------------------------- MULTI_READER_CONTINUE_ON_READER_FAILURE No # ------------------------------------------------------------------------- MACRO WORKSPACE_NAME Random point in Polygons 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 # ------------------------------------------------------------------------- ESRISHAPE_1_DEF Buurt SHAPE_GEOMETRY shape_polygon BUURTCODE char(2) NAAM char(25) TEKST char(28) X_COORD number(10,3) Y_COORD number(10,3) OPPERVLAK number(10,2) # ------------------------------------------------------------------------- FACTORY_DEF * RoutingFactory FACTORY_NAME "Router and Unexpected Input Remover" COMMAND_PARM_EVALUATION SINGLE_PASS MULTI_READER_KEYWORD ESRISHAPE_1 INPUT FEATURE_TYPE * ROUTE ESRISHAPE ESRISHAPE_1::Buurt TO FME_GENERIC ::Buurt ALIAS_GEOMETRY MERGE_INPUT Yes OUTPUT ROUTED FEATURE_TYPE * ESRISHAPE_1_MERGE_DEF ESRISHAPE_1::Buurt EXACT Buurt # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME "Buurt (ESRISHAPE_1) Splitter" INPUT FEATURE_TYPE Buurt OUTPUT FEATURE_TYPE Buurt_ESRISHAPE_1 FACTORY_DEF * TeeFactory FACTORY_NAME "Buurt_ESRISHAPE_1 Disabled Nuker -1 10" INPUT FEATURE_TYPE Buurt_ESRISHAPE_1 DEFAULT_MACRO WB_CURRENT_CONTEXT # ------------------------------------------------------------------------- Tcl2 proc Creator_CoordSysRemover {} { global FME_CoordSys; set FME_CoordSys {}; } MACRO Creator_XML NOT_ACTIVATED MACRO Creator_CLASSIC NOT_ACTIVATED MACRO Creator_2D3D 2D_GEOMETRY MACRO Creator_COORDS INCLUDE [if {{Geometry Object} == {Geometry Object}} {puts {MACRO Creator_XML *}}] {if {{Geometry Object} == {2D Coordinate List}} {puts {MACRO Creator_2D3D 2D_GEOMETRY};[if {{Geometry Object} == {3D坐标列表}}{puts {MACRO Creator_2D3D 3D_GEOMETRY};{{Geometry Object} == {2D Min/Max Box}} {set comment{我们需要将坐标minX minY maxX maxY转换为一个完整的多边形坐标列表};set splitCoords [split [string trim]{/ /设置字符串长度 }]];如果{[llength $splitCoords] > 4} {set trimmedCoords {};foreach item $splitCoords {if {$item != {}} {lappend trimmedCoords $item}};设置splitCoords trimmedCoords美元;};如果{[llength $splitCoords] != 4} {error {Creator:坐标列表应该是一个以空格分隔的列表,包含4个数字,如'minx miny maxx max ' - ' 的是无效的};};设置minX [lindex $splitCoords 0];set minY [lindex $splitCoords 1]; / /设置lindex $splitCoords 1set maxX [lindex $splitCoords 2]; / /设置索引set maxY [lindex $splitCoords 3]; / /设置maxY"MACRO creatator_coords $minX $minY $minX $max $maxX $max $maxX $minY $minX $minY";{MACRO Creator_2D3D 2D_GEOMETRY};{MACRO Creator_CLASSIC *}}] FACTORY_DEF $(Creator_XML) CreationFactory FACTORY_NAME Creator_XML_Creator CREATE_AT_END no OUTPUT FEATURE_TYPE _____CREATED______ @Geometry(FROM_ENCODED_STRING, xml ? 版本= 1 编码= US_ASCII 独立的= 几何学 文本 观点 coord x= 0 y = 0 观点 textString FME textString textSize 1 textSize textRotation 0 textRotation 文本 几何学 )工厂定义$(Creator\u CLASSIC)创建工厂工厂名称创建者\u CLASSIC\u Creator$(Creator\u 2D3D)$(Creator\u COORDS)创建\u结束时无输出功能\u类型\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu“输出功能\u类型创建者\u创建@Tcl2(创建者\u CoordSysRemover)@CoordSys()fme\u功能\u类型创建者工厂\u定义*分支工厂\u名称”创建者\u创建的分支-1 52“输入功能\u类型创建者\u创建的目标\u工厂”$(WB\u当前上下文)\u创建者\u分支\u目标”输出传递的功能\u类型*@RemoveAttributes(“Creator\u CREATED Brancher-1 52”。BranchingFactory.Count)#----------------------------------------------------------------工厂定义*工厂名称“$(WB\u当前上下文)\u Creator\u BRANCH\u目标“输入功能\类型*输出功能\类型*\----------------------------------------------------------------工厂\定义*TextStrokerFactory\名称TextStroker输入功能\类型创建者\创建拒绝\无效\几何体是文本\字体\编码”画笔 剧本 机器翻译 16 斜体“文本\字体\宽度\倍增”1.0“文本\填充”0“构建\多边形”是“输出笔划特征\类型文本笔划器\笔划输出被拒绝特征\类型文本笔划器_ default_macro _wb_bypass_termination no factory_def * teefactory factory_name textroker_ 输入FEATURE_TYPE TextStroker_ 输出失败FEATURE_TYPE * @Abort(ENCODED, TextStroker 输出 一个 拒绝了 特性。 持续 如果 特征 拒绝 改变 这个 工作空间 参数 拒绝了 功能 处理 继续 翻译 ) # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME增密器输入FEATURE_TYPE TextStroker_STROKED输出FEATURE_TYPE Densifier_DENSIFIED @AddVertices (xy_uniform”5 ") # ------------------------------------------------------------------------- FACTORY_DEF * GeneralizeFactoryFACTORY_NAME Generalizer INPUT FEATURE_TYPE Densifier_DENSIFIED REJECT_INVALID_GEOM Yes PRESERVE_SHARED_BOUNDARIES No ALGORITHM NURBfit DEGREE "2" SEGMENT_LENGTH "0" OUTPUT GENERALIZED FEATURE_TYPE Generalizer_OUTPUT OUTPUT REJECTED FEATURE_TYPE Generalizer_ 默认\u宏\u WB\u旁路\u终止无工厂\u定义*t工厂\u名称泛化器_ 输入FEATURE_TYPE Generalizer_ FEATURE_TYPE * @Abort(ENCODED, Generalizer . 输出 一个 拒绝了 特性。 持续 如果 特征 拒绝 改变 这个 工作空间 参数 拒绝了 功能 处理 继续 翻译 ) # ------------------------------------------------------------------------- FACTORY_DEF * AttrSetFactory FACTORY_NAME AttributeCreator INPUT FEATURE_TYPE Generalizer_OUTPUT MULTI_FEATURE_MODE NO NULL_ATTR_MODE NO_OP ATTRSET_CREATE_DIRECTIVES _PROPAGATE_MISSING_FDIV ATTR_ACTION "" BUURTCODE" "SET_TO" "s亚搏在线afe" OUTPUT OUTPUT FEATURE_TYPEAttributeCreator_OUTPUT # ------------------------------------------------------------------------- FACTORY_DEF * TestFactory FACTORY_NAME测试输入FEATURE_TYPE Buurt_ESRISHAPE_1输入FEATURE_TYPE AttributeCreator_OUTPUT测试@EvaluateExpression (FDIV STRING_ENCODED, 价值 布尔守则 ,测试仪)在02 05 亚搏在线safe ENCODED boolean operator OR OUTPUT PASSED FEATURE_TYPE Tester_PASSED FACTORY_DEF * TeeFactory FACTORY_NAME "Tester PASSED Splitter" INPUT FEATURE_TYPE Tester_PASSED OUTPUT FEATURE_TYPE tester_passsed_0_m1wqjkih4e0 = OUTPUT FEATURE_TYPE tester_passsed_1_8t6d0f2oyou = OUTPUT FEATURE_TYPE tester_passsed_2_exstyiaekem = OUTPUT FEATURE_TYPETester_PASSED_3_gh4Am8DbgQI = # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME结输入FEATURE_TYPE Tester_PASSED_3_gh4Am8DbgQI =输出FEATURE_TYPE Junction_Output # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAMEJunction_2 INPUT FEATURE_TYPE Junction_Output OUTPUT FEATURE_TYPE Junction_2_Output # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME BoundsExtractor_2 INPUT FEATURE_TYPE tester_passsed_0_m1wqjkih4e0 = OUTPUT FEATURE_TYPE BoundsExtractor_2_OUTPUT@Bounds (fme_encoded、_xmin _xmax、_ymin _ymax, _zmin, _zmax,几何 ) # ------------------------------------------------------------------------- FACTORY_DEF * TransformFact: 3:2DGridAccumulator FACTORY_NAME 2 dgridaccumulator FACTORY_META_PARAMS TRANSFORMER_NAME: 2 dgridaccumulatorTRANSFORMER_PARAMS: XFORMER_NAME 2 dgridaccumulator TRANSFORMER_GROUP, PARAMETERS_GROUP, GROUP_BY BUURTCODE, SIZE_TYPE,细胞 大小、STARTINGCORNER低 左,XINC, 价值 _最大值 - 价值 _xmin. 价值 _ymax - 价值 _ymin 价值 _最大值 - 价值 _xmin. (分辨率编码美元): 价值 _ymax - 价值 _ymin $(分辨率$encode),银币, 价值 _最大值 - 价值 _xmin. 价值 _ymax - 价值 _ymin 价值 _最大值 - 价值 _xmin. (分辨率编码美元): 价值 _ymax - 价值 _ymin (分辨率编码美元)、XCOUNT 未使用 ,YCOUNT, 未使用 MULTI_PROCESS "MINIMAL" GROUPS_ARE_ORDERED No INPUT FEATURE_TYPE BoundsExtractor_2_OUTPUT OUTPUT GRID FEATURE_TYPE 2DGridAccumulator_GRID OUTPUT . MULTI_PROCESS "MINIMAL" GROUPS_ARE_ORDERED No INPUT FEATURE_TYPE BoundsExtractor_2_OUTPUT 特征类型2DGrid累加器_ 默认\u宏\u WB\u旁路\u终止无工厂\u定义*t工厂\u名称2DGrid累加器_ 输入特征_类型2DGrid累加器_ * @Abort(ENCODED, 2DGridAccumulator 输出 一个 拒绝了 特性。 持续 如果 特征 拒绝 改变 这个 工作空间 参数 拒绝了 功能 处理 继续 翻译 ) # ------------------------------------------------------------------------- FACTORY_DEF * SpatialFilterFactory FACTORY_NAME SpatialFilter INPUT BASE FEATURE_TYPE Tester_PASSED_2_EXStyIAekEM= INPUT CANDIDATE FEATURE_TYPE 2DGridAccumulator_GRID PREDICATE "CONTAINS INTERSECTS" USE_BOUNDING_BOX NO MULTIPLE_BASES YES MERGE_BASE_ATTR YESAttr_accum_mode " handle_conflict " attr_conflict_res " candidate_if_conflict " base_attr_prefix " " PREDICATE_ATTR "_predicate" BOOLEAN_OPERATOR OR REJECT_INVALID_GEOM Yes REJECT_INVALID_PREDICATES Yes REJECT_RASTERS No CUSTOM_MULTI_HANDLING Yes DIMENSION 2 GROUP_BY BUURTCODE curve_boundary y_rule ENDPOINTS_MOD2 OUTPUT PASSED FEATURE_TYPE SpatialFilter_PASSED OUTPUT REJECTED FEATURE_TYPE SpatialFilter_ . DEFAULT_MACRO _wb_bypass_terminate No FACTORY_DEF * tefactory FACTORY_NAME SpatialFilter_ . DEFAULT_MACRO _wb_bypass_terminate No FACTORY_DEF * tefactory FACTORY_NAME SpatialFilter_ . DEFAULT_MACRO _wb_bypass_terminate No 输入FEATURE_TYPE SpatialFilter_ 输出失败FEATURE_TYPE * @Abort(ENCODED, SpatialFilter 输出 一个 拒绝了 特性。 持续 如果 特征 拒绝 改变 这个 工作空间 参数 拒绝了 功能 处理 继续 翻译 ) # ------------------------------------------------------------------------- 包括(将“宏观REAL_RATE [expr $ (Seedsize) * 1]”)FACTORY_DEF * SamplingFactory FACTORY_NAME取样器SAMPLE_RATE美元(REAL_RATE) SAMPLE_ORDER随机GROUP_BY BUURTCODE输入FEATURE_TYPE SpatialFilter_PASSED输出采样FEATURE_TYPE ___SAMPLED___ #需要使用TeeFactory,因为如果Sampler没有指定output子句,它仍然会输出特性。#这样,即使变压器上没有输出连接,我们也会表现得很好。看到公关# 28886。FACTORY_DEF * TestFactory FACTORY_NAME sampler_sampling INPUT FEATURE_TYPE ___SAMPLED___ OUTPUT FEATURE_TYPE sampler_sampling # ------------------------------------------------------------------------- FACTORY_DEF * TestFactory FACTORY_NAME test_2 INPUT FEATURE_TYPE sampler_sampling TEST @EvaluateExpression(FDIV,STRING_ENCODED, 价值 _predicate {*} OverlayFactory FACTORY_NAME AreaOnAreaOverlayer INPUT POLYGON FEATURE_TYPE test_passed INPUT POLYGON FEATURE_TYPE . {*} OverlayFactory FACTORY_NAME AreaOnAreaOverlayer INPUT POLYGON FEATURE_TYPEJunction_2_Output GROUP_BY BUURTCODE ACCUMULATE_ATTRIBUTES ONE LIST_ATTRS_TO_INCLUDE { }列表属性到包含模式 CONNECT_Z_MODE FIRST_WINS DEAGGREGATE_INPUT Yes OVERLAP_COUNT_ATTRIBUTE _overlaps MODE COMPLETE OUTPUT POLYGON FEATURE_TYPE AreaOnAreaOverlayer_AREA OUTPUT ILLEGAL_GEOM FEATURE_TYPE AreaOnAreaOverlayer_ 默认\u宏\u WB\u旁路\u终止无工厂\u定义*t工厂\u名称区域区域覆盖层_ 输入特征类型区域区域覆盖层_ 输出失败的功能_TYPE*@Abort(已编码,AreaOnAreaOverlayer 输出 一个 拒绝了 特性。 持续 如果 特征 拒绝 改变 这个 工作空间 参数 拒绝了 功能 处理 继续 翻译 ) # ------------------------------------------------------------------------- FACTORY_DEF * TestFactory FACTORY_NAME Tester_3输入FEATURE_TYPE AreaOnAreaOverlayer_AREA测试@EvaluateExpression (FDIV STRING_ENCODED, 价值 _重叠 , Tester_3) > 1编码BOOLEAN_OPERATOR或输出通过FEATURE_TYPE Tester_3_PASSED # ------------------------------------------------------------------------- FACTORY_DEF * AttrSetFactory FACTORY_NAME AttributeCreator_3输入FEATURE_TYPE Tester_3_PASSED MULTI_FEATURE_MODE没有NULL_ATTR_MODE NO_OP ATTRSET_CREATE_DIRECTIVES _PROPAGATE_MISSING_FDIVATTR_ACTION "" "Count_GroupBy" "SET_TO" " 价值 布尔守则 价值 _column 价值 _row “输出输出FEATURE_TYPE AttributeCreator_3_OUTPUT # ------------------------------------------------------------------------- # 创建这个变压器将使用的域名。#因为@Count本身将计算表达式来计算#域,我们不需要在Tcl中通过INCLUDE [set domainPrefix {};如果{{Global} == {Local}} {set domainPrefix [FME_EncodeText {Counter_}];};"MACRO Counter_FULL_DOMAIN ${domainPrefix}@EvaluateExpression(FDIV,STRING_ENCODED, 价值 分组计数 计数器)”;[FACTORY_DEF * TeeFactory FACTORY_NAME Counter_Counter INPUT FEATURE_TYPE AttributeCreator_3_OUTPUT @RenameAttributes(FME_STRICT,___fme_rejection_code___,fme_rejection_code) OUTPUT FEATURE_TYPE __torejector___ "_count" @Count(REJECTABLE,fme_encoded,$(Counter_FULL_DOMAIN),"0") FACTORY_DEF * TestFactory FACTORY_NAME Counter_Rejector INPUTFEATURE_TYPE __torejector___ TEST @Value(fme_rejection_code) != ""输出通过FEATURE_TYPE计数器 @RemoveAttribute(\uuuuuuuu fme\u拒绝\u代码\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 输出Nuker" INPUT FEATURE_TYPE Counter_ 默认\u宏\u WB\u旁路\u终止无工厂定义*t工厂名称计数器_ 输入FEATURE_TYPE Counter_ 输出失败FEATURE_TYPE * @Abort(ENCODED, Counter 输出 一个 拒绝了 特性。 持续 如果 特征 拒绝 改变 这个 工作空间 参数 拒绝了 功能 处理 继续 翻译 )#-------------------------------------------------------------包括[如果{{{NO}=={YES}}{put{MACRO DO\u TOPFER TOPFER\u索引 };} else {puts {MACRO DO_TOPFER};}] FACTORY_DEF {*} BoundingBoxFactory FACTORY_NAME BoundingBoxAccumulator INPUT FEATURE_TYPE Counter_OUTPUT BOUNDING_BOX_TYPE GEOMETRIC GROUP_BY _column _count _row BUURTCODE ACCUMULATE_ATTRIBUTES One LIST_ATTRS_TO_INCLUDE {} }列表属性到包含模式 $(DO_TOPFER)输出边界盒特征类型边界盒累加器边界盒累加器输出特征类型边界盒输出特征类型边界牵引器输出@边界(fme_编码,_xmin,_xmax,_ymin,_ymax,_zmin,_zmax,几何)————————————————————————————————————————————————————————————————————————————————————————————— " CONTINUE_ON_ERROR YES XVAL "@EvaluateExpression(FDIV,FLOAT, 价值 _xmin. + 价值 _最大值 - 价值 _xmin. 2 + 兰德 价值 _最大值 - 价值 _xmin. 2, VertexCreator)”YVAL“@EvaluateExpression (FDIV、浮点数、 价值 _ymin + 价值 _ymax - 价值 _ymin 2 + 兰德 价值 _ymax - 价值 _ymin 2, VertexCreator)”FEATURE_TYPE VertexCreator_OUTPUT OUTPUT REJECTED FEATURE_TYPE VertexCreator_ 默认\u宏\u WB\u旁路\u终止无工厂\u定义*t工厂\u名称_ 输入FEATURE_TYPE VertexCreator_ 输出失败FEATURE_TYPE * @Abort(ENCODED, VertexCreator 输出 一个 拒绝了 特性。 持续 如果 特征 拒绝 改变 这个 工作空间 参数 拒绝了 功能 处理 继续 翻译 ) # ------------------------------------------------------------------------- # 假设是工作区临时dir已经设置和创建。参见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 "";设置逗号“”;foreach attr $ grpbyattrs {set catter“$ catter $ coma $ @ value(\ attr attr \”)“设置逗号“,_,”;};把“宏Catmac _ @ concatenate($ catter)”;}} else {puts "MACRO CATMAC "; }; set safeName "[regsub -all {[^a-zA-Z0-9]} {VertexCreator_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 VertexCreator_Output_DirCreator OUTPUT FEATURE_TYPE __nukeme__ @Tcl2("catch {file mkdir {$(WORKSPACE_TEMP_DIR)}}") FACTORY_DEF * TeeFactory FACTORY_NAME VertexCreator_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 VertexCreator_Output_FeatureDirector INPUT FEATURE_TYPE VertexCreator_OUTPUT TEST &fme_type == "fme_raster" OUTPUT FAILED FEATURE_TYPE VertexCreator_Output___NotRasterFeatures___ OUTPUT PASSED FEATURE_TYPE VertexCreator_Output___RasterFeatures___ FACTORY_DEF * TestFactory FACTORY_NAME VertexCreator_Output___FeatureDirector1 INPUT FEATURE_TYPE VertexCreator_Output___NotRasterFeatures___ TEST &fme_type == "fme_point_cloud" OUTPUT FAILED FEATURE_TYPE VertexCreator_Output___VectorFeatures___ OUTPUT PASSED FEATURE_TYPE VertexCreator_Output___PointCloudFeatures___ # Vector features simply may get their colors overridden FACTORY_DEF * TeeFactory FACTORY_NAME VertexCreator_Output_VectorSetterUpper INPUT FEATURE_TYPE VertexCreator_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 VertexCreator_Output_48059779_4d4d_4e80_90c5_602efdaee65648_thinPointCloud {} { if {[string equal {NO_THINNING} {KEEPNPOINT}]} { FME_Execute ThinPointCloud NO_THINNING "\" \“;}elseif{[字符串等于{NO\u细化}{MAXNUMPOINTS}]}{FME\u执行ThinPointCloud NO\u细化”\” \“;}elseif{[字符串等于{NO\u细化}{FIRSTNPOINTS}]}{FME\u执行ThinPointCloud NO\u细化”\” \""; } elseif{[string equal{NO\u thilling}{LASTNPOINTS}]}{FME\u执行ThinPointCloud NO\u thilling“\” \""; }; } 工厂定义*工厂名称Vertexcator\u输出\uuuuuuu点云稀释剂输入特性\u类型Vertexcator\u输出\uuuuuuu点云特性\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu{subsetStartRow subsetNumRows subsetStartCol subsetNumCols}{set useDI[string equal-nocase{$(FME_VIEWER_APP)}{fmedatainspector}];if{!$useDI}{FME_Execute ApplyRasterRotation双线性;};set doResample[string equal{NoReduction}{Resample};set doSubset[string equal NoReduction}{子集};set dobs[string equal NoReduction}{BoundingBoxOnly}];如果{$doBounds}{FME_Execute GeometryType FME_polygon;}elseif{$doResample | | |$doSubset}{set comment{首先,我们需要为所有属性设置前缀。这是因为我们要调用@rasterprivates,并且我们要确保它不会覆盖任何现有的属性。};设置KattPrefix”“;设置所有名称[FME_AttributeNames];foreach oldName$allNames{set newName$kAttrPrefix;append newName$oldName;FME_RenameAttribute$newName$oldName;};FME_Execute RasterProperties光栅;if{$doResample}{set oldnumcolls[FME_GetAttribute num columns];set oldNumRows[FME_GetAttribute num行];set oldNumRows[FME_GetAttribute num行];set oldspachingx[FME_GetAttribute;设置oldSpacingY[FME_GetAttribute _spacing_y];设置kMinNumCells 32;设置kMaxNumCells 512;设置注释{只有当两个维度都大于最小单元格数,且至少有一个维度大于最大单元格数时,我们才会重新采样。};如果{$oldNumRows>kMinNumCells&&$OldNumCools>kMinNumCells&&($oldNumRows>$kMaxNumCells | |$oldNumCols>$kMaxNumCells)}{set newSpacingX 1.0;set newSpacingY 1.0;如果{$oldNumRows>$oldNumCols}{set comment{如果我们的行数大于列数,我们需要选择一个间距,将行数减少到我们选择的最大值。};set newSpacingY[expr 1.0*$oldNumRows*$oldSpacingY/$kMaxNumCells];设置newSpacingX[expr 1.0*$newSpacingY/$oldSpacingY*$oldSpacingX];设置注释{现在我们需要检查这样做是否会导致列低于最小值。如果是这样,请选择间距,使我们只降低到最小值(而不是超过)。};设置newNumCols[expr$oldNumCols*$oldSpacingX/$newSpacingX];如果{$newNumCols<$kMinNumCells}{set newSpacingX[expr 1.0*$oldNumCols*$oldSpacingX/$kMinNumCells];设置newSpacingY[expr 1.0*$newSpacingX/$oldSpacingX*$oldspaccingy];};}否则{设置注释{这与上述情况相同,但行和列的作用相反。};set newSpacingX[expr 1.0*$oldNumCols*$oldSpacingX/$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 newspaccingy[expr 1.0*$newSpacingY/$oldSpacingY*$oldSpacingX];};};FME_执行重采样光栅单元大小$newSpacingX$newSpacingY最近邻居;};}其他{$doSubset}{设置注释{获取某些字符串的值,这些字符串可能是属性或常量。请注意,我们传入了我们正在使用的属性前缀,因为如果其中一个确实是属性,那么它实际上不会是字符串中的确切名称(因为我们在上面重命名了所有属性)。};设置rasterNumRows[FME_GetAttribute _num_rows];设置rasterNumCols[FME_GetAttribute _num_columns];设置注释{仅当指定的起始位置实际位于光栅内时才进行子集设置。};如果{$subsetStartRow<$rasterNumRows&&&$subsetStartCol<$rasterNumCols}{设置注释{现在将子集绑定到光栅的大小,这样我们就不会创建填充。};如果{[expr$subsetStartRow+$subsetnumrow+$subsetNumRows]>$rasterNumRows}{set subsetNumRows[expr$rasterNumRows-$subsetStartRow];};if{[expr$subsetStartCol+$subsetNumCols]>$rasterNumCols}{set subsetNumCols[expr$rasterNumCols-$subsetStartCol];};FME_执行subsetstraster$subsetStartRow$subsetNumRows$subsetstartcols-$subsetstartcols;};};设置注释{删除@RasterProperties添加的所有属性,并从实际属性中删除前缀。我们假设它们都以下划线开头。};FME_执行RemoveAttributes FME_regexp_match{^};foreach oldName$allNames{set newName$kattrfix;append newName$oldName;FME_RenameAttribute$oldName$newName;};};};}工厂定义*TeeFactory工厂名称Vertexcatator输出RasterSetterUpper输入特征类型Vertexcatator输出RasterFeatures输出特征类型viewme输出特征类型Tcl2(“Vertexcatator输出”48059779 4d4d 4e80 90c5 602efdaee65648{ } { } { } { # VertexCreator_Output_48059779_4d4d_4e80_90c5_602efdaee65648_VIS_FEAT_TYPE更改正在可视化的特性的特性类型#。DEFAULT_MACRO VertexCreator_Output_48059779_4d4d_4e80_90c5_602efdaee65648_VIS_FEAT_TYPE VertexCreator_Output$(CATMAC) DEFAULT_MACRO VISUALIZER_FEATURE_FILE $(WORKSPACE_TEMP_DIR)/$(亚搏在线SAFE_FFS_NAME)。数据检查器将限制它在WIN32上读取的最大特性数量,因此我们将相应地限制使用MAX_FEATURES_TO_RECORD指令记录的#特性数量。FACTORY_DEF * RecorderFactory FACTORY_NAME VertexCreator_Output_Recorder输入FEATURE_TYPE __viewme__ _wb_termination_feature是的@FeatureType (TERMINATOR_@Value (_wb_termination_xformer))输入FEATURE_TYPE __viewme__ @FeatureType ($ (VertexCreator_Output_48059779_4d4d_4e80_90c5_602efdaee65648_VIS_FEAT_TYPE)) FEATURE_FILE " $ (VISUALIZER_FEATURE_FILE) "CREATE_SPATIAL_INDEX " $ (VISUALIZER_CREATE_SPATIAL_INDEX) "检查员" $ (VISUALIZER_CREATE_SPATIAL_INDEX) "FSC_SCHEMA BUURTCODE、varchar 255 ,\u创建\u实例,varchar 255 拿安,varchar 255 瓦查尔,泰克斯特 255 、X_COORD varchar 255 ,y_coord,varchar 255 、OPPERVLAK varchar 255 、_column varchar 255 、_row varchar 255 ,_谓词,varchar 255 、_count varchar 255 、Count_GroupBy varchar 255 ,_重叠,varchar 255 、_xmax varchar 255 、_xmin varchar 255 、_ymax varchar 255 、_ymin varchar 255 、_zmax varchar 255 、_zmin varchar 255 Mode Record Store_scanned_metadata record_directly_to_disk是max_features_to_record win32 2000000#--------------------------------------------------------------------#假设是工作区临时DIR已设置和创建。参见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 "";设置逗号“”;foreach attr $ grpbyattrs {set catter“$ catter $ coma $ @ value(\ attr attr \”)“设置逗号“,_,”;};把“宏Catmac _ @ concatenate($ catter)”;}} else {puts "MACRO CATMAC "; }; set safeName "[regsub -all {[^a-zA-Z0-9]} {Buurt} _]_[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 Buurt_DirCreator OUTPUT FEATURE_TYPE __nukeme__ @Tcl2("catch {file mkdir {$(WORKSPACE_TEMP_DIR)}}") FACTORY_DEF * TeeFactory FACTORY_NAME Buurt_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 Buurt_FeatureDirector INPUT FEATURE_TYPE Tester_PASSED_1_8t6d0F2OYOU= TEST &fme_type == "fme_raster" OUTPUT FAILED FEATURE_TYPE Buurt___NotRasterFeatures___ OUTPUT PASSED FEATURE_TYPE Buurt___RasterFeatures___ FACTORY_DEF * TestFactory FACTORY_NAME Buurt___FeatureDirector1 INPUT FEATURE_TYPE Buurt___NotRasterFeatures___ TEST &fme_type == "fme_point_cloud" OUTPUT FAILED FEATURE_TYPE Buurt___VectorFeatures___ OUTPUT PASSED FEATURE_TYPE Buurt___PointCloudFeatures___ # Vector features simply may get their colors overridden FACTORY_DEF * TeeFactory FACTORY_NAME Buurt_VectorSetterUpper INPUT FEATURE_TYPE Buurt___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 Buurt_1a361f47_6c21_4ba0_917d_473b0718362652_thinPointCloud {} { if {[string equal {NO_THINNING} {KEEPNPOINT}]} { FME_Execute ThinPointCloud NO_THINNING "\" \“;}elseif{[字符串等于{NO\u细化}{MAXNUMPOINTS}]}{FME\u执行ThinPointCloud NO\u细化”\” \“;}elseif{[字符串等于{NO\u细化}{FIRSTNPOINTS}]}{FME\u执行ThinPointCloud NO\u细化”\” \""; } elseif{[string equal{NO\u thilling}{LASTNPOINTS}]}{FME\u执行ThinPointCloud NO\u thilling“\” \ ";};} FACTORY_DEF * TeeFactory FACTORY_NAME Buurt___PointCloudThinner输入FEATURE_TYPE Buurt___PointCloudFeatures___输出FEATURE_TYPE __viewme__ @Tcl2 (Buurt_1a361f47_6c21_4ba0_917d_473b0718362652_thinPointCloud) Tcl2 proc Buurt_1a361f47_6c21_4ba0_917d_473b0718362652_prepareRaster {subsetStartRow subsetNumRows subsetStartCol subsetNumCols}{集useDI [string = -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 Buurt_RasterSetterUpper INPUT FEATURE_TYPE Buurt___RasterFeatures___ OUTPUT FEATURE_TYPE __viewme__ @Tcl2("Buurt_1a361f47_6c21_4ba0_917d_473b0718362652_prepareRaster { } { } { } { # Buurt_1a361f47_6c21_4ba0_917d_473b0718362652_VIS_FEAT_TYPE更改正在可视化的特性的特性类型#。DEFAULT_MACRO Buurt_1a361f47_6c21_4ba0_917d_473b0718362652_VIS_FEAT_TYPE burt $(CATMAC) DEFAULT_MACRO VISUALIZER_FEATURE_FILE $(WORKSPACE_TEMP_DIR)/$(亚搏在线SAFE_FFS_NAME)。数据检查器将限制它在WIN32上读取的最大特性数量,因此我们将相应地限制使用MAX_FEATURES_TO_RECORD指令记录的#特性数量。__viewme__ @FeatureType(TERMINATOR_@Value(_wb_termination_xformer)) INPUT FEATURE_TYPE __viewme__ @FeatureType($(Buurt_1a361f47_6c21_4ba0_917d_473b0718362652_VIS_FEAT_TYPE)) FEATURE_FILE "$(VISUALIZER_FEATURE_FILE)"CREATE_SPATIAL_INDEX " $ (VISUALIZER_CREATE_SPATIAL_INDEX) "检查员" $ (VISUALIZER_CREATE_SPATIAL_INDEX) "FSC_SCHEMA BUURTCODE、varchar 255 ,\u创建\u实例,varchar 255 拿安,varchar 255 瓦查尔,泰克斯特 255 、X_COORD varchar 255 ,y_coord,varchar 255 、OPPERVLAK varchar 255 模式记录STORE_SCANNED_METADATA RECORD_DIRECTLY_TO_DISK是的MAX_FEATURES_TO_RECORD WIN32 2000000 # ------------------------------------------------------------------------- FACTORY_DEF * RoutingFactory FACTORY_NAME“目的地功能类型路由相关器”COMMAND_PARM_EVALUATION FEATURE_TYPE * FEATURE_TYPE_ATTRIBUTE SINGLE_PASS输入__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 ") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME输入FEATURE_TYPE“最终输出核武器”__nuke_me __ # ------------------------------------------------------------------------- FACTORY_DEF * CreationFactory CREATE_AT_END输出FEATURE_TYPE __NUKEME__ @TCL(“如果[文件存在{$ (WORKSPACE_TEMP_DIR)}]{设置文件[水珠-nocomplain目录{$ (WORKSPACE_TEMP_DIR)}反面* .ffs];如果{[llength $files] == 1} {set theFile {$(WORKSPACE_TEMP_DIR)/};添加文件[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;} else {[llength $files] == 0} {catch {file delete -force {$(WORKSPACE_TEMP_DIR)}};} else {set filesNoExt {};设置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__