source: josm/trunk/src/org/openstreetmap/josm/data/projection/Puwg.java@ 5237

Last change on this file since 5237 was 5236, checked in by bastiK, 12 years ago
  • removed offset option from UTM which is probably rarely used. (custom projection can be used for this now, e.g. +proj=tmerc +lon_0=-3 +k_0=0.9996 +x_0=3500000 or +init=epsg:32630 +x_0=3500000)
  • fixed tests
  • Property svn:eol-style set to native
File size: 6.4 KB
Line 
1// License: GPL. Copyright 2007 by Immanuel Scholz and others
2// 2009 by Łukasz Stelmach
3package org.openstreetmap.josm.data.projection;
4
5import static org.openstreetmap.josm.tools.I18n.tr;
6
7import org.openstreetmap.josm.data.Bounds;
8import org.openstreetmap.josm.data.coor.LatLon;
9import org.openstreetmap.josm.data.projection.datum.GRS80Datum;
10import org.openstreetmap.josm.data.projection.proj.ProjParameters;
11
12/**
13 * PUWG 1992 and 2000 are the official cordinate systems in Poland.
14 * They use the same math as UTM only with different constants.
15 *
16 * @author steelman
17 */
18public class Puwg extends AbstractProjection {
19
20 public static final int DEFAULT_ZONE = 0;
21
22 private final int zone;
23
24 static public PuwgData[] zones = new PuwgData[] {
25 new Epsg2180(),
26 new Epsg2176(),
27 new Epsg2177(),
28 new Epsg2178(),
29 new Epsg2179()
30 };
31
32 public Puwg() {
33 this(DEFAULT_ZONE);
34 }
35
36 public Puwg(int zone) {
37 if (zone < 0 || zone >= zones.length)
38 throw new IllegalArgumentException();
39 ellps = Ellipsoid.GRS80;
40 proj = new org.openstreetmap.josm.data.projection.proj.TransverseMercator();
41 try {
42 proj.initialize(new ProjParameters() {{ ellps = Puwg.this.ellps; }});
43 } catch (ProjectionConfigurationException e) {
44 throw new RuntimeException(e);
45 }
46 datum = GRS80Datum.INSTANCE;
47 this.zone = zone;
48 PuwgData z = zones[zone];
49 x_0 = z.getPuwgFalseEasting();
50 y_0 = z.getPuwgFalseNorthing();
51 lon_0 = z.getPuwgCentralMeridianDeg();
52 k_0 = z.getPuwgScaleFactor();
53 }
54
55 @Override
56 public String toString() {
57 return tr("PUWG (Poland)");
58 }
59
60 @Override
61 public Integer getEpsgCode() {
62 return zones[zone].getEpsgCode();
63 }
64
65 @Override
66 public int hashCode() {
67 return getClass().getName().hashCode()+zone; // our only real variable
68 }
69
70 @Override
71 public String getCacheDirectoryName() {
72 return zones[zone].getCacheDirectoryName();
73 }
74
75 @Override
76 public Bounds getWorldBoundsLatLon() {
77 return zones[zone].getWorldBoundsLatLon();
78 }
79
80 public interface PuwgData {
81 double getPuwgCentralMeridianDeg();
82 double getPuwgCentralMeridian();
83 double getPuwgFalseEasting();
84 double getPuwgFalseNorthing();
85 double getPuwgScaleFactor();
86
87 // Projection methods
88 Integer getEpsgCode();
89 String toCode();
90 String getCacheDirectoryName();
91 Bounds getWorldBoundsLatLon();
92 }
93
94 public static class Epsg2180 implements PuwgData {
95
96 private static final double Epsg2180FalseEasting = 500000.0; /* y */
97 private static final double Epsg2180FalseNorthing = -5300000.0; /* x */
98 private static final double Epsg2180ScaleFactor = 0.9993;
99 private static final double Epsg2180CentralMeridian = 19.0;
100
101 @Override public String toString() {
102 return tr("PUWG 1992 (Poland)");
103 }
104
105 @Override
106 public Integer getEpsgCode() {
107 return 2180;
108 }
109
110 @Override
111 public String toCode() {
112 return "EPSG:" + getEpsgCode();
113 }
114
115 @Override
116 public String getCacheDirectoryName() {
117 return "epsg2180";
118 }
119
120 @Override
121 public Bounds getWorldBoundsLatLon()
122 {
123 return new Bounds(
124 new LatLon(49.00, 14.12),
125 new LatLon(54.84, 24.15), false);
126 }
127
128 @Override public double getPuwgCentralMeridianDeg() { return Epsg2180CentralMeridian; }
129 @Override public double getPuwgCentralMeridian() { return Math.toRadians(Epsg2180CentralMeridian); }
130 @Override public double getPuwgFalseEasting() { return Epsg2180FalseEasting; }
131 @Override public double getPuwgFalseNorthing() { return Epsg2180FalseNorthing; }
132 @Override public double getPuwgScaleFactor() { return Epsg2180ScaleFactor; }
133 }
134
135 abstract static class Puwg2000 implements PuwgData {
136
137 private static final double PuwgFalseEasting = 500000.0;
138 private static final double PuwgFalseNorthing = 0;
139 private static final double PuwgScaleFactor = 0.999923;
140 //final private double[] Puwg2000CentralMeridian = {15.0, 18.0, 21.0, 24.0};
141 final private Integer[] Puwg2000Code = { 2176, 2177, 2178, 2179 };
142 final private String[] Puwg2000CDName = { "epsg2176", "epsg2177", "epsg2178", "epsg2179" };
143
144 @Override public String toString() {
145 return tr("PUWG 2000 Zone {0} (Poland)", Integer.toString(getZone()));
146 }
147
148 @Override
149 public Integer getEpsgCode() {
150 return Puwg2000Code[getZoneIndex()];
151 }
152
153 @Override
154 public String toCode() {
155 return "EPSG:" + getEpsgCode();
156 }
157
158 @Override
159 public String getCacheDirectoryName() {
160 return Puwg2000CDName[getZoneIndex()];
161 }
162
163 @Override
164 public Bounds getWorldBoundsLatLon()
165 {
166 return new Bounds(
167 new LatLon(49.00, (3 * getZone()) - 1.5),
168 new LatLon(54.84, (3 * getZone()) + 1.5), false);
169 }
170
171 @Override public double getPuwgCentralMeridianDeg() { return getZone() * 3.0; }
172 @Override public double getPuwgCentralMeridian() { return Math.toRadians(getZone() * 3.0); }
173 @Override public double getPuwgFalseNorthing() { return PuwgFalseNorthing;}
174 @Override public double getPuwgFalseEasting() { return 1e6 * getZone() + PuwgFalseEasting; }
175 @Override public double getPuwgScaleFactor() { return PuwgScaleFactor; }
176 public abstract int getZone();
177
178 public int getZoneIndex() { return getZone() - 5; }
179
180 }
181
182 public static class Epsg2176 extends Puwg2000 {
183 private static final int PuwgZone = 5;
184
185 @Override
186 public int getZone() { return PuwgZone; }
187 }
188
189 public static class Epsg2177 extends Puwg2000 {
190 private static final int PuwgZone = 6;
191
192 @Override
193 public int getZone() { return PuwgZone; }
194 }
195
196 public static class Epsg2178 extends Puwg2000 {
197 private static final int PuwgZone = 7;
198
199 @Override
200 public int getZone() { return PuwgZone; }
201 }
202
203 public static class Epsg2179 extends Puwg2000 {
204 private static final int PuwgZone = 8;
205
206 @Override
207 public int getZone() { return PuwgZone; }
208 }
209}
Note: See TracBrowser for help on using the repository browser.