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

获取Mapbox存储定位器的外部GeoJSON文件

萧修永
2023-03-14

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

这就是脚本当前获得其GeoJSON点的方式——变量“存储”将它们全部内联。我想知道最好的方法是能够在像Mapbox或geojson.io这样的CMS中编辑/添加/删除GeoJSON数据,并通过脚本中的URL动态更新它。

原谅我,如果这些都是荒谬的——我是新来的!提前感谢您的帮助!

var stores = {

"type": "FeatureCollection",
"features": [
{
  "type": "Feature",
  "geometry": {
    "type": "Point",
    "coordinates": [
      -77.034084142948,
      38.909671288923
    ]
  },
  "properties": {
    "phoneFormatted": "(202) 234-7336",
    "phone": 2022347336,
    "address": "1471 P St NW",
    "city": "Washington DC",
    "country": "United States",
    "crossStreet": "at 15th St NW",
    "postalCode": 20005,
    "state": "D.C."
  }
}

map.on('load', function(e) {
    map.addSource("places", {
    "type": "geojson",
    "data": stores
});

共有2个答案

卫烨
2023-03-14

这实际上很容易。你只需替换这一行:

"data": stores

"data": "https://..."

文档:https://www.mapbox.com/mapbox-gl-js/style-spec#sources-geojson

因此,您只需要找到一个可以在线存储GeoJSON文件并定期更新的地方。为此,我有时使用Github的要点。

澹台承
2023-03-14

我花了两天时间才找到这个“看起来很简单”问题的答案。

>

使用d3.json()获取geojson数据

 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(
     'PATH TO YOUR GEOJSON FILE',
     function(err, data) {
       if (err) throw err;
       map.addSource('stores', {
                 'type': 'geojson',
                 'data': data
           });

       map.addLayer({
           'id': 'stores',
           'type': 'circle',
           'source': 'stores',
           'paint': {
             'circle-radius': 6
           }
       });
       data.features.forEach(function(store, i){
         store.properties.id = i;
       });
       buildLocationList(data);

     });

});
 类似资料:
  • 我已从mapbox复制并调整了此示例:https://docs.mapbox.com/mapbox-gl-js/example/filter-markers/ 一切工作正常,但我想有Geojson作为一个外部文件。 所以我修改了这个代码: 为此: 我在DevTools中得到了这个错误:uncaughttypeerror:无法读取未定义的属性'forEach'。 其余代码(我得到错误)如下所示:

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

  • 我试图使用MapBox来显示所有聚集在一个城市中的多个属性。 (还没有在这和传单之间做出决定) 这是我第一次处理geoJSON内容,并尝试创建包含多个地址的文件。 这是我从网上某个地方得到的一个示例,Mapbox一直在说: 它来自这个名为testing.geojson的文件,其中只包含以下内容: 我真的很困惑为什么它一直产生这个错误,因为我希望使这个示例与属性的实际地址一起工作。 任何建议/帮助将

  • 我试图使用Adobe reader读取从服务器下载的pdf文件,但问题是当我将其存储在内部存储时,其他应用程序无法读取该文件。现在我想知道如何将此文件复制到外部存储(/sdcard/)中,以便pdf查看器可以查看。 由于安全原因,我将文件存储在内部存储,然后删除外部存储的文件。 我的问题是如何复制保存在内部存储中的文件,而不使用raw或将其放入InputStream中的资产。

  • 因此,我在脚本文件夹中有两个独立的GeoJSON文件,一个用于绘制边界线,另一个用于放置标记。每个GeoJSON文件都有不同的内容,例如: 还有一个: 将一个GeoJSON放在这种格式中工作, 但是如何添加另一个geoJSON呢?

  • 我有一个Xperia Neo V没有任何内部存储--只有一个SD卡作为外部存储,而Galaxy S3有内部和外部存储。 使用此函数时只能访问内部存储(S3)上的文件,但Xperia Neo V没有问题。 如何访问内部和外部存储上的文件?