| 192 | Structurally speaking the combined response looks like the original QUERYMAPFEATURES response, with the addition of 2 top-level elements: |
| 193 | * <InlineSelectionImage> for the inline selection (if requested) |
| 194 | * <SelectedFeatures> for selected features and their attributes (if requested). |
| 195 | |
| 196 | For the <SelectedFeatures> element, in order to produce a response that non-MapGuide client applications can easily understand, we don't do a verbatim dump of the MgBatchPropertyCollection in our combined response. We massage the collection and output a custom XML structure like so: |
| 197 | |
| 198 | * [1] <SelectedFeatures> Describes the selected features and its attributes. Empty if no attributes requested in the bitmask |
| 199 | * [0...n] <SelectedLayer> Describes a layer containing selected features. Includes name and id attributes to cross-match with the selection XML that's also included in the response |
| 200 | * [1] <LayerMetadata> Describes the layer properties, its display name and property type. Due to how QueryFeatureProperties works, display names are written out instead of the FDO property names. This element provides a reverse lookup in-case the FDO property name for an attribute needs to be known |
| 201 | * [0...n] <Feature> Describes each selected feature of that layer |
| 202 | * [1] <Bounds> Describes the bounding box of the feature as a space-delimited quartet [minx miny maxx maxy] |
| 203 | * [0...n] <Property> Describes a property value for the current feature |
| 204 | * [1] <Name> The mapped property name (display name). To get the FDO property name, one can cross reference this name against the parent <LayerMetadata> |
| 205 | * [0...1] <Value> The property value. We follow MgProperty XML behaviour. The omission of this tag indicates a null value. |
| 206 | |
| 207 | An easy way to understand this new structure is to see some sample responses provided below |
| 208 | |