GeoTools WebMapServer GetMapRequest问题

时间:2015-02-26 12:21:11

标签: java gis geotools

我正在使用GeoTools 12.2来开发java类库项目。

首先,我正在使用this guide处理GeoTools WMS模块。 我失败的一点就是获取地图请求,以便我可以获得功能文档和图层等。

我的wms网址http://sampleserver1.arcgisonline.com/ArcGIS/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer/WMSServer

它包含3个层次(州,河流,城市)

我正在使用结构来获取如下的地图操作。

GetMapRequest getMapRequest = wms.createGetMapRequest();//wms is my WebMapServer object

getMapRequest.addLayer(tempLayer);//tempLayer contains states layer

GetMapResponse response = (GetMapResponse) wms.issueRequest(getMapRequest);

BufferedImage image = ImageIO.read(response.getInputStream());

我还在指南中尝试了其他方法来做GetMapRequest,但我不能成功,总是将NullPointerException传递给BufferedImage对象。

你有什么建议?提前谢谢。

1 个答案:

答案 0 :(得分:1)

您需要为您的请求设置更多参数,WMS getMapResponse不会为其中的几个提供任何默认值(因为它们对您的请求/地图是唯一的)。所以你至少需要以下内容:

private BufferedImage getLayer(Layer l) {
    GetMapRequest getMapRequest = wms.createGetMapRequest();
    getMapRequest.addLayer(l);
    getMapRequest.setBBox(l.getEnvelope(DefaultGeographicCRS.WGS84));
    getMapRequest.setDimensions(200, 400);
    getMapRequest.setFormat("image/png");
    getMapRequest.setSRS("CRS:84");
    System.out.println(getMapRequest.getFinalURL());
    try {
        GetMapResponse response = wms.issueRequest(getMapRequest);
        BufferedImage image = ImageIO.read(response.getInputStream());
        return image;
    } catch (ServiceException | IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return null;
    }

}

通常,为了避免获得空图像,您可以对响应进行一些错误检查:

     if (response.getContentType().equalsIgnoreCase("image/png")) {
            BufferedImage image = ImageIO.read(response.getInputStream());
            return image;
        } else {
            StringWriter writer = new StringWriter();
            IOUtils.copy(response.getInputStream(), writer);
            String error = writer.toString();
            System.out.println(error);
            return null;
        }

会给你一个XML编码错误,告诉你出了什么问题:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<ServiceExceptionReport version="1.3.0"
  xmlns="http://www.opengis.net/ogc"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.opengis.net/ogc http://schemas.opengis.net/wms/1.3.0/exceptions_1_3_0.xsd">
  <ServiceException code="InvalidFormat">
Parameter 'bbox' can not be empty.
  </ServiceException>
</ServiceExceptionReport>