# ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! 端口:、POSTGIS_USER_NAME”POSTGIS可选文本” 用户名:、POSTGIS_HOST”POSTGIS可选文本” 主持人:POSTGIS_PASSWORD,“可选的密码”,POSTGIS 密码:" / > # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # ! # !# !START_HEADER # !NULL WRITER_TYPE NULL WRITER_KEYWORD NULL_DEST_DATASET NULL #!END_WB_HEADER # !END_HEADER LOG_FILENAME”(FME_MF_DIR) Postgis_SQL美元。log" LOG_APPEND NO LOG_MAX_FEATURES 200 LOG_MAX_RECORDED_FEATURES 200 FME_REPROJECTION_ENGINE FME FME_IMPLICIT_CSMAP_REPROJECTION_MODE Datum FME_GEOMETRY_HANDLING Enhanced FME_STROKE_MAX_DEVIATION 0 LOG_FILTER_MASK -1 # ------------------------------------------------------------------------- MULTI_READER_CONTINUE_ON_READER_FAILURE No # ------------------------------------------------------------------------- MACRO WORKSPACE_NAME Postgis_SQL MACRO FME_VIEWER_APP fmedatainspector # ------------------------------------------------------------------------- INCLUDE [ if {[info exists env(FME_TEMP)] && [file isdirectory $env(FME_TEMP)] && [file isdirectory $env(TEMP)]} {set gVisualizerTemp $env(FME_TEMP)} elseif {[info exists env(TEMP)]} {set gVisualizerTemp $env(TEMP)} elseif { $tcl_platform(platform) == "unix" } {set gVisualizerTemp "/tmp"} else {set gVisualizerTemp c:};regsub - {[,]} {$ (WORKSPACE_NAME)} {_} wsname;设置gVisualizerTemp $gVisualizerTemp/${wsname}_[时钟格式[时钟秒]-格式%H%M%S];设置“宏WORKSPACE_TEMP_DIR $gVisualizerTemp”;宏VISUALIZER_FEATURE_FILE $ (WORKSPACE_TEMP_DIR) /检查员。ffs MACRO VISUALIZER_CREATE_SPATIAL_INDEX YES DEFAULT_MACRO WB_CURRENT_CONTEXT # ------------------------------------------------------------------------- Tcl2 proc Creator_CoordSysRemover {} { global FME_CoordSys;设置FME_CoordSys {};宏创建器_classic NOT_ACTIVATED宏创建器_2d3d 2D_GEOMETRY宏创建器_coords {{几何对象}=={几何对象}}{放置{宏Creator_XML *}}}{宏Creator_CLASSIC *}}包括[if{{几何对象}== {3D坐标列表}}{宏Creator_2D3D 3D_GEOMETRY};{set comment {We need to turn the COORDS which are minX minY maxX maxY into a full polygon list of coordinates} {{Geometry Object} == {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};设置splitcods [split]字符串修剪{ }]];如果{[llength $ splitcods] > 4} {set trimmedCoords {};如果{$item != {}} {lappend trimmedCoords $item}};设置splitCoords trimmedCoords美元;};如果{[llength $splitCoords] != 4} {error {Creator: Coordinate List必须有四个数字- ' 的是无效的};};设置minX [lindex $splitCoords 0];set minY [lindex $splitCoords 1];设置maxX [lindex $splitCoords 2];设置maxY [lindex $splitCoords 3];放“宏创建器_coords $minX $minY $minX $maxY $maxX $maxY $maxX $minY $minX $minY”;放置{宏Creator_2D3D 2D_GEOMETRY};Creator_XML_Creator CREATE_AT_END无输出 xml ? version = 1.0 编码= US_ASCII 独立的= 没有 吗? 几何 多边形 coord x = 3130300 y = 10085145 coord x = 3133896 y = 10085145 coord x = 3133896 y = 10089237 coord x = 3130300 y = 10089237 coord x = 3130300 y = 10085145 多边形 几何 )FACTORY_DEF $(Creator_CLASSIC)CreationFactory FACTORY_NAME Creator_CLASSIC_Creator $(Creator_2D3D)$(Creator_COORDS)CREATE_AT_END无输出FEATURE_TYPE _____CREATED______ FACTORY_DEF * TeeFactory FACTORY_NAME Creator_Cloner INPUT FEATURE_TYPE _____CREATED______ NUMBER_OF_COPIES 1 COPY_NUMBER_ATTRIBUTE “_creation_instance” 输出FEATURE_TYPE Creator_CREATED @ TCL2(Creator_CoordSysRemover)@CoordSys(EPSG:2277)fme_feature_type造物主FACTORY_DEF * TeeFactory FACTORY_NAME “创建者创建分配器” INPUT FEATURE_TYPE Creator_CREATED输出FEATURE_TYPE Creator_CREATED_0输出FEATURE_TYPE Creator_CREATED_1#-------------------------------------------------------------------------#首先确定哪些功能 we are going to be using -- we can do # this statically at parse time for efficiency sake MACRO GeometryExtractor_Function INCLUDE [ if {{wkt} == {fmebinary} } { puts {MACRO GeometryExtractor_Function @Geometry(TO_ATTRIBUTE_BINARY,_geometry) } } elseif {{wkt} == {fmehex} } { puts {MACRO GeometryExtractor_Function @Geometry(TO_ATTRIBUTE_BINARY_HEX,_geometry) } } elseif {{wkt} == {fmexml} } { puts {MACRO GeometryExtractor_Function @Geometry(TO_ATTRIBUTE,_geometry) } } elseif {{wkt} == {wkt} || {wkt} == {wkb} || {wkt} == {wkbhex} } { puts {MACRO GeometryExtractor_Function @OGCGeometry(to_attribute,wkt,_geometry,1.2) } } elseif {{wkt} == {GEOJSON} || {wkt} == {ESRIJSON} } { puts {MACRO GeometryExtractor_Function @JSONGeometry(TO_ATTRIBUTE,wkt,_geometry) } } elseif {{wkt} == {KML} } { puts {MACRO GeometryExtractor_Function @KMLGeometry(TO_ATTRIBUTE,_geometry, )}} elseif的{{WKT} == {GEORSS_SIMPLE}} {{放MACRO GeometryExtractor_Function @GeoRSSGeometry(TO_ATTRIBUTE,WKT,_geometry, )}} elseif的{{WKT} == {} GML_3.1.1 || {wkt} == {GML_3.2.1} } { puts {MACRO GeometryExtractor_Function @GMLGeometry(TO_ATTRIBUTE,wkt,_geometry, )}} ELSEIF {{} WKT == {地理散列}} {{放MACRO GeometryExtractor_Function @GeoHash(TO_ATTRIBUTE,_geometry)}}] FACTORY_DEF * TeeFactory FACTORY_NAME GeometryExtractor INPUT FEATURE_TYPE Creator_CREATED_0输出FEATURE_TYPE GeometryExtractor_OUTPUT $(GeometryExtractor_Function)#------------------------------------------------------------------------- MACRO SQLExecutor_DIRECTIVES PORT 5432 USER_NAME fme HOST maul PASSWORD fme FACTORY_DEF * QueryFactory FACTORY_NAME SQLExecutor INPUT FEATURE_TYPE GeometryExtractor_OUTPUT QUERY_SQL @EvaluateExpression(STRING_ENCODED,SELECT * FME。 ADDRESS_POINTS 美联社 哪里 ST_Within ap.geom ST_GeomFromText _几何 2277 = TRUE,SQLExecutor)READER_TYPE POSTGIS READER_DATASET “PostGIS的” COMBINE_ATTRIBUTES RESULT_ONLY COMBINE_GEOMETRY RESULT_ONLY READER_PARAMS $(SQLExecutor_DIRECTIVES)输出结果FEATURE_TYPE SQLExecutor_RESULT OUTPUT QUERY FEATURE_TYPE SQLExecutor_INITIATOR FACTORY_DEF * TeeFactory FACTORY_NAME “SQLExecutor引发剂输出Nuker” INPUT FEATURE_TYPE SQLExecutor_INITIATOR#------------------------------------------------------------------------- # Set the directive to add all the meta-attributes to the features.#我们这样做,所以用户看到观察#特征的所有可能的信息。READER_META_ATTRIBUTES fme_feature_type fme_dataset fme_basename#假设是工作区临时目录已被设置和创建的。见controldefs.cpp - ControlDefs :: writeVisualizerTempDir DEFAULT_MACRO WORKSPACE_TEMP_DIR INCLUDE [如果{[字符串长度{}]> 0} {集catter “”;设置逗号“”;的foreach ATTR {} {集catter “$ $ catter逗号@值(\” $ ATTR \ “)”;设置逗号 “_”;};提出 “宏观CATMAC _ @:连接($ catter)”;}其他{提出 “宏观CATMAC”;};设置sa亚搏在线feName “[regsub -all {[^ A-ZA-Z0-9]} {SQLExecutor_RESULT} _] _ [EXPR轮(RAND()* 1000000)] _ [时钟点击-milliseconds]”;提出 “宏观SAFE_F亚搏在线FS_NAME $ safeName”;]#作出这样的FFS文件将住在临时目录中。工厂定义*创建工厂名称sqlexecutor结果目录创建器输出功能类型nukeme tcl2(“捕获文件mkdir{$(工作区温度目录)}”)工厂定义*生产工厂名称sqlexecutor结果目录创建器清除器输入功能类型nukeme发送光栅,点云和矢量特征沿着不同路径准备它们以查看工厂定义测试工厂名称sqlexecutor结果featuredirector输入特征类型sqlexecutor结果输入特征类型creator创建的测试fme类型=“fme光栅”输出失败特征类型sqlexecutor结果notrasterfeatures输出通过feature_type sqlexecutor_result_12;rasterfeatures_12;factory_def*testfactory_name sqlexecutor_12;result_12;featuredirector 1 input feature_type sqlexecutor_result_12;notrasterfeatures_12;test&fme_type=“fme_point_cloud”输出失败feature_type sqlexecutor_12;result_12;vectorfeatures_12;output passed feature_typeSqlExecutor_uuResult_u PointCloudFeatures_uuuuuuuuu Result_uuuuuuuuuuuuuuuuuuuuuuuuuu矢量特征可能会被覆盖其颜色factory_u def*teefactory factory_u name SqlExecutor_u Result_u VectorSettrupper输入特征uu type SqlExecutor_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuthinpointcloud直接运行,而是通过tcl来实现。这将允许此转换器与桌面许可证一起使用,即使thinpointcloud需要专业人员。tcl2 proc sqlexecutor_result_b6867c8c_2eab_457d_99f5_5afb015be57f4_thinpointcloud{}{fme_execute thinpointcloud no_thinging 1;}factory\u def*teefactory工厂_name sqlexec执行器_name sqlexec执行器_result _pointcloud云特性_pointcloudcloud更薄输入特性_type sqlexec执行器_result _pointcloud云特性_pointcloud云特性输出特性_type _viewme@tcl2(“sqlexec执行器_sqlexec执行器_b6867c8c _457d_5afb0115be157f15be57f4 _thinpointcloud _thinpointcloud sqlexec执行器〈sqlexec执行器_b68677c6867c8c8c F5_5afb015be57F4_prepareraster{子开始行subsetnumrows subsetstartcol subsetnumcols}{设置usedi[字符串相等-nocase{$(fme_viewer_app)}{fmedatainspector};如果{!$usedi}{fme\u执行applyrasterrotation双线性;};设置doresample[字符串等于{noreduction}{resample}];集合dosubset[字符串等于{noreduction}{subset}];设置dobounds[字符串等于{noreduction}{boundingboxonly}];如果{$dobounds}{fme_执行geometrytype fme_polygon;}elseif{$doresample$dosubset}{设置注释{首先,我们需要为所有属性加前缀。这样做是因为我们将调用@ RestStices,并且我们希望确保它不会覆盖任何现有的属性。};设置KattrPrefix“.”;设置所有名称[fme_attributename];foreach oldname$allnames{设置newname$kattrprefix;追加newname$oldname;fme_renameattribute$newname$oldname;};执行RASTERPORPERTIES RASTER;如果{$doresample}{设置oldnumcols[fme_getattribute_num_columns];设置oldnumrows[fme_getattribute_num_rows];设置oldspacingx[fme_getattribute_spacing_x];设置旧间距[fme_getattribute_spacing_y];设置kminnumcells 32;设置kmaxnumcells 512;设置注释{如果两个维度都大于最小的Num单元,则至少只有一个大于最大值。};如果{$oldnumcells>$kminnumcells&&$oldnumcols>$kminnumcells&&($oldnumrows>$kmaxnumcells$oldnumcols>$kmaxnumcells)}{设置newspacingx 1.0;设置newspacingy 1.0;如果{$OLDNAMRES> $OLDNUMCORS}{SET注释{如果我们的行多于列,则需要选择一个间隔,将行数减少到我们选择的最大值。};设置newspacingy[expr 1.0*$oldnumrows*$oldspacingy/$kmaxnumcells];设置newspacingx[expr 1.0*$newspacingy/$oldspacingy*$oldspacingx];设置注释{现在我们需要检查这样做是否会导致列低于最小值。如果是这样的话,选择间距,这样我们就只能降到最小值(而不是过去)。};设置newnumcols[expr$oldnumcols*$oldspacingx/$newspacingx];如果{$newnumcols<$kminnumcells}{设置newspacingx[expr 1.0*$oldnumcols*$oldspacingx/$kminnumcells];设置newspacingy[expr 1.0*$newspacingx/$oldspacingx*$oldspacingy];};}否则{设置注释{这与上述情况相同,只是行和列的角色是相反的。};设置newspacingx[expr 1.0*$oldnumcols*$oldspacingx/$kmaxnumcells];设置newspacingy[expr 1.0*$newspacingx/$oldspacingx*$oldspacingy];设置newnumrows[expr$oldnumrows*$oldspacingy/$newspacingy];如果{$newnumrows<$kminnumcells}{设置newspacingy[expr 1.0*$oldnumrows*$oldspacingy/$kminnumcells];设置newspacingx[expr 1.0*$newspacingy/$oldspacingy*$oldspacingx];};};fme_执行重采样栅格单元大小$newspacingx$newspacingy nearest neighbor;};}elseif{$dosubset}{set comment{获取某些可能是属性或常量的字符串的值。需要注意的是,我们通过在我们使用属性前缀,因为如果一个人变成是一个属性,它实际上不会字符串中的确切名称(因为我们上面更名为我们所有的属性)。};集rasterNumRows [FME_GetAttribute _num_rows];设置rasterNumCols [FME_GetAttribute _num_columns];集评论{只做子集,如果指定起始位置实际上是光栅内。};如果{$ subsetStartRow <$ rasterNumRows && $ subsetStartCol <$ rasterNumCols} {集评论{现在绑定的子集光栅的大小,因此我们不创建填充。};如果{[EXPR $ subsetStartRow + $ subsetNumRows]> $ rasterNumRows} {集subsetNumRows [EXPR $ rasterNumRows - $ subsetStartRow];};如果{[EXPR $ subsetStartCol + $ subsetNumCols]> $ rasterNumCols} {集subsetNumCols [EXPR $ rasterNumCols - $ subsetStartCol];};FME_Execute SubsetRaster $ subsetStartRow $ subsetNumRows $ subsetStartCol $ subsetNumCols;};};集评论{由@RasterProperties删除所有添加的属性和真实属性,去掉前缀。我们假设他们都开始用下划线。};FME_Execute RemoveAttributes fme_regexp_match {^ _};foreach oldname$allnames{设置newname$kattrprefix;追加newname$oldname;FME_RenameAttribute $使用oldName $了newName;};};} FACTORY_DEF * TeeFactory FACTORY_NAME SQLExecutor_RESULT_RasterSetterUpper INPUT FEATURE_TYPE SQLExecutor_RESULT___RasterFeatures___ OUTPUT FEATURE_TYPE __viewme__ @ TCL2(“SQLExecutor_RESULT_b6867c8c_2eab_457d_99f5_5afb015be57f4_prepareRaster { } { } { } { }“)#现在将所有功能集成在录像机,改变他们#功能类型变压器的名字,让他们查看很好#SQLExecutor_RESULT_b6867c8c_2eab_457d_99f5_5afb015be57f4_VIS_FEAT_TYPE改变特征类型的特征#正在显现。DEFAULT_MACRO SQLExecutor_RESULT_b6867c8c_2eab_457d_99f5_5afb015be57f4_VIS_FEAT_TYPE SQLExecutor_RESULT $(CATMAC)DEFAULT_MACRO VISUALIZER_FEATURE_FILE $(WORKSPACE_TEMP_DIR)/$(SAFE_FFS_NAME).ffs DEFAULT_MACRO VISUALIZER_CREATE_SPATIAL_INDEX NO FACTORY_DEF * RecorderFactory FACTORY_NAME SQLExecutor_RESULT_Recorder INPUT FEATURE_TYPE __viewme__ _wb_termination_feature Yes @FeatureType(TERMINATOR_@Value(_wb_termination_xformer)) INPUT FEATURE_TYPE __viewme__ @FeatureType($(SQLExecutor_RESULT_b6867c8c_2eab_457d_99f5_5afb015be57f4_VIS_FEAT_TYPE)) FEATURE_FILE "$(VISUALIZER_FEATURE_FILE)" CREATE_SPATIAL_INDEX "$(VISUALIZER_CREATE_SPATIAL_INDEX)" INSPECTOR "$(VISUALIZER_CREATE_SPATIAL_INDEX)" MODE RECORD_PASS_THROUGH # ------------------------------------------------------------------------- FACTORY_DEF * TestFactory FACTORY_NAME "Final Output Feature Type Router" INPUT FEATURE_TYPE * TEST @Value(__wb_out_feat_type__) != "" OUTPUT PASSED FEATURE_TYPE * @FeatureType(@Value(__wb_out_feat_type__)) OUTPUT FAILED FEATURE_TYPE __nuke_me__ @Tcl2("FME_StatMessage 818059 {@Value(fme_template_feature_type)} 818060 818061 fme_warn") # ------------------------------------------------------------------------- FACTORY_DEF * TeeFactory FACTORY_NAME "Final Output Nuker" INPUT FEATURE_TYPE __nuke_me__ # ------------------------------------------------------------------------- FACTORY_DEF * CreationFactory CREATE_AT_END OUTPUT FEATURE_TYPE __NUKEME__ @TCL("if [file exists {$(WORKSPACE_TEMP_DIR)}] {set files [glob -nocomplain -directory {$(WORKSPACE_TEMP_DIR)} -tails *.ffs];如果{[llength $文件] == 1} {设定theFile {$(WORKSPACE_TEMP_DIR)/};追加theFile [LINDEX $文件0];EVAL FME_Execute系统\ 173 \ 042 $(FME_HOME_UNIX)/ fmedatainspector \ 042 --visualizer --single应用--delete上闭--no - 源提示-f FFS $ theFile&\ 175;} elseif的{[llength $文件] == 0} {{捕获文件删除-force {$(WORKSPACE_TEMP_DIR)}};}其他{设定filesNoExt {};的foreach {FILENAME} $文件{lappend filesNoExt [字符串trimright $文件名{.ffs}]};EVAL FME_Execute系统\ 173 \ 042 $(FME_HOME_UNIX)/ fmedatainspector \ 042 --visualizer --single应用--delete上闭--no - 源提示-d {$(WORKSPACE_TEMP_DIR)} -a FFS -f FFS $filesNoExt & \175;};};“)FACTORY_DEF * TeeFactory INPUT FEATURE_TYPE __NUKEME__