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

📄 wmstiledimagelayer.java

📁 world wind java sdk 源码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*Copyright (C) 2001, 2006 United States Governmentas represented by the Administrator of theNational Aeronautics and Space Administration.All Rights Reserved.*/package gov.nasa.worldwind.wms;import gov.nasa.worldwind.avlist.*;import gov.nasa.worldwind.geom.*;import gov.nasa.worldwind.layers.*;import gov.nasa.worldwind.util.*;import org.w3c.dom.*;import java.net.*;import java.util.*;/** * @author tag * @version $Id: WMSTiledImageLayer.java 10310 2009-04-17 22:17:34Z dcollins $ */public class WMSTiledImageLayer extends BasicTiledImageLayer{    private AVList creationParams;    public static AVList xmlStateToParams(String stateInXml)    {        if (stateInXml == null)        {            String message = Logging.getMessage("nullValue.StringIsNull");            Logging.logger().severe(message);            throw new IllegalArgumentException(message);        }        RestorableSupport rs;        try        {            rs = RestorableSupport.parse(stateInXml);        }        catch (Exception e)        {            // Parsing the document specified by stateInXml failed.            String message = Logging.getMessage("generic.ExceptionAttemptingToParseStateXml", stateInXml);            Logging.logger().severe(message);            throw new IllegalArgumentException(message, e);        }        AVList params = new AVListImpl();        String s = rs.getStateValueAsString(AVKey.IMAGE_FORMAT);        if (s != null)            params.setValue(AVKey.IMAGE_FORMAT, s);        s = rs.getStateValueAsString(AVKey.DATA_CACHE_NAME);        if (s != null)            params.setValue(AVKey.DATA_CACHE_NAME, s);        s = rs.getStateValueAsString(AVKey.SERVICE);        if (s != null)            params.setValue(AVKey.SERVICE, s);        s = rs.getStateValueAsString(AVKey.TITLE);        if (s != null)            params.setValue(AVKey.TITLE, s);        s = rs.getStateValueAsString(AVKey.DATASET_NAME);        if (s != null)            params.setValue(AVKey.DATASET_NAME, s);        s = rs.getStateValueAsString(AVKey.FORMAT_SUFFIX);        if (s != null)            params.setValue(AVKey.FORMAT_SUFFIX, s);        s = rs.getStateValueAsString(AVKey.LAYER_NAMES);        if (s != null)            params.setValue(AVKey.LAYER_NAMES, s);        s = rs.getStateValueAsString(AVKey.STYLE_NAMES);        if (s != null)            params.setValue(AVKey.STYLE_NAMES, s);        Integer i = rs.getStateValueAsInteger(AVKey.NUM_EMPTY_LEVELS);        if (i != null)            params.setValue(AVKey.NUM_EMPTY_LEVELS, i);        i = rs.getStateValueAsInteger(AVKey.NUM_LEVELS);        if (i != null)            params.setValue(AVKey.NUM_LEVELS, i);        i = rs.getStateValueAsInteger(AVKey.TILE_WIDTH);        if (i != null)            params.setValue(AVKey.TILE_WIDTH, i);        i = rs.getStateValueAsInteger(AVKey.TILE_HEIGHT);        if (i != null)            params.setValue(AVKey.TILE_HEIGHT, i);        Long lo = rs.getStateValueAsLong(AVKey.EXPIRY_TIME);        if (lo != null)            params.setValue(AVKey.EXPIRY_TIME, lo);        Double lat = rs.getStateValueAsDouble(AVKey.LEVEL_ZERO_TILE_DELTA + ".Latitude");        Double lon = rs.getStateValueAsDouble(AVKey.LEVEL_ZERO_TILE_DELTA + ".Longitude");        if (lat != null && lon != null)            params.setValue(AVKey.LEVEL_ZERO_TILE_DELTA, LatLon.fromDegrees(lat, lon));        Double minLat = rs.getStateValueAsDouble(AVKey.SECTOR + ".MinLatitude");        Double minLon = rs.getStateValueAsDouble(AVKey.SECTOR + ".MinLongitude");        Double maxLat = rs.getStateValueAsDouble(AVKey.SECTOR + ".MaxLatitude");        Double maxLon = rs.getStateValueAsDouble(AVKey.SECTOR + ".MaxLongitude");        if (minLat != null && minLon != null && maxLat != null && maxLon != null)            params.setValue(AVKey.SECTOR, Sector.fromDegrees(minLat, maxLat, minLon, maxLon));        params.setValue(AVKey.TILE_URL_BUILDER, new URLBuilder(rs.getStateValueAsString("wms.Version"), params));        return params;    }    public static WMSTiledImageLayer fromRestorableState(String stateInXml)    {        return new WMSTiledImageLayer(stateInXml);    }    public WMSTiledImageLayer(String stateInXml)    {        this(xmlStateToParams(stateInXml));        RestorableSupport rs;        try        {            rs = RestorableSupport.parse(stateInXml);        }        catch (Exception e)        {            // Parsing the document specified by stateInXml failed.            String message = Logging.getMessage("generic.ExceptionAttemptingToParseStateXml", stateInXml);            Logging.logger().severe(message);            throw new IllegalArgumentException(message, e);        }        String s = rs.getStateValueAsString("Layer.Name");        if (s != null)            this.setName(s);        Boolean b = rs.getStateValueAsBoolean("Layer.Enabled");        if (b != null)            this.setEnabled(b);        Double d = rs.getStateValueAsDouble("Layer.Opacity");        if (d != null)            this.setOpacity(d);        d = rs.getStateValueAsDouble("Layer.MinActiveAltitude");        if (d != null)            this.setMinActiveAltitude(d);        d = rs.getStateValueAsDouble("Layer.MaxActiveAltitude");        if (d != null)            this.setMaxActiveAltitude(d);        b = rs.getStateValueAsBoolean("Layer.NetworkRetrievalEnabled");        if (b != null)            this.setNetworkRetrievalEnabled(b);        b = rs.getStateValueAsBoolean("TiledImageLayer.UseMipMaps");        if (b != null)            this.setUseMipMaps(b);                b = rs.getStateValueAsBoolean("TiledImageLayer.UseTransparentTextures");        if (b != null)            this.setUseTransparentTextures(b);                RestorableSupport.StateObject so = rs.getStateObject("avlist");        if (so != null)        {            RestorableSupport.StateObject[] avpairs = rs.getAllStateObjects(so, "");            if (avpairs != null)            {                for (RestorableSupport.StateObject avp : avpairs)                {                    if (avp != null)                        this.setValue(avp.getName(), avp.getValue());                }            }        }    }    public WMSTiledImageLayer(AVList params)    {        super(params);        this.creationParams = params.copy();    }    public WMSTiledImageLayer(Capabilities caps, AVList params)    {        super(initParams(caps, params));        this.setUseTransparentTextures(true);        this.setName(            makeTitle(caps, params.getStringValue(AVKey.LAYER_NAMES), params.getStringValue(AVKey.STYLE_NAMES)));        this.creationParams = params.copy();    }    private static AVList initParams(Capabilities caps, AVList params)    {        if (caps == null)        {            String message = Logging.getMessage("nullValue.WMSCapabilities");            Logging.logger().severe(message);            throw new IllegalArgumentException(message);        }        if (params == null)        {            String message = Logging.getMessage("nullValue.LayerConfigParams");            Logging.logger().severe(message);            throw new IllegalArgumentException(message);        }        String layerNames = params.getStringValue(AVKey.LAYER_NAMES);        if (layerNames == null || layerNames.length() == 0)        {            String message = Logging.getMessage("nullValue.WMSLayerNames");            Logging.logger().severe(message);            throw new IllegalArgumentException(message);        }        String[] names = layerNames.split(",");        if (names == null || names.length == 0)        {            String message = Logging.getMessage("nullValue.WMSLayerNames");            Logging.logger().severe(message);            throw new IllegalArgumentException(message);        }        for (String name : names)        {            if (caps.getLayerByName(name) == null)            {                String message = Logging.getMessage("WMS.LayerNameMissing", name);                Logging.logger().severe(message);                throw new IllegalArgumentException(message);            }        }        Long lastUpdate = caps.getLayerLatestLastUpdateTime(caps, names);        if (lastUpdate != null)            params.setValue(AVKey.EXPIRY_TIME, lastUpdate);        params.setValue(AVKey.DATASET_NAME, layerNames);        String mapRequestURIString = caps.getGetMapRequestGetURL();        mapRequestURIString = WWXML.fixGetMapString(mapRequestURIString);        if (params.getValue(AVKey.SERVICE) == null)            params.setValue(AVKey.SERVICE, mapRequestURIString);        mapRequestURIString = params.getStringValue(AVKey.SERVICE);        if (mapRequestURIString == null || mapRequestURIString.length() == 0)        {            Logging.logger().severe("WMS.RequestMapURLMissing");            throw new IllegalArgumentException(Logging.getMessage("WMS.RequestMapURLMissing"));        }        String styleNames = params.getStringValue(AVKey.STYLE_NAMES);        if (params.getValue(AVKey.DATA_CACHE_NAME) == null)        {            try            {                URI mapRequestURI = new URI(mapRequestURIString);                String cacheName = WWIO.formPath(mapRequestURI.getAuthority(), mapRequestURI.getPath(), layerNames,                    styleNames);                params.setValue(AVKey.DATA_CACHE_NAME, cacheName);            }            catch (URISyntaxException e)            {                String message = Logging.getMessage("WMS.RequestMapURLBad", mapRequestURIString);                Logging.logger().severe(message);                throw new IllegalArgumentException(message);            }        }        // Determine image format to request.        if (params.getStringValue(AVKey.IMAGE_FORMAT) == null)        {            String imageFormat = chooseImageFormat(caps);            params.setValue(AVKey.IMAGE_FORMAT, imageFormat);        }        if (params.getStringValue(AVKey.IMAGE_FORMAT) == null)        {            Logging.logger().severe("WMS.NoImageFormats");            throw new IllegalArgumentException(Logging.getMessage("WMS.NoImageFormats"));        }        // Determine bounding sector.        Sector sector = (Sector) params.getValue(AVKey.SECTOR);        if (sector == null)        {            for (String name : names)            {                BoundingBox bb = caps.getLayerGeographicBoundingBox(caps.getLayerByName(name));                if (bb == null)                {                    Logging.logger().log(java.util.logging.Level.SEVERE, "WMS.NoGeographicBoundingBoxForLayer", name);                    continue;                }                sector = Sector.union(sector, Sector.fromDegrees(                    clamp(bb.getMiny(), -90d, 90d),                    clamp(bb.getMaxy(), -90d, 90d),                    clamp(bb.getMinx(), -180d, 180d),                    clamp(bb.getMaxx(), -180d, 180d)));            }            if (sector == null)            {                Logging.logger().severe("WMS.NoGeographicBoundingBox");                throw new IllegalArgumentException(Logging.getMessage("WMS.NoGeographicBoundingBox"));            }            params.setValue(AVKey.SECTOR, sector);        }        if (params.getValue(AVKey.LEVEL_ZERO_TILE_DELTA) == null)        {            Angle delta = Angle.fromDegrees(36);            params.setValue(AVKey.LEVEL_ZERO_TILE_DELTA, new LatLon(delta, delta));        }        if (params.getValue(AVKey.TILE_WIDTH) == null)            params.setValue(AVKey.TILE_WIDTH, 512);        if (params.getValue(AVKey.TILE_HEIGHT) == null)            params.setValue(AVKey.TILE_HEIGHT, 512);        if (params.getValue(AVKey.FORMAT_SUFFIX) == null)            params.setValue(AVKey.FORMAT_SUFFIX, ".dds");        if (params.getValue(AVKey.NUM_LEVELS) == null)            params.setValue(AVKey.NUM_LEVELS, 19); // approximately 0.1 meters per pixel        if (params.getValue(AVKey.NUM_EMPTY_LEVELS) == null)            params.setValue(AVKey.NUM_EMPTY_LEVELS, 0);        // TODO: adjust for subsetable, fixedimage, etc.        params.setValue(AVKey.TILE_URL_BUILDER, new URLBuilder(caps.getVersion(), params));        return params;    }    private static double clamp(double v, double min, double max)    {        return v < min ? min : v > max ? max : v;    }    private static String makeTitle(Capabilities caps, String layerNames, String styleNames)    {        String[] lNames = layerNames.split(",");        String[] sNames = styleNames != null ? styleNames.split(",") : null;        StringBuilder sb = new StringBuilder();        for (int i = 0; i < lNames.length; i++)        {            if (sb.length() > 0)                sb.append(", ");            String layerName = lNames[i];            Element layer = caps.getLayerByName(layerName);            String layerTitle = caps.getLayerTitle(layer);            sb.append(layerTitle != null ? layerTitle : layerName);            if (sNames == null || sNames.length <= i)                continue;            String styleName = sNames[i];            Element style = caps.getLayerStyleByName(layer, styleName);            if (style == null)                continue;            sb.append(" : ");            String styleTitle = caps.getStyleTitle(layer, style);            sb.append(styleTitle != null ? styleTitle : styleName);        }        return sb.toString();    }    private static final String[] formatOrderPreference = new String[]        {            "image/dds", "image/png", "image/jpeg"

⌨️ 快捷键说明

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