static MultiLevelSource createMaskMultiLevelSource(final VectorDataNode vectorDataNode) { final MultiLevelModel multiLevelModel = ImageManager.createMultiLevelModel(vectorDataNode.getProduct()); return new AbstractMultiLevelSource(multiLevelModel) { @Override public RenderedImage createImage(int level) { return new VectorDataMaskOpImage(vectorDataNode, ResolutionLevel.create(getModel(), level)); } }; } }
/** * Creates a new {@link MultiLevelImage} computed from vector data. The created * image resets itsself whenever the referred vector data have changed. * * @param multiLevelSource the multi-level image source * @param vectorDataNode the vector data referred. */ VectorDataMultiLevelImage(MultiLevelSource multiLevelSource, final VectorDataNode vectorDataNode) { super(multiLevelSource); this.vectorDataReference = new WeakReference<VectorDataNode>(vectorDataNode); vectorDataNode.getProduct().addProductNodeListener(this); }
@Override public void dispose() { VectorDataNode vectorDataNode = vectorDataReference.get(); if (vectorDataNode != null) { Product product = vectorDataNode.getProduct(); if (product != null) { product.removeProductNodeListener(this); } } vectorDataReference.clear(); super.dispose(); }
public VectorDataMaskOpImage(VectorDataNode vectorDataNode, ResolutionLevel level) { super(DataBuffer.TYPE_BYTE, vectorDataNode.getProduct().getSceneRasterWidth(), vectorDataNode.getProduct().getSceneRasterHeight(), vectorDataNode.getProduct().getPreferredTileSize(), null, level); this.vectorDataNode = vectorDataNode; GeoCoding geoCoding = vectorDataNode.getProduct().getGeoCoding(); AffineTransform transform = ImageManager.getImageToModelTransform(geoCoding); try { transform.invert(); m2iTransform = transform; } catch (NoninvertibleTransformException e) { throw new IllegalArgumentException("Could not invert model-to-image transformation.", e); } }
@Override protected void disposeLayer() { vectorDataNode.getProduct().removeProductNodeListener(vectorDataChangeHandler); vectorDataNode = null; super.disposeLayer(); }
public PlacemarkGroup getPlacemarkGroup() { if (placemarkGroup == null) { synchronized (this) { if (placemarkGroup == null) { placemarkGroup = new PlacemarkGroup(getProduct(), getName(), this); } } } return placemarkGroup; }
/** * Called when this node is added to or removed from a product. * Overridden in order to create placemarks for features that are still * without a placemark counterpart. * * @param owner the new owner */ @Override public synchronized void setOwner(ProductNode owner) { super.setOwner(owner); if (getProduct() != null) { updateFeatureCollectionByPlacemarkGroup(); } }
private static Map<Class<?>, List<SimpleFeature>> createGeometryToFeaturesListMap(VectorDataNode vectorNode) { FeatureCollection<SimpleFeatureType, SimpleFeature> featureCollection = vectorNode.getFeatureCollection(); CoordinateReferenceSystem crs = vectorNode.getFeatureType().getCoordinateReferenceSystem(); if (crs == null) { // for pins and GCPs crs is null --> assume image crs crs = vectorNode.getProduct().getGeoCoding().getImageCRS(); } final CoordinateReferenceSystem modelCrs; if (vectorNode.getProduct().getGeoCoding() instanceof CrsGeoCoding) { modelCrs = ImageManager.getModelCrs(vectorNode.getProduct().getGeoCoding()); } else { modelCrs = DefaultGeographicCRS.WGS84; } if (!CRS.equalsIgnoreMetadata(crs, modelCrs)) { // we have to reproject the features featureCollection = new ReprojectingFeatureCollection(featureCollection, crs, modelCrs); } Map<Class<?>, List<SimpleFeature>> featureListMap = new HashMap<>(); final FeatureIterator<SimpleFeature> featureIterator = featureCollection.features(); while (featureIterator.hasNext()) { SimpleFeature feature = featureIterator.next(); Object defaultGeometry = feature.getDefaultGeometry(); Class<?> geometryType = defaultGeometry.getClass(); List<SimpleFeature> featureList = featureListMap.get(geometryType); if (featureList == null) { featureList = new ArrayList<>(); featureListMap.put(geometryType, featureList); } featureList.add(feature); } return featureListMap; }
public ProductPlacemarkView(VectorDataNode vectorDataNode) { this.vectorDataNode = vectorDataNode; this.vectorDataNode.getProduct().addProductNodeListener(new PNL()); placemarkTable = new SortableTable(); placemarkTable.addMouseListener(new PopupMenuHandler(this)); placemarkTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); tableModel = new PlacemarkTableModel(); placemarkTable.setModel(tableModel); final TableCellRenderer renderer = placemarkTable.getTableHeader().getDefaultRenderer(); final int margin = placemarkTable.getTableHeader().getColumnModel().getColumnMargin(); Enumeration<TableColumn> columns = placemarkTable.getColumnModel().getColumns(); while (columns.hasMoreElements()) { TableColumn tableColumn = columns.nextElement(); final int width = getColumnMinWith(tableColumn, renderer, margin); tableColumn.setMinWidth(width); } final JScrollPane scrollPane = new JScrollPane(placemarkTable); setLayout(new BorderLayout()); add(scrollPane, BorderLayout.CENTER); }
protected VectorDataLayer(VectorDataLayerType vectorDataLayerType, VectorDataNode vectorDataNode, PropertySet configuration) { super(vectorDataLayerType, configuration); setUniqueId(); this.vectorDataNode = vectorDataNode; setName(vectorDataNode.getName()); figureFactory = new SimpleFeatureFigureFactory(vectorDataNode.getFeatureType()); figureCollection = new DefaultFigureCollection(); updateFigureCollection(); vectorDataChangeHandler = new VectorDataChangeHandler(); vectorDataNode.getProduct().addProductNodeListener(vectorDataChangeHandler); figureCollection.addChangeListener(new FigureChangeHandler()); }
public static void deleteVectorDataNode(VectorDataNode vectorDataNode) { Assert.notNull(vectorDataNode); Product product = vectorDataNode.getProduct(); ProductNodeGroup<Mask> maskGroup = product.getMaskGroup(); Mask vectorMask = null; for (int i = 0; i < maskGroup.getNodeCount(); i++) { Mask mask = maskGroup.get(i); if (mask.getImageType() == Mask.VectorDataType.INSTANCE && Mask.VectorDataType.getVectorData(mask) == vectorDataNode) { vectorMask = mask; break; } } String message; if (vectorMask != null) { List<RasterDataNode> virtualBands = getReferencedVirtualBands(vectorMask); List<RasterDataNode> validMaskNodes = getReferencedValidMasks(vectorMask); List<RasterDataNode> masks = getReferencedMasks(vectorMask); VectorDataNode[] nodes = new VectorDataNode[]{vectorDataNode}; message = formatPromptMessage("Geometry", nodes, virtualBands, validMaskNodes, masks); } else { message = MessageFormat.format("Do you really want to delete the geometry ''{0}''?\nThis action cannot be undone.\n\n", vectorDataNode.getName()); } int status = VisatApp.getApp().showQuestionDialog("Delete Vector Data", message, null); if (status == JOptionPane.YES_OPTION) { product.getVectorDataGroup().remove(vectorDataNode); } }