📄 selectionsymbologypreviewservlet.java
字号:
package com.esri.solutions.jitk.web.tasks.preferences.selectionsymbols;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import com.esri.adf.web.data.geometry.WebCircle;
import com.esri.adf.web.data.geometry.WebGeometry;
import com.esri.adf.web.data.geometry.WebPath;
import com.esri.adf.web.data.geometry.WebPoint;
import com.esri.adf.web.data.geometry.WebPolygon;
import com.esri.adf.web.data.geometry.WebPolyline;
import com.esri.adf.web.data.geometry.WebRing;
import com.esri.adf.web.data.geometry.WebSpatialReference;
import com.esri.adf.web.data.symbol.WebSimpleLineSymbol;
import com.esri.adf.web.data.symbol.WebSimpleMarkerSymbol;
import com.esri.adf.web.data.symbol.WebSimplePolygonSymbol;
import com.esri.adf.web.data.symbol.WebSymbol;
import com.esri.adf.web.util.GraphicsUtil;
import com.esri.solutions.jitk.common.geometry.GeometryConverter;
import com.esri.solutions.jitk.web.data.geometry.WebArc;
@SuppressWarnings("deprecation")
public class SelectionSymbologyPreviewServlet extends HttpServlet {
private static final long serialVersionUID = -6702313658101409881L;
private static final Logger _logger = Logger.getLogger(SelectionSymbologyPreviewServlet.class);
private byte[] generateSymbolPreview(WebSymbol symbol, WebGeometry geometry, int width, int height) {
byte[] image = null;
try {
_logger.debug("Generating " + symbol.getClass().getName() + " preview...");
image = GraphicsUtil.exportSymbol(symbol, geometry, width, height);
} catch (Exception ex) { _logger.error("Could not generate " + symbol.getClass().getName() + " preview.", ex); }
return image;
}
protected byte[] generateWebSimpleMarkerSymbol(HttpServletRequest request, int width, int height) {
WebSimpleMarkerSymbol pointSymbol = new WebSimpleMarkerSymbol();
pointSymbol.setMarkerType(Val.chkInt(request.getParameter("markerType"), WebSimpleMarkerSymbol.CIRCLE));
pointSymbol.setWidth(Val.chkInt(request.getParameter("markerWidth"), 1));
pointSymbol.setAngle(Val.chkDbl(request.getParameter("markerAngle"), 0));
pointSymbol.setColor(Val.chkStr(request.getParameter("markerColor"), "0,0,0"));
pointSymbol.setOutlineColor(Val.chkStr(request.getParameter("markerOutlineColor"), "0,0,0"));
pointSymbol.setTransparency(Val.chkDbl(request.getParameter("markerTransparency"), 1.0));
pointSymbol.setAntialiasing(Val.chkBool(request.getParameter("markerAntialiasing"), false));
WebPoint webPoint = new WebPoint();
webPoint.setSpatialReference(WebSpatialReference.getWebSpatialReference(4326));
webPoint.setX(width/2);
webPoint.setY(height/2);
return generateSymbolPreview(pointSymbol, webPoint, width, height);
}
protected byte[] generateWebSimpleLineSymbol(HttpServletRequest request, int width, int height) {
WebSimpleLineSymbol lineSymbol = new WebSimpleLineSymbol();
lineSymbol.setLineType(Val.chkStr(request.getParameter("lineType"), WebSimpleLineSymbol.SOLID));
lineSymbol.setWidth(Val.chkInt(request.getParameter("lineWidth"), 1));
lineSymbol.setTransparency(Val.chkDbl(request.getParameter("lineTransparency"), 1.0));
lineSymbol.setColor(Val.chkStr(request.getParameter("lineColor"), "0,0,0"));
lineSymbol.setCapType(Val.chkStr(request.getParameter("lineCapType"), WebSimpleLineSymbol.BUTT));
lineSymbol.setJoinType(Val.chkStr(request.getParameter("lineJoinType"), WebSimpleLineSymbol.ROUND));
lineSymbol.setAntialiasing(Val.chkBool(request.getParameter("lineAntialiasing"), true));
WebPath webPath = new WebPath();
double d = lineSymbol.getWidth() + 5;
double step = (width - 2*d) / 3;
webPath.addPoint(new WebPoint(d, height - d));
webPath.addPoint(new WebPoint(d + step, d));
webPath.addPoint(new WebPoint(d + step + step, height - d));
webPath.addPoint(new WebPoint(d + step + step + step, d));
WebPolyline webPolyline = new WebPolyline();
webPolyline.setSpatialReference(WebSpatialReference.getWebSpatialReference(4326));
webPolyline.addPath(webPath);
return generateSymbolPreview(lineSymbol, webPolyline, width, height);
}
protected byte[] generateWebSimpleArcSymbol(HttpServletRequest request, int width, int height) {
WebSimpleLineSymbol lineSymbol = new WebSimpleLineSymbol();
lineSymbol.setLineType(Val.chkStr(request.getParameter("lineType"), WebSimpleLineSymbol.SOLID));
lineSymbol.setWidth(Val.chkInt(request.getParameter("lineWidth"), 1));
lineSymbol.setTransparency(Val.chkDbl(request.getParameter("lineTransparency"), 1.0));
lineSymbol.setColor(Val.chkStr(request.getParameter("lineColor"), "0,0,0"));
lineSymbol.setCapType(Val.chkStr(request.getParameter("lineCapType"), WebSimpleLineSymbol.BUTT));
lineSymbol.setJoinType(Val.chkStr(request.getParameter("lineJoinType"), WebSimpleLineSymbol.ROUND));
lineSymbol.setAntialiasing(Val.chkBool(request.getParameter("lineAntialiasing"), true));
double startAngle = Val.chkDbl(request.getParameter("arcStartAngle"), 0);
double endAngle = Val.chkDbl(request.getParameter("arcEndAngle"), 360);
if (startAngle == endAngle) {
startAngle = 0;
endAngle = 360;
}
WebCircle webCirle = new WebCircle();
WebSpatialReference spatRef = WebSpatialReference.getWebSpatialReference(4326);
webCirle.setSpatialReference(spatRef);
double cx = width/2;
double cy = height/2;
webCirle.setCenter(new WebPoint(cx,cy));
webCirle.setRadius(Math.min(cx, cy) - 5);
try {
WebArc webArc = GeometryConverter.toWebArc(webCirle, startAngle, endAngle);
webArc.setSpatialReference(spatRef);
webArc.flip();
return generateSymbolPreview(lineSymbol, webArc, width, height);
} catch (Exception ex) { _logger.error("Could not generate Arc preview", ex); }
return null;
}
protected byte[] generateWebSimplePolygonSymbol(HttpServletRequest request, int width, int height) {
WebSimplePolygonSymbol polygonSymbol = new WebSimplePolygonSymbol();
polygonSymbol.setFillType(Val.chkStr(request.getParameter("polygonFillType"), WebSimplePolygonSymbol.SOLID));
polygonSymbol.setFillColor(Val.chkStr(request.getParameter("polygonFillColor"), "0,0,0"));
polygonSymbol.setFillInterval(Val.chkInt(request.getParameter("polygonFillInterval"), 6));
polygonSymbol.setFillTransparency(Val.chkDbl(request.getParameter("polygonFillTransparency"), 1.0));
polygonSymbol.setLineType(Val.chkStr(request.getParameter("polygonBoundaryType"), WebSimplePolygonSymbol.SOLID));
polygonSymbol.setWidth(Val.chkInt(request.getParameter("polygonBoundaryWidth"), 1));
polygonSymbol.setColor(Val.chkStr(request.getParameter("polygonBoundaryColor"), "0,0,0"));
polygonSymbol.setTransparency(Val.chkDbl(request.getParameter("polygonBoundaryTransparency"), 1.0));
polygonSymbol.setCapType(Val.chkStr(request.getParameter("polygonBoundaryCapType"), WebSimplePolygonSymbol.BUTT));
polygonSymbol.setJoinType(Val.chkStr(request.getParameter("polygonBoundaryJoinType"), WebSimplePolygonSymbol.ROUND));
//Java ADF throws error when attempting to set the bounder line type to anything but solid when the
//border width is set to zero
if (polygonSymbol.getWidth() <= 0) {
polygonSymbol.setLineType(WebSimplePolygonSymbol.SOLID);
}
WebRing webRing = new WebRing();
double d = polygonSymbol.getWidth() + 5;
webRing.addPoint(new WebPoint(d, d));
webRing.addPoint(new WebPoint(width - d, d));
webRing.addPoint(new WebPoint(width - d, height - d));
webRing.addPoint(new WebPoint(d, height - d));
webRing.addPoint(new WebPoint(d, d));
WebPolygon webPolygon = new WebPolygon();
webPolygon.setSpatialReference(WebSpatialReference.getWebSpatialReference(4326));
webPolygon.addRing(webRing);
return generateSymbolPreview(polygonSymbol, webPolygon, width, height);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
_logger.debug("Symbol preview image requested");
byte[] image = null;
String symbolType = Val.chkStr(request.getParameter("symbolType"), "");
int imageWidth = Val.chkInt(request.getParameter("imageWidth"), 100);
int imageHeight = Val.chkInt(request.getParameter("imageHeight"), 100);
if (symbolType.equalsIgnoreCase("WebSimpleMarkerSymbol")) {
image = generateWebSimpleMarkerSymbol(request, imageWidth, imageHeight);
}
else if(symbolType.equalsIgnoreCase("WebSimpleLineSymbol")) {
image = generateWebSimpleLineSymbol(request, imageWidth, imageHeight);
}
else if(symbolType.equalsIgnoreCase("WebSimpleArcSymbol")) {
image = generateWebSimpleArcSymbol(request, imageWidth, imageHeight);
}
else if(symbolType.equalsIgnoreCase("WebSimplePolygonSymbol")) {
image = generateWebSimplePolygonSymbol(request, imageWidth, imageHeight);
}
ServletOutputStream out = response.getOutputStream();
if(image != null) {
response.setContentType("image/gif");
out.write(image);
out.flush();
}
out.close();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -