/** * Determines whether this sector intersects any one of the sectors in the specified iterable. * This returns true if at least one of the sectors is non-null and intersects this sector. * * @param sectors the sectors to test for intersection. * @return true if at least one of the sectors is non-null and intersects this sector, otherwise * false. * @throws java.lang.IllegalArgumentException if the iterable is null. */ public boolean intersectsAny(Iterable<? extends Sector> sectors) { if (sectors == null) { throw new IllegalArgumentException("SectorListIsNull"); } for (Sector s : sectors) { if (s != null && s.intersects(this)) { return true; } } return false; }
protected boolean isNavSectorVisible( DrawContext dc, double minDistanceSquared, double maxDistanceSquared) { if (!navSector.intersects(dc.getVisibleSector())) return false; View view = dc.getView(); Position eyePos = view.getEyePosition(); if (eyePos == null) return false; // check for eyePos over globe if (Double.isNaN(eyePos.getLatitude().getDegrees()) || Double.isNaN(eyePos.getLongitude().getDegrees())) return false; Angle lat = clampAngle(eyePos.getLatitude(), navSector.getMinLatitude(), navSector.getMaxLatitude()); Angle lon = clampAngle( eyePos.getLongitude(), navSector.getMinLongitude(), navSector.getMaxLongitude()); Vec4 p = dc.getGlobe().computePointFromPosition(lat, lon, 0d); double distSquared = dc.getView().getEyePoint().distanceToSquared3(p); //noinspection RedundantIfStatement if (minDistanceSquared > distSquared || maxDistanceSquared < distSquared) return false; return true; }
public boolean hasCoverage(Sector sector) { return (null != sector && sector.intersects(this.getBBox())); }
public ImageFormatter serviceRequest(IMapRequest req) throws IOException, WMSServiceException { int reqWidth = 512; int reqHeight = 512; this.threadId = Thread.currentThread().getId(); MapSource myMapSource = CompoundImageryGenerator.this.mapSource; Logging.logger() .info("START CompoundServiceInstance :: serviceRequest( " + myMapSource.getName() + ")"); try { Integer bgColor = CompoundImageryGenerator.DEFAULT_MISSING_DATA_COLOR; String bgColorStr = req.getBGColor(); if (bgColorStr != null && 0 < bgColorStr.length()) { try { bgColor = Integer.parseInt(bgColorStr, 16); } catch (NumberFormatException ex) { Logging.logger() .severe("Unable to parse BGCOLOR in get imagery request: " + ex.getMessage()); bgColor = CompoundImageryGenerator.DEFAULT_MISSING_DATA_COLOR; } } else Logging.logger() .severe( "BGCOLOR was not specified in the getImagery request: using default " + bgColor); req.setBGColor(bgColor.toString()); reqWidth = (req.getWidth() > 0) ? req.getWidth() : 512; req.setWidth(reqWidth); reqHeight = (req.getHeight() > 0) ? req.getHeight() : 512; req.setHeight(reqHeight); Sector reqSector = Sector.fromDegrees( req.getBBoxYMin(), req.getBBoxYMax(), req.getBBoxXMin(), req.getBBoxXMax()); double reqPixelSize = reqSector.getDeltaLatDegrees() / reqHeight; MapSource reqMapSource = null; for (Iterator<MapSource> iterator = myMapSource.getChildren(); iterator.hasNext(); ) { MapSource ms = iterator.next(); MapGenerator gen = (null != ms) ? ms.getMapGenerator() : null; if (null == gen) { Logging.logger() .severe("child mapSource `" + ms.getName() + "` has no associated map generator!"); continue; } Sector bbox = gen.getBBox(); Logging.logger() .info( "found child mapSource `" + ms.getName() + "` with generator: " + gen.toString()); if (!reqSector.intersects(bbox)) { Logging.logger() .info( "child mapSource`" + ms.getName() + "`: out of coverage, skipping" + bbox.toString()); continue; } double genPixelSize = gen.getPixelSize(); reqMapSource = ms; // assumes layers are configured in order according to resolutions from low to // high Logging.logger() .info( "Comparing texel sizes: req = " + reqPixelSize + " , layer's = " + gen.getPixelSize()); if (reqPixelSize >= genPixelSize) { // satisfactory generator found break; } } ImageFormatter fmt = null; if (null != reqMapSource) { try { MapGenerator gen = reqMapSource.getMapGenerator(); Logging.logger() .info( "`" + reqMapSource.getName() + "` is executing request; req texel size = " + reqPixelSize + " where layer's texel size = " + gen.getPixelSize()); fmt = gen.getServiceInstance().serviceRequest(req); } catch (Exception ex) { Logging.logger().severe("Error while accessing a child mapSource: " + ex.getMessage()); } } if (null == fmt) { Logging.logger().info("CompoundImageryGenerator will return an empty transparent image"); fmt = createEmptyImage(req.getWidth(), req.getHeight(), new Color(bgColor)); } return fmt; } catch (Exception ex) { String msg = Logging.getMessage("WMS.RequestFailed", ex.getMessage()); Logging.logger().log(java.util.logging.Level.SEVERE, msg, ex); throw new WMSServiceException(msg); } }
protected void doDrawOnTo(BufferedImageRaster canvas) { Sector sector = this.getSector(); if (null == sector) { String message = Logging.getMessage("nullValue.SectorIsNull"); Logging.logger().severe(message); throw new IllegalArgumentException(message); } if (!sector.intersects(canvas.getSector())) { return; } java.awt.Graphics2D g2d = null; java.awt.Shape prevClip = null; java.awt.Composite prevComposite = null; java.lang.Object prevInterpolation = null, prevAntialiasing = null; try { int canvasWidth = canvas.getWidth(); int canvasHeight = canvas.getHeight(); // Apply the transform that correctly maps the image onto the canvas. java.awt.geom.AffineTransform transform = this.computeSourceToDestTransform( this.getWidth(), this.getHeight(), this.getSector(), canvasWidth, canvasHeight, canvas.getSector()); AffineTransformOp op = new AffineTransformOp(transform, AffineTransformOp.TYPE_BILINEAR); Rectangle2D rect = op.getBounds2D(this.getBufferedImage()); int clipWidth = (int) Math.ceil((rect.getMaxX() >= canvasWidth) ? canvasWidth : rect.getMaxX()); int clipHeight = (int) Math.ceil((rect.getMaxY() >= canvasHeight) ? canvasHeight : rect.getMaxY()); if (clipWidth <= 0 || clipHeight <= 0) { return; } g2d = canvas.getGraphics(); prevClip = g2d.getClip(); prevComposite = g2d.getComposite(); prevInterpolation = g2d.getRenderingHint(RenderingHints.KEY_INTERPOLATION); prevAntialiasing = g2d.getRenderingHint(RenderingHints.KEY_ANTIALIASING); // Set the alpha composite for appropriate alpha blending. g2d.setComposite(java.awt.AlphaComposite.SrcOver); g2d.setRenderingHint( RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.drawImage(this.getBufferedImage(), transform, null); } // catch (java.awt.image.ImagingOpException ioe) // { // // If we catch a ImagingOpException, then the transformed image has a width or // height of 0. // // This indicates that there is no intersection between the source image and the // canvas, // // or the intersection is smaller than one pixel. // } // catch (java.awt.image.RasterFormatException rfe) // { // // If we catch a RasterFormatException, then the transformed image has a width or // height of 0. // // This indicates that there is no intersection between the source image and the // canvas, // // or the intersection is smaller than one pixel. // } catch (Throwable t) { String reason = WWUtil.extractExceptionReason(t); Logging.logger().log(java.util.logging.Level.SEVERE, reason, t); } finally { // Restore the previous clip, composite, and transform. try { if (null != g2d) { if (null != prevClip) g2d.setClip(prevClip); if (null != prevComposite) g2d.setComposite(prevComposite); if (null != prevInterpolation) g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, prevInterpolation); if (null != prevAntialiasing) g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, prevAntialiasing); } } catch (Throwable t) { Logging.logger().log(java.util.logging.Level.FINEST, WWUtil.extractExceptionReason(t), t); } } }