Bentley Map - "Dynamic Feature Scoring" Notes

Summary

The following information describes Dynamic Feature Scoring (DFS) which is the underlying technology Bentley Map uses at runtime to identify various forms of instance data.

What Is DFS?

The Dynamic Feature Scoring (DFS) technology is similar to that of the "ATTACH BEST FEATURE" command from the MicroStation GeoGraphics product in which various element criteria was evaluated in order to meet (or exceed) a "minimum score" before feature tagging selected elements. A similar element evaluation and scoring system is implemented in DFS with the most significant difference being that all evaluations are made at runtime (as opposed to a batch method) and no persisted feature tags are required.

DFS Rules Evaluation

All elements within a Bentley Map session which are not part of an XFM native feature instance are evaluated (during file open/load events) against the set of defined DFS rules. The DFS engine maintains a feature rules list read from DFS metadata files specified in the configuration variable "MS_GEOXFM_DYNAMICFEATURESCORING_FILES" and also any rules added or injected during the session. These DFS rules can be manually defined by the user, other processes (e.g. Bentley Geospatial Administrator, DGN2SDO) or generated on-the-fly by Bentley Map itself in order to maximize the amount of data which can be consumed w/o the need for bulk data conversion.

Feature Instance Scoring

A feature rule is considered a match to an element when the combined score for the feature's rule(s) is greater than or equal to the minScore defined in the DFS rules file. The feature's rules are evaluated and scored if evaluated to true until either the total score reaches minScore or no more feature rules exist. If no rule matches the element, the default behavior is to identify the element as a named feature based upon the level or cell name.

Inferred "Level" Features

For elements inferred as features using level names, the feature's class name is set to that of the level name (after changing invalid feature name characters to the underscore character). If the level name begins with a number then it is prefixed with "Level_". If level name retrieval by level id fails then the feature name is: "Level_" + levelID. This behavior may be turned off by setting configuration variable "MS_GEOXFM_NO_LEVELFEATURES".

Inferred "Cell" Features

For elements inferred as features using cell names, the feature's class name is set to that of the cell name (after changing invalid feature name characters to the underscore character). If the cell name begins with a number then it is prefixed with "Cell_". For example: “Cell_4Pole” Orphan cells with cell elements on multiple levels have their feature name prefixed with “Cell_” followed by the level id. For example: “Cell_48” where 48 is the level id. Orphan cells with all elements on the same level have feature name of that level name (prefixed with “Level_” if name starts with a number). For example: “Pole”, “Level_4Pole” This behavior may be turned off by setting configuration variable "MS_GEOXFM_NO_CELLNAMEFEATURES".

Configuration Environment Variables

The following environment variables can be used to override the default behavior of the DFS functionality.

Environment Variable / Description / Example
MS_GEOXFM_DYNAMICFEATURESCORING_FILES / Specifies a list of XML files containing DFS rules for processing. / MS_GEOXFM_DYNAMICFEATURESCORING_FILES > $(MS_GEOXFM_XML_DIR)features/dynamicScoring/*.xml
MS_GEOXFM_NO_DYNAMICSCOREDFEATURES / Specifies that the DFS engine is off and will not featurize elements. / MS_GEOXFM_NO_DYNAMICSCOREDFEATURES = 1
MS_GEOXFM_NO_LEVELFEATURES / Specifies that the DFS engine should not identify non-cell elements as features with feature name equal to the element's level name if no DFS rule matches the element. The default behavior is that elements are identified as level features if no DFS rule matches the element. / MS_GEOXFM_NO_LEVELFEATURES = 1
MS_GEOXFM_NO_CELLNAMEFEATURES / Specifies that the DFS engine should not identify cell elements as features with feature name equal to the element's cell name if no DFS rule matches the element. The default behavior is that cell elements are identified as cell name features if no DFS rule matches the element. / MS_GEOXFM_NO_CELLNAMEFEATURES = 1

Sample DFS Rules XML File

FeatureScoringRules minScore="100"

Feature useCriteria="" name="tax_proposed"

Rule type="cexpr" score="100"XFMHasDBLink(2,150)||XFMCompareElementLevelName("tax proposed")</Rule

</Feature

Feature useCriteria="" name="Pole"

Rule type="DBLink" score="100" entity="2" mslink="130"/>

</Feature

Feature useCriteria="" name="Wire"

Rule type="DBLink" score="100" entity="2" mslink="130"/>

Rule type="FeatureDef" score="100" levelName="true" cellName="false"Wire</Rule

</Feature

Feature useCriteria="" name="Cable"

Rule type="DBLink" score="100" entity="2" mslink="80"/>

Rule type="Element" score="100" levelName="Cable" cellName="Cable" elementType="2" checkZeroLengthLineElementType="false"/>

</Feature

</FeatureScoringRules

DFS Rule Types

Rule Type Name / Description
cexpr / CExpression rule. Any CExpression containing functions published with mdlCExpression_publishFunction may be used. If no rule type is specified, then this rule type is the default. The following XFM published functions are available for use with CExpression rules evaluation.
Function / Parameters
XFMHasDBLink / int entityNumber, UInt32 mslink
XFMHasDBLinkEntity / int entityNumber, UInt32 mslink
XFMCompareElementSymbology / UInt32 inputColor, UInt32 inputWeight, Int32 inputStyle
XFMCompareElementType / int type
XFMCompareElementLevelId / UInt32 inputLevel
XFMCompareElementLevelName / char* inputLevelName
XFMCompareElementLevelNameToDef / char* featureName
XFMHasXAttribute / UInt16 major, UInt16 minor
XFMHasXAttributeId / UInt16 major, UInt16 minor, UInt32 id
XFMCompareElementCellName / char* inputCellName
XFMCompareElementColor / UInt32 inputColor
XFMCompareElementWeight / UInt32 inputWeight
XFMCompareElementStyle / Int32 inputStyle
XFMCompareElementStyleName / char* pStyleName
DBLink / Database linkage rule. Current element is checked for a MicroStation database linkage with the specified entity and mslink values.
DBEntity / Database entity linkage rule. Current element is checked for a MicroStation database linkage with the specified entity value.
FeatureDef / Feature definition rule. Current element is compared to the XFM feature definition of the given feature class name using the following comparison types:
Type Name / Description
levelName / true or false - If true, element level name must match a level name specified in feature definition. If the Feature definition contains a list of level names then if element level name matches one of the levels in the list then evaluates to true.
cellName / true or false - If true, element cell name must match a cell name specified in feature definition. If the Feature definition contains a list of cell names then if element cell name matches one of the cell names in the list then evaluates to true.
Element / Element rule. Current element is compared to specified element settings using the following comparison types:
Type Name / Description
levelName / name of a level - If specified, element level name must match the specified level name
cellName / name of a cell - If specified, element cell name must match the specified cell name
elementType / one or more element types - If specified, element type must match one of the specified element types. A zero length linear is identified as element type 0. This identification may be disabled by setting attribute "checkZeroLengthLineElementType" to "false".
Examples
Value / Description
3 / element type 3
3-4 / element type 3 or 4
3-4,12 / element type 3, 4 or 12
1-12 / element types 1 through 12
0 / linear element type with two equal points (zero length line)
checkZeroLengthLineElementType / Flag denoting if linear element is checked to determine if element is a zero length line. If a zero length line is identified, then the element type identifier is zero. The default value for this attribute is "true".

5