有没有办法将 API 数据转换为 Mapbox 图层?
Is there a way to convert API data to a Mapbox layer?
我下面有一个回调函数,它能够从 Eventbrite API 生成数据。目前这个函数可以通过 'new Marker' 方法在我的 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 featureArr;
callbackEventbrite(function(result) {
const keys = Object.values(result);
for (const key of keys) {
var feature = {
"type": "Feature",
"id": key.venue.id,
"geometry": {
"type": "Point",
"coordinates": [key.venue.longitude, key.venue.latitude]
},
"properties": {
"title": key.venue.name,
"description": key.venue.description,
"icon": "bar"
}
};
featureArr.push(feature);
}
}
map.addSource("mySource", {
"type": "geojson",
"data": {
"type": "FeatureCollection",
"features": featureArr
}
});
map.addLayer({
"id": "locations",
"type": "symbol",
"source": "mySource",
"layout": {
"text-font": ["Open Sans Semibold", "Arial Unicode MS Bold"],
"text-offset": [0, 0.6],
"text-anchor": "top",
}
});
注意:我不知道 Eventbrite 的响应对象中有什么,所以一些 key.value.xyz
是由变量组成的
我下面有一个回调函数,它能够从 Eventbrite API 生成数据。目前这个函数可以通过 'new Marker' 方法在我的 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 featureArr;
callbackEventbrite(function(result) {
const keys = Object.values(result);
for (const key of keys) {
var feature = {
"type": "Feature",
"id": key.venue.id,
"geometry": {
"type": "Point",
"coordinates": [key.venue.longitude, key.venue.latitude]
},
"properties": {
"title": key.venue.name,
"description": key.venue.description,
"icon": "bar"
}
};
featureArr.push(feature);
}
}
map.addSource("mySource", {
"type": "geojson",
"data": {
"type": "FeatureCollection",
"features": featureArr
}
});
map.addLayer({
"id": "locations",
"type": "symbol",
"source": "mySource",
"layout": {
"text-font": ["Open Sans Semibold", "Arial Unicode MS Bold"],
"text-offset": [0, 0.6],
"text-anchor": "top",
}
});
注意:我不知道 Eventbrite 的响应对象中有什么,所以一些 key.value.xyz
是由变量组成的