As defined in the article about map widgets, the relationships between Map widgets is the following:
The coordinate system is managed by the MapSource widget and is not modifiable at runtime, but the other characteristics of the Map[1]
In the following of this article, we will use the example of the MapHorz architecture, but the MapVert architecture is exactly the same except that the ranges in the X and Y axis are different
are modifiable at runtime:
The reference of the Map, its range, and its orientation are managed by the Map widget
The list of MapItems is managed by the MapItemList widget
Design-time
The separation of the Map elements between the 3 widgets means that:
The Map widget will maintain the reference of the Map, its range, and its orientation
The MapSource widget will maintain the coordinate system and its projection
The MapItemList widget will maintain the list of MapItems and their real-world and screen coordinates[2]
Because the same MapItemList can be presented more than once (see map widgets usage in Connectors), there is a list of screen coordinates for each target where the MapItemList is presented
Runtime
There are two "events" which can modify the coordinates of MapItems:
An update of the Map characteristics will change the screen coordinates of all the MapItems in all the MapItemList widgets which are under this Map
An update of the Buffer for a MapItemList will update the MapItems screen coordinates (and possibly remove MapItems, add MapItems, or change the styles of Mapitems) in this Buffer
These two "events" are completely unrelated (they even can be sent by different User Applications).
Without taking any particular care, the Server could be completely swamped by the updates sent by the UA. For example in a use case where the reference for a MapHorz is the position of the aircraft, this position can for example change every 10 ms, which would mean that the Server would have to compute the position of all the MapItems for this mapHorz every 10 ms.
To avoid this kind of problem, the server.projectionUpdateCap property allows to specify at which rate the MapItems coordinates will be updated: This is the minimum time between two projection characteristics changes in Maps. The default is 160 ms, and 0 means that there is no cap at all. If two MapItemList buffers or MapHorz characteristics are received in less than his value, the Server will wait until this time has elapsed to compute the change.
Also, if updates to the MapItems are received before this time are elapsed, the Server will store the associated MapItems characteristics in the received Buffers and perform the compute after the time has elapsed.
MapItems screen coordinates updates
Contrary to "regular" widgets, updating the screen coordinates of MapItems involves two phases:
First computing the screen coordinates of the MapItems, depending on the characteristics of the Map (for example, the Range), the coordinate system managed by the MapSource, and the real-world coordinate of each MapItems
Update the position of the associated graphic widget
Notes
^ In the following of this article, we will use the example of the MapHorz architecture, but the MapVert architecture is exactly the same except that the ranges in the X and Y axis are different
^ Because the same MapItemList can be presented more than once (see map widgets usage in Connectors), there is a list of screen coordinates for each target where the MapItemList is presented