org.openimaj.demos.sandbox.flickr.geo.PlotFlickrGeo.java Source code

Java tutorial

Introduction

Here is the source code for org.openimaj.demos.sandbox.flickr.geo.PlotFlickrGeo.java

Source

/**
 * Copyright (c) 2011, The University of Southampton and the individual contributors.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification,
 * are permitted provided that the following conditions are met:
 *
 *   *    Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 *
 *   *   Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 *
 *   *   Neither the name of the University of Southampton nor the names of its
 *    contributors may be used to endorse or promote products derived from this
 *    software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package org.openimaj.demos.sandbox.flickr.geo;

import java.awt.RenderingHints;
import java.io.BufferedReader;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.regex.Pattern;

import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.FastScatterPlot;
import org.jfree.ui.ApplicationFrame;
import org.openimaj.math.geometry.point.Coordinate;

public class PlotFlickrGeo {
    static class ImgRec implements Coordinate {
        public static final Pattern csvregex = Pattern.compile(",(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))");

        String farm;
        String server;
        String id;
        String secret;
        String originalSecret;
        String mediumUrl;
        String imageDir;
        String title;
        String description;
        String license;
        String datePosted;
        String dateTaken;
        String ownerid;
        String username;
        String accuracy;
        double latitude;
        double longitude;
        String tags;

        @Override
        public Number getOrdinate(int dimension) {
            if (dimension == 0)
                return latitude;
            return longitude;
        }

        @Override
        public void setOrdinate(int dimension, Number value) {
            if (dimension == 0)
                latitude = value.doubleValue();
            if (dimension == 1)
                longitude = value.doubleValue();
        }

        @Override
        public int getDimensions() {
            return 2;
        }

        public float getOrdinateValue(int dimension) {
            if (dimension == 0)
                return (float) latitude;
            return (float) longitude;
        }

        public static ImgRec makeImgRec(String s) {
            final String[] parts = csvregex.split(s);

            if (parts.length == 19) {
                if (parts[15].trim() != "null" && parts[16].trim() != "null") {
                    final ImgRec rec = new ImgRec();
                    rec.farm = parts[0].trim();
                    rec.server = parts[1].trim();
                    rec.id = parts[2].trim();
                    rec.secret = parts[3].trim();
                    rec.originalSecret = parts[4].trim();
                    rec.mediumUrl = parts[5].trim();
                    rec.imageDir = parts[6].trim();
                    rec.title = parts[7].trim();
                    rec.description = parts[8].trim();
                    rec.license = parts[9].trim();
                    rec.datePosted = parts[10].trim();
                    rec.dateTaken = parts[11].trim();
                    rec.ownerid = parts[12].trim();
                    rec.username = parts[13].trim();
                    rec.accuracy = parts[14].trim();
                    if (parts[15].trim().length() == 0)
                        return null;
                    rec.latitude = Double.parseDouble(parts[15].trim());
                    if (parts[16].trim().length() == 0)
                        return null;
                    rec.longitude = Double.parseDouble(parts[16].trim());
                    // rec.tags = parts[17].trim();

                    return rec;
                }
            }
            return null;
        }

        @Override
        public void readASCII(Scanner in) throws IOException {
        }

        @Override
        public String asciiHeader() {
            return null;
        }

        @Override
        public void readBinary(DataInput in) throws IOException {
        }

        @Override
        public byte[] binaryHeader() {
            return null;
        }

        @Override
        public void writeASCII(PrintWriter out) throws IOException {
        }

        @Override
        public void writeBinary(DataOutput out) throws IOException {
        }

        @Override
        public String toString() {
            String csv = "";
            csv += String.format("%s, ", farm);
            csv += String.format("%s, ", server);
            csv += String.format("%s, ", id);
            csv += String.format("%s, ", secret);
            csv += String.format("%s, ", originalSecret);
            csv += String.format("%s, ", mediumUrl);
            csv += String.format("%s, ", imageDir);
            csv += String.format("%s, ", title);
            csv += String.format("%s, ", description);
            csv += String.format("%s, ", license);
            csv += String.format("%s, ", datePosted);
            csv += String.format("%s, ", dateTaken);
            csv += String.format("%s, ", ownerid);
            csv += String.format("%s, ", username);
            csv += String.format("%s, ", accuracy);
            csv += String.format("%f, ", latitude);
            csv += String.format("%f, ", longitude);
            csv += String.format("%s, ", tags);
            csv += "\n";
            return csv;
        }
    }

    // public static void main(String[] args) throws IOException {
    // File inputcsv = new
    // File("/Volumes/Raid/FlickrCrawls/AllGeo16/images.csv");
    //
    // int size = 10000000;
    // List<float[]> data = new ArrayList<float[]>(size);
    // //read in images
    // BufferedReader br = new BufferedReader(new FileReader(inputcsv));
    // String line;
    // int i = 0;
    // while ((line = br.readLine()) != null) {
    // //ImgRec rec = ImgRec.makeImgRec(line);
    //
    // String [] parts = ImgRec.csvregex.split(line);
    //
    // if (parts.length == 19) {
    // String p15 = parts[15].trim();
    // String p16 = parts[16].trim();
    //
    // if (p15 != "null" && p16 != "null" && p15.length()>0 && p16.length()>0) {
    // float latitude = Float.parseFloat(p15);
    // float longitude = Float.parseFloat(p16);
    //
    // data.add(new float[] {longitude, latitude});
    // }
    // }
    //
    // if (i%10000 == 0) System.out.println(i);
    // if (i++ > size) break;
    // }
    //
    // System.out.println("Done reading");
    //
    // float[][] dataArr = new float[2][data.size()];
    // for (i=0; i<data.size(); i++) {
    // dataArr[0][i] = data.get(i)[0];
    // dataArr[1][i] = data.get(i)[1];
    // }
    //
    // NumberAxis domainAxis = new NumberAxis("X");
    // domainAxis.setRange(-180, 180);
    // NumberAxis rangeAxis = new NumberAxis("Y");
    // rangeAxis.setRange(-90, 90);
    // FastScatterPlot plot = new FastScatterPlot(dataArr, domainAxis,
    // rangeAxis);
    //
    // JFreeChart chart = new JFreeChart("Fast Scatter Plot", plot);
    // chart.getRenderingHints().put(RenderingHints.KEY_ANTIALIASING,
    // RenderingHints.VALUE_ANTIALIAS_ON);
    //
    // ChartPanel chartPanel = new ChartPanel(chart);
    // chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
    // final ApplicationFrame frame = new ApplicationFrame("Title");
    // frame.setContentPane(chartPanel);
    // frame.pack();
    // frame.setVisible(true);
    // }

    // public static void main(String[] args) throws IOException {
    // File inputcsv = new
    // File("/Volumes/Raid/FlickrCrawls/AllGeo16/images.csv");
    // File outputcsv = new File("/Users/jsh2/Desktop/world-geo.csv");
    //
    // BufferedWriter bw = new BufferedWriter(new FileWriter(outputcsv));
    //
    // //read in images
    // BufferedReader br = new BufferedReader(new FileReader(inputcsv));
    // String line;
    // int i = 0;
    // while ((line = br.readLine()) != null) {
    // String [] parts = ImgRec.csvregex.split(line);
    //
    // if (parts.length == 19) {
    // String p15 = parts[15].trim();
    // String p16 = parts[16].trim();
    //
    // if (p15 != "null" && p16 != "null" && p15.length()>0 && p16.length()>0) {
    // float latitude = Float.parseFloat(p15);
    // float longitude = Float.parseFloat(p16);
    //
    // bw.write(String.format("%f, %f\n", longitude, latitude));
    // }
    // }
    //
    // if (i++%10000 == 0) System.out.println(i);
    // }
    // }

    // public static void main(String[] args) throws IOException {
    // final File inputcsv = new File("/Users/jsh2/Desktop/world-geo.csv");
    // final List<float[]> data = new ArrayList<float[]>(10000000);
    //
    // // read in images
    // final BufferedReader br = new BufferedReader(new FileReader(inputcsv));
    // String line;
    // int i = 0;
    // while ((line = br.readLine()) != null) {
    // final String[] parts = line.split(",");
    //
    // final float longitude = Float.parseFloat(parts[0]);
    // final float latitude = Float.parseFloat(parts[1]);
    //
    // data.add(new float[] { longitude, latitude });
    //
    // if (i++ % 10000 == 0)
    // System.out.println(i);
    // }
    // br.close();
    //
    // System.out.println("Done reading");
    //
    // final float[][] dataArr = new float[2][data.size()];
    // for (i = 0; i < data.size(); i++) {
    // dataArr[0][i] = data.get(i)[0];
    // dataArr[1][i] = data.get(i)[1];
    // }
    //
    // final NumberAxis domainAxis = new NumberAxis("X");
    // domainAxis.setRange(-180, 180);
    // final NumberAxis rangeAxis = new NumberAxis("Y");
    // rangeAxis.setRange(-90, 90);
    // final FastScatterPlot plot = new FastScatterPlot(dataArr, domainAxis,
    // rangeAxis);
    //
    // final JFreeChart chart = new JFreeChart("Fast Scatter Plot", plot);
    // chart.getRenderingHints().put(RenderingHints.KEY_ANTIALIASING,
    // RenderingHints.VALUE_ANTIALIAS_ON);
    //
    // final ChartPanel chartPanel = new ChartPanel(chart);
    // chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
    // final ApplicationFrame frame = new ApplicationFrame("Title");
    // frame.setContentPane(chartPanel);
    // frame.pack();
    // frame.setVisible(true);
    // }

    public static void main(String[] args) throws IOException {
        final File inputcsv = new File("/Volumes/SSD/training_latlng");
        final List<double[]> data = new ArrayList<double[]>(10000000);

        // read in images
        final BufferedReader br = new BufferedReader(new FileReader(inputcsv));
        String line;
        int i = 0;
        br.readLine();
        while ((line = br.readLine()) != null) {
            final String[] parts = line.split(" ");

            final double longitude = Double.parseDouble(parts[2]);
            final double latitude = Double.parseDouble(parts[1]);

            data.add(new double[] { longitude, latitude });

            if (longitude >= -0.1 && longitude < 0 && latitude > 50 && latitude < 54)
                System.out.println(parts[0] + " " + latitude + " " + longitude);

            // if (i++ % 10000 == 0)
            // System.out.println(i);
        }
        br.close();

        System.out.println("Done reading");

        final float[][] dataArr = new float[2][data.size()];
        for (i = 0; i < data.size(); i++) {
            dataArr[0][i] = (float) data.get(i)[0];
            dataArr[1][i] = (float) data.get(i)[1];
        }

        final NumberAxis domainAxis = new NumberAxis("X");
        domainAxis.setRange(-180, 180);
        final NumberAxis rangeAxis = new NumberAxis("Y");
        rangeAxis.setRange(-90, 90);
        final FastScatterPlot plot = new FastScatterPlot(dataArr, domainAxis, rangeAxis);

        final JFreeChart chart = new JFreeChart("Fast Scatter Plot", plot);
        chart.getRenderingHints().put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        final ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
        final ApplicationFrame frame = new ApplicationFrame("Title");
        frame.setContentPane(chartPanel);
        frame.pack();
        frame.setVisible(true);
    }

}