Ignore:
Timestamp:
2005-10-08T17:14:54+02:00 (14 years ago)
Author:
imi
Message:
  • reverted to 14, but kept the global Projection.
  • improved the preference settings for projections.
Location:
src/org/openstreetmap/josm/data/projection
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • src/org/openstreetmap/josm/data/projection/LatitudeLongitude.java

    r1 r16  
    11package org.openstreetmap.josm.data.projection;
    22
    3 import javax.swing.JPanel;
     3import javax.swing.JComponent;
    44
    55import org.openstreetmap.josm.data.GeoPoint;
     
    3030
    3131        @Override
    32         public String description() {
    33                 return "Use lat/lon values directly.";
     32        public JComponent getConfigurationPanel() {
     33                return null;
    3434        }
    3535
    3636        @Override
    37         public JPanel getConfigurationPanel() {
    38                 return null;
     37        public void commitConfigurationPanel() {
    3938        }
    4039}
  • src/org/openstreetmap/josm/data/projection/Projection.java

    r15 r16  
    4747        abstract public String toString();
    4848       
    49         /**
    50          * Describe the projection converter. Give examples, where it is best to use
    51          * and maybe a reference link to more information about the converter.
    52          */
    53         abstract public String description();
    54 
    55        
    56 
    5749        // miscellous functions
    5850       
    5951        /**
    6052         * If the projection supports any configuration, this function return
    61          * the configuration panel. If no configuration needed, return null.
     53         * the configuration panel. If no configuration needed,
     54         * return <code>null</code>.
    6255         *
    63          * The items on the configuration panel should update the configuration
    64          * directly, so the changes are instantly visible on screen.
     56         * The items on the configuration panel should not update the configuration
     57         * directly, but remember changed settings so a call to commitConfigurationPanel
     58         * can set them.
     59         *
     60         * This function also rolls back all changes to the configuration panel interna
     61         * components.
    6562         */
    6663        abstract public JComponent getConfigurationPanel();
     64        /**
     65         * Commits any changes from components created by addToConfigurationPanel.
     66         * The projection should now obtain the new settings. If any setting has
     67         * changed, the implementation have to call to fireStateChanged to inform
     68         * the listeners.
     69         */
     70        abstract public void commitConfigurationPanel();
    6771
    6872        /**
  • src/org/openstreetmap/josm/data/projection/UTM.java

    r15 r16  
    11package org.openstreetmap.josm.data.projection;
    22
     3import java.awt.Font;
     4import java.awt.GridBagLayout;
    35import java.awt.event.ActionEvent;
    46import java.awt.event.ActionListener;
    57
    6 import javax.swing.BorderFactory;
    7 import javax.swing.Box;
     8import javax.swing.JButton;
    89import javax.swing.JComboBox;
    910import javax.swing.JComponent;
    1011import javax.swing.JLabel;
     12import javax.swing.JOptionPane;
     13import javax.swing.JPanel;
    1114import javax.swing.JSpinner;
    1215import javax.swing.SpinnerNumberModel;
    13 import javax.swing.border.Border;
    14 import javax.swing.event.ChangeEvent;
    15 import javax.swing.event.ChangeListener;
    1616
    1717import org.openstreetmap.josm.data.Bounds;
    1818import org.openstreetmap.josm.data.GeoPoint;
    1919import org.openstreetmap.josm.data.osm.DataSet;
     20import org.openstreetmap.josm.gui.GBC;
     21import org.openstreetmap.josm.gui.Main;
    2022
    2123/**
     
    9395        protected Ellipsoid ellipsoid = allEllipsoids[allEllipsoids.length-1];
    9496
     97        /**
     98         * Combobox with all ellipsoids for the configuration panel
     99         */
     100        private JComboBox ellipsoidCombo = new JComboBox(allEllipsoids);
     101        /**
     102         * Spinner with all possible zones for the configuration panel
     103         */
     104        private JSpinner zoneSpinner = new JSpinner(new SpinnerNumberModel(1,1,60,1));
     105        /**
     106         * Hemisphere combo for the configuration panel
     107         */
     108        private JComboBox hemisphereCombo = new JComboBox(Hemisphere.values());
     109
    95110       
    96111        @Override
     
    168183        }
    169184
    170         @Override
    171         public String description() {
    172                 return "UTM projection ported from Ben Gimpert's ruby port.\n" +
    173                         "http://www.openstreetmap.org/websvn/filedetails.php?repname=" +
    174                         "OpenStreetMap&path=%2Futils%2Ftiger_import%2Ftiger%2Futm.rb";
    175         }
    176 
     185        /**
     186         * Helper class for the zone detection
     187         * @author imi
     188         */
     189        private class ZoneData {
     190                int zone = 0;
     191                Hemisphere hemisphere = Hemisphere.north;
     192        }
     193        /**
     194         * Try to autodetect the zone and hemisphere from the dataset.
     195         * @param dataSet The dataset to extrakt zone information from.
     196         * @return The zone data extrakted from the dataset.
     197         */
     198        private ZoneData autoDetect(DataSet dataSet) {
     199                ZoneData zd = new ZoneData();
     200               
     201                Bounds b = dataSet.getBoundsLatLon();
     202                if (b == null)
     203                        return zd;
     204                GeoPoint center = b.centerLatLon();
     205                double lat = center.lat;
     206                double lon = center.lon;
     207                // make sure the longitude is between -180.00 .. 179.9
     208                double long_temp = (lon + 180) - (Math.floor((lon + 180) / 360) * 360) - 180;
     209               
     210                zd.zone = (int)((long_temp + 180) / 6) + 1;
     211                if ((lat >= 56.0) && (lat < 64.0) && (long_temp >= 3.0) && (long_temp < 12.0))
     212                        zd.zone = 32;
     213                // special zones for Svalbard
     214                if ((lat >= 72.0) && (lat < 84.0))
     215                {
     216                        if ((long_temp >= 0.0) && (long_temp < 9.0))
     217                                zd.zone = 31;
     218                        else if ((long_temp >= 9.0) && (long_temp < 21.0))
     219                                zd.zone = 33;
     220                        else if ((long_temp >= 21.0) && (long_temp < 33.0))
     221                                zd.zone = 35;
     222                        else if ((long_temp >= 33.0) && (long_temp < 42.0))
     223                                zd.zone = 37;
     224                }
     225                zd.hemisphere = lat > 0 ? Hemisphere.north : Hemisphere.south;
     226                return zd;
     227        }
     228       
    177229        /**
    178230         * If the zone is not already set, calculate it from this dataset.
     
    184236        public void init(DataSet dataSet) {
    185237                if (zone == 0) {
    186                         Bounds b = dataSet.getBoundsLatLon();
    187                         if (b == null)
    188                                 return;
    189                         GeoPoint center = b.centerLatLon();
    190                         double lat = center.lat;
    191                         double lon = center.lon;
    192                         // make sure the longitude is between -180.00 .. 179.9
    193                         double long_temp = (lon + 180) - (Math.floor((lon + 180) / 360) * 360) - 180;
    194                        
    195                         zone = (int)((long_temp + 180) / 6) + 1;
    196                         if ((lat >= 56.0) && (lat < 64.0) && (long_temp >= 3.0) && (long_temp < 12.0))
    197                                 zone = 32;
    198                         // special zones for Svalbard
    199                         if ((lat >= 72.0) && (lat < 84.0))
    200                         {
    201                                 if ((long_temp >= 0.0) && (long_temp < 9.0))
    202                                         zone = 31;
    203                                 else if ((long_temp >= 9.0) && (long_temp < 21.0))
    204                                         zone = 33;
    205                                 else if ((long_temp >= 21.0) && (long_temp < 33.0))
    206                                         zone = 35;
    207                                 else if ((long_temp >= 33.0) && (long_temp < 42.0))
    208                                         zone = 37;
    209                         }
    210                         hemisphere = lat > 0 ? Hemisphere.north : Hemisphere.south;
     238                        ZoneData zd = autoDetect(dataSet);
     239                        zone = zd.zone;
     240                        hemisphere = zd.hemisphere;
    211241                }
    212242        }
     
    214244        @Override
    215245        public JComponent getConfigurationPanel() {
    216                 Border border = BorderFactory.createEmptyBorder(5,0,0,0);
    217                 Box panel = Box.createVerticalBox();
    218 
     246                JPanel panel = new JPanel(new GridBagLayout());
     247                GBC gbc = GBC.std().insets(0,0,5,0);
     248               
    219249                // ellipsoid
    220                 Box ellipsoidPanel = Box.createHorizontalBox();
    221                 ellipsoidPanel.add(new JLabel("Ellipsoid"));
    222                 final JComboBox ellipsoidCombo = new JComboBox(allEllipsoids);
    223                 ellipsoidPanel.add(ellipsoidCombo);
     250                panel.add(new JLabel("Ellipsoid"), gbc);
     251                panel.add(ellipsoidCombo, GBC.eol());
    224252                ellipsoidCombo.setSelectedItem(ellipsoid);
    225                 ellipsoidCombo.addActionListener(new ActionListener(){
     253               
     254                // zone
     255                panel.add(new JLabel("Zone"), gbc);
     256                panel.add(zoneSpinner, GBC.eol().insets(0,5,0,5));
     257                if (zone != 0)
     258                        zoneSpinner.setValue(zone);
     259               
     260                // hemisphere
     261                panel.add(new JLabel("Hemisphere"), gbc);
     262                panel.add(hemisphereCombo, GBC.eop());
     263                hemisphereCombo.setSelectedItem(hemisphere);
     264
     265                // Autodetect
     266                JButton autoDetect = new JButton("Detect");
     267                autoDetect.addActionListener(new ActionListener(){
    226268                        public void actionPerformed(ActionEvent e) {
    227                                 ellipsoid = (Ellipsoid)ellipsoidCombo.getSelectedItem();
    228                                 fireStateChanged();
     269                                if (Main.main.getMapFrame() != null) {
     270                                        DataSet ds = Main.main.getMapFrame().mapView.dataSet;
     271                                        ZoneData zd = autoDetect(ds);
     272                                        if (zd.zone == 0)
     273                                                JOptionPane.showMessageDialog(Main.main, "Autodetection failed. Maybe the data set contain too few information.");
     274                                        else {
     275                                                zoneSpinner.setValue(zd.zone);
     276                                                hemisphereCombo.setSelectedItem(zd.hemisphere);
     277                                        }
     278                                } else {
     279                                        JOptionPane.showMessageDialog(Main.main, "No data loaded. Please open a data set first.");
     280                                }
    229281                        }
    230282                });
    231                 ellipsoidPanel.setBorder(border);
    232                 panel.add(ellipsoidPanel);
    233                
    234                 // zone
    235                 Box zonePanel = Box.createHorizontalBox();
    236                 zonePanel.add(new JLabel("Zone"));
    237                 final JSpinner zoneSpinner = new JSpinner(new SpinnerNumberModel(zone,1,60,1));
    238                 zonePanel.add(zoneSpinner);
    239                 zoneSpinner.addChangeListener(new ChangeListener(){
    240                         public void stateChanged(ChangeEvent e) {
    241                                 zone = (Integer)zoneSpinner.getValue();
    242                                 fireStateChanged();
    243                         }
    244                 });
    245                 zonePanel.setBorder(border);
    246                 panel.add(zonePanel);
    247                
    248                 // hemisphere
    249                 Box hemispherePanel = Box.createHorizontalBox();
    250                 hemispherePanel.add(new JLabel("Hemisphere"));
    251                 final JComboBox hemisphereCombo = new JComboBox(Hemisphere.values());
    252                 hemispherePanel.add(hemisphereCombo);
    253                 hemisphereCombo.setSelectedItem(hemisphere);
    254                 hemisphereCombo.addActionListener(new ActionListener(){
    255                         public void actionPerformed(ActionEvent e) {
    256                                 hemisphere = (Hemisphere)hemisphereCombo.getSelectedItem();
    257                                 fireStateChanged();
    258                         }
    259                 });
    260                 hemispherePanel.setBorder(border);
    261                 panel.add(hemispherePanel);
    262 
     283                JLabel descLabel = new JLabel("Autodetect parameter based on loaded data");
     284                descLabel.setFont(descLabel.getFont().deriveFont(Font.ITALIC));
     285                panel.add(descLabel, GBC.eol().fill(GBC.HORIZONTAL));
     286                panel.add(autoDetect, GBC.eol().anchor(GBC.CENTER));
     287               
    263288                return panel;
    264289        }
     290
     291        @Override
     292        public void commitConfigurationPanel() {
     293                ellipsoid = (Ellipsoid)ellipsoidCombo.getSelectedItem();
     294                zone = (Integer)zoneSpinner.getValue();
     295                hemisphere = (Hemisphere)hemisphereCombo.getSelectedItem();
     296                fireStateChanged();
     297        }
    265298}
Note: See TracChangeset for help on using the changeset viewer.