package au.gov.amsa.animator; import java.awt.Color; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.List; import org.geotools.data.FileDataStore; import org.geotools.data.FileDataStoreFinder; import org.geotools.data.simple.SimpleFeatureSource; import org.geotools.data.wms.WebMapServer; import org.geotools.feature.DefaultFeatureCollection; import org.geotools.feature.simple.SimpleFeatureBuilder; import org.geotools.feature.simple.SimpleFeatureTypeBuilder; import org.geotools.geometry.jts.JTSFactoryFinder; import org.geotools.map.FeatureLayer; import org.geotools.map.Layer; import org.geotools.map.MapContent; import org.geotools.map.WMSLayer; import org.geotools.ows.ServiceException; import org.geotools.referencing.crs.DefaultGeographicCRS; import org.geotools.styling.SLD; import org.geotools.styling.Style; import org.geotools.swing.wms.WMSLayerChooser; import org.opengis.feature.simple.SimpleFeature; import org.opengis.feature.simple.SimpleFeatureType; import com.vividsolutions.jts.geom.Coordinate; import com.vividsolutions.jts.geom.GeometryFactory; import com.vividsolutions.jts.geom.Point; public class Map { private static final float CANBERRA_LAT = -35.3075f; private static final float CANBERRA_LONG = 149.1244f; public static MapContent createMap() { final MapContent map = new MapContent(); map.setTitle("Animator"); map.getViewport(); map.addLayer(createCoastlineLayer()); map.addLayer(createExtraFeatures()); // addWms(map); return map; } private static Layer createCoastlineLayer() { try { // File file = new File( // "/home/dxm/Downloads/shapefile-australia-coastline-polygon/cstauscd_r.shp"); File file = new File("src/main/resources/shapes/countries.shp"); FileDataStore store = FileDataStoreFinder.getDataStore(file); SimpleFeatureSource featureSource = store.getFeatureSource(); // Style style = SLD.createSimpleStyle(featureSource.getSchema()); Style style = SLD.createPolygonStyle(Color.black, new Color(242, 237, 206), 1); Layer layer = new FeatureLayer(featureSource, style); return layer; } catch (IOException e) { throw new RuntimeException(e); } } private static Layer createExtraFeatures() { SimpleFeatureTypeBuilder b = new SimpleFeatureTypeBuilder(); b.setName("Location"); b.setCRS(DefaultGeographicCRS.WGS84); // picture location b.add("geom", Point.class); final SimpleFeatureType TYPE = b.buildFeatureType(); GeometryFactory gf = JTSFactoryFinder.getGeometryFactory(); Point point = gf.createPoint(new Coordinate(CANBERRA_LONG, CANBERRA_LAT)); SimpleFeatureBuilder builder = new SimpleFeatureBuilder(TYPE); builder.add(point); SimpleFeature feature = builder.buildFeature("Canberra"); DefaultFeatureCollection features = new DefaultFeatureCollection(null, null); features.add(feature); Style style = SLD.createPointStyle("Star", Color.BLUE, Color.BLUE, 0.3f, 10); return new FeatureLayer(features, style); } static void addWms(MapContent map) { // URL wmsUrl = WMSChooser.showChooseWMS(); WebMapServer wms; try { String url = "http://129.206.228.72/cached/osm?Request=GetCapabilities"; // String url = "http://sarapps.amsa.gov.au:8080/cts-gis/wms"; wms = new WebMapServer(new URL(url)); } catch (ServiceException | IOException e) { throw new RuntimeException(e); } List<org.geotools.data.ows.Layer> wmsLayers = WMSLayerChooser.showSelectLayer(wms); for (org.geotools.data.ows.Layer wmsLayer : wmsLayers) { System.out.println("adding " + wmsLayer.getTitle()); WMSLayer displayLayer = new WMSLayer(wms, wmsLayer); map.addLayer(displayLayer); } } }