This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See http://git.codelutin.com/observe.git commit 1c9d89caed761cd189a2e2f3d9d4d4888bf67910 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Thu Apr 23 14:06:55 2015 +0200 add legend --- .../fr/ird/observe/tripMap/TripMapPointType.java | 36 +++++--- .../i18n/observe-entities_en_GB.properties | 12 +++ .../i18n/observe-entities_es_ES.properties | 12 +++ .../i18n/observe-entities_fr_FR.properties | 12 +++ .../observe/ui/util/tripMap/ObserveMapPane.java | 88 +++++++++++++++++++- .../ui/util/tripMap/ObserveMapPaneLegendItem.java | 69 ++++++++++++++++ .../util/tripMap/ObserverMapPanLegendDrawer.java | 95 ++++++++++++++++++++++ .../observe/ui/util/tripMap/TripMapUIHandler.java | 65 +++++++++++++-- .../resources/i18n/observe-swing_en_GB.properties | 2 + .../resources/i18n/observe-swing_es_ES.properties | 2 + .../resources/i18n/observe-swing_fr_FR.properties | 2 + 11 files changed, 375 insertions(+), 20 deletions(-) diff --git a/observe-entities/src/main/java/fr/ird/observe/tripMap/TripMapPointType.java b/observe-entities/src/main/java/fr/ird/observe/tripMap/TripMapPointType.java index cbe7b85..82f9243 100644 --- a/observe-entities/src/main/java/fr/ird/observe/tripMap/TripMapPointType.java +++ b/observe-entities/src/main/java/fr/ird/observe/tripMap/TripMapPointType.java @@ -1,22 +1,34 @@ package fr.ird.observe.tripMap; +import static org.nuiton.i18n.I18n.n; +import static org.nuiton.i18n.I18n.t; + /** * @author Sylvain Bavencoff - bavencoff@codelutin.com */ public enum TripMapPointType { - SEINE_DEPARTURE_HARBOUR, - SEINE_LANDINGE_HARBOUR, - SEINE_ACTIVITY, - SEINE_ACTIVITY_WITH_FREE_SCHOOL_TYPE, - SEINE_ACTIVITY_WITH_OBJECT_SCHOOL_TYPE, + SEINE_DEPARTURE_HARBOUR(n("observe.map.seine.harbour.departure")), + SEINE_LANDINGE_HARBOUR(n("observe.map.seine.harbour.landing")), + SEINE_ACTIVITY(n("observe.map.seine.activity")), + SEINE_ACTIVITY_WITH_FREE_SCHOOL_TYPE(n("observe.map.seine.activity.schollType.free")), + SEINE_ACTIVITY_WITH_OBJECT_SCHOOL_TYPE(n("observe.map.seine.activity.schollType.object")), + + LONGLINE_DEPARTURE_HARBOUR(n("observe.map.longLine.seine.harbour.departure")), + LONGLINE_LANDINGE_HARBOUR(n("observe.map.longLine.seine.harbour.landing")), + LONGLINE_ACTIVITY(n("observe.map.longLine.activity")), + LONGLINE_ACTIVITY_WITH_SETTING_START(n("observe.map.longLine.activity.setting.start")), + LONGLINE_ACTIVITY_WITH_SETTING_END(n("observe.map.longLine.activity.setting.end")), + LONGLINE_ACTIVITY_WITH_HAULING_START(n("observe.map.longLine.activity.hauling.start")), + LONGLINE_ACTIVITY_WITH_HAULING_END(n("observe.map.longLine.activity.hauling.end")); + + String label; - LONGLINE_DEPARTURE_HARBOUR, - LONGLINE_LANDINGE_HARBOUR, - LONGLINE_ACTIVITY, - LONGLINE_ACTIVITY_WITH_SETTING_START, - LONGLINE_ACTIVITY_WITH_SETTING_END, - LONGLINE_ACTIVITY_WITH_HAULING_START, - LONGLINE_ACTIVITY_WITH_HAULING_END; + TripMapPointType(String label) { + this.label = label; + } + public String getLabel() { + return t(label); + } } diff --git a/observe-entities/src/main/resources/i18n/observe-entities_en_GB.properties b/observe-entities/src/main/resources/i18n/observe-entities_en_GB.properties index b81be2a..9f50422 100644 --- a/observe-entities/src/main/resources/i18n/observe-entities_en_GB.properties +++ b/observe-entities/src/main/resources/i18n/observe-entities_en_GB.properties @@ -20,6 +20,18 @@ observe.common.reference.status.enabled= observe.common.schoolType.libre= observe.common.schoolType.objet= observe.common.schoolType.undefined= +observe.map.longLine.activity= +observe.map.longLine.activity.hauling.end= +observe.map.longLine.activity.hauling.start= +observe.map.longLine.activity.setting.end= +observe.map.longLine.activity.setting.start= +observe.map.longLine.seine.harbour.departure= +observe.map.longLine.seine.harbour.landing= +observe.map.seine.activity= +observe.map.seine.activity.schollType.free= +observe.map.seine.activity.schollType.object= +observe.map.seine.harbour.departure= +observe.map.seine.harbour.landing= observe.storage.migrate.askUser.message=Database use version %1$s,\n\nYou need to migrate to version %2$s.\nWould you like to execute migration ?\n\nNote\: Following migrations will be applied\: %3$s. observe.storage.migrate.askUser.title=Database update to version %1$s is required observe.storage.migrate.not.possible.before.version.3.0.message=<html><body>The application version requires a database in minimum version <strong>3.0</strong>. You database is actually in version %s<br/>Do first a migration using ObServe 3.0 or 3.1, you will then be able to migrate your database using this version of ObServe</body></html> diff --git a/observe-entities/src/main/resources/i18n/observe-entities_es_ES.properties b/observe-entities/src/main/resources/i18n/observe-entities_es_ES.properties index 71f83d7..a0f0749 100644 --- a/observe-entities/src/main/resources/i18n/observe-entities_es_ES.properties +++ b/observe-entities/src/main/resources/i18n/observe-entities_es_ES.properties @@ -20,6 +20,18 @@ observe.common.reference.status.enabled=Activado observe.common.schoolType.libre=Banco libre observe.common.schoolType.objet=Banco a objeto observe.common.schoolType.undefined=Banco indeterminado +observe.map.longLine.activity= +observe.map.longLine.activity.hauling.end= +observe.map.longLine.activity.hauling.start= +observe.map.longLine.activity.setting.end= +observe.map.longLine.activity.setting.start= +observe.map.longLine.seine.harbour.departure= +observe.map.longLine.seine.harbour.landing= +observe.map.seine.activity= +observe.map.seine.activity.schollType.free= +observe.map.seine.activity.schollType.object= +observe.map.seine.harbour.departure= +observe.map.seine.harbour.landing= observe.storage.migrate.askUser.message=La base de datos tiene la versión %1$s,\n\n Es necesario una migración a la versión %2$s.\n¿Quiere migrar la base de datos ?\n\nNota \: Se aplicarán las siguientes actualizaciones \: %3$s. observe.storage.migrate.askUser.title=Se requiera la actualización de la base de datos a la versión %1$s. observe.storage.migrate.not.possible.before.version.3.0.message=<html><body>La version %s d'ObServe nécessite une base de version au moins <strong>3.0</strong>. Votre base est en version %s<br/>Veuillez dans un premier temps utiliser ObServe 3.0 ou 3.1 pour effectuer la migration puis réouvrir la base avec cette nouvelle version d'ObServe</body></html> diff --git a/observe-entities/src/main/resources/i18n/observe-entities_fr_FR.properties b/observe-entities/src/main/resources/i18n/observe-entities_fr_FR.properties index d4a8587..60be1c5 100644 --- a/observe-entities/src/main/resources/i18n/observe-entities_fr_FR.properties +++ b/observe-entities/src/main/resources/i18n/observe-entities_fr_FR.properties @@ -20,6 +20,18 @@ observe.common.reference.status.enabled=Activé observe.common.schoolType.libre=Banc libre observe.common.schoolType.objet=Banc objet observe.common.schoolType.undefined=Banc indéterminé +observe.map.longLine.activity=point d'activité +observe.map.longLine.activity.hauling.end=Fin de filage +observe.map.longLine.activity.hauling.start=Début de filage +observe.map.longLine.activity.setting.end=Fin de virage +observe.map.longLine.activity.setting.start=Début de virage +observe.map.longLine.seine.harbour.departure=Port de départ +observe.map.longLine.seine.harbour.landing=Port d'arrivée +observe.map.seine.activity=point d'activité +observe.map.seine.activity.schollType.free=Banc libre +observe.map.seine.activity.schollType.object=Banc objet +observe.map.seine.harbour.departure=Port de départ +observe.map.seine.harbour.landing=Port d'arrivée observe.storage.migrate.askUser.message=La base de données est en version %1$s,\n\nUne migration en version %2$s est nécéssaire.\nVoulez vous migrer la base de données ?\n\nNote \: Les mises à jour suivantes seront appliquées \: %3$s. observe.storage.migrate.askUser.title=Mise à jour de la base en version %1$s requise observe.storage.migrate.not.possible.before.version.3.0.message=<html><body>La version %s d'ObServe nécessite une base de version au moins <strong>3.0</strong>. Votre base est en version %s<br/>Veuillez dans un premier temps utiliser ObServe 3.0 ou 3.1 pour effectuer la migration puis réouvrir la base avec cette nouvelle version d'ObServe</body></html> diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/ObserveMapPane.java b/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/ObserveMapPane.java index a0f8718..d624681 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/ObserveMapPane.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/ObserveMapPane.java @@ -1,9 +1,13 @@ package fr.ird.observe.ui.util.tripMap; +import com.google.common.collect.Lists; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.geotools.geometry.jts.ReferencedEnvelope; import org.geotools.renderer.lite.RendererUtilities; +import org.geotools.styling.FeatureTypeStyle; +import org.geotools.styling.Rule; +import org.geotools.styling.Style; import org.geotools.swing.JMapPane; import org.geotools.swing.event.MapPaneAdapter; import org.geotools.swing.event.MapPaneEvent; @@ -14,6 +18,8 @@ import java.awt.Graphics; import java.awt.Point; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; +import java.awt.image.BufferedImage; +import java.util.List; import static org.nuiton.i18n.I18n.n; import static org.nuiton.i18n.I18n.t; @@ -48,7 +54,7 @@ public class ObserveMapPane extends JMapPane { updateScale(); } }); - + legendItems = Lists.newArrayList(); } @@ -156,6 +162,84 @@ public class ObserveMapPane extends JMapPane { } + protected List<ObserveMapPaneLegendItem> legendItems; + + public List<ObserveMapPaneLegendItem> getLegendItems() { + return legendItems; + } + + public void setLegendItems(List<ObserveMapPaneLegendItem> legendItems) { + this.legendItems = legendItems; + } + + protected void paintLegend(Graphics graphics) { + + if (legendItems != null) { + + int x = 0; + int y = getHeight() - ObserveMapPaneLegendItem.LEGEND_ITEM_HEIGHT * legendItems.size(); + + ObserverMapPanLegendDrawer drawer = new ObserverMapPanLegendDrawer(); + + FontMetrics fm = graphics.getFontMetrics(); + + int maxLabelWidth = 0; + + for (ObserveMapPaneLegendItem item : legendItems) { + Rectangle2D labelArea = fm.getStringBounds(item.getLabel(), graphics); + + maxLabelWidth = Math.max((int)labelArea.getWidth(), maxLabelWidth); + + } + + for (ObserveMapPaneLegendItem item : legendItems) { + + graphics.setColor(ObserveMapPaneLegendItem.LEGEND_BACKGROUND); + graphics.fillRect( + x, + y, + ObserveMapPaneLegendItem.LEGEND_SYMBOL_WIDTH + maxLabelWidth + ObserveMapPaneLegendItem.LEGEND_MARGIN, + ObserveMapPaneLegendItem.LEGEND_ITEM_HEIGHT); + + BufferedImage symbole = new BufferedImage( + ObserveMapPaneLegendItem.LEGEND_SYMBOL_WIDTH, + ObserveMapPaneLegendItem.LEGEND_ITEM_HEIGHT, + BufferedImage.TYPE_INT_ARGB); + + Style style = item.getStyle(); + + for (FeatureTypeStyle featureTypeStyle : style.featureTypeStyles()) { + + for (Rule rule : featureTypeStyle.rules()) { + + if (rule.getFilter().evaluate(item.getSimpleFeature())) { + + drawer.drawDirect(symbole, item.getSimpleFeature(), rule); + + } + } + } + + graphics.drawImage(symbole, x, y, null); + + graphics.setColor(Color.BLACK); + + Rectangle2D labelArea = fm.getStringBounds(item.getLabel(), graphics); + + int labelMarginBottom = (int) ((ObserveMapPaneLegendItem.LEGEND_ITEM_HEIGHT - labelArea.getHeight()) / 2); + + graphics.drawString(item.getLabel(), + x + ObserveMapPaneLegendItem.LEGEND_SYMBOL_WIDTH, + y + ObserveMapPaneLegendItem.LEGEND_ITEM_HEIGHT - labelMarginBottom); + + y += ObserveMapPaneLegendItem.LEGEND_ITEM_HEIGHT; + + } + } + + } + + @Override public void paint(Graphics graphics) { @@ -166,6 +250,8 @@ public class ObserveMapPane extends JMapPane { paintCompass(graphics); + paintLegend(graphics); + } protected enum CardinalPoint { diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/ObserveMapPaneLegendItem.java b/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/ObserveMapPaneLegendItem.java new file mode 100644 index 0000000..4a6cd5a --- /dev/null +++ b/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/ObserveMapPaneLegendItem.java @@ -0,0 +1,69 @@ +package fr.ird.observe.ui.util.tripMap; + +import com.vividsolutions.jts.geom.Coordinate; +import org.geotools.styling.Style; +import org.opengis.feature.simple.SimpleFeature; + +import java.awt.Color; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public class ObserveMapPaneLegendItem { + + protected static final int LEGEND_ITEM_HEIGHT = 20; + protected static final int LEGEND_SYMBOL_WIDTH = 50; + protected static final int LEGEND_MARGIN = 5; + protected static final Color LEGEND_BACKGROUND = new Color(1f, 1f, 1f, 0.8f); + + + public static Coordinate[] lineCoordinates() { + Coordinate[] coordinates = new Coordinate[2]; + coordinates[0] = new Coordinate(LEGEND_MARGIN, LEGEND_ITEM_HEIGHT / 2); + coordinates[1] = new Coordinate(LEGEND_SYMBOL_WIDTH - LEGEND_MARGIN, LEGEND_ITEM_HEIGHT / 2); + return coordinates; + } + + public static Coordinate[] pointCoordinates() { + Coordinate[] coordinates = new Coordinate[1]; + coordinates[0] = new Coordinate(LEGEND_SYMBOL_WIDTH / 2, LEGEND_ITEM_HEIGHT / 2); + return coordinates; + } + + + protected SimpleFeature simpleFeature; + + protected Style style; + + protected String label; + + public ObserveMapPaneLegendItem(SimpleFeature simpleFeature, Style style, String label) { + this.simpleFeature = simpleFeature; + this.style = style; + this.label = label; + } + + public SimpleFeature getSimpleFeature() { + return simpleFeature; + } + + public void setSimpleFeature(SimpleFeature simpleFeature) { + this.simpleFeature = simpleFeature; + } + + public Style getStyle() { + return style; + } + + public void setStyle(Style style) { + this.style = style; + } + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } +} diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/ObserverMapPanLegendDrawer.java b/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/ObserverMapPanLegendDrawer.java new file mode 100644 index 0000000..930f825 --- /dev/null +++ b/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/ObserverMapPanLegendDrawer.java @@ -0,0 +1,95 @@ +package fr.ird.observe.ui.util.tripMap; + +import com.vividsolutions.jts.geom.Coordinate; +import com.vividsolutions.jts.geom.Geometry; +import com.vividsolutions.jts.geom.LineString; +import com.vividsolutions.jts.geom.LinearRing; +import com.vividsolutions.jts.geom.Point; +import org.geotools.geometry.jts.LiteShape; +import org.geotools.legend.Drawer; +import org.geotools.styling.LineSymbolizer; +import org.geotools.styling.PointSymbolizer; +import org.geotools.styling.Rule; +import org.geotools.styling.SLD; +import org.geotools.styling.Symbolizer; +import org.geotools.styling.TextSymbolizer; +import org.opengis.feature.simple.SimpleFeature; + +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Stroke; +import java.awt.geom.AffineTransform; +import java.awt.image.BufferedImage; + +/** + * @author Sylvain Bavencoff - bavencoff@codelutin.com + */ +public class ObserverMapPanLegendDrawer { + + protected Drawer drawer; + + + public ObserverMapPanLegendDrawer() { + drawer = Drawer.create(); + + } + + public void drawDirect(BufferedImage bi, SimpleFeature feature, Rule rule){ + AffineTransform affineTransform = new AffineTransform(); + + LiteShape shape = new LiteShape(null, affineTransform, false); + for(Symbolizer symbolizer : rule.getSymbolizers()) { + if (symbolizer instanceof LineSymbolizer) { + LineSymbolizer lineSymbolizer = (LineSymbolizer) symbolizer; + + Geometry geometry = findGeometry(feature, lineSymbolizer); + if (geometry != null) { + + Graphics graphics = bi.getGraphics(); + Graphics2D g = (Graphics2D) graphics; + + shape.setGeometry(geometry); + + + Color c = SLD.color(lineSymbolizer); + int w = SLD.width( lineSymbolizer ); + float[] lineDash = SLD.lineDash(lineSymbolizer); + if( c != null && w > 0 ){ + g.setColor( c ); + + Stroke str = new BasicStroke( + w, + BasicStroke.CAP_SQUARE, + BasicStroke.JOIN_MITER, + 10.0f, lineDash, 0.0f + ); + g.setStroke(str); + + g.draw( shape ); + } + } + } else { + drawer.drawFeature(bi, feature, affineTransform, false, symbolizer, null, shape); + } + + } + + + } + + protected Geometry findGeometry(SimpleFeature feature, LineSymbolizer lineSymbolizer) { + String geomName = lineSymbolizer.getGeometryPropertyName(); + + Geometry geom; + if (geomName == null) { + geom = (Geometry) feature.getDefaultGeometry(); + } else { + geom = (Geometry) feature.getAttribute(geomName); + } + return geom; + } + + +} diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/TripMapUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/TripMapUIHandler.java index db9c6c1..68eb5c0 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/TripMapUIHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/util/tripMap/TripMapUIHandler.java @@ -3,6 +3,7 @@ package fr.ird.observe.ui.util.tripMap; import com.google.common.base.Function; import com.google.common.base.Optional; import com.google.common.base.Predicate; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.vividsolutions.jts.geom.Coordinate; @@ -17,6 +18,7 @@ import fr.ird.observe.db.DataSourceException; import fr.ird.observe.tripMap.TripMapPoint; import fr.ird.observe.tripMap.TripMapPointType; import fr.ird.observe.ui.UIHelper; +import javafx.util.Pair; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateUtils; import org.apache.commons.logging.Log; @@ -67,6 +69,7 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; +import java.util.Set; import static org.nuiton.i18n.I18n.t; @@ -79,6 +82,14 @@ public class TripMapUIHandler { public static final String TRIP_POINTS_LAYER_NAME = "Trip points"; public static final double ZOOM_STEP_RATIO = 0.1; + protected static final Set<TripMapPointType> TRIP_MAP_POINT_TYPES_IN_LEGEND = ImmutableSet.of( + TripMapPointType.SEINE_ACTIVITY_WITH_FREE_SCHOOL_TYPE, + TripMapPointType.SEINE_ACTIVITY_WITH_OBJECT_SCHOOL_TYPE, + TripMapPointType.LONGLINE_ACTIVITY_WITH_SETTING_START, + TripMapPointType.LONGLINE_ACTIVITY_WITH_SETTING_END, + TripMapPointType.LONGLINE_ACTIVITY_WITH_HAULING_START, + TripMapPointType.LONGLINE_ACTIVITY_WITH_HAULING_END); + public static TripMapUIHandler newHandler(TripMapUI view) { return new TripMapUIHandler(view); } @@ -133,9 +144,10 @@ public class TripMapUIHandler { throw new ObserveTechnicalException("Unable to load trip map activity points", e); } - JMapPane mapPane = getObserveMapPane(); - MapContent mapContent = buildMapContent(tripMapPoints); - mapPane.setMapContent(mapContent); + ObserveMapPane mapPane = getObserveMapPane(); + Pair<MapContent, List<ObserveMapPaneLegendItem>> buildMapContent = buildMapContent(tripMapPoints); + mapPane.setMapContent(buildMapContent.getKey()); + mapPane.setLegendItems(buildMapContent.getValue()); } public void zoomIt() { @@ -181,9 +193,10 @@ public class TripMapUIHandler { - protected MapContent buildMapContent(List<TripMapPoint> tripMapPoints) { + protected Pair<MapContent, List<ObserveMapPaneLegendItem>> buildMapContent(List<TripMapPoint> tripMapPoints) { MapContent mapContent = new MapContent(); + List<ObserveMapPaneLegendItem> legendItems = Lists.newArrayList(); if (tripMapPoints != null) { try { @@ -264,10 +277,31 @@ public class TripMapUIHandler { Style styleLines = findStyle(styledLayerDescriptor, TRIP_LINES_LAYER_NAME, null); Layer layerLines = new FeatureLayer(linesFeatures, styleLines); - mapContent.addLayer(layerLines); + // add line in legend + LineString line = geometryFactory.createLineString(ObserveMapPaneLegendItem.lineCoordinates()); + lineBuilder.add(line); + lineBuilder.add(""); + lineBuilder.add("tripDay"); + + ObserveMapPaneLegendItem legendTripDay = new ObserveMapPaneLegendItem( + lineBuilder.buildFeature(null), + styleLines, + t("observe.map.legend.tripDay")); + legendItems.add(legendTripDay); + + lineBuilder.add(line); + lineBuilder.add(""); + lineBuilder.add("tripBetweenTwoDays"); + ObserveMapPaneLegendItem legendTripBetweenTwoDays = new ObserveMapPaneLegendItem( + lineBuilder.buildFeature(null), + styleLines, + t("observe.map.legend.tripBetweenTwoDays")); + legendItems.add(legendTripBetweenTwoDays); + + // add Point SimpleFeatureTypeBuilder pointFeatureTypeBuilder = new SimpleFeatureTypeBuilder(); pointFeatureTypeBuilder.setName("point Builder"); @@ -280,6 +314,9 @@ public class TripMapUIHandler { DefaultFeatureCollection pointsFeatures = new DefaultFeatureCollection(); + Style stylePoints = findStyle(styledLayerDescriptor, TRIP_POINTS_LAYER_NAME, null); + + for (final TripMapPointType type : TripMapPointType.values()) { Iterable<Coordinate> coordinates = Iterables.transform( @@ -302,10 +339,24 @@ public class TripMapUIHandler { pointBuilder.add(points); pointBuilder.add(type.name()); pointsFeatures.add(pointBuilder.buildFeature(null)); + + + // add point in legend + if (TRIP_MAP_POINT_TYPES_IN_LEGEND.contains(type)) { + points = geometryFactory.createMultiPoint(ObserveMapPaneLegendItem.pointCoordinates()); + pointBuilder.add(points); + pointBuilder.add(type.name()); + + ObserveMapPaneLegendItem legendPoint = new ObserveMapPaneLegendItem( + pointBuilder.buildFeature(null), + stylePoints, + type.getLabel()); + legendItems.add(legendPoint); + } + } } - Style stylePoints = findStyle(styledLayerDescriptor, TRIP_POINTS_LAYER_NAME, null); Layer pointsLayer = new FeatureLayer(pointsFeatures, stylePoints); mapContent.addLayer(pointsLayer); // set zoom @@ -322,7 +373,7 @@ public class TripMapUIHandler { } } - return mapContent; + return new Pair<MapContent, List<ObserveMapPaneLegendItem>>(mapContent, legendItems); } protected StyledLayerDescriptor importStyledLayerDescriptor() throws FileNotFoundException { diff --git a/observe-swing/src/main/resources/i18n/observe-swing_en_GB.properties b/observe-swing/src/main/resources/i18n/observe-swing_en_GB.properties index 2511271..6ea0f1b 100644 --- a/observe-swing/src/main/resources/i18n/observe-swing_en_GB.properties +++ b/observe-swing/src/main/resources/i18n/observe-swing_en_GB.properties @@ -1283,6 +1283,8 @@ observe.map.export.overwrite.cancel= observe.map.export.overwrite.ok= observe.map.export.overwrite.title= observe.map.export.success= +observe.map.legend.tripBetweenTwoDays= +observe.map.legend.tripDay= observe.map.miles= observe.map.north= observe.map.south= diff --git a/observe-swing/src/main/resources/i18n/observe-swing_es_ES.properties b/observe-swing/src/main/resources/i18n/observe-swing_es_ES.properties index 256a25a..4311e7f 100644 --- a/observe-swing/src/main/resources/i18n/observe-swing_es_ES.properties +++ b/observe-swing/src/main/resources/i18n/observe-swing_es_ES.properties @@ -1285,6 +1285,8 @@ observe.map.export.overwrite.cancel= observe.map.export.overwrite.ok= observe.map.export.overwrite.title= observe.map.export.success= +observe.map.legend.tripBetweenTwoDays= +observe.map.legend.tripDay= observe.map.miles= observe.map.north= observe.map.south= diff --git a/observe-swing/src/main/resources/i18n/observe-swing_fr_FR.properties b/observe-swing/src/main/resources/i18n/observe-swing_fr_FR.properties index e88068e..e9fd951 100644 --- a/observe-swing/src/main/resources/i18n/observe-swing_fr_FR.properties +++ b/observe-swing/src/main/resources/i18n/observe-swing_fr_FR.properties @@ -1277,6 +1277,8 @@ observe.map.export.overwrite.cancel=Annuler observe.map.export.overwrite.ok=Remplacer observe.map.export.overwrite.title=Attention observe.map.export.success=Carte Exportée +observe.map.legend.tripBetweenTwoDays=Trajet entre deux jours +observe.map.legend.tripDay=Trajet d'une journée observe.map.miles=milles observe.map.north=Nord observe.map.south=Sud -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.