Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将geojson文件的内容分配给Javascript中的变量?_Javascript_Geojson_Mapbox Gl Js - Fatal编程技术网

如何将geojson文件的内容分配给Javascript中的变量?

如何将geojson文件的内容分配给Javascript中的变量?,javascript,geojson,mapbox-gl-js,Javascript,Geojson,Mapbox Gl Js,显示的代码已经可以工作了,但我想清理它。它声明了一个名为placez的变量,其中包含geojson格式的信息,以便代码的下一部分使用过滤器读取并加载到地图上。但是,在现实中,要映射的点的数量超过50000个(这里的示例仅显示2个)。我想知道的是,如何将来自同一个名为placesgj.geojson目录中的文件的数据加载到变量placez,而不是像示例中那样手动写入。代码的其余部分仅用于整洁,与功能无关。提前谢谢 var placez = { "type": "FeatureCollect

显示的代码已经可以工作了,但我想清理它。它声明了一个名为placez的变量,其中包含geojson格式的信息,以便代码的下一部分使用过滤器读取并加载到地图上。但是,在现实中,要映射的点的数量超过50000个(这里的示例仅显示2个)。我想知道的是,如何将来自同一个名为placesgj.geojson目录中的文件的数据加载到变量placez,而不是像示例中那样手动写入。代码的其余部分仅用于整洁,与功能无关。提前谢谢

var placez = {
    "type": "FeatureCollection",
    "features": [{
        "type": "Feature",
        "properties": {
            "icon": "theatre"
        },
        "geometry": {
            "type": "Point",
            "coordinates": [-77.038659, 38.931567]
        }
    }, {
        "type": "Feature",
        "properties": {
            "icon": "music"
        },
        "geometry": {
            "type": "Point",
            "coordinates": [-77.007481, 38.876516]
        }
    }]
};
map.on('load', function() {
    // Add a GeoJSON source containing place coordinates and information.
    map.addSource("placer", {
        "type": "geojson",
        "data": placez
    });
    placez.features.forEach(function(feature) {
        var symbol = feature.properties['icon'];
        var layerID = 'poi-' + symbol;

这是一个将JSON文件加载到javascript对象的例子。可以使用XMLHttpRequest在纯Java脚本中完成

 function loadJSONFile(callback) {   

    var xmlobj = new XMLHttpRequest();

    xmlobj.overrideMimeType("application/json");

    xmlobj.open('GET', 'placesgj.geojson', true); // Provide complete path to your json file here. Change true to false for synchronous loading.

    xmlobj.onreadystatechange = function () {
          if (xmlobj.readyState == 4 && xmlobj.status == "200") {
            // Required use of an anonymous callback as .open will NOT return a value but simply returns undefined in asynchronous mode
            callback(xmlobj.responseText);
          }
    };

    xmlobj.send(null);  
 }
通过传递回调函数调用loadJSONFile函数,如下所示:

loadJSONFile(function(response) {
    var placez = JSON.parse(response);
 });
//继续地图。在('load',…此处编码…

上,使用读取文件

function fetchJSON(url) {
  return fetch(url)
    .then(function(response) {
      return response.json();
    });
}
假设
placesgj.geojson
位于同一目录中:

var data = fetchJSON('placesgj.geojson')
            .then(function(data) { 

        // do what you want to do with `data` here...
        data.features.forEach(function(feature) {
                console.log(feature);
                var symbol = feature.properties['icon'];
                console.log(symbol);
            });

});

为什么不直接读取本地文件?然后解析它。不要担心字符串的大小。您将尝试执行此操作,但我无法使其正常工作。不断收到“Uncaught TypeError:无法读取未定义的每个属性”的错误消息。仍然可以粘贴50000行文本,所以我想我已经完成了。将继续查找。@FranciscoVG我已经更新了我的答案,请检查它。还要确保geojson文件具有正确的扩展名/类型,并且为
fetchJSON
方法正确地传递了其路径。我收到一条错误消息,说:“Uncaught ReferenceError:placez未定义在…”。将50行文本内容复制粘贴到文本编辑器时,代码工作正常,因此我将继续研究此问题。