在传单

时间:2017-12-04 02:09:10

标签: javascript dictionary leaflet geojson

我使用此代码连接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(geojsonLayer).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: {…}}

1 个答案:

答案 0 :(得分:0)

如果您的图层未正确解释为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。你可以将输出发布到一些JSON验证器吗?它有效吗?

您可以上传console.log(geojsonLayer);的输出吗?

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

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