📄 wmscapstransformer.java
字号:
element("Name", layerName);
element("Title", layerName);
element("Abstract", "Layer-Group complex style");
//handleLegendURL(...URL);
end("Style");
end("Layer");
}
}
/**
* Writes layer LegendURL pointing to the user supplied icon URL, if
* any, or to the proper GetLegendGraphic operation if an URL was not
* supplied by configuration file.
*
* <p>
* It is common practice to supply a URL to a WMS accesible legend
* graphic when it is difficult to create a dynamic legend for a layer.
* </p>
*
* @param ft
* The FeatureTypeInfo that holds the legendURL to write out,
* or<code>null</code> if dynamically generated.
*
* @task TODO: figure out how to unhack legend parameters such as WIDTH,
* HEIGHT and FORMAT
*/
protected void handleLegendURL(Object layer) {
LegendURL legend = null;
String layerName = null;
if (layer instanceof FeatureTypeInfo) {
legend = ((FeatureTypeInfo) layer).getLegendURL();
layerName = ((FeatureTypeInfo) layer).getName();
} else if (layer instanceof CoverageInfo) {
layerName = ((CoverageInfo) layer).getName();
}
if (legend != null) {
if (LOGGER.isLoggable(Level.FINE)) {
LOGGER.fine("using user supplied legend URL");
}
AttributesImpl attrs = new AttributesImpl();
attrs.addAttribute("", "width", "width", "", String.valueOf(legend.getWidth()));
attrs.addAttribute("", "height", "height", "", String.valueOf(legend.getHeight()));
start("LegendURL", attrs);
element("Format", legend.getFormat());
attrs.clear();
attrs.addAttribute("", "xmlns:xlink", "xmlns:xlink", "", XLINK_NS);
attrs.addAttribute(XLINK_NS, "type", "xlink:type", "", "simple");
attrs.addAttribute(XLINK_NS, "href", "xlink:href", "", legend.getOnlineResource());
element("OnlineResource", null, attrs);
end("LegendURL");
} else {
String defaultFormat = GetLegendGraphicRequest.DEFAULT_FORMAT;
if (!GetLegendGraphicResponse.supportsFormat(defaultFormat, applicationContext)) {
if (LOGGER.isLoggable(Level.WARNING)) {
LOGGER.warning(new StringBuffer("Default legend format (").append(
defaultFormat)
.append(")is not supported (jai not available?), can't add LegendURL element")
.toString());
}
return;
}
if (LOGGER.isLoggable(Level.FINE)) {
LOGGER.fine("Adding GetLegendGraphic call as LegendURL");
}
AttributesImpl attrs = new AttributesImpl();
attrs.addAttribute("", "width", "width", "",
String.valueOf(GetLegendGraphicRequest.DEFAULT_WIDTH));
// DJB: problem here is that we do not know the size of the
// legend apriori - we need
// to make one and find its height. Not the best way, but it
// would work quite well.
// This was advertising a 20*20 icon, but actually producing
// ones of a different size.
// An alternative is to just scale the resulting icon to what
// the server requested, but this isnt
// the nicest thing since warped images dont look nice. The
// client should do the warping.
// however, to actually estimate the size is a bit difficult.
// I'm going to do the scaling
// so it obeys the what the request says. For people with a
// problem with that should consider
// changing the default size here so that the request is for the
// correct size.
attrs.addAttribute("", "height", "height", "",
String.valueOf(GetLegendGraphicRequest.DEFAULT_HEIGHT));
start("LegendURL", attrs);
element("Format", defaultFormat);
attrs.clear();
StringBuffer onlineResource =
new StringBuffer(RequestUtils.proxifiedBaseURL(
request.getBaseUrl()
,request.getServiceRef().getGeoServer().getProxyBaseUrl()
));
onlineResource.append("wms/GetLegendGraphic?VERSION=");
onlineResource.append(GetLegendGraphicRequest.SLD_VERSION);
onlineResource.append("&FORMAT=");
onlineResource.append(defaultFormat);
onlineResource.append("&WIDTH=");
onlineResource.append(GetLegendGraphicRequest.DEFAULT_WIDTH);
onlineResource.append("&HEIGHT=");
onlineResource.append(GetLegendGraphicRequest.DEFAULT_HEIGHT);
onlineResource.append("&LAYER=");
onlineResource.append(layerName);
attrs.addAttribute("", "xmlns:xlink", "xmlns:xlink", "", XLINK_NS);
attrs.addAttribute(XLINK_NS, "type", "xlink:type", "", "simple");
attrs.addAttribute(XLINK_NS, "href", "xlink:href", "", onlineResource.toString());
element("OnlineResource", null, attrs);
end("LegendURL");
}
}
/**
* Encodes a LatLonBoundingBox for the given Envelope.
*
* @param bbox
*/
private void handleLatLonBBox(Envelope bbox) {
String minx = String.valueOf(bbox.getMinX());
String miny = String.valueOf(bbox.getMinY());
String maxx = String.valueOf(bbox.getMaxX());
String maxy = String.valueOf(bbox.getMaxY());
AttributesImpl bboxAtts = new AttributesImpl();
bboxAtts.addAttribute("", "minx", "minx", "", minx);
bboxAtts.addAttribute("", "miny", "miny", "", miny);
bboxAtts.addAttribute("", "maxx", "maxx", "", maxx);
bboxAtts.addAttribute("", "maxy", "maxy", "", maxy);
element("LatLonBoundingBox", null, bboxAtts);
}
/**
* adds a comment to the output xml file. THIS IS A BIG HACK. TODO: do
* this in the correct manner!
*
* @param comment
*/
public void comment(String comment) {
if (contentHandler instanceof TransformerIdentityImpl) // HACK HACK
// HACK --
// not sure
// of the
// proper
// way to do
// this.
{
try {
TransformerIdentityImpl ch = (TransformerIdentityImpl) contentHandler;
ch.comment(comment.toCharArray(), 0, comment.length());
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* Encodes a BoundingBox for the given Envelope.
*
* @param bbox
*/
private void handleBBox(Envelope bbox, String SRS) {
String minx = String.valueOf(bbox.getMinX());
String miny = String.valueOf(bbox.getMinY());
String maxx = String.valueOf(bbox.getMaxX());
String maxy = String.valueOf(bbox.getMaxY());
AttributesImpl bboxAtts = new AttributesImpl();
bboxAtts.addAttribute("", "SRS", "SRS", "", SRS);
bboxAtts.addAttribute("", "minx", "minx", "", minx);
bboxAtts.addAttribute("", "miny", "miny", "", miny);
bboxAtts.addAttribute("", "maxx", "maxx", "", maxx);
bboxAtts.addAttribute("", "maxy", "maxy", "", maxy);
element("BoundingBox", null, bboxAtts);
}
}
}
/**
* A Class to manage the WMS Layer structure
*
* @author fabiania
*
* TODO To change the template for this generated type comment go to Window -
* Preferences - Java - Code Style - Code Templates
*/
class LayerTree {
private String name;
private Collection childrens;
private Collection data;
/**
* @param name
* String
*/
public LayerTree(String name) {
this.name = name;
this.childrens = new ArrayList();
this.data = new ArrayList();
}
/**
* @param c
* Collection
*/
public LayerTree(Collection c) {
this.name = "";
this.childrens = new ArrayList();
this.data = new ArrayList();
for (Iterator it = c.iterator(); it.hasNext();) {
Object element = it.next();
if (element instanceof CoverageInfo) {
CoverageInfo cLayer = (CoverageInfo) element;
if (cLayer.isEnabled()) {
String wmsPath = (((cLayer.getWmsPath() != null)
&& (cLayer.getWmsPath().length() > 0)) ? cLayer.getWmsPath() : "/");
if (wmsPath.startsWith("/")) {
wmsPath = wmsPath.substring(1, wmsPath.length());
}
String[] treeStructure = wmsPath.split("/");
addToNode(this, treeStructure, cLayer);
}
} else if (element instanceof FeatureTypeInfo) {
FeatureTypeInfo fLayer = (FeatureTypeInfo) element;
if (fLayer.isEnabled()) {
String wmsPath = (((fLayer.getWmsPath() != null)
&& (fLayer.getWmsPath().length() > 0)) ? fLayer.getWmsPath() : "/");
if (wmsPath.startsWith("/")) {
wmsPath = wmsPath.substring(1, wmsPath.length());
}
String[] treeStructure = wmsPath.split("/");
addToNode(this, treeStructure, fLayer);
}
}
}
}
/**
* @param tree
* @param treeStructure
* @param layer
*/
private void addToNode(LayerTree tree, String[] treeStructure, CoverageInfo layer) {
final int length = treeStructure.length;
if ((length == 0) || (treeStructure[0].length() == 0)) {
tree.data.add(layer);
} else {
LayerTree node = tree.getNode(treeStructure[0]);
if (node == null) {
node = new LayerTree(treeStructure[0]);
tree.childrens.add(node);
}
String[] subTreeStructure = new String[length - 1];
System.arraycopy(treeStructure, 1, subTreeStructure, 0, length - 1);
addToNode(node, subTreeStructure, layer);
}
}
private void addToNode(LayerTree tree, String[] treeStructure, FeatureTypeInfo layer) {
final int length = treeStructure.length;
if ((length == 0) || (treeStructure[0].length() == 0)) {
tree.data.add(layer);
} else {
LayerTree node = tree.getNode(treeStructure[0]);
if (node == null) {
node = new LayerTree(treeStructure[0]);
tree.childrens.add(node);
}
String[] subTreeStructure = new String[length - 1];
System.arraycopy(treeStructure, 1, subTreeStructure, 0, length - 1);
addToNode(node, subTreeStructure, layer);
}
}
/**
* @param string
* @return
*/
public LayerTree getNode(String name) {
LayerTree node = null;
for (Iterator it = this.childrens.iterator(); it.hasNext();) {
LayerTree tmpNode = (LayerTree) it.next();
if (tmpNode.name.equals(name)) {
node = tmpNode;
}
}
return node;
}
public Collection getChildrens() {
return childrens;
}
public Collection getData() {
return data;
}
public String getName() {
return name;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -