1 package au.gov.amsa.animator;
2
3 import java.awt.Color;
4 import java.io.File;
5 import java.io.IOException;
6 import java.net.URL;
7 import java.util.List;
8
9 import org.geotools.data.FileDataStore;
10 import org.geotools.data.FileDataStoreFinder;
11 import org.geotools.data.simple.SimpleFeatureSource;
12 import org.geotools.data.wms.WebMapServer;
13 import org.geotools.feature.DefaultFeatureCollection;
14 import org.geotools.feature.simple.SimpleFeatureBuilder;
15 import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
16 import org.geotools.geometry.jts.JTSFactoryFinder;
17 import org.geotools.map.FeatureLayer;
18 import org.geotools.map.Layer;
19 import org.geotools.map.MapContent;
20 import org.geotools.map.WMSLayer;
21 import org.geotools.ows.ServiceException;
22 import org.geotools.referencing.crs.DefaultGeographicCRS;
23 import org.geotools.styling.SLD;
24 import org.geotools.styling.Style;
25 import org.geotools.swing.wms.WMSLayerChooser;
26 import org.opengis.feature.simple.SimpleFeature;
27 import org.opengis.feature.simple.SimpleFeatureType;
28
29 import com.vividsolutions.jts.geom.Coordinate;
30 import com.vividsolutions.jts.geom.GeometryFactory;
31 import com.vividsolutions.jts.geom.Point;
32
33 public class Map {
34
35 private static final float CANBERRA_LAT = -35.3075f;
36 private static final float CANBERRA_LONG = 149.1244f;
37
38 public static MapContent createMap() {
39 final MapContent map = new MapContent();
40 map.setTitle("Animator");
41 map.getViewport();
42 map.addLayer(createCoastlineLayer());
43 map.addLayer(createExtraFeatures());
44
45 return map;
46 }
47
48 private static Layer createCoastlineLayer() {
49 try {
50
51
52 File file = new File("src/main/resources/shapes/countries.shp");
53 FileDataStore store = FileDataStoreFinder.getDataStore(file);
54 SimpleFeatureSource featureSource = store.getFeatureSource();
55
56
57 Style style = SLD.createPolygonStyle(Color.black, new Color(242, 237, 206), 1);
58 Layer layer = new FeatureLayer(featureSource, style);
59 return layer;
60 } catch (IOException e) {
61 throw new RuntimeException(e);
62 }
63 }
64
65 private static Layer createExtraFeatures() {
66 SimpleFeatureTypeBuilder b = new SimpleFeatureTypeBuilder();
67 b.setName("Location");
68 b.setCRS(DefaultGeographicCRS.WGS84);
69
70 b.add("geom", Point.class);
71 final SimpleFeatureType TYPE = b.buildFeatureType();
72
73 GeometryFactory gf = JTSFactoryFinder.getGeometryFactory();
74 Point point = gf.createPoint(new Coordinate(CANBERRA_LONG, CANBERRA_LAT));
75
76 SimpleFeatureBuilder builder = new SimpleFeatureBuilder(TYPE);
77 builder.add(point);
78 SimpleFeature feature = builder.buildFeature("Canberra");
79 DefaultFeatureCollection features = new DefaultFeatureCollection(null, null);
80 features.add(feature);
81
82 Style style = SLD.createPointStyle("Star", Color.BLUE, Color.BLUE, 0.3f, 10);
83
84 return new FeatureLayer(features, style);
85 }
86
87 static void addWms(MapContent map) {
88
89
90 WebMapServer wms;
91 try {
92 String url = "http://129.206.228.72/cached/osm?Request=GetCapabilities";
93
94 wms = new WebMapServer(new URL(url));
95 } catch (ServiceException | IOException e) {
96 throw new RuntimeException(e);
97 }
98 List<org.geotools.data.ows.Layer> wmsLayers = WMSLayerChooser.showSelectLayer(wms);
99 for (org.geotools.data.ows.Layer wmsLayer : wmsLayers) {
100 System.out.println("adding " + wmsLayer.getTitle());
101 WMSLayer displayLayer = new WMSLayer(wms, wmsLayer);
102 map.addLayer(displayLayer);
103 }
104 }
105 }