?? maputil.java
字號:
/** */package org.wfp.vam.intermap.services.map;import java.net.URLDecoder;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.StringTokenizer;import jeeves.server.UserSession;import jeeves.server.context.ServiceContext;import org.jdom.Element;import org.wfp.vam.intermap.Constants;import org.wfp.vam.intermap.kernel.map.DefaultMapServers;import org.wfp.vam.intermap.kernel.map.MapMerger;import org.wfp.vam.intermap.kernel.map.mapServices.BoundingBox;import org.wfp.vam.intermap.kernel.map.mapServices.MapService;import org.wfp.vam.intermap.kernel.map.mapServices.arcims.ArcIMSService;import org.wfp.vam.intermap.kernel.map.mapServices.wms.WmsGetCapClient;import org.wfp.vam.intermap.kernel.map.mapServices.wms.WmsService;public class MapUtil{ private static int _minh; private static int _minw; private static int _maxh; private static int _maxw; private static String defaultImageSize; private static String url; public static void setImageSizes(int minh, int minw, int maxh, int maxw) { _minh = minh; _minw = minw; _maxh = maxh; _maxw = maxw; } // Returns the MapMerger object for the user session public static MapMerger getMapMerger(ServiceContext context) { MapMerger mm = (MapMerger)context.getUserSession() .getProperty(Constants.SESSION_MAP); if (mm == null) mm = new MapMerger(); return mm; } public static void setAoi(ServiceContext context, float minx, float miny, float maxx, float maxy) throws Exception { BoundingBox bb = new BoundingBox(maxy, miny, maxx, minx); UserSession us = context.getUserSession(); us.setProperty("aoi", bb); } protected static BoundingBox getAoi(ServiceContext context) throws Exception { UserSession us = context.getUserSession(); return (BoundingBox)us.getProperty("aoi"); } protected static void unsetAoi(ServiceContext context) throws Exception { UserSession us = context.getUserSession(); us.setProperty("aoi", new BoundingBox(0, 0, 0, 0)); // there is no way at the moment to set it null or delete it } protected static void setActiveLayer(Element request, MapMerger mm) throws Exception { StringTokenizer t = new StringTokenizer(request.getChildText("activeLayer"), "_"); try { mm.setActiveLayer(Integer.parseInt(t.nextToken()), Integer.parseInt(t.nextToken())); } catch (Exception e) {} // Who cares? } protected static void setVisibleLayers(Element request, MapMerger mm) { for(Element param : (List<Element>)request.getChildren()) { String key = param.getName(); String value = param.getText(); StringTokenizer t = new StringTokenizer(key, "_"); if (t.hasMoreTokens()) { if (t.nextToken().equals("layerVisible")) { String serviceId = t.nextToken(); String layerId = t.nextToken(); MapService ms = mm.getService(Integer.parseInt(serviceId)); if (ms != null) { boolean visible = value.equals("true"); ms.setLayerVisible(layerId, visible); } } } } } protected static void setTransparency(Element request, MapMerger mm) { List layers = request.getChildren(); for (Iterator i = layers.iterator(); i.hasNext(); ) { Element param = (Element)i.next(); String key = param.getName(); String value = param.getText(); StringTokenizer t = new StringTokenizer(key, "_"); if (t.hasMoreTokens()) { if (t.nextToken().equals("t")) { int serviceId = Integer.parseInt(t.nextToken()); try { float tr = Float.parseFloat(value); if (tr >= 0 && tr <= 100) mm.setTransparency(serviceId, Float.parseFloat(value) / 100); } catch (Exception e) { } } } } } /** * @return the id of the service, or -1 if the service has not been added */ public static int addService(int serverType, String serverUrl, String serviceName, String vsp, MapMerger mm) throws Exception { // Do not add the service if it is already there for(MapService service: mm.getServices()) { String url = service.getServerURL(); String name = service.getName(); if (url.equals(serverUrl) && name.equals(serviceName)) return -1; } int ret; switch (serverType) { case ArcIMSService.TYPE : ret = mm.addService(new ArcIMSService(serverUrl, serviceName)); break; case WmsService.TYPE : Element capabilities = WmsGetCapClient.getCapabilities(serverUrl);// Element capabilities = CapabilitiesStore.getCapabilities(serverUrl); NEW VERSION: WORK IN PROGRESS WmsService s = new WmsService(serverUrl, serviceName, capabilities); ret = mm.addService(s); setVendorSpecificParams(s, vsp); break; default: throw new IllegalArgumentException("Unknown serverType " + serverType + " for service " + serviceName + " @ " + serverUrl); } return ret; } private static void setVendorSpecificParams(WmsService service, String params) { if (params == null) return; String stParams = URLDecoder.decode(params); HashMap hmParams = new HashMap(); StringTokenizer t1; for (t1 = new StringTokenizer(stParams, "&"); t1.hasMoreTokens(); ) { String s = t1.nextToken(); int p = s.indexOf("="); if (p != -1) { String name = s.substring(0, p);// System.out.println("name:" + name); String value = s.substring(p + 1, s.length());// System.out.println("value: " + value); hmParams.put(name, value); } }// System.out.println("hmParams: " + hmParams); service.setVendorSpecificParams(hmParams); //TEST } public static void setDefaultContext(MapMerger mm) throws Exception { Element mapContext = DefaultMapServers.getDefaultContext(); // Add each layer in the map context to the map for (Element elServer: (List<Element>)mapContext.getChildren("server")) { String serverType = elServer.getAttributeValue(Constants.MAP_SERVER_TYPE); String serverUrl = elServer.getAttributeValue(Constants.MAP_SERVER_URL); for (Element elLayer: (List<Element>)elServer.getChildren(Constants.MAP_LAYER)) { try { String serviceName = elLayer.getAttributeValue("name"); MapUtil.addService(Integer.parseInt(serverType), serverUrl, serviceName, "", mm); } catch (Exception e) { e.printStackTrace(); } // DEBUG: tell the user } } MapUtil.setDefBoundingBox(mm); } public static void setDefBoundingBox(MapMerger mm) throws Exception { List<BoundingBox> lbb = new ArrayList<BoundingBox>(); for(MapService service: mm.getServices()) lbb.add( service.getDefBoundingBox() ); mm.setBoundingBox(BoundingBox.union(lbb)); } protected static void setBBoxFromUrl(String bbox, MapMerger mm) { StringTokenizer st = new StringTokenizer(bbox, ","); try { float w = Float.parseFloat(st.nextToken()); float s = Float.parseFloat(st.nextToken()); float e = Float.parseFloat(st.nextToken()); float n = Float.parseFloat(st.nextToken()); mm.setBoundingBox(new BoundingBox(n, s, e, w)); } catch (Exception e) { mm.setBoundingBox(new BoundingBox()); } } /** * @deprecated ETj: image dimensions are no longer handled server side */ public static int getImageWidth(ServiceContext srvContext) { String size = (String)srvContext.getUserSession().getProperty(Constants.SESSION_SIZE); int width; if (size.equals("small")) width = _minw; else width = _maxw; return width; } /** * @deprecated ETj: image dimensions are no longer handled server side */ public static int getImageHeight(ServiceContext srvContext) { String size = (String)srvContext.getUserSession().getProperty(Constants.SESSION_SIZE); int height; if (size.equals("small")) height = _minh; else height = _maxh; return height; } // Returns the MapMerger object for the user session static String getTool(ServiceContext srvContext) { String tool = (String)srvContext.getUserSession() .getProperty(Constants.SESSION_TOOL); if (tool == null) tool = Constants.DEFAULT_TOOL; return tool; } public static void setTempUrl(String url) { MapUtil.url = url; } public static String getTempUrl() { return MapUtil.url; } protected static void moveTo(BoundingBox bb, int x, int y, int width, int height) throws Exception { float mapX = bb.getWest() + (bb.getEast() - bb.getWest()) * x / width; float mapY = bb.getNorth() - (bb.getNorth() - bb.getSouth()) * y / height; bb.moveTo(mapX, mapY); } protected static BoundingBox move(BoundingBox bb, int deltaX, int deltaY, int width, int height) throws Exception { float mapX = (bb.getEast() - bb.getWest()) * (float)deltaX / width; float mapY = (bb.getNorth() - bb.getSouth()) * (float)deltaY / height; return bb.move(mapX, mapY); } protected static BoundingBox zoomInBox(BoundingBox bb, int mapimgx, int mapimgy, int mapimgx2, int mapimgy2, int imageWidth, int imageHeigth) throws Exception { // Move and zoom float mapX = bb.getWest() + (bb.getEast() - bb.getWest()) * mapimgx / imageWidth; float mapY = bb.getNorth() - (bb.getNorth() - bb.getSouth()) * mapimgy / imageHeigth; float mapX2 = bb.getWest() + (bb.getEast() - bb.getWest()) * mapimgx2 / imageWidth; float mapY2 = bb.getNorth() - (bb.getNorth() - bb.getSouth()) * mapimgy2 / imageHeigth; return new BoundingBox(mapY2, mapY, mapX2, mapX); } protected static BoundingBox zoomOutBox(BoundingBox bb, int mapimgx, int mapimgy, int mapimgx2, int mapimgy2, int imageWidth, int imageHeight) throws Exception { // Move and zoom float north = bb.getNorth() + (bb.getNorth() - bb.getSouth()) * imageHeight / (mapimgy - mapimgy2); float south = bb.getSouth() - (bb.getNorth() - bb.getSouth()) * imageHeight / (mapimgy - mapimgy2); float east = bb.getEast() + (bb.getEast() - bb.getWest()) * imageWidth / (mapimgx2 - mapimgx); float west = bb.getWest() - (bb.getEast() - bb.getWest()) * imageWidth / (mapimgx2 - mapimgx);// System.out.println("north : " + north + "; south = " + south + "; east = " + east + "; west = " + west); return new BoundingBox(north, south, east, west); } public static BoundingBox setScale(BoundingBox bb, int imageWidth, int imageHeight, long scale, float dpi) throws Exception { float cx = (bb.getEast()+bb.getWest())/2; float cy = (bb.getNorth()+bb.getSouth())/2; // Set the scale double degScale = scale/423307109.727 * 96f/dpi; float dx = (float)(imageWidth * degScale); float dy = (float)(imageHeight * degScale); return new BoundingBox( cy+dy/2, cy-dy/2, cx+dx/2, cx-dx/2); } public static void setDefaultImageSize(String s) { defaultImageSize = s; } public static String getDefaultImageSize() { return defaultImageSize; }}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -