wmstiledimagelayer.java
来自「world wind java sdk 源码」· Java 代码 · 共 772 行 · 第 1/2 页
JAVA
772 行
}; private static String chooseImageFormat(Capabilities caps) { String[] formats = caps.getGetMapFormats(); if (formats == null || formats.length == 0) return null; for (String s : formatOrderPreference) { for (String f : formats) { if (f.equalsIgnoreCase(s)) return f; } } return formats[0]; // none recognized; just use the first in the caps list } private RestorableSupport makeRestorableState(AVList params) { RestorableSupport rs = RestorableSupport.newRestorableSupport(); // Creating a new RestorableSupport failed. RestorableSupport logged the problem, so just return null. if (rs == null) return null; for (Map.Entry<String, Object> p : params.getEntries()) { if (p.getValue() == null) continue; if (p.getValue() instanceof LatLon) { rs.addStateValueAsDouble(p.getKey() + ".Latitude", ((LatLon) p.getValue()).getLatitude().degrees); rs.addStateValueAsDouble(p.getKey() + ".Longitude", ((LatLon) p.getValue()).getLongitude().degrees); } else if (p.getValue() instanceof Sector) { rs.addStateValueAsDouble(p.getKey() + ".MinLatitude", ((Sector) p.getValue()).getMinLatitude().degrees); rs.addStateValueAsDouble(p.getKey() + ".MaxLatitude", ((Sector) p.getValue()).getMaxLatitude().degrees); rs.addStateValueAsDouble(p.getKey() + ".MinLongitude", ((Sector) p.getValue()).getMinLongitude().degrees); rs.addStateValueAsDouble(p.getKey() + ".MaxLongitude", ((Sector) p.getValue()).getMaxLongitude().degrees); } else if (p.getValue() instanceof URLBuilder) { rs.addStateValueAsString("wms.Version", ((URLBuilder) p.getValue()).wmsVersion); rs.addStateValueAsString("wms.Crs", ((URLBuilder) p.getValue()).crs); } else { rs.addStateValueAsString(p.getKey(), p.getValue().toString()); } } rs.addStateValueAsBoolean("Layer.Enabled", this.isEnabled()); rs.addStateValueAsString("Layer.Name", this.getName()); rs.addStateValueAsDouble("Layer.Opacity", this.getOpacity()); rs.addStateValueAsDouble("Layer.MinActiveAltitude", this.getMinActiveAltitude()); rs.addStateValueAsDouble("Layer.MaxActiveAltitude", this.getMaxActiveAltitude()); rs.addStateValueAsBoolean("Layer.NetworkRetrievalEnabled", this.isNetworkRetrievalEnabled()); rs.addStateValueAsBoolean("TiledImageLayer.UseMipMaps", this.isUseMipMaps()); rs.addStateValueAsBoolean("TiledImageLayer.UseTransparentTextures", this.isUseTransparentTextures()); RestorableSupport.StateObject so = rs.addStateObject("avlist"); for (Map.Entry<String, Object> p : this.getEntries()) { if (p.getValue() == null) continue; if (p.getKey().equals(AVKey.CONSTRUCTION_PARAMETERS)) continue; rs.addStateValueAsString(so, p.getKey(), p.getValue().toString()); } return rs; } public String getRestorableState() { return this.makeRestorableState(this.creationParams).getStateAsXml(); } public void restoreState(String stateInXml) { String message = Logging.getMessage("RestorableSupport.RestoreRequiresConstructor"); Logging.logger().severe(message); throw new UnsupportedOperationException(message); } private static class URLBuilder implements TileUrlBuilder { private static final String MAX_VERSION = "1.3.0"; private final String layerNames; private final String styleNames; private final String imageFormat; private final String wmsVersion; private final String crs; public String URLTemplate = null; private URLBuilder(String version, AVList params) { this.layerNames = params.getStringValue(AVKey.LAYER_NAMES); this.styleNames = params.getStringValue(AVKey.STYLE_NAMES); this.imageFormat = params.getStringValue(AVKey.IMAGE_FORMAT); if (version == null || version.compareTo(MAX_VERSION) >= 0) { this.wmsVersion = MAX_VERSION; this.crs = "&crs=CRS:84"; } else { this.wmsVersion = version; this.crs = "&srs=EPSG:4326"; } } public URL getURL(Tile tile, String altImageFormat) throws MalformedURLException { StringBuffer sb; if (this.URLTemplate == null) { sb = new StringBuffer(tile.getLevel().getService()); if (!sb.toString().toLowerCase().contains("service=wms")) sb.append("service=WMS"); sb.append("&request=GetMap"); sb.append("&version="); sb.append(this.wmsVersion); sb.append(this.crs); sb.append("&layers="); sb.append(this.layerNames); sb.append("&styles="); sb.append(this.styleNames != null ? this.styleNames : ""); sb.append("&width="); sb.append(tile.getLevel().getTileWidth()); sb.append("&height="); sb.append(tile.getLevel().getTileHeight()); sb.append("&format="); if (altImageFormat == null) sb.append(this.imageFormat); else sb.append(altImageFormat); sb.append("&transparent=TRUE"); sb.append("&bgcolor=0x000000"); this.URLTemplate = sb.toString(); } else { sb = new StringBuffer(this.URLTemplate); } Sector s = tile.getSector(); sb.append("&bbox="); sb.append(s.getMinLongitude().getDegrees()); sb.append(","); sb.append(s.getMinLatitude().getDegrees()); sb.append(","); sb.append(s.getMaxLongitude().getDegrees()); sb.append(","); sb.append(s.getMaxLatitude().getDegrees()); sb.append("&"); // terminate the query string return new java.net.URL(sb.toString().replace(" ", "%20")); }//// private URL getImageTileURL(WMSImageTile tile) throws MalformedURLException// {// StringBuffer sb = new StringBuffer(tile.getLevel().getService());//// if (!sb.toString().toLowerCase().contains("service=wms"))// sb.append("service=WMS");// sb.append("&request=GetMap");// sb.append("&version=");// sb.append(this.wmsVersion);// sb.append(this.crs);// sb.append("&layers=");// sb.append(this.layerNames);// sb.append("&styles=");// sb.append(this.styleNames != null ? this.styleNames : "default");// sb.append("&width=");// sb.append(tile.imageWidth);// sb.append("&height=");// sb.append(tile.imageHeight);// sb.append("&format=");// sb.append(tile.imageFormat);// sb.append("&transparent=TRUE");// sb.append("&bgcolor=0x000000");//// sb.append("&bbox=");// sb.append(tile.getSector().getMinLongitude().getDegrees());// sb.append(",");// sb.append(tile.getSector().getMinLatitude().getDegrees());// sb.append(",");// sb.append(tile.getSector().getMaxLongitude().getDegrees());// sb.append(",");// sb.append(tile.getSector().getMaxLatitude().getDegrees());// sb.append("&"); // terminate the query string//// return new java.net.URL(sb.toString().replace(" ", "%20"));// } }//// @Override// protected URL getImageURL(TextureTile tile) throws MalformedURLException// {// StringBuffer sb = new StringBuffer(tile.getLevel().getService());//// if (!sb.toString().toLowerCase().contains("service=wms"))// sb.append("service=WMS");// sb.append("&request=GetMap");// sb.append("&version=");// sb.append(this.wmsVersion);// sb.append(this.crs);// sb.append("&layers=");// sb.append(this.layerNames);// sb.append("&styles=");// sb.append(this.styleNames != null ? this.styleNames : "default");// sb.append("&width=");// sb.append(tile.imageWidth);// sb.append("&height=");// sb.append(tile.imageHeight);// sb.append("&format=");// sb.append(tile.imageFormat);// sb.append("&transparent=TRUE");// sb.append("&bgcolor=0x000000");//// sb.append("&bbox=");// sb.append(tile.getSector().getMinLongitude().getDegrees());// sb.append(",");// sb.append(tile.getSector().getMinLatitude().getDegrees());// sb.append(",");// sb.append(tile.getSector().getMaxLongitude().getDegrees());// sb.append(",");// sb.append(tile.getSector().getMaxLatitude().getDegrees());// sb.append("&"); // terminate the query string//// return new java.net.URL(sb.toString().replace(" ", "%20"));// }//// private static class WMSImageTile extends TextureTile// {// private final String imageFormat;// private final int imageWidth;// private final int imageHeight;//// private WMSImageTile(Sector sector, Level level, String imageFormat, int imageWidth, int imageHeight)// {// super(sector, level, 0, 0);//// this.imageFormat = imageFormat;// this.imageWidth = imageWidth;// this.imageHeight = imageHeight;// }// }//// public BufferedImage getImage(Sector sector, int imageSize, String imageFormat) throws Exception// {// if (sector == null)// {// String message = Logging.getMessage("nullValue.SectorIsNull");// Logging.logger().severe(message);// throw new IllegalStateException(message);// }//// if (imageSize <= 0)// {// String message = Logging.getMessage("generic.InvalidImageSize", imageSize, imageSize);// Logging.logger().severe(message);// throw new IllegalStateException(message);// }//// if (imageFormat == null)// {// String message = Logging.getMessage("nullValue.ImageFomat");// Logging.logger().severe(message);// throw new IllegalStateException(message);// }//// WMSImageTile tile =// new WMSImageTile(sector, this.getLevels().getLastLevel(), imageFormat, imageSize, imageSize);//// File imageFile = File.createTempFile("LandPrintPreviewImage", makeSuffixFromContentType(imageFormat));// imageFile.deleteOnExit();//// // Retrieve it from the wms server.// this.downloadImage(tile.getResourceURL(), imageFile);//// // Try to read from disk after retrieving it from the server.// if (!imageFile.exists())// {// String message =// Logging.getMessage("layers.TiledImageLayer.ImageUnavailable", tile.getResourceURL().toString());// Logging.logger().warning(message);// return null;// }//// BufferedImage image = ImageIO.read(imageFile);// if (image == null)// {// String message = Logging.getMessage("generic.ImageFormatUnsupported", imageFormat);// throw new RuntimeException(message);// }//// return image;// }//// public static String makeSuffixFromContentType(String contentType)// {// if (contentType == null)// {// String message = Logging.getMessage("nullValue.ImageFomat");// Logging.logger().severe(message);// throw new IllegalStateException(message);// }//// if (!contentType.contains("/") || contentType.endsWith("/"))// {// String message = Logging.getMessage("generic.InvalidImageFormat");// Logging.logger().severe(message);// throw new IllegalStateException(message);// }//// String suffix = contentType.substring(contentType.lastIndexOf("/") + 1);//// return "." + suffix.replaceFirst("jpeg", "jpg");// }//// private void downloadImage(URL imageURL, File imageFile) throws Exception// {// if (!"http".equalsIgnoreCase(imageURL.getProtocol()))// {// String message = Logging.getMessage("layers.TextureLayer.UnknownRetrievalProtocol", imageURL);// throw new RuntimeException(message);// }//// Retriever retriever = new HTTPRetriever(imageURL, new HttpRetrievalPostProcessor(imageFile));// retriever.setConnectTimeout(10000);// retriever.setReadTimeout(20000);// retriever.call();// }//// private class HttpRetrievalPostProcessor implements RetrievalPostProcessor// {// private File imageFile;//// public HttpRetrievalPostProcessor(File imageFile)// {// this.imageFile = imageFile;// }//// public ByteBuffer run(Retriever retriever)// {// if (!retriever.getState().equals(Retriever.RETRIEVER_STATE_SUCCESSFUL))// return null;//// HTTPRetriever htr = (HTTPRetriever) retriever;// if (htr.getResponseCode() == HttpURLConnection.HTTP_NO_CONTENT)// return null;//// if (htr.getResponseCode() != HttpURLConnection.HTTP_OK)// return null;//// URLRetriever r = (URLRetriever) retriever;// ByteBuffer buffer = r.getBuffer();//// try// {// WWIO.saveBuffer(buffer, this.imageFile);// return buffer;// }// catch (IOException e)// {// e.printStackTrace(); // TODO: log error// return null;// }// }// }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?