001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.preferences.projection; 003 004import static org.openstreetmap.josm.tools.I18n.tr; 005 006import java.util.Arrays; 007import java.util.Collection; 008import java.util.Collections; 009 010import org.openstreetmap.josm.tools.Logging; 011 012/** 013 * ProjectionChoice for various French overseas territories (EPSG:2969,2970,2972,2973,2975). 014 * <p> 015 * @see <a href="https://fr.wikipedia.org/wiki/Système_de_coordonnées_(cartographie)#Dans_les_d.C3.A9partements_d.27Outre-mer">DOM</a> 016 */ 017public class UTMFranceDOMProjectionChoice extends ListProjectionChoice { 018 019 private static final String FORT_MARIGOT_NAME = tr("Guadeloupe Fort-Marigot 1949"); 020 private static final String SAINTE_ANNE_NAME = tr("Guadeloupe Ste-Anne 1948"); 021 private static final String MARTINIQUE_NAME = tr("Martinique Fort Desaix 1952"); 022 private static final String REUNION_92_NAME = tr("Reunion RGR92"); 023 private static final String GUYANE_92_NAME = tr("Guyane RGFG95"); 024 private static final String[] UTM_GEODESIC_NAMES = {FORT_MARIGOT_NAME, SAINTE_ANNE_NAME, MARTINIQUE_NAME, REUNION_92_NAME, GUYANE_92_NAME}; 025 026 private static final Integer FORT_MARIGOT_EPSG = 2969; 027 private static final Integer SAINTE_ANNE_EPSG = 2970; 028 private static final Integer MARTINIQUE_EPSG = 2973; 029 private static final Integer REUNION_EPSG = 2975; 030 private static final Integer GUYANE_EPSG = 2972; 031 private static final Integer[] UTM_EPSGS = {FORT_MARIGOT_EPSG, SAINTE_ANNE_EPSG, MARTINIQUE_EPSG, REUNION_EPSG, GUYANE_EPSG }; 032 033 /** 034 * Constructs a new {@code UTMFranceDOMProjectionChoice}. 035 */ 036 public UTMFranceDOMProjectionChoice() { 037 super(tr("UTM France (DOM)"), /* NO-ICON */ "core:utmfrancedom", UTM_GEODESIC_NAMES, tr("UTM Geodesic system")); 038 } 039 040 @Override 041 protected String indexToZone(int index) { 042 return Integer.toString(index + 1); 043 } 044 045 @Override 046 protected int zoneToIndex(String zone) { 047 try { 048 return Integer.parseInt(zone) - 1; 049 } catch (NumberFormatException e) { 050 Logging.warn(e); 051 } 052 return defaultIndex; 053 } 054 055 @Override 056 public String getProjectionName() { 057 return UTM_GEODESIC_NAMES[index]; 058 } 059 060 @Override 061 public String getCurrentCode() { 062 return "EPSG:" + UTM_EPSGS[index]; 063 } 064 065 @Override 066 public String[] allCodes() { 067 return Arrays.stream(UTM_EPSGS).map(utmEpsg -> "EPSG:" + utmEpsg).toArray(String[]::new); 068 } 069 070 @Override 071 public Collection<String> getPreferencesFromCode(String code) { 072 for (int i = 0; i < UTM_EPSGS.length; i++) { 073 if (("EPSG:" + UTM_EPSGS[i]).equals(code)) 074 return Collections.singleton(Integer.toString(i+1)); 075 } 076 return null; 077 } 078}