-
Notifications
You must be signed in to change notification settings - Fork 0
/
Main.java
150 lines (125 loc) · 5.71 KB
/
Main.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
import gov.nasa.worldwind.*;
import gov.nasa.worldwind.avlist.*;
import gov.nasa.worldwind.geom.Position;
import gov.nasa.worldwind.layers.RenderableLayer;
import gov.nasa.worldwind.render.*;
import gov.nasa.worldwindx.examples.ApplicationTemplate;
import org.json.*;
import java.io.*;
import java.awt.*;
import java.util.regex.*;
/**
*
* @see gov.nasa.worldwindx.examples.PlacemarkLabelEditing
*
* @author tag
* @version $Id: Placemarks.java 2812 2015-02-17 21:00:43Z tgaskins $
*/
public class Main extends ApplicationTemplate
{
public static class AppFrame extends ApplicationTemplate.AppFrame
{
//private List<PointPlacemark> list= new ArrayList<PointPlacemark>();
private static final double ELEVATION = 1e4;
final RenderableLayer firstLayer = new RenderableLayer();
final RenderableLayer secondLayer = new RenderableLayer();
final RenderableLayer thirdLayer = new RenderableLayer();
final RenderableLayer fourthLayer = new RenderableLayer();
Pattern pattern20 = Pattern.compile("\\/20\\d\\d");
Pattern pattern19 = Pattern.compile("\\/19\\d\\d");
Pattern pattern18 = Pattern.compile("\\/18\\d\\d");
Pattern pattern17 = Pattern.compile("\\/17\\d\\d");
public AppFrame()
{
super(true, true, false);
firstLayer.setName("2000 - Present");
secondLayer.setName("1900 - 2000");
thirdLayer.setName("1800 - 1900");
fourthLayer.setName("1700 - 1800");
try{
InputStream is = new FileInputStream("./convertcsv.json");
String jsonData = readSource(is);
parseLibrary(firstLayer, jsonData);
} catch(IOException e){
System.out.println("Error reading file...");
e.printStackTrace();
} catch(JSONException j){
System.out.println("Error parsing...");
j.printStackTrace();
}
// PointPlacemark pp = new PointPlacemark(Position.fromDegrees(28, -102, 1e4));
// pp.setLabelText("Placemark A");
// pp.setValue(AVKey.DISPLAY_NAME, "Clamp to ground, Label, Semi-transparent, Audio icon");
// pp.setLineEnabled(false);
// pp.setAltitudeMode(WorldWind.CLAMP_TO_GROUND);
// pp.setEnableLabelPicking(true); // enable label picking for this placemark
// PointPlacemarkAttributes attrs = new PointPlacemarkAttributes();
// attrs.setImageAddress("gov/nasa/worldwindx/examples/images/audioicon-64.png");
// attrs.setImageColor(new Color(1f, 1f, 1f, 0.6f));
// attrs.setScale(0.6);
//// attrs.setImageOffset(new Offset(19d, 8d, AVKey.PIXELS, AVKey.PIXELS));
// attrs.setLabelOffset(new Offset(0.9d, 0.6d, AVKey.FRACTION, AVKey.FRACTION));
// pp.setAttributes(attrs);
// baseLayer.addRenderable(pp);
// Add the baseLayer to the model.
insertBeforeCompass(getWwd(), firstLayer);
insertBeforeCompass(getWwd(), secondLayer);
insertBeforeCompass(getWwd(), thirdLayer);
insertBeforeCompass(getWwd(), fourthLayer);
}
void parseLibrary(RenderableLayer layer, String jsonData) throws JSONException{
JSONArray library = new JSONArray(jsonData);
for (int index = 0; index < library.length(); index++) {
JSONObject meteorite = library.getJSONObject(index);
parseMeteorite(meteorite);
}
}
void parseMeteorite(JSONObject meteorite) throws JSONException{
String name = meteorite.getString("name");
String date = meteorite.getString("year");
//String id = meteorite.getString("id");
double lat = meteorite.getDouble("reclat");
double lon = meteorite.getDouble("reclong");
PointPlacemark pp = new PointPlacemark(Position.fromDegrees(lat, lon, ELEVATION));
//pp.setLabelText(name + ", " + date);
pp.setValue(AVKey.DISPLAY_NAME, (name + ", " + date));
pp.setLineEnabled(false);
pp.setAltitudeMode(WorldWind.CLAMP_TO_GROUND);
pp.setEnableLabelPicking(true); // enable label picking for this placemark
PointPlacemarkAttributes attrs = new PointPlacemarkAttributes();
attrs.setImageAddress("./gov/nasa/worldwindx/examples/images/audioicon-64.png");
attrs.setImageColor(new Color(1f, 1f, 1f, 0.6f));
attrs.setScale(0.4);
// attrs.setImageOffset(new Offset(19d, 8d, AVKey.PIXELS, AVKey.PIXELS));
attrs.setLabelOffset(new Offset(0.9d, 0.6d, AVKey.FRACTION, AVKey.FRACTION));
pp.setAttributes(attrs);
if (pattern20.matcher(date).find()) {
firstLayer.addRenderable(pp);
}
if (pattern19.matcher(date).find()) {
secondLayer.addRenderable(pp);
}
if (pattern18.matcher(date).find()) {
thirdLayer.addRenderable(pp);
}
if (pattern17.matcher(date).find()) {
thirdLayer.addRenderable(pp);
}
}
private String readSource(InputStream is) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line;
while((line = br.readLine()) != null) {
sb.append(line);
sb.append("\n");
}
br.close();
return sb.toString();
}
}
public static void main(String[] args)
{
ApplicationTemplate.start("World Wind Placemarks", AppFrame.class);
}
}