当前位置: 首页 > 知识库问答 >
问题:

无法从外部geojson到mapbox获取属性

贝浩歌
2023-03-14

我已从mapbox复制并调整了此示例:https://docs.mapbox.com/mapbox-gl-js/example/filter-markers/

一切工作正常,但我想有Geojson作为一个外部文件

所以我修改了这个代码:

var places = {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'properties': {
'icon': 'theatre'
},
'geometry': {
'type': 'Point',
'coordinates': [-77.038659, 38.931567]
}
},
]
};

为此:

var places = '../images/destinations.geojson';

我在DevTools中得到了这个错误:uncaughttypeerror:无法读取未定义的属性'forEach'。

其余代码(我得到错误)如下所示:

map.on('load', function() {
// Add a GeoJSON source containing place coordinates and information.
map.addSource('places', {
'type': 'geojson',
'data': places
});

places.features.forEach(function(feature) {
var symbol = feature.properties['icon'];
var layerID = 'poi-' + symbol;

// Add a layer for this symbol type if it hasn't been added already.
if (!map.getLayer(layerID)) {
map.addLayer({
'id': layerID,
'type': 'symbol',
'source': 'places',
'layout': {
'icon-image': symbol + '-15',
'icon-allow-overlap': true
},
'filter': ['==', 'icon', symbol]
});

共有1个答案

楚勇
2023-03-14

加载外部GeoJSON文件的一种方法是使用d3js。请参阅下面的示例,该示例取自此mapbox示例。本示例将为GeoJSON文件中给出的坐标画一条线。

您应该能够使用您的foreach循环迭代data.features

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Load from an external geoJSON</title>
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" />
<script src="https://api.mapbox.com/mapbox-gl-js/v1.8.0/mapbox-gl.js"></script>
<link href="https://api.mapbox.com/mapbox-gl-js/v1.8.0/mapbox-gl.css" rel="stylesheet" />
<style>
	body { margin: 0; padding: 0; }
	#map { position: absolute; top: 0; bottom: 0; width: 100%; }
</style>
</head>
<body>
<div id="map"></div>
 
<script src="https://d3js.org/d3.v3.min.js" charset="utf-8"></script>
<script>
	mapboxgl.accessToken = '<access_token>';
var map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/satellite-v9',
zoom: 0
});
 
map.on('load', function() {
// We use D3 to fetch the JSON here so that we can parse and use it separately
// from GL JS's use in the added source. You can use any request method (library
// or otherwise) that you want.
d3.json(
'https://docs.mapbox.com/mapbox-gl-js/assets/hike.geojson', //the geoJSON data file
function(err, data) {
if (err) throw err;
 
// save full coordinate list for later
var coordinates = data.features[0].geometry.coordinates;
 
// start by showing just the first coordinate
data.features[0].geometry.coordinates = [coordinates[0]];
 
// add it to the map
map.addSource('trace', { type: 'geojson', data: data });
map.addLayer({
'id': 'trace',
'type': 'line',
'source': 'trace',
'paint': {
'line-color': 'yellow',
'line-opacity': 0.75,
'line-width': 5
}
});
 
 


}
);
});
</script>
 
</body>
</html>
 类似资料:
  • 有没有一种方法可以使用标准ajax请求从mapbox获取geojson文件? 比如: 我们目前下载了一个geojson文件,并将其作为本地脚本加载到站点上,一切正常。但是拜托,必须有一种方法从mapbox获取它,这样我们就不必不断更新本地文件。客户永远不会理解这个概念。 有人知道API访问点或获取geosjon文件的东西吗?

  • 我最近学习了Mapbox商店定位器教程,为我工作的巡回艺术家制作了一张简单的“即将到来的巡回日期”地图。这是伟大的工作,但我正在寻找一种更容易更新geoJSON点的方法-我将把页面的日常维护交给一位同事,我希望地图能够很容易地添加/删除点。目前,geoJSON点是内联编码到脚本中的,但是如果我可以通过geoJSON.io或Mapbox数据更新文件,并且它会自动将新点拉入地图中,这将是理想的。在任何

  • 我对Spring Boot是新手,对Java也比较陌生。我正在使用Spring文档中的Github OAuth2示例应用程序。开箱即用,一切都按预期工作,但是,当我试图将facebook()或github()方法移到一个新类中时,它们无法从src/main/resources/application.yml文件中获取信息。我试过将类放在与主应用程序类相同的包中,也试过将类放在另一个包中。 src/

  • 我正在用RubyonRails编写这个应用程序,我将应用程序设置为从特定路径提供GeoJson。我想让Mapbox从指定路径获取GeoJson,并将其添加到地图中。下面是我创建地图的javascript代码 当我导航到时,我得到以下响应。 地图加载得很好,但没有形状。令人沮丧的是,浏览器中没有错误,GeoJson在GeoJson.io上签出。 我做错了什么?

  • 我正在尝试从我的OpenStreetMap boundaries postgis服务器中获取真实的geo JSON[For you:< code > psql-t-h { base64(MTG 1 ljixos 4x mziumje 5)}-U boundaries-d boundaries ] 构建JSON工程: 从 al4 中选择 jsonb_build_object( 'type', 'Fe

  • 我正在使用mapbox并将多个geojson层加载到地图上,如下所示: 每个Geojson特性包含许多属性;例如,标题和描述在工具提示中正确显示。 我遇到的问题是通过其他交互访问这些属性。我正在调整悬停时每个多边形的样式,如下所示: 通过或访问交互中属性的任何尝试都将失败。我假设工具提示工作意味着它们可用,但无法计算出我哪里出错了。。。?