正确使用ReferencedEnvelope的方法

时间:2018-01-12 13:59:36

标签: geotools

使用我发现的示例,我能够连接到Web服务,下载世界地图并在JMapPane中正确显示。我的目标是让JMapPane只显示世界上非常特定的部分。

我有一个基于NAD83和UTM 17N的地理CRS。我更喜欢使用Northing和Easting值,我想要显示该区域的边界。

以下是相关代码:

Rectangle bounds=projectdata.getPlanRange();

ReferencedEnvelope envelope = new ReferencedEnvelope(bounds.getMinX(), bounds.getMaxX(), bounds.getMinY(), bounds.getMaxY(), projectdata.getWorkPlancrs());

mapPane.setDisplayArea(envelope);

如果我没有用信封设置显示区域,我会看到世界。如果我设置它,它会让我看到世界某处的水。我只能假设ReferencedEnvelope可以使用提供的地理CRS处理Northing / Easting值。我已经阅读了几次文档并在发布此问题之前搜索了很长时间。我确信对于我做错了有一个简单的答案。

如果它很重要,我使用的wms源是

http://atlas.gc.ca/cgi-bin/atlaswms_en?VERSION=1.1.1&Request=GetCapabilities&Service=WMS

1 个答案:

答案 0 :(得分:0)

您没有说明如何在JFrame中创建地图。但是下面的内容适用于我(需要注意一些注意事项,我将在下面介绍)。诀窍是使用您需要的CRS和边界框设置视口。您可以获得full code here

  private void createWMS() {
    content.getViewport().setCoordinateReferenceSystem(crs);
    content.getViewport().setBounds(bbox);
    if (url == null) {
      throw new IllegalStateException("URL is not set");
    }
    try {
      wms = new WebMapServer(url);
    } catch (ServiceException | IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      System.exit(2);
    }
    WMSCapabilities capabilities = wms.getCapabilities();
    org.geotools.data.ows.Layer[] wmsLayers = WMSUtils.getNamedLayers(capabilities);
    for (org.geotools.data.ows.Layer wmsLayer : wmsLayers) {
      if(layers.isEmpty()) {//just write out layers
        System.out.println(wmsLayer.getName());
      } 
      if (layers.contains(wmsLayer.getName())) {
        WMSLayer displayLayer = new WMSLayer(wms, wmsLayer);
        if (!styles.isEmpty()) {
          String wmsStyle = styles.get(layers.indexOf(wmsLayer.getName()));
          displayLayer = new WMSLayer(wms, wmsLayer);
          List<StyleImpl> layerStyles = wmsLayer.getStyles();
          for (StyleImpl s : layerStyles) {
            if (s.getName().equalsIgnoreCase(wmsStyle)) {
              displayLayer.setStyle((Style) s);
            }
          }
        }

        content.addLayer(displayLayer);

      }
    }
  }

这会产生CRS设置为EPSG:26917和大约-157051,5400992,279239,5664905的地图的bbox,如:

enter image description here

正如您所见,这项服务即将结束!并且它也不能很好地处理EPSG:26917,因为它已经在地球另一侧绘制了俄罗斯的“背面”并在绘制加拿大之前对其进行了标记,这有点令人困惑,如果你进一步缩小地图就会变成地图由于边界和河流等在地图“后面”穿越而无法使用。