+ this.map.events.register(this, "changelayer", payloadMap);
+
+ // edit
+ HashMap<String, String> editPayload = new HashMap<String, String>();
+ editPayload.put("layername", "event.layer.name");
+ editPayload.put("x", "event.xy.x");
+ editPayload.put("y", "event.xy.y");
+ edit_layer = new VectorLayer("edit layer");
+ edit_layer.events.register(this, "beforefeatureadded", null);
+ edit_layer.events.register(this, "afterfeatureadded", editPayload);
+ this.map.addLayer(edit_layer);
+ edit_layer.setVisibility(false);
+
+ // add vector layer with some boxes to demonstrate the modify feature
+ // feature
+ // selectPayload.put("id", "feature.id");
+ // selectPayload.put("lon", "feature.lonlat.lon");
+ // selectPayload.put("lat", "feature.lonlat.lon");
+ selectable_boxes_layer = new VectorLayer("selectable boxes");
+ HashMap<String, String> selectPayload = new HashMap<String, String>();
+ selectPayload.put("features", selectable_boxes_layer.getJSObjRef()
+ + ".selectedFeatures[0].id");
+ selectPayload.put("id", "event.feature.id");
+ selectPayload.put("fid", "event.feature.fid");
+ selectPayload.put("geometry", "event.feature.geometry");
+ selectPayload.put("bounds", "event.feature.bounds");
+ selectPayload.put("lonlat", "event.feature.lonlat");
+ selectable_boxes_layer.events.register(this, "featureselected",
+ selectPayload);
+ // selectable_boxes_layer.events.register(this, "featureunselected",
+ // selectPayload);
+ // selectable_boxes_layer.events.register(this,
+ // SelectFeatureControl.EVENT_HIGHLIGHTED, selectPayload);
+ // selectable_boxes_layer.events.register(this,
+ // SelectFeatureControl.EVENT_SELECTED, null);
+ // selectable_boxes_layer.events.register(this, "featuremodified",
+ // null);
+ map.addLayer(selectable_boxes_layer);
+ VectorFeature vector_feature = new VectorFeature(new Bounds(
+ -1952081.800054420018569, 1118889.974857959896326,
+ 7124447.410769510082901, 5465442.183322750031948).toGeometry());
+ selectable_boxes_layer.addFeatures(vector_feature);
+ selectable_boxes_layer.setVisibility(false);
+
+ SelectFeatureControl mfc = new SelectFeatureControl(
+ selectable_boxes_layer, 0);
+ map.addControl(mfc);
+ // mfc.setHighlightOnly(true);
+ mfc.setRenderIntent("temporary");
+ mfc.activate();
+
+ HashMap<String, String> mapPayload = new HashMap<String, String>();
+ mapPayload.put("bbox", map.getJSObjRef() + ".getExtent().toBBOX()");
+ mapPayload.put("lonlat", map.getJSObjRef()
+ + ".getLonLatFromViewPortPx(event.xy)");
+ mapPayload.put("x", "event.xy.x");
+ mapPayload.put("y", "event.xy.y");
+ mapPayload.put("button", "event.button");
+ map.events.register(this, "click", mapPayload);
+ }
+
+ /*
+ * OPENLAYERS MAP
+ */
+
+ public void process_event(OpenLayersObject source, String eventName,
+ HashMap<String, String> payload) {
+ if (log.isDebugEnabled())
+ log.debug("openlayers event from " + source);
+ if (eventName.equals("changebaselayer")) {
+ if (log.isDebugEnabled())
+ log.debug("client changed baselayer to '"
+ + payload.get("layername") + "' "
+ + payload.get("property"));
+ } else if (eventName.equals("changelayer")) {
+ if (log.isDebugEnabled())
+ log.debug("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())) {
+ 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 if (eventName.equals("beforefeatureadded")) {
+ if (log.isDebugEnabled())
+ log.debug("before feature added on layer '"
+ + payload.get("layername") + "' x=" + payload.get("x")
+ + "' y=" + payload.get("y"));
+ } else if (eventName.equals("afterfeatureadded")) {
+ if (log.isDebugEnabled())
+ log.debug("after feature added on layer '"
+ + payload.get("layername") + "' x=" + payload.get("x")
+ + "' y=" + payload.get("y"));
+ } else if (eventName.equals("featureselected")) {
+ if (log.isDebugEnabled())
+ log.debug("feature selected " + payload);
+ VectorLayer layer = (VectorLayer) source;
+ log.debug(layer.getJSObjRef());
+
+ String layerId = payload.get("layerId");
+ String featureId = payload.get("featureId");
+ FeatureSource<SimpleFeatureType, SimpleFeature> featureSource = featureSources
+ .get(layerId);
+ SimpleFeature feature = GeoToolsUtils.querySingleFeature(
+ featureSource, featureId);
+ log.debug("Geotools Feature id : " + feature.getID());
+ } else if (log.isDebugEnabled())
+ log.debug("unknown event " + eventName + " : " + payload);
+