传单Uncaught TypeError:map.addLayer不是函数 [英] leaflet Uncaught TypeError: map.addLayer is not a function

查看:135
本文介绍了传单Uncaught TypeError:map.addLayer不是函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经制作了一个在地图上将我的json数据聚类的功能,如下所示:它位于一个名为 functions.js

I've made a function for clustering my json data on map like this: it's located in a js file called functions.js

function(ODO)    
var markerClusters = L.markerClusterGroup();
    for ( var i = 0; i < ODO.length ; i++ )
    {
        var popup = ODO[i].branchcode +
                "<br/><b>کد رشته :</b> " +
                ODO[i].branchcode +
                "<br/><b>دوره:</b> " +
                ODO[i].saleprd +
                "<br/><b>سال :</b> " +
                ODO[i].saleyear +
                "<br/><b>موقعیت مکانی:</b> " +
                ODO[i].LastX +
                "" +
                "-" +
                "" +
                ODO[i].LastY +
                "<br/><b>فلگ :</b> " +
                ODO[i].flag;
        var mainMap = L.marker( [ODO[i].LastX, ODO[i].LastY] )
                        .bindPopup( popup );
        markerClusters.addLayer( mainMap );
    }
    
    mainMap.addLayer( markerClusters );
    markerClusterLayer = L.markerClusterGroup({
        disableClusteringAtZoom: 13
    }).addTo(mainMap);
}

然后在 app.js 中用不同的图层和图例初始化地图:

and then, initialized a map with defferent layers and a legend in app.js:

function Init_Map()
{
    var cities = L.layerGroup();
  
    var mbAttr = 'Map data &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, ' +
        '<a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, ' +
        'Imagery © <a href="https://www.mapbox.com/">Mapbox</a>',
      mbUrl = 'https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpejY4NXVycTA2emYycXBndHRqcmZ3N3gifQ.rJcFIG214AriISLbB6B5aw';
  
    var satellite   = L.tileLayer(mbUrl, {id: 'mapbox/satellite-v9', tileSize: 512, zoomOffset: -1, attribution: mbAttr}),
        streets  = L.tileLayer(mbUrl, {id: 'mapbox/streets-v11', tileSize: 512, zoomOffset: -1, attribution: mbAttr}),
        Defaultmap = 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>'}),
        googleHybrid = L.tileLayer('http://{s}.google.com/vt/lyrs=s,h&x={x}&y={y}&z={z}',{
            maxZoom: 20,
            subdomains:['mt0','mt1','mt2','mt3']}),
        googleSat = L.tileLayer('http://{s}.google.com/vt/lyrs=s&x={x}&y={y}&z={z}',{
            maxZoom: 20,
            subdomains:['mt0','mt1','mt2','mt3']}),
        googleTerrain = L.tileLayer('http://{s}.google.com/vt/lyrs=p&x={x}&y={y}&z={z}',{
            maxZoom: 20,
            subdomains:['mt0','mt1','mt2','mt3']});

    window.mainMap = L.map('map', {
      center: [36.564012,53.060300],
      zoom: 8,
      layers: [satellite, cities, Defaultmap , googleHybrid , googleSat , googleTerrain]
    });
    var baseLayers = {
      "نقشه ماهواره ای(گوگل)": googleSat,
      "نقشه هیبریدی": googleHybrid,
      "نقشه ماهواره ای(OSM)": satellite,
      "Streets": streets,
      "نقشه اصلی": Defaultmap,
      "نقشه Terrain": googleTerrain
    };
  
    var overlays = {
      "Cities": cities
    };
  
    L.control.layers(baseLayers, overlays).addTo(mainMap);
    L.Control.Consumption = L.Control.extend({
        onAdd: function(map) {
            var div = L.DomUtil.create("div", "legend");
            div.innerHTML += "<h4>Tegnforklaring</h4>";
            div.innerHTML +=
            '<i style="background: rgba(110, 204, 57, 0.6)"></i><span>خوش مصرف</span><br>';
            div.innerHTML +=
            '<i style="background: rgba(240, 194, 12, 0.6)"></i><span>کم مصرف</span><br>';
            div.innerHTML +=
            '<i style="background: rgba(241, 128, 23, 0.6)"></i><span>پر مصرف</span><br>';
            return div;
        },
        onRemove: function(map) {}
    });
    
    L.control.consumption = function(opts) {
        return new L.Control.Consumption(opts);
    }
    L.control.consumption({ position: 'bottomright' }).addTo(mainMap);
}

我正在从服务器这样调用数据:

and I'm calling data from server like this:

var OMID_Detail_Object;
function OMID_Detail() {

  var Ajax_URL= Server_IP +'/OHM';
  var Year_Val = GetSelectValue("YearSelect");
  var Prd_Val = GetSelectValue("PrdSelect");
  var Flg_Val = GetSelectValue("flags");

  
  app.request.get(Ajax_URL, { "Token": Token_Data, "SaleYear":Year_Val, "SalePrd":Prd_Val, "Flag":Flg_Val }, function (data)
  {
    OMID_Detail_Object=data;
    MarkerOnMap(OMID_Detail_Object);
  },function (er){},"json");
}
function CreateMarkers(){
  OMID_Detail();
}

遇到图例错误时,我将默认地图命名为 mainMap .但是现在,聚类标记的功能出现了类似以下错误:

I named the default map mainMap when I encountered an error for legend. but now, the function for clustering markers have an error like:

Uncaught TypeError: mainMap.addLayer is not a function
at MarkerOnMap (functions.js:46)
at Object.success (app.js:213)
at i (0:4002)
at XMLHttpRequest.Request.f.onload (0:4179)

并且正在谈论这部分中的错误:

and is talking about an error in this part:

    mainMap.addLayer( markerClusters );

但是为什么呢?我试着说

but why? I tried saying

    map.addLayer( markerClusters );

但是它也行不通.有同样的错误!有人可以帮忙吗?

but it didn't work,too. had the same error! can anyone help with this?

推荐答案

在各处使用 window.mainMap 而不是 mainMap

这篇关于传单Uncaught TypeError:map.addLayer不是函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆