<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/">
  <title>automatically detecting if a file contains a region of interest</title>
  <link rel="alternate" href="http://www.brockmann-consult.de/cms/cms/c/message_boards/find_thread?p_l_id=10944&amp;threadId=17380" />
  <subtitle>automatically detecting if a file contains a region of interest</subtitle>
  <entry>
    <title>RE: automatically detecting if a file contains a region of interest</title>
    <link rel="alternate" href="http://www.brockmann-consult.de/cms/cms/c/message_boards/find_message?p_l_id=10944&amp;messageId=17388" />
    <author>
      <name>Norman Fomferra</name>
    </author>
    <id>http://www.brockmann-consult.de/cms/cms/c/message_boards/find_message?p_l_id=10944&amp;messageId=17388</id>
    <updated>2009-08-25T13:37:11Z</updated>
    <published>2009-08-25T13:37:11Z</published>
    <summary type="html">Edel, what exactly do you want to export and in which format? Find attached the Java code &lt;span style='font-family: Courier New';&gt;ProductDownloader.java&lt;/span&gt; which you can use as template (remove *.txt extension before compiling it). The template code downloads the file from a given URL and writes it to some directory. Then it checks if it intersects the ROI given by lon1, lon2, lat1, lat2. If so, it extracts something (not specified yet), otherwise deletes the downloaded data file.&lt;br /&gt;&lt;br /&gt;&lt;div class='code'&gt;&lt;span class='code-lines'&gt;&amp;nbsp;1&lt;/span&gt;&lt;br /&gt;&lt;span class='code-lines'&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;URL url = new URL(args[0]);&lt;br /&gt;&lt;span class='code-lines'&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;File dir = new File(args[1]);&lt;br /&gt;&lt;span class='code-lines'&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;double lon1 = Double.parseDouble(args[2]);&lt;br /&gt;&lt;span class='code-lines'&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;double lon2 = Double.parseDouble(args[3]);&lt;br /&gt;&lt;span class='code-lines'&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;double lat1 = Double.parseDouble(args[4]);&lt;br /&gt;&lt;span class='code-lines'&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;double lat2 = Double.parseDouble(args[5]);&lt;br /&gt;&lt;span class='code-lines'&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;Rectangle2D roi = new Rectangle2D.Double(lon1, lat1, lon2 - lon1, lat2 - lat1);&lt;br /&gt;&lt;span class='code-lines'&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;File dataFile = downloadFile(url, dir);&lt;br /&gt;&lt;span class='code-lines'&gt;10&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;Product product = ProductIO.readProduct(dataFile, null);&lt;br /&gt;&lt;span class='code-lines'&gt;11&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;if (intersectsROI(product, roi)) {&lt;br /&gt;&lt;span class='code-lines'&gt;12&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; extractData(product, roi);&lt;br /&gt;&lt;span class='code-lines'&gt;13&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;} else {&lt;br /&gt;&lt;span class='code-lines'&gt;14&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; dataFile.delete();&lt;br /&gt;&lt;span class='code-lines'&gt;15&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;with &lt;br /&gt;&lt;br /&gt;&lt;div class='code'&gt;&lt;span class='code-lines'&gt;&amp;nbsp;1&lt;/span&gt;&lt;br /&gt;&lt;span class='code-lines'&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp; &amp;nbsp; private static boolean intersectsROI(Product product, Rectangle2D roi) {&lt;br /&gt;&lt;span class='code-lines'&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; final GeneralPath[] boundaries = ProductUtils.createGeoBoundaryPaths(product);&lt;br /&gt;&lt;span class='code-lines'&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; // If product scene crosses the anti-meridian the can be two boundaries.&lt;br /&gt;&lt;span class='code-lines'&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; for (GeneralPath boundary : boundaries) {&lt;br /&gt;&lt;span class='code-lines'&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;if (boundary.intersects(roi)) { // can also use use path.contains(roi)&lt;br /&gt;&lt;span class='code-lines'&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; return true;&lt;br /&gt;&lt;span class='code-lines'&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;span class='code-lines'&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;span class='code-lines'&gt;10&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; return false;&lt;br /&gt;&lt;span class='code-lines'&gt;11&lt;/span&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;and &lt;br /&gt;&lt;br /&gt;&lt;div class='code'&gt;&lt;span class='code-lines'&gt;&amp;nbsp;1&lt;/span&gt;&lt;br /&gt;&lt;span class='code-lines'&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp; &amp;nbsp; private static File downloadFile(URL url, File dir) throws IOException {&lt;br /&gt;&lt;span class='code-lines'&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; System.out.println(&amp;#034;Downloading &amp;#034; + url + &amp;#034;...&amp;#034;);&lt;br /&gt;&lt;span class='code-lines'&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; InputStream inputStream = new BufferedInputStream(url.openStream());&lt;br /&gt;&lt;span class='code-lines'&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; File outputFile = new File(dir, new File(url.getFile()).getName());&lt;br /&gt;&lt;span class='code-lines'&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; try {&lt;br /&gt;&lt;span class='code-lines'&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;final OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(outputFile));&lt;br /&gt;&lt;span class='code-lines'&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;try {&lt;br /&gt;&lt;span class='code-lines'&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; while (true) {&lt;br /&gt;&lt;span class='code-lines'&gt;10&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; int b = inputStream.read();&lt;br /&gt;&lt;span class='code-lines'&gt;11&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; if (b == -1) {&lt;br /&gt;&lt;span class='code-lines'&gt;12&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&lt;span class='code-lines'&gt;13&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;span class='code-lines'&gt;14&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; outputStream.write(b);&lt;br /&gt;&lt;span class='code-lines'&gt;15&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;span class='code-lines'&gt;16&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; System.out.println(&amp;#034;File written to &amp;#034; + outputFile);&lt;br /&gt;&lt;span class='code-lines'&gt;17&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;} finally {&lt;br /&gt;&lt;span class='code-lines'&gt;18&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; outputStream.close();&lt;br /&gt;&lt;span class='code-lines'&gt;19&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;span class='code-lines'&gt;20&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; } finally {&lt;br /&gt;&lt;span class='code-lines'&gt;21&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;inputStream.close();&lt;br /&gt;&lt;span class='code-lines'&gt;22&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;span class='code-lines'&gt;23&lt;/span&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; return outputFile;&lt;br /&gt;&lt;span class='code-lines'&gt;24&lt;/span&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;/div&gt;</summary>
    <dc:creator>Norman Fomferra</dc:creator>
    <dc:date>2009-08-25T13:37:11Z</dc:date>
  </entry>
  <entry>
    <title>automatically detecting if a file contains a region of interest</title>
    <link rel="alternate" href="http://www.brockmann-consult.de/cms/cms/c/message_boards/find_message?p_l_id=10944&amp;messageId=17379" />
    <author>
      <name>Edel OConnor</name>
    </author>
    <id>http://www.brockmann-consult.de/cms/cms/c/message_boards/find_message?p_l_id=10944&amp;messageId=17379</id>
    <updated>2009-08-25T10:30:50Z</updated>
    <published>2009-08-25T10:30:05Z</published>
    <summary type="html">I just had a question regarding manipulating the MERIS data with Beam -&lt;br /&gt; I am looking to write code that will download a data file, check if it contains a region of interest (e.g. by by specifying the latitude and longitude) and if so extract the data for that region of interest, if it doesn&amp;#039;t contain that region, then just disregard the file.&lt;br /&gt; Is it possible to write something automated like this relatively easy?</summary>
    <dc:creator>Edel OConnor</dc:creator>
    <dc:date>2009-08-25T10:30:05Z</dc:date>
  </entry>
</feed>

