/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2004-2008, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotools.data.wms.test; import java.awt.image.BufferedImage; import java.net.URL; import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.Random; import java.util.Set; import javax.imageio.ImageIO; import org.geotools.data.ows.Layer; import org.geotools.data.ows.StyleImpl; import org.geotools.data.ows.WMSCapabilities; import org.geotools.data.wms.WMSUtils; import org.geotools.data.wms.WebMapServer; import org.geotools.data.wms.request.GetMapRequest; import org.geotools.data.wms.response.GetMapResponse; import org.geotools.geometry.GeneralEnvelope; import org.geotools.ows.ServiceException; import org.geotools.referencing.CRS; import org.opengis.referencing.crs.CoordinateReferenceSystem; /** * @author Richard Gould * * TODO To change the template for this generated type comment go to * Window - Preferences - Java - Code Style - Code Templates * * @source $URL$ */ public class WebMapServerOnlineTest extends ServerTestCase { URL serverURL; URL brokenURL; private URL featureURL; /* * @see TestCase#setUp() */ protected void setUp() throws Exception { super.setUp(); // serverURL = new URL("http://demo.cubewerx.com/demo/cubeserv/cubeserv.cgi?CONFIG=main&SERVICE=WMS&?VERSION=1.3.0&REQUEST=GetCapabilities"); serverURL = new URL("http://terraservice.net/ogccapabilities.ashx?version=1.1.1&request=GetCapabilties"); // serverURL = new URL("http://www.mapserv.nl/wms?mosm&request=GetCapabilities&service=WMS&VERSION=1.1.1"); featureURL = new URL( "http://www2.dmsolutions.ca/cgi-bin/mswms_gmap?VERSION=1.1.0&REQUEST=GetCapabilities"); brokenURL = new URL("http://afjklda.com"); } /* * Class under test for void WebMapServer(URL) */ public void testWebMapServerURL() throws Exception { WebMapServer wms = new WebMapServer(serverURL); assertNotNull(wms.getCapabilities()); } public void testGetCapabilities() throws Exception { WebMapServer wms = new WebMapServer(serverURL); assertNotNull(wms.getCapabilities()); } public void testIssueGetMapRequest() throws Exception { WebMapServer wms = new WebMapServer(serverURL); WMSCapabilities capabilities = wms.getCapabilities(); GetMapRequest request = wms.createGetMapRequest(); //request.setVersion("1.1.1"); Layer[] layers = WMSUtils.getNamedLayers(capabilities); Iterator iter = Arrays.asList(layers).iterator(); int count = -1; while (iter.hasNext()) { Layer layer = (Layer) iter.next(); count++; if (count >= 5) { break; } List styles = layer.getStyles(); if (styles.size() == 0) { request.addLayer(layer); continue; } Random random = new Random(); int randomInt = random.nextInt(styles.size()); request.addLayer(layer, (StyleImpl) styles.get(randomInt)); } Set srss = WMSUtils.getSRSs(capabilities); request.setSRS((String) srss.iterator().next()); request.setDimensions("400", "400"); String format = "image/gif"; List formats = wms.getCapabilities().getRequest().getGetMap().getFormats(); if (!formats.contains("image/gif")) { format = (String) formats.get(0); } request.setFormat(format); request.setBBox("366800,2170400,816000,2460400"); //System.out.println(request.getFinalURL()); GetMapResponse response = (GetMapResponse) wms.issueRequest(request); assertEquals(response.getContentType(), format); //System.out.println("Content Type: " + response.getContentType()); BufferedImage image = ImageIO.read(response.getInputStream()); assertEquals(image.getHeight(), 400); } public void testIssueGetFeatureInfoRequest() throws Exception { /* TODO fix this // http://dev1.dmsolutions.ca/cgi-bin/mswms_gmap?LAYERS=DEMO&FORMAT=image/png&TRANSPARENT=TRUE&HEIGHT=213&REQUEST=GetMap&BBOX=-172.367,35.667300000000004,-11.562400000000014,83.8293&WIDTH=710&STYLES=&SRS=EPSG:4326&VERSION=1.1.1 WebMapServer wms = new WebMapServer(featureURL); WMSCapabilities capabilities = wms.getCapabilities(); assertNotNull(capabilities); GetMapRequest getMapRequest = wms.createGetMapRequest(); List layers = Arrays.asList(WMSUtils.getNamedLayers(capabilities)); List simpleLayers = new ArrayList(); Iterator iter = layers.iterator(); while (iter.hasNext()) { Layer layer = (Layer) iter.next(); SimpleLayer sLayer = new SimpleLayer(layer.getName(), ""); simpleLayers.add(sLayer); List styles = layer.getStyles(); if (styles.size() == 0) { sLayer.setStyle(""); continue; } Random random = new Random(); int randomInt = random.nextInt(styles.size()); sLayer.setStyle((String) styles.get(randomInt)); } getMapRequest.setLayers(simpleLayers); getMapRequest.setSRS("EPSG:4326"); getMapRequest.setDimensions("400", "400"); getMapRequest.setFormat("image/png"); getMapRequest.setBBox("-114.01268,59.4596930,-113.26043,60.0835794"); URL url2 = getMapRequest.getFinalURL(); GetFeatureInfoRequest request = wms.createGetFeatureInfoRequest(getMapRequest); request.setQueryLayers(WMSUtils.getQueryableLayers(capabilities)); request.setQueryPoint(200, 200); request.setInfoFormat("text/html"); System.out.println(request.getFinalURL()); GetFeatureInfoResponse response = (GetFeatureInfoResponse) wms.issueRequest(request); System.out.println(response.getContentType()); assertTrue( response.getContentType().indexOf("text/html") != -1 ); BufferedReader in = new BufferedReader(new InputStreamReader(response.getInputStream())); String line; boolean textFound = false; while ((line = in.readLine()) != null) { System.out.println(line); if (line.indexOf("Wood Buffalo National Park") != -1) { textFound = true; } } assertTrue(textFound); */ } public void testGetEnvelope() throws Exception { WebMapServer wms = new WebMapServer(featureURL); WMSCapabilities caps = wms.getCapabilities(); Layer layer = (Layer) caps.getLayerList().get(1); CoordinateReferenceSystem crs = CRS.decode("EPSG:4326"); GeneralEnvelope envelope = wms.getEnvelope(layer, crs); // minx="-172.367" miny="35.6673" maxx="-11.5624" maxy="83.8293" /> assertEquals(envelope.getMinimum(0), -172.367, 0.0); assertEquals(envelope.getMinimum(1), 35.6673, 0.0); assertEquals(envelope.getMaximum(0), -11.5624, 0.0); assertEquals(envelope.getMaximum(1), 83.8293, 0.0); crs = CRS.decode("EPSG:42304"); envelope = wms.getEnvelope(layer, crs); // minx="-2.2e+06" miny="-712631" maxx="3.0728e+06" maxy="3.84e+06" /> assertEquals(envelope.getMinimum(0), -2.2e+06, 0.0); assertEquals(envelope.getMinimum(1), -712631, 0.0); assertEquals(envelope.getMaximum(0), 3.0728e+06, 0.0); assertEquals(envelope.getMaximum(1), 3.84e+06, 0.0); layer = (Layer) caps.getLayerList().get(2); crs = CRS.decode("EPSG:4326"); envelope = wms.getEnvelope(layer, crs); // minx="-178.838" miny="31.8844" maxx="179.94" maxy="89.8254" /> assertEquals(envelope.getMinimum(0), -178.838, 0.0); assertEquals(envelope.getMinimum(1), 31.8844, 0.0); assertEquals(envelope.getMaximum(0), 179.94, 0.0); assertEquals(envelope.getMaximum(1), 89.8254, 0.0); } public void testServiceExceptions () throws Exception { WebMapServer wms = new WebMapServer(featureURL); GetMapRequest request = wms.createGetMapRequest(); request.addLayer("NoLayer", "NoStyle"); try { //System.out.println(request.getFinalURL()); GetMapResponse response = wms.issueRequest(request); assertTrue(false); } catch (ServiceException e) { //e.printStackTrace(); } } }