BlogDrupal

OpenLayers Heatmap

OpenLayers is een krachtige module om een kaart met lagen weer te geven op je website. Standaard kan de module punten op de kaart weergeven met eventueel een popup wanneer je op een punt klikt. Op deze manier kun je geografische data weergeven.

Om de punten op een andere manier weer te geven zul je een extra module moeten installeren. Een daarvan is OpenLayers Heatmap. Deze module maakt het mogelijk een laag om te zetten in een heatmap. 

Om een heatmap te krijgen moet je er eerst voor zorgen dat je punten op de kaart krijgt. Hier zijn verschillende tutorials voor te vinden. Als basis: maak een content type aan dat ook een geopunt bevat. Zorg ervoor dat je deze als OpenLayers laag krijgt door middel van een view.

heatmap-options

Als je de punten op de kaart hebt is het niet heel veel meer werk. Download de OpenLayers Heatmap module en zet deze aan (neem de dev versie, of de stable versie als hij nieuwer is dan 16 mei 2013). Als je nu een OpenLayers map (admin/structure/openlayers/maps) gaat aanpassen heb je bij ‘Behaviors’ de mogelijkheid om een laag om te zetten in een heatmap.

Count

Als je in de code van OpenLayers Heatmaps duikt kom je er achter dat er één variabele is die wel naar de heatmap wordt gestuurd maar niet in te vullen is vanuit Drupal. Het gaat hier om de variabele ‘count’.


heatmapdata.data.push({lonlat:new OpenLayers.LonLat(feature.geometry.x, feature.geometry.y), count:count});

Om hier toch gebruik van te maken heb je een klein stukje custom code nodig. Hiervoor kun je hook_openlayers_map_alter gebruiken. In deze hook herschrijf je één van de velden uit de map naar de variabele ‘count’. Zie het voorbeeld hieronder.


/**
* Implements hook_openlayers_map_alter().
*/
function custom_heatmap_openlayers_map_alter(&$map = array()) {
if (!empty($map['layers']['custom_heatmap_1']['features'])) {
foreach($map['layers']['custom_heatmap_1']['features'] as &$feature) {
$count = $feature['attributes']['field_weight'];
unset($feature['attributes']['field_weight']);
$feature['attributes']['count'] = $count;
}
}
}