View Javadoc
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          // addWms(map);
45          return map;
46      }
47  
48      private static Layer createCoastlineLayer() {
49          try {
50              // File file = new File(
51              // "/home/dxm/Downloads/shapefile-australia-coastline-polygon/cstauscd_r.shp");
52              File file = new File("src/main/resources/shapes/countries.shp");
53              FileDataStore store = FileDataStoreFinder.getDataStore(file);
54              SimpleFeatureSource featureSource = store.getFeatureSource();
55  
56              // Style style = SLD.createSimpleStyle(featureSource.getSchema());
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          // picture location
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          // URL wmsUrl = WMSChooser.showChooseWMS();
89  
90          WebMapServer wms;
91          try {
92              String url = "http://129.206.228.72/cached/osm?Request=GetCapabilities";
93              // String url = "http://sarapps.amsa.gov.au:8080/cts-gis/wms";
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 }