我有一个包含地理数据的内容类型,我想根据一些上下文过滤器在地图上显示这些数据。网站上有多个视图,具有不同的配置。我已经定义了我的地图,它的行为,默认图层等,它使用Openlayers数据叠加和地图显示来处理“x类型的所有节点”视图。
第二个视图有自己的数据叠加,其中包含一组不同的点和一个地图显示。我想重复使用相同的Openlayers地图,以便不需要在多个地图上进行行为,缩放级别等的任何未来更改。
我遇到的问题是,我在Openlayers地图中定义的任何图层都是使用该地图的所有视图的默认图层。我需要一些方法来根据视图,网址或其他内容定义默认的激活的图层。关于如何实现这一点的任何想法?
答案 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出来。