package com.revolsys.geometry.cs; import java.io.Serializable; import java.util.Arrays; import java.util.Map; import java.util.TreeMap; import com.revolsys.util.Equals; public class Projection implements Serializable, Comparable<Projection> { public static final String ALBERS_EQUAL_AREA = "Albers_Equal_Area"; public static final String LAMBERT_CONIC_CONFORMAL_1SP = "Lambert_Conic_Conformal_(1SP)"; public static final String LAMBERT_CONIC_CONFORMAL_2SP = "Lambert_Conic_Conformal_(2SP)"; public static final String LAMBERT_CONIC_CONFORMAL_2SP_BELGIUM = "Lambert_Conic_Conformal_(2SP_Belgium)"; public static final String MERCATOR = "Mercator"; public static final String MERCATOR_1SP = "Mercator_(1SP)"; public static final String MERCATOR_1SP_SPHERICAL = "Mercator_(1SP)_(Spherical)"; public static final String MERCATOR_2SP = "Mercator_(2SP)"; public static final String POPULAR_VISUALISATION_PSEUDO_MERCATOR = "Popular_Visualisation_Pseudo_Mercator"; private static final Map<String, String> PROJECTION_ALIASES = new TreeMap<>(); /** * */ private static final long serialVersionUID = 6199958151692874551L; public static final String TRANSVERSE_MERCATOR = "Transverse_Mercator"; static { for (final String alias : Arrays.asList(ALBERS_EQUAL_AREA, "Albers", "Albers_Equal_Area_Conic", "Albers_Conic_Equal_Area")) { addAlias(alias, ALBERS_EQUAL_AREA); } addAlias(LAMBERT_CONIC_CONFORMAL_1SP, LAMBERT_CONIC_CONFORMAL_1SP); addAlias(LAMBERT_CONIC_CONFORMAL_2SP, LAMBERT_CONIC_CONFORMAL_2SP); addAlias(LAMBERT_CONIC_CONFORMAL_2SP_BELGIUM, LAMBERT_CONIC_CONFORMAL_2SP_BELGIUM); addAlias(MERCATOR, MERCATOR); addAlias(MERCATOR_1SP, MERCATOR_1SP); addAlias(MERCATOR_1SP_SPHERICAL, MERCATOR_1SP_SPHERICAL); addAlias(MERCATOR_2SP, MERCATOR_2SP); addAlias(POPULAR_VISUALISATION_PSEUDO_MERCATOR, POPULAR_VISUALISATION_PSEUDO_MERCATOR); } public static void addAlias(String name, final String normalizedName) { name = name.toLowerCase().replaceAll("[^a-z0-9]", ""); PROJECTION_ALIASES.put(name, normalizedName); } public static String getNormalizedName(final String name) { if (name == null) { return null; } else { final String searchName = name.toLowerCase().replaceAll("[^a-z0-9]", ""); final String normalizedName = PROJECTION_ALIASES.get(searchName); if (normalizedName == null) { return name; } else { return normalizedName; } } } private Authority authority; private final String name; private final String normalizedName; public Projection(final String name) { this.name = name; this.normalizedName = getNormalizedName(name); } public Projection(final String name, final Authority authority) { this(name); this.authority = authority; } @Override public int compareTo(final Projection projection) { return getNormalizedName().compareTo(projection.getNormalizedName()); } @Override public boolean equals(final Object obj) { if (obj instanceof Projection) { final Projection projection = (Projection)obj; if (Equals.equals(this.authority, projection.authority)) { return true; } else { return getNormalizedName().equals(projection.getNormalizedName()); } } return false; } public Authority getAuthority() { return this.authority; } public String getName() { return this.name; } public String getNormalizedName() { return this.normalizedName; } @Override public int hashCode() { return getNormalizedName().hashCode(); } @Override public String toString() { return getNormalizedName(); } }