Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.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
Javascript 有没有办法将API数据转换为Mapbox图层?_Javascript_Ajax_Mapbox_Layer_Mapbox Gl Js - Fatal编程技术网

Javascript 有没有办法将API数据转换为Mapbox图层?

Javascript 有没有办法将API数据转换为Mapbox图层?,javascript,ajax,mapbox,layer,mapbox-gl-js,Javascript,Ajax,Mapbox,Layer,Mapbox Gl Js,我下面有一个回调函数,可以从EventBriteAPI生成数据。目前,此功能可以通过“新建标记”方法在我的Mapbox地图上生成标记。但是,我希望通过“Mapbox addLayer”方法将这些数据生成地图上的图层,而不是标记 callbackEventbrite(function(result){ const keys = Object.values(result); for(const key of keys){ geojson = {

我下面有一个回调函数,可以从EventBriteAPI生成数据。目前,此功能可以通过“新建标记”方法在我的Mapbox地图上生成标记。但是,我希望通过“Mapbox addLayer”方法将这些数据生成地图上的图层,而不是标记

    callbackEventbrite(function(result){
    const keys = Object.values(result);
    for(const key of keys){
        geojson = {
            type: 'featureCollection',
            features: [{
                type: 'feature',
                geometry: {
                    type: 'Point',
                    coordinates: [key.venue.longitude, key.venue.latitude]
                }
            }]
        }
        eventInfo.push(
            {"longitude": key.venue.longitude , "latitude": key.venue.latitude , "name": key.name.text, "venue": key.venue.name, "date": key.start.local, "category": key.category_id}
        );
    }
});
我基本上想这样做,它在地图上生成符号,基于几何体的坐标,但是使用API数据

map.addLayer({
        "id": "locations",
        "type": "symbol",
        "source": {
            "type": "geojson",
            "data": {
                "type": "FeatureCollection",
                "features": [
                    {
                      "type": "Feature",
                      "properties": {
                        "Title": "The Congress Inn",
                        "Description": "Pub located in Longton",
                        "Type": "Pub",
                        "Address": "14 Sutherland Rd, Stoke-on-Trent ST3 1HJ",
                        "Longitude": 2.1316,
                        "Latitude": 52.9878,
                        "icon": "bar"
                      },
                      "geometry": {
                        "coordinates": [
                          -2.131836,
                          52.987238
                        ],
                        "type": "Point"
                      }
                    },

非常感谢您的帮助!谢谢

这应该相当简单,您只需要根据Eventbrite响应构建一个功能阵列

  • 首先构建一个geojson特性数组以在源代码中使用

  • 然后,在添加图层之前,分别将源添加到地图中。您将使用刚刚在源代码中创建的要素阵列

  • 将源添加到地图后,可以创建图层并在图层中引用源

  • 请尝试下面的代码开始。让我知道这对你的案子是否有效

    var特性arr;
    callbackEventbrite(函数(结果){
    常量键=对象值(结果);
    for(键的常数键){
    变量特征={
    “类型”:“功能”,
    “id”:key.vention.id,
    “几何学”:{
    “类型”:“点”,
    “坐标”:[键.地点.经度,键.地点.纬度]
    },
    “财产”:{
    “标题”:key.vention.name,
    “描述”:key.vention.description,
    “图标”:“栏”
    }
    };
    特征推送(特征);
    }
    }
    map.addSource(“mySource”{
    “类型”:“geojson”,
    “数据”:{
    “类型”:“FeatureCollection”,
    “特征”:特征arr
    }
    });
    map.addLayer({
    “id”:“位置”,
    “类型”:“符号”,
    “来源”:“我的来源”,
    “布局”:{
    “文本字体”:[“Open Sans Semibold”,“Arial Unicode MS Bold”],
    “文本偏移量”:[0,0.6],
    “文本锚定”:“顶部”,
    }
    
    })
    感谢您的回复!这似乎是正确的方法,但我收到一个错误,指出“输入数据不是有效的geoJSON对象”。我不确定为什么,因为该错误没有给出中断的代码行。我觉得这里的主要问题之一是,从API接收的所有数据都必须在回调中使用。对于出于某种原因,当在回调中添加层或源时,Mapbox似乎不想工作,这不应该是一个问题。您从他们的api接收的数据与硬编码的数据没有什么不同。可能从api接收的数据类型没有被接受为有效的坐标或名称。您可以更新您的问题吗使用来自eventbrite的示例响应或您对eventbrite的ajax调用,以便我可以使用响应测试它?@seanrs97您可以将生成的geojson粘贴到其中,以便更好地反馈哪些是正确的/错误的。