Package org.locationtech.udig.project

Examples of org.locationtech.udig.project.ILayer


            stateData = showErrorMessage(selection.size(), (Layer) firstElem);
        } else if (firstElem instanceof SimpleFeature) {
            stateData = showErrorMessage(selection.size(), (SimpleFeature) firstElem);
        } else if (firstElem instanceof AdaptingFilter) {
            AdaptingFilter<?> f = (AdaptingFilter<?>) firstElem;
            ILayer layer = (ILayer) f.getAdapter(ILayer.class);
            stateData = showErrorMessage(selection.size(), layer,f);
        } else {
            stateData = null;
        }
       
        for( Iterator<?> iter = selection.iterator(); iter.hasNext(); ) {
            Object element = iter.next();

            if (element instanceof Project) {
                operate((Project) element, stateData);
            } else if (element instanceof IProjectElement) {
                operate((ProjectElement) element, stateData);
            } else if (element instanceof Layer) {
                layers.add((Layer) element);
            } else if (element instanceof SimpleFeature) {
                operate((SimpleFeature) element, stateData);
            }else if (element instanceof AdaptingFilter) {
                AdaptingFilter<?> f = (AdaptingFilter<?>) element;
                ILayer layer = (ILayer) f.getAdapter(ILayer.class);
                operate(layer,f, stateData);
            }
        }

        if (!layers.isEmpty()) {
View Full Code Here


    /**
     * Calls a command which makes a spatial filter and puts it on the
     * styleBlackboard
     */
    public void op( Display display, Object target, IProgressMonitor monitor ) throws Exception {
        final ILayer layer = (ILayer) target;
        final IMap map = layer.getMap();

        //get all selected features
        Query query = new DefaultQuery(layer.getSchema().getTypeName(), layer.getFilter());
       
        FeatureSource<SimpleFeatureType, SimpleFeature> featureSource = layer.getResource(FeatureSource.class, new SubProgressMonitor(monitor, 1));
        FeatureCollection<SimpleFeatureType, SimpleFeature>  features = featureSource.getFeatures(query);
       
        //combine them into one large polygon
        final Geometry union[] = new Geometry[1];
        features.accepts( new FeatureVisitor(){
            public void visit( Feature feature ) {
                SimpleFeature simple = (SimpleFeature) feature;
                Geometry geometry = (Geometry ) simple.getDefaultGeometry();
                if( union[0] == null ){
                    union[0] = geometry;
                }
                else {
                    union[0] = union[0].union( geometry );
                }
            }                   
        }, GeoToolsAdapters.progress(monitor) );
       
        final Geometry hole = union[0];
       
        MapCommand drillHoleCommand = new AbstractCommand(){
           
            public void run( IProgressMonitor monitor ) throws Exception {
                for( Layer targetLayer : getMap().getLayersInternal() ){
                    //make hole filter for target layer
                    if( targetLayer == layer ){
                        continue; // skip the source layer (because that would be silly)
                    }
                    SimpleFeatureType targetType = targetLayer.getSchema();
                    if( targetType == null ){
                        // must be a grid coverage or something
                        continue;
                    }
                    String targetGeomName = targetType.getGeometryDescriptor().getLocalName();
   
                    FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2( GeoTools.getDefaultHints() );
                    Filter cut= ff.not( ff.within( ff.property( targetGeomName ), ff.literal(hole) ) );
                   
                    //put it on style blackboard
                    //Key:  ProjectBlackboardConstants    String LAYER__DATA_QUERY = "org.locationtech.udig.project.view"; //$NON-NLS-1$
                    IStyleBlackboard styleBlackboard = layer.getStyleBlackboard();
                    styleBlackboard.put(ProjectBlackboardConstants.LAYER__DATA_QUERY, cut);
                }
            }

            public Command copy() {
View Full Code Here

import org.opengis.referencing.crs.CoordinateReferenceSystem;

public class SyncProjection implements IOp {

    public void op( Display display, Object target, IProgressMonitor monitor ) throws Exception {
        ILayer layer = (ILayer) target;
        IMap map = layer.getMap();
       
        final CoordinateReferenceSystem after = layer.getCRS();
       
        MapCommand changeProjection = new ChangeCRSCommand(after);
        map.sendCommandASync( changeProjection );
       
    }
View Full Code Here

        final Map map = (Map) EcoreUtil.copy((EObject) params.toDraw);
       
        map.getBlackboard().addAll(drawMapParams.toDraw.getBlackboard());
       
        for (int i = 0; i < map.getMapLayers().size(); i++) {
            ILayer source = params.toDraw.getMapLayers().get(i);
            Layer dest = map.getLayersInternal().get(i);
            dest.setFilter(source.getFilter());
            dest.getBlackboard().addAll(source.getBlackboard());
        }
       
        IRunnableWithProgress runnable = new IRunnableWithProgress() {

            public void run(IProgressMonitor monitor)
                    throws InvocationTargetException, InterruptedException {
                // Load IGeoResources using original map. The new map can't do this because it doesn't have a
                // Resource(file) and therefore can't resolve relative URIs
                List<ILayer> layers = drawMapParams.toDraw.getMapLayers();
                for (ILayer layer : layers) {
                    layer.getGeoResources();
                }
               
                Color background = (Color) map.getBlackboard().get(ProjectBlackboardConstants.MAP__BACKGROUND_COLOR);
                params.graphics.setBackground(background);
                if (!drawMapParams.transparent) {
                    params.graphics.clearRect(0, 0, params.destinationSize.width, params.destinationSize.height);
                }
                List<Layer> layersToRender = params.selectionStyle.handleSelection(map.getLayersInternal());
               
                ProjectUIPlugin
                        .trace(
                                ApplicationGIS.class,
                                "ApplicationGIS.drawMap() beginning rendering of map '" + map.getName() + "'", null); //$NON-NLS-1$ //$NON-NLS-2$

                ReferencedEnvelope bounds = (ReferencedEnvelope) params.toDraw.getViewportModel().getBounds();
                ReferencedEnvelope boundsCopy = new ReferencedEnvelope(bounds);
                RenderContext tools = configureMapForRendering(map, params.destinationSize, params.dpi, params.boundsStrategy, boundsCopy);
               
                RendererCreator decisive = new RendererCreatorImpl();
                decisive.setContext(tools);

                decisive.getLayers().addAll(layersToRender);

                SortedSet<RenderContext> sortedContexts = new TreeSet<RenderContext>(
                        decisive.getConfiguration());

                render(params, monitor, decisive, sortedContexts);

            }

            private void render(final DrawMapParameter params,
                    IProgressMonitor monitor, RendererCreator decisive,
                    SortedSet<RenderContext> sortedContexts)
                    throws InvocationTargetException {
               
                monitor.beginTask("Rendering map", sortedContexts.size());
                RenderContext mainContext = decisive.getContext();

                ILabelPainter labelPainter = mainContext.getLabelPainter();
                labelPainter.clear();
                labelPainter.start();
               
                Dimension displaySize = params.destinationSize;
                Iterator<RenderContext> iter = sortedContexts.iterator();
                while (iter.hasNext()) {
                    RenderContext context = (RenderContext) iter.next();

                    ILayer layer = context.getLayer();
                    boolean isLayerFromGrid = layer.getGeoResource().canResolve(GridCoverage.class);
                    String layerId = getLayerId(layer);

                    if( !(layer instanceof SelectionLayer) ||
                            ((layer instanceof SelectionLayer) && params.selectionStyle.getShowLabels()) ){
                        labelPainter.startLayer(layerId);
                    }
                    try {
                        if (context instanceof CompositeRenderContext) {
                            CompositeRenderContext compositeContext = (CompositeRenderContext) context;
                            List<ILayer> layers = compositeContext.getLayers();
                            boolean visible = false;
                            for (ILayer tmpLayer : layers) {
                                visible = visible || tmpLayer.isVisible();
                            }
                            if (!visible)
                                continue;
                        } else if (!layer.isVisible())
                            continue;
                        Renderer renderer = decisive.getRenderer(context);
                        ProjectUIPlugin
                                .trace(
                                        ApplicationGIS.class,
                                        "Issuing render call to " + renderer.getName(), null); //$NON-NLS-1$
                        try {
                            Graphics2D graphics = (Graphics2D) params.graphics.create();
                            if (params.doBufferedImageForGrids && isLayerFromGrid) {
                                Rectangle clipBounds = graphics.getClipBounds();
                                BufferedImage bi = new BufferedImage(clipBounds.width,
                                        clipBounds.height, BufferedImage.TYPE_INT_ARGB);
                                Graphics2D biG2D = (Graphics2D) bi.getGraphics();
                                renderer.render(biG2D, monitor);
                                graphics.drawImage(bi, null, 0, 0);
                                biG2D.dispose();
                            }else{
                                renderer.render(graphics, monitor);
                            }
                           
                        } catch (RenderException e) {
                            throw new InvocationTargetException(e);
                        }
                    } finally {
                        labelPainter.endLayer(layerId, params.graphics,
                                new Rectangle(displaySize));
                    }
                }
                labelPainter.end(
                        params.graphics,
                        new Rectangle(displaySize));
                labelPainter.clear();
            }

            private String getLayerId(ILayer layer ) {
                String layerId = layer.getID().toString();
                if ( layer instanceof SelectionLayer )
                    layerId = layerId+"-Selection"; //$NON-NLS-1$
                return layerId;
            }
View Full Code Here

        }

        final Map copy = (Map) EcoreUtil.copy((EObject) mapToCopy);
        copy.getBlackboard().addAll(mapToCopy.getBlackboard());
        for (int i = 0; i < copy.getMapLayers().size(); i++) {
            ILayer source = mapToCopy.getMapLayers().get(i);
            Layer dest = copy.getLayersInternal().get(i);
            dest.setFilter(source.getFilter());
            dest.getBlackboard().addAll(source.getBlackboard());
           
            dest.setStyleBlackboard((StyleBlackboard)dest.getStyleBlackboard().clone());
           
        }
       
View Full Code Here

    public void op( final Display display, Object target, IProgressMonitor monitor ) throws Exception {
        monitor.beginTask("Counting features", IProgressMonitor.UNKNOWN);
        monitor.worked(1);

        final ILayer layer = (ILayer) target;
        @SuppressWarnings("unchecked")
    FeatureSource<SimpleFeatureType, SimpleFeature> source = layer
                .getResource(FeatureSource.class, new NullProgressMonitor());
       
        FilterAttributeExtractor extractor = new FilterAttributeExtractor(source.getSchema());
        layer.getFilter().accept(extractor, null);
        String[] atts = extractor.getAttributeNames();
        Query query = new Query(source.getSchema().getTypeName(),Filter.INCLUDE,atts);
        FeatureCollection<SimpleFeatureType, SimpleFeature> allCollection = source.getFeatures(query);

        FeatureIterator<SimpleFeature> allFeatures = allCollection.features();

        try {
            int selectedCount = 0;
            int allCount = 0;
            long lastUpdate = System.currentTimeMillis();
            while( allFeatures.hasNext() ) {
                SimpleFeature next = allFeatures.next();
                allCount++;
                if(layer.getFilter().evaluate(next)) {
                  selectedCount++;
                }
              if(System.currentTimeMillis() - lastUpdate > 1000) {
                  monitor.setTaskName("Count: Processed "+allCount+" features");
                  lastUpdate = System.currentTimeMillis();
View Full Code Here

    /**
     * @see org.locationtech.udig.project.command.MapCommand#run()
     */
    public void run( IProgressMonitor monitor ) throws Exception {
        ILayer layer = editLayer.get(monitor);
        if( layer==null ){
            System.err.println("class "+editLayer.getClass().getName()+" is returning null")//$NON-NLS-1$//$NON-NLS-2$
            return;
        }
        FeatureStore<SimpleFeatureType, SimpleFeature> resource = layer.getResource(FeatureStore.class, null);
        //SimpleFeatureStore resource = layer.getResource(SimpleFeatureStore.class, null );
        SimpleFeature feature2 = editFeature.get(monitor);

        FilterFactory filterFactory = CommonFactoryFinder.getFilterFactory(GeoTools.getDefaultHints());
    Id fidFilter = filterFactory.id(
                FeatureUtils.stringToId(filterFactory,feature2.getID()));

        this.oldValue = feature2.getAttribute(xpath);
        feature2.setAttribute(xpath, value);

        AttributeDescriptor attributeType = layer.getSchema().getDescriptor(xpath);
        resource.modifyFeatures(attributeType, value, fidFilter);
    }
View Full Code Here

     * @see org.locationtech.udig.project.internal.command.UndoableCommand#rollback()
     */
    public void rollback( IProgressMonitor monitor ) throws Exception {
        SimpleFeature feature = editFeature.get(monitor);
        feature.setAttribute(xpath, oldValue);
        ILayer layer = editLayer.get(monitor);
        FeatureStore<SimpleFeatureType, SimpleFeature> resource = layer.getResource(FeatureStore.class, null);
        AttributeDescriptor attributeType = layer.getSchema().getDescriptor(xpath);
        FilterFactory filterFactory = CommonFactoryFinder.getFilterFactory(GeoTools.getDefaultHints());
    Id id = filterFactory.id(
                FeatureUtils.stringToId(filterFactory, feature.getID()));
        resource.modifyFeatures(attributeType, oldValue, id);
    }
View Full Code Here

        handler.getEditBlackboard().removeCoordsAtPoint(20,10);

        //Testing searching through the layer for the closest point.
        assertEquals(2, editBlackboard.getCoords(30,20).size());

        ILayer editLayer = handler.getEditLayer();
        FeatureSource<SimpleFeatureType, SimpleFeature> source = editLayer.getResource(FeatureSource.class, new NullProgressMonitor());
        SimpleFeature feature = source.getFeatures().features().next();
        Coordinate coord = ((Geometry) feature.getDefaultGeometry()).getCoordinates()[1];
        Coordinate t = JTS.transform(coord, new Coordinate(), editLayer.layerToMapTransform());
        java.awt.Point pointOnScreen = handler.getContext().worldToPixel(t);
        handler.getMouseTracker().setDragStarted(Point.valueOf(30,20));
        event = new MapMouseEvent( DISPLAY, pointOnScreen.x+5,pointOnScreen.y,NONE,BUTTON1, BUTTON1 );
        mode.getCommand(handler, event, EventType.DRAGGED);
        handler.handleEvent(event, EventType.RELEASED);
View Full Code Here

         *
         * While we are doing this, determine the longest row so we can properly
         * draw the graphic's border.
         */
        for( int i = context.getMapLayers().size() - 1; i >= 0; i-- ) {
            ILayer layer = context.getMapLayers().get(i);
            IGeoResource geoResource = layer.getGeoResource();
            boolean isMapgraphic = geoResource.canResolve(MapGraphicResource.class);
            if (!isMapgraphic && layer.isVisible()) {

                // String layerName = LayerGeneratedGlyphDecorator.generateLabel((Layer) layer);
                String layerName = layer.getName();
                if (layerName != null && layerName.length() != 0) {

                    FeatureTypeStyle[] styles = locateStyle(layer);

                    if (styles != null && rules(styles).size() > 0) {
                        numberOfEntries[0] += rules(styles).size();

                        List<Rule> rules = rules(styles);
                        for( Rule rule : rules ) {
                            String text = getText(rule);
                            Rectangle2D bounds = graphics.getStringBounds(text);
                            int length = indentSize + boxWidth + horizontalSpacing
                                    + (int) bounds.getWidth();

                            if (length > longestRow) {
                                longestRow = length;
                            }
                        }
                    } else if (!layer.hasResource(MapGraphic.class)) {
                        // TODO for other layer types
                        continue;
                    } else {
                        continue;
                    }

                    Map<ILayer, FeatureTypeStyle[]> map = Collections.singletonMap(layer, styles);
                    layers.add(map);
                    if (styles != null && rules(styles).size() > 1) {
                        numberOfEntries[0]++; // add a line for the layer label
                    }
                    Rectangle2D bounds = graphics.getStringBounds(layerName);
                    int length = (int) bounds.getWidth();
                    if (styles != null && rules(styles).size() < 2) {
                        length += boxWidth + horizontalSpacing;
                    }

                    if (length > longestRow) {
                        longestRow = length;
                    }
                }
            }
        }

        if (numberOfEntries[0] == 0) {
            // nothing to draw!
            return;
        }

        // total width of the graphic
        int width = longestRow + horizontalMargin * 2;
        if (maxWidth > 0) {
            if (maxWidth > width) {
                width = maxWidth;
            }
            // width = Math.min(width, maxWidth);
        }
        // total height of the graphic
        int height = rowHeight * numberOfEntries[0] + verticalMargin * 2 + verticalSpacing
                * (numberOfEntries[0] - 1);
        if (maxHeight > 0) {
            if (maxHeight > height) {
                height = maxHeight;
            }
            // height = Math.min(height, maxHeight);
        }

        if (locationStyle.width < 1 || locationStyle.getHeight() < 1) {
            // we want to grow and shrink as we desire so we'll use a different
            // rectangle than the one on the blackboard.
            int x = locationStyle.x;
            int y = locationStyle.y;
            locationStyle = new Rectangle();
            locationStyle.x = x;
            locationStyle.y = y;
            locationStyle.width = width;
            locationStyle.height = height;
        }
        // ensure box within the display
        Dimension displaySize = context.getMapDisplay().getDisplaySize();
        if (locationStyle.x < 0) {
            locationStyle.x = displaySize.width - locationStyle.width + locationStyle.x;
        }
        if ((locationStyle.x + locationStyle.width + 6) > displaySize.width) {
            locationStyle.x = displaySize.width - width - 5;
        }

        if (locationStyle.y < 0) {
            locationStyle.y = displaySize.height - locationStyle.height - 5 + locationStyle.y;
        }
        if ((locationStyle.y + height + 6) > displaySize.height) {
            locationStyle.y = displaySize.height - locationStyle.height - 5;
        }

        graphics.setClip(new Rectangle(locationStyle.x, locationStyle.y, locationStyle.width + 1,
                locationStyle.height + 1));

        /*
         * Draw the box containing the layers/icons
         */
        drawOutline(graphics, context, locationStyle);

        /*
         * Draw the layer names/icons
         */
        final int[] rowsDrawn = new int[1];
        rowsDrawn[0] = 0;
        final int[] x = new int[1];
        x[0] = locationStyle.x + horizontalMargin;
        final int[] y = new int[1];
        y[0] = locationStyle.y + verticalMargin;

        for( int i = 0; i < layers.size(); i++ ) {
            Map<ILayer, FeatureTypeStyle[]> map = layers.get(i);
            final ILayer layer = map.keySet().iterator().next();
            final FeatureTypeStyle[] styles = map.values().iterator().next();

            final String layerName = layer.getName();

            PlatformGIS.syncInDisplayThread(new Runnable(){
                public void run() {
                    if (styles != null && rules(styles).size() > 1) {
                        drawRow(graphics, x[0], y[0], null, layerName, false);

                        y[0] += rowHeight;
                        if ((rowsDrawn[0] + 1) < numberOfEntries[0]) {
                            y[0] += verticalSpacing;
                        }
                        rowsDrawn[0]++;
                        List<Rule> rules = rules(styles);
                        for( Rule rule : rules ) {

                            BufferedImage awtIcon = null;
                            if (layer.hasResource(FeatureSource.class) && rule != null) {
                                SimpleFeatureType type = layer.getSchema();
                                GeometryDescriptor geom = type.getGeometryDescriptor();
                                if (geom != null) {
                                    Class geom_type = geom.getType().getBinding();
                                    if (geom_type == Point.class || geom_type == MultiPoint.class) {
                                        awtIcon = point(rule, boxWidth, boxHeight);
View Full Code Here

TOP

Related Classes of org.locationtech.udig.project.ILayer

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.