1 package org
.argeo
.slc
.ui
.gis
.rap
.openlayers
;
3 import java
.util
.HashMap
;
5 import org
.argeo
.slc
.ui
.gis
.views
.AbstractMapView
;
6 import org
.eclipse
.rwt
.graphics
.Graphics
;
7 import org
.eclipse
.swt
.SWT
;
8 import org
.eclipse
.swt
.graphics
.Image
;
9 import org
.eclipse
.swt
.layout
.FillLayout
;
10 import org
.eclipse
.swt
.layout
.GridData
;
11 import org
.eclipse
.swt
.layout
.GridLayout
;
12 import org
.eclipse
.swt
.widgets
.Composite
;
13 import org
.geotools
.map
.MapContext
;
14 import org
.polymap
.openlayers
.rap
.widget
.OpenLayersWidget
;
15 import org
.polymap
.openlayers
.rap
.widget
.base
.OpenLayersEventListener
;
16 import org
.polymap
.openlayers
.rap
.widget
.base
.OpenLayersObject
;
17 import org
.polymap
.openlayers
.rap
.widget
.base_types
.Bounds
;
18 import org
.polymap
.openlayers
.rap
.widget
.base_types
.Icon
;
19 import org
.polymap
.openlayers
.rap
.widget
.base_types
.LonLat
;
20 import org
.polymap
.openlayers
.rap
.widget
.base_types
.OpenLayersMap
;
21 import org
.polymap
.openlayers
.rap
.widget
.base_types
.Pixel
;
22 import org
.polymap
.openlayers
.rap
.widget
.base_types
.Size
;
23 import org
.polymap
.openlayers
.rap
.widget
.base_types
.Style
;
24 import org
.polymap
.openlayers
.rap
.widget
.controls
.ButtonControl
;
25 import org
.polymap
.openlayers
.rap
.widget
.controls
.Control
;
26 import org
.polymap
.openlayers
.rap
.widget
.controls
.EditingToolbarControl
;
27 import org
.polymap
.openlayers
.rap
.widget
.controls
.KeyboardDefaultsControl
;
28 import org
.polymap
.openlayers
.rap
.widget
.controls
.LayerSwitcherControl
;
29 import org
.polymap
.openlayers
.rap
.widget
.controls
.MouseDefaultsControl
;
30 import org
.polymap
.openlayers
.rap
.widget
.controls
.OverviewMapControl
;
31 import org
.polymap
.openlayers
.rap
.widget
.controls
.PanZoomBarControl
;
32 import org
.polymap
.openlayers
.rap
.widget
.controls
.PanelControl
;
33 import org
.polymap
.openlayers
.rap
.widget
.controls
.ScaleControl
;
34 import org
.polymap
.openlayers
.rap
.widget
.controls
.ScaleLineControl
;
35 import org
.polymap
.openlayers
.rap
.widget
.controls
.SelectFeatureControl
;
36 import org
.polymap
.openlayers
.rap
.widget
.controls
.SnappingControl
;
37 import org
.polymap
.openlayers
.rap
.widget
.controls
.ToggleButtonControl
;
38 import org
.polymap
.openlayers
.rap
.widget
.features
.VectorFeature
;
39 import org
.polymap
.openlayers
.rap
.widget
.geometry
.LineStringGeometry
;
40 import org
.polymap
.openlayers
.rap
.widget
.geometry
.LinearRingGeometry
;
41 import org
.polymap
.openlayers
.rap
.widget
.geometry
.PointGeometry
;
42 import org
.polymap
.openlayers
.rap
.widget
.geometry
.PolygonGeometry
;
43 import org
.polymap
.openlayers
.rap
.widget
.layers
.BoxLayer
;
44 import org
.polymap
.openlayers
.rap
.widget
.layers
.ImageLayer
;
45 import org
.polymap
.openlayers
.rap
.widget
.layers
.MarkersLayer
;
46 import org
.polymap
.openlayers
.rap
.widget
.layers
.OSMLayer
;
47 import org
.polymap
.openlayers
.rap
.widget
.layers
.VectorLayer
;
48 import org
.polymap
.openlayers
.rap
.widget
.layers
.WMSLayer
;
49 import org
.polymap
.openlayers
.rap
.widget
.marker
.BoxMarker
;
50 import org
.polymap
.openlayers
.rap
.widget
.marker
.IconMarker
;
52 public class OpenLayersView
extends AbstractMapView
implements
53 OpenLayersEventListener
{
54 private MapContext mapContext
;
56 private OpenLayersWidget openLayersWidget
;
57 private OpenLayersMap map
;
60 public void createPartControl(Composite parent
) {
61 parent
.setLayout(new FillLayout());
62 // openLayersWidget = new OpenLayersWidget(parent, SWT.NONE);
63 Composite top
= new Composite(parent
, SWT
.NONE
);
64 GridLayout layout
= new GridLayout();
65 layout
.marginHeight
= 0;
66 layout
.marginWidth
= 0;
67 top
.setLayout(layout
);
69 openLayersWidget
= new OpenLayersWidget(top
, SWT
.MULTI
| SWT
.WRAP
,
70 "/js_lib/OpenLayers/OpenLayers.js");
71 openLayersWidget
.setLayoutData(new GridData(GridData
.FILL_BOTH
));
73 map
= openLayersWidget
.getMap();
75 map
.addControl(new LayerSwitcherControl());
76 map
.addControl(new MouseDefaultsControl());
77 map
.addControl(new KeyboardDefaultsControl());
78 map
.addControl(new PanZoomBarControl());
79 map
.addControl(new ScaleControl());
81 // OSMLayer osm = new OSMLayer("OSM",
82 // "http://tile.openstreetmap.org/${z}/${x}/${y}.png", 19);
85 WMSLayer wms_layer
= new WMSLayer("argeo",
86 "https://dev.argeo.org/geoserver/wms?",
87 "mbaudier-trips-2010");
88 map
.addLayer(wms_layer
);
93 public void setFocus() {
94 openLayersWidget
.setFocus();
97 public MapContext
getMapContext() {
101 // HACKED from Simple Example
102 private VectorLayer edit_layer
;
103 private EditingToolbarControl edit_toolbar
;
104 private VectorLayer selectable_boxes_layer
;
106 OverviewMapControl overview
= null;
109 public void createUI(OpenLayersMap map
) {
110 HashMap
<String
, String
> payload_map
= new HashMap
<String
, String
>();
111 payload_map
.put("layername", "event.layer.name");
113 map
.events
.register(this, "changebaselayer", payload_map
);
115 payload_map
.put("property", "event.property");
116 payload_map
.put("visibility", "event.layer.visibility");
118 map
.events
.register(this, "changelayer", payload_map
);
120 // create and add a WMS layer
121 WMSLayer wms_layer
= new WMSLayer("polymap WMS",
122 "http://www.polymap.de/geoserver/wms?",
123 "states,tasmania_state_boundaries,tasmania_roads,tasmania_water_bodies");
125 map
.addLayer(wms_layer
);
127 // create and add a WMS layer with opacity
128 wms_layer2
= new WMSLayer("OpenLayers WMS",
129 "http://labs.metacarta.com/wms/vmap0", "basic");
130 // wms_layer2.setIsBaseLayer(false);
131 wms_layer2
.setOpacity(0.2);
132 map
.addLayer(wms_layer2
);
134 // add a ImageLayer with external URL
135 Bounds bounds
= new Bounds(-180, -88.759, 180, 88.759);
136 Size size
= new Size(580, 288);
137 ImageLayer image_layer
= new ImageLayer("image layer ext",
138 "http://earthtrends.wri.org/images/maps/4_m_citylights_lg.gif",
140 map
.addLayer(image_layer
);
142 // add a ImageLayer with internal URL
143 Image image
= Graphics
.getImage("res/polymap_logo.png", getClass()
145 ImageLayer image_layer_int
= new ImageLayer("image layer int", image
,
147 map
.addLayer(image_layer_int
);
149 // set Zoom and Center
151 map
.setCenter(-100.0, 40.0);
154 LayerSwitcherControl layer_switcher
= new LayerSwitcherControl();
156 map
.addControl(layer_switcher
);
157 layer_switcher
.maximizeControl();
159 // map.addControl(new MouseDefaultsControl());
160 map
.addControl(new KeyboardDefaultsControl());
161 // map.addControl(new PanZoomBarControl());
162 map
.addControl(new ScaleControl());
164 ScaleLineControl scale_line
= new ScaleLineControl();
165 scale_line
.setBottomOutUnits("");
166 scale_line
.setBottomInUnits("");
167 map
.addControl(scale_line
);
169 // overview = new OverviewMapControl( wms_layer2);
170 // map.addControl(overview);
174 * overview.destroy(); //map.removeControl(overview );
176 * overview = new OverviewMapControl(image_layer_int);
177 * map.addControl(overview);
181 * overview.addLayer(wms_layer2 );
184 // overview.maximizeControl();
186 // add vector layer to have a layer the user can edit
187 edit_layer
= new VectorLayer("edit layer");
189 // map.addControl(new EditingToolbarControl(edit_layer) );
191 PanelControl pc
= new PanelControl();
193 ToggleButtonControl tbc
= new ToggleButtonControl("class_for_tbc");
194 ButtonControl bc
= new ButtonControl("class_for_bc", "alert('foo');");
196 pc
.addControls(new Control
[] { bc
, tbc
});
198 tbc
.setStyle("background-color:red;", "background-color:green;");
199 bc
.setStyle("background-color:yellow; ");
202 " width: 100px; height: 24px; right: 23px; top: 5px; position: relative; border-width:1px; border-style:solid;",
203 " display:block; width: 24px; height: 24px; float:left;");
206 tbc
.events
.register(this, "activate", null);
207 edit_layer
.events
.register(this, "beforefeatureadded", null);
209 map
.addLayer(edit_layer
);
210 edit_layer
.setVisibility(false);
212 // add vector layer with some boxes to demonstrate the modify feature
214 selectable_boxes_layer
= new VectorLayer("selectable boxes");
216 selectable_boxes_layer
.events
.register(this, "featureselected", null);
218 selectable_boxes_layer
.events
.register(this, "featuremodified", null);
220 map
.addLayer(selectable_boxes_layer
);
222 OSMLayer osm
= new OSMLayer("OSM",
223 "http://tile.openstreetmap.org/${z}/${x}/${y}.png", 19);
226 // map.events.register(this, "click", new HashMap<String,String>() {{
227 // put("x",selectable_boxes_layer.getJSObjRef()+".getFeatureFromEvent(event)");
230 VectorFeature vector_feature
= new VectorFeature(new Bounds(-100, 40,
231 -80, 60).toGeometry());
232 selectable_boxes_layer
.addFeatures(vector_feature
);
233 vector_feature
= new VectorFeature(
234 new Bounds(-90, 70, -60, 80).toGeometry());
235 selectable_boxes_layer
.addFeatures(vector_feature
);
237 selectable_boxes_layer
.setVisibility(false);
239 // add vector layer to show how to style a feature
240 VectorLayer styled_features_layer
= new VectorLayer("styled Features");
241 map
.addLayer(styled_features_layer
);
243 Style point_style_red
= new Style();
244 point_style_red
.setAttribute("fillColor", "#FF0000");
246 vector_feature
= new VectorFeature(new PointGeometry(-85, 50),
248 styled_features_layer
.addFeatures(vector_feature
);
250 Style poly_style
= new Style();
251 poly_style
.setAttribute("fillColor", "blue");
252 poly_style
.setAttribute("strokeColor", "black");
253 poly_style
.setAttribute("strokeDashstyle", "dashdot");
255 vector_feature
= new VectorFeature(
256 new Bounds(-120, 23, -100, 42).toGeometry(), poly_style
);
257 styled_features_layer
.addFeatures(vector_feature
);
259 Style point_style_green
= new Style();
260 point_style_green
.setAttribute("fillColor", "#00FF00");
261 point_style_green
.setAttribute("pointRadius", 20);
263 vector_feature
= new VectorFeature(new PointGeometry(-95, 65),
265 styled_features_layer
.addFeatures(vector_feature
);
267 // show some geometry
268 VectorLayer geometry_features_layer
= new VectorLayer(
269 "Geometry Features");
270 map
.addLayer(geometry_features_layer
);
271 geometry_features_layer
.setVisibility(false);
273 PointGeometry
[] point_list
= { new PointGeometry(-99, 60),
274 new PointGeometry(-107, 64), new PointGeometry(-130, 70) };
275 VectorFeature linestring_feature
= new VectorFeature(
276 new LineStringGeometry(point_list
));
277 geometry_features_layer
.addFeatures(linestring_feature
);
279 PointGeometry
[] poly_point_list
= { new PointGeometry(-99, 30),
280 new PointGeometry(-107, 44), new PointGeometry(-130, 50) };
281 VectorFeature poly_feature
= new VectorFeature(new PolygonGeometry(
282 new LinearRingGeometry(poly_point_list
)));
283 geometry_features_layer
.addFeatures(poly_feature
);
286 * // setting up the Modify Feature Control ModifyFeatureControl mfc =
287 * new ModifyFeatureControl( selectable_boxes_layer);
289 * mfc.addMode(MooverdifyFeatureControl.DRAG);
290 * mfc.addMode(ModifyFeatureControl.RESHAPE);
291 * mfc.addMode(ModifyFeatureControl.ROTATE);
293 * mfc.activate(); map.addControl(mfc);
295 // setting up the Modify Feature Control
298 * mfc.addMode(ModifyFeatureControl.DRAG);
299 * mfc.addMode(ModifyFeatureControl.RESHAPE);
300 * mfc.addMode(ModifyFeatureControl.ROTATE);
302 // mfc.setHover(true);
304 SelectFeatureControl mfc
= new SelectFeatureControl(
305 selectable_boxes_layer
, SelectFeatureControl
.FLAG_HOVER
);
308 mfc
.setHighlightOnly(true);
309 mfc
.setRenderIntent("temporary");
312 // mfc.setHover(false);
314 * SelectFeatureControl mfc2 = new SelectFeatureControl(
315 * selectable_boxes_layer,true); //SelectFeatureControl.FLAG_BOX);
317 * mfc.addMode(ModifyFeatureControl.DRAG);
318 * mfc.addMode(ModifyFeatureControl.RESHAPE);
319 * mfc.addMode(ModifyFeatureControl.ROTATE);
321 * // mfc.setHover(true);
324 * map.addControl(mfc2); mfc2.setBox(true); mfc2.setMultiple(false);
327 // mfc2.setHover(false);
330 BoxMarker bm
= new BoxMarker(new Bounds(-120, 23, -100, 42));
331 BoxLayer bl
= new BoxLayer("box layer");
334 bl
.setVisibility(false);
337 MarkersLayer ml
= new MarkersLayer("icon markers");
339 ml
.setVisibility(false);
341 // icon marker with default icon-image
342 IconMarker im
= new IconMarker(new LonLat(-100, 50));
345 // icon marker with custom image
346 Icon ico
= new Icon("http://www.mensus.net/img/icons/google/aqua.png",
347 new Size(10, 17), new Pixel(0, 0));
348 IconMarker im2
= new IconMarker(new LonLat(-110, 60), ico
);
353 public void process_event(OpenLayersObject obj
, String event_name
,
354 HashMap
<String
, String
> payload
) {
355 System
.out
.println("event from" + obj
);
356 if (event_name
.equals("changebaselayer")) {
358 .println("client changed baselayer to '"
359 + payload
.get("layername") + "' "
360 + payload
.get("property"));
362 // if (overview != null)
363 // map.removeControl(overview);
365 // overview = new OverviewMapControl(wms_layer2);
366 // overview.addLayer( selectable_boxes_layer);
368 // map.addControl(overview);
369 // overview.addLayer( selectable_boxes_layer);
370 } else if (event_name
.equals("changelayer")) {
371 System
.out
.println("client changed layer '"
372 + payload
.get("layername") + "' " + payload
.get("property")
373 + "' " + payload
.get("visibility"));
374 if (payload
.get("property").equals("visibility")) {
375 Boolean visible
= payload
.get("visibility").equals("true");
376 if (payload
.get("layername").equals(edit_layer
.getName())) {
377 OpenLayersMap map
= openLayersWidget
.getMap();
379 // adding edit control for the vector layer created
381 edit_toolbar
= new EditingToolbarControl(edit_layer
);
382 map
.addControl(edit_toolbar
);
383 VectorLayer
[] snapping_layers
= { edit_layer
,
384 selectable_boxes_layer
};
385 SnappingControl snap_ctrl
= new SnappingControl(
386 edit_layer
, snapping_layers
, false);
387 snap_ctrl
.activate();
388 map
.addControl(snap_ctrl
);
391 edit_toolbar
.deactivate();
392 map
.removeControl(edit_toolbar
);
397 System
.out
.println("unknown event " + event_name
);