/* (c) 2014 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.wcs.kvp; import static org.vfny.geoserver.wcs.WcsException.WcsExceptionCode.InvalidParameterValue; import java.util.List; import org.geoserver.ows.util.KvpUtils; import org.geotools.geometry.GeneralEnvelope; import org.vfny.geoserver.wcs.WcsException; /** * Parsing a BBOX for WCS. * * <p> * Notice that we make sure tht the BBOX is 2D since we support elevation only as a band of the range! * * @author Simone Giannecchini, GeoSolutions SAS * */ public class BBoxKvpParser extends Wcs10KvpParser { public BBoxKvpParser() { super("bbox", GeneralEnvelope.class); } @SuppressWarnings("unchecked") 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 " // + "greater than maxz: " + maxz); // } // build the final envelope with no CRS final GeneralEnvelope envelope= new GeneralEnvelope(size/2); // if(size==4) envelope.setEnvelope(minx,miny,maxx,maxy); // else // envelope.setEnvelope(minx,miny,minz,maxx,maxy,maxz); return envelope; } }