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

best to work in local coordinates

" POSITION="10501.16084523895 4154.6027660276595" TOP_LEFT="10501.16084523895 4154.6027660276595" BOTTOM_RIGHT="10881.358813588136 4012.1016410164093" BOUNDING_RECT="10501.16084523895 4154.6027660276595 380.19796834918634 142.50112501125011" ORDER="500000000000248" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.78431372549019607,0.19607843137254902" SIZE_POLICY="10" ANCHORED_NODE="16">
#!

Find points within 161m

" POSITION="10525.16084523895 3349.2669026690255" TOP_LEFT="10525.16084523895 3349.2669026690255" BOTTOM_RIGHT="10955.16084523895 3350.2669026690255" BOUNDING_RECT="10525.16084523895 3349.2669026690255 430 -1" ORDER="500000000000261" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.78431372549019607,0.19607843137254902" SIZE_POLICY="10" ANCHORED_NODE="20">
#!

Create group Id

" POSITION="11175.879416055161 3914.8975589755887" TOP_LEFT="11175.879416055161 3914.8975589755887" BOTTOM_RIGHT="11174.879416055161 3915.8975589755887" BOUNDING_RECT="11175.879416055161 3914.8975589755887 -1 -1" ORDER="500000000000262" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.78431372549019607,0.19607843137254902" SIZE_POLICY="10" ANCHORED_NODE="32">
#!

Move largest number of neighbors to top of list

" POSITION="11753.009947360475 3952.3979339793382" TOP_LEFT="11753.009947360475 3952.3979339793382" BOTTOM_RIGHT="12245.9972199722 3809.896808968088" BOUNDING_RECT="11753.009947360475 3952.3979339793382 492.98727261172462 142.50112501125011" ORDER="500000000000264" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.78431372549019607,0.19607843137254902" SIZE_POLICY="10" ANCHORED_NODE="19">
#!

Test if point is already grouped

" POSITION="12351.323185047093 3952.3979339793382" TOP_LEFT="12351.323185047093 3952.3979339793382" BOTTOM_RIGHT="12782.323185047093 3953.3979339793382" BOUNDING_RECT="12351.323185047093 3952.3979339793382 431 -1" ORDER="500000000000265" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.78431372549019607,0.19607843137254902" SIZE_POLICY="10" ANCHORED_NODE="36">
#!

Add id to used point list

" POSITION="14094.891188911884 3664.2706527065266" TOP_LEFT="14094.891188911884 3664.2706527065266" BOTTOM_RIGHT="14093.891188911884 3665.2706527065266" BOUNDING_RECT="14094.891188911884 3664.2706527065266 -1 -1" ORDER="500000000000267" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.78431372549019607,0.19607843137254902" SIZE_POLICY="10" ANCHORED_NODE="12">
#!

Build groups

" POSITION="14200.157732827323 3161.3946839468372" TOP_LEFT="14200.157732827323 3161.3946839468372" BOTTOM_RIGHT="14199.157732827323 3162.3946839468372" BOUNDING_RECT="14200.157732827323 3161.3946839468372 -1 -1" ORDER="500000000000268" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.78431372549019607,0.19607843137254902" SIZE_POLICY="10" ANCHORED_NODE="44">
#!

Color groups for display

" POSITION="14704.272282722823 3664.2706527065266" TOP_LEFT="14704.272282722823 3664.2706527065266" BOTTOM_RIGHT="14703.272282722823 3665.2706527065266" BOUNDING_RECT="14704.272282722823 3664.2706527065266 -1 -1" ORDER="500000000000269" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.78431372549019607,0.19607843137254902" SIZE_POLICY="10" ANCHORED_NODE="45">
#!
#! #!#! #! #!#!#! #! #!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#! #!#! #!Creates random points within the area of entire input features.

This transformer accepts any features, but features that don't have area geometry will not be used.

Every resulting point will hold attributes that are held by an input area feature containing the point spatially.

If a point is contained by two or more areas in a same group (i.e. the areas are overlapping), the attributes will be migrated from any one of them.


Note:

This is an experimental transformer. Before adding it to your workspace, check enough whether the implementation is suitable to your purpose.

The implementation has been inspired by this thread in FME Community Answers.

Stratified random point in FME

http://fmepedia.safe.com/CommunityAnswers?id=906a0000000d3suAAA

" doc_dynamic_input_attrs="0" doc_extents="7206 2113" doc_top_left="-1425 -1553" fme_document_guid="f43efd25-5719-4db2-abd9-7f56543c38fb" fme_document_priorguid="f8108d54-3033-47f9-8884-2d177ad47848" fme_process_count="NO_PARALLELISM" fme_process_groups_ordered="No" fme_process_group_by="" fmx_attribute_propogation_mode="AUTO" guid="f43efd25-5719-4db2-abd9-7f56543c38fb" history="2014-09-20,TakashiIijima,OriginalImplementation" is_visible="false" last_save_build="FME(R) 2014 SP3 (20140814 - Build 14391 - WIN32)" last_save_date="2014-09-20T19:53:29" markdown_description="" markdown_usage="" python_compatibility="" suppress_upgrade="false" title="RandomPointGenerator" usage="

Parameters

Group By:

Select attributes that should be used to group input features.


Number of Points:

Specify the number of points to be created.

If you specified the "Group By" parameter, this parameter means the number of points per a group.

Otherwise, it means the total number of points to be created.

" use_markdown="" view_position="-300.003 584.381" xform_deprecated="No" zoom_scale="100"> #! #!#!#!#!#!#! #!

Density of points for each box belonging to same group will be approximately identical.

" POSITION="294 -686" TOP_LEFT="294 -686" BOTTOM_RIGHT="1195 -794" BOUNDING_RECT="294 -686 901 108" ORDER="500000000000000" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.78431372549019607,0.19215686274509805" SIZE_POLICY="10" ANCHORED_NODE="0">
#!#!
#! #!#! #! #!#! #!#! #!#! #!#! #!#! #!#!#! #! #!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!Evaluate1.0*$(NUM_POINTS)*Value_area2._sumValue_area1._sum'BOOL_OP;OR;COMPOSITE_TEST;;TEST Evaluate1.0*$(NUM_POINTS)*Value_area2._sumValue_area1._sum < $(MIN_NUM)'$(MIN_NUM)'FME_NUM_CONDITIONS2___",_ratio,EvaluatedoubleValue_area2Value_area2._sum,_width,EvaluateValue_xmax-Value_xmin,_height,EvaluateValue_ymax-Value_ymin">#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#! #! #!#! #!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#! #!#!
#!
#! #!#!
Fme_python_version 27 GUI忽略SourceDataset_MITAB_1、MITAB_IN_FME_GROUP_NAMED1_MITAB_1 MITAB_IN_FME_TABLE_PASSWORD_MITAB_1, MITAB_IN_FME_GROUP_NAMED2_MITAB_1、MITAB_IN_FME_GROUP_NAMED3_MITAB_1 MITAB_IN_ENCODING_MITAB_1, MITAB_IN_USE_SEARCH_ENVELOPE_MITAB_1, MITAB_IN_SEARCH_ENVELOPE_MINX_MITAB_1, MITAB_IN_SEARCH_ENVELOPE_MINY_MITAB_1, MITAB_IN_SEARCH_ENVELOPE_MAXX_MITAB_1 MITAB_IN_SEARCH_ENVELOPE_MAXY_MITAB_1, mitab_in_search_envelope e_coordinate_system_mitab_1, mitab_in_clip_to_envelope e_mitab_1,MITAB_IN_NETWORK_AUTHENTICATION_MITAB_1 DEFAULT_MACRO AANTALCLUSTERS 10 GUI可选RANGE_SLIDER AANTALCLUSTERS "RANGE:_0,]%PRECISION:0"集群数量:DEFAULT_MACRO Kickout_Radius 0.038 GUI可选文本Kickout_Radius输入你的kickout半径:DEFAULT_MACRO SourceDataset_MITAB_4 \\vmware-host\Shared Folders\Downloads\Vancouver\Vancouver.zip GUI MULTIFILE SourceDataset_MITAB_4 TAB_Files(*.tab)|*.tab|All_Files(*)|* Source MapInfo TAB文件:INCLUDE [if {{$(SourceDataset_MITAB_4)} == {}} {puts_real {Parameter 'SourceDataset_MITAB_4'必须给定一个值};退出1;};) # !START_HEADER # !Start_wb_header reader_type multi_reader multi_reader_type {0} mitab multi_reader_keyword {0} mitab_1 multi_reader_gen_directives {0} . Start_wb_header reader_type multi_reader multi_reader__type {0} mitab multi_reader_keyword {0}SEARCH_ENVELOPE_MAXX EXPOSE_ATTRS_GROUP, SEARCH_ENVELOPE_MINX 0, 0, MITAB_EXPOSE_FORMAT_ATTRS, CLIP_TO_ENVELOPE,不,SEARCH_ENVELOPE_COORDINATE_SYSTEM, _MITAB_FULL_ENHANCED_GEOMETRY,是的,USE_SEARCH_ENVELOPE,不,SEARCH_ENVELOPE_MINY, 0, 0 FME_TABLE_PASSWORD,编码,SEARCH_ENVELOPE_MAXY, _MERGE_SCHEMAS,是的WRITER_TYPE零WRITER_KEYWORD NULL_DEST NULL_DEST_DATASET null #! END_WB_HEADER #! START_WB_HEADER MACRO WB_KEYWORD "MITAB_1" #! END_WB_HEADER #! START_SOURCE_HEADER MITAB MITAB_1 # ============================================================================ # BUG47627: MITAB rich compatibility flag MITAB_1_MITAB_FULL_ENHANCED_GEOMETRY YES # ============================================================================ # The following GUI line prompts for a folder to be used as the # source of the Mapinfo TAB files. # 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_MITAB_1 $(SourceDataset)} \ } ] #! END_WB_HEADER #! START_SOURCE_HEADER MITAB MITAB_1 DEFAULT_MACRO SourceDataset_MITAB_1 $(SourceDataset_MITAB_4) GUI MULTIFILE SourceDataset_MITAB_1 TAB_Files(*.tab)|*.tab|All_Files(*)|* Source MapInfo TAB File(s): # ============================================================================ # [REG 20070109] We want to allow the user to choose heterogeneous collections # by choosing not to break collections in workbench or other applications. # However, we don't want to create classic geometry heterogenous collections, # so the best way to set that they want heterogenous collections is to specify # that they want to FME_USE_RICH_GEOMETRY. # The following asks whether MIF/Mapinfo collections should be broken down into # their component parts when reading. By default we break down collections, but # if you are writing to the same format, you may want to preserve collections. #__ #DEFAULT_MACRO _BREAK_COLLECTION yes #__ #GUI CHOICE _BREAK_COLLECTION yes%no Break Collections: #__ #MITAB_BREAK_COLLECTION "$(_BREAK_COLLECTION_MITAB_1)" #__ # ===================================================================== # 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 _,除了# for _text_string始终需要编码。MITAB_1_ENCODED_ATTRS mapinfo_text_string MITAB_1_UNENCODED_ATTR_PREFIX fme_ mapinfo_ DEFAULT_MACRO MITAB_IN_FME_GROUP_NAMED1_MITAB_1 GUI可选DISCLOSUREGROUP MITAB_IN_FME_GROUP_NAMED1_MITAB_1 MITAB_IN_FME_TABLE_PASSWORD_MITAB_1 FME表DEFAULT_MACRO MITAB_IN_FME_TABLE_PASSWORD_MITAB_1 MITAB_1_FME_TABLE_PASSWORD “$(MITAB_IN_FME_TABLE_PASSWORD_MITAB_1)” 为FME表GUI可选PASSWORD_ENCODED MITAB_IN_FME_TABLE_PASSWORD_MITAB_1密码:DEFAULT_MACRO MITAB_IN_FME_GROUP_NAMED2_MITAB_1 GUI可选DISCLOSUREGROUP MITAB_IN_FME_GROUP_NAMED2_MITAB_1 MITAB_IN_PRESERVE_TYPE高级选项DEFAULT_MACRO MITAB_IN__MITAB_FULL_ENHANCED_GEOMETRY_MITAB_1 YES MITAB_1__MITAB_FULL_ENHANCED_GEOMETRY“$(MITAB_IN__MITAB_FULL_ENHANCED_GEOMETRY_MITAB_1)“DEFAULT_MACRO MITAB_IN_FME_GROUP_NAMED3_MITAB_1 GUI可选DISCLOSUREGROUP MITAB_IN_FME_GROUP_NAMED3_MITAB_1 MITAB_IN_ENCODING_MITAB_1文件内容DEFAULT_MACRO MITAB_IN_ENCODING_MITAB_1 MITAB_1_ENCODING ”$(MITAB_IN_ENCODING_MITAB_1)“ GUI可选STRING_OR_ENCODING MITAB_IN_ENCODING_MITAB_1 SJIS%CP437%CP850%CP852%CP855%CP857%CP860%CP861%CP863%CP864%CP865%CP869%CP874%CP932%CP936%CP950%CP1250%CP1251%CP1252%CP1253%CP1254%CP1255%CP1256%CP1257%ISO8859-1%ISO8859-2%ISO8859-3%ISO8859-4%ISO8859-5%ISO8859-6%ISO8859-7%ISO8859-8%ISO8859-9字符编码:DEFAULT_MACRO MITAB_IN_EXPOSE_ATTRS_GROUP_MITAB_1 MITAB_1_EXPOSE_ATTRS_GROUP “$(MITAB_IN_EXPOSE_ATTRS_GROUP_MITAB_1)” #包含该文件中源设置部分添加外部搜索包膜处理#零作为默认的手段,我们没有做任何搜索 - 这使得工作台快乐DEFAULT_MACRO MITAB_IN_USE_SEARCH_ENVELOPE_MITAB_1 NO MITAB_1_USE_SEARCH_ENVELOPE“$(MITAB_IN_USE_SEARCH_ENVELOPE_MITAB_1)” GUI ACTIVEDISCLOSUREGROUP MITAB_IN_USE_SEARCH_ENVELOPE_MITAB_1 MITAB_IN_SEARCH_ENVELOPE_MINX_MITAB_1%MITAB_IN_SEARCH_ENVELOPE_MINY_MITAB_1%MITAB_IN_SEARCH_ENVELOPE_MAXX_MITAB_1%mitab_in_search_envelope_maxy_mitab_1%mitab_in_search_envelope_coords_system_mitab_1%mitab_iN_CLIP_TO_ENVELOPE_MITAB_1%MITAB_IN_SEARCH_METHOD%MITAB_IN_SEARCH_METHOD_FILTER%MITAB_IN_SEARCH_ORDER%MITAB_IN_SEARCH_FEATURE%MITAB_IN_DUMMY_SEARCH_ENVELOPE_PARAMETER使用搜索信封#=========================================================================== GUI LOOKUP MITAB_IN_SEARCH_ENVELOPE_MINX_MITAB_1 ,0 DEFAULT_MACRO MITAB_IN_SEARCH_ENVELOPE_MINX_MITAB_1 0 MITAB_1_SEARCH_ENVELOPE “$(MITAB_IN_SEARCH_ENVELOPE_MINX_MITAB_1)” GUI OPTIONAL FLOAT MITAB_IN_SEARCH_ENVELOPE_MINX_MITAB_1最小X:#=========================================================================== GUI LOOKUP MITAB_IN_SEARCH_ENVELOPE_MINY_MITAB_1 ,0 default_macro mitab_in_search_envelope miny_mitab_1 0 mitab_1_search_envelope "$(mitab_in_search_envelope_miny_mitab_1)"GUI可选浮MITAB_IN_SEARCH_ENVELOPE_MINY_MITAB_1最低Y : # =========================================================================== GUI查找MITAB_IN_SEARCH_ENVELOPE_MAXX_MITAB_1 ,0 DEFAULT_MACRO MITAB_IN_SEARCH_ENVELOPE_MAXX_MITAB_1 0 MITAB_1_SEARCH_ENVELOPE “$(MITAB_IN_SEARCH_ENVELOPE_MAXX_MITAB_1)” GUI OPTIONAL FLOAT MITAB_IN_SEARCH_ENVELOPE_MAXX_MITAB_1最大X:#=========================================================================== GUI LOOKUP MITAB_IN_SEARCH_ENVELOPE_MAXY_MITAB_1 ,0 DEFAULT_MACRO MITAB_IN_SEARCH_ENVELOPE_MAXY_MITAB_1 0 MITAB_1_SEARCH_ENVELOPE “$(MITAB_IN_SEARCH_ENVELOPE_MAXY_MITAB_1)” GUI应用浮动MITAB_IN_SEARCH_ENVELOPE_MAXY_MITAB_1最大Y:#=========================================================================== GUI LOOKUP MITAB_IN_SEARCH_ENVELOPE_COORDINATE_SYSTEM_MITAB_1 ,DEFAULT_MACRO MITAB_IN_SEARCH_ENVELOPE_COORDINATE_SYSTEM_MITAB_1 MITAB_1_SEARCH_ENVELOPE “$(MITAB_IN_SEARCH_ENVELOPE_COORDINATE_SYSTEM_MITAB_1)” GUI可选COORDSYS MITAB_IN_SEARCH_ENVELOPE_COORDINATE_SYSTEM_MITAB_1搜索信封坐标系:#==============================我们现在:=============================================#BUG18999有一个柔软的剪辑依傍像本地空间索引#因此,我们重新引入剪辑笼罩作为用户选择。#Defualt软夹按照我们模仿GUI LOOKUP MITAB_IN_CLIP_TO_ENVELOPE_MITAB_1现有数据库的读者 ,NO DEFAULT_MACRO MITAB_IN_CLIP_TO_ENVELOPE_MITAB_1 NO MITAB_1_CLIP_TO_ENVELOPE “$(MITAB_IN_CLIP_TO_ENVELOPE_MITAB_1)” GUI可选复选框MITAB_IN_CLIP_TO_ENVELOPE_MITAB_1 YES%的NO剪辑搜索信封#====================================================== DEFAULT_MACROMITAB_IN_NETWORK_AUTHENTICATION_MITAB_1 MITAB_1_NETWORK_AUTHENTICATION “$(MITAB_IN_NETWORK_AUTHENTICATION_MITAB_1)” GUI可选AUTHENTICATOR MITAB_IN_NETWORK_AUTHENTICATION_MITAB_1 CONTAINER%GROUP%CONTAINER_TITLE% “网络身份验证” %PROMPT_TYPE%NETWORK网络验证#============================================================================ DEFAULT_MACRO MITAB_IN_ATTRIBUTE_READING_MITAB_1 ALL MITAB_1_ATTRIBUTE_READING “$(MITAB_IN_ATTRIBUTE_READING_MITAB_1)” #============================================================================ MITAB_1_GENERATE_FME_BUILD_NUM 18312 MITAB_1_DATASET“$(SourceDataset_MITAB_1)“#!END_SOURCE_HEADER # !START_WB_HEADER#!END_WB_HEADER # !END_HEADER LOG_FILENAME “$(FME_MF_DIR)米贪婪-clustering.log” LOG_APPEND NO LOG_FILTER_MASK -1 LOG_MAX_FEATURES 200 LOG_MAX_RECORDED_FEATURES 200 FME_REPROJECTION_ENGINE FME FME_IMPLICIT_CSMAP_REPROJECTION_MODE自动FME_GEOMETRY_HANDLING增强FME_STROKE_MAX_DEVIATION 0 DEFAULT_MACRO DATASET_KEYWORD_MITAB_1 MITAB_1#------------------------------------------------------------------------- MITAB_1_READER_META_ATTRIBUTES fme_feature_type # ------------------------------------------------------------------------- MULTI_READER_CONTINUE_ON_READER_FAILURE No # ------------------------------------------------------------------------- MACRO WORKSPACE_NAME m-greedy-clustering 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 # ------------------------------------------------------------------------- MITAB_1_DEF Vancouver CMANAME char(100) # ------------------------------------------------------------------------- FACTORY_DEF * RoutingFactory FACTORY_NAME "Router and Unexpected Input Remover" COMMAND_PARM_EVALUATION SINGLE_PASS MULTI_READER_KEYWORD $(DATASET_KEYWORD_MITAB_1) INPUT FEATURE_TYPE * ROUTE MITAB MITAB_1::Vancouver multi_reader_keyword,$(DATASET_KEYWORD_MITAB_1) TO FME_GENERIC ::Vancouver ALIAS_GEOMETRY MERGE_INPUT Yes OUTPUT ROUTED FEATURE_TYPE * MITAB_1_MERGE_DEF MITAB_1::Vancouver EXACT Vancouver # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME "Vancouver (MITAB_1) Splitter" INPUT FEATURE_TYPE Vancouver OUTPUT FEATURE_TYPE Vancouver_MITAB_1 DEFAULT_MACRO WB_CURRENT_CONTEXT # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME "RandomPointGenerator Area Input Collector" INPUT FEATURE_TYPE Vancouver_MITAB_1 OUTPUT FEATURE_TYPE RandomPointGenerator_Area MACRO RandomPointGenerator_WORKSPACE_NAME RandomPointGenerator MACRO $(RandomPointGenerator_WORKSPACE_NAME)_XFORMER_NAME RandomPointGenerator MACRO $(RandomPointGenerator_WORKSPACE_NAME)_TRANSFORMER_GROUP MACRO $(RandomPointGenerator_WORKSPACE_NAME)___COMPOUND_PARAMETERS MACRO $(RandomPointGenerator_WORKSPACE_NAME)_SUB_DOC_NAME RandomPointGenerator MACRO $(RandomPointGenerator_WORKSPACE_NAME)_GROUP_BY MACRO $(RandomPointGenerator_WORKSPACE_NAME)_NUM_POINTS 5000 MACRO $(RandomPointGenerator_WORKSPACE_NAME)_MIN_NUM 10 MACRO $(RandomPointGenerator_WORKSPACE_NAME)_DENSIFY_FACTOR 2 DEFAULT_MACRO RandomPointGenerator_WORKSPACE_NAME "" INCLUDE [puts {MACRO WB_OLD_CONTEXT_$(RandomPointGenerator_WORKSPACE_NAME) $(WB_CURRENT_CONTEXT)}; puts {MACRO WB_CURRENT_CONTEXT $(RandomPointGenerator_WORKSPACE_NAME)}] FACTORY_DEF * TeeFactory FACTORY_NAME "$(RandomPointGenerator_WORKSPACE_NAME)_Area1550271943 Input Splitter" INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Area" OUTPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Area" # ------------------------------------------------------------------------- MACRO OUTPUT_AREA_FTYPE not_selected MACRO OUTPUT_AREA_FTYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_AREA MACRO OUTPUT_ELLIPSE_FTYPE not_selected MACRO OUTPUT_ELLIPSE_FTYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_ELLIPSE MACRO OUTPUT_INSTANCE_FTYPE not_selected Lookup $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_RouterTable "" "not_selected" fme_area $(OUTPUT_AREA_FTYPE) fme_ellipse $(OUTPUT_ELLIPSE_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 $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_InputPassThrough INPUT FEATURE_TYPE “$(RandomPointGenerator_WORKSPACE_NAME)_Area” 输出FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___ Input___ @Geometry(FIX_FMETYPE_FMEGEOMETRY)FACTORY_DEF $(INSTANCE_FILTERING)TestFactory中FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_InstanceTest INPUT FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___ Input___TEST @Geometry(IS_GEOMETRY_INSTANCE)== 1 OUTPUT PASSED FEATURE_TYPE $(OUTPUT_INSTANCE_FTYPE)OUTPUT失败FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___ Input___ FACTORY_DEF $(COLLECTION_HANDLING)TestFactory中FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_CollectionTest INPUT FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___ Input___测试与fme_type == “fme_collection”OUTPUT失败FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___ Not_Collection___的Passed FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___ Collection___ FACTORY_DEF $(COLLECTION_HANDLING)DeaggregateFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_Deagg INPUT FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___ Collection___ HOMOGENIZE_COLLECTIONS YES YES递推YES SET_FME_TYPE INSTANTIATE_GEOMETRY_INSTANCES_NEW 输出点FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___ HomogeneousAggregate___输出线路FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___ HomogeneousAggregate___输出面FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___ HomogeneousAggregate___输出DONUT FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___ HomogeneousAggregate___产出的总FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___ HomogeneousAggregate___ FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_RouterPrepper INPUTFEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___ HomogeneousAggregate___ INPUT FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___ Not_Collection___ INPUT FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___ Input___ OUTPUT FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter ___坦然___$(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_15713c9b_f161_47de_9f39_9f8b2282f6f011_targetFeatureType @Lookup($(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_RouterTable,&fme_type) FACTORY_DEF * TestFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_Router INPUT FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter___Prepped___ TEST @Value($(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_15713c9b_f161_47de_9f39_9f8b2282f6f011_targetFeatureType) != "not_selected" OUTPUT PASSED FEATURE_TYPE * @FeatureType(@Value($(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_15713c9b_f161_47de_9f39_9f8b2282f6f011_targetFeatureType)) @RemoveAttributes($(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_15713c9b_f161_47de_9f39_9f8b2282f6f011_targetFeatureType) OUTPUT FAILED FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_ “@RemoveAttributes($(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_15713c9b_f161_47de_9f39_9f8b2282f6f011_targetFeatureType)FACTORY_DEF * TeeFactory FACTORY_NAME” $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter 变压器输出Nuker “INPUT FEATURE_TYPE” $(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_ “#------------------------------------------------------------------------- Tcl2 proc $(RandomPointGenerator_WORKSPACE_NAME)_ParameterFetcher_doFetch {} { foreach {name val} {"randompointgenerator.group_by {$($(RandomPointGenerator_WORKSPACE_NAME)_GROUP_BY$encode)}"} { if { [string match {* *} $ VAL] == 1} {集VAL [FME_Execute EvaluateExpression {STRING} $ VAL {$(RandomPointGenerator_WORKSPACE_NAME)_ParameterFetcher}];} elseif的{[字符串匹配{* FME_CONDITIONAL *} $ VAL] == 1} {集VAL [FME_Execute EvaluateExpression {STRING} $ VAL {$(RandomPointGenerator_WORKSPACE_NAME)_ParameterFetcher}];}否则{集VAL [FME_DecodeTextOrAttr $ VAL]。};FME_SetAttribute [FME_DecodeText $名称] $ VAL}} FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_ParameterFetcher INPUT FEATURE_TYPE “$(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_AREA” INPUT FEATURE_TYPE “$(RandomPointGenerator_WORKSPACE_NAME)_GeometryFilter_ELLIPSE” 输出FEATURE_TYPE “$(RandomPointGenerator_WORKSPACE_NAME)_ParameterFetcher_OUTPUT” @ TCL2($(RandomPointGenerator_WORKSPACE_NAME)_ParameterFetcher_doFetch)#------------------------------------------------------------------------- TCL2 FME_Decode PROC concatGroupByAttributeValues 价值观 Foreach. 景点 FME_GetAttribute randompointgenerator.group_by. lappend 价值观 FME_GetAttribute 景点 返回 加入 价值观 _ 宏复制器@Tcl2(“”)包括[if{[string length{}]==0}{put{MACRO COPIER 1}}}MACRO outputtr“randompointgenerator.group_id”包括[if{[string length{randompointgenerator.group_id}==0}{put{MACRO outputtr}}工厂工厂名称$(randompointgenerator_工作区名称)}tclu“$(RandomPointGenerator\u WORKSPACE\u NAME)\u ParameterFetcher\u OUTPUT”份数$(复印机)输出功能\u类型“$(RandomPointGenerator\u WORKSPACE\u NAME)\u TclCaller\u OUTPUT”$(OutputTR)@Tcl2(“concatGroupByAttributeValues”)\#--------------------------------------------------------------工厂\u DEF*SortFactory工厂\u名称$(RandomPointGenerator\u WORKSPACE\u NAME)\分类器输入功能\u TYPE“$(RandomPointGenerator\u WORKSPACE\u NAME)\ TclCaller\u输出“按RandomPointGenerator.group排序”\ id ALPHA升序输出排序功能\u TYPE“$(RandomPointGenerator\u WORKSPACE\u NAME)\分类器\u排序的“工厂定义*工厂名称”$(RandomPointGenerator\u WORKSPACE\u NAME)\分类器排序的拆分器“输入功能”类型“$(随机点生成器“工作区”名称)“\u排序的”输出功能”类型“$(随机点生成器“工作区”名称)“\u排序的”\u排序的”\u 0\u xVKS7A8AJxE=“输出功能”类型“$(随机点生成器“工作区”名称)\u排序的”\u排序的”\u 1+dZRsoI37hM=“\35;--------------------------------------------------------------------------包括[设置宏行“宏$(随机点生成器\u工作区\u名称)\u属性移动器\u列表\u EXP”;foreach attr[split”“{set attr[FME_DecodeText$attr];集合attr[regsub“{}$”$attr“{}.*]”;设置attr[regsub-all“{}”$attr“{\[0-9\]+}]”;追加宏行“,^$attr$”;};放入$macroLine;]工厂名称$(RandomPointGenerator工作区名称)$(RandomPointGenerator工作区名称)$(RandomPointGenerator工作区名称)$工厂名称$(RandomPointGenerator工作区名称)$属性移动器输入特征类型“$(RandomPointGenerator工作区名称)$(RandomPointGenerator.group by)排序器@RemoveAttributes(fme_regexp_match“$($(RandomPointGenerator_WORKSPACE_NAME)(u AttributeRemover_LIST_EXP))---------------------------------------------包括[设置宏行“宏$(RandomPointGenerator_WORKSPACE_NAME)(u AttributeKeeper)b7623860(da88)4a37_b3da9027473779AE511_LIST_EXP”;foreach attr[split”“{set attr[FME_DecodeText$attr];集合attr[regsub“{}$”$attr“{}.*]”;设置attr[regsub-all“{}”$attr“{\[0-9\]+}]”;追加宏行“,^$attr$”;};放入$macroLine;]工厂名称$(RandomPointGenerator工作区名称)$(RandomPointGenerator工作区名称)$工厂名称$(RandomPointGenerator工作区名称)$属性保持器输入功能\u类型“$(RandomPointGenerator工作区名称)\u排序器\u排序\u 0\u xVKS7A8AJxE=“输出{特征\u类型”$(RandomPointGenerator工作区名称)\u属性保持器\u输出”@kepatteributes(RandomPointGenerator.group\u id,fme\u regexp匹配,“^fme$($(RandomPointGenerator\u WORKSPACE\u NAME)$属性保持器\u b7623860\u da88\u 4a37\u b3da\u 902747379ae511\u LIST\u EXP)}第三十七天---------------------------------------------工厂定义*DeaggregateFactory\u NAME$(RandomPointGenerator\u WORKSPACE\u NAME)\u解聚集器输入特性\u类型”$(RandomPointGenerator\u WORKSPACE\u NAME)\u AttributeKeeper\u输出“ATTR\u ACCUM\u模式”处理\u冲突“ATTR\u冲突\u RES”传入\u如果\u冲突“传入\u前缀” “递归是SPLIT_COMPOSITES无INSTANTIATE_GEOMETRY_INSTANCES_NEW没有SET_FME_TYPE是输出点FEATURE_TYPE ”$(RandomPointGenerator_WORKSPACE_NAME)_Deaggregator_DEAGGREGATED“ 输出线路FEATURE_TYPE ”$(RandomPointGenerator_WORKSPACE_NAME)_Deaggregator_DEAGGREGATED“ 输出面FEATURE_TYPE ”$(RandomPointGenerator_WORKSPACE_NAME)_Deaggregator_DEAGGREGATED“ 输出DONUT FEATURE_TYPE ”$(RandomPointGenerator_WORKSPACE_NAME)_Deaggregator_DEAGGREGATED“ OUTPUT骨料FEATURE_TYPE “$(RandomPointGenerator_WORKSPACE_NAME)_Deaggregator_DEAGGREGATED” #------------------------------------------------------------------------- FACTORY_DEF * TransformFact:3:AreaOnAreaOverlayer FACTORY_NAME "$(RandomPointGenerator_WORKSPACE_NAME)_AreaOnAreaOverlayer" FACTORY_META_PARAMS TRANSFORMER_NAME:"$(RandomPointGenerator_WORKSPACE_NAME)_AreaOnAreaOverlayer" TRANSFORMER_PARAMS:XFORMER_NAME,$(RandomPointGenerator_WORKSPACE_NAME)_AreaOnAreaOverlayer,TRANSFORMER_GROUP,,PARAMETERS_GROUP,,GRP_BY,randompointgenerator.group_id,OVC_ATTR,,LIST_NAME, PROCESS_GROUP_BY randompointgenerator.group_id MULTI_PROCESS "NO_PARALLELISM" GROUPS_ARE_ORDERED Yes INPUT AREA FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Deaggregator_DEAGGREGATED" OUTPUT AREA FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_AreaOnAreaOverlayer_AREA" # ------------------------------------------------------------------------- INCLUDE [ if { ({Plane Area} == {Sloped Area}) } { puts {MACRO $(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator_func @Area(REJECTABLE,SLOPED_AREAS,"1")}; } else { puts {MACRO $(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator_func @Area(REJECTABLE,"1")}; } ] FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_AreaOnAreaOverlayer_AREA" @RenameAttributes(FME_STRICT,___fme_rejection_code___,fme_rejection_code) OUTPUT FEATURE_TYPE ___TOREJECTOR___ "_area1" $($(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator_func) FACTORY_DEF * TestFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator_Rejector INPUT FEATURE_TYPE ___TOREJECTOR___ TEST @Value(fme_rejection_code) != "" OUTPUT FAILED FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator_OUTPUT" @RenameAttributes(FME_STRICT,fme_rejection_code,___fme_rejection_code___) # ------------------------------------------------------------------------- # check if we have to do the min bounding box calculation INCLUDE [ if { {BB} == {MINBB} } { puts {MACRO $(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_BBFunc @Bounds(MIN_BOUNDING,,)}; } else { puts {MACRO $(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_BBFunc @Bounds(___MINX,___MAXX,___MINY,___MAXY,___MINZ,___MAXZ,GEOMETRIC) @Tcl2($(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_ab3e94db_45e4_4002_a67b_d995074e94dc11_set_geom_and_type)}; } ] Tcl2 proc $(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_ab3e94db_45e4_4002_a67b_d995074e94dc11_set_geom_and_type {} { if {[FME_Coordinates numCoords] > 0} { FME_Execute RemoveGeometry; set minX [FME_GetAttribute ___MINX]; set minY [FME_GetAttribute ___MINY]; set maxX [FME_GetAttribute ___MAXX]; set maxY [FME_GetAttribute ___MAXY]; if { [string is double $minX] && [string is double $maxX] } { set xSame [expr $minX == $maxX] } else { set xSame [string equal $minX $maxX] }; if { [string is double $minY] && [string is double $maxY] } { set ySame [expr $minY == $maxY] } else { set ySame [string equal $minY $maxY] }; FME_Coordinates addCoord $minX $minY; if {$xSame && $ySame} { FME_Execute GeometryType fme_point; FME_SetAttribute fme_type fme_point } elseif {$xSame || $ySame} { FME_Coordinates addCoord $maxX $maxY; FME_Execute GeometryType fme_line; FME_SetAttribute fme_type fme_line } else { FME_Coordinates addCoord $minX $maxY; FME_Coordinates addCoord $maxX $maxY; FME_Coordinates addCoord $maxX $minY; FME_Coordinates addCoord $minX $minY; FME_Execute GeometryType fme_polygon; FME_SetAttribute fme_type fme_area }; FME_UnsetAttributes ___MINX ___MAXX ___MINY ___MAXY ___MINZ ___MAXZ; set width [expr $maxX - $minX]; set length [expr $maxY - $minY]; if {$width > $length} { set temp $length; set length $width; set width $temp; }; if { {} != {} } { FME_SetAttribute {""} $width; }; if { {} != {} } { FME_SetAttribute {""} $length; } } } FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator_OUTPUT" OUTPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_BOX" @Force2D() $($(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_BBFunc) # ------------------------------------------------------------------------- FACTORY_DEF * TransformFact:11:Dissolver FACTORY_NAME "$(RandomPointGenerator_WORKSPACE_NAME)_Dissolver" FACTORY_META_PARAMS TRANSFORMER_NAME:"$(RandomPointGenerator_WORKSPACE_NAME)_Dissolver" TRANSFORMER_PARAMS:XFORMER_NAME,$(RandomPointGenerator_WORKSPACE_NAME)_Dissolver,TRANSFORMER_GROUP,,GROUP_BY,randompointgenerator.group_id,PARAMETERS_GROUP,,DIS_ATTR,,ATTR_ACCUM_GROUP,,ACCUM_INPUT_ATTRS,No,SUM,_area1,AV,,WEIGHT,,LIST_NAME,,PARAMETERS_GROUP_ADVANCED,,NO_OVRLP,No PROCESS_GROUP_BY randompointgenerator.group_id MULTI_PROCESS "NO_PARALLELISM" GROUPS_ARE_ORDERED Yes INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_BOX" OUTPUT AREA FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Dissolver_AREA" # ------------------------------------------------------------------------- # check if we have to do the min bounding box calculation INCLUDE [ if { {BB} == {MINBB} } { puts {MACRO $(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_2_BBFunc @Bounds(MIN_BOUNDING,,)}; } else { puts {MACRO $(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_2_BBFunc @Bounds(___MINX,___MAXX,___MINY,___MAXY,___MINZ,___MAXZ,GEOMETRIC) @Tcl2($(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_2_5de1800f_f80b_4723_9ccf_fbe922ad202311_set_geom_and_type)}; } ] Tcl2 proc $(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_2_5de1800f_f80b_4723_9ccf_fbe922ad202311_set_geom_and_type {} { if {[FME_Coordinates numCoords] > 0} { FME_Execute RemoveGeometry; set minX [FME_GetAttribute ___MINX]; set minY [FME_GetAttribute ___MINY]; set maxX [FME_GetAttribute ___MAXX]; set maxY [FME_GetAttribute ___MAXY]; if { [string is double $minX] && [string is double $maxX] } { set xSame [expr $minX == $maxX] } else { set xSame [string equal $minX $maxX] }; if { [string is double $minY] && [string is double $maxY] } { set ySame [expr $minY == $maxY] } else { set ySame [string equal $minY $maxY] }; FME_Coordinates addCoord $minX $minY; if {$xSame && $ySame} { FME_Execute GeometryType fme_point; FME_SetAttribute fme_type fme_point } elseif {$xSame || $ySame} { FME_Coordinates addCoord $maxX $maxY; FME_Execute GeometryType fme_line; FME_SetAttribute fme_type fme_line } else { FME_Coordinates addCoord $minX $maxY; FME_Coordinates addCoord $maxX $maxY; FME_Coordinates addCoord $maxX $minY; FME_Coordinates addCoord $minX $minY; FME_Execute GeometryType fme_polygon; FME_SetAttribute fme_type fme_area }; FME_UnsetAttributes ___MINX ___MAXX ___MINY ___MAXY ___MINZ ___MAXZ; set width [expr $maxX - $minX]; set length [expr $maxY - $minY]; if {$width > $length} { set temp $length; set length $width; set width $temp; }; if { {} != {} } { FME_SetAttribute {""} $width; }; if { {} != {} } { FME_SetAttribute {""} $length; } } } FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_2 INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Dissolver_AREA" OUTPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_2_BOX" @Force2D() $($(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_2_BBFunc) # ------------------------------------------------------------------------- INCLUDE [ if { ({Plane Area} == {Sloped Area}) } { puts {MACRO $(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator_2_func @Area(REJECTABLE,SLOPED_AREAS,"1")}; } else { puts {MACRO $(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator_2_func @Area(REJECTABLE,"1")}; } ] FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator_2 INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_BoundingBoxReplacer_2_BOX" @RenameAttributes(FME_STRICT,___fme_rejection_code___,fme_rejection_code) OUTPUT FEATURE_TYPE ___TOREJECTOR___ "_area2" $($(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator_2_func) FACTORY_DEF * TestFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator_2_Rejector INPUT FEATURE_TYPE ___TOREJECTOR___ TEST @Value(fme_rejection_code) != "" OUTPUT FAILED FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator_2_OUTPUT" @RenameAttributes(FME_STRICT,fme_rejection_code,___fme_rejection_code___) # ------------------------------------------------------------------------- DEFAULT_MACRO __$(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator_79bc4b52_e282_475b_bb2c_3149bc664b4311_GROUP_BY MACRO __$(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator_79bc4b52_e282_475b_bb2c_3149bc664b4311_GROUP_BY randompointgenerator.group_id DYNAMIC_FUNCTION_CONFIGURATION Python FMEOBJECTS DYNAMIC_FUNCTION_CONFIGURATION Python import StatisticsCalculator DYNAMIC_FUNCTION_CONFIGURATION Python "StatisticsCalculator.connectTransformer( '$(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator',{ 'GROUP_BY_MACRO':'__$(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator_79bc4b52_e282_475b_bb2c_3149bc664b4311_GROUP_BY', 'GROUP_BY':'randompointgenerator.group_id', 'STATS_ATTRS':'_area1 _area2', 'SUM_ATTR':'_sum', 'COMPUTE_HISTOGRAM':'NO', 'HISTO_ATTR':' ”, 'PREPEND_ATTR_NAME': '是的',无:无})” FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator_InputProcessor INPUT FEATURE_TYPE “$(RandomPointGenerator_WORKSPACE_NAME)_AreaCalculator_2_OUTPUT” 输出FEATURE_TYPE __ORIGINAL__ @Python(StatisticsCalculator.recordFeature,$(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator)FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator_UnneededInputNuker INPUT FEATURE_TYPE __ORIGINAL__输出FEATURE_TYPE “$(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator_COMPLETE” FACTORY_DEF * SortFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator_CompleteOutputter INPUT FEATURE_TYPE __UNUSED_INPUT_TO_GUARANTEE_FACTORY_DOESNT_CONSUME_EVERYTHING__ INPUT FEATURE_TYPE “$(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator_COMPLETE” 输出已排序FEATURE_TYPE“$(RandomPointGenerator_WORKSPACE_NAME)_statisticscalculator_compl.ETE” @Python(StatisticsCalculator.summarizeStatistics,$(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator,__ ORIGINAL__)FACTORY_DEF * CreationFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator_SummaryCreator CREATE_AT_END NUMBER_TO_CREATE 1 FACTORY_DEF * ElementFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator_SummaryExploder LIST_NAME $(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator_stats {} MODE LEAN_AND_MEAN CLONE_GEOMETRY没有INPUT FEATURE_TYPE __UNUSED_INPUT_TO_GUARANTEE_FACTORY_DOESNT_CONSUME_EVERYTHING__#------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_BoundsExtractor INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_StatisticsCalculator_COMPLETE" OUTPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_BoundsExtractor_OUTPUT" @Bounds(_xmin,_xmax,_ymin,_ymax,,,GEOMETRIC) # ------------------------------------------------------------------------- FACTORY_DEF * AttrSetFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_AttributeCreator_2 ATTRSET_PROPAGATE_MISSING YES INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_BoundsExtractor_OUTPUT" ATTR _num_group FME_CONDITIONAL:DEFAULT_VALUE' 评估 1.0 * $($(RandomPointGenerator_WORKSPACE_NAME)_NUM_POINTS $编码)* 价值 _area2._sum 价值 _area1._sum “BOOL_OP; OR; COMPOSITE_TEST; ;测试 评估 1.0 * $($(RandomPointGenerator_WORKSPACE_NAME)_NUM_POINTS $编码)* 价值 _area2._sum 价值 _area1._sum <$($(RandomPointGenerator_WORKSPACE_NAME)_MIN_NUM) '$($(RandomPointGenerator_WORKSPACE_NAME)_MIN_NUM)' FME_NUM_CONDITIONS2 ___ ATTR _ratio 评估 双倍的 价值 _area2 价值 _area2._sum ATTR _width 评估 价值 _xmax - 价值 _xmin ATTR _height 评估 价值 _ymax - 价值 _ymin 输出输出FEATURE_TYPE “$(RandomPointGenerator_WORKSPACE_NAME)_AttributeCreator_2_OUTPUT” #------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_ExpressionEvaluator INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_AttributeCreator_2_OUTPUT" OUTPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_ExpressionEvaluator_OUTPUT" "_num" "@EvaluateExpression(FLOAT, CEIL. $($(RandomPointGenerator_WORKSPACE_NAME)_DENSIFY_FACTOR $编码)* 价值 _num_group * 价值 _比率 ,$(RandomPointGenerator_WORKSPACE_NAME)_ExpressionEvaluator)”#------------------------------------------------------------------------- FACTORY_DEF * VertexCreatorFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_VertexCreator INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_ExpressionEvaluator_OUTPUT" MODE REPLACE INDEX 0 CONTINUE_ON_ERROR YES XVAL "@EvaluateExpression(FLOAT, 价值 _xmin 美元(RandomPointGenerator_WORKSPACE_NAME) _VertexCreator)”YVAL“@EvaluateExpression(浮动, 价值 _ymin ,$(RandomPointGenerator_WORKSPACE_NAME)_VertexCreator)”输出端输出FEATURE_TYPE “$(RandomPointGenerator_WORKSPACE_NAME)_VertexCreator_OUTPUT” #-------------------------------------------------------------------------有[组macroLine“宏$(RandomPointGenerator_WORKSPACE_NAME)_AttributeKeeper_2_341b5245_6e6d_4d97_b109_379136b6a17e11_LIST_EXP“;的foreach ATTR [分裂 “”] {集ATTR [FME_DecodeText $ ATTR]; [ “{} *” regsub “{} $” $ ATTR]组ATTR;集ATTR [regsub -all “{}”$ ATTR “{\ [0-9 \] +}”];追加macroLine “^ $ ATTR $”;};放$ macroLine;] FACTORY_DEF {*} TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_AttributeKeeper_2 INPUT FEATURE_TYPE“$(RandomPointGenerator_WORKSPACE_NAME)_VertexCreator_OUTPUT “OUTPUT {FEATURE_TYPE ”$(RandomPointGenerator_WORKSPACE_NAME)_AttributeKeeper_2_OUTPUT“ @KeepAttributes(randompointgenerator.group_id,_width,_height,_num,fme_regexp_match,” ^ _ FME $($(RandomPointGenerator_WORKSPACE_NAME)_AttributeKeeper_2_341b5245_6e6d_4d97_b109_379136b6a17e11_LIST_EXP)“)}#------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_Cloner_Cloner INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_AttributeKeeper_2_OUTPUT" NUMBER_OF_COPIES "@EvaluateExpression(FLOAT, 价值 _num ,$(RandomPointGenerator_WORKSPACE_NAME)_Cloner)” REJECT_INVALID是输出复制 “$(RandomPointGenerator_WORKSPACE_NAME)_Cloner_COPY” #------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_Offsetter INPUT FEATURE_TYPE “$(RandomPointGenerator_WORKSPACE_NAME)_Cloner_COPY” 输出FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_Offsetter_Offset @Offset(“@ EvaluateExpression(FLOAT, 兰德 * 价值 _宽度 ,$(randompointgenerator_workspace_name)_offsetter)“,”@ evaluateExpression(float, 兰德 * 价值 _高度 ,$(RandomPointGenerator_WORKSPACE_NAME)_Offsetter) “ ”0“)FACTORY_DEF * TestFactory中FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_Offsetter_PointCloudOffsetter INPUT FEATURE_TYPE $(RandomPointGenerator_WORKSPACE_NAME)_Offsetter_Offset测试与fme_type == ”fme_point_cloud“ TEST ”“!= ”“ BOOLEAN_OPERATOR和输出PASSED FEATURE_TYPE” $(RandomPointGenerator_WORKSPACE_NAME)_Offsetter_OFFSET” @TransformPointCloud(OFFSET)OUTPUT失败FEATURE_TYPE “$(RandomPointGenerator_WORKSPACE_NAME)_Offsetter_OFFSET” #------------------------------------------------------------------------- INCLUDE [组macroLine“MACRO $(RandomPointGenerator_WORKSPACE_NAME)_AttributeKeeper_3_c02755c4_36bd_4bc7_8bf2_87f747914f8211_LIST_EXP “;的foreach ATTR [分裂 ”“] {集ATTR [FME_DecodeText $ ATTR];组ATTR [regsub ”{} $“ $ ATTR ”{} *。“];组ATTR [regsub,所有”{} “$ ATTR ”{\ [0-9 \] +}“];追加macroLine” ^ $ ATTR $“;};放$ macroLine;] FACTORY_DEF {*} TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_AttributeKeeper_3 INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Offsetter_OFFSET" OUTPUT { FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_AttributeKeeper_3_OUTPUT" @KeepAttributes(randompointgenerator.group_id,fme_regexp_match,"^fme_$($(RandomPointGenerator_WORKSPACE_NAME)_AttributeKeeper_3_c02755c4_36bd_4bc7_8bf2_87f747914f8211_LIST_EXP)") } # ------------------------------------------------------------------------- FACTORY_DEF {*} SpatialFilterFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_SpatialFilter INPUT BASE FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_AttributeRemover_OUTPUT" INPUT CANDIDATE FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_AttributeKeeper_3_OUTPUT" PREDICATE "INTERSECTS" USE_BOUNDING_BOX NO MULTIPLE_BASES YES MERGE_BASE_ATTR YES BOOLEAN_OPERATOR OR DIMENSION 2 GROUP_BY { randompointgenerator.group_id } CURVE_BOUNDARY_RULE ENDPOINTS_MOD2 OUTPUT PASSED FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_SpatialFilter_PASSED" # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_ExpressionEvaluator_2 INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_SpatialFilter_PASSED" OUTPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_ExpressionEvaluator_2_OUTPUT" "randompointgenerator.rand" "@EvaluateExpression(FLOAT, 兰德 ,$(RandomPointGenerator_WORKSPACE_NAME)_ExpressionEvaluator_2)”#------------------------------------------------------------------------- FACTORY_DEF * SortFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_Sorter_2 INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_ExpressionEvaluator_2_OUTPUT" SORT_BY randompointgenerator.group_id ALPHA ASCENDING randompointgenerator.rand NUMERIC ASCENDING OUTPUT SORTED FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Sorter_2_SORTED" # ------------------------------------------------------------------------- INCLUDE [ puts "MACRO REAL_RATE [expr $($(RandomPointGenerator_WORKSPACE_NAME)_NUM_POINTS) * -1 ]" ] FACTORY_DEF {*} SamplingFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_Sampler SAMPLE_RATE $(REAL_RATE) GROUP_BY { randompointgenerator.group_id } INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Sorter_2_SORTED" OUTPUT SAMPLED FEATURE_TYPE ___SAMPLED___ # This TeeFactory is needed because Sampler will still output features if it has no OUTPUT clauses specified. # This way we behave nicely even if there are no output connections on the transformer. See PR#28886. FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_Sampler_Sampled INPUT FEATURE_TYPE ___SAMPLED___ OUTPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Sampler_SAMPLED" # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME $(RandomPointGenerator_WORKSPACE_NAME)_BulkAttributeRemover INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Sampler_SAMPLED" OUTPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_BulkAttributeRemover_OUTPUT" @RemoveAttributes(fme_regexp_match,randompointgenerator.) FACTORY_DEF * TeeFactory FACTORY_NAME "$(RandomPointGenerator_WORKSPACE_NAME)_Point1550271943 Output Collector" INPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_BulkAttributeRemover_OUTPUT" OUTPUT FEATURE_TYPE "$(RandomPointGenerator_WORKSPACE_NAME)_Point" INCLUDE [puts {MACRO WB_CURRENT_CONTEXT $(WB_OLD_CONTEXT_$(RandomPointGenerator_WORKSPACE_NAME))}] FACTORY_DEF * TeeFactory FACTORY_NAME "RandomPointGenerator Point Output Renamer/Nuker" INPUT FEATURE_TYPE RandomPointGenerator_Point OUTPUT FEATURE_TYPE RandomPointGenerator_Point # ------------------------------------------------------------------------- # Create the DomainName that this transformer will use. # Because @Count itself will evalute the expression to calculate the # domain, we don't need to do anything in Tcl per feature going by INCLUDE [ set domainPrefix {}; if { {Global} == {Local} } { set domainPrefix [FME_EncodeText {Counter_}]; }; puts "MACRO Counter_FULL_DOMAIN ${domainPrefix}counter"; ] FACTORY_DEF * ExecuteFunctionFactory FACTORY_NAME Counter_Rejector COMMAND_PARM_EVALUATION SINGLE_PASS INPUT FEATURE_TYPE RandomPointGenerator_Point FUNCTION_DEFINITION @Count(REJECTABLE_WITH_FLAG,fme_encoded,$(Counter_FULL_DOMAIN),"0") RESULT_ATTRIBUTE "Point_ID" OUTPUT COMPLETE FEATURE_TYPE Counter_OUTPUT OUTPUT REJECTED FEATURE_TYPE Counter_ FACTORY_DEF * TeeFactory FACTORY_NAME“计数器 变压器输出Nuker” INPUT FEATURE_TYPE Counter_ #------------------------------------------------------------------------- # Generate the name of the Global Variable that we will store the coordinate # system name in. This variable name will be group specific if we are grouping # features, something like: # CommonLocalReprojector__creation_instance_0_targetCS # CommonLocalReprojector__creation_instance_1_targetCS # # Because of GROUP_BY's WHOLE_LINE modifier the 'split' line will be ignored if # GROUP_BY is blank. # # Use of ::csv::split and quoting of global var names allows us to support # grouping by attribute names that contain spaces. Haven't quite worked out # when, if ever, we support attribute names that contain quotes - thought I had # used them while testing this, but now they result in "unbalanced quotes" # errors. # # You can't have blank lines in these INCLUDE blocks! A blank line is # apparently considered the the end of the TCL and no further lines are # executed. And semicolons are needed because this block will be treated as a # single line in the workspace. INCLUDE [ package require csv; set targetNameMacro {MACRO CommonLocalReprojector_TARGETCS_VARIABLE_NAME CommonLocalReprojector}; set sourceNameMacro {MACRO CommonLocalReprojector_SOURCECS_VARIABLE_NAME CommonLocalReprojector}; set attrs [list]; foreach attr $attrs { set nameValPair {}; append nameValPair [FME_EncodeText $attr] {_@EvaluateExpression(STRING_ENCODED, 价值 } [FME_EncodeText $ ATTR] { ,CommonLocalReprojector)};追加targetNameMacro {_} $ nameValPair;追加sourceNameMacro {_} $ nameValPair;};追加targetNameMacro {_targetCS};追加sourceNameMacro {_sourceCS};放$ targetNameMacro;放$ sourceNameMacro;]#重新投影包围盒成AZMED / AZMEA,然后存储在一个全局变量的#得到的系统的名称。FACTORY_DEF {*} BoundingBoxFactory FACTORY_NAME CommonLocalReprojector_BoundingBoxFactory INPUT FEATURE_TYPE Counter_OUTPUT BOUNDING_BOX_TYPE几何输出BOUNDING_BOX FEATURE_TYPE CommonLocalReprojector_nuke_me @Reproject(FME ,, _ AZMED _, - )@GlobalVariable($(CommonLocalReprojector_TARGETCS_VARIABLE_NAME),@CoordSys())输出ORIGINAL FEATURE_TYPE CommonLocalReprojector_Originals#这使我们忽略 output from factories that will otherwise result in # "orphan features" warnings in the log. FACTORY_DEF * TeeFactory FACTORY_NAME CommonLocalReprojector_Nuker INPUT FEATURE_TYPE CommonLocalReprojector_nuke_me # Because PR#32183 makes a source CS required for dynamic reprojection, this # check might seem redundant. But we aren't actually doing dynamic reprojection # on the original features - we are reprojecting to an instance of a dynamic # system, which means tagging features without a CS is totally reasonable. We # can only hope to catch this when the bounding box is reprojected, and that # will depend on the order of the features with differing coordinate systems. # # Imagine two features with ,CS1分别。因为在全球源CS变种一个空字符串被解释为#“看见没有特色”,我们就无法检测到#不匹配。此外,BoundingBoxFactory会发出#边框与CS1的坐标系统,从而动态重投影就不会失败。FACTORY_DEF * TestFactory中FACTORY_NAME CommonLocalReprojector_CoordSysPresentTester INPUT FEATURE_TYPE CommonLocalReprojector_Originals TEST @CoordSys()!= “” 的Passed FEATURE_TYPE CommonLocalReprojector_originalsWithCs OUTPUT失败FEATURE_TYPE * @Abort( “所有功能,才能确定一个共同的本地系统中打上坐标系”)#让我们确保每个组中的每个特征具有相同的初始CS - 否则#我们注定要做可怕的事情。FACTORY_DEF * TestFactory中FACTORY_NAME CommonLocalReprojector_CoordSysConsistentTester INPUT FEATURE_TYPE CommonLocalReprojector_originalsWithCs TEST @GlobalVariable($(CommonLocalReprojector_SOURCECS_VARIABLE_NAME))== “” TEST @GlobalVariable($(CommonLocalReprojector_SOURCECS_VARIABLE_NAME))== @CoordSys()BOOLEAN_OPERATOR OR的Passed FEATURE_TYPE CommonLocalReprojector_validatedOriginals @GlobalVariable($(CommonLocalReprojector_SOURCECS_VARIABLE_NAME)@CoordSys())OUTPUT失败FEATURE_TYPE * @Abort( “每一组中的所有功能,必须标记有相同的坐标系。预计 '@GlobalVariable($(CommonLocalReprojector_SOURCECS_VARIABLE_NAME))',但发现 '@CoordSys()'”)#重新投影每个特征到存储在全局变量中的坐标系。#通过这种工厂BoundingBoxFactory之后出现的,我们可以肯定#的边框将在原有的特色,之前发布。FACTORY_DEF * SortFactory FACTORY_NAME CommonLocalReprojector_FeatureHolder INPUT FEATURE_TYPE CommonLocalReprojector_validatedOriginals输出已排序FEATURE_TYPE CommonLocalReprojector_OUTPUT @Reproject(FME ,, @全局变量($(CommonLocalReprojector_TARGETCS_VARIABLE_NAME)),2D, - )#------------------------------------------------------------------------- DEFAULT_MACRO INPUT_BASE_LINES FACTORY_DEF {*} ProximityFactory FACTORY_NAME NeighborFinder $(INPUT_BASE_LINES) INPUT CANDIDATE FEATURE_TYPE CommonLocalReprojector_OUTPUT REQUIRE_BASE NO K_NEAREST "" "161" INSERT_VERTEX_ON_BASE No TAKE_MEASURES_FROM_CANDIDATE Yes COMPUTE_MEASURES_MODE CONTINUOUS REJECT_NULL Yes CANDIDATE_FEATURES_FIRST No CLOSE_CANDIDATES_LIST "Points{}" LIST_ATTRS_TO_INCLUDE { Point_ID } LIST_ATTRS_TO_INCLUDE_MODE SELECTED DISTANCE_ATTR _distance TREAT_POLYGON_AS LINE NEVER_OVERWRITE_MERGED_ATTRS Yes MERGE_ATTRS "NO" ATTR_ACCUM_MODE " “ATTR_CONFLICT_RES” “INCOMING_PREFIX” “REJECT_INVALID_GEOM YES OUTPUT MATCHED FEATURE_TYPE NeighborFinder_MATCHED @RenameAttributes(_angle,角度,_candidate_angle,candidate_angle,_candidate_label_angle,candidate_label_angle,_closest_candidate_x,closest_candidate_x,_closest_candidate_y,closest_candidate_y,_closest_base_x,closest_base_x,_closest_base_y,closest_base_y)OUTPUT UNMATCHED_BASE FEATURE_TYPE NeighborFinder_UNMATCHED_BASE#------------------------------------------------------------------------- # Create the DomainName that this transformer will use. # Because @Count itself will evalute the expression to calculate the # domain, we don't need to do anything in Tcl per feature going by INCLUDE [ set domainPrefix {}; if { {Global} == {Local} } { set domainPrefix [FME_EncodeText {Counter_2_}]; }; puts "MACRO Counter_2_FULL_DOMAIN ${domainPrefix}group"; ] FACTORY_DEF * ExecuteFunctionFactory FACTORY_NAME Counter_2_Rejector COMMAND_PARM_EVALUATION SINGLE_PASS INPUT FEATURE_TYPE NeighborFinder_MATCHED INPUT FEATURE_TYPE NeighborFinder_UNMATCHED_BASE FUNCTION_DEFINITION @Count(REJECTABLE_WITH_FLAG,fme_encoded,$(Counter_2_FULL_DOMAIN),"0") RESULT_ATTRIBUTE "Group_ID" OUTPUT COMPLETE FEATURE_TYPE Counter_2_OUTPUT OUTPUT REJECTED FEATURE_TYPE Counter_2_ FACTORY_DEF * TeeFactory FACTORY_NAME“Counter_2 变压器输出Nuker” INPUT FEATURE_TYPE Counter_2_ #------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME ListElementCounter INPUT FEATURE_TYPE Counter_2_OUTPUT OUTPUT FEATURE_TYPE ListElementCounter_OUTPUT "_element_count" @NumElements("Points ”,编码 ) # ------------------------------------------------------------------------- FACTORY_DEF * SortFactory FACTORY_NAME分选机输入FEATURE_TYPE ListElementCounter_OUTPUT SORT_BY _element_count数字降序输出排序FEATURE_TYPE Sorter_SORTED # ------------------------------------------------------------------------- DEFAULT_MACROWB_CURRENT_CONTEXT MACRO VariableRetriever_2_VAR @EvaluateExpression(FDIV,STRING_ENCODED, 价值 Point_ID ,VariableRetriever_2)有[如果{{}全球== {本地}} {{放MACRO VariableRetriever_2_VAR $(WB_CURRENT_CONTEXT)_ @ EvaluateExpression(FDIV,STRING_ENCODED, 价值 Point_ID ,VariableRetriever_2)};};FACTORY_DEF * TeeFactory FACTORY_NAME VariableRetriever_2 INPUT FEATURE_TYPE Sorter_SORTED输出FEATURE_TYPE VariableRetriever_2_OUTPUT @GlobalVariable(fme_encoded,$(VariableRetriever_2_VAR),fme_result_attribute,_value)#------------------------------------------------------------------------- FACTORY_DEF* TestFactory中FACTORY_NAME Tester_2 INPUT FEATURE_TYPE VariableRetriever_2_OUTPUT TEST @EvaluateExpression(FDIV,STRING_ENCODED, 价值 _价值 ,Tester_2)NOT_ = 1 ENCODED BOOLEAN_OPERATOR OR OUTPUT PASSED FEATURE_TYPE Tester_2_PASSED FACTORY_DEF * TeeFactory FACTORY_NAME “Tester_2 PASSED分配器” INPUT FEATURE_TYPE Tester_2_PASSED OUTPUT FEATURE_TYPE Tester_2_PASSED_0_f2TGGhc / G74 = OUTPUT FEATURE_TYPE Tester_2_PASSED_1_4bBqa4ASLBM =#-------------------------------------------------------------------------FACTORY_DEF * ElementFactory FACTORY_NAME ListExploder INPUT FEATURE_TYPE Tester_2_PASSED_0_f2TGGhc/g74= LIST_NAME "Points{}" ELEMENT_NUMBER_FIELD "_element_index" CLONE_GEOMETRY ATTR_ACCUM_MODE "HANDLE_CONFLICT" ATTR_CONFLICT_RES "INCOMING_IF_CONFLICT" INCOMING_PREFIX " “输出元件FEATURE_TYPE ListExploder_ELEMENTS @RemoveAttributes(ElementFactory.baseCloned)#------------------------------------------------------------------------- DEFAULT_MACRO WB_CURRENT_CONTEXT MACRO VariableRetriever_VAR @EvaluateExpression(FDIV,STRING_ENCODED, 价值 Point_ID {if {{Global} == {Local}} {puts {MACRO VariableRetriever_VAR $(WB_CURRENT_CONTEXT)_@EvaluateExpression(FDIV,STRING_ENCODED, 价值 Point_ID ,variableretriever)};};FACTORY_DEF * TeeFactory FACTORY_NAME VariableRetriever INPUT FEATURE_TYPE ListExploder_ELEMENTS输出FEATURE_TYPE VariableRetriever_OUTPUT @GlobalVariable(fme_encoded,$(VariableRetriever_VAR),fme_result_attribute,_value)#------------------------------------------------------------------------- FACTORY_DEF* testfactory factory_name测试仪输入feature_type variableretriever_output测试@evaluateExpression(FDIV,String_Encoded, 价值 _价值 ,测试仪)NOT_ = 1 ENCODED BOOLEAN_OPERATOR OR OUTPUT PASSED FEATURE_TYPE Tester_PASSED#------------------------------------------------------------------------- FACTORY_DEF * VertexCreatorFactory FACTORY_NAME VertexCreator INPUT FEATURE_TYPE Tester_PASSED MODE REPLACE INDEX " “CONTINUE_ON_ERROR YES XVAL” @EvaluateExpression(FDIV,FLOAT, 价值 closest_candidate_x ,顶点)“YVAL”@EvaluateExpression(FDIV,Float, 价值 closest_candidate_y ,VertexCreator)”输出端输出FEATURE_TYPE VertexCreator_OUTPUT#------------------------------------------------------------------------- DEFAULT_MACRO WB_CURRENT_CONTEXT MACRO VariableSetter_VAR @EvaluateExpression(FDIV,STRING_ENCODED, 价值 Point_ID ,VariableSetter)有[如果{{}全球== {本地}} {{放MACRO VariableSetter_VAR $(WB_CURRENT_CONTEXT)_ @ EvaluateExpression(FDIV,STRING_ENCODED, 价值 Point_ID ,VariableSetter)};}] FACTORY_DEF * TeeFactory FACTORY_NAME VariableSetter INPUT FEATURE_TYPE Tester_2_PASSED_1_4bBqa4ASLBM = INPUT FEATURE_TYPE VertexCreator_OUTPUT OUTPUT FEATURE_TYPE VariableSetter_OUTPUT @GlobalVariable(fme_encoded,$(VariableSetter_VAR), “1”)#-------------------------------------------------------------------------DEFAULT_MACRO Aggregator_BREAK_ATTR INCLUDE [if {"No" == "Yes"} {puts {MACRO Aggregator_BREAK_ATTR BREAK_BEFORE_FIELD_CHANGE Group_ID} }] FACTORY_DEF {*} AggregateFactory FACTORY_NAME Aggregator INPUT FEATURE_TYPE VariableSetter_OUTPUT MODE ONE_LEVEL GROUP_BY { Group_ID } $(Aggregator_BREAK_ATTR) REMOVE_GEOMETRY NO ACCUMULATE_ATTRIBUTES One LIST_NAME "_list{}" LIST_ATTRS_TO_INCLUDE { Point_ID } LIST_ATTRS_TO_INCLUDE_MODE SELECTED SEPARATOR PRODUCE_MULTIS YES OUTPUT AGGREGATE FEATURE_TYPE Aggregator_AGGREGATE # ------------------------------------------------------------------------- FACTORY_DEF {*} NeighborColorSetterFactory FACTORY_NAME FeatureColorSetter INPUT FEATURE_TYPE Aggregator_AGGREGATE ALGORITHM RANDOM RANDOM_MODE RAND_WITH_CAP RANDOM_COLOR_CAP "0" REJECT_INVALID_PARAMS YESOUTPUT COLORED FEATURE_TYPE FeatureColorSetter_COLORED # ------------------------------------------------------------------------- # 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 safeName "[regsub -all {[^a-zA-Z0-9]} {Groups} _]_[expr round(rand() * 1000000)]_[clock clicks -milliseconds]"; puts "MACRO SAFE_FFS_NAME $safeName"; ] FACTORY_DEF {*} InspectorFactory FACTORY_NAME Groups_Prepper COMMAND_PARM_EVALUATION SINGLE_PASS INPUT FEATURE_TYPE FeatureColorSetter_COLORED GROUP_ATTRIBUTE __inspector_feature_type_attr__ GROUP_BY { } GROUP_ATTRIBUTE_PREFIX { Groups } RASTER_REDUCTION NoReduction POINT_CLOUD_REDUCTION NO_THINNING OUTPUT RESULT FEATURE_TYPE __viewme__ # Now route all the features into the recorder, changing their # feature type to the transformer name so that they view nicely DEFAULT_MACRO VISUALIZER_FEATURE_FILE $(WORKSPACE_TEMP_DIR)/$(SAFE_FFS_NAME).ffs DEFAULT_MACRO VISUALIZER_CREATE_SPATIAL_INDEX NO # [PR#45549] The Data Inspector will limit the maximum number of features # it reads on WIN32, so we will correspondingly limit the number of # features we record here using the MAX_FEATURES_TO_RECORD directive. FACTORY_DEF * RecorderFactory FACTORY_NAME Groups_Recorder COMMAND_PARM_EVALUATION SINGLE_PASS INPUT FEATURE_TYPE __viewme__ _wb_termination_feature Yes @FeatureType(TERMINATOR_@Value(_wb_termination_xformer)) INPUT FEATURE_TYPE __viewme__ @FeatureType(@Value(__inspector_feature_type_attr__)) @RemoveAttributes(__inspector_feature_type_attr__) FEATURE_FILE "$(VISUALIZER_FEATURE_FILE)" STORE_SCANNED_SCHEMA YES CREATE_SPATIAL_INDEX "$(VISUALIZER_CREATE_SPATIAL_INDEX)" INSPECTOR "$(VISUALIZER_CREATE_SPATIAL_INDEX)" FSC_SCHEMA Group_ID,varchar 255. ,CMANAME,varchar 255. ,point_id,varchar 255. ,_distance,VARCHAR 255. ,_angle,VARCHAR 255. 、_candidate_angle varchar 255. 、_candidate_label_angle varchar 255. ,_closest_candidate_x,VARCHAR 255. 、_closest_candidate_y varchar 255. ,_closest_base_x,varchar 255. 、_closest_base_y varchar 255. ,距离,VARCHAR 255. ,角度,VARCHAR 255. ,candidate_angle,VARCHAR 255. ,candidate_label_angle,VARCHAR 255. ,closest_candidate_x,VARCHAR 255. ,closest_candidate_y,VARCHAR 255. ,closest_base_x,VARCHAR 255. ,closest_base_y,VARCHAR 255. ,_element_count,VARCHAR 255. ,_value,VARCHAR 255. ,_element_index,VARCHAR 255. 、fme_color varchar 255. 、fme_fill_color 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 FACTORY_NAME VisualizerProcessor 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 \042$theFile\042 & \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 FACTORY_NAME VisualizerCleaner INPUT FEATURE_TYPE __NUKEME__