【问题标题】:Uncaught TypeError: Cannot read property 'addLayer' of undefined未捕获的类型错误:无法读取未定义的属性“addLayer”
【发布时间】:2020-11-14 08:37:18
【问题描述】:

我正在尝试使用传单markercluster。但是当我运行它时,给我一个错误:

Uncaught TypeError: Cannot read property 'addLayer' of undefined

我在functions.js中的代码是:

for (var i in ODO) {
    var latlng = L.latLng({ lat: ODO[i].LastX, lng: ODO[i].LastY });

    L.marker( latlng ).addTo(map);
}
var markerClusters = new L.MarkerClusterGroup().addTo(map);
for ( var i = 0; i < ODO.length ; i++ )
{
    var popup = ODO[i].branchcode +
                '<br/><b>دوره:</b> ' + ODO[i].saleprd +
                '<br/><b>سال :</b> ' + ODO[i].saleyear;

    var map = L.marker( [ODO[i].LastX, ODO[i].LastY] )
                    .bindPopup( popup );

    markerClusters.addLayer( map );
}

map.addLayer( markerClusters );
markerClusterLayer = L.markerClusterGroup({
    disableClusteringAtZoom: 13
}).addTo(map);

调用cdn的顺序是:

<!---leaflet css -->
<link rel="stylesheet" href="css/leaflet.css" integrity="sha512-xodZBNTC5n17Xt2atTPuE1HxjVMSvLVW9ocqUKLsCC5CXdbqCmblAshOMAS6/keqq/sMZMZ19scR4PsZChSR7A=="
crossorigin=""/>
<!---marker cluster css -->
<link rel="stylesheet" href="css/MarkerCluster.css" />
<link rel="stylesheet" href="css/MarkerCluster.Default.css" />
<script src="script/config.js"></script>
<!-- Load Leaflet from CDN -->
<script src="script/leaflet.js" integrity="sha512-XQoYMqMTK8LvdxXYG3nZ448hOEQiglfqkJs1NOQV44cWnUrBc8PkAOcXy20w0vlaXaVUearIOBhiXZ5V3ynxwA=="
crossorigin=""></script>
<script src="script/jquery-3.4.1.min.js"></script>
<!-- marker Cluster CDN -->
<script src="script/leaflet.markercluster.js"></script>
<!-- Load Esri Leaflet from CDN -->
<script src="script/esri-leaflet.js"></script>
<!--- amCharts CDN -->
<script src="script/core.js"></script>
<script src="script/charts.js"></script>
<script src="script/maps.js"></script>
<script src="script/animated.js"></script>

另外,我的 app.js 中有传单层代码,如下所示:

function Init_Map()
{

    map = L.map('map').setView( [36.564012,53.060300], 8);
// add the OpenStreetMap tiles
        L.tileLayer('http://mt0.google.com/vt/lyrs=p&hl=en&x={x}&y={y}&z={z}&s=Ga', {
            maxZoom: 19,
            attribution: '&copy; <a href="https://openstreetmap.org/copyright">OpenStreetMap contributors</a>'
        }).addTo(map);
    }

有人知道这个错误的原因吗?

【问题讨论】:

  • 你能确认错误在哪一行:map.addLayer( markerClusters ); 因为好像map变量没有在上下文中初始化,可能map应该是你脚本的全局变量
  • 你能把“new L.MarkerClusterGroup().addTo(map);”这一行中的“new”去掉吗
  • 我尝试删除但会收到错误:未定义 MarkerClusterGroup()
  • @CalvinNunes 会不会是因为我在另一个文件中创建了集群功能?如果我还想获得地图 vlue,我该怎么办?因为我希望这个功能在我点击一个按钮时起作用。首先,它将从我的 ajax-url 和 json 数据中接收数据,然后此函数将使其显示在地图上
  • @Depie 可能...我会在使用map.addLayer(... 的文件的同一个文件中拥有函数Init_Map,并且我会将map 变量创建为全局...或者,你可以让你的Init_Map返回map变量,然后你可以将地图存储在另一个调用函数的地方let map = Init_Map()

标签: javascript leaflet leaflet.markercluster


【解决方案1】:

我在标记聚类函数的最后一部分调用了Init_Map(); 函数,它就可以正常工作

【讨论】:

    猜你喜欢
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 2015-01-06
    • 2017-07-26
    • 2019-02-26
    相关资源
    最近更新 更多