2017-05-02 1 views
0

En utilisant l'exemple de base des sources JXMapViewer (link to github), j'ai modifié la source pour charger les tuiles d'un serveur wms à la place. Cependant, Tilefactory ne charge pas correctement les tuiles, malgré les tests montrant que l'URL est correctement formée.La couche WMS utilisant JXMapViewer ne charge pas

La seule partie modifiée est la suivante:

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); 

et les rendements tests urls correctement formés qui peuvent être chargés dans un navigateur Web:

//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 de la première tuile: 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

Cependant, lorsque j'essaie de l'afficher dans le JFrame simple (code inchangé à partir de l'exemple sauf emplacement du centre différent Des Moins, whi ch fonctionne avec OSM), les tuiles ne seront pas chargées.

Voici le code complet pour mon test:

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); 
} 
} 

Répondre

0

Donc, l'erreur est la réponse du serveur. En utilisant

?SERVICE=WMS&REQUEST=GetCapabilities 

ne retourne

<AccessConstraints>None</AccessConstraints> 

mais cela ne signifie pas que le serveur accepte les demandes provenant de toute source & appid. J'ai résolu mon problème en testant avec différents serveurs wms publics et privés, et le problème n'était pas dans le code, (certains) serveurs n'acceptent pas les demandes de mon application. Serait toujours heureux d'une réponse de quelqu'un de bien informé, mais en attendant - peut-être cela aide quelqu'un à rencontrer le même problème.