120 likes | 232 Views
v. FME Worldwide User Conference - Vancouver. Sep. 21-22, 2006. Tcl and Mapping Files – Best Practices Peter Laulund, National Survey and Cadastre, Denmark. Agenda. Tcl plays a big role in my mapping files. It is used for batch processing dynamically writing part of the mapping file
E N D
v FME Worldwide User Conference - Vancouver Sep. 21-22, 2006 Tcl and Mapping Files – Best Practices Peter Laulund, National Survey and Cadastre, Denmark
Agenda • Tcl plays a big role in my mapping files. It is used for • batch processing • dynamically writing part of the mapping file • processing the features • and pre and post processing the data. • In this presentation I will discuss different aspects of how I structure a mapping file, with special focus on TCL.
Demo Mapping File Structure PARAM.FME MAIN.FME fme.exe game.csv FmeViewer SPIL.FMI fme.exe MAIN.FME MAIN.FME INIT.FMI FLYT.FMI *.ffs
Structure of Mapping File Complex • Build by modules • Placed in a common structure • ‘Metadata’ in tables • ‘Transformation’ attributes with common prefix ex. kms_ • kms_feature_type, kms_feature_code
Different Levels of Tcl in FME fmeObjects tcl fme.exe script.tcl FME_BEGIN/END_TCL INCLUDE [ script ] Tcl2 source … Tcl2( proc )
Command Line • Syntaks - Fme.exe script.tcl • Used for batch processing and chaining together more than one process together proc spil::flyt {} { global header fil lappend cmd fme.exe MAIN.FME --Modul FLYT …….. lappend cmd --from [ FME_GetAttribute from ] lappend cmd --to [ FME_GetAttribute to ] eval exec $cmd 2> NUL: eval exec fmeview.exe /ownffs ${::gsParth2App}spil/$fil & }
INCLUDE [ .. script …] • Used to initiate the mapping file • putting in MACRO <name> <value> pairs • Lookup tables • _DEF lines • INCLUDING Factory’s or modules INCLUDE [ switch -- $(Modul) { \ SPIL { puts "MACRO SourceFormat TEXTLINE" } \ INIT { puts "MACRO DestFormat FFS" } \ FLYT { puts "MACRO SourceFormat FFS" ; \ puts "MACRO DestFormat FFS" }}]
Tcl2 and @Tcl() • Work on the feature and ‘dataset’ level • Has a global namespace Tcl2 set gsParth2App $(mf_root) ; \ set gx0 $(x0); set gy0 $(y0); set gdxy $(dxy) ; \ source $(FME_MF_DIR_UNIX)/TCL/$(Modul).TCL ; proc init::tilpasBrik {id} { variable brikPos FME_Execute Bounds xmin xmax ymin ymax FME_Execute Offset [expr $brikPos($id,x) - [FME_GetAttribute xmax] + … ] [expr $brikPos($id,y) - [FME_GetAttribute ymin] + … ] FME_UnsetAttributes xmin xmax ymin ymax skak_font fme_text_size fme_text_string }
Felter Tcl script Log file R. Piepeline W. Piepeline Writer Reader Tcl
FME_BEGIN/END_TCL • Used to pre- and post-processing the translation • creating directory’s and copying documentation to dataset • zipping the dataset • emailing • copying the data to a FTP server • logging the translation to a database or file
Conclusion • Tcl works on many levels in the mapping file • It gives a dynamic dimension to mapping files • You can manipulate both attributes and geometry • The global namespace means that Tcl is more than just a new function • It can integrate FME with other programs
Links • http://wiki.tcl.tk/ • Wiki about tcl and tk with many examples • http://jamesthornton.com/tcl/8.4.2/ • tcl and tk documentation