Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >将geoJSON添加到this.map mapbox-gl-js

将geoJSON添加到this.map mapbox-gl-js
EN

Stack Overflow用户
提问于 2017-12-25 17:54:10
回答 1查看 895关注 0票数 0

我已经包含了源代码的摘录以及下面的完整源代码。

我正在尝试将geoJSON添加到React中的mapbox-gl-js Map类组件中,当运行如下所示的函数时,我收到一个错误cannot read property addSource of undefined。我相信这是因为我使用了this.map,但我不确定。我在哪里做错了?

提取

代码语言:javascript
代码运行次数:0
复制
this.map.on('load', function() {

        this.map.addSource("points", {
          type: "geojson",
          "data": nightlife_data,
        })

        this.map.addLayer({
          "id": "points",
          "type": "symbol",
          "source": "points",
              "layout": {
                "icon-image": "{icon}-15",
                "text-field": "{title}",
                "text-font": ["Open Sans Semibold", "Arial Unicode MS Bold"],
                "text-offset": [0, 0.6],
                "text-anchor": "top"
              }
        })

完整源代码

代码语言:javascript
代码运行次数:0
复制
mapboxgl.accessToken = accessToken;

class Map extends React.Component {
  constructor(props){
    super(props);
  }

  componentDidMount() {
    getLocation(
      (userLocation) => {
        this.map = new mapboxgl.Map({
          container: this.mapContainer,
          zoom: 11.5,
          center: userLocation,
          style: "mapbox://styles/mapbox/light-v9"
        })
          this.map.addControl(
            geocoder,
            "top-left"
          )

          this.map.addControl(
            locater,
            "top-right"
          )

          const nightlife_data = request({
            url: "https://api.foursquare.com/v2/venues/search",
            method: 'GET',
            qs: {
              client_id: foursquareID,
              client_secret: foursquareSecret,
              ll:  userLocation[0] + "," + userLocation[1],
              categoryId: "4d4b7105d754a06376d81259",
              v: '20170801',
              limit: 1
            }, function(err, res, body) {
                if(err) {
                  console.error(err);
                } else {
                  console.log(body);
                }
            }
          })

          this.map.on('load', function() {

            this.map.addSource("points", {
              type: "geojson",
              "data": nightlife_data,
            })

            this.map.addLayer({
              "id": "points",
              "type": "symbol",
              "source": "points",
                  "layout": {
                    "icon-image": "{icon}-15",
                    "text-field": "{title}",
                    "text-font": ["Open Sans Semibold", "Arial Unicode MS Bold"],
                    "text-offset": [0, 0.6],
                    "text-anchor": "top"
                  }
            })
      }
    )
      // automatically show the user location on map
      setTimeout(locater._onClickGeolocate.bind(locater), 5)
   })
  }

  componentWillUnmount() {
    this.map.remove();
  }

  render() {
      return <div className="map" ref={el => this.mapContainer = el} />;
  }
}

export default Map;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-27 15:37:49

由于您使用的是function,因此第二个this与第一个不同,并且不包含您预先设置的map

代码语言:javascript
代码运行次数:0
复制
this.map.on('load', function() {

    this.map.addSource("points", {
      type: "geojson",
      "data": nightlife_data,
    })

    ...
}

您可以尝试使用箭头函数,因为它保留了外部this (lexical scoping):

代码语言:javascript
代码运行次数:0
复制
this.map.on('load', () => {

    this.map.addSource("points", {
      type: "geojson",
      "data": nightlife_data,
    })

    ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47970880

复制
相关文章
mapboxGL中sprite的前端生成
在前面的文章讲述了mapboxGL中的sprite以及其java中的生成方式,本文将结合Promise讲讲其前端的生成方式。
牛老师讲GIS
2021/09/10
1.8K0
将Sublime添加到鼠标右键
2、找到 HKEY_CLASSES_ROOT/*/shell 目录,在此目录下操作。
新码农
2020/03/05
3K0
从GeoJSON模板速记GeoJSON规范
JavaScript Object Notation是一种对各种地理数据结构进行编码的格式。GeoJSON对象可以表示几何、特征或者特征集合。
周陆军博客
2023/05/14
7150
将Windows Terminal添加到鼠标右键
导读 非常实用的小技巧。 下载Windows Terminal图标,右键另存为。 [WindowsTerminal图标] 保存至'C:\Users\Administrator\AppData\Local\Terminal\Terminal.ico'。 win+R输入'regedit',打开注册表。 找到'HKEY_CLASSES_ROOT\Directory\Background\shell'目录,在此目录下操作。 新建项'wt',双击右边'默认',更改右键文字显示内容'Windows Terminal H
新码农
2020/08/05
3.6K0
将Windows Terminal添加到鼠标右键
geotrellis使用(四十二)将 Shp 文件转为 GeoJson
原因很多,最重要的原因是我转行了。是的,我离开了开发岗位,走向了开发的天敌-产品经理。虽然名义上是产品经理,但是干的事情也很杂,除了不写代码,其他的都干,经常还要加个小班,所以就没那么多时间研究技术上的东西,机械键盘上已经落下了一层薄薄的灰尘。但是自己确实又爱码农这一行,上班看着同事畅快的敲着代码,心里就有点痒,所以下班没事仍旧自己瞎捉摸,这不就总结出来今天这篇文章。
魏守峰
2018/09/21
1.4K0
将Emoji表情添加到项目中 顶
选择完需要的表情,点击消息预览就可以看到效果了,有一个微笑表情是QQ表情~~ 可以不用管它。
linapex
2019/03/26
1.8K0
将Emoji表情添加到项目中
                                                    顶
dart - 将 orElse 函数添加到 firstWhere 方法
我正在尝试将 onElse 函数添加到 iterator.firstWhere 方法,但我无法获得正确的语法。 我试过类似的东西
徐建国
2021/08/31
1.6K0
将程序添加到右键菜单快速启动
打开注册表编辑器:按下 Win + R 键,输入 regedit,然后按回车键打开注册表编辑器。
浪漫主义狗
2023/09/04
4480
将程序添加到右键菜单快速启动
将 Fedora Linux 系统添加到企业域中
在企业互联网场景中,一般情况下最广泛使用的基于 Linux 的操作系统是 Red Hat Enterprise Linux(RHEL),它主要用于服务器,但也可以用作工作站。Fedora linux 其实也是工作站系统的一个很好的选择,它提供了许多在企业环境中工作的特性,使管理成为一项简单的任务。
用户1880875
2021/09/06
1.6K0
Windows下将cmd命令添加到右键菜单
将下列文本复制到文件,保存为 *.reg 格式: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\background\shell\cmd_here] @="在此处打开cmd" "Icon"="cmd.exe" [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\background\shell\cmd_here\command] @="\"C:\
Daotin
2020/12/14
2K0
OpenStack命令将卷添加到虚拟机上
首先加载权限 [root@controller ~]# . admin-openrc
院长技术
2020/06/15
1.5K0
GeoJSON 和 TopoJSON
GeoJSON 和 TopoJSON 是符合 JSON 语法规则的两种数据格式,用于表示地理信息。 1. GeoJSON   GeoJSON 是用于描述地理空间信息的数据格式。GeoJSON 不是一种新的格式,其语法规范是符合 JSON 格式的,只不过对其名称进行了规范,专门用于表示地理信息。   GeoJSON 的最外层是一个单独的对象(object)。这个对象可表示: 几何体(Geometry)。 特征(Feature)。 特征集合(FeatureCollection)。   最外层的 GeoJSON
用户1149564
2018/01/11
2.4K0
GeoJson数据合并
当前在 datav的geoatlas中,可以下载单个地市或区县的数据,例如福建省下面每个地市都可以单独下载一个geojson文件,现在需要将所有地市的geojson合并为一个福建省区县层级的geojson
技术路漫漫
2020/06/19
3.6K0
GeoJson数据合并
Java将内容追加/添加到现有文件
如果您希望代码创建一个新文件并删除以前的现有文件,则FileWriter可以轻松代替它。要替换现有文件中的所有内容,请使用以下命令:
用户7886150
2021/04/28
3.1K0
如何使用ReconAIzer将OpenAI添加到Burp中
ReconAIzer是一款功能强大的Burp Suite扩展,该工具基于Jython开发,可以为Burp Stuite添加OpenAI能力,并利用OpenAI来优化和增强渗透测试过程中的网络侦查任务。该工具专为漏洞猎人和渗透测试人员设计,支持以自动化的形式执行多种网络安全任务,可以帮助广大安全研究人员以简单快速的形式识别和利用漏洞。
FB客服
2023/08/08
2680
如何使用ReconAIzer将OpenAI添加到Burp中
Java Hive UDTF 将WKT格式的Geomotry转换成GeoJSON
WKT(Well-known text)是一种文本标记语言,用于表示矢量几何对象、空间参照系统及空间参照系统之间的转换。它的二进制表示方式,亦即WKB(well-known-binary)则胜于在传输和在数据库中存储相同的信息。
house.zhang
2021/12/27
1.1K0
解决将Editplus添加到鼠标右键的问题
以管理员身份运行EditPlus 一次点击–>工具–>首选项–>常规–>勾选将EditPlus添加到系统右键菜单选项
别团等shy哥发育
2023/02/25
1.4K0
解决将Editplus添加到鼠标右键的问题
技术分享 | 将GreatSQL添加到系统systemd服务
systemd 是Linux系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其它进程,systemd被设计用来改进原来sysvinit中的多个缺点。
老叶茶馆
2021/07/09
1.3K0
大文件geojson渲染,geojson转pbf矢量切片工具下载!
geobuilding于近日完成重要更新,支持对大数据量,大文件geojson的加载和动态编辑。
geobuilding
2023/01/12
2.3K0
大文件geojson渲染,geojson转pbf矢量切片工具下载!
如何将WebRTC播放协议添加到EasyCVR?
自2020年浏览器的发展和兼容性发生了变化,WebRTC的延时性、安全性得到了提升和保护,尤其是疫情爆发后,实时视频的需求比之前增长了30倍,这更刺激了WebRTC产品的持续快速发展。因此我们也在EasyGBS、EasyDSS等平台内实现了WebRTC协议的播放。
TSINGSEE青犀视频
2021/11/23
1.4K0

相似问题

Folium将叠加(.geojson)添加到地图

10

将外部geojson添加到传单层

11

在Mapbox-GL-JS中从具有多种类型的GeoJSON文件渲染FeatureCollection

11

将弹出窗口添加到geojson叶折线

118

将geoJSON特性属性添加到mapbox弹出窗口

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文