package org.argeo.slc.ui.gis.rap.openlayers; import java.util.HashMap; import org.argeo.slc.ui.gis.views.AbstractMapView; import org.eclipse.rwt.graphics.Graphics; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.geotools.map.MapContext; import org.polymap.openlayers.rap.widget.OpenLayersWidget; import org.polymap.openlayers.rap.widget.base.OpenLayersEventListener; import org.polymap.openlayers.rap.widget.base.OpenLayersObject; import org.polymap.openlayers.rap.widget.base_types.Bounds; import org.polymap.openlayers.rap.widget.base_types.Icon; import org.polymap.openlayers.rap.widget.base_types.LonLat; import org.polymap.openlayers.rap.widget.base_types.OpenLayersMap; import org.polymap.openlayers.rap.widget.base_types.Pixel; import org.polymap.openlayers.rap.widget.base_types.Size; import org.polymap.openlayers.rap.widget.base_types.Style; import org.polymap.openlayers.rap.widget.controls.ButtonControl; import org.polymap.openlayers.rap.widget.controls.Control; import org.polymap.openlayers.rap.widget.controls.EditingToolbarControl; import org.polymap.openlayers.rap.widget.controls.KeyboardDefaultsControl; import org.polymap.openlayers.rap.widget.controls.LayerSwitcherControl; import org.polymap.openlayers.rap.widget.controls.MouseDefaultsControl; import org.polymap.openlayers.rap.widget.controls.OverviewMapControl; import org.polymap.openlayers.rap.widget.controls.PanZoomBarControl; import org.polymap.openlayers.rap.widget.controls.PanelControl; import org.polymap.openlayers.rap.widget.controls.ScaleControl; import org.polymap.openlayers.rap.widget.controls.ScaleLineControl; import org.polymap.openlayers.rap.widget.controls.SelectFeatureControl; import org.polymap.openlayers.rap.widget.controls.SnappingControl; import org.polymap.openlayers.rap.widget.controls.ToggleButtonControl; import org.polymap.openlayers.rap.widget.features.VectorFeature; import org.polymap.openlayers.rap.widget.geometry.LineStringGeometry; import org.polymap.openlayers.rap.widget.geometry.LinearRingGeometry; import org.polymap.openlayers.rap.widget.geometry.PointGeometry; import org.polymap.openlayers.rap.widget.geometry.PolygonGeometry; import org.polymap.openlayers.rap.widget.layers.BoxLayer; import org.polymap.openlayers.rap.widget.layers.ImageLayer; import org.polymap.openlayers.rap.widget.layers.MarkersLayer; import org.polymap.openlayers.rap.widget.layers.OSMLayer; import org.polymap.openlayers.rap.widget.layers.VectorLayer; import org.polymap.openlayers.rap.widget.layers.WMSLayer; import org.polymap.openlayers.rap.widget.marker.BoxMarker; import org.polymap.openlayers.rap.widget.marker.IconMarker; public class OpenLayersView extends AbstractMapView implements OpenLayersEventListener { private MapContext mapContext; private OpenLayersWidget openLayersWidget; private OpenLayersMap map; @Override public void createPartControl(Composite parent) { parent.setLayout(new FillLayout()); // openLayersWidget = new OpenLayersWidget(parent, SWT.NONE); Composite top = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.marginHeight = 0; layout.marginWidth = 0; top.setLayout(layout); openLayersWidget = new OpenLayersWidget(top, SWT.MULTI | SWT.WRAP, "/js_lib/OpenLayers/OpenLayers.js"); openLayersWidget.setLayoutData(new GridData(GridData.FILL_BOTH)); map = openLayersWidget.getMap(); map.addControl(new LayerSwitcherControl()); map.addControl(new MouseDefaultsControl()); map.addControl(new KeyboardDefaultsControl()); map.addControl(new PanZoomBarControl()); map.addControl(new ScaleControl()); // OSMLayer osm = new OSMLayer("OSM", // "http://tile.openstreetmap.org/${z}/${x}/${y}.png", 19); // map.addLayer(osm); WMSLayer wms_layer = new WMSLayer("argeo", "https://dev.argeo.org/geoserver/wms?", "mbaudier-trips-2010"); map.addLayer(wms_layer); // createUI(map); } @Override public void setFocus() { openLayersWidget.setFocus(); } public MapContext getMapContext() { return mapContext; } // HACKED from Simple Example private VectorLayer edit_layer; private EditingToolbarControl edit_toolbar; private VectorLayer selectable_boxes_layer; OverviewMapControl overview = null; WMSLayer wms_layer2; public void createUI(OpenLayersMap map) { HashMap payload_map = new HashMap(); payload_map.put("layername", "event.layer.name"); map.events.register(this, "changebaselayer", payload_map); payload_map.put("property", "event.property"); payload_map.put("visibility", "event.layer.visibility"); map.events.register(this, "changelayer", payload_map); // create and add a WMS layer WMSLayer wms_layer = new WMSLayer("polymap WMS", "http://www.polymap.de/geoserver/wms?", "states,tasmania_state_boundaries,tasmania_roads,tasmania_water_bodies"); map.addLayer(wms_layer); // create and add a WMS layer with opacity wms_layer2 = new WMSLayer("OpenLayers WMS", "http://labs.metacarta.com/wms/vmap0", "basic"); // wms_layer2.setIsBaseLayer(false); wms_layer2.setOpacity(0.2); map.addLayer(wms_layer2); // add a ImageLayer with external URL Bounds bounds = new Bounds(-180, -88.759, 180, 88.759); Size size = new Size(580, 288); ImageLayer image_layer = new ImageLayer("image layer ext", "http://earthtrends.wri.org/images/maps/4_m_citylights_lg.gif", bounds, size); map.addLayer(image_layer); // add a ImageLayer with internal URL Image image = Graphics.getImage("res/polymap_logo.png", getClass() .getClassLoader()); ImageLayer image_layer_int = new ImageLayer("image layer int", image, bounds); map.addLayer(image_layer_int); // set Zoom and Center map.zoomTo(3); map.setCenter(-100.0, 40.0); // add some controls LayerSwitcherControl layer_switcher = new LayerSwitcherControl(); map.addControl(layer_switcher); layer_switcher.maximizeControl(); // map.addControl(new MouseDefaultsControl()); map.addControl(new KeyboardDefaultsControl()); // map.addControl(new PanZoomBarControl()); map.addControl(new ScaleControl()); ScaleLineControl scale_line = new ScaleLineControl(); scale_line.setBottomOutUnits(""); scale_line.setBottomInUnits(""); map.addControl(scale_line); // overview = new OverviewMapControl( wms_layer2); // map.addControl(overview); /* * * overview.destroy(); //map.removeControl(overview ); * * overview = new OverviewMapControl(image_layer_int); * map.addControl(overview); * * * * overview.addLayer(wms_layer2 ); */ // overview.maximizeControl(); // add vector layer to have a layer the user can edit edit_layer = new VectorLayer("edit layer"); // map.addControl(new EditingToolbarControl(edit_layer) ); PanelControl pc = new PanelControl(); ToggleButtonControl tbc = new ToggleButtonControl("class_for_tbc"); ButtonControl bc = new ButtonControl("class_for_bc", "alert('foo');"); pc.addControls(new Control[] { bc, tbc }); tbc.setStyle("background-color:red;", "background-color:green;"); bc.setStyle("background-color:yellow; "); pc.setStyle( " width: 100px; height: 24px; right: 23px; top: 5px; position: relative; border-width:1px; border-style:solid;", " display:block; width: 24px; height: 24px; float:left;"); map.addControl(pc); tbc.events.register(this, "activate", null); edit_layer.events.register(this, "beforefeatureadded", null); map.addLayer(edit_layer); edit_layer.setVisibility(false); // add vector layer with some boxes to demonstrate the modify feature // feature selectable_boxes_layer = new VectorLayer("selectable boxes"); selectable_boxes_layer.events.register(this, "featureselected", null); selectable_boxes_layer.events.register(this, "featuremodified", null); map.addLayer(selectable_boxes_layer); OSMLayer osm = new OSMLayer("OSM", "http://tile.openstreetmap.org/${z}/${x}/${y}.png", 19); map.addLayer(osm); // map.events.register(this, "click", new HashMap() {{ // put("x",selectable_boxes_layer.getJSObjRef()+".getFeatureFromEvent(event)"); // }}); VectorFeature vector_feature = new VectorFeature(new Bounds(-100, 40, -80, 60).toGeometry()); selectable_boxes_layer.addFeatures(vector_feature); vector_feature = new VectorFeature( new Bounds(-90, 70, -60, 80).toGeometry()); selectable_boxes_layer.addFeatures(vector_feature); selectable_boxes_layer.setVisibility(false); // add vector layer to show how to style a feature VectorLayer styled_features_layer = new VectorLayer("styled Features"); map.addLayer(styled_features_layer); Style point_style_red = new Style(); point_style_red.setAttribute("fillColor", "#FF0000"); vector_feature = new VectorFeature(new PointGeometry(-85, 50), point_style_red); styled_features_layer.addFeatures(vector_feature); Style poly_style = new Style(); poly_style.setAttribute("fillColor", "blue"); poly_style.setAttribute("strokeColor", "black"); poly_style.setAttribute("strokeDashstyle", "dashdot"); vector_feature = new VectorFeature( new Bounds(-120, 23, -100, 42).toGeometry(), poly_style); styled_features_layer.addFeatures(vector_feature); Style point_style_green = new Style(); point_style_green.setAttribute("fillColor", "#00FF00"); point_style_green.setAttribute("pointRadius", 20); vector_feature = new VectorFeature(new PointGeometry(-95, 65), point_style_green); styled_features_layer.addFeatures(vector_feature); // show some geometry VectorLayer geometry_features_layer = new VectorLayer( "Geometry Features"); map.addLayer(geometry_features_layer); geometry_features_layer.setVisibility(false); PointGeometry[] point_list = { new PointGeometry(-99, 60), new PointGeometry(-107, 64), new PointGeometry(-130, 70) }; VectorFeature linestring_feature = new VectorFeature( new LineStringGeometry(point_list)); geometry_features_layer.addFeatures(linestring_feature); PointGeometry[] poly_point_list = { new PointGeometry(-99, 30), new PointGeometry(-107, 44), new PointGeometry(-130, 50) }; VectorFeature poly_feature = new VectorFeature(new PolygonGeometry( new LinearRingGeometry(poly_point_list))); geometry_features_layer.addFeatures(poly_feature); /* * // setting up the Modify Feature Control ModifyFeatureControl mfc = * new ModifyFeatureControl( selectable_boxes_layer); * * mfc.addMode(MooverdifyFeatureControl.DRAG); * mfc.addMode(ModifyFeatureControl.RESHAPE); * mfc.addMode(ModifyFeatureControl.ROTATE); * * mfc.activate(); map.addControl(mfc); */ // setting up the Modify Feature Control /* * mfc.addMode(ModifyFeatureControl.DRAG); * mfc.addMode(ModifyFeatureControl.RESHAPE); * mfc.addMode(ModifyFeatureControl.ROTATE); */ // mfc.setHover(true); SelectFeatureControl mfc = new SelectFeatureControl( selectable_boxes_layer, SelectFeatureControl.FLAG_HOVER); map.addControl(mfc); mfc.setHighlightOnly(true); mfc.setRenderIntent("temporary"); // mfc.activate(); // mfc.setHover(false); /* * SelectFeatureControl mfc2 = new SelectFeatureControl( * selectable_boxes_layer,true); //SelectFeatureControl.FLAG_BOX); * * mfc.addMode(ModifyFeatureControl.DRAG); * mfc.addMode(ModifyFeatureControl.RESHAPE); * mfc.addMode(ModifyFeatureControl.ROTATE); * * // mfc.setHover(true); * * * map.addControl(mfc2); mfc2.setBox(true); mfc2.setMultiple(false); * //mfc2.activate(); */ // mfc2.setHover(false); // showing box_layer BoxMarker bm = new BoxMarker(new Bounds(-120, 23, -100, 42)); BoxLayer bl = new BoxLayer("box layer"); bl.addMarker(bm); map.addLayer(bl); bl.setVisibility(false); // show IconMarkers MarkersLayer ml = new MarkersLayer("icon markers"); map.addLayer(ml); ml.setVisibility(false); // icon marker with default icon-image IconMarker im = new IconMarker(new LonLat(-100, 50)); ml.addMarker(im); // icon marker with custom image Icon ico = new Icon("http://www.mensus.net/img/icons/google/aqua.png", new Size(10, 17), new Pixel(0, 0)); IconMarker im2 = new IconMarker(new LonLat(-110, 60), ico); ml.addMarker(im2); } public void process_event(OpenLayersObject obj, String event_name, HashMap payload) { System.out.println("event from" + obj); if (event_name.equals("changebaselayer")) { System.out .println("client changed baselayer to '" + payload.get("layername") + "' " + payload.get("property")); // if (overview != null) // map.removeControl(overview); // overview = new OverviewMapControl(wms_layer2); // overview.addLayer( selectable_boxes_layer); // map.addControl(overview); // overview.addLayer( selectable_boxes_layer); } else if (event_name.equals("changelayer")) { System.out.println("client changed layer '" + payload.get("layername") + "' " + payload.get("property") + "' " + payload.get("visibility")); if (payload.get("property").equals("visibility")) { Boolean visible = payload.get("visibility").equals("true"); if (payload.get("layername").equals(edit_layer.getName())) { OpenLayersMap map = openLayersWidget.getMap(); if (visible) { // adding edit control for the vector layer created // above edit_toolbar = new EditingToolbarControl(edit_layer); map.addControl(edit_toolbar); VectorLayer[] snapping_layers = { edit_layer, selectable_boxes_layer }; SnappingControl snap_ctrl = new SnappingControl( edit_layer, snapping_layers, false); snap_ctrl.activate(); map.addControl(snap_ctrl); } else { edit_toolbar.deactivate(); map.removeControl(edit_toolbar); } } } } else System.out.println("unknown event " + event_name); } }