/** * Adds a map to the catalog into the right Mapset. * * <p>Note: this doesn't add the file. The file adding has to be done separately * * @param locationPath the path to the Location folder. * @param mapsetName the name of the Mapset into which to put the map. * @param mapName the name of the map to add. * @param mapType the format of the map to add. * @return the resource that has been added. */ public static synchronized JGrassMapGeoResource addMapToCatalog( String locationPath, String mapsetName, String mapName, String mapType) { // URL mapsetId = JGrassMapsetGeoResource.createId(locationPath, mapsetName); JGrassMapsetGeoResource mapset = null; try { File locationFile = new File(locationPath); ID locationId = new ID(locationFile.toURI().toURL()); URL mapsetUrl = JGrassMapsetGeoResource.createId(locationFile.getAbsolutePath(), mapsetName); ID mapsetId = new ID(mapsetUrl); ICatalog localCatalog = CatalogPlugin.getDefault().getLocalCatalog(); mapset = localCatalog.getById( JGrassMapsetGeoResource.class, mapsetId, ProgressManager.instance().get()); if (mapset == null) { // try with the service // URL locationId = JGrassService.createId(locationPath); JGrassService locationService = localCatalog.getById(JGrassService.class, locationId, ProgressManager.instance().get()); mapset = locationService.getMapsetGeoresourceByName(mapsetName); } } catch (MalformedURLException e) { e.printStackTrace(); String message = "An error occurred while adding the map to the catalog"; ExceptionDetailsDialog.openError(null, message, IStatus.ERROR, JGrassPlugin.PLUGIN_ID, e); } if (mapset == null) return null; return mapset.addMap(mapName, mapType); }
/** * Remove a map from the mapset in the catalog. * * <p>Note: this doesn't remove the file. The file removal has to be done separately * * @param locationPath the path to the Location folder. * @param mapsetName the name of the Mapset from which to remove the map. * @param mapName the name of the map to remove. * @param mapType the format of the map to remove. */ public static synchronized void removeMapFromCatalog( String locationPath, String mapsetName, String mapName, String mapType) { // URL mapsetId = JGrassMapsetGeoResource.createId(locationPath, mapsetName); File locationFile = new File(locationPath); URL mapsetUrl = JGrassMapsetGeoResource.createId(locationFile.getAbsolutePath(), mapsetName); ID mapsetId = new ID(mapsetUrl); JGrassMapsetGeoResource mapset = CatalogPlugin.getDefault() .getLocalCatalog() .getById(JGrassMapsetGeoResource.class, mapsetId, ProgressManager.instance().get()); mapset.removeMap(mapName, mapType); }
/** * Extract mapset path and mapname from a georesource containing a JGrassMapGeoResource * * @param resource * @return a String array with mapset path and map name */ public static synchronized String[] getMapsetpathAndMapnameFromJGrassMapGeoResource( IGeoResource resource) { String[] mapsetPathAndMapName = new String[2]; // check that the underlying resource is a propertyservice if (resource == null || !resource.canResolve(JGrassMapGeoResource.class)) { return null; } JGrassMapGeoResource mapResource = null; try { mapResource = resource.resolve(JGrassMapGeoResource.class, null); // String tmp = jg.getInfo(null).getDescription(); // if (!tmp.equals(JGrassConstants.GRASSBINARYRASTERMAP)) // return null; } catch (IOException e) { JGrassPlugin.log( "JGrassPlugin problem: eu.hydrologis.udig.catalog.utils#JGrassCatalogUtilities#getMapsetpathAndMapnameFromJGrassMapGeoResource", e); //$NON-NLS-1$ e.printStackTrace(); return null; } JGrassMapsetGeoResource mapsetResource = null; try { mapsetResource = (JGrassMapsetGeoResource) mapResource.parent(null); mapsetPathAndMapName[0] = mapsetResource.getFile().getAbsolutePath(); mapsetPathAndMapName[1] = mapResource.getTitle(); } catch (IOException e) { JGrassPlugin.log( "JGrassPlugin problem: eu.hydrologis.udig.catalog.utils#JGrassCatalogUtilities#getMapsetpathAndMapnameFromJGrassMapGeoResource", e); //$NON-NLS-1$ e.printStackTrace(); } return mapsetPathAndMapName; }
public void render(Graphics2D g2d, IProgressMonitor monitor) throws RenderException { try { final IRenderContext currentContext = getContext(); currentContext.setStatus(ILayer.WAIT); CoordinateReferenceSystem destinationCRS = currentContext.getCRS(); // the bounds of the visible area in world coordinates // get the envelope and the screen extent Envelope envelope = getRenderBounds(); if (envelope == null || envelope.isNull()) { envelope = context.getImageBounds(); } Point upperLeft = currentContext.worldToPixel(new Coordinate(envelope.getMinX(), envelope.getMinY())); Point bottomRight = currentContext.worldToPixel(new Coordinate(envelope.getMaxX(), envelope.getMaxY())); Rectangle screenSize = new Rectangle(upperLeft); screenSize.add(bottomRight); final IGeoResource resource = getContext().getGeoResource(); if (resource == null || !resource.canResolve(JGrassMapGeoResource.class)) { return; } JGrassMapGeoResource grassMapGeoResource = resource.resolve(JGrassMapGeoResource.class, monitor); JGrassRegion fileWindow = new JGrassRegion(grassMapGeoResource.getFileWindow()); JGrassMapsetGeoResource parent = (JGrassMapsetGeoResource) grassMapGeoResource.parent(new NullProgressMonitor()); CoordinateReferenceSystem grassCrs = parent.getLocationCrs(); JGrassRegion screenDrawWindow = new JGrassRegion( envelope.getMinX(), envelope.getMaxX(), envelope.getMinY(), envelope.getMaxY(), fileWindow.getRows(), fileWindow.getCols()); // to intersect with the data window, we transform the screen window JGrassRegion reprojectedScreenDrawWindow = screenDrawWindow; if (!CRS.equalsIgnoreMetadata(destinationCRS, grassCrs)) { reprojectedScreenDrawWindow = screenDrawWindow.reproject(destinationCRS, grassCrs, true); } /* * if the map is not visible, do not render it */ // JGrassRegion fileWindow = grassMapGeoResource.getFileWindow(); Rectangle2D.Double fileRectDouble = fileWindow.getRectangle(); Double reprojScreenRectangle = reprojectedScreenDrawWindow.getRectangle(); if (!reprojScreenRectangle.intersects(fileRectDouble)) { getContext().setStatus(ILayer.DONE); getContext().setStatusMessage(THE_MAP_IS_OUTSIDE_OF_THE_VISIBLE_REGION); System.out.println(THE_MAP_IS_OUTSIDE_OF_THE_VISIBLE_REGION); return; } /* * we will draw only the intersection of the map in the display system = part of visible map */ Rectangle2D drawMapRectangle = reprojectedScreenDrawWindow.getRectangle().createIntersection(fileRectDouble); // Rectangle2D drawMapRectangle = fileRectDouble.getBounds2D(); // resolution is that of the file window double ewRes = fileWindow.getWEResolution(); double nsRes = fileWindow.getNSResolution(); if (fileRectDouble.getWidth() < ewRes || fileRectDouble.getHeight() < nsRes) { getContext().setStatus(ILayer.DONE); getContext().setStatusMessage(THE_MAP_IS_OUTSIDE_OF_THE_VISIBLE_REGION); System.out.println(THE_MAP_IS_OUTSIDE_OF_THE_VISIBLE_REGION); return; } MathTransform transform = CRS.findMathTransform(destinationCRS, grassCrs, true); Coordinate pixelSize = getContext().getPixelSize(); Coordinate c1 = new Coordinate(envelope.getMinX(), envelope.getMinY()); Coordinate c2 = new Coordinate(envelope.getMinX() + pixelSize.x, envelope.getMinY() + pixelSize.y); Envelope envy = new Envelope(c1, c2); Envelope envyTrans = JTS.transform(envy, transform); pixelSize = new Coordinate(envyTrans.getWidth(), envyTrans.getHeight()); /* * if the resolution is higher of that of the screen, it doesn't make much sense to draw it * all. So for visualization we just use the screen resolution to do things faster. */ if (ewRes < pixelSize.x) { ewRes = pixelSize.x; } if (nsRes < pixelSize.y) { nsRes = pixelSize.y; } fileWindow.setNSResolution(nsRes); fileWindow.setWEResolution(ewRes); nsRes = fileWindow.getNSResolution(); ewRes = fileWindow.getWEResolution(); /* * redefine the region of the map to be drawn */ /* * snap the screen to fit into the active region grid. This is mandatory for the exactness * of the query of the pixels (ex. d.what.rast). */ JGrassRegion activeWindow = grassMapGeoResource.getActiveWindow(); Coordinate minXY = JGrassRegion.snapToNextHigherInRegionResolution( drawMapRectangle.getMinX(), drawMapRectangle.getMinY(), activeWindow); Coordinate maxXY = JGrassRegion.snapToNextHigherInRegionResolution( drawMapRectangle.getMaxX(), drawMapRectangle.getMaxY(), activeWindow); JGrassRegion drawMapRegion = new JGrassRegion(minXY.x, maxXY.x, minXY.y, maxXY.y, ewRes, nsRes); // JGrassRegion drawMapRegion = new JGrassRegion(drawMapRectangle.getMinX(), // drawMapRectangle.getMaxX(), drawMapRectangle.getMinY(), drawMapRectangle // .getMaxY(), ewRes, nsRes); JGrassMapEnvironment grassMapEnvironment = grassMapGeoResource.getjGrassMapEnvironment(); GridCoverage2D coverage = JGrassCatalogUtilities.getGridcoverageFromGrassraster(grassMapEnvironment, drawMapRegion); coverage = coverage.view(ViewType.RENDERED); if (coverage != null) { // setting rendering hints RenderingHints hints = new RenderingHints(Collections.EMPTY_MAP); hints.add( new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_SPEED)); hints.add( new RenderingHints(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_DISABLE)); hints.add( new RenderingHints( RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_SPEED)); hints.add( new RenderingHints( RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_SPEED)); hints.add( new RenderingHints( RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR)); hints.add( new RenderingHints( RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE)); hints.add( new RenderingHints( RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_OFF)); hints.add(new RenderingHints(JAI.KEY_INTERPOLATION, new InterpolationNearest())); g2d.addRenderingHints(hints); final TileCache tempCache = JAI.createTileCache(); tempCache.setMemoryCapacity(16 * 1024 * 1024); tempCache.setMemoryThreshold(1.0f); hints.add(new RenderingHints(JAI.KEY_TILE_CACHE, tempCache)); // draw AffineTransform worldToScreen = RendererUtilities.worldToScreenTransform(envelope, screenSize, destinationCRS); final GridCoverageRenderer paint = new GridCoverageRenderer(destinationCRS, envelope, screenSize, worldToScreen, hints); RasterSymbolizer rasterSymbolizer = CommonFactoryFinder.getStyleFactory(null).createRasterSymbolizer(); paint.paint(g2d, coverage, rasterSymbolizer); tempCache.flush(); // IBlackboard blackboard = context.getMap().getBlackboard(); // String legendString = coverageReader.getLegendString(); // String name = grassMapGeoResource.getTitle(); // blackboard.putString(JGrassMapGeoResource.READERID + "#" + name, legendString); } } catch (Exception e) { e.printStackTrace(); } finally { getContext().setStatus(ILayer.DONE); getContext().setStatusMessage(null); } }
@Override protected void refresh() { try { IBlackboard blackboard = getLayer().getMap().getBlackboard(); style = (ActiveRegionStyle) blackboard.get(ActiveregionStyleContent.ID); if (style == null) { style = ActiveregionStyleContent.createDefault(); blackboard.put(ActiveregionStyleContent.ID, style); // ((StyleBlackboard) styleBlackboard).setSelected(new // String[]{ActiveregionStyleContent.ID}); } // first time choose the mapset if (style.windPath == null) { CatalogJGrassMapsetTreeViewerDialog mapsetDialog = new CatalogJGrassMapsetTreeViewerDialog(); mapsetDialog.open(parent.getShell()); jGrassMapsetGeoResource = mapsetDialog.getSelectedLayers().get(0); JGrassRegion activeRegionWindow = jGrassMapsetGeoResource.getActiveRegionWindow(); style.windPath = jGrassMapsetGeoResource.getActiveRegionWindowPath(); style.north = (float) activeRegionWindow.getNorth(); style.south = (float) activeRegionWindow.getSouth(); style.west = (float) activeRegionWindow.getWest(); style.east = (float) activeRegionWindow.getEast(); style.rows = activeRegionWindow.getRows(); style.cols = activeRegionWindow.getCols(); CoordinateReferenceSystem jGrassCrs = jGrassMapsetGeoResource.getLocationCrs(); try { Integer epsg = CRS.lookupEpsgCode(jGrassCrs, true); style.crsString = "EPSG:" + epsg; } catch (Exception e) { // try non epsg style.crsString = CRS.lookupIdentifier(jGrassCrs, true); } } windPathText.setText(style.windPath); JGrassRegion tmp = new JGrassRegion( style.west, style.east, style.south, style.north, style.rows, style.cols); // set initial values isWorking = true; northText.setText(String.valueOf(style.north)); southText.setText(String.valueOf(style.south)); westText.setText(String.valueOf(style.west)); eastText.setText(String.valueOf(style.east)); xresText.setText(String.valueOf(tmp.getWEResolution())); yresText.setText(String.valueOf(tmp.getNSResolution())); colsText.setText(String.valueOf(style.cols)); rowsText.setText(String.valueOf(style.rows)); isWorking = false; forgroundAlphaText.setText(Float.toString(style.fAlpha)); backgroundAlphaText.setText(Float.toString(style.bAlpha)); foregroundColor.setColorValue( new RGB( style.foregroundColor.getRed(), style.foregroundColor.getGreen(), style.foregroundColor.getBlue())); backgroundColour.setColorValue( new RGB( style.backgroundColor.getRed(), style.backgroundColor.getGreen(), style.backgroundColor.getBlue())); CoordinateReferenceSystem crs = CRS.decode(style.crsString); commitToBlackboards(tmp, crs, style.windPath); } catch (Exception e) { e.printStackTrace(); } }