📄 wcsdescribecoverageparser.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 + -