Changeset 8332 in josm for trunk/src/org/openstreetmap/josm/data
- Timestamp:
- 2015-05-06T00:23:51+02:00 (9 years ago)
- Location:
- trunk/src/org/openstreetmap/josm/data/projection/datum
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/data/projection/datum/NTV2GridShiftFile.java
r8308 r8332 27 27 import java.util.HashMap; 28 28 import java.util.List; 29 import java.util.Map; 30 31 import org.openstreetmap.josm.Main; 29 32 30 33 /** … … 86 89 } 87 90 91 private void readBytes(InputStream in, byte[] b) throws IOException { 92 if (in.read(b) < b.length) { 93 Main.error("Failed to read expected amount of bytes ("+ b.length +") from stream"); 94 } 95 } 96 88 97 /** 89 98 * Load a Grid Shift File from an InputStream. The Grid Shift node … … 98 107 * @throws IOException 99 108 */ 100 public void loadGridShiftFile(InputStream in, boolean loadAccuracy 109 public void loadGridShiftFile(InputStream in, boolean loadAccuracy) throws IOException { 101 110 byte[] b8 = new byte[8]; 102 111 boolean bigEndian = true; … … 104 113 toEllipsoid = ""; 105 114 topLevelSubGrid = null; 106 in.read(b8);115 readBytes(in, b8); 107 116 String overviewHeaderCountId = new String(b8, StandardCharsets.UTF_8); 108 117 if (!"NUM_OREC".equals(overviewHeaderCountId)) 109 118 throw new IllegalArgumentException("Input file is not an NTv2 grid shift file"); 110 in.read(b8);119 readBytes(in, b8); 111 120 overviewHeaderCount = NTV2Util.getIntBE(b8, 0); 112 121 if (overviewHeaderCount == 11) { … … 119 128 throw new IllegalArgumentException("Input file is not an NTv2 grid shift file"); 120 129 } 121 in.read(b8);122 in.read(b8);130 readBytes(in, b8); 131 readBytes(in, b8); 123 132 subGridHeaderCount = NTV2Util.getInt(b8, bigEndian); 124 in.read(b8);125 in.read(b8);133 readBytes(in, b8); 134 readBytes(in, b8); 126 135 subGridCount = NTV2Util.getInt(b8, bigEndian); 127 136 NTV2SubGrid[] subGrid = new NTV2SubGrid[subGridCount]; 128 in.read(b8);129 in.read(b8);137 readBytes(in, b8); 138 readBytes(in, b8); 130 139 shiftType = new String(b8, StandardCharsets.UTF_8); 131 in.read(b8);132 in.read(b8);140 readBytes(in, b8); 141 readBytes(in, b8); 133 142 version = new String(b8, StandardCharsets.UTF_8); 134 in.read(b8);135 in.read(b8);143 readBytes(in, b8); 144 readBytes(in, b8); 136 145 fromEllipsoid = new String(b8, StandardCharsets.UTF_8); 137 in.read(b8);138 in.read(b8);146 readBytes(in, b8); 147 readBytes(in, b8); 139 148 toEllipsoid = new String(b8, StandardCharsets.UTF_8); 140 in.read(b8);141 in.read(b8);149 readBytes(in, b8); 150 readBytes(in, b8); 142 151 fromSemiMajorAxis = NTV2Util.getDouble(b8, bigEndian); 143 in.read(b8);144 in.read(b8);152 readBytes(in, b8); 153 readBytes(in, b8); 145 154 fromSemiMinorAxis = NTV2Util.getDouble(b8, bigEndian); 146 in.read(b8);147 in.read(b8);155 readBytes(in, b8); 156 readBytes(in, b8); 148 157 toSemiMajorAxis = NTV2Util.getDouble(b8, bigEndian); 149 in.read(b8);150 in.read(b8);158 readBytes(in, b8); 159 readBytes(in, b8); 151 160 toSemiMinorAxis = NTV2Util.getDouble(b8, bigEndian); 152 161 … … 166 175 private NTV2SubGrid[] createSubGridTree(NTV2SubGrid[] subGrid) { 167 176 int topLevelCount = 0; 168 HashMap<String, List<NTV2SubGrid>> subGridMap = new HashMap<>();177 Map<String, List<NTV2SubGrid>> subGridMap = new HashMap<>(); 169 178 for (int i = 0; i < subGrid.length; i++) { 170 179 if ("NONE".equalsIgnoreCase(subGrid[i].getParentSubGridName())) { … … 321 330 return toEllipsoid; 322 331 } 323 324 332 } -
trunk/src/org/openstreetmap/josm/data/projection/datum/NTV2SubGrid.java
r8308 r8332 75 75 byte[] b4 = new byte[4]; 76 76 byte[] b1 = new byte[1]; 77 in.read(b8);78 in.read(b8);77 readBytes(in, b8); 78 readBytes(in, b8); 79 79 subGridName = new String(b8, StandardCharsets.UTF_8).trim(); 80 in.read(b8);81 in.read(b8);80 readBytes(in, b8); 81 readBytes(in, b8); 82 82 parentSubGridName = new String(b8, StandardCharsets.UTF_8).trim(); 83 in.read(b8);84 in.read(b8);83 readBytes(in, b8); 84 readBytes(in, b8); 85 85 created = new String(b8, StandardCharsets.UTF_8); 86 in.read(b8);87 in.read(b8);86 readBytes(in, b8); 87 readBytes(in, b8); 88 88 updated = new String(b8, StandardCharsets.UTF_8); 89 in.read(b8);90 in.read(b8);89 readBytes(in, b8); 90 readBytes(in, b8); 91 91 minLat = NTV2Util.getDouble(b8, bigEndian); 92 in.read(b8);93 in.read(b8);92 readBytes(in, b8); 93 readBytes(in, b8); 94 94 maxLat = NTV2Util.getDouble(b8, bigEndian); 95 in.read(b8);96 in.read(b8);95 readBytes(in, b8); 96 readBytes(in, b8); 97 97 minLon = NTV2Util.getDouble(b8, bigEndian); 98 in.read(b8);99 in.read(b8);98 readBytes(in, b8); 99 readBytes(in, b8); 100 100 maxLon = NTV2Util.getDouble(b8, bigEndian); 101 in.read(b8);102 in.read(b8);101 readBytes(in, b8); 102 readBytes(in, b8); 103 103 latInterval = NTV2Util.getDouble(b8, bigEndian); 104 in.read(b8);105 in.read(b8);104 readBytes(in, b8); 105 readBytes(in, b8); 106 106 lonInterval = NTV2Util.getDouble(b8, bigEndian); 107 107 lonColumnCount = 1 + (int)((maxLon - minLon) / lonInterval); 108 108 latRowCount = 1 + (int)((maxLat - minLat) / latInterval); 109 in.read(b8);110 in.read(b8);109 readBytes(in, b8); 110 readBytes(in, b8); 111 111 nodeCount = NTV2Util.getInt(b8, bigEndian); 112 112 if (nodeCount != lonColumnCount * latRowCount) … … 123 123 // certain VM which are not able to read byte blocks when the resource file is 124 124 // in a .jar file (Pieren) 125 in.read(b1); b4[0] = b1[0];126 in.read(b1); b4[1] = b1[0];127 in.read(b1); b4[2] = b1[0];128 in.read(b1); b4[3] = b1[0];125 readBytes(in, b1); b4[0] = b1[0]; 126 readBytes(in, b1); b4[1] = b1[0]; 127 readBytes(in, b1); b4[2] = b1[0]; 128 readBytes(in, b1); b4[3] = b1[0]; 129 129 latShift[i] = NTV2Util.getFloat(b4, bigEndian); 130 in.read(b1); b4[0] = b1[0];131 in.read(b1); b4[1] = b1[0];132 in.read(b1); b4[2] = b1[0];133 in.read(b1); b4[3] = b1[0];130 readBytes(in, b1); b4[0] = b1[0]; 131 readBytes(in, b1); b4[1] = b1[0]; 132 readBytes(in, b1); b4[2] = b1[0]; 133 readBytes(in, b1); b4[3] = b1[0]; 134 134 lonShift[i] = NTV2Util.getFloat(b4, bigEndian); 135 in.read(b1); b4[0] = b1[0];136 in.read(b1); b4[1] = b1[0];137 in.read(b1); b4[2] = b1[0];138 in.read(b1); b4[3] = b1[0];135 readBytes(in, b1); b4[0] = b1[0]; 136 readBytes(in, b1); b4[1] = b1[0]; 137 readBytes(in, b1); b4[2] = b1[0]; 138 readBytes(in, b1); b4[3] = b1[0]; 139 139 if (loadAccuracy) { 140 140 latAccuracy[i] = NTV2Util.getFloat(b4, bigEndian); 141 141 } 142 in.read(b1); b4[0] = b1[0];143 in.read(b1); b4[1] = b1[0];144 in.read(b1); b4[2] = b1[0];145 in.read(b1); b4[3] = b1[0];142 readBytes(in, b1); b4[0] = b1[0]; 143 readBytes(in, b1); b4[1] = b1[0]; 144 readBytes(in, b1); b4[2] = b1[0]; 145 readBytes(in, b1); b4[3] = b1[0]; 146 146 if (loadAccuracy) { 147 147 lonAccuracy[i] = NTV2Util.getFloat(b4, bigEndian); 148 148 } 149 } 150 } 151 152 private void readBytes(InputStream in, byte[] b) throws IOException { 153 if (in.read(b) < b.length) { 154 Main.error("Failed to read expected amount of bytes ("+ b.length +") from stream"); 149 155 } 150 156 } … … 194 200 * Bi-Linear interpolation of four nearest node values as described in 195 201 * 'GDAit Software Architecture Manual' produced by the <a 196 * href='http://www. sli.unimelb.edu.au/gda94'>Geomatics197 * Department of the University of Melbourne</a>202 * href='http://www.dtpli.vic.gov.au/property-and-land-titles/geodesy/geocentric-datum-of-australia-1994-gda94/gda94-useful-tools'> 203 * Geomatics Department of the University of Melbourne</a> 198 204 * @param a value at the A node 199 205 * @param b value at the B node 200 206 * @param c value at the C node 201 207 * @param d value at the D node 202 * @param XLongitude factor203 * @param YLatitude factor208 * @param x Longitude factor 209 * @param y Latitude factor 204 210 * @return interpolated value 205 211 */ 206 private final double interpolate(float a, float b, float c, float d, double X, double Y) {207 return a + (((double)b - (double)a) * X) + (((double)c - (double)a) * Y) +208 (((double)a + (double)d - b - c) * X * Y);212 private final double interpolate(float a, float b, float c, float d, double x, double y) { 213 return a + (((double)b - (double)a) * x) + (((double)c - (double)a) * y) + 214 (((double)a + (double)d - b - c) * x * y); 209 215 } 210 216 … … 213 219 * of the GridShiftFile. The algorithm is described in 214 220 * 'GDAit Software Architecture Manual' produced by the <a 215 * href='http://www. sli.unimelb.edu.au/gda94'>Geomatics216 * Department of the University of Melbourne</a>221 * href='http://www.dtpli.vic.gov.au/property-and-land-titles/geodesy/geocentric-datum-of-australia-1994-gda94/gda94-useful-tools'> 222 * Geomatics Department of the University of Melbourne</a> 217 223 * <p>This method is thread safe for both memory based and file based node data. 218 224 * @param gs GridShift object containing the coordinate to shift and the shift values
Note:
See TracChangeset
for help on using the changeset viewer.