2017-05-02 3 views
0

JXMapViewerソース(link to github)の基本的な例を使用して、wmsサーバーからタイルを読み込むようにソースを変更しました。しかし、Tilefactoryは、URLが正しく形成されていることを示すテストにもかかわらず、タイルを正しくロードしません。JXMapViewerを使用したWMSレイヤーがロードされない

のみ変更部分はこれです:

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を除いて例のコードは変わらず、whi chは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); 
} 
} 

答えて

0

は、ここに私のテストのための完全なコードです。

<AccessConstraints>None</AccessConstraints> 

を返さない

?SERVICE=WMS&REQUEST=GetCapabilities 

を使用するが、これは、サーバーが任意のソース& APPIDからの要求を受け入れるという意味ではありません。私は別の公共およびプライベートのwmsサーバーでテストして問題を解決しましたが、コードに問題はなく、一部のサーバーは自分のアプリケーションからの要求を受け入れないだけです。知識のある人からの回答はまだ満足していますが、その間に、同じ問題に遭遇している人に役立つかもしれません。

関連する問題