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

📄 mapmerger.java

📁 联合国农粮署牵头开发的geonetwork源代码最新版
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/** * A class representing a map, as a group of services. It provides methods * to add / remove services, and to set and change the bounding box. * * @author Stefano Giaccio, Emanuele Tajariol * */package org.wfp.vam.intermap.kernel.map;import java.util.*;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.text.DecimalFormat;import org.jdom.Element;import org.wfp.vam.intermap.http.ConcurrentHTTPTransactionHandler;import org.wfp.vam.intermap.http.cache.HttpGetFileCache;import org.wfp.vam.intermap.kernel.GlobalTempFiles;import org.wfp.vam.intermap.kernel.map.images.ImageMerger;import org.wfp.vam.intermap.kernel.map.mapServices.BoundingBox;import org.wfp.vam.intermap.kernel.map.mapServices.MapService;public class MapMerger{	private static HttpGetFileCache cache;	private static float defaultDPI = 96f;	private float dpi = -1f;	private BoundingBox bBox = new BoundingBox();  // Image extent	private Map<Integer, Layer> _layers = new HashMap<Integer, Layer>();	private List<Integer> vRank = new ArrayList<Integer>(); // Service rank	private int nextId = 1;	private int activeServiceId;	private String imageName = null; // The name of the merge image file	private String imagePath = null; // The path of the merge image file	private float degScale; // The map scale	private float distScale; // The map scale	private Map<Integer,String> htErrors = new Hashtable<Integer,String>();	private boolean reaspectWms = true;	public static void setCache(HttpGetFileCache cache) {		MapMerger.cache = cache;	}	public static void setDefaultDPI(float dpi)	{		defaultDPI = dpi;	}	public void setDPI(float dpi)	{		this.dpi =	dpi;	}	public float getDPI()	{		return dpi==-1f ? defaultDPI : dpi;	}	public void reaspectWms(boolean reaspect) { this.reaspectWms = reaspect; };	/** Sets the Map BoundingBox */	public void setBoundingBox(BoundingBox bb) { bBox = bb; }	/** Returns the Map BoudingBox */	public BoundingBox getBoundingBox() { return bBox; }	/** Sets the active layer inside a given servce */	public void setActiveLayer(int service, int layer)		throws Exception	{//		if (! htServices.containsKey(new Integer(service)))		if (! _layers.containsKey(service))			throw new Exception("");		activeServiceId = service;		getService(service).setActiveLayer(layer);	}	/** Returns the active service id */	public int getActiveServiceId() { return activeServiceId; }	/** Returns the active Layer id */	public int getActiveLayerId() {//		System.out.println("this: " +  this);//		System.out.println("getActiveServiceId: " + getActiveServiceId());//		System.out.println("getActiveLayer: " + getService(getActiveServiceId()).getActiveLayer());		return getService(getActiveServiceId()).getActiveLayer();	}	/** Adds a service on the top	 *	 * @return the id given to the service	 * */	public int addService(MapService service) {//		System.out.println("service: " + service); // DEBUG		if ( _layers.isEmpty() ) activeServiceId = nextId;		Integer id = new Integer(nextId++);		Layer layer = new Layer(service);		_layers.put(id, layer);		vRank.add(0, id);		return id.intValue();//		System.out.println("htServices: " + htServices); // DEBUG	}	/** Removes the service with the given id */	public void delService(int id)		throws Exception	{		_layers.remove(id);		vRank.remove(new Integer(id)); // be careful: we're removing the id object (Integer); an int would be used as index		if (activeServiceId == id)			if (vRank.size() > 0)			{				activeServiceId = vRank.get(0).intValue();				getService(activeServiceId).setActiveLayer(1);			}			else			{				activeServiceId = -1;			}	}	/** Moves a service up */	public void moveServiceUp(int id)	{		Integer t = new Integer(id);		int pos = vRank.indexOf(t);		if (pos > 0) {			vRank.remove(t);			vRank.add(pos - 1, t);		}	}	/** Moves a service down */	public void moveServiceDown(int id)	{		Integer t = new Integer(id);		int pos = vRank.indexOf(t);		if (pos < vRank.size() - 1) {			vRank.remove(t);			vRank.add(pos + 1, t);		}	}	public void setServicesOrder(int[] order) {		vRank.clear();		for (int i = 0 ; i < order.length; i++)			vRank.add(new Integer(order[i]));	}	public Element toElementSimple()	{		Element elServices = new Element("services");		// Add each contained service to the elServices, ordered by vRank		for (int idx:  vRank) {			Layer layer = _layers.get(idx);			MapService s = layer.getService();			String legend = null;			try			{				legend = s.getLegendUrl();			}			catch (Exception e) {}			Element eLayer = new Element("layer")									  .setAttribute("id", idx + "")								 	  .setAttribute("title", "" + s.getTitle())								 	  .setAttribute("type", "" + s.getType())								 	  .setAttribute("transparency", "" + layer.getIntTransparency());			if(legend != null)				eLayer.setAttribute("legend", legend);			elServices.addContent(eLayer);		}		return elServices;	}	/** Converts this object to a JDOM Element */	public Element toElement() {		Element elServices = new Element("services");		// Add each contained service to the elServices, ordered by vRank//		for (int i = 0; i < vRank.size(); i++) {//			MapService s = (MapService)htServices.get(vRank.get(i));////			elServices.addContent(s.toElement()//									  .setAttribute("id", vRank.get(i) + ""));//		}		for (int id:  vRank)		{			MapService s = _layers.get(id).getService();			elServices.addContent(s.toElement()									  .setAttribute("id", id + ""));		}		DecimalFormat df = new DecimalFormat("0.0000000000");		elServices.addContent( new Element("activeLayer")										 .setAttribute("service", "" + activeServiceId)								  		 .setAttribute("layer", "" + getActiveLayerId()) )			.addContent(new Element("degScale").setText(df.format(degScale)))			.addContent(new Element("distScale").setText(df.format(distScale) + ""))			.addContent(bBox.toElement())			.addContent(getStructTransparencies())			.addContent(getStructExpanded())			.addContent(getErrors());		return elServices;	}	public Iterable<Layer> getLayers()	{		return new Iterable<Layer>()		{			public Iterator<Layer> iterator()			{				return new Iterator<Layer>()				{					private int i = 0;					private int last = vRank.size();					public boolean hasNext()	{ return i<last; }					public Layer 	next()		{ return _layers.get(vRank.get(i++)); }					public void 	remove()		{ throw new UnsupportedOperationException();}				};			}		};	}	/** Returns an Element containing the transparency value for each service */	public Element getStructTransparencies()	{		Element elTransparency = new Element("transparency");		for(Integer id: _layers.keySet())		{			Layer layer = _layers.get(id);			elTransparency.addContent(				new Element("service")					.setAttribute("id", 				id.toString())				  	.setAttribute("transparency", ""+layer.getIntTransparency())					.setAttribute("name", 			layer.getService().getName() ));		}		return elTransparency;	}	/** Returns the transparency of a given layer */	public int getLayerTransparency(int id)	{		return _layers.get(id).getIntTransparency();	}	public int getLayerTransparencyRanked(int id)	{		return _layers.get(vRank.get(id)).getIntTransparency();	}	/** Sets the transparency value for a given service */	public void setTransparency(int id, float transparency) throws Exception	{		if ( ! _layers.containsKey(id))			throw new Exception("Illegal service id");		_layers.get(id).setTransparency(transparency);	}	/** Expands a service in the layer frame (used for ArcIMS services only) */	public void expandService(int id) throws Exception	{		if ( ! _layers.containsKey(id))			throw new Exception("Illegal service id");		_layers.get(id).setExpanded(true);	}	/** Collapses a service in the layer frame (used for ArcIMS services only) */	public void collapseService(int id) throws Exception	{		if ( ! _layers.containsKey(id))			throw new Exception("Illegal service id");		_layers.get(id).setExpanded(false);	}	/** ??? Expands a service in the layer frame (used for ArcIMS services only) */	public void showService(int id) throws Exception	{		if ( ! _layers.containsKey(id))			throw new Exception("Illegal service id");		_layers.get(id).setVisible(true);	}	/** ??? Collapses a service in the layer frame (used for ArcIMS services only) */	public void hideService(int id) throws Exception	{		if ( ! _layers.containsKey(id))			throw new Exception("Illegal service id");		_layers.get(id).setVisible(false);	}	public boolean toggleVisibility(int id) throws Exception	{		if ( ! _layers.containsKey(id))			throw new Exception("Illegal service id");		boolean newVis = ! _layers.get(id).isVisible();		_layers.get(id).setVisible(newVis);		return newVis;	}	/** Get error messages from the remote servers */	public Element getErrors()	{		Element errors = new Element("errors");		for(Integer id: htErrors.keySet() )		{			errors.addContent(				new Element("layer")					.setAttribute("id", id.toString())					.setAttribute("message", htErrors.get(id)) );		}		return errors;	}	/** Returns number of map services contained */	public int size() { return _layers.size(); }	/** Returns an Enumeration containing all the services */	public Iterable<MapService> getServices()	{		return new Iterable<MapService>()		{			public Iterator<MapService> iterator()			{				return new Iterator<MapService>()				{					private Iterator<Layer> _layerIterator = _layers.values().iterator();					public boolean hasNext()	{ return _layerIterator.hasNext(); }					public MapService next()	{ return _layerIterator.next().getService(); }					public void remove()			{ throw new UnsupportedOperationException();}				};			}		};	}	/** Returns the MapService element with the given id*/	public MapService getService(int id) { return _layers.get(id).getService(); }	public MapService getServiceRanked(int rank) { return _layers.get(vRank.get(rank)).getService(); }//	public MapService getService(int id) { return (MapService)htServices.get(new Integer(id)); }//	public boolean isVisible(int id) { return _layers.get(id).isVisible(); }	public boolean isVisibleRanked(int rank) { return _layers.get(vRank.get(rank)).isVisible(); }	/** Returns an element containing informations about the expanded or collapsed	 *  services	 */	private Element getStructExpanded()	{		Element expanded = new Element("expandedServices");		for(Integer id: _layers.keySet())		{			Layer layer = _layers.get(id);			expanded.addContent(new Element("service")									.setAttribute("id", 			id.toString())									.setAttribute("expanded", 	layer.isExpanded()? "true" : "false"));		}		return expanded;	}	private void buildWmsRequests(int width, int height)	{//		if (reaspectWms) bBox = reaspect(bBox, width, height); // reaspect the bounding box if no ArcIMS service did it//////		MapService prevService = (MapService)htServices.get(vRank.get(0));//		MapService prevService = _layers.get(vRank.get(0)).getService();//		if (vRank.size() == 1)//		{//			try { vImageUrls.add(prevService.getImageUrl(bBox, width, height)); }//			catch (Exception e) { e.printStackTrace(); /* DEBUG */ }//			return;

⌨️ 快捷键说明

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