Javascript 为leaftlet组合geojson和json

Javascript 为leaftlet组合geojson和json,javascript,json,ajax,leaflet,geojson,Javascript,Json,Ajax,Leaflet,Geojson,我有一张带有GeoJson图层的传单地图 var objJson = "https://raw.githubusercontent.com/salucci/Leaflet-Teste/master/BrasilNovo.json"; geojsonLayer = new L.GeoJSON.AJAX(objJson, { style: style, onEachFeature: onEachFeature}); geojsonLayer.addTo(map);

我有一张带有GeoJson图层的传单地图

    var objJson = "https://raw.githubusercontent.com/salucci/Leaflet-Teste/master/BrasilNovo.json";
geojsonLayer = new L.GeoJSON.AJAX(objJson, { style: style, 
    onEachFeature: onEachFeature});
    geojsonLayer.addTo(map);
    info.addTo(map);
还有一个从本地PHP服务器接收Json数据的Ajax请求

$.ajax({
    url: "http://127.0.0.1/projects/phpController.php",
    type: "POST",
    dataType: "json",
    data: {"Codigo": 1100023},
    success: function(data){
        console.log(data); //here is my data
    },
    error: function(error){
         console.log("Error:");
         console.log(error);
    }
});
GeoJson有点重,所以我不想每次都在服务器上生成完整的GeoJson,我的想法是在Ajax请求之后,通过ID将静态GeoJson和动态Json(类似SQL join)合并,然后将合并的对象放在传单层上

GeoJson看起来像:

{"type":"FeatureCollection","features":[
{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-73,-7],[-73,-8]]]},"properties":{"field1":"value1","field2":"value2","ID":"1"}},
{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-73,-7],[-73,-9]]]},"properties":{"field1":"value1","field2":"value2","ID":"2"}},
{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-73,-7],[-73,-11]]]},"properties":{"field1":"value1","field2":"value2","ID":"3"}}]}
[{"id":"1","field3":"value3","field4":"value4"},{"id":"2","field3":"value3","field4":"value4"},{"id":"3","field3":"value3","field4":"value4"}]
来自Ajax请求的Json如下所示:

{"type":"FeatureCollection","features":[
{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-73,-7],[-73,-8]]]},"properties":{"field1":"value1","field2":"value2","ID":"1"}},
{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-73,-7],[-73,-9]]]},"properties":{"field1":"value1","field2":"value2","ID":"2"}},
{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[-73,-7],[-73,-11]]]},"properties":{"field1":"value1","field2":"value2","ID":"3"}}]}
[{"id":"1","field3":"value3","field4":"value4"},{"id":"2","field3":"value3","field4":"value4"},{"id":"3","field3":"value3","field4":"value4"}]
基本上,我想将字段field3和field4及其值放入GeoJson属性中,通过id连接。使用javascript执行该操作的最佳/最快方法是什么


有没有办法在运行时稍后合并另一个(第三个)Json?

当传单解析GeoJSON数据并从中构建GeoJSON图层组(存储在
geojsonLayer
变量中)时,它会将要素数据记录到每个对应图层的
feature
属性中

例如,在您的
geojsonLayer
中,您将得到一个多边形,其中包括:(以下称为“
”)

layer.feature.type//“feature”
layer.feature.geometry//{“类型”:“多边形”,“坐标”:[[-73,-7],-73,-8]]]}
layer.feature.properties/{“field1”:“value1”,“field2”:“value2”,“ID”:“1”}
例如,你可以做:

geojsonLayer.eachLayer(函数(层){
if(layer.feature.properties.ID==jsonObj.ID){
for(jsonObj中的var键){
layer.feature.properties[key]=jsonObj[key];
}
}
});

当然,您可以改进算法以缓存对传单层的引用,而不必每次都循环通过
geojsonLayer

收到动态json后,循环通过它。检查GeoJson属性中是否存在id。如果是,请将其附加到匹配的密钥?否则,添加它?如果将其放入函数中,比如
merge(geoJson,json)
,那么也可以合并其他json。不难做到,对吧?这是可能的,但是如何检查GeoJson中是否存在id呢?我想我也需要遍历它,但是GeoJson对象在哪里?也许这更像是一个“传单问题”,而不是一个“JS问题”。谢谢你的回答和时间。你说缓存引用是什么意思?我想我需要一种“更快”的方法来实现这一点,因为GeoJson将有超过5000个特性,并且循环使用它似乎不是一个好的理想主义,首先要让它以这种方式工作。以后你可以改进它。请随意使用新代码提出新问题。正如一些人所说:“优化工作代码比优化代码更容易”。。。