首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JXMapViewer的WMS层不加载

使用JXMapViewer的WMS层不加载
EN

Stack Overflow用户
提问于 2017-05-02 21:09:33
回答 1查看 347关注 0票数 0

使用来自JXMapViewer源代码(指向github的链接)的基本示例,我修改了源代码以从wms服务器加载瓷砖。然而,尽管测试显示URL是正确形成的,但Tilefactory并没有正确地加载这些块。

唯一修改的部分是:

代码语言:javascript
复制
    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);

测试产生的urls格式正确,可以在and浏览器中加载:

代码语言:javascript
复制
    //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:p48h&format=image/jpeg&bbox=-180.0,0.0,0.0,85.05112877980659&width=255&height=255&srs=EPSG:4326&styles=&bgcolor=0xAFDAF6

但是,当我尝试在简单的JFrame中显示它时(除了与OSM一起工作的不同的中心位置Des之外,代码与示例相同),瓷砖将不会加载。

下面是我的测试的完整代码:

代码语言:javascript
复制
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);
}
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-15 12:24:20

所以错误是服务器响应。使用

代码语言:javascript
复制
   ?SERVICE=WMS&REQUEST=GetCapabilities

回来了吗

代码语言:javascript
复制
   <AccessConstraints>None</AccessConstraints>

但这并不意味着服务器将接受来自任何源的请求& appid。我通过使用不同的公共和私有wms服务器来解决我的问题,问题不在代码中,(有些)服务器只是不接受来自我的应用程序的请求。对于一个知识渊博的人的回答还是会很高兴的,但在此期间--也许这会帮助一些人遇到同样的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43747282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档