📄 wcsdescribecoverageparser.java
字号:
/**
*
*/
package com.esri.solutions.jitk.datasources.ogc.wcs.parsing.version110;
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.OGCCRS;
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 _doCoverageDescriptions;
private boolean _doCoverageDescription;
private boolean _doKeywords;
private boolean _doDomain;
private boolean _doSpatialDomain;
private boolean _doRange;
private String _version;
private WCSEnvelope _bbox;
public WCSDescribeCoverageParser() {
this.version = "1.1.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 {
_doCoverageDescriptions = _doCoverageDescription = _doKeywords = _doDomain = _doSpatialDomain = _doRange = false;
_version = "";
_bbox = null;
_characters = null;
_coverageInfos = null;
_coverageInfo = null;
}
@Override
public void startElement(String uri, String localName, String name, Attributes atts) throws SAXException {
String sTagName = name.replaceFirst("^\\w*:", "");
if(_doCoverageDescriptions) {
doCoverageDescriptions(sTagName, atts);
}
if(sTagName.equalsIgnoreCase("CoverageDescriptions")) {
_doCoverageDescriptions = (Val.chkStr(atts.getValue("xmlns")).indexOf("http://www.opengis.net/wcs/1.1") != -1);
if(_doCoverageDescriptions) {
_coverageInfos = new ArrayList<WCSCoverageInfo>();
} else {
throw new SAXException(this.getClass().getName() + " can not parse WCS DescribeCoverage response ver. " + _version + ". Incompatible version.");
}
}
}
private void doCoverageDescriptions(String name, Attributes atts) {
if(_doCoverageDescription) {
doCoverageDescription(name, atts);
} else if(name.equalsIgnoreCase("CoverageDescription")) {
_coverageInfo = new WCSCoverageInfo();
_doCoverageDescription = true;
}
}
private void doCoverageDescription(String name, Attributes atts) {
_characters = new StringBuffer();
if(_doDomain) {
doDomain(name, atts);
} else if(_doRange) {
doRange(name, atts);
} else if(name.equalsIgnoreCase("keywords")) {
_doKeywords = true;
} else if(name.equalsIgnoreCase("Domain")) {
_doDomain = true;
} else if(name.equalsIgnoreCase("Range")) {
_doRange = true;
}
}
private void doDomain(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("BoundingBox")) {
OGCCRS crs = new OGCCRS(Val.chkStr(atts.getValue("crs")));
if(!crs.getCode().equalsIgnoreCase("imageCRS")) {
_bbox = new WCSEnvelope();
_bbox.setCRS(crs.toString());
_coverageInfo.getSpatialDomain().setDimension(Val.chkInt(atts.getValue("dimension"), 2));
}
}
}
private void doRange(String name, Attributes atts) {}
@Override
public void endElement(String uri, String localName, String name) throws SAXException {
String sTagName = name.replaceFirst("^\\w*:", "");
if(_doCoverageDescription) {
if(_doDomain) {
if(_doSpatialDomain) {
if(_bbox != null && sTagName.equalsIgnoreCase("LowerCorner")) {
String[] coords = _characters.toString().split(" ");
if(coords.length == 2) {
_bbox.setMinX(Val.chkDbl(coords[0], Double.NaN));
_bbox.setMinY(Val.chkDbl(coords[1], Double.NaN));
}
} else if(_bbox != null && sTagName.equalsIgnoreCase("UpperCorner")) {
String[] coords = _characters.toString().split(" ");
if(coords.length == 2) {
_bbox.setMaxX(Val.chkDbl(coords[0], Double.NaN));
_bbox.setMaxY(Val.chkDbl(coords[1], Double.NaN));
}
} else if(_bbox != null && sTagName.equalsIgnoreCase("BoundingBox")) {
_coverageInfo.getSpatialDomain().addEnvelope(_bbox);
_bbox = null;
} else if(sTagName.equalsIgnoreCase("GridBaseCRS")) {
_coverageInfo.addNativeCRS(_characters.toString());
} else if(sTagName.equalsIgnoreCase("SpatialDomain")) {
_doSpatialDomain = false;
}
} else if(sTagName.equalsIgnoreCase("Domain")) {
_doDomain = false;
}
} else if(_doRange) {
if(sTagName.equalsIgnoreCase("Range")) {
_doRange = false;
}
} else {
if(sTagName.equalsIgnoreCase("Title")) {
_coverageInfo.setLabel(_characters.toString());
} else if(sTagName.equalsIgnoreCase("Abstract")) {
_coverageInfo.setDescription(_characters.toString());
} else if(sTagName.equalsIgnoreCase("Identifier")) {
_coverageInfo.setId(_characters.toString());
} else if(sTagName.equalsIgnoreCase("SupportedFormat")) {
_coverageInfo.addSupportedFormat(_characters.toString());
} else if(sTagName.equalsIgnoreCase("SupportedCRS")) {
_coverageInfo.addRequestCRS(_characters.toString());
_coverageInfo.addResponseCRS(_characters.toString());
} else if(_doKeywords) {
if(sTagName.equalsIgnoreCase("keyword")) {
_coverageInfo.addKeyword(_characters.toString());
} else if(sTagName.equalsIgnoreCase("keywords")) {
_doKeywords = false;
}
} else if(sTagName.equalsIgnoreCase("Domain")) {
_doDomain = false;
} else if(sTagName.equalsIgnoreCase("Range")) {
_doRange = false;
} else if(sTagName.equalsIgnoreCase("CoverageDescription")) {
_coverageInfos.add(_coverageInfo);
_coverageInfo = null;
_doCoverageDescription = false;
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -