📄 levelset.java
字号:
} public final Level getFirstLevel() { return this.getLevel(0); } public final Level getLastLevel() { return this.getLevel(this.getNumLevels() - 1); } public final Level getNextToLastLevel() { return this.getLevel(this.getNumLevels() > 1 ? this.getNumLevels() - 2 : 0); } public final Level getLastLevel(Sector sector) { if (sector == null) { String msg = Logging.getMessage("nullValue.SectorIsNull"); Logging.logger().severe(msg); throw new IllegalArgumentException(msg); } if (!this.getSector().intersects(sector)) return null; Level level = this.getLevel(this.getNumLevels() - 1); if (this.sectorLevelLimits != null) for (SectorResolution sr : this.sectorLevelLimits) { if (sr.sector.intersects(sector) && sr.levelNumber <= level.getLevelNumber()) { level = this.getLevel(sr.levelNumber); break; } } return level; } public final Level getLastLevel(Angle latitude, Angle longitude) { Level level = this.getLevel(this.getNumLevels() - 1); if (this.sectorLevelLimits != null) for (SectorResolution sr : this.sectorLevelLimits) { if (sr.sector.contains(latitude, longitude) && sr.levelNumber <= level.getLevelNumber()) { level = this.getLevel(sr.levelNumber); break; } } return level; } public final boolean isFinalLevel(int levelNum) { return levelNum == this.getNumLevels() - 1; } public final boolean isLevelEmpty(int levelNumber) { return this.levels.get(levelNumber).isEmpty(); } private int numColumnsInLevel(Level level) { int levelDelta = level.getLevelNumber() - this.getFirstLevel().getLevelNumber(); double twoToTheN = Math.pow(2, levelDelta); return (int) (twoToTheN * this.numLevelZeroColumns); } private long getTileNumber(Tile tile) { return tile.getRow() * this.numColumnsInLevel(tile.getLevel()) + tile.getColumn(); } private long getTileNumber(TileKey tileKey) { return tileKey.getRow() * this.numColumnsInLevel(this.getLevel(tileKey.getLevelNumber())) + tileKey.getColumn(); } /** * Instructs the level set that a tile is likely to be absent. * * @param tile The tile to mark as having an absent resource. * * @throws IllegalArgumentException if <code>tile</code> is null */ public final void markResourceAbsent(Tile tile) { if (tile == null) { String msg = Logging.getMessage("nullValue.TileIsNull"); Logging.logger().severe(msg); throw new IllegalArgumentException(msg); } tile.getLevel().markResourceAbsent(this.getTileNumber(tile)); } /** * Indicates whether a tile has been marked as absent. * * @param tileKey The key of the tile in question. * * @return <code>true</code> if the tile is marked absent, otherwise <code>false</code>. * * @throws IllegalArgumentException if <code>tile</code> is null */ public final boolean isResourceAbsent(TileKey tileKey) { if (tileKey == null) { String msg = Logging.getMessage("nullValue.TileKeyIsNull"); Logging.logger().severe(msg); throw new IllegalArgumentException(msg); } Level level = this.getLevel(tileKey.getLevelNumber()); return level.isEmpty() || level.isResourceAbsent(this.getTileNumber(tileKey)); } /** * Indicates whether a tile has been marked as absent. * * @param tile The tile in question. * * @return <code>true</code> if the tile is marked absent, otherwise <code>false</code>. * * @throws IllegalArgumentException if <code>tile</code> is null */ public final boolean isResourceAbsent(Tile tile) { if (tile == null) { String msg = Logging.getMessage("nullValue.TileIsNull"); Logging.logger().severe(msg); throw new IllegalArgumentException(msg); } return tile.getLevel().isEmpty() || tile.getLevel().isResourceAbsent(this.getTileNumber(tile)); } /** * Removes the absent-tile mark associated with a tile, if one is associatied. * * @param tile The tile to unmark. * * @throws IllegalArgumentException if <code>tile</code> is null */ public final void unmarkResourceAbsent(Tile tile) { if (tile == null) { String msg = Logging.getMessage("nullValue.TileIsNull"); Logging.logger().severe(msg); throw new IllegalArgumentException(msg); } tile.getLevel().unmarkResourceAbsent(this.getTileNumber(tile)); } // Create the tile corresponding to a specified key. public Sector computeSectorForKey(TileKey key) { if (key == null) { String msg = Logging.getMessage("nullValue.KeyIsNull"); Logging.logger().severe(msg); throw new IllegalArgumentException(msg); } Level level = this.getLevel(key.getLevelNumber()); // Compute the tile's SW lat/lon based on its row/col in the level's data set. Angle dLat = level.getTileDelta().getLatitude(); Angle dLon = level.getTileDelta().getLongitude(); Angle latOrigin = this.tileOrigin.getLatitude(); Angle lonOrigin = this.tileOrigin.getLongitude(); Angle minLatitude = Tile.computeRowLatitude(key.getRow(), dLat, latOrigin); Angle minLongitude = Tile.computeColumnLongitude(key.getColumn(), dLon, lonOrigin); return new Sector(minLatitude, minLatitude.add(dLat), minLongitude, minLongitude.add(dLon)); } // Create the tile corresponding to a specified key. public Tile createTile(TileKey key) { if (key == null) { String msg = Logging.getMessage("nullValue.KeyIsNull"); Logging.logger().severe(msg); throw new IllegalArgumentException(msg); } Level level = this.getLevel(key.getLevelNumber()); // Compute the tile's SW lat/lon based on its row/col in the level's data set. Angle dLat = level.getTileDelta().getLatitude(); Angle dLon = level.getTileDelta().getLongitude(); Angle latOrigin = this.tileOrigin.getLatitude(); Angle lonOrigin = this.tileOrigin.getLongitude(); Angle minLatitude = Tile.computeRowLatitude(key.getRow(), dLat, latOrigin); Angle minLongitude = Tile.computeColumnLongitude(key.getColumn(), dLon, lonOrigin); Sector tileSector = new Sector(minLatitude, minLatitude.add(dLat), minLongitude, minLongitude.add(dLon)); return new Tile(tileSector, level, key.getRow(), key.getColumn()); } public void setExpiryTime(long expiryTime) { for (Level level : this.levels) { level.setExpiryTime(expiryTime); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -