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

Create a feature with attributes representing the location of the Safe Software HQ

" POSITION="-1513.4842554769136 -1342.1166671474193" TOP_LEFT="-1513.4842554769136 -1342.1166671474193" BOTTOM_RIGHT="-814.91199527379865 -1518.9931359121069" BOUNDING_RECT="-1513.4842554769136 -1342.1166671474193 698.57226020311498 176.87646876468764" ORDER="500000000000029" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.95686274509803926,0.78431372549019607" SIZE_POLICY="10" ANCHORED_NODE="2">
#!

Reproject the attributes to a projection most often used for web maps

" POSITION="-674.0529886498548 -207.63573738914226" TOP_LEFT="-674.0529886498548 -207.63573738914226" BOTTOM_RIGHT="-100.77139738281357 -380.13716240339238" BOUNDING_RECT="-674.0529886498548 -207.63573738914226 573.28159126704122 172.50142501425015" ORDER="500000000000052" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.95686274509803926,0.78431372549019607" SIZE_POLICY="10" ANCHORED_NODE="0">
#!

Create a point geometry

" POSITION="-16.82709134783655 -207.63573738914226" TOP_LEFT="-16.82709134783655 -207.63573738914226" BOTTOM_RIGHT="554.77142391616223 -309.51145614632981" BOUNDING_RECT="-16.82709134783655 -207.63573738914226 571.59851526399882 101.87571875718757" ORDER="500000000000053" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.95686274509803926,0.78431372549019607" SIZE_POLICY="10" ANCHORED_NODE="0">
#!

Make a square around the point

" POSITION="638.19021358778355 -207.63573738914226" TOP_LEFT="638.19021358778355 -207.63573738914226" BOTTOM_RIGHT="1225.9737981995202 -343.88679989976737" BOUNDING_RECT="638.19021358778355 -207.63573738914226 587.78358461173661 136.2510625106251" ORDER="500000000000054" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.95686274509803926,0.78431372549019607" SIZE_POLICY="10" ANCHORED_NODE="0">
#!

Calculate how round the square is :) , store the value in the '_measurement' attribute

" POSITION="1302.7625175089727 -207.63573738914226" TOP_LEFT="1302.7625175089727 -207.63573738914226" BOTTOM_RIGHT="1836.4716214027346 -342.63678739964234" BOUNDING_RECT="1302.7625175089727 -207.63573738914226 533.70910389376195 135.00105001050008" ORDER="500000000000055" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.95686274509803926,0.78431372549019607" SIZE_POLICY="10" ANCHORED_NODE="0">
#!

Extract the first four digits after the decimal point from the '_measurement' attribute

" POSITION="1913.7887259957172 -207.63573738914226" TOP_LEFT="1913.7887259957172 -207.63573738914226" BOTTOM_RIGHT="2417.2100548518629 -342.63678739964234" BOUNDING_RECT="1913.7887259957172 -207.63573738914226 503.42132885614546 135.00105001050008" ORDER="500000000000056" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.95686274509803926,0.78431372549019607" SIZE_POLICY="10" ANCHORED_NODE="0">
#!

The output will be a raster showing a number


How can we make a text object? Or should we make a text object?

" POSITION="2517.1046325384041 -207.63573738914226" TOP_LEFT="2517.1046325384041 -207.63573738914226" BOTTOM_RIGHT="3070.1053825459053 -208.63573738914226" BOUNDING_RECT="2517.1046325384041 -207.63573738914226 553.00075000750121 1" ORDER="500000000000057" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.95686274509803926,0.78431372549019607" SIZE_POLICY="10" ANCHORED_NODE="0">
#!

Make the final raster with a square and a code label

" POSITION="3174.475932640672 -207.63573738914226" TOP_LEFT="3174.475932640672 -207.63573738914226" BOTTOM_RIGHT="3767.3708018614743 -305.13641239589231" BOUNDING_RECT="3174.475932640672 -207.63573738914226 592.89486922080232 97.500675006750058" ORDER="500000000000058" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.95686274509803926,0.78431372549019607" SIZE_POLICY="10" ANCHORED_NODE="0">
#!

This workspace generates a raster with a numeric code placed at the new Safe Software HQ for the FME WT 2019 contest.


You can get it if you connect all the right transformers.


This multiple choice workspace consists of seven steps. Each step has an explanation of what should happen in it. Pick the right transformer and connect it to the previous one.


You should not change any parameters, but you will need to check them to see which ones do the right job.


Only a single transformer should be connected in each bookmark

" POSITION="-1513.4842554769136 481.37876828312534" TOP_LEFT="-1513.4842554769136 481.37876828312534" BOTTOM_RIGHT="-763.48425547691363 431.37876828312534" BOUNDING_RECT="-1513.4842554769136 481.37876828312534 750 50" ORDER="500000000000065" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.49803921568627452,0.78431372549019607" SIZE_POLICY="10" ANCHORED_NODE="0">
#!

Don't forget to turn on your background maps! Use Stamen maps if you don't have accounts with other providers.



If you connected the right transformers, you should see a square over the Safe Software HQ (and not on the Equator near Central Africa) with a code inside. This is your entry for the WT contest.


Make sure you see a 4-digit code, but keep in mind - not all 4-digit results are correct.

" POSITION="3905.1642315206172 179.3655229583776" TOP_LEFT="3905.1642315206172 179.3655229583776" BOTTOM_RIGHT="4559.6609812251972 -438.14035210037298" BOUNDING_RECT="3905.1642315206172 179.3655229583776 654.49674970458 617.50587505875058" ORDER="500000000000067" FOLLOW_ANCHOR="true" INFO_NODE="false" COLOUR="1,1,0.95686274509803926,0.78431372549019607" SIZE_POLICY="10" ANCHORED_NODE="21">
#!
#! #!#! #! #!#! #!#! #!#! #!#! #!#! #!#! #!#!#! #! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!SubstringValue_measurement14">#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#!#! #!#! #!#! #!#! #!#! #!#!
FME_PYTHON_VERSION 34 # !START_HEADER # !START_WB_HEADER READER_TYPE MULTI_READER WRITER_TYPE NULL WRITER_KEYWORD NULL_DEST NULL_DEST_DATASET null #! END_WB_HEADER #! START_WB_HEADER #! END_WB_HEADER #! END_HEADER LOG_FILENAME "$(FME_MF_DIR)MultipleChoice2018.log" LOG_APPEND NO LOG_TIMINGS YES LOG_FILTER_MASK -1 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 # ------------------------------------------------------------------------- MULTI_READER_CONTINUE_ON_READER_FAILURE No # ------------------------------------------------------------------------- MACRO WORKSPACE_NAME MultipleChoice2018 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 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 0 0 INCLUDE [ if { {2D Coordinate List} == {Geometry Object} } { puts {MACRO Creator_XML *} } ] INCLUDE [ if { {2D Coordinate List} == {2D Coordinate List} } { puts {MACRO Creator_2D3D 2D_GEOMETRY}; puts {MACRO Creator_CLASSIC *} } ] INCLUDE [ if { {2D Coordinate List} == {3D Coordinate List} } { puts {MACRO Creator_2D3D 3D_GEOMETRY}; puts {MACRO Creator_CLASSIC *} } ] INCLUDE [ if { {2D Coordinate List} == {2D Min/Max Box} } { set comment { We need to turn the COORDS which are minX minY maxX maxY into a full polygon list of coordinates }; set splitCoords [split [string trim {0 0}]]; if { [llength $splitCoords] > 4} { set trimmedCoords {}; foreach item $splitCoords { if { $item != {} } {lappend trimmedCoords $item} }; set splitCoords $trimmedCoords; }; if { [llength $splitCoords] != 4 } { error {Creator: Coordinate list is expected to be a space delimited list of four numbers as 'minx miny maxx maxy' - `0 0' is invalid}; }; set minX [lindex $splitCoords 0]; set minY [lindex $splitCoords 1]; set maxX [lindex $splitCoords 2]; set maxY [lindex $splitCoords 3]; puts "MACRO Creator_COORDS $minX $minY $minX $maxY $maxX $maxY $maxX $minY $minX $minY"; puts {MACRO Creator_2D3D 2D_GEOMETRY}; puts {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, )FACTORY\u DEF$(Creator\u CLASSIC)CreationFactory\u NAME Creator\u CLASSIC\u Creator$(Creator\u 2D3D)$(Creator\u COORDS)CREATE\u END无输出功能\u TYPE\uuuuuuuuuuuuu创建的\uuuuuuuuuuuu NAME Creator\u克隆输入功能\u TYPE\uuuuuuuuuuuuuuuuuuuuuuuuuuuu2(Creator\u CoordSysRemover)@CoordSys(球形墨卡托)复制数\u 1复制#编号#属性“#创建#实例”#-----------------------------------------------------------------工厂#定义*工厂#名称“$(WB#当前#上下文)#创建者#分支#目标”输入功能#类型*输出功能#类型#---------------------------------------------------------------------------工厂#定义*RoutingFactory工厂名称“目标功能类型路由相关器”命令\u参数\u评估单次\u传递输入功能\u类型*功能\u类型\u属性\u wb \u输出功能\u类型*输出未路由功能\u类型\u nuke \u me \uu2@Tcl2(“FME \u StatMessage 818059[FME \u GetAttribute FME \u template \u Feature \u类型]818060 818061 FME \u warn”)-------------------------------------------------------------------------FACTORY_DEF*TeeFactory工厂名称“Final Output Nuker”输入特征类型u nuke_uume_35;-----------------------------------------------------------------工厂定义*创建工厂名称可视化处理器在输出特征类型u NUKEME创建@TCL(“if[file exists{$(WORKSPACE\u TEMP\u DIR)}{set files[glob-nocomplain-directory{$(WORKSPACE\u TEMP\u DIR)}-tails*.ffs];if{[llength$files]==1}{set theFile{$(WORKSPACE\u TEMP\u DIR)/};追加文件[lindex$files 0];eval FME\u Execute System\173\042$(FME\u HOME\u UNIX)/fmedatainspector\042--可视化器--单个应用程序--关闭时删除--无源提示-f FFS\042$theFile\042&\175;}elseif{[llength$files]==0}{catch{file delete-force{$(WORKSPACE\u TEMP\u DIR)};}else{set filesNoExt{};set lastfile{};foreach{fileName}[lsort$files]{set fileNoExt[string trimright$fileName{.FFS}];if[regexp{(.*)\[0-9]*$}$fileNoExt wholething fileNoExtBase]{if{$fileNoExtBase==$lastfile}{continue};set lastfile$fileNoExt;lappend fileNoExt$fileNoExt};eval FME\u Execute System\173\042$(FME\u HOME\u UNIX)/fmedatainspector\042--可视化器--单个应用程序--关闭时删除--无源代码提示-d{$(WORKSPACE\u TEMP\u DIR)}-a ffs-f FFS$filesNoExt&\175;};};“)工厂\u DEF*TeeFactory工厂\u名称可视化清理器输入功能\u类型\u NUKEME__