Mercurial > dive4elements > river
view flys-client/src/main/java/de/intevation/flys/client/client/ui/map/FloodMap.java @ 4692:f2578acc60d7
Rename filter into filterpanel
Differenciate between the current filter string and the filterpanel
author | Björn Ricks <bjoern.ricks@intevation.de> |
---|---|
date | Mon, 17 Dec 2012 16:14:27 +0100 |
parents | fac54b8470d4 |
children | 4bf3b89b38d5 |
line wrap: on
line source
package de.intevation.flys.client.client.ui.map; import org.gwtopenmaps.openlayers.client.Bounds; import org.gwtopenmaps.openlayers.client.LonLat; import org.gwtopenmaps.openlayers.client.Map; import org.gwtopenmaps.openlayers.client.MapOptions; import org.gwtopenmaps.openlayers.client.MapWidget; import org.gwtopenmaps.openlayers.client.Style; import org.gwtopenmaps.openlayers.client.control.ScaleLine; import org.gwtopenmaps.openlayers.client.control.ScaleLineOptions; import org.gwtopenmaps.openlayers.client.event.VectorFeatureAddedListener; import org.gwtopenmaps.openlayers.client.feature.VectorFeature; import org.gwtopenmaps.openlayers.client.format.GeoJSON; import org.gwtopenmaps.openlayers.client.layer.Layer; import org.gwtopenmaps.openlayers.client.layer.Vector; import org.gwtopenmaps.openlayers.client.layer.VectorOptions; import org.gwtopenmaps.openlayers.client.util.Attributes; import org.gwtopenmaps.openlayers.client.util.JObjectArray; import org.gwtopenmaps.openlayers.client.util.JSObject; public class FloodMap implements VectorFeatureAddedListener { public static final String LAYER_BARRIERS = "vector_layer_barriers"; public static final String MARK_SELECTED = "mark.selected"; public static final int SELECTED_STROKE_WIDTH = 2; protected MapWidget mapWidget; protected Map map; protected Vector barrierLayer; protected String srid; protected Bounds maxExtent; protected ScaleLine scaleLine; public FloodMap(String srid, Bounds maxExtent, int width, int height) { this.srid = srid; this.maxExtent = maxExtent; recreateWidget(width, height); getBarrierLayer(); } public void recreateWidget(int width, int height) { MapOptions opts = new MapOptions(); opts.setControls(new JObjectArray(new JSObject[] {})); opts.setNumZoomLevels(16); opts.setProjection(getRiverProjection()); opts.setMaxExtent(maxExtent); opts.setUnits("m"); opts.setMaxResolution(500); // TODO DO THIS ON THE FLY mapWidget = new MapWidget( Integer.toString(width - 4), Integer.toString(height), opts); map = mapWidget.getMap(); } @Override public void onFeatureAdded(FeatureAddedEvent evt) { VectorFeature feature = evt.getVectorFeature(); Attributes attrs = feature.getAttributes(); String type = attrs.getAttributeAsString("typ"); if (type == null || type.length() == 0) { return; } Style style = getStyle(type); if (style != null) { feature.setStyle(style); } // necessary, otherwise the setStyle() has no effect barrierLayer.redraw(); } /** * Returns an OpenLayers.Style based on a given type. * * @param type Type can be one of "pipe1", "pipe2", "ditch", "dam", * "ringdike". * * @return an OpenLayers.Style object. */ public static Style getStyle(String type) { Style style = new Style(); if (type == null) { return null; } if (type.equals(DrawControl.BARRIER_PIPE1) || type.equals(DrawControl.BARRIER_PIPE1_VALUE) ) { style.setFillColor("#800080"); style.setStrokeColor("#800080"); } else if (type.equals(DrawControl.BARRIER_PIPE2) || type.equals(DrawControl.BARRIER_PIPE2_VALUE) ) { style.setFillColor("#808080"); style.setStrokeColor("#808080"); } else if (type.equals(DrawControl.BARRIER_DAM) || type.equals(DrawControl.BARRIER_DAM_VALUE) ) { style.setFillColor("#008000"); style.setStrokeColor("#008000"); } else if (type.equals(DrawControl.BARRIER_DITCH) || type.equals(DrawControl.BARRIER_DITCH_VALUE) ) { style.setFillColor("#800000"); style.setStrokeColor("#800000"); } else if (type.equals(DrawControl.BARRIER_RINGDIKE) || type.equals(DrawControl.BARRIER_RINGDIKE_VALUE) ) { style.setFill(false); style.setStrokeColor("#FF8000"); } return style; } public MapWidget getMapWidget() { return mapWidget; } public Map getMap() { return map; } public String getRiverProjection() { return "EPSG:" + srid; } public Bounds getMaxExtent() { return maxExtent; } public Vector getBarrierLayer() { if (barrierLayer == null) { VectorOptions opts = new VectorOptions(); opts.setProjection(getRiverProjection()); opts.setMaxExtent(getMaxExtent()); barrierLayer = new Vector(LAYER_BARRIERS, opts); barrierLayer.setIsBaseLayer(true); map.addLayer(barrierLayer); map.setLayerZIndex(barrierLayer, 1000); barrierLayer.addVectorFeatureAddedListener(this); } return barrierLayer; } public String getFeaturesAsGeoJSON() { // disable features before exporting to GeoJSON disableFeatures(); VectorFeature[] features = barrierLayer.getFeatures(); if (features == null || features.length == 0) { return null; } return new GeoJSON().write(features); } public void setSize(String width, String height) { mapWidget.setWidth(width); mapWidget.setHeight(height); int currentZoom = map.getZoom(); LonLat currentCenter = map.getCenter(); map.updateSize(); map.zoomTo(currentZoom); map.setCenter(currentCenter); } public void addLayer(Layer layer) { if (layer != null) { map.addLayer(layer); int index = map.getLayerIndex(layer); int newIndex = index * (-1) + 1; map.raiseLayer(layer, newIndex); update(); } } public void hideBarrierLayer () { if (barrierLayer != null) { barrierLayer.setIsVisible(false); } } public void showBarrierLayer () { if (barrierLayer != null) { barrierLayer.setIsVisible(true); } } public void selectFeature(VectorFeature feature) { if (feature != null) { selectFeatures(new VectorFeature[] { feature } ); } } public void selectFeatures(VectorFeature[] features) { if (features == null || features.length == 0) { return; } for (VectorFeature feature: features) { Attributes attr = feature.getAttributes(); if (attr.getAttributeAsInt(MARK_SELECTED) == 1) { continue; } attr.setAttribute(MARK_SELECTED, 1); Style style = feature.getStyle(); double strokeWidth = style.getStrokeWidth(); style.setStrokeWidth(strokeWidth+SELECTED_STROKE_WIDTH); } getBarrierLayer().redraw(); } public void disableFeatures() { Vector barriers = getBarrierLayer(); VectorFeature[] features = barriers.getFeatures(); if (features == null || features.length == 0) { return; } disableFeatures(features); } public void disableFeature(VectorFeature feature) { if (feature != null) { disableFeatures(new VectorFeature[] { feature }); } } public void disableFeatures(VectorFeature[] features) { if (features == null || features.length == 0) { return; } for (VectorFeature feature: features) { Attributes attr = feature.getAttributes(); if (attr.getAttributeAsInt(MARK_SELECTED) == 0) { continue; } attr.setAttribute(FloodMap.MARK_SELECTED, 0); Style style = feature.getStyle(); double strokeWidth = style.getStrokeWidth(); style.setStrokeWidth(strokeWidth-SELECTED_STROKE_WIDTH); } getBarrierLayer().redraw(); } public void update() { Layer[] layers = map.getLayers(); for (Layer l: layers) { l.redraw(); } } public void activateScaleLine(boolean activate) { if (activate) { ScaleLineOptions slOpts = new ScaleLineOptions(); slOpts.setBottomInUnits("m"); slOpts.setBottomOutUnits("km"); slOpts.setTopInUnits(""); slOpts.setTopOutUnits(""); scaleLine = new ScaleLine(slOpts); this.map.addControl(scaleLine); } else if (!activate && scaleLine != null){ this.map.removeControl(scaleLine); } } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :