GeoTools WebMapServer GetMapRequest 问题
GeoTools WebMapServer GetMapRequest issue
我正在使用 GeoTools 12.2 开发 java class 库项目。
首先,我正在使用 this guide 开发 GeoTools WMS 模块。
我失败的一点是获取地图请求,以便我可以获得功能文档和图层等。
它包含 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 对象。
你有什么建议?提前致谢。
您需要为您的请求设置更多参数,WMS getMapResponse 不为其中几个参数提供任何默认值(因为它们是您的 request/map 所独有的)。所以你至少需要以下内容:
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>
我正在使用 GeoTools 12.2 开发 java class 库项目。
首先,我正在使用 this guide 开发 GeoTools WMS 模块。 我失败的一点是获取地图请求,以便我可以获得功能文档和图层等。
它包含 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 对象。
你有什么建议?提前致谢。
您需要为您的请求设置更多参数,WMS getMapResponse 不为其中几个参数提供任何默认值(因为它们是您的 request/map 所独有的)。所以你至少需要以下内容:
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>