Solved! Go to Solution.
private java.awt.Point startPointOnScreen; ... @Override public void onMouseDragged(MouseEvent event) { // do not supper() to block the built-in navigation java.awt.Point pointScreen = event.getLocationOnScreen(); Point endPointOnMap = this.getMap().toMapPoint(pointScreen.x, pointScreen.y); Point startPointOnMap = this.getMap().toMapPoint(startPointOnScreen.x, startPointOnScreen.y); double dx = endPointOnMap.getX() - startPointOnMap.getX(); double dy = endPointOnMap.getY() - startPointOnMap.getY(); // PAN TO new extent Point currentCenter = this.getMap().getExtent().getCenter(); Point newCenter = new Point(currentCenter.getX() - dx, currentCenter.getY() - dy); this.getMap().panTo(newCenter); this.startPointOnScreen = pointScreen; } ... @Override public void onMousePressed(MouseEvent event) { // do not supper() to block the built-in navigation this.startPointOnScreen = event.getLocationOnScreen(); } ... @Override public void onMouseWheelMoved(MouseWheelEvent event) { // do not supper() to block the built-in navigation java.awt.Point pointScreen = MouseInfo.getPointerInfo().getLocation(); // java.awt.Point pointScreen = event.getLocationOnScreen(); // => always return 0,0 Point pointCenter = this.getMap().toMapPoint(pointScreen.x, pointScreen.y); // Turn ON animation - Add this to keep^a nice & smooth zoomIn/Out this.getMap().setAnimationMode(AnimationMode.ANIMATE); int notches = event.getWheelRotation(); if (notches < 0) { // Zoom in this.getMap().zoom(1/factor, pointCenter); } else { // Zoom out this.getMap().zoom(factor, pointCenter); } // Turn OFF animation - Add this to keep^a nice & smooth zoomIn/Out this.getMap().setAnimationMode(AnimationMode.NONE); }
// Desactivate Built-in navigation btnCustomizedPanTo = new JButton(); btnCustomizedPanTo.setText("ACTIVATE customized panTo"); btnCustomizedPanTo.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { btnBuiltInPanTo.setEnabled(true); btnCustomizedPanTo.setEnabled(false); // activate the MapOverlay to BLOCK Built-In navigation, and manage customized panTo mapEventsOverlay.setActive(true); // Turn OFF animation to improve customized PANTO - Here !! map.setAnimationMode(AnimationMode.NONE); } }); toolBar.add(btnCustomizedPanTo);
Is it possible to implement a customized PanTo which has the same nice and smooth behavior than built-in ?
private java.awt.Point startPointOnScreen; ... @Override public void onMouseDragged(MouseEvent event) { // do not supper() to block the built-in navigation java.awt.Point pointScreen = event.getLocationOnScreen(); Point endPointOnMap = this.getMap().toMapPoint(pointScreen.x, pointScreen.y); Point startPointOnMap = this.getMap().toMapPoint(startPointOnScreen.x, startPointOnScreen.y); double dx = endPointOnMap.getX() - startPointOnMap.getX(); double dy = endPointOnMap.getY() - startPointOnMap.getY(); // PAN TO new extent Point currentCenter = this.getMap().getExtent().getCenter(); Point newCenter = new Point(currentCenter.getX() - dx, currentCenter.getY() - dy); this.getMap().panTo(newCenter); this.startPointOnScreen = pointScreen; } ... @Override public void onMousePressed(MouseEvent event) { // do not supper() to block the built-in navigation this.startPointOnScreen = event.getLocationOnScreen(); } ... @Override public void onMouseWheelMoved(MouseWheelEvent event) { // do not supper() to block the built-in navigation java.awt.Point pointScreen = MouseInfo.getPointerInfo().getLocation(); // java.awt.Point pointScreen = event.getLocationOnScreen(); // => always return 0,0 Point pointCenter = this.getMap().toMapPoint(pointScreen.x, pointScreen.y); // Turn ON animation - Add this to keep^a nice & smooth zoomIn/Out this.getMap().setAnimationMode(AnimationMode.ANIMATE); int notches = event.getWheelRotation(); if (notches < 0) { // Zoom in this.getMap().zoom(1/factor, pointCenter); } else { // Zoom out this.getMap().zoom(factor, pointCenter); } // Turn OFF animation - Add this to keep^a nice & smooth zoomIn/Out this.getMap().setAnimationMode(AnimationMode.NONE); }
// Desactivate Built-in navigation btnCustomizedPanTo = new JButton(); btnCustomizedPanTo.setText("ACTIVATE customized panTo"); btnCustomizedPanTo.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { btnBuiltInPanTo.setEnabled(true); btnCustomizedPanTo.setEnabled(false); // activate the MapOverlay to BLOCK Built-In navigation, and manage customized panTo mapEventsOverlay.setActive(true); // Turn OFF animation to improve customized PANTO - Here !! map.setAnimationMode(AnimationMode.NONE); } }); toolBar.add(btnCustomizedPanTo);