在 Leaflet 中使用 addLayer 时的错误信息

Error message when use addLayer in Leaflet

我使用此代码将 2 个文件的 2 个文件连接起来,以生成 json 个文件:

function join(){         
    $.when(
        $.getJSON('bairro.json'),
        $.getJSON('convertJson.php')
    ).done(function(responseGeojson, responseData) {
        var data = responseData[0]
        var geojsonLayer = responseGeojson[0]

        console.log('==geojson==');
        console.log(geojsonLayer);

        var lookup = {};
        data.forEach(function(item) {
            if(item.cod) {
                lookup[item.cod] = {
                    id: item.cod,
                    nome: item.nome,
                    local: item.local
                }           
            }
        })
        console.log('==lookup==');
        console.log(lookup);

        geojsonLayer.features.forEach(function(d) {
            if (lookup[d.properties.CODBAIRRO]) {
                d.properties.joined = lookup[d.properties.CODBAIRRO];
            }
        })

        console.log('==the new==');
        console.log(geojsonLayer);

        L.geoJSON(geojsonLayer).addTo(map);

    })
}

但是出现这个错误信息:

TypeError: t.addLayer 不是函数

根据报错,问题出在这行代码:

L.geoJSON(地理json图层).addTo(地图);

我不知道如何修复此错误,代码才能正常工作。

更新

Jsons 表现良好且有效,我检查了一个验证器。

console.log(geojsonLayer)的部分输出;是:

{type: "FeatureCollection", features: Array(161)}
  features:Array(161)
    [0 … 99]

      0:
       geometry:
         coordinates:(50) 
            [Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1), Array(1)]
        type:"MultiPolygon"
        __proto__:Object
      properties:{OBJECTID: 325, Área: 1705684.49376977, NOME: "Paquetá", REGIAO_ADM: "PAQUETA", AREA_PLANE: "1", …}
      type:"Feature"
      __proto__:Object

      1:{type: "Feature", properties: {…}, geometry: {…}}
      2:{type: "Feature", properties: {…}, geometry: {…}}
      3:{type: "Feature", properties: {…}, geometry: {…}}

在这种情况下,如果 您的图层未正确解释为 JSON,例如由于错误的文件结构或您的 geojsonLayer 变量,就会出现该错误为空,因此 addTo(map) 函数无法处理它。

您可以在 $.getJSON 函数中添加一些错误处理:

$.getJSON("YOUR-FILE.JSON", function() {
  console.log("success");
})
.success(function() { console.log("success"); })
.error(function() { console.log("error"); })
.complete(function() { console.log("complete"); })
.fail(function(jqXHR, status, error){
   if(status == 'parseerror'){
    console.log("not valid json");
   } else {
    console.log("some other error?");
   }
});

您的 JSON 对此处理程序的表现如何?

您的代码合并了来自不同来源的两个文件,因此输出文件结构可能不正确 JSON,或者您的一个文件结构错误,被解释为 JSON/geoJSON。你可以 post 你的输出到一些 JSON 验证器吗?有效吗?

你能上传你的 console.log(geojsonLayer); 的输出吗?

您可以使用此脚本检查单独添加这些文件 - 它们是否单独正确添加到您的地图?

我还强烈建议您在 PHP 脚本中处理服务器上的文件,该脚本将输出一个结构正确的 JSON 文件。