Systèmes de coordonnées
Il existe 2 systèmes de coordonnées utilisés lors de la programmation avec JMap Pro. Il y a le système de coordonnées du monde (ou world coordinates - WC) et le système de coordonnées d'écran (ou device coordinates - DC). Le système WC est le système original des données tandis que le système DC est celui de l'écran servant à afficher la carte.
Système de coordonnées du monde (WC) VS système de coordonnées écran (DC)
WC
Toutes les coordonnées des géométries dans JMap sont en WC. Par exemple, si vos données utilise la projection MTM zone 8, les valeurs des coordonnées seront semblables à (300 000, 5 000 000). Si vos données ne sont pas projetées, elles sont donc en longitude et latitude et leur étendue est de -180 à 180 degrés est-ouest et de -90 à 90 degrés nord-sud.
DC
L'écran d'ordinateur servant à afficher la carte est divisé en pixels avec la coordonnées (0, 0) localisée en haut à gauche. C'est le système DC. Quand vous traitez des événements de souris (p.e. MouseClicked) dans une application JMap, vous traitez des coordonnées DC contenues dans l'événement et exprimés en pixels.
Transformation de coordonnées entre WC et DC
En programmant dans JMap, il est fréquent qu'on doive transformer des coordonnées entre WC et DC et ce, dans les 2 directions. Quand les éléments cartographiques d'une couche sont dessinés à l'écran, leurs coordonnées sont converties à la volée de WC vers DC afin d'allumer les bons pixels à l'écran. Par contre, quand un clic de souris survient sur la carte, la coordonnées DC du curseur de la souris est transformée en WC afin de sélectionner le bon élément sur la carte.
La classe K2DTransform contient une matrice de transformation affine utilisée pour convertir les données entre les systèmes DC et WC. Elle offre des méthodes de transformation dans les 2 directions. Chaque carte dans JMap (classe View) possède sa propre instance de transformation.
Principales méthodes de la classe K2DTransform |
|
Crée un nouveau rectangle orienté à partir du point WC spécifié et le transforme en DC. |
|
Crée un nouveau point à partir du point WC spécifié et le transforme en DC. |
|
Crée un nouveau rectangle à partir de la rectangle WC spécifié et le transforme en DC. |
|
Crée un nouveau rectangle orienté à partir du point DC spécifié et le transforme en WC. |
|
Crée un nouveau point à partir du point DC spécifié et le transforme en WC. |
|
Crée un nouveau rectangle à partir de la rectangle DC spécifié et le transforme en WC. |
L'exemple de code source suivant montre comment transformer des coordonnées WC vers DC.
K2DTransform transform = ... Point pointWC; Point pointDC;
// Transform a point from WC to DC pointWC = new Point.Double(100., 100.); pointDC = transform.transform(pointWC);
// Transform a point from DC to WC pointDC = new Point.Double(100., 100.); pointWC = transform.transformInv(pointDC);
|
L'exemple de code source suivant montre comment transformer une coordonnées DC provenant d'un événement de souris vers WC. La transformation est obtenue de la vue.
View view = ...
|
L'exemple de code source suivant montre comment transformer une coordonnées DC en utilisant l'événement de souris. Cette méthode simple ne peut être utilisée qu'à partir d'une classe d'outil dérivée de la classe Tool.
Point pointWC = Tool.toWCPoint(e);
|
Certaines précautions doivent être prises lors de la transformation (normale ou inverse) d'un rectangle, car si une rotation est appliquée sur la vue, le rectangle retourné pourrait être écrasé. Pour prévenir ce type de problème, il vaut mieux effectuer les calculs sur un rectangle orienté, initialisé à partir du rectangle à transformer.
View view = ...
|