</p>
<p><div class="leaflet-map WPLeafletMap" style="height:500px; width:100%;"></div><script>
window.WPLeafletMapPlugin = window.WPLeafletMapPlugin || [];
window.WPLeafletMapPlugin.push(function WPLeafletMapShortcode() {/*<script>*/
var baseUrl = atob('aHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmc=');
var base = (!baseUrl && window.MQ) ?
    window.MQ.mapLayer() : L.tileLayer(baseUrl,
        L.Util.extend({}, {
            detectRetina: 0,
        },
        {"subdomains":"abc","noWrap":false,"maxZoom":19}        )
    );
    var options = L.Util.extend({}, {
        layers: [base],
        attributionControl: false
    },
    {"zoomControl":false,"scrollWheelZoom":false,"doubleClickZoom":false,"fitBounds":false,"minZoom":0,"maxZoom":19,"maxBounds":null,"attribution":"<a href=\"http:\/\/leafletjs.com\" title=\"Eine Javascript-Bibliothek f\u00fcr interaktive Karten\">Leaflet<\/a>; \u00a9 <a href=\"http:\/\/www.openstreetmap.org\/copyright\">OpenStreetMap<\/a> Mitwirkende"},
    {});
window.WPLeafletMapPlugin.createMap(options).setView([49.403076,11.064891],14);});</script><br /><script>
window.WPLeafletMapPlugin = window.WPLeafletMapPlugin || [];
window.WPLeafletMapPlugin.push(function WPLeafletMarkerShortcode() {/*<script>*/
var map = window.WPLeafletMapPlugin.getCurrentMap();
var group = window.WPLeafletMapPlugin.getCurrentGroup();
var marker_options = window.WPLeafletMapPlugin.getIconOptions({});
var marker = L.marker(
    [49.403076,11.064891],
    marker_options
);
var is_image = map.is_image_map;
if (marker_options.draggable) {
    marker.on('dragend', function () {
        var latlng = this.getLatLng();
        var lat = latlng.lat;
        var lng = latlng.lng;
        if (is_image) {
            console.log('leaflet-marker y=' + lat + ' x=' + lng);
        } else {
            console.log('leaflet-marker lat=' + lat + ' lng=' + lng);
        }
    });
}
marker.addTo( group );
marker.bindPopup(window.WPLeafletMapPlugin.unescape('&lt;br /&gt;&lt;strong&gt;Gossen Metrawatt GmbH&lt;/strong&gt;&lt;br /&gt;Bremer Str. 11&lt;br /&gt;90451 Nürnberg&lt;br /&gt;&lt;a href=\&quot;https://www.google.com/maps/dir//Bremer+Str.+11,+90451+N%C3%BCrnberg/@49.4031457,11.0626769,17z/data=!4m8!4m7!1m0!1m5!1m1!1s0x479f50cce9c31c25:0xebba70cc5cf0d2b9!2m2!1d11.0648656!2d49.4031457\&quot; target=\&quot;_blank\&quot; rel=\&quot;noopener\&quot;&gt;Route berechnen&lt;/a&gt;&lt;/p&gt;&lt;br&gt;&lt;p&gt;'));window.WPLeafletMapPlugin.markers.push( marker );
        });</script></p>
<p>