Package org.vfny.geoserver.wcs

Examples of org.vfny.geoserver.wcs.WcsException


        GetCoverageType getCoverage = (GetCoverageType) super.read(request, kvp, rawKvp);

        // grab coverage info to perform further checks
        if (getCoverage.getSourceCoverage() == null) {
            if (kvp.get("coverage") == null)
                throw new WcsException("source coverage parameter is mandatory",
                        MissingParameterValue, "source coverage");
            else
                getCoverage.setSourceCoverage((String) ((List) kvp.get("coverage")).get(0));
        }
        // if not specified, throw a resounding exception (by spec)
        if (!getCoverage.isSetVersion())
            throw new WcsException("Version has not been specified",
                    WcsExceptionCode.MissingParameterValue, "version");

        // do the version negotiation dance
        List<String> provided = new ArrayList<String>();
        provided.add(Wcs10GetCoverageRequestReader.VERSION);
        List<String> accepted = null;
        if (getCoverage.getVersion() != null) {
            accepted = new ArrayList<String>();
            accepted.add(getCoverage.getVersion());
        }
        String version = RequestUtils.getVersionPreOws(provided, accepted);

        if (!Wcs10GetCoverageRequestReader.VERSION.equals(version)) {
            throw new WcsException("An invalid version number has been specified",
                    WcsExceptionCode.InvalidParameterValue, "version");
        }
        getCoverage.setVersion(Wcs10GetCoverageRequestReader.VERSION);

        // build the domain subset
View Full Code Here


        //
        // check for CRS
        //
        String crsName = (String) kvp.get("crs");
        if (crsName == null)
            throw new WcsException("CRS parameter is mandatory", MissingParameterValue, "crs");
        final CoordinateReferenceSystem crs = decodeCRS100(crsName);
        if(crs==null)
          throw new WcsException("CRS parameter is invalid:"+crsName,InvalidParameterValue , "crs");
//        final VerticalCRS verticalCRS = CRS.getVerticalCRS(crs);
//        final boolean hasVerticalCRS = verticalCRS != null;

        //
        // at least one between BBOX and TIME must be there
        //
        final GeneralEnvelope bbox = (GeneralEnvelope) kvp.get("BBOX");
        if (bbox == null)
            throw new WcsException("bbox parameter is mandatory", MissingParameterValue, "bbox");
       
        // afabiani: consider Elevation as band, forcing the bbox to be 2D only
        if (bbox.getDimension() != 2)
            throw new WcsException("Requested bounding box is not 2-dimensional: " + bbox.getDimension(), InvalidParameterValue, "bbox");
       
        final GeneralEnvelope envelope = new GeneralEnvelope(/* TODO: ignore 3D CRS for now crs */ bbox.getDimension() == 3 ? DefaultGeographicCRS.WGS84_3D : crs);
        if (/* TODO: ignore 3D CRS for now !hasVerticalCRS */ bbox.getDimension() == 2)
            envelope.setEnvelope(bbox.getLowerCorner().getOrdinate(0), bbox.getLowerCorner()
                    .getOrdinate(1), bbox.getUpperCorner().getOrdinate(0), bbox.getUpperCorner()
                    .getOrdinate(1));
//        else if (/* TODO: ignore 3D CRS for now hasVerticalCRS */ bbox.getDimension() == 3)
//            // 3D
//            envelope.setEnvelope(bbox.getLowerCorner().getOrdinate(0), bbox.getLowerCorner()
//                    .getOrdinate(1), bbox.getLowerCorner().getOrdinate(2), bbox.getUpperCorner()
//                    .getOrdinate(0), bbox.getUpperCorner().getOrdinate(1), bbox.getUpperCorner()
//                    .getOrdinate(2));
        else
            throw new WcsException("bbox not compliant with the specified CRS", InvalidParameterValue, "bbox");
       
        //
        // TIME
        //
        TimeSequenceType timeSequence = null;
        Object time = kvp.get("TIME");
        if (time != null && time instanceof TimeSequenceType) {
            timeSequence = (TimeSequenceType) time;
        } else if (time != null && time instanceof List) {
            timeSequence = Wcs10Factory.eINSTANCE.createTimeSequenceType();
            for (Date tPos : (List<Date>) time) {
                final TimePositionType timePosition = Gml4wcsFactory.eINSTANCE
                        .createTimePositionType();
                timePosition.setValue(tPos);
                timeSequence.getTimePosition().add(timePosition);
            }
        }
        if (timeSequence == null && bbox == null)
            throw new WcsException("Bounding box cannot be null, TIME has not been specified",
                    WcsExceptionCode.MissingParameterValue, "BBOX");

        //
        // GRID management
        //
        final RectifiedGridType grid = Gml4wcsFactory.eINSTANCE.createRectifiedGridType();
        final Object w = kvp.get("width");
        final Object h = kvp.get("height");
        if (w != null && h != null) {
            //
            // normal grid management, only the envelope and the raster dimensions have been specified,
          // we need to compute RESX, RESY, RESZ afterwards
            //

            // get W and H
            int width =  w instanceof Integer?((Integer)w):Integer.parseInt((String)w);
            int height =w instanceof Integer?((Integer)h):Integer.parseInt((String)h);
            grid.getAxisName().add("x");
            grid.getAxisName().add("y");

            final Object d = kvp.get("depth");
            if (d != null) {
                // afabiani: we consider 2D grdis only
                throw new WcsException("3D grids are not supported.", InvalidParameterValue, "depth");
//                // check that the envelope is 3D or throw an error
//                if (bbox.getDimension() != 3)
//                    throw new WcsException("Found depth but envelope is of dimension "
//                            + bbox.getDimension(), InvalidParameterValue, "");
//
//                // notice that as for the spec this element represents the number of ticks on the
//                // third dimension
//                grid.getAxisName().add("z");
//
//                final int depth = Integer.parseInt((String) d);
//                grid.setDimension(BigInteger.valueOf(3));
//                // notice that the third element indicates how many layers we do have requested on the third dimension
//                grid.setLimits(new GeneralGridEnvelope(new int[] { 0, 0, 0 }, new int[] {width, height, depth }, false));
//
//
//                // 3D grid
//                grid.setDimension(BigInteger.valueOf(3));
            } else {
                // 2d grid
                grid.setDimension(BigInteger.valueOf(2));
                grid.setLimits(new GridEnvelope2D(0, 0, width, height));

            }
        } else {
            //
            // we might be working with a rectified grid request there we need
            // to try and use that type. we cannot build a raster grid at this
            // stage yet since we have no idea about how the envelope will be intersected with the
            // native envelope for this raster
            //
            final Object rx = kvp.get("resx");
            final Object ry = kvp.get("resy");
            if (rx != null && ry != null) {
                // get resx e resy but correct also the sign for them taking into account
              final CoordinateSystem cs=crs.getCoordinateSystem();
              final AxisDirection northingDirection=cs.getAxis(1).getDirection();
              final int yAxisCorrection=AxisDirection.NORTH.equals(northingDirection)?-1:1;
              final AxisDirection eastingDirection=cs.getAxis(0).getDirection();
              final int xAxisCorrection=AxisDirection.EAST.equals(eastingDirection)?1:-1;
                final double resX = Double.parseDouble((String) rx)*xAxisCorrection;
                final double resY = Double.parseDouble((String) ry)*yAxisCorrection;
               

                // now compute offset vector for the transform from the envelope
                // Following ISO 19123 we use the CELL_CENTER convention but with the raster
                final double origX = envelope.getLowerCorner().getOrdinate(0)+resX/2;
                final double origY = envelope.getUpperCorner().getOrdinate(1)+resY/2;

                // create offset point
                final PointType origin = Gml4wcsFactory.eINSTANCE.createPointType();
                final DirectPositionType dp = Gml4wcsFactory.eINSTANCE.createDirectPositionType();
                origin.setPos(dp);
                origin.setSrsName(crsName);

                // create resolutions vector
                final VectorType resolutionVector = Gml4wcsFactory.eINSTANCE.createVectorType();

                //
                // Third dimension management
                //
                final Object rz = kvp.get("resz");
                if (rz != null) {
                    // afabiani: we consider 2D grdis only
                    throw new WcsException("3D grids are not supported.", InvalidParameterValue, "resz");
//                    // eventual depth
//                    final double resZ = Double.parseDouble((String) rz);
//                    // check that the envelope is 3D or throw an error
//                    if (bbox.getDimension() != 3)
//                        throw new WcsException("Found ResZ but envelope is of dimension "
//                                + bbox.getDimension(), InvalidParameterValue, "");
//                    final double origZ = bbox.getLowerCorner().getOrdinate(2);
//
//                    // 3D grid
//                    grid.setDimension(BigInteger.valueOf(3));
//                    // set the origin position
//                    dp.setDimension(grid.getDimension());
//                    dp.setValue(Arrays.asList(origX, origY, origZ));
//                    grid.setOrigin(origin);
//
//                    // set the resolution vector
//                    resolutionVector.setDimension(grid.getDimension());
//                    resolutionVector.setValue(Arrays.asList(resX, resY, resZ));
//                    grid.getOffsetVector().add(resolutionVector);
                } else {
                    // 2d grid
                    grid.setDimension(BigInteger.valueOf(2));
                    // set the origin position
                    dp.setDimension(grid.getDimension());
                    dp.setValue(Arrays.asList(origX, origY));
                    grid.setOrigin(origin);

                    // set the resolution vector
                    resolutionVector.setDimension(grid.getDimension());
                    resolutionVector.setValue(Arrays.asList(resX, resY));
                    grid.getOffsetVector().add(resolutionVector);
                }

            } else
                throw new WcsException("Could not recognize grid resolution",
                        InvalidParameterValue, "");
        }

        spatialSubset.getEnvelope().add(envelope);
        spatialSubset.getGrid().add(grid);
View Full Code Here

                } else {
                    List<String> unparsed = KvpUtils.readFlat(bands, KvpUtils.INNER_DELIMETER);

                    if (unparsed.size() == 0) {
                        throw new WcsException(
                                "Requested axis subset contains wrong number of values (should have at least 1): "
                                        + unparsed.size(), WcsExceptionCode.InvalidParameterValue,
                                "band");
                    }
View Full Code Here

        final CodeType formatType = Gml4wcsFactory.eINSTANCE.createCodeType();

        // check and set format
        String format = (String) kvp.get("format");
        if (format == null)
            throw new WcsException("format parameter is mandatory", MissingParameterValue, "format");

        final String crsName = (String) (kvp.get("response_crs") != null ? kvp.get("response_crs") : kvp.get("crs"));
        CoordinateReferenceSystem crs = null;
        if (crsName != null) {
            crs = decodeCRS100(crsName);
View Full Code Here

        try {
            // in 100 we work with Lon,Lat always
            return CRS.decode(crsName, true);
        } catch (NoSuchAuthorityCodeException e) {
            throw new WcsException("Could not recognize crs " + crsName, InvalidParameterValue,"crs");
        } catch (FactoryException e) {
            throw new WcsException("Could not recognize crs " + crsName, InvalidParameterValue,"crs");
        }

    }
View Full Code Here

    }

    @Override
    public Object parse(String value) throws Exception {
        if (InterpolationMethodType.get(value) == null)
            throw new WcsException("Could not find interpolationMethod '" + value + "'",
                    InvalidParameterValue, "interpolationMethod");

        return InterpolationMethodType.get(value);
    }
View Full Code Here

  @Override
    public Object parse(String value) throws Exception {
      final List<String> coverages = new ArrayList<String>();
        final List<String> identifiers = KvpUtils.readFlat(value);
        if (identifiers == null || identifiers.size() == 0) {
            throw new WcsException("Required paramer, coverage, missing",
                    WcsExceptionCode.MissingParameterValue, "coverage");
        }

        for (String coverage : identifiers) {
            final LayerInfo layer = catalog.getLayerByName(coverage);
            if (layer == null || layer.getType() != LayerInfo.Type.RASTER)
                throw new WcsException("Could not find coverage '" + coverage + "'",InvalidParameterValue, "coverage");
            coverages.add(coverage);
        }

        return coverages;
    }
View Full Code Here

  public GeneralEnvelope parse(String value) throws Exception {
        List unparsed = KvpUtils.readFlat(value, KvpUtils.INNER_DELIMETER);
        final int size = unparsed.size();
        // check to make sure that the bounding box has 4 coordinates
        if (unparsed.size() != 4) {
            throw new WcsException("Requested bounding box contains wrong"
                    + "number of coordinates: " + unparsed.size(), InvalidParameterValue, "bbox");
        }

        // if it does, store them in an array of doubles
        final double[] bbox = new double[size];
        for (int i = 0; i < size; i++) {
            try {
                bbox[i] = Double.parseDouble((String) unparsed.get(i));
            } catch (NumberFormatException e) {
                throw new WcsException("Bounding box coordinate " + i + " is not parsable:" + unparsed.get(i), InvalidParameterValue, "bbox");
            }
        }

        // ensure the values are sane
        double minx = bbox[0];
        double miny = bbox[1];
        double maxx = bbox[2];
        double maxy = bbox[3];
//      double minz = Double.NaN;
//      double maxz = Double.NaN;
//        if(size==6){
//          minz = bbox[4];
//          maxz = bbox[5];
//        }
        if (minx > maxx) {
            throw new WcsException("illegal bbox, minX: " + minx + " is "
                    + "greater than maxX: " + maxx, InvalidParameterValue, "bbox");
        }

        if (miny > maxy) {
            throw new WcsException("illegal bbox, minY: " + miny + " is "
                    + "greater than maxY: " + maxy, InvalidParameterValue, "bbox");
        }
       
//        if (size== 6 &&minz > maxz) {
//            throw new ServiceException("illegal bbox, minz: " + minz + " is "
View Full Code Here

        // let super do its thing
        request = super.read(request, kvp, rawKvp);

        DescribeCoverageType describeCoverage = (DescribeCoverageType) request;
        if (describeCoverage.getCoverage() == null || describeCoverage.getCoverage().size() == 0) {
            throw new WcsException("Required paramer, coverage, missing",
                    WcsExceptionCode.MissingParameterValue, "coverage");
        }
        // if not specified, throw a resounding exception (by spec)
        if (!describeCoverage.isSetVersion())
            throw new WcsException("Version has not been specified",
                    WcsExceptionCode.MissingParameterValue, "version");

        return request;
    }
View Full Code Here

    }

    @Override
    public Object parse(String value) throws Exception {
        if (CapabilitiesSectionType.get(value) == null)
            throw new WcsException("Could not find section '" + value + "'", InvalidParameterValue,
                    "section");

        return CapabilitiesSectionType.get(value);
    }
View Full Code Here

TOP

Related Classes of org.vfny.geoserver.wcs.WcsException

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.