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

📄 openlayersmapproducer.java

📁 电子地图服务器,搭建自己的地图服务
💻 JAVA
字号:
/* Copyright (c) 2001 - 2007 TOPP - www.openplans.org. All rights reserved.
 * This code is licensed under the GPL 2.0 license, availible at the root
 * application directory.
 */
package org.vfny.geoserver.wms.responses.map.openlayers;

import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.servlet.http.HttpServletRequest;

import org.geoserver.ows.util.RequestUtils;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.opengis.referencing.crs.ProjectedCRS;
import org.vfny.geoserver.ServiceException;
import org.vfny.geoserver.global.WMS;
import org.vfny.geoserver.wms.GetMapProducer;
import org.vfny.geoserver.wms.WmsException;
import org.vfny.geoserver.wms.requests.GetMapRequest;
import org.vfny.geoserver.wms.responses.AbstractGetMapProducer;

import freemarker.ext.beans.BeansWrapper;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

public class OpenLayersMapProducer extends AbstractGetMapProducer implements
		GetMapProducer {
	/** A logger for this class. */
	private static final Logger LOGGER = org.geotools.util.logging.Logging.getLogger("org.vfny.geoserver.responses.wms.map.openlayers");

	/**
	 * Set of parameters that we can ignore, since they are not part of the
	 * OpenLayers WMS request
	 */
	private static final Set ignoredParameters;

	static {
		ignoredParameters = new HashSet();
		ignoredParameters.add("REQUEST");
		ignoredParameters.add("TILED");
		ignoredParameters.add("BBOX");
		ignoredParameters.add("SERVICE");
		ignoredParameters.add("VERSION");
		ignoredParameters.add("FORMAT");
	}

	/**
	 * static freemaker configuration
	 */
	static Configuration cfg;

	static {
		cfg = new Configuration();
		cfg.setClassForTemplateLoading(OpenLayersMapProducer.class, "");
		BeansWrapper bw = new BeansWrapper();
		bw.setExposureLevel(BeansWrapper.EXPOSE_PROPERTIES_ONLY);
		cfg.setObjectWrapper(bw);
	}

	/**
	 * wms configuration
	 */
	WMS wms;

	/**
	 * The current template
	 */
	Template template;


	public OpenLayersMapProducer(WMS wms) {
		this.wms = wms;
		mime = "text/html";
	}



	public void writeTo(OutputStream out) throws ServiceException, IOException {
		try {
			// create the template
			Template template = cfg.getTemplate("OpenLayersMapTemplate.ftl");
			HashMap map = new HashMap();
			map.put("context", mapContext);
			map.put("request", mapContext.getRequest());
			map.put("maxResolution", new Double(getMaxResolution(mapContext
					.getAreaOfInterest())));
			String proxifiedBaseUrl = RequestUtils.proxifiedBaseURL(
			        mapContext.getRequest().getBaseUrl(),
			        mapContext.getRequest().getServiceRef().getGeoServer().getProxyBaseUrl());
			map.put("baseUrl", canonicUrl(proxifiedBaseUrl));
			map.put("parameters", getLayerParameter(mapContext.getRequest()
					.getHttpServletRequest()));
			map.put("units", getOLUnits(mapContext.getRequest()));

			if (mapContext.getLayerCount() == 1) {
				map.put("layerName", mapContext.getLayer(0).getTitle());
			} else {
				map.put("layerName", "Geoserver layers");
			}

			template.setOutputEncoding("UTF-8");
			template.process(map, new OutputStreamWriter(out, Charset.forName("UTF-8")));
		} catch (TemplateException e) {
			throw new WmsException(e);
		}

		mapContext = null;
		template = null;
	}

	/**
	 * OL does support only a limited number of unit types, we have to try and
	 * return one of those, otherwise the scale won't be shown. From the OL
	 * guide: possible values are 慸egrees

⌨️ 快捷键说明

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