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

📄 levelset.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.util;import gov.nasa.worldwind.WWObjectImpl;import gov.nasa.worldwind.avlist.*;import gov.nasa.worldwind.geom.*;import java.net.*;import java.util.*;/** * @author tag * @version $Id: LevelSet.java 10491 2009-04-25 04:02:49Z tgaskins $ */public class LevelSet extends WWObjectImpl{    public static final class SectorResolution    {        private final int levelNumber;        private final Sector sector;        public SectorResolution(Sector sector, int levelNumber)        {            this.levelNumber = levelNumber;            this.sector = sector;        }    }    private final Sector sector;    private final LatLon levelZeroTileDelta;    private final LatLon tileOrigin;    private final int numLevelZeroColumns;    private final java.util.ArrayList<Level> levels = new java.util.ArrayList<Level>();    private final SectorResolution[] sectorLevelLimits;    public LevelSet(AVList params)    {        StringBuffer sb = new StringBuffer();        Object o = params.getValue(AVKey.LEVEL_ZERO_TILE_DELTA);        if (o == null || !(o instanceof LatLon))            sb.append(Logging.getMessage("term.tileDelta")).append(" ");        o = params.getValue(AVKey.SECTOR);        if (o == null || !(o instanceof Sector))            sb.append(Logging.getMessage("term.sector")).append(" ");        int numLevels = 0;        o = params.getValue(AVKey.NUM_LEVELS);        if (o == null || !(o instanceof Integer) || (numLevels = (Integer) o) < 1)            sb.append(Logging.getMessage("term.numLevels")).append(" ");        int numEmptyLevels = 0;        o = params.getValue(AVKey.NUM_EMPTY_LEVELS);        if (o == null || !(o instanceof Integer) || (numEmptyLevels = (Integer) o) < 0)            sb.append(Logging.getMessage("term.numEMptyLevels")).append(" ");        String[] inactiveLevels = null;        o = params.getValue(AVKey.INACTIVE_LEVELS);        if (o != null && !(o instanceof String))            sb.append(Logging.getMessage("term.inactiveLevels")).append(" ");        else if (o != null)            inactiveLevels = ((String) o).split(",");        SectorResolution[] sectorLimits = null;        o = params.getValue(AVKey.SECTOR_RESOLUTION_LIMITS);        if (o != null && !(o instanceof SectorResolution[]))        {            sb.append(Logging.getMessage("term.sectorResolutionLimits")).append(" ");        }        else if (o != null)        {            sectorLimits = (SectorResolution[]) o;            for (SectorResolution sr : sectorLimits)            {                if (sr.levelNumber > numLevels - 1)                {                    String message =                        Logging.getMessage("LevelSet.sectorResolutionLimitsTooHigh", sr.levelNumber, numLevels - 1);                    Logging.logger().warning(message);                    break;                }            }        }        this.sectorLevelLimits = sectorLimits;        if (sb.length() > 0)        {            String message = Logging.getMessage("layers.LevelSet.InvalidLevelDescriptorFields", sb.toString());            Logging.logger().severe(message);            throw new IllegalArgumentException(message);        }        this.sector = (Sector) params.getValue(AVKey.SECTOR);        this.levelZeroTileDelta = (LatLon) params.getValue(AVKey.LEVEL_ZERO_TILE_DELTA);        o = params.getValue(AVKey.TILE_ORIGIN);        if (o != null && o instanceof LatLon)            this.tileOrigin = (LatLon) o;        else            this.tileOrigin = new LatLon(Angle.NEG90, Angle.NEG180);        params = params.copy(); // copy so as not to modify the user's params        TileUrlBuilder tub = (TileUrlBuilder) params.getValue(AVKey.TILE_URL_BUILDER);        if (tub == null)        {            params.setValue(AVKey.TILE_URL_BUILDER, new TileUrlBuilder()            {                public URL getURL(Tile tile, String altImageFormat) throws MalformedURLException                {                    String service = tile.getLevel().getService();                    if (service == null || service.length() < 1)                        return null;                    StringBuffer sb = new StringBuffer(tile.getLevel().getService());                    if (sb.lastIndexOf("?") != sb.length() - 1)                        sb.append("?");                    sb.append("T=");                    sb.append(tile.getLevel().getDataset());                    sb.append("&L=");                    sb.append(tile.getLevel().getLevelName());                    sb.append("&X=");                    sb.append(tile.getColumn());                    sb.append("&Y=");                    sb.append(tile.getRow());                    // Convention for NASA WWN tiles is to request them with common dataset name but without dds.                    return new URL(altImageFormat == null ? sb.toString() : sb.toString().replace("dds", ""));                }            });        }        if (this.sectorLevelLimits != null)        {            Arrays.sort(this.sectorLevelLimits, new Comparator<SectorResolution>()            {                public int compare(SectorResolution sra, SectorResolution srb)                {                    // sort order is deliberately backwards in order to list higher-resolution sectors first                    return sra.levelNumber < srb.levelNumber ? 1 : sra.levelNumber == srb.levelNumber ? 0 : -1;                }            });        }        // Compute the number of level zero columns. This value is guaranteed to be a nonzero number, since there is        // generally at least one level zero tile.        int firstLevelZeroCol = Tile.computeColumn(this.levelZeroTileDelta.getLongitude(),            this.sector.getMinLongitude(), this.tileOrigin.getLongitude());        int lastLevelZeroCol = Tile.computeColumn(this.levelZeroTileDelta.getLongitude(), this.sector.getMaxLongitude(),            this.tileOrigin.getLongitude());        this.numLevelZeroColumns = Math.max(1, lastLevelZeroCol - firstLevelZeroCol + 1);        for (int i = 0; i < numLevels; i++)        {            params.setValue(AVKey.LEVEL_NAME, i < numEmptyLevels ? "" : Integer.toString(i - numEmptyLevels));            params.setValue(AVKey.LEVEL_NUMBER, i);            Angle latDelta = this.levelZeroTileDelta.getLatitude().divide(Math.pow(2, i));            Angle lonDelta = this.levelZeroTileDelta.getLongitude().divide(Math.pow(2, i));            params.setValue(AVKey.TILE_DELTA, new LatLon(latDelta, lonDelta));            this.levels.add(new Level(params));        }        if (inactiveLevels != null)        {            for (String s : inactiveLevels)            {                int i = Integer.parseInt(s);                this.getLevel(i).setActive(false);            }        }    }    public LevelSet(LevelSet source)    {        if (source == null)        {            String msg = Logging.getMessage("nullValue.LevelSetIsNull");            Logging.logger().severe(msg);            throw new IllegalArgumentException(msg);        }        this.sector = source.sector;        this.levelZeroTileDelta = source.levelZeroTileDelta;        this.tileOrigin = source.tileOrigin;        this.numLevelZeroColumns = source.numLevelZeroColumns;        this.sectorLevelLimits = source.sectorLevelLimits;        for (Level level : source.levels)        {            this.levels.add(level); // Levels are final, so it's safe to copy references.        }    }    public final Sector getSector()    {        return this.sector;    }    public final LatLon getLevelZeroTileDelta()    {        return this.levelZeroTileDelta;    }    public final LatLon getTileOrigin()    {        return this.tileOrigin;    }    public final ArrayList<Level> getLevels()    {        return this.levels;    }    public final Level getLevel(int levelNumber)    {        return (levelNumber >= 0 && levelNumber < this.levels.size()) ? this.levels.get(levelNumber) : null;    }    public final int getNumLevels()    {        return this.levels.size();

⌨️ 快捷键说明

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