WMS Layer с использованием JXMapViewer не загружается

Используя базовый пример из источников JXMapViewer (ссылка на github), я изменил источник, чтобы вместо этого загружать плитки с сервера wms. Однако Tilefactory не загружает плитки правильно, несмотря на то, что тесты показывают, что URL-адрес сформирован правильно.

Единственная измененная часть:

    TileFactoryInfo info = new WMSTileFactoryInfo(0, 10, 11, "https://mesonet.agron.iastate.edu/cgi-bin/wms/us/mrms.cgi", "mrms_p48h");
    DefaultTileFactory tileFactory = new DefaultTileFactory(info);
    mapViewer.setTileFactory(tileFactory);

и тестирование дает правильно сформированные URL-адреса, которые можно загрузить в веб-браузер:

    //Test: Created URLs work. 10 = max zoom
    System.out.println(info.getTileUrl(0, 0, 10));
    System.out.println(info.getTileUrl(0, 1, 9));
    System.out.println(info.getTileUrl(1, 1, 9));

URL-адрес первой плитки: https://mesonet.agron.iastate.edu/cgi-bin/wms/us/mrms.cgi?version=1.1.1&request=GetMap&layers=mrms_p48h&format=image/jpeg&bbox=-180.0,0.0,0.0,85.05112877980659&width=255&height=255&srs=EPSG:4326&styles=&bgcolor=0xAFDAF6

Однако, когда я пытаюсь отобразить его в простом JFrame (код не изменился из примера, за исключением другого центрального местоположения Des Moins, который работает с OSM), плитки не загружаются.

Вот полный код моего теста:

import javax.swing.JFrame;
import org.jxmapviewer.viewer.DefaultTileFactory;
import org.jxmapviewer.viewer.GeoPosition;
import org.jxmapviewer.JXMapViewer;
import org.jxmapviewer.WMSTileFactoryInfo;
import org.jxmapviewer.viewer.TileFactoryInfo;

public class WMSTest {           
    public static void main(String[] args) {
        JXMapViewer mapViewer = new JXMapViewer();

    // Create a TileFactoryInfo for WMS
    //WMSTileFactoryInfo int minZoom, int maxZoom, int totalMapZoom, java.lang.String baseURL, java.lang.String layers)
    TileFactoryInfo info = new WMSTileFactoryInfo(0, 10, 11, "https://mesonet.agron.iastate.edu/cgi-bin/wms/us/mrms.cgi", "mrms_p48h");

    //Test: Do created URLs work? 10 = max zoom, 9 = 1 level lower -> OK.
    System.out.println(info.getTileUrl(0, 0, 10));
    System.out.println(info.getTileUrl(0, 1, 9));
    System.out.println(info.getTileUrl(1, 1, 9));

    DefaultTileFactory tileFactory = new DefaultTileFactory(info);
    mapViewer.setTileFactory(tileFactory);

    // Create a TileFactoryInfo for OpenStreetMap        
    //TileFactoryInfo info2 = new OSMTileFactoryInfo();
    //DefaultTileFactory tileFactory2 = new DefaultTileFactory(info2);
    //mapViewer.setTileFactory(tileFactory2);

    // Use 8 threads in parallel to load the tiles
    tileFactory.setThreadPoolSize(8);
    // Set the focus        
    GeoPosition desMoines = new GeoPosition(41.590833, -93.620833);

    mapViewer.setZoom(9);
    mapViewer.setAddressLocation(desMoines);
    // Display the viewer in a JFrame        
    JFrame frame = new JFrame("JXMapviewer2 Example 1");
    frame.getContentPane().add(mapViewer);
    frame.setSize(800, 600);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}
}

person ptstone    schedule 02.05.2017    source источник


Ответы (1)


Так что ошибка - это ответ сервера. С использованием

   ?SERVICE=WMS&REQUEST=GetCapabilities

действительно возвращается

   <AccessConstraints>None</AccessConstraints>

но это не означает, что сервер будет принимать запросы от любого источника и идентификатора приложения. Я решил свою проблему, протестировав разные публичные и частные wms-серверы, и проблема была не в коде, (некоторые) серверы просто не принимают запросы из моего приложения. Все равно был бы рад ответу от кого-то знающего, но пока - может быть, это поможет кому-то, столкнувшемуся с той же проблемой.

person ptstone    schedule 15.05.2017