📄 dtedcoveragemanager.java
字号:
if (proj instanceof Cylindrical) LineType = OMGraphic.LINETYPE_STRAIGHT; else LineType = OMGraphic.LINETYPE_RHUMB; if (startx > endx) { ret1 = getCoverageRects(startx, starty, 179, endy, LineType); ret2 = getCoverageRects(-180, starty, endx, endy, LineType); ret1[0].add(ret2[0]); ret1[1].add(ret2[1]); ret1[2].add(ret2[2]); return ret1; } else return getCoverageRects(startx, starty, endx, endy, LineType); } /** * Method looks at the coverage arrays, and returns the applicable * rectangles representing the frame coverages. * * @param startx the western-most longitude. * @param starty the southern-most latitude. * @param endx the eastern-most longitude. * @param endy the northern-most latitude. * @param LineType the type of line to use on the rectangles - * Cylindrical projections can use straight lines, but * other projections should use Rhumb lines. * @return an array of lists, one for each level of dted data. */ public OMGraphicList[] getCoverageRects(int startx, int starty, int endx, int endy, int LineType) { OMGraphicList gl0 = new OMGraphicList(); OMGraphicList gl1 = new OMGraphicList(); OMGraphicList gl2 = new OMGraphicList(); OMGraphicList[] ret = new OMGraphicList[3]; ret[0] = gl0; ret[1] = gl1; ret[2] = gl2; OMRect rect; for (int lat = starty; lat <= endy; lat++) { for (int lon = startx; lon <= endx; lon++) { if (level0Frames[lat + 90][lon + 180]) { rect = new OMRect((float) lat, (float) lon, (float) lat + 1, (float) lon + 1, LineType); rect.setLinePaint(level0Color); if (fillRects) rect.setFillPaint(level0Color); gl0.add(rect); } if (level1Frames[lat + 90][lon + 180]) { rect = new OMRect((float) lat + .1f, (float) lon + .1f, (float) lat + .9f, (float) lon + .9f, LineType); rect.setLinePaint(level1Color); if (fillRects) rect.setFillPaint(level1Color); gl1.add(rect); } if (level2Frames[lat + 90][lon + 180]) { rect = new OMRect((float) lat + .2f, (float) lon + .2f, (float) lat + .8f, (float) lon + .8f, LineType); rect.setLinePaint(level2Color); if (fillRects) rect.setFillPaint(level2Color); gl2.add(rect); } } } return ret; } /** * Read in the coverage file, which is basically three * byte[180][360] written out to file. These are converted to * booleans. * * @param coverage the path to the file. * @return whether the file was read! True means yes. */ public boolean readCoverageFile(String coverage) { try { Debug.message("dtedcov", "DTEDCoverageManager: Reading coverage file - " + coverage); BinaryBufferedFile binFile = new BinaryBufferedFile(coverage); level0Frames = new boolean[180][]; level1Frames = new boolean[180][]; level2Frames = new boolean[180][]; byte[] row = new byte[360]; for (int level = 0; level < 3; level++) { for (int lat = 0; lat < 180; lat++) { binFile.read(row); if (level == 0) level0Frames[lat] = convertBytesToBooleans(row); else if (level == 1) level1Frames[lat] = convertBytesToBooleans(row); else level2Frames[lat] = convertBytesToBooleans(row); } } return true; } catch (IOException ioe) { Debug.message("dtedcov", "DTEDCoverageManager: No coverage file - will create one at " + coverage); level0Frames = null; level1Frames = null; level2Frames = null; return false; } } /** * Read in the coverage file, which is basically three * byte[180][360] written out to file. These are converted to * booleans. * * @param urlCov an url to a coverage file, if available. Should * be null if not used. * @param coverage the path to the file. * @return whether the file was read! True means yes. */ protected boolean readCoverageFile(String urlCov, String coverage) { URL url = null; BufferedInputStream bin = null; BinaryBufferedFile binFile = null; level0Frames = null; level1Frames = null; level2Frames = null; if (urlCov != null) { Debug.message("dtedcov", "DTEDCoverageManager: Reading coverage file from URL - " + urlCov); try { url = new URL(urlCov); bin = new BufferedInputStream(url.openStream()); } catch (MalformedURLException mue) { System.err.println("DTEDCoverageManager: Weird URL given : \"" + urlCov + "\""); bin = null; } catch (java.io.IOException e) { System.err.println("DTEDCoverageManager: Unable to read coverage file at \"" + urlCov + "\""); bin = null; } } if (bin == null && coverage != null) { try { Debug.message("dtedcov", "DTEDCoverageManager: Reading coverage file - " + coverage); binFile = new BinaryBufferedFile(coverage); } catch (java.io.IOException e) { System.err.println("DTEDCoverageManager: Unable to read coverage file at \"" + coverage + "\""); } } if (bin != null || binFile != null) { try { level0Frames = new boolean[180][]; level1Frames = new boolean[180][]; level2Frames = new boolean[180][]; byte[] row = new byte[360]; for (int level = 0; level < 3; level++) { for (int lat = 0; lat < 180; lat++) { if (bin != null) { for (int k = 0; k < row.length; k++) { row[k] = (byte) bin.read(); } } else binFile.read(row); if (level == 0) level0Frames[lat] = convertBytesToBooleans(row); else if (level == 1) level1Frames[lat] = convertBytesToBooleans(row); else level2Frames[lat] = convertBytesToBooleans(row); } } return true; } catch (IOException ioe) { System.err.println("DTECoverageLayer: Error reading coverage."); level0Frames = null; level1Frames = null; level2Frames = null; } } if (level0Frames == null) { System.err.println("DTEDCoverageManager: Error reading coverage file - will try to create a valid one at " + coverage); } return false; } /** * Convert the bytes read in to the file to the booleans used in * the coverage arrays. * * @param row array of bytes * @return array of booleans */ protected boolean[] convertBytesToBooleans(byte[] row) { boolean[] ret = new boolean[row.length]; for (int i = 0; i < row.length; i++) ret[i] = (row[i] == 0) ? false : true; return ret; } /** * Convert the booleans to write out to bytes. * * @param row the input array of booleans * @return an array of bytes. */ protected byte[] convertBooleansToBytes(boolean[] row) { byte[] ret = new byte[row.length]; for (int i = 0; i < row.length; i++) ret[i] = (row[i]) ? (byte) 1 : (byte) 0; return ret; } /** * Write the coverage summary to a file. * * @param covFilename the file name to write the arrays into. */ public void writeCoverageFile(String covFilename) { try { Debug.message("dtedcov", "DTEDCoverageManager: Writing coverage summary file..."); FileOutputStream binFile = new FileOutputStream(covFilename); byte[] row; for (int level = 0; level < 3; level++) { if (Debug.debugging("dtedcov")) { Debug.output("-- level " + level); } for (int lat = 0; lat < 180; lat++) { if (level == 0) { row = convertBooleansToBytes(level0Frames[lat]); } else if (level == 1) { row = convertBooleansToBytes(level1Frames[lat]); } else { row = convertBooleansToBytes(level2Frames[lat]); } binFile.write(row); if (Debug.debugging("dtedcov")) { Debug.output("--- latitude " + lat); } } } binFile.close(); } catch (IOException ioe) { System.err.println("DTEDCoverageManager: Error writing coverage file!"); } } /** * Add a ProgressListener that will display build progress. */ public void addProgressListener(ProgressListener list) { progressSupport.addProgressListener(list); } /** * Remove a ProgressListener that displayed build progress. */ public void removeProgressListener(ProgressListener list) { progressSupport.removeProgressListener(list); } /** * Clear all progress listeners. */ public void clearProgressListeners() { progressSupport.removeAll(); } /** * Fire an build update to progress listeners. * * @param frameNumber the current frame count * @param totalFrames the total number of frames. */ protected void fireProgressUpdate(int type, String task, int frameNumber, int totalFrames) { progressSupport.fireUpdate(type, task, totalFrames, frameNumber); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -