📄 wcshttpclientversion110.java
字号:
/**
*
*/
package com.esri.solutions.jitk.datasources.ogc.wcs;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.httpclient.HttpException;
import com.esri.solutions.jitk.datasources.exceptions.ResponseParsingException;
import com.esri.solutions.jitk.datasources.exceptions.WCSException;
import com.esri.solutions.jitk.datasources.ogc.wcs.info.WCSBoundingBox;
import com.esri.solutions.jitk.datasources.ogc.wcs.info.WCSCoverageInfo;
import com.esri.solutions.jitk.datasources.ogc.wcs.info.WCSExceptionInfo;
import com.esri.solutions.jitk.datasources.ogc.wcs.parsing.version100.WCSExceptionParser;
import com.esri.solutions.jitk.datasources.ogc.wcs.parsing.version110.WCSDescribeCoverageParser;
import com.esri.solutions.jitk.datasources.ogc.wcs.parsing.version110.WCSMimeMultipartStreamParser;
import com.esri.solutions.jitk.datasources.ogc.wcs.parsing.version110.WCSMimePartDescriptor;
/**
* @author vlad2928
*
*/
public class WCSHTTPClientVersion110 extends WCSHTTPClientBase implements IWCSClient {
protected WCSHTTPClientVersion110() {
this.version = "1.1.0";
}
public List<WCSCoverageInfo> describeCoverage(String describeCoverageURL, String[] coverageIDs) throws WCSException {
try {
WCSDescribeCoverageParser parser = new WCSDescribeCoverageParser();
WCSURLBuilder urlBuilder = new WCSURLBuilder(describeCoverageURL);
if(!urlBuilder.isValid()) {
throw new MalformedURLException(urlBuilder.getErrorMessage());
}
if(coverageIDs != null && coverageIDs.length > 0) {
List<WCSCoverageInfo> wscCoverageInfos = new ArrayList<WCSCoverageInfo>();
for(int i=0; i < coverageIDs.length; i++) {
doGET(urlBuilder.getDescribeCoverageURL(new String[] {coverageIDs[i]}));
if(isConnectionOpen()) {
List<WCSCoverageInfo> infos = parser.parse(method.getResponseBodyAsStream());
releaseConnection();
if(infos != null) {
for(Iterator<WCSCoverageInfo> it = infos.iterator(); it.hasNext();) {
wscCoverageInfos.add(it.next());
}
}
}
}
return wscCoverageInfos;
} else {
doGET(urlBuilder.getDescribeCoverageURL(null));
if(isConnectionOpen()) {
return parser.parse(method.getResponseBodyAsStream());
}
}
} catch(MalformedURLException e) {
logger.error("Malformed url " + describeCoverageURL + " provided.");
logger.error(e.getMessage());
throw new WCSException("Malformed url " + describeCoverageURL + " provided.");
} catch(HttpException e) {
logger.error("Fatal protocol violation: " + e.getMessage());
throw new WCSException("Fatal protocol violation.");
} catch(IOException e) {
logger.error("Fatal transport error: " + e.getMessage());
throw new WCSException("Fatal transport error.");
} catch(ResponseParsingException e) {
logger.error("Response parsing error: " + e.getMessage());
throw new WCSException("Response parsing error.");
} finally {
releaseConnection();
}
return null;
}
public InputStream getCoverage(String getCoverageURL, String coverage, String crs, String bbox, int height, int width, String format) throws WCSException {
try {
WCSURLBuilder urlBuilder = new WCSURLBuilder(getCoverageURL);
if(!urlBuilder.isValid()) {
throw new MalformedURLException(urlBuilder.getErrorMessage());
}
doGET(urlBuilder.getGetCoverageURL(coverage, crs, bbox, height, width, format));
if(isConnectionOpen()) {
String contentType = getResponseContentType();
if(contentType.indexOf("multipart") != -1) {
WCSMimeMultipartStreamParser parser = new WCSMimeMultipartStreamParser();
parser.parse(method.getResponseBodyAsStream());
for(Iterator<WCSMimePartDescriptor> i=parser.getParts().iterator(); i.hasNext();) {
WCSMimePartDescriptor part = i.next();
if(part.getContentType().toLowerCase().startsWith("image/")) {
return parser.getPartInputStream(part);
}
}
parser = null;
} else if(contentType.equalsIgnoreCase("application/vnd.ogc.se_xml")) {
WCSExceptionInfo exception = new WCSExceptionParser().parse(method.getResponseBodyAsStream());
throw new WCSException(exception.getMessage());
}
}
} catch(MalformedURLException e) {
logger.error("Malformed url " + getCoverageURL + " provided.");
logger.error(e.getMessage());
throw new WCSException("Malformed url " + getCoverageURL + " provided.");
} catch(HttpException e) {
logger.error("Fatal protocol violation: " + e.getMessage());
throw new WCSException("Fatal protocol violation.");
} catch(IOException e) {
logger.error("Fatal transport error: " + e.getMessage());
throw new WCSException("Fatal transport error.");
} catch(ResponseParsingException e) {
logger.error("Response parsing error: " + e.getMessage());
throw new WCSException("Response parsing error.");
} finally {
releaseConnection();
}
return null;
}
private class WCSURLBuilder extends URLBuilder {
public WCSURLBuilder(String url) {
super(url);
}
public IURL getGetCapabilitiesURL() {
setParam("request", "GetCapabilities");
setParam("service", "WCS");
setParam("version", getVersion());
return this;
}
public IURL getDescribeCoverageURL(String[] coverageIDs) {
setParam("request", "DescribeCoverage");
setParam("service", "WCS");
setParam("version", getVersion());
if(coverageIDs != null && coverageIDs.length > 0) {
StringBuffer coverages = new StringBuffer();
for(int i=0; i < coverageIDs.length; i++) {
if(coverages.length() > 0) {
coverages.append(",");
}
coverages.append(coverageIDs[i]);
}
setParam("identifiers", coverages.toString());
} else {
removeParam("identifiers");
}
return this;
}
public IURL getGetCoverageURL(String coverage, String crs, String bbox, int height, int width, String format) {
setParam("request", "GetCoverage");
setParam("service", "WCS");
setParam("version", getVersion());
setParam("identifier", coverage);
String sCRS = "urn:ogc:def:crs:EPSG::" + crs;
WCSBoundingBox extent = new WCSBoundingBox(bbox.split(","));
extent.reaspect(width, height);
setParam("BoundingBox", extent.toString() + "," + sCRS);
setParam("GridBaseCRS", sCRS);
setParam("GridCS", "urn:ogc:def:cs:OGC:0.0:Grid2dSquareCS");
setParam("GridType", "urn:ogc:def:method:WCS:1.1:2dGridIn2dCrs");
setParam("GridOrigin", extent.getMinX() + "," + extent.getMaxY());
setParam("GridOffsets", (extent.getWidth() / width) + ",-" + (extent.getHeight() / height));
setParam("store", "false");
setParam("format", format);
return this;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -