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

📄 mapservicepreviewservlet.java

📁 esri的ArcGIS Server超级学习模板程序(for java)
💻 JAVA
字号:
package com.esri.solutions.jitk.web.tasks.resources;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.net.URL;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.w3c.dom.Document;

import com.esri.adf.web.data.geometry.WebExtent;
import com.esri.solutions.jitk.datasources.exceptions.ClientNotFoundException;
import com.esri.solutions.jitk.datasources.exceptions.WCSException;
import com.esri.solutions.jitk.datasources.ogc.wcs.IWCSClient;
import com.esri.solutions.jitk.datasources.ogc.wcs.WCSClientFactory;
import com.esri.solutions.jitk.datasources.ogc.wcs.WCSHTTPClientBase;
import com.esri.solutions.jitk.datasources.ogc.wcs.info.WCSBoundingBox;
import com.esri.solutions.jitk.datasources.ogc.wcs.info.WCSCapabilities;
import com.esri.solutions.jitk.datasources.ogc.wcs.info.WCSCoverageInfo;
import com.esri.solutions.jitk.datasources.ogc.wms.InputStreamConverter;
import com.esri.solutions.jitk.datasources.ogc.wms.WMSCapabilities;
import com.esri.solutions.jitk.datasources.ogc.wms.WMSClient;
import com.esri.solutions.jitk.datasources.ogc.wms.XMLAttributeFinder;
import com.esri.solutions.jitk.web.wcs.data.ImageFormatConverter;


@SuppressWarnings("deprecation")
public class MapServicePreviewServlet extends HttpServlet {
	private static final long serialVersionUID = 2191318699906679355L;
	private static Logger _logger = LogManager.getLogger(MapServicePreviewServlet.class.getName());
	private static final String DEFAULT_IMAGE = "com/esri/solutions/jitk/web/tasks/images/pixel.gif";
    private static final int WIDTH = 400;
    private static final int HEIGHT = 200;

    public void init(ServletConfig config) throws ServletException {
        super.init(config);
    }
   
    private String getBbox(WebExtent extent, int dimension) {
		StringBuffer ext = new StringBuffer();
		ext.append(extent.getMinX() + ",");
		ext.append(extent.getMinY() + ",");
		ext.append(extent.getMaxX() + ",");
		ext.append(extent.getMaxY());
		
		if(dimension == 3) {
			ext.append(",0,0");
		}
		
		return ext.toString();
	}
		
	private WebExtent getWebExtent(WCSCapabilities wcsCapabilities, String coverageName, String epsgId){
		WCSBoundingBox bbox = wcsCapabilities.getDefaultBoundingBox(coverageName, epsgId);
		
		if(bbox != null) {
			bbox.reaspect(WIDTH, HEIGHT);
			return new WebExtent(bbox.getMinX(), bbox.getMinY(), bbox.getMaxX(), bbox.getMaxY());
		}
		
		return null; 
	}

	protected WCSCoverageInfo getWCSCoverageInfo(WCSCapabilities wcsCapabilities, String coverage) throws ClientNotFoundException, WCSException {
		
		if(coverage != null && coverage.length() > 0 && wcsCapabilities != null && wcsCapabilities.getCoverageInfos().containsKey(coverage)) {
			IWCSClient wcsClient = WCSClientFactory.getInstance(wcsCapabilities.getVersion());
			List<WCSCoverageInfo> infos = wcsClient.describeCoverage(wcsCapabilities.getDescribeCoverageURL(), new String[] {coverage});
			
			if(infos != null) {
				for(Iterator<WCSCoverageInfo> i = infos.iterator(); i.hasNext();) {
					WCSCoverageInfo info = i.next();
			
					if(info.getId().equalsIgnoreCase(coverage)) {
						return info;
					}
				}
			}
		}
		
		return null;
	}
	
    private byte[] getWcsImage(HttpServletRequest request) {
        
    	String url = request.getParameter("url");
        String coverage = request.getParameter("coverage");
        
    	try {
    		WCSCapabilities wcsCapabilities = new WCSHTTPClientBase().getCapabilities(url);
    		
    		WCSCoverageInfo info = getWCSCoverageInfo(wcsCapabilities, coverage);
            if(info != null) {
            	wcsCapabilities.getCoverageInfos().put(coverage, info);
			} else {
            	throw new NullPointerException("WCS DescribeCoverage request failed for coverage id=" + coverage);
            }
            
            String epsgId = wcsCapabilities.getDefaultProjectionId(coverage);
    		if(epsgId == null) {
    			throw new NullPointerException("Coverage default spatial reference is invalid.");
    		}
    		
    		String format = wcsCapabilities.getDefaultFormat(coverage);
    		if(format == null) {
    			throw new NullPointerException("Coverage format is not supported.");
    		}
    		
    		int dimension = wcsCapabilities.getDefaultDimension(coverage);
    		
    		IWCSClient wcsClient = WCSClientFactory.getInstance(wcsCapabilities.getVersion());
           	InputStream is = ImageFormatConverter.toRGBStream(	wcsClient.getCoverage(wcsCapabilities.getGetCoverageURL(),
																coverage, epsgId, getBbox(getWebExtent(wcsCapabilities, coverage, epsgId), dimension),
																HEIGHT, WIDTH, format), format);

			return new InputStreamConverter().toByteArray(is);
            
        } catch(Exception e) {
        	_logger.warn("Unable to preview wcs map", e);
        }
    	
        return null;
    }

    private byte[] loadImage(URL url) throws Exception {
        InputStream is = url.openStream();
        InputStreamConverter isc = new InputStreamConverter();
        return isc.toByteArray(is);
    }
    
    protected byte[] getWmsImage(HttpServletRequest request) throws Exception {
        WMSClient wmsClient = new WMSClient(request.getParameter("url"));
        WMSCapabilities wmsCap = wmsClient.getCapabilities();                
        
        return wmsClient.getMapOverview(wmsCap, WIDTH, HEIGHT);
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException {
        
    	try {
            String mode = request.getParameter("mode");
            byte[] data = null;

            if (mode.indexOf("AIMS") >= 0) {
                String username = request.getParameter("user");
                String password = request.getParameter("pswd");

                if((username != null) && username.equalsIgnoreCase("null")) {
                    username = null;
                }

                if((password != null) & password.equalsIgnoreCase("null")) {
                    password = null;
                }

                String service = request.getParameter("service");
                String host = request.getParameter("host");
                String port = request.getParameter("port");
                
                AIMSClient imsClient = new AIMSClient(host, new Integer(port).intValue(), username, password);
                byte[] xml = imsClient.getMap(service, WIDTH, HEIGHT);
                
                if (xml != null) {
	                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
	                DocumentBuilder db = dbf.newDocumentBuilder();
	                InputStream is = new ByteArrayInputStream(xml);
	                Document doc = db.parse(is);
	                XMLAttributeFinder xmlAttrFinder = new XMLAttributeFinder();
	                String url = xmlAttrFinder.findAttribute("OUTPUT", "url", doc.getDocumentElement());
	                data = loadImage(new URL(url));
                } else {
                	_logger.warn("ArcIMS request failed, loading default image preview");
                }
            }

            if (mode.indexOf("WMS") >= 0) {               
                data = getWmsImage(request);
            }

            if (mode.indexOf("WCS") >= 0) {
                data = getWcsImage(request);
            }

            if (mode.indexOf("AGSLocal") >= 0) {
                String host = request.getParameter("host");
                String domain = request.getParameter("domain");
                String user = request.getParameter("user");
                String pswd = request.getParameter("pswd");
                String svrObj = request.getParameter("svrObj");
                String encryptedStr = request.getParameter("encrypted");
                boolean encrypted = false;

                if (encryptedStr.trim().equalsIgnoreCase("true")) {
                    encrypted = true;
                }

                AGSLocalClient agsClient = new AGSLocalClient();
                data = agsClient.getAGSMap(host, domain, user, pswd, svrObj, encrypted, WIDTH, HEIGHT);
            }

            if (mode.indexOf("AGSInternet") >= 0) {
                String url = request.getParameter("url");
                AGSWSClient agsClient = new AGSWSClient();
                data = agsClient.getAGSWSMap(url, WIDTH, HEIGHT);        	
            }

            if (data == null){
            	String noPreviewImage = this.getInitParameter("noPreviewAvailableImage");
                if(noPreviewImage == null) {
                	noPreviewImage = DEFAULT_IMAGE;
                }
            	
            	data = new InputStreamConverter().toByteArray(this.getClass().getClassLoader().getResourceAsStream(noPreviewImage));
            }
            
            ServletOutputStream out = response.getOutputStream();
        	out.write(data);
            out.flush();
            out.close();
        
    	} catch (Exception e) {
        	_logger.warn("unable to preview map", e);
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -