Syntax FACTORY_DEF BoundingBoxFactory [FACTORY_NAME ] [REJECT_INVALID_GEOM ] [INPUT FEATURE_TYPE [ ]* []*]* [GROUP_BY []+]* [FLUSH_WHEN_GROUPS_CHANGE (Yes|No)] [TOPFER_INDEX [ [ ]]] [TOPFER_INDEX_SOURCE ] [TOPFER_INDEX_DESTINATION ] [BOUNDING_BOX_TYPE (COORDINATE|GEOMETRIC|GRID_POLYGONS|GRID_CENTERS|GRID_CORNERS)] [GRID_CELL_SIZE ] [GRID_CELL_COUNT ] [GRID_ORIGIN (BOTTOM_LEFT|BOTTOM_RIGHT|TOP_LEFT|TOP_RIGHT)] [GRID_SEED_X ] [GRID_SEED_Y ] [GRID_ROW_ATTR ] [GRID_COL_ATTR ] [ACCUMULATE_ATTRIBUTES [(yes|no)]] [LIST_NAME {}] [LIST_ATTRS_TO_INCLUDE []* ] [LIST_ATTRS_TO_INCLUDE_MODE (ALL|SELECTED)] [OUTPUT (ORIGINAL|BOUNDING_BOX|REJECTED) FEATURE_TYPE [ ]* []*]* Overview This factory takes a set of point, linear, polygonal, and/or aggregate features, and computes the bounding box, which is 2D and contains all features. The bounding box is defined as the minimum enclosing rectangle for all input features. The minimum rectangle is such that all sides of the rectangle are parallel to the x axis and the y axis. The input features may be partitioned into groups based on attribute values using the GROUP_BY clause and one bounding box feature is output for each group. If FLUSH_WHEN_GROUPS_CHANGE is set to Yes, processing will be performed whenever a feature of a different group is encountered, doing output early. If the GROUP_BY clause is not specified, then all input features will be processed together and a single bounding box will be output. If the BOUNDING_BOX_TYPE clause exists, it specifies the type of bounding box that will be computed. A BOUNDING_BOX_TYPE of COORDINATE specifies that the bounding box should be the maximum bounds of all the coordinates in the input feature. A BOUNDING_BOX_TYPE of GEOMETRIC specifies that the bounding box should be the bounding box of the geometry of the feature. The difference between the two options occurs in some point features, like text, ellipse, and arc features. For instance, text features only have a single coordinate, so a coordinate bounding-box would only contain this single point, but a geometric bounding box would contain the entire text feature as if it were rendered with a fixed-width font at its given height. If BOUNDING_BOX_TYPE is GRID_* (which all imply a type of GEOMETRIC) then instead of outputting a single bounding box per group, a grid of equally sized cells will be created. The three flavors are as follows: GRID_POLYGONS - a polygon for each cell GRID_CENTERS - the center point of each cell GRID_CORNERS - the corner points of each cell When BOUNDING_BOX_TYPE is GRID_*, GRID_CELL_SIZE or GRID_CELL_COUNT must also be given. In the case of GRID_CELL_SIZE, the polygons will possibly cover more than the bounding box of the input features (as all will have the same height and width). If both GRID_CELL_SIZE and GRID_CELL_COUNT are given, then the factory will act as a creator, not expecting any input, and creating the given number and size of cells. In this case the specified GRID_ORIGIN will be located at (0, 0), possibly offset to GRID_SEED_X and/or GRID_SEED_Y (whichever are specified). GRID_ORIGIN defaults to BOTTOM_LEFT, and specifies the order of grid cells-- both output order and row/col numbering order. As for output order, cells are output in order of columns, then rows. If either or both of GRID_SEED_X and GRID_SEED_Y is given, the origin of the grid will be shifted such that it aligns with the specified value(s). These parameters may only be given when building a grid by GRID_CELL_SIZE (and possibly also GRID_CELL_COUNT, but not GRID_CELL_COUNT alone). GRID_ROW_ATTR and GRID_COL_ATTR are valid when BOUNDING_BOX_TYPE is one of GRID_*. Their arguments are the names of attributes to create with zero-based indices beginning at the corner specified by GRID_ORIGIN. No attributes are carried across from the INPUT features to the OUTPUT BOUNDING_BOX features. However, all OUTPUT BOUNDING_BOX features are assigned the GROUP_BY attributes before being output. The OUTPUT ORIGINAL features are untouched as a result of their visit to the factory. If this clause is not specified, then the original features will be deleted. This factory differs from the @Bounds() function in that the function computes the bounding box of a single feature, whereas this factory computes the bounding box of a group of features. When REJECT_INVALID_GEOM is Yes, the factory will output invalid features to Rejected port. The ACCUMULATE_ATTRIBUTE clause is responsible for choosing an attribute accumulation option. If NEVER is selected, the transformer will drop all incoming attributes; if YES is selected, the transformer will merge all incoming attributes and in case of conflict, it will preserve attributes of the first incoming feature; if ONE is selected, the transformer will get attributes from the first incoming feature. The optional LIST_NAME clause is used to associate attributes with incoming feature. When the output feature is created, all attributes of each feature joining the output are added as members of the specified attribute list. The index in the list corresponds to the index of the feature's geometry in the aggregate. The optional LIST_ATTRS_TO_INCLUDE_MODE will specify if ALL attributes should be added to a list, or if only the SELECTED attributes (specified with the LIST_ATTRS_TO_INCLUDE clause) should be added to the list. If this value is not specified, it defaults to ALL. Output Tags The BoundingBoxFactory supports the following output tags. BOUNDING_BOX The bounding box of the group of features, stored as a simple polygon. ORIGINAL The original, unchanged input features. REJECTED Features checked after passed feature with non-integer attributes for column width and row height or number of horizontal and vertical tiles, which are used to calculate a grid. TO BE RESOLVED TOPFER_INDEX clause added to Syntax section above, but not documented.