0

我是 OpenLayers 的新手。我试图找出为我正在创建的地图提供配置文件的最佳方式。

例如,我正在创建具有以下样式的地图:

    var defaultStyle = new OpenLayers.Style(
                        {
                            pointRadius: 10,
                            fillColor: "yellow",
                            strokeColor:"#0500bd", 
                            strokeWidth:2,
                            fillOpacity:0.4,
                            labelXOffset: "${xOffset}",
                            labelYOffset: "${yOffset}",
                            labelAlign: "${align}"
                        });

我想在一个配置文件中有pointRadiusand fillColor,所以我不必修改我的源代码,而只需修改配置文件。

我要创建一个 JS 文件吗?config.js 包含以下内容:

      var config = {
           map:{
               style: {
                   pointRadius: 10,
                   fillColor: "yellow"
               },
           },
      };

然后,在我创建样式的其他 JS 中,执行以下操作:

    var defaultStyle = new OpenLayers.Style(
    {
        pointRadius: config.map.style.pointRadius,
            fillColor: config.map.style.fillColor,
        strokeColor:"#0500bd", 
        strokeWidth:2,
        fillOpacity:0.4,
                    labelXOffset: "${xOffset}",
            labelYOffset: "${yOffset}",
        labelAlign: "${align}"
    });

推荐什么?

4

2 回答 2

0

我会做这样的事情:

var config = {
  default_map_style: {
    pointRadius: 10,
    fillColor: 'yellow'
  }
};

然后我不会一个一个地使用它,而是使用我想动态使用的附加属性扩展默认地图样式对象,如下所示:

var defaultStyle = new OpenLayers.Style(
  $.extend({}, config.default_map_style, {
    strokeColor: '#0500bd'
  }
);

我在上面使用了jQuery.extend ,但如果你不想使用 jQuery ,你可以在UnderscoreLo-dash中找到另一种扩展的实现。请注意,重要的是我们传递一个新对象作为 extend 的第一个参数,因为我们不想更改该default_map_style对象。

于 2013-09-09T19:07:37.003 回答
0

我不能说什么是“推荐”。但是,您的解决方案与我们在当前项目中执行的方式非常相似。一年多来我们一直这样做,取得了很大的成功。我们将数据库中的配置保存为 JSON 数组,然后让 JS 解析该数组。

然后,您还可以使用 OpenLayers.Util.extend 函数来扩展您的样式:

var config = {
       map:{
           style: {
               pointRadius: 10,
               fillColor: "yellow"
           },
       },
  };

var defaultStyle = new OpenLayers.Style(OpenLayers.Util.extend({
       strokeColor:"#0500bd", 
       strokeWidth:2,
       fillOpacity:0.4,
       labelXOffset: "${xOffset}",
       labelYOffset: "${yOffset}",
       labelAlign: "${align}"
},config.map.style));
于 2013-09-09T19:08:40.710 回答