⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 selectionsymbologypreviewservlet.java

📁 esri的ArcGIS Server超级学习模板程序(for java)
💻 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 + -