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

📄 wcsdescribecoverageparser.java

📁 esri的ArcGIS Server超级学习模板程序(for java)
💻 JAVA
字号:
/**
 * 
 */
package com.esri.solutions.jitk.datasources.ogc.wcs.parsing.version100;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;

import com.esri.solutions.jitk.datasources.exceptions.ResponseParsingException;
import com.esri.solutions.jitk.datasources.ogc.wcs.Val;
import com.esri.solutions.jitk.datasources.ogc.wcs.info.WCSCoverageInfo;
import com.esri.solutions.jitk.datasources.ogc.wcs.info.WCSEnvelope;
import com.esri.solutions.jitk.datasources.ogc.wcs.parsing.WCSParserBase;

/**
 * @author vlad2928
 *
 */
public class WCSDescribeCoverageParser extends WCSParserBase {

	private List<WCSCoverageInfo> _coverageInfos;
	private WCSCoverageInfo _coverageInfo;
	
	private boolean _doCoverageDescription;
	private boolean _doCoverageOffering;
	private boolean _doKeywords;
	private boolean _doDomainSet;
	private boolean _doSpatialDomain;
	private boolean _doRangeSet;
	private boolean _doSupportedCRSs;
	private boolean _doSupportedFormats;
	private boolean _doSupportedInterpolations;
	
	private String _version;
	private StringBuffer _lonLatEnvelope;
	private StringBuffer _gmlEnvelope;
	
	public WCSDescribeCoverageParser() {
		this.version = "1.0.0";
	}
	
	/* (non-Javadoc)
	 * @see com.esri.solutions.jitk.datasources.ogc.wcs.xml.parsing.IWCSCapabilitiesParser#parse(java.io.InputStream)
	 */
	public List<WCSCoverageInfo> parse(InputStream is) throws ResponseParsingException {
		super.parse(is, this);
		return _coverageInfos;
	}
	
	@Override
	public void startDocument() throws SAXException {
		_doCoverageDescription = _doCoverageOffering = _doKeywords = _doDomainSet = _doSpatialDomain = _doRangeSet = _doSupportedCRSs = _doSupportedFormats = _doSupportedInterpolations = false;
		_version = "";
		_lonLatEnvelope = null;
		_gmlEnvelope = null;
		_characters = null;
		_coverageInfos = null;
		_coverageInfo = null;
	}

	@Override
	public void startElement(String uri, String localName, String name, Attributes atts) throws SAXException {
		
		if(_doCoverageDescription) {
			doCoverageDescription(name, atts);
		}
		
		if(name.equalsIgnoreCase("CoverageDescription")) {
			_version = Val.chkStr(atts.getValue("version"));
			_doCoverageDescription = (_version.equals(this.getVersion()));
			
			if(_doCoverageDescription) {
				_coverageInfos = new ArrayList<WCSCoverageInfo>();
				
			} else {
				throw new SAXException(this.getClass().getName() + " can not parse WCS DescribeCoverage response ver. " + _version + ". Incompatible version.");
			}
		}
	}
	
	private void doCoverageDescription(String name, Attributes atts) {
		
		if(_doCoverageOffering) {
			doCoverageOffering(name, atts);
		
		} else if(name.equalsIgnoreCase("CoverageOffering")) {
			_coverageInfo = new WCSCoverageInfo();
			_doCoverageOffering = true;
		}
	}
	
	private void doCoverageOffering(String name, Attributes atts) {
		
		_characters = new StringBuffer();
		
		if(_doDomainSet) {
			doDomainSet(name, atts);
			
		} else if(_doRangeSet) {
			doRangeSet(name, atts);
			
		} else if(name.equalsIgnoreCase("lonLatEnvelope")) {
			_lonLatEnvelope = new StringBuffer();
			_lonLatEnvelope.append(Val.chkStr(atts.getValue("srsName")));
		
		} else if(name.equalsIgnoreCase("keywords")) {
			_doKeywords = true;
		
		} else if(name.equalsIgnoreCase("domainSet")) {
			_doDomainSet = true;
			
		} else if(name.equalsIgnoreCase("rangeSet")) {
			_doRangeSet = true;
			
		} else if(name.equalsIgnoreCase("supportedCRSs")) {
			_doSupportedCRSs = true;
			
		} else if(name.equalsIgnoreCase("supportedFormats")) {
			_coverageInfo.setNativeFormat(Val.chkStr(atts.getValue("nativeFormat")));
			_doSupportedFormats = true;
			
		} else if(name.equalsIgnoreCase("supportedInterpolations")) {
			_coverageInfo.setDefaultInterpolation(Val.chkStr(atts.getValue("default")));
			_doSupportedInterpolations = true;
		}
	}
	
	private void doDomainSet(String name, Attributes atts) {
		if(_doSpatialDomain) {
			doSpatialDomain(name, atts);
			
		} else if(name.equalsIgnoreCase("SpatialDomain")) {
			_doSpatialDomain = true;
		}
	}
	
	private void doSpatialDomain(String name, Attributes atts) {
		
		if(name.equalsIgnoreCase("gml:Envelope")) {
			_gmlEnvelope = new StringBuffer();
			_gmlEnvelope.append(Val.chkStr(atts.getValue("srsName")));
		
		} else if(name.equalsIgnoreCase("gml:RectifiedGrid")) {
			_coverageInfo.getSpatialDomain().setDimension(Val.chkInt(atts.getValue("dimension"), 2));
		}	
	}

	private void doRangeSet(String name, Attributes atts) {}

	@Override
	public void endElement(String uri, String localName, String name) throws SAXException {
		
		if(_doCoverageOffering) {
			
			if(_doDomainSet) {
				
				if(_doSpatialDomain) {
					
					if(_gmlEnvelope != null && name.equalsIgnoreCase("gml:pos")) {
						_gmlEnvelope.append("|").append(_characters);
			
					} else if(name.equalsIgnoreCase("gml:Envelope")) {
						_coverageInfo.getSpatialDomain().addEnvelope(new WCSEnvelope(_gmlEnvelope.toString()));
						_gmlEnvelope = null;
			
					} else if(name.equalsIgnoreCase("SpatialDomain")) {
						_doSpatialDomain = false;
					}
					
				} else if(name.equalsIgnoreCase("domainSet")) {
					_doDomainSet = false;
				}
				
			} else if(_doRangeSet) {
				
				if(name.equalsIgnoreCase("rangeSet")) {
					_doRangeSet = false;
				}

			} else if(_doSupportedCRSs) {
				
				if(name.equalsIgnoreCase("requestResponseCRSs")) {
					
					String[] crss = _characters.toString().split(" ");
					for(int i=0; i < crss.length; i++) {
						_coverageInfo.addRequestCRS(crss[i]);
						_coverageInfo.addResponseCRS(crss[i]);
					}
					
				} else if(name.equalsIgnoreCase("requestCRSs")) {
					
					String[] crss = _characters.toString().split(" ");
					for(int i=0; i < crss.length; i++) {
						_coverageInfo.addRequestCRS(crss[i]);
					}
					
				} else if(name.equalsIgnoreCase("responseCRSs")) {
					
					String[] crss = _characters.toString().split(" ");
					for(int i=0; i < crss.length; i++) {
						_coverageInfo.addResponseCRS(crss[i]);
					}
				
				} else if(name.equalsIgnoreCase("nativeCRSs")) {
					
					String[] crss = _characters.toString().split(" ");
					for(int i=0; i < crss.length; i++) {
						_coverageInfo.addNativeCRS(crss[i]);
					}
					
				} else if(name.equalsIgnoreCase("supportedCRSs")) {
					_doSupportedCRSs = false;	
				}  
			
			} else if(_doSupportedFormats) {
				
				if(name.equalsIgnoreCase("formats")) {
					_coverageInfo.addSupportedFormat(_characters.toString());
					
				} else if(name.equalsIgnoreCase("supportedFormats")) {
					_doSupportedFormats = false;
				}
				
				
			} else if(_doSupportedInterpolations) {
				
				if(name.equalsIgnoreCase("interpolationMethod")) {
					_coverageInfo.addSupportedInterpolation(_characters.toString());
					
				} else if(name.equalsIgnoreCase("supportedInterpolations")) {
					
					if(_coverageInfo.getDefaultInterpolation().length() == 0) {
						if(_coverageInfo.getSupportedInterpolations().size() == 0) {
							_coverageInfo.setDefaultInterpolation("nearest-neighbor");
						} else {
							_coverageInfo.setDefaultInterpolation(_coverageInfo.getSupportedInterpolations().get(0));
						}
					}
					
					_doSupportedInterpolations = false;
				}
				
			} else {
			
				if(name.equalsIgnoreCase("name")) {
					_coverageInfo.setName(_characters.toString());
			
				} else if(name.equalsIgnoreCase("label")) {
					_coverageInfo.setLabel(_characters.toString());
			
				} else if(name.equalsIgnoreCase("description")) {
					_coverageInfo.setDescription(_characters.toString());
			
				} else if(_doKeywords) {
				
					if(name.equalsIgnoreCase("keyword")) {
						_coverageInfo.addKeyword(_characters.toString());
				
					} else if(name.equalsIgnoreCase("keywords")) {
						_doKeywords = false;
					}
			
				} else if(name.equalsIgnoreCase("gml:pos")) {
					_lonLatEnvelope.append("|").append(_characters);
			
				} else if(name.equalsIgnoreCase("lonLatEnvelope")) {
					_coverageInfo.setLonLatEnvelope(new WCSEnvelope(_lonLatEnvelope.toString()));
					_lonLatEnvelope = null;
			
				} else if(name.equalsIgnoreCase("domainSet")) {
					_doDomainSet = false;
				
				} else if(name.equalsIgnoreCase("rangeSet")) {
					_doRangeSet = false;
				
				} else if(name.equalsIgnoreCase("CoverageOffering")) {
					_coverageInfos.add(_coverageInfo);
					_coverageInfo = null;
					_doCoverageOffering = false;
				}
			}
		}
	}
}

⌨️ 快捷键说明

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