Éléments cartograhiques
Dans JMap, les éléments cartographiques sont des objets (points, lignes, polygones, textes, etc.) qui composent la carte. Les classes des éléments sont toutes dérivées de la classe abstraite K2DElement. Les éléments cartographiques sont organisés en couches qui sont affichées dans une application JMap à l'intérieur d'une vue (classe View). Chaque élément cartographique est associé à une géométrie (interface Geometry), possède un identifiant numérique et un certain nombre d'attributs. L'élément cartographique ne contient pas d'information géométrique directement. C'est plutôt la géométrie associée qui contient toutes les coordonnées géométriques. Les identifiants des éléments d'une même couche doivent être uniques. La méthode utilitaire GeneratedUniqueId() de la classe abstraite K2DElement permet de générer une séquence d'identifiants uniques pour les éléments.
Création d'éléments cartographiques
L'exemple suivant montre comment créer des éléments cartographiques :
// Create a point geometry Point pointGeometry = new Point.Double(100., 100.);
// Create the element using the geometry, null attributes and auto generated id K2DPoint point = new K2DPoint(pointGeometry, null, K2DElement.generateUniqueId());
// Create a line geometry Point pointGeometry1 = new Point.Double(100., 100.); Point pointGeometry2 = new Point.Double(200., 200.); Line lineGeometry = new Line(pointGeometry1, pointGeometry2);
// Create some attributes String attrib1 = "some value"; Integer attrib2 = new Integer(999);
// Create the element using the geometry, 2 attributes and auto generated id K2DPolyline line = new K2DPolyline(lineGeometry, new Object[] {attrib1, attrib2}, K2DElement.generateUniqueId());
|
Attributs des éléments
Les éléments cartographiques possèdent normalement des valeurs d'attributs. Ces valeurs sont les données descriptives des éléments. Tous les éléments appartenant à une même couche possèdent la même liste d'attributs (mêmes noms, mêmes types). Notez que les éléments ne contiennent que les valeurs des attributs (tableau d'objets) et non leur définition. La définition des ces attributs est gérée au niveau de la couche, à l'aide de la classe Attribute.
La liste des attributs des éléments d'une couche est déterminée par l'administrateur JMap au moment de la création de la couche (attributs liés). Les types des attributs sont définis à l'aide des constantes Java pour les types SQL (classe java.sql.Types).
Les attributs des éléments sont utilisés pour plusieurs fonctions telles que les infobulles, les étiquettes, les thématiques et le filtrage.
L'exemple suivant montre comment accéder aux valeurs des attributs des éléments :
K2DElement element = ...
Object[] attributeValues = element.getAttributes(); for (int i = 0; i < attributeValues.lenght; i++) { System.out.println(i + " : " + attributeValues[i]); }
|
L'exemple suivant montre comment accéder à la définition des attributs d'une couche.
VectorLayer layer= ...
Attribute[] attributes = layer.getAttributeMetaData(); for (int i = 0; i < attributes .lenght; i++) { System.out.println(i + " name : " + attributes[i].getName()); System.out.println(i + " title : " + attributes[i].getTitle()); System.out.println(i + " type: " + attributes[i].getType()); }
|
Style des éléments
Quand les éléments se dessinent sur la carte, un objet de style est utilisé pour déterminer tous leurs aspects visuels. Une instance de la classe Style contient des propriétés telles que la couleur de la ligne, la couleur de remplissage, la police de caractères, la transparence, etc. Chaque couche possède un ou plusieurs styles. Le style utilisé pour afficher les éléments est déterminé par l'échelle de la carte et la présence de thématiques. Les thématiques déterminent le style des éléments affichés en fonction de la valeur des attributs de ces éléments.
L'exemple suivant montre comment obtenir le style utilisé par une couche à une échelle donnée. Cela ne tient pas compte de la présence de thématiques sur la couche.
K2DElement element = ... VectorLayer layer = ...
Style style = layer.getStyle(view.getScaleFactor());
|
L'exemple suivant montre comment obtenir le style utilisé pour afficher l'élément spécifié à une échelle donnée. Le style retourné tient compte de la présence de thématiques sur la couche.
K2DElement element = ... VectorLayer layer = ...
Style style = layer.getStyle(element, view.getScaleFactor());
|
Les propriétés d'un style peuvent être modifiées en appelant les méthodes de la classe Style. L'exemple suivant montre comment modifier les paramètres du style d'une couche de polygones à l'échelle courante de la carte.
VectorLayer layerOfPolygons = ...
Style style = layerOfPolygons.getStyle(view.getScaleFactor());
style.setBorderColor(Color.BLACK); style.setFillColor(Color.BLUE); style.setTransparency(.5f); // 50% transparent
|
Rectangle englobant à l'affichage
Le rectangle englobant à l'affichage d'un élément cartographique est défini comme le plus petit rectangle en coordonnées écran (DC) qui contient entièrement l'élément en tenant compte de son style. Le style d'un élément a un impact sur son rectangle englobant à l'affichage. Par exemple, une bordure de polygone épaisse augment la taille du rectangle et la taille du symbole d'un point va déterminer la taille du rectangle englobant à l'affichage, etc.
The display bounds of a map element is the smallest rectangle in device coordinates (DC) that completely contains the element, taking its style into account. The style of an element influences the display bounds. For example, the thick border width of a polygon will make the display bounds bigger or the size of the symbol for a point will determine the display bounds for that point, etc.
The following code example shows how to obtain the display bounds of a map element:
L'exemple de code suivant montre comment obtenir le rectangle englobant à l'affichage d'un élément cartographique.
K2DElement element = ... View view = ... VectorLayer layer = ...
Rectangle displayBounds = element.getDisplayBounds(view.getTransform(), layer.getStyle(element, view.getScaleFactor()));
|
Notez que la méthode getDisplayBounds prend en paramètre la transformation de la vue (voir Systèmes de coordonnées) ainsi que le style de l'élément.
Rectangles englobants à l'affichage du même polygone avec des styles différents
Sélection
Les éléments cartographiques des couches vectorielles peuvent être sélectionnés. L'utilisateur possède plusieurs outils lui permettant de sélectionner des éléments des différentes couches vectorielles d'un projet JMap.
Il y a une propriété de la classe K2DElement qui s'appelle selected et qui indique si un élément est sélectionné ou non. Les éléments sélectionnés s'affichent avec un style différent, soit le style de sélection de la couche vectorielle.
Les couches vectorielles gèrent la liste de leurs éléments qui sont sélectionnés. L'API de la classe VectorLayer offre plusieurs méthodes relatives à la sélection d'éléments. Voir Couches et gestionnaire de couches pour plus d'information.
L'exemple de code source suivant montre comment sélectionner et désélectionner des éléments.
K2DElement element = ... VectorLayer layer = ...
// add the element to the current selection layer.addToSelection(element);
// test if element is selected, useless, just to demonstrate boolean isSelected = element.isSelected();
// cycle through selection Collection selection = layer.getSelection(); for (K2DElement element : selection) System.out.println(element));
// unselect element layer.unselectElement(element);
// clear layer selection layer.clearSelection();
|
Éléments stylés
Les éléments stylés (classe K2DStyledElement) sont des éléments cartographiques spéciaux. Ils comportent leur propre style et ignorent le style de la couche qui les contient lorsqu'ils s'affichent. Ils sont utiles si vous souhaitez ajouter des éléments comportant leur propre style sur la carte, par programmation. Mis à part cette différence, les éléments stylés se comportent exactement comme les autres éléments cartographiques.
L'exemple de code suivant montre comment créer des éléments stylés.
K2DElement element = ... Style style = ...
K2DStyledElement styledElem = new K2DStyledElement(element, style); // element will use this style to draw itself
|