public WorldMapUI() { worldMapDataModel = new NestWorldMapPaneDataModel(); worlMapPane = new NestWorldMapPane(worldMapDataModel); worlMapPane.getLayerCanvas().addMouseListener(new MouseHandler()); }
private void updateUiState(PropertyChangeEvent evt) { if (NestWorldMapPaneDataModel.PROPERTY_LAYER.equals(evt.getPropertyName())) { exchangeWorldMapLayer(); } if (NestWorldMapPaneDataModel.PROPERTY_PRODUCTS.equals(evt.getPropertyName())) { repaint(); } if (NestWorldMapPaneDataModel.PROPERTY_SELECTED_PRODUCT.equals(evt.getPropertyName()) || NestWorldMapPaneDataModel.PROPERTY_AUTO_ZOOM_ENABLED.equals(evt.getPropertyName())) { final Product selectedProduct = dataModel.getSelectedProduct(); if (selectedProduct != null && dataModel.isAutoZommEnabled()) { zoomToProduct(selectedProduct); } else { repaint(); } } if (NestWorldMapPaneDataModel.PROPERTY_ADDITIONAL_GEO_BOUNDARIES.equals(evt.getPropertyName()) || NestWorldMapPaneDataModel.PROPERTY_SELECTED_GEO_BOUNDARIES.equals(evt.getPropertyName())) { repaint(); } }
public void setScale(final float scale) { if (getScale() != scale) { final float oldValue = getScale(); layerCanvas.getViewport().setZoomFactor(scale); firePropertyChange("scale", oldValue, scale); } }
public NestWorldMapPane(NestWorldMapPaneDataModel dataModel) { this.dataModel = dataModel; try { layerCanvas = new LayerCanvas(); layerCanvas.getModel().getViewport().setModelYAxisDown(false); installLayerCanvasNavigation(layerCanvas, dataModel); layerCanvas.addOverlay(new BoundaryOverlay()); final Layer rootLayer = layerCanvas.getLayer(); final Dimension dimension = new Dimension(400, 150); final Viewport viewport = layerCanvas.getViewport(); viewport.setViewBounds(new Rectangle(dimension)); setPreferredSize(dimension); setSize(dimension); setLayout(new BorderLayout()); add(layerCanvas, BorderLayout.CENTER); dataModel.addModelChangeListener(new ModelChangeListener()); worldMapLayer = dataModel.getWorldMapLayer(new WorldMapLayerContext(rootLayer)); layerCanvas.getLayer().getChildren().add(worldMapLayer); layerCanvas.getViewport().zoom(worldMapLayer.getModelBounds()); setNavControlVisible(true); } catch (Exception e) { SnapApp.getDefault().handleError("Error in worldmap initialization", e); } }
public void zoomToProduct(Product product) { final NestWorldMapPaneDataModel.Boundary[] selGeoBoundaries = dataModel.getSelectedGeoBoundaries(); final GeneralPath[] generalPaths; if (product != null && product.getSceneGeoCoding() != null) { generalPaths = getGeoBoundaryPaths(product); } else if (selGeoBoundaries.length > 0) { generalPaths = assemblePathList(selGeoBoundaries[0].geoBoundary);//selGeoBoundaries[0].boundaryPaths; } else { return; } Rectangle2D modelArea = new Rectangle2D.Double(); final Viewport viewport = layerCanvas.getViewport(); for (GeneralPath generalPath : generalPaths) { final Rectangle2D rectangle2D = generalPath.getBounds2D(); if (modelArea.isEmpty()) { if (!viewport.isModelYAxisDown()) { modelArea.setFrame(rectangle2D.getX(), rectangle2D.getMaxY(), rectangle2D.getWidth(), rectangle2D.getHeight()); } modelArea = rectangle2D; } else { modelArea.add(rectangle2D); } } Rectangle2D modelBounds = modelArea.getBounds2D(); modelBounds.setFrame(modelBounds.getX() - 2, modelBounds.getY() - 2, modelBounds.getWidth() + 4, modelBounds.getHeight() + 4); modelBounds = cropToMaxModelBounds(modelBounds); viewport.zoom(modelBounds); }
private void updateGeoRegion() { try { geoRegion = new WKTReader().read(geoText.getText()); final Coordinate coord[] = geoRegion.getCoordinates(); worldMapUI.setSelectionStart((float) coord[0].y, (float) coord[0].x); worldMapUI.setSelectionEnd((float) coord[2].y, (float) coord[2].x); worldMapUI.getWorlMapPane().revalidate(); worldMapUI.getWorlMapPane().getLayerCanvas().updateUI(); } catch (Exception e) { SnapApp.getDefault().handleError("UpdateGeoRegion error reading wkt", e); } } }
currentArea.intersect(pathArea); if (!currentArea.isEmpty()) { pathList.add(areaToPath(currentArea, -k * 360.0, pixelPath));
private void drawProduct(final Graphics2D g2d, final Product product, final Color fillColor, final Color borderColor) { final GeoCoding geoCoding = product.getSceneGeoCoding(); if (geoCoding == null) { return; } GeneralPath[] boundaryPaths = getGeoBoundaryPaths(product); final String text = String.valueOf(product.getRefNo()); final PixelPos textCenter = getProductCenter(product); drawGeoBoundaryPath(g2d, boundaryPaths, fillColor, borderColor); drawText(g2d, text, textCenter, 0.0f); }
@Override public void paintOverlay(LayerCanvas canvas, Rendering rendering) { for (final NestWorldMapPaneDataModel.Boundary extraGeoBoundary : dataModel.getAdditionalGeoBoundaries()) { drawGeoBoundary(rendering.getGraphics(), assemblePathList(extraGeoBoundary.geoBoundary), extraGeoBoundary.isClosed, transWhiteColor, borderWhiteColor); } for (final NestWorldMapPaneDataModel.Boundary selectGeoBoundary : dataModel.getSelectedGeoBoundaries()) { drawGeoBoundary(rendering.getGraphics(), assemblePathList(selectGeoBoundary.geoBoundary), selectGeoBoundary.isClosed, transRedColor, borderRedColor); } final Product selectedProduct = dataModel.getSelectedProduct(); for (final Product product : dataModel.getProducts()) { if (product != null && selectedProduct != product) { drawProduct(rendering.getGraphics(), product, transWhiteColor, Color.WHITE); } } if (selectedProduct != null) { drawProduct(rendering.getGraphics(), selectedProduct, transWhiteColor, Color.RED); } final NestWorldMapPaneDataModel.Boundary selectionBox = dataModel.getSelectionBoundary(); drawGeoBoundary(rendering.getGraphics(), assemblePathList(selectionBox.geoBoundary),//selectionBox.boundaryPaths, selectionBox.isClosed, selectionFillColor, selectionBorderColor); }