【问题标题】:leaflet map in Wordpress - popups wont workWordpress 中的传单地图 - 弹出窗口不起作用
【发布时间】:2020-10-20 22:27:21
【问题描述】:

我正在尝试将地图集成到我的 wordpress 网站中 使用以下代码。更具体地说,我在块编辑器的“html块”中使用此代码。

<link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css"
   integrity="sha512-xodZBNTC5n17Xt2atTPuE1HxjVMSvLVW9ocqUKLsCC5CXdbqCmblAshOMAS6/keqq/sMZMZ19scR4PsZChSR7A=="
   crossorigin=""/>
<script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"
   integrity="sha512-XQoYMqMTK8LvdxXYG3nZ448hOEQiglfqkJs1NOQV44cWnUrBc8PkAOcXy20w0vlaXaVUearIOBhiXZ5V3ynxwA=="
   crossorigin=""></script>
<script src="https://www.akzisemauer-berlin.de/map/js/leaflet.ajax.min.js"></script>

<div id="map" style="width:100%; height: 400px; ">
        </div>
<script>
var map = L.map('map', {
            zoomControl:true, maxZoom:18, minZoom:1
        }).setView([52.513660,13.417072], 12);


L.tileLayer('http://a.tiles.wmflabs.org/bw-mapnik/{z}/{x}/{y}.png', {
    attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',
minZoom: 1,
maxZoom: 28,
}).addTo(map);


//Akzisemauer-wand

function akziseWallStyle(feature) {
    return {
        color: wall_color(feature.properties.bezirk),
        weight: 3,
    };
}
function wall_color(bezirk) {
    if(bezirk === "Friedrichshain-Kreuzberg") return "#e5b813"; else
    return "#666666";
}
var akzise_wall = new L.GeoJSON.AJAX("https://www.akzisemauer-berlin.de/map/data/akzise_wall.geojson",{
         style:akziseWallStyle});       
akzise_wall.addTo(map);

//Akzisemauer-Tore

// markerpopup function
function markerpopup(feature, layer) {
    if (feature.properties && feature.properties.name) {
        layer.bindPopup(feature.properties.name);
    }
}
var akziseGateFHXBStyle = {
    radius: 8,
    fillColor: "#e5b813",
    color: "#000",
    weight: 0.3,
    opacity: 1,
    fillOpacity: 0.8
}

var akzise_gates_FHXB = new L.GeoJSON.AJAX("https://www.akzisemauer-berlin.de/map/data/akzise_gates_FHXB.geojson", {
    pointToLayer: function (feature, latlng) {
        return L.circleMarker(latlng, akziseGateFHXBStyle)
    }}, {
    onEachFeature: markerpopup
    });    

akzise_gates_FHXB.addTo(map);

var akziseGatePBMIStyle = {
    radius: 8,
    fillColor: "#666666",
    color: "#000",
    weight: 0.3,
    opacity: 1,
    fillOpacity: 0.8
}

var akzise_gates_PBMI = new L.GeoJSON.AJAX("https://www.akzisemauer-berlin.de/map/data/akzise_gates_PBMI.geojson", {
    pointToLayer: function (feature, latlng) {
        return L.circleMarker(latlng, akziseGatePBMIStyle)
    }}, {
    onEachFeature: markerpopup
    });       
akzise_gates_PBMI.addTo(map);



testmarker = new L.CircleMarker([ 52.513660,13.417072], { radius: 10, color: 'green', }).bindPopup(String("DOES THIS WORK??")).addTo(map);

// Bezirksgrenzen
var bezirkStyle = {
        "color": "#717171",
        "weight": 0,
        "fillOpacity": 0.4
    };
var bezirksgrenzen = new L.GeoJSON.AJAX("https://www.akzisemauer-berlin.de/map/data/bezirksgrenzen_simp.geojson",{
         style:bezirkStyle});       
bezirksgrenzen.addTo(map);


setInterval(function () {
   map.invalidateSize();
}, 100);
</script>

(我使用 invalidatesize 函数修复了地图无法正确加载的错误,请查看here

我正在使用 point_to_layer 函数来设置点 (akzisemauer_gates) 的样式,它工作正常,但我无法让弹出窗口工作 - 两个 akzise_gates_* 功能和测试标记都没有。

我尝试了什么:

  • 当我跳过点特征的样式并返回到标准标记时,弹出窗口会按预期工作。

  • 当我在jsfiddle 中尝试相同的代码时,弹出窗口工作(它无法加载我的 geojson,可能是由于不相关的原因,但 testmarker 工作),所以我认为问题与 wordpress 相关

可能有人对 wordpress 中的传单行为有经验?

【问题讨论】:

  • GeoJSON 数据中的特征没有"name" 属性,而是"Gemeinde_name" 一个。

标签: javascript wordpress leaflet


【解决方案1】:

好的,我想通了。我犯了两个错误

第一个是我不认为该层可以相互重叠。我的“bezirke”图层,一个多边形,与所有标记重叠。所以当我点击我认为是标记的时候,我实际上是点击了“bezirke”层,它没有显示弹出窗口,因为该层没有配置弹出窗口。有趣的是,这也适用于多边形层中为空的地图区域。

其次,我在使用 L.GeoJson.Ajax 函数时犯了一个语法错误:我将 pointToLayer 和 onEachFeature 子函数(不知道它是如何调用的)分别放在 {} 括号中,这是错误的,它们放在一个 {} 中括号和里面只用逗号分隔

这是工作脚本:

<script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js" integrity="sha512-XQoYMqMTK8LvdxXYG3nZ448hOEQiglfqkJs1NOQV44cWnUrBc8PkAOcXy20w0vlaXaVUearIOBhiXZ5V3ynxwA==" crossorigin=""></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet-ajax/2.1.0/leaflet.ajax.min.js" integrity="sha512-Abr21JO2YqcJ03XGZRPuZSWKBhJpUAR6+2wH5zBeO4wAw4oksr8PRdF+BKIRsxvCdq+Mv4670rZ+dLnIyabbGw==" crossorigin="anonymous"></script>

<div id="map" style="width:100%; height: 400px; ">
        </div>
<script>
//initialize map
var map = L.map('map', {
            zoomControl:true, maxZoom:18, minZoom:1
        }).setView([52.513660,13.417072], 12);

//add basemap
L.tileLayer('http://a.tiles.wmflabs.org/bw-mapnik/{z}/{x}/{y}.png', {
    attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',
minZoom: 1,
maxZoom: 28,
}).addTo(map);

// Bezirksgrenzen
var bezirkStyle = {
"color": "#717171",
"weight": 0,
"fillOpacity": 0.4
};
var bezirksgrenzen = new L.GeoJSON.AJAX("https://www.akzisemauer-berlin.de/map/data/bezirksgrenzen_simp.geojson",{interactive: false, 
style:bezirkStyle});
bezirksgrenzen.addTo(map);
bezirksgrenzen.bringToBack();


//Akzisemauer-wand
function akziseWallStyle(feature) {
    return {
        color: wall_color(feature.properties.bezirk),
        weight: 3,
    };
}
function wall_color(bezirk) {
    if(bezirk === "Friedrichshain-Kreuzberg") return "#e5b813"; else
    return "#666666";
}
var akzise_wall = new L.GeoJSON.AJAX("https://www.akzisemauer-berlin.de/map/data/akzise_wall.geojson",{interactive: false,
         style:akziseWallStyle});       
akzise_wall.addTo(map);

//gates
function markerpopup(feature, layer) {
        layer.bindPopup(feature.properties.name)
}

function gates_style(feature) {
  return {
    radius: 8,
    fillColor: fill_color(feature.properties.bezirk),
    color: "#000",
    weight: 0.3,
    opacity: 1,
    fillOpacity: 0.8
  }
}

function fill_color(bezirk) {
  if (bezirk === "Friedrichshain-Kreuzberg") return "#e5b813";
  else return "#666666";
}

var akzise_gates = new L.GeoJSON.AJAX("https://www.akzisemauer-berlin.de/map/data/gates.geojson", {
pointToLayer: function (feature, latlng) {
return L.circleMarker(latlng, gates_style(feature))
}, 
onEachFeature: markerpopup
});
akzise_gates.addTo(map);

//bugfix
setInterval(function () {
   map.invalidateSize();
}, 100);
</script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多