Leaflet.js:WMS图层样式

时间:2014-04-09 15:37:35

标签: javascript wms

我有一个Leaflet javascript Web应用程序,它使用WMS来调用GeoServer。返回的对象是Geometry plus属性。虽然Geometry(多边形)在美国的Counties中渲染得很好,但我需要根据县人口使Counties图层显示不同的颜色。

以下是加载WMS数据的代码:

     var wmscounty = L.tileLayer.wms("<?php echo  $geoserverwms_url; ?>", {
        layers: '<?php echo  $geoserverwms_layer_countypop; ?>',
        format: 'image/png',
        transparent: true,
        version: '1.1.1',
        attribution: "countypopulation"
    }
    wmscounty.addTo(map);

我可以使用的代码设置图层的样式是:

  function getColorCounties(d) {
        return d > 1000000 ? '#800026' :
        d > 50000   ? '#FED976' :
                          '#FFEDA0';
    }
   function styleCounties(feature) {
        return {
            weight: 2,

            fillColor: getColorCounties(feature.properties.COUNTY_POP)
        };
    }

我不知道如何将'feature'对象传递给styleCounties()函数?它应该在某些onAdd()函数中吗?或者一些'forEach'。有一些例子,但我找不到任何Leaflet / WMS。

谢谢!

1 个答案:

答案 0 :(得分:4)

我必须说我有点困惑。 WMS是一种从服务器获取 raster 图像的服务。您无法从WMS获取几何图形或属性。

由于WMS提供光栅图像,因此您无法使用Javascript对其进行样式设置。因此,您无法从Javascript中设置权重,填充颜色等,因为当Javascript看到数据时,数据已经在服务器上呈现。

但是,您可以在WMS请求中设置styles参数,该参数指示WMS服务器(在您的情况下为GeoServer)将某种样式应用于返回的图像;请参阅GetMap参考:http://docs.geoserver.org/stable/en/user/services/wms/reference.html#getmap

如果你真的想在客户端上控制样式,你可能应该使用WFS,它将为你提供矢量格式的几何和属性。 GeoServer可以使用GeoJSON格式返回它们,这样可以在Leaflet中轻松使用它们。您可以使用至少一个插件:https://github.com/azgs/azgs-leaflet(我自己没有使用过它)。