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 + -
显示快捷键?