⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wcshttpclientversion100.java

📁 esri的ArcGIS Server超级学习模板程序(for java)
💻 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.WCSDescribeCoverageParser;
import com.esri.solutions.jitk.datasources.ogc.wcs.parsing.version100.WCSExceptionParser;

/**
 * @author vlad2928
 *
 */
public class WCSHTTPClientVersion100 extends WCSHTTPClientBase implements IWCSClient {
	
	protected WCSHTTPClientVersion100() {
		this.version = "1.0.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.toLowerCase().startsWith("image/")) {
					return method.getResponseBodyAsStream();
				
				} 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("coverage", coverages.toString());
				
			} else {
				removeParam("coverage");
			}
			
			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("coverage", coverage);
			setParam("crs", crs);
			
			WCSBoundingBox extent = new WCSBoundingBox(bbox.split(","));
			extent.reaspect(width, height);
			setParam("bbox", extent.toString());
			
			setParam("height", new Integer(height).toString());
			setParam("width", new Integer(width).toString());
			setParam("format", format);
			
			return this;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -