use of ol.interaction.DrawOptions in project gwt-ol3 by TDesjardins.
the class Measure method start.
/**
* Start measuring using existing interaction.
*
* @param type
* measure geometry type
* @param listener
* {@link MeasureListener}
* @param immediate
* Fire events on every change to the measured geometry? If false
* only one event after finishing is fired. (default is true)
* @param persist
* Keep the temporary measurement sketch drawn after the
* measurement is complete. The geometry will persist until a new
* measurement is started, the control is deactivated, or
* {@link #stop()} is called.
*/
private void start(String type, MeasureListener listener, boolean immediate, boolean persist) {
// clean up old instance
stop();
this.listener = listener;
// set up interaction
DrawOptions drawOptions = OLFactory.createOptions();
drawOptions.setType(type);
// use a special style?
if (style != null) {
drawOptions.setStyle(style);
}
draw = OLFactory.createDraw(drawOptions);
// persist measured features?
if (persist) {
// set up overlay options
VectorLayerOptions voptions = OLFactory.createLayerOptionsWithSource(OLFactory.createVectorSource());
if (style != null) {
Style[] styles = new Style[1];
styles[0] = style;
voptions.setStyle(styles);
} else {
// create a default style resembling the default editing style,
// but adding a border to polygons
Style sPoly = OLFactory.createStyle(OLFactory.createFill(OLFactory.createColor(255, 255, 255, 0.5)));
Style sLine1 = OLFactory.createStyle(OLFactory.createStroke(OLFactory.createColor(255, 255, 255, 1), 5));
Style sLine2 = OLFactory.createStyle(OLFactory.createStroke(OLFactory.createColor(0, 153, 255, 1), 3));
// combine all styles
Style[] s = OLUtil.pushItem(OLUtil.combineStyles(sPoly, sLine1), sLine2);
voptions.setStyle(s);
}
// create an overlay and attach it to the map
persistOverlay = OLFactory.createVector(voptions);
persistOverlay.setMap(map);
}
// set up projection to be used
proj = map.getView().getProjection();
map.addInteraction(draw);
// set up event handlers
OLUtil.observe(draw, "drawstart", new EventListener<Draw.Event>() {
@Override
public void onEvent(Draw.Event event) {
// remember measure feature
sketch = event.getFeature();
// clean up overlay
if (persistOverlay != null) {
persistOverlay.<ol.source.Vector>getSource().clear(false);
}
}
});
OLUtil.observe(draw, "drawend", new EventListener<Draw.Event>() {
@Override
public void onEvent(Draw.Event event) {
// fire event and clean up
fireMeasureEvent();
// persist feature?
if (persistOverlay != null) {
persistOverlay.<ol.source.Vector>getSource().addFeature(sketch);
}
sketch = null;
}
});
// handle mouse move if immediate updates are requested
if (immediate) {
// enable mouse move events on the viewport
Element elem = map.getViewport();
com.google.gwt.user.client.Event.sinkEvents(elem, com.google.gwt.user.client.Event.ONMOUSEMOVE);
// remember old event listener before chaining this listener
// in-between
chainedListener = com.google.gwt.user.client.Event.getEventListener(elem);
com.google.gwt.user.client.Event.setEventListener(elem, new com.google.gwt.user.client.EventListener() {
@Override
public void onBrowserEvent(com.google.gwt.user.client.Event event) {
// check for mouse move events only
if (event.getType() == "mousemove") {
// check if interaction is active and fire event
if (draw.getActive()) {
fireMeasureEvent();
}
}
// call chained handler
if (chainedListener != null) {
chainedListener.onBrowserEvent(event);
}
}
});
eventListenerNeedsCleanup = true;
}
// set flag
isActive = true;
}
Aggregations