使用带有Drupal的多个视图的Openlayers映射

时间:2014-02-25 00:58:13

标签: drupal openlayers drupal-views

我有一个包含地理数据的内容类型,我想根据一些上下文过滤器在地图上显示这些数据。网站上有多个视图,具有不同的配置。我已经定义了我的地图,它的行为,默认图层等,它使用Openlayers数据叠加和地图显示来处理“x类型的所有节点”视图。

第二个视图有自己的数据叠加,其中包含一组不同的点和一个地图显示。我想重复使用相同的Openlayers地图,以便不需要在多个地图上进行行为,缩放级别等的任何未来更改。

我遇到的问题是,我在Openlayers地图中定义的任何图层都是使用该地图的所有视图的默认图层。我需要一些方法来根据视图,网址或其他内容定义默认的激活的图层。关于如何实现这一点的任何想法?

2 个答案:

答案 0 :(得分:0)

首先,您必须创建或克隆并修改视图。 其次,您必须在/ admin / structure / openlayers / maps / list /中创建另一个Openlayers地图,并且在图层和样式/覆盖图层中,您必须启用新创建的视图的图层。 第三,您必须编辑视图,并在视图格式的设置中选择新地图。

答案 1 :(得分:0)

回过头来看一个单一的视图解决方案,忘了发布它。这允许您使用单个OpenLayers Map块创建单个视图,该块在同一视图中具有多个数据叠加,并根据URL设置活动的一个。这种方法的好处是,对所有显示器中的一个字段进行更改并更改地图的样式,行为等,只需要进行一次。这简化了人们的维护和更改。

这是有效的: 1.像往常一样创建OpenLayers地图,图层定义等。 2.使用格式: OpenLayers Map 创建新视图。像往常一样配置它。 3.在OpenLayers Map视图中,为每个源添加新的 OpenLayers Data Overlay 显示。 4.编辑OpenLayers地图。在“叠加层”下,为每个新的数据叠加层检查已启用在切换台中。在我的情况下,激活的复选框都是未选中的。 5.实现hook_openlayers_map_preprocess_alter()。这就是我的样子

    function mymoduleortheme_openlayers_map_preprocess_alter(&$map = array()) {
      //$displayLayer['URL param'] = "map_data_overlay_machine_name";
      $displayLayer = array();
      $displayLayer['first-page'] = "openlayers_maps_openlayers_first_page_data";
      $displayLayer['another-page'] = "openlayers_maps_openlayers_another_page_data";

      $currentURI = array();
      $currentURI = explode("/", $_SERVER['REQUEST_URI']);

      foreach ($map['layer_switcher'] as $idx => $val) {    
        //Map data found, activate the correct
        if (isset($currentURI[2]) && isset($displayLayer[$currentURI[2]]) && $idx == $displayLayer[$currentURI[2]]) {
          $map['layer_activated'][$displayLayer[$currentURI[2]]] = $displayLayer[$currentURI[2]];
        }
        else
          $map['layer_switcher'][$idx] = 0;
      }
    }

可能还有改进的余地,但它正在发挥作用。切换器不在此站点上使用,因此它只是CSS出来。