OpenStreetmap - Marker über Listeneinträge hervorheben

So können Sie Marker auf einer OpenstreetMap über Listeneintrage hervorheben.

Das folgende Beispiel geht davon aus, dass in den einzelnen Listeneinträgen ein A-Tag enhalten ist, dass auf den passenden Standort verlinkt. Für die Listeneinträge werden im folgenden Events festgelegt, die die Funktion animateMarkerAtMapsByListEntry ausführt.

Auszug aus einem Javascript-Quelltext-Element, dass für die Seite die Events auf die listenEinträge legt.

jQuery(document).ready(function(){

jQuery('.listEntry a').on('mouseenter', function(e){
e.preventDefault();
e.stopPropagation();
animateMarkerAtMapByListEntry(jQuery(this).attr('href'), 'scaleMarker', {'scale': 1});
return
false;
});

jQuery('.listEntry a').on('mouseleave', function(e){
e.preventDefault();
e.stopPropagation();
animateMarkerAtMapByListEntry(jQuery(this).attr('href'), 'scaleMarker', {'scale': 0.5});
return
false;
});


});

Auszug aus der desing.js

function animateMarkerAtMapByListEntry(href, action, options = {}) {

var
map = null;
var
popupContents = null;
var
mapMarker = jQuery('.mapMarkerPopup');
for (var
variableName in window) {
if (
window.hasOwnProperty(variableName) && variableName.startsWith('mapObject')) {
map = window[variableName];
}
else if(
window.hasOwnProperty(variableName) && variableName.startsWith('popupContents')){
popupContents = window[variableName];
}
else if(
window.hasOwnProperty(variableName) && variableName.startsWith('mapMarkerPopupContent')){
mapMarker = window[variableName];
}
}

/*Ermittle die ol_uid anhand der URL*/
var escapedUrl = href.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
var
regex = new RegExp('href\\s*=\\s*["\']' + escapedUrl + '["\']');
var
ol_uid = null;

for (var
key in popupContents) {
if (
regex.test(popupContents[key])){
ol_uid = key;
break;
}
}

/*Feature Auslesen um Coordinate des Markers auszulesen.*/
var foundFeature = null;
map.getLayers().forEach(function(layer) {
if (
layer instanceof ol.layer.Vector) {
layer.getSource().getFeatures().forEach(function(feature) {
if (
layer.ol_uid === ol_uid) {
foundFeature = feature;
}
});
}
});

if(
action == 'scaleMarker'){
var
locationPoint = foundFeature;
var
iconStyle = locationPoint.getStyle();
var
icon = iconStyle.getImage();
var
scale = typeof options['scale'] !== 'undefined' ? options['scale'] : 2;
icon.setScale(scale);
locationPoint.setStyle(iconStyle);
}
else if(
action == 'showInfobox'){
var
coordinates = foundFeature.getGeometry().getCoordinates();
/*Anzeigen des Markers*/
var overlays = map.getOverlays();
var
overlay = overlays.item(0);
if(
popupContents[ol_uid]){
if(
popupContents[ol_uid].replace(/<a[^>]+class="mapMarkerPopupLink"[^>]+>[^<]+<\/a>/, '').replace(/<[^>]+>/g, "") == ''){
return
false;
}
mapMarker.innerHTML = popupContents[ol_uid];
overlay.setOffset([0, -36]);
overlay.setPosition(coordinates);
addLinkTargets();
return
true;
}
else{
overlay.setPosition();
}
}
}