Skip to content

Commit d75d5bd

Browse files
authored
Add files via upload
1 parent cc78c48 commit d75d5bd

File tree

7 files changed

+2754
-0
lines changed

7 files changed

+2754
-0
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
2+
/**
3+
* Find N-closest quakes
4+
*
5+
* @author Duke Software/Learn to Program
6+
* @version 1.0, November 2015
7+
*/
8+
9+
import java.util.*;
10+
11+
public class ClosestQuakes
12+
{
13+
public ArrayList<QuakeEntry> getClosest(ArrayList<QuakeEntry> quakeData, Location current, int howMany){
14+
ArrayList<QuakeEntry> copy = new ArrayList<QuakeEntry>(quakeData);
15+
ArrayList<QuakeEntry> ret = new ArrayList<QuakeEntry>();
16+
17+
for(int j=0; j < howMany; j++) {
18+
int minIndex = 0;
19+
for(int k=1; k < copy.size(); k++){
20+
QuakeEntry quake = copy.get(k);
21+
Location loc = quake.getLocation();
22+
if (loc.distanceTo(current) <
23+
copy.get(minIndex).getLocation().distanceTo(current)){
24+
minIndex = k;
25+
}
26+
}
27+
28+
ret.add(copy.get(minIndex));
29+
copy.remove(minIndex);
30+
}
31+
System.out.println("Total Items: " + ret.size());
32+
return ret;
33+
}
34+
35+
public void findClosestQuakes(){
36+
EarthQuakeParser parser = new EarthQuakeParser();
37+
//String source = "data/nov20quakedata.atom";
38+
String source = "http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_week.atom";
39+
ArrayList<QuakeEntry> list = parser.read(source);
40+
System.out.println("read data for " + list.size());
41+
42+
Location jakarta = new Location(-6.211, 106.845);
43+
44+
ArrayList<QuakeEntry> close = getClosest(list, jakarta, 3);
45+
for(int k=0; k < close.size(); k++){
46+
QuakeEntry entry = close.get(k);
47+
double distanceInMeters = jakarta.distanceTo(entry.getLocation());
48+
System.out.printf("%4.2f\t %s\n", distanceInMeters/1000, entry);
49+
}
50+
System.out.println("number found: " + close.size());
51+
}
52+
}
Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
import java.util.*;
2+
import edu.duke.*;
3+
4+
public class EarthQuakeClient
5+
{
6+
7+
public ArrayList<QuakeEntry> filterByMagnitude(ArrayList<QuakeEntry> quakeData, double magMin)
8+
{
9+
ArrayList<QuakeEntry> answer = new ArrayList<QuakeEntry>();
10+
//TODO
11+
for (QuakeEntry qe : quakeData) {
12+
if (qe.getMagnitude() > magMin) {
13+
answer.add(qe);
14+
}
15+
}
16+
return answer;
17+
}
18+
19+
public ArrayList<QuakeEntry> filterByDistanceFrom(ArrayList<QuakeEntry> quakeData, double distMax, Location from)
20+
{
21+
ArrayList<QuakeEntry> answer = new ArrayList<QuakeEntry>();
22+
// TODO
23+
for (QuakeEntry qe : quakeData) {
24+
if (qe.getLocation().distanceTo(from) < distMax) {
25+
answer.add(qe);
26+
}
27+
}
28+
return answer;
29+
}
30+
31+
public ArrayList<QuakeEntry> filterByDepth(ArrayList<QuakeEntry> quakeData, double minDepth, double maxDepth)
32+
{
33+
ArrayList<QuakeEntry> answer = new ArrayList<QuakeEntry>();
34+
// TODO
35+
for (QuakeEntry qe : quakeData) {
36+
if (qe.getDepth() > minDepth && qe.getDepth()<maxDepth)
37+
{
38+
answer.add(qe);
39+
}
40+
}
41+
return answer;
42+
}
43+
44+
public ArrayList<QuakeEntry> filterByPhrase(ArrayList<QuakeEntry> quakeData, String where, String phrase)
45+
{
46+
ArrayList<QuakeEntry> answer = new ArrayList<QuakeEntry>();
47+
// TODO
48+
for (QuakeEntry qe : quakeData)
49+
{
50+
String title = qe.getInfo();
51+
if (where.equals("start") && title.startsWith(phrase))
52+
{
53+
answer.add(qe);
54+
}
55+
else if (where.equals("end") && title.endsWith(phrase))
56+
{
57+
answer.add(qe);
58+
}
59+
else if (where.equals("any") && title.contains(phrase))
60+
{
61+
answer.add(qe);
62+
}
63+
}
64+
return answer;
65+
}
66+
67+
public void quakesOfDepth()
68+
{
69+
EarthQuakeParser parser = new EarthQuakeParser();
70+
String source = "C:\\Users\\wali6\\Documents\\Programming Projects\\IDEA Projects\\src\\data\\nov20quakedata.atom";
71+
ArrayList<QuakeEntry> list = parser.read(source);
72+
73+
ArrayList<QuakeEntry> deep = filterByDepth(list, -10000.0 , -8000.0 );
74+
for (QuakeEntry qe: deep)
75+
{
76+
System.out.println(qe);
77+
}
78+
System.out.println("Total Items: "+ deep.size());
79+
}
80+
81+
public void quakesByPhrase()
82+
{
83+
EarthQuakeParser parser = new EarthQuakeParser();
84+
String source = "C:\\Users\\wali6\\Documents\\Programming Projects\\IDEA Projects\\src\\data\\nov20quakedata.atom";
85+
ArrayList<QuakeEntry> list = parser.read(source);
86+
87+
ArrayList<QuakeEntry> phrased = filterByPhrase(list, "any", "Creek" );
88+
for (QuakeEntry qe: phrased)
89+
{
90+
System.out.println(qe);
91+
}
92+
System.out.println("Total Items: "+ phrased.size());
93+
}
94+
95+
public void dumpCSV(ArrayList<QuakeEntry> list){
96+
System.out.println("Latitude,Longitude,Magnitude,Info");
97+
for(QuakeEntry qe : list){
98+
System.out.printf("%4.2f,%4.2f,%4.2f,%s\n",
99+
qe.getLocation().getLatitude(),
100+
qe.getLocation().getLongitude(),
101+
qe.getMagnitude(),
102+
qe.getInfo());
103+
}
104+
105+
}
106+
107+
public void bigQuakes()
108+
{
109+
EarthQuakeParser parser = new EarthQuakeParser();
110+
//String source = "http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_week.atom";
111+
String source = "data/nov20quakedata.atom";
112+
ArrayList<QuakeEntry> list = parser.read(source);
113+
System.out.println("read data for " + list.size() + " quakes");
114+
/*
115+
for (QuakeEntry qe : list)
116+
{
117+
if (qe.getMagnitude() > 5.0)
118+
{
119+
System.out.println(qe);
120+
}
121+
}
122+
*/
123+
ArrayList<QuakeEntry> listBig = filterByMagnitude(list, 5.0);
124+
for (QuakeEntry qe : listBig)
125+
{
126+
System.out.println(qe);
127+
}
128+
}
129+
130+
public void createCSV(){
131+
EarthQuakeParser parser = new EarthQuakeParser();
132+
String source = "data/nov20quakedata.atom";
133+
//String source = "http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_week.atom";
134+
ArrayList<QuakeEntry> list = parser.read(source);
135+
dumpCSV(list);
136+
System.out.println("# quakes read: " + list.size());
137+
}
138+
139+
public void closeToMe() {
140+
EarthQuakeParser parser = new EarthQuakeParser();
141+
//String source = "data/nov20quakedata.atom";
142+
String source = "http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_week.atom";
143+
ArrayList<QuakeEntry> list = parser.read(source);
144+
System.out.println("# quakes read: " + list.size());
145+
146+
//Durham, NC
147+
//Location city = new Location(35.988, -78.907);
148+
//Bridgeport, CA
149+
Location city = new Location(38.17, -118.82);
150+
ArrayList<QuakeEntry> close = filterByDistanceFrom(list, 1000*1000, city);
151+
for (int k=0; k< close.size(); k++) {
152+
QuakeEntry entry = close.get(k);
153+
double distanceInMeters = city.distanceTo(entry.getLocation());
154+
System.out.println(distanceInMeters/1000 + " " + entry.getInfo());
155+
}
156+
}
157+
158+
public static void main(String []args)
159+
{
160+
EarthQuakeClient ES = new EarthQuakeClient();
161+
ES.quakesByPhrase();
162+
}
163+
}
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
2+
3+
import java.io.File;
4+
import java.io.IOException;
5+
import java.util.*;
6+
7+
import javax.xml.parsers.DocumentBuilder;
8+
import javax.xml.parsers.DocumentBuilderFactory;
9+
import javax.xml.parsers.ParserConfigurationException;
10+
11+
import org.w3c.dom.*;
12+
import org.xml.sax.SAXException;
13+
14+
15+
public class EarthQuakeParser {
16+
17+
18+
public EarthQuakeParser() {
19+
// TODO Auto-generated constructor stub
20+
}
21+
22+
public ArrayList<QuakeEntry> read(String source) {
23+
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
24+
25+
try {
26+
DocumentBuilder builder = factory.newDocumentBuilder();
27+
28+
//Document document = builder.parse(new File(source));
29+
//Document document = builder.parse("http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_week.atom");
30+
Document document = null;
31+
32+
if (source.startsWith("http")){
33+
document = builder.parse(source);
34+
}
35+
else {
36+
document = builder.parse(new File(source));
37+
}
38+
//Document document = builder.parse("http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_week.atom");
39+
40+
NodeList nodeList = document.getDocumentElement().getChildNodes();
41+
42+
ArrayList<QuakeEntry> list = new ArrayList<QuakeEntry>();
43+
44+
for(int k=0; k < nodeList.getLength(); k++){
45+
Node node = nodeList.item(k);
46+
47+
if (node.getNodeName().equals("entry")) {
48+
Element elem = (Element) node;
49+
NodeList t1 = elem.getElementsByTagName("georss:point");
50+
NodeList t2 = elem.getElementsByTagName("title");
51+
NodeList t3 = elem.getElementsByTagName("georss:elev");
52+
double lat = 0.0, lon = 0.0, depth = 0.0;
53+
String title = "NO INFORMATION";
54+
double mag = 0.0;
55+
56+
if (t1 != null) {
57+
String s2 = t1.item(0).getChildNodes().item(0).getNodeValue();
58+
//System.out.print("point2: "+s2);
59+
String[] args = s2.split(" ");
60+
lat = Double.parseDouble(args[0]);
61+
lon = Double.parseDouble(args[1]);
62+
}
63+
if (t2 != null){
64+
String s2 = t2.item(0).getChildNodes().item(0).getNodeValue();
65+
66+
String mags = s2.substring(2,5);
67+
if (mags.contains("?")) {
68+
mag = 0.0;
69+
System.err.println("unknown magnitude in data");
70+
}
71+
else {
72+
mag = Double.parseDouble(mags);
73+
}
74+
int sp = s2.indexOf(" ",5);
75+
title = s2.substring(sp+1);
76+
if (title.startsWith("-")){
77+
int pos = title.indexOf(" ");
78+
title = title.substring(pos+1);
79+
}
80+
}
81+
if (t2 != null){
82+
String s2 = t3.item(0).getChildNodes().item(0).getNodeValue();
83+
depth = Double.parseDouble(s2);
84+
}
85+
QuakeEntry loc = new QuakeEntry(lat,lon,mag,title,depth);
86+
list.add(loc);
87+
}
88+
89+
}
90+
return list;
91+
}
92+
catch (ParserConfigurationException pce){
93+
System.err.println("parser configuration exception");
94+
}
95+
catch (SAXException se){
96+
System.err.println("sax exception");
97+
}
98+
catch (IOException ioe){
99+
System.err.println("ioexception");
100+
}
101+
return null;
102+
}
103+
104+
105+
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException{
106+
EarthQuakeParser xp = new EarthQuakeParser();
107+
//String source = "data/2.5_week.atom";
108+
String source = "http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_week.atom";
109+
ArrayList<QuakeEntry> list = xp.read(source);
110+
Collections.sort(list);
111+
for(QuakeEntry loc : list){
112+
System.out.println(loc);
113+
}
114+
System.out.println("# quakes = "+list.size());
115+
116+
}
117+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import java.util.*;
2+
import edu.duke.*;
3+
4+
public class LargestQuakes
5+
{
6+
7+
public void findLargestQuakes()
8+
{
9+
EarthQuakeParser parser = new EarthQuakeParser();
10+
String source = "C:\\Users\\wali6\\Documents\\Programming Projects\\IDEA Projects\\src\\data\\nov20quakedata.atom";
11+
ArrayList<QuakeEntry> list = parser.read(source);
12+
System.out.println("Total Items: " + list.size());
13+
14+
ArrayList<QuakeEntry> largeList = getLargest(list, 5);
15+
for(QuakeEntry qe: largeList)
16+
{
17+
System.out.println(qe);
18+
}
19+
}
20+
21+
public int indexOfLargest(ArrayList<QuakeEntry> data)
22+
{
23+
double maxMag = 0;
24+
int index = 0;
25+
26+
for(QuakeEntry qe: data)
27+
{
28+
if(qe.getMagnitude() >= maxMag)
29+
{
30+
maxMag = qe.getMagnitude();
31+
index = data.indexOf(qe);
32+
}
33+
}
34+
return index;
35+
}
36+
37+
public ArrayList<QuakeEntry> getLargest(ArrayList<QuakeEntry> quakeData, int howMany)
38+
{
39+
ArrayList<QuakeEntry> copy = new ArrayList<QuakeEntry>(quakeData);
40+
ArrayList<QuakeEntry> ret = new ArrayList<QuakeEntry>();
41+
42+
while(ret.size() < howMany || copy.size()==0)
43+
{
44+
int minIndex = indexOfLargest(copy);
45+
ret.add(copy.get(minIndex));
46+
copy.remove(minIndex);
47+
}
48+
return ret;
49+
}
50+
51+
public static void main(String []args)
52+
{
53+
LargestQuakes ES = new LargestQuakes();
54+
ES.findLargestQuakes();
55+
}
56+
57+
}

0 commit comments

Comments
 (0)