📄 getmapxmlreader.java
字号:
}
}
getMapRequest.setLayers((MapLayerInfo[]) layers.toArray(new MapLayerInfo[layers.size()]));
getMapRequest.setStyles(styles);
}
/**
* xs:element name="BoundingBox" type="gml:BoxType"/> dont forget the SRS!
*
* @param getMapRequest
* @param nodeGetMap
*
* @throws Exception DOCUMENT ME!
*/
private void parseBBox(GetMapRequest getMapRequest, Node nodeGetMap)
throws Exception {
Node bboxNode = getNode(nodeGetMap, "BoundingBox");
if (bboxNode == null) {
throw new Exception("GetMap XML parser - couldnt find node 'BoundingBox' in GetMap tag");
}
List coordList = ExpressionDOMParser.parseCoords(bboxNode);
if (coordList.size() != 2) {
throw new Exception(
"GetMap XML parser - node 'BoundingBox' in GetMap tag should have 2 coordinates in it");
}
com.vividsolutions.jts.geom.Envelope env = new com.vividsolutions.jts.geom.Envelope();
final int size = coordList.size();
for (int i = 0; i < size; i++) {
env.expandToInclude((Coordinate) coordList.get(i));
}
getMapRequest.setBbox(env);
// SRS
NamedNodeMap atts = bboxNode.getAttributes();
Node srsNode = atts.getNamedItem("srsName");
if (srsNode != null) {
String srs = srsNode.getNodeValue();
String epsgCode = srs.substring(srs.indexOf('#') + 1);
epsgCode = "EPSG:" + epsgCode;
try {
CoordinateReferenceSystem mapcrs = CRS.decode(epsgCode);
getMapRequest.setCrs(mapcrs);
getMapRequest.setSRS(epsgCode);
} catch (Exception e) {
//couldnt make it - we send off a service exception with the correct info
throw new WmsException(e.getLocalizedMessage(), "InvalidSRS");
}
}
}
//J--
/**
*
* <xs:element name="Format" type="ogc:FormatType"/>
* <xs:element name="Transparent" type="xs:boolean" minOccurs="0"/>
* <xs:element name="BGcolor" type="xs:string" minOccurs="0"/>
* <xs:element name="Size">
* <xs:complexType>
* <xs:sequence>
* <xs:element name="Width" type="xs:positiveInteger"/>
* <xs:element name="Height" type="xs:positiveInteger"/>
* </xs:sequence>
* </xs:complexType>
* <xs:element name="Buffer" type="xs:integer" minOccurs="0"/>
* </xs:element><!--Size-->
*
* @param nodeGetMap
* @param getMapRequest
*/
//J+
private void parseXMLOutput(Node nodeGetMap, GetMapRequest getMapRequest)
throws Exception {
Node outputNode = getNode(nodeGetMap, "Output");
if (outputNode == null) {
throw new Exception("GetMap XML parser - couldnt find node 'Output' in GetMap tag");
}
//Format
String format = getNodeValue(outputNode, "Format");
if (format == null) {
throw new Exception(
"GetMap XML parser - couldnt find node 'Format' in GetMap/Output tag");
}
getMapRequest.setFormat(format);
// Transparent
String trans = getNodeValue(outputNode, "Transparent");
if (trans != null) {
if (trans.equalsIgnoreCase("false") || trans.equalsIgnoreCase("0")) {
getMapRequest.setTransparent(false);
} else {
getMapRequest.setTransparent(true);
}
}
// Buffer
String bufferValue = getNodeValue(outputNode, "Buffer");
if (bufferValue != null) {
getMapRequest.setBuffer(Integer.parseInt(bufferValue));
}
//BGColor
String bgColor = getNodeValue(outputNode, "BGcolor");
if (bgColor != null) {
getMapRequest.setBgColor(Color.decode(bgColor));
}
//SIZE
Node sizeNode = getNode(outputNode, "Size");
if (sizeNode == null) {
throw new Exception("GetMap XML parser - couldnt find node 'Size' in GetMap/Output tag");
}
//Size/Width
String width = getNodeValue(sizeNode, "Width");
if (width == null) {
throw new Exception(
"GetMap XML parser - couldnt find node 'Width' in GetMap/Output/Size tag");
}
getMapRequest.setWidth(Integer.parseInt(width));
//Size/Height
String height = getNodeValue(sizeNode, "Height");
if (width == null) {
throw new Exception(
"GetMap XML parser - couldnt find node 'Height' in GetMap/Output/Size tag");
}
getMapRequest.setHeight(Integer.parseInt(height));
}
/**
* Give a node and the name of a child of that node, return it. This doesnt
* do anything complex.
*
* @param parentNode
* @param wantedChildName
*
* @return
*/
public Node getNode(Node parentNode, String wantedChildName) {
NodeList children = parentNode.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
Node child = children.item(i);
if ((child == null) || (child.getNodeType() != Node.ELEMENT_NODE)) {
continue;
}
String childName = child.getLocalName();
if (childName == null) {
childName = child.getNodeName();
}
if (childName.equalsIgnoreCase(wantedChildName)) {
return child;
}
}
return null;
}
/**
* Give a node and the name of a child of that node, find its (string)
* value. This doesnt do anything complex.
*
* @param parentNode
* @param wantedChildName
*
* @return
*/
public String getNodeValue(Node parentNode, String wantedChildName) {
NodeList children = parentNode.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
Node child = children.item(i);
if ((child == null) || (child.getNodeType() != Node.ELEMENT_NODE)) {
continue;
}
String childName = child.getLocalName();
if (childName == null) {
childName = child.getNodeName();
}
if (childName.equalsIgnoreCase(wantedChildName)) {
return child.getChildNodes().item(0).getNodeValue();
}
}
return null;
}
/**
* returns true if this node is named "name". Ignores case and namespaces.
*
* @param n
* @param name
*
* @return
*/
public boolean nodeNameEqual(Node n, String name) {
if (n.getNodeName().equalsIgnoreCase(name)) {
return true;
}
String nname = n.getNodeName();
int idx = nname.indexOf(':');
if (idx == -1) {
return false;
}
if (nname.substring(idx + 1).equalsIgnoreCase(name)) {
return true;
}
return false;
}
/**
* This should only be called if the xml starts with StyledLayerDescriptor
* Don't use on a GetMap.
*
* @param f
* @param getMapRequest
*
* @throws Exception
* @throws WmsException DOCUMENT ME!
*/
public void validateSchemaSLD(File f, GetMapRequest getMapRequest)
throws Exception {
SLDValidator validator = new SLDValidator();
List errors = null;
try {
FileInputStream in = null;
try {
in = new FileInputStream(f);
errors = validator.validateSLD(in,
getMapRequest.getHttpServletRequest().getSession().getServletContext());
} finally {
if (in != null) {
in.close();
}
}
if (errors.size() != 0) {
in = new FileInputStream(f);
throw new WmsException(SLDValidator.getErrorMessage(in, errors));
}
} catch (IOException e) {
String msg = new StringBuffer("Creating remote SLD url: ").append(e.getMessage())
.toString();
if (LOGGER.isLoggable(Level.WARNING)) {
LOGGER.log(Level.WARNING, msg, e);
}
throw new WmsException(e, msg, "parseSldParam");
}
}
/**
* This should only be called if the xml starts with GetMap Don't use on a
* SLD.
*
* @param f
* @param getMapRequest
*
* @throws Exception
* @throws WmsException DOCUMENT ME!
*/
public void validateSchemaGETMAP(File f, GetMapRequest getMapRequest)
throws Exception {
GETMAPValidator validator = new GETMAPValidator();
List errors = null;
try {
FileInputStream in = null;
try {
in = new FileInputStream(f);
errors = validator.validateGETMAP(in,
getMapRequest.getHttpServletRequest().getSession().getServletContext());
} finally {
if (in != null) {
in.close();
}
}
if (errors.size() != 0) {
in = new FileInputStream(f);
throw new WmsException(GETMAPValidator.getErrorMessage(in, errors));
}
} catch (IOException e) {
String msg = new StringBuffer("Creating remote GETMAP url: ").append(e.getMessage())
.toString();
if (LOGGER.isLoggable(Level.WARNING)) {
LOGGER.log(Level.WARNING, msg, e);
}
throw new WmsException(e, msg, "GETMAP validator");
}
}
/**
* DOCUMENT ME!
*
* @param request
*
* @return
*/
private boolean wantToValidate(HttpServletRequest request) {
String queryString = request.getQueryString(); // ie. FORMAT=image/png&TRANSPARENT=TRUE&HEIGHT=480&REQUEST=GetMap&BBOX=-73.94896388053894,40.77323718492597,-73.94105110168456,40.77796711500081&WIDTH=803&SRS=EPSG:4326&VERSION=1.1.1
if (queryString == null) {
return false; // pure POST without any query
}
queryString = queryString.toLowerCase();
if (queryString.startsWith("validateschema")
|| (queryString.indexOf("&validateschema") != -1)) {
return true;
}
return false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -