package org.gcube.portlets.user.geoportaldataviewer.client.gis; import org.gcube.portlets.user.geoportaldataviewer.client.GeoportalDataViewerConstants; import org.gcube.portlets.user.geoportaldataviewer.client.resources.Images; import org.gcube.portlets.user.geoportaldataviewer.shared.gis.GeoQuery; import org.gcube.portlets.user.geoportaldataviewer.shared.gis.GeoQuery.TYPE; import ol.Coordinate; import ol.Feature; import ol.Map; import ol.MapBrowserEvent; import ol.MapOptions; import ol.OLFactory; import ol.View; import ol.ViewOptions; import ol.control.Attribution; import ol.event.EventListener; import ol.geom.Point; import ol.interaction.KeyboardPan; import ol.interaction.KeyboardZoom; import ol.layer.LayerOptions; import ol.layer.Tile; import ol.layer.VectorLayerOptions; import ol.proj.Projection; import ol.proj.ProjectionOptions; import ol.source.ImageWms; import ol.source.ImageWmsOptions; import ol.source.ImageWmsParams; import ol.source.Osm; import ol.source.XyzOptions; import ol.style.FillOptions; import ol.style.Icon; import ol.style.IconOptions; import ol.style.Style; public class LightOpenLayerOSM { /** The map. */ private Map map; /** The view. */ private View view; /** The view options. */ private ViewOptions viewOptions = OLFactory.createOptions(); /** The projection options. */ private ProjectionOptions projectionOptions = OLFactory.createOptions(); private boolean isQueryPointActive; private ol.layer.Vector geometryLayer; private String markerURL = Images.ICONS.mapMarkerIcon().getURL(); /** * Instantiates a new open layer OSM. * * @param divTargetId the div target id * @param eventBus the event bus */ /* (non-Javadoc) * @see de.desjardins.ol3.demo.client.example.Example#show() */ public LightOpenLayerOSM(String divTargetId) { // create a OSM-layer XyzOptions osmSourceOptions = OLFactory.createOptions(); Osm osmSource = new Osm(osmSourceOptions); LayerOptions osmLayerOptions = OLFactory.createOptions(); osmLayerOptions.setSource(osmSource); Tile osmLayer = new Tile(osmLayerOptions); // create a projection projectionOptions.setCode(GeoportalDataViewerConstants.EPSG_3857); projectionOptions.setUnits("m"); Projection projection = new Projection(projectionOptions); viewOptions.setProjection(projection); viewOptions.setMaxZoom(19); //viewOptions.setExtent(new Extent(-180, -90, 180, 90)); // create a view view = new View(viewOptions); //EPSG_4326_TO_ITALY Coordinate centerCoordinate = OLFactory.createCoordinate(12.45, 42.98); Coordinate transformedCenterCoordinate = Projection.transform(centerCoordinate, GeoportalDataViewerConstants.EPSG_4326, GeoportalDataViewerConstants.EPSG_3857); view.setCenter(transformedCenterCoordinate); view.setZoom(5); // create the map MapOptions mapOptions = OLFactory.createOptions(); mapOptions.setTarget(divTargetId); mapOptions.setView(view); map = new Map(mapOptions); map.addLayer(osmLayer); //map.addLayer(tileDebugLayer); // add some controls // map.addControl(OLFactory.createScaleLine()); // DemoUtils.addDefaultControls(map.getControls()); Attribution attribution = new Attribution(); attribution.setCollapsed(true); map.addClickListener(new EventListener() { @Override public void onEvent(MapBrowserEvent event) { // TODO Auto-generated method stub Coordinate coordinate = event.getCoordinate(); if(isQueryPointActive) { double lon = coordinate.getX(); double lat = coordinate.getY(); int w = (int) map.getSize().getWidth(); int h = (int) map.getSize().getHeight(); // handler.clickOnMap(x, y, w, h); // ratio - mapPixelWeight : bboxWeight = 10px : geoRectangleWidth // where 10px is the pixel diameter dimension of the clicked point double bboxWidth = Math.abs(getExtent().getLowerLeftX() - getExtent().getUpperRightX()); double geoWidth = (bboxWidth / w) * (20 / 2); double x1 = Math.min(lon+geoWidth, lon-geoWidth); double x2 = Math.max(lon+geoWidth, lon-geoWidth); double y1 = Math.min(lat+geoWidth, lat-geoWidth); double y2 = Math.max(lat+geoWidth, lat-geoWidth); //GWT.log("("+x1+","+y1+")("+x2+","+y2+")"); // Point pt = new Point(coordinate); // ol.Extent extent = pt.getExtent(); // //new ClickDataInfo(x1, y1, x2, y2) // SelectDataInfo selectDataInfo //selectBox(new GeoQuery(x1, y1, x2, y2, GeoQuery.TYPE.POINT)); GeoQuery select = new GeoQuery(x1, y1, x2, y2, TYPE.POINT); } } }); map.addControl(attribution); // add some interactions map.addInteraction(new KeyboardPan()); map.addInteraction(new KeyboardZoom()); } /** * Adds the WMS layer. * * @param mapServerHost the map server host * @param layerName the layer name */ public void addWMSLayer(String mapServerHost, String layerName) { ImageWmsParams imageWMSParams = OLFactory.createOptions(); imageWMSParams.setLayers(layerName); ImageWmsOptions imageWMSOptions = OLFactory.createOptions(); imageWMSOptions.setUrl(mapServerHost); imageWMSOptions.setParams(imageWMSParams); //imageWMSOptions.setRatio(1.5f); ImageWms imageWMSSource = new ImageWms(imageWMSOptions); LayerOptions layerOptions = OLFactory.createOptions(); layerOptions.setSource(imageWMSSource); ol.layer.Image wmsLayer = new ol.layer.Image(layerOptions); //visibleLayerItems map.addLayer(wmsLayer); } public void addPoint(Coordinate coordinate) { if(geometryLayer!=null) { map.removeLayer(geometryLayer); }else { } Style style = new Style(); IconOptions iconOptions = new IconOptions(); iconOptions.setSrc(markerURL); Icon icon = new Icon(iconOptions); style.setImage(icon); FillOptions fillOptions = new FillOptions(); //fillOptions.setColor(new Color(red, green, blue, alpha)); //style.setFill(new Fill(fillOptions)); // style.setFillColor("#00FF00"); // style.setGraphicName("circle"); // style.setPointRadius(10); Point thePoint = new Point(coordinate); Feature vf = new Feature(thePoint); vf.setStyle(style); ol.source.Vector vector = new ol.source.Vector(); vector.addFeature(vf); VectorLayerOptions vectorLayerOptions = new VectorLayerOptions(); vectorLayerOptions.setSource(vector); geometryLayer = new ol.layer.Vector(vectorLayerOptions); map.addLayer(geometryLayer); } public Map getMap() { return map; } /** * Gets the projection code. * * @return the projection code */ public String getProjectionCode() { return map.getView().getProjection().getCode(); } /** * Gets the current zoom level. * * @return the current zoom level */ public double getCurrentZoomLevel() { return map.getView().getZoom(); } /** * Gets the bbox. * * @return the bbox */ public ol.Extent getBBOX() { return getExtent(); } /** * Gets the extent. * * @return the extent */ public ol.Extent getExtent() { return this.map.getView().calculateExtent(map.getSize()); } public Coordinate transform (Coordinate centerCoordinate, String source, String target){ return Projection.transform(centerCoordinate, source, target); } }