2015-02-26 5 views
1

Я использую GeoTools 12.2 для разработки проекта библиотеки классов Java.GeoTools WebMapServer GetMapRequest issue

Во-первых, я работаю над модулем WMS GeoTools с this guide. Дела, что я не смог делаю запрос прибудет на карту, чтобы я мог получить документ возможностей и слои и т.д.

Моего WMS URL 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

Вам необходимо установить еще несколько параметров для вашего запроса, 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> 
+0

Благодарим вас за ответ. Я получил его, Он основывается на настройке размеров. Есть ли способ получить размеры по умолчанию (ширина, высота). Когда я пытаюсь использовать функции getdimensions GeoTools и т. Д., Значение измерения отсутствует. На самом деле я хочу программно установить все параметры GetMap. –

+0

Размеры определяют размер изображения, поэтому в зависимости от того, что вы делаете с изображением. Единственное, на что нужно обратить внимание, - это то, что размер рациона должен соответствовать искажению рамки или карте, будет искажено. –

+0

Я хочу добавить изображение к карте открыток в веб-странице. Как можно динамически вычислять значения ширины и высоты? Если я не могу правильно установить размеры, изображение не будет перекрываться с картой. –