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

如何使用React谷歌地图API访问地图对象?

郭元凯
2023-03-14

我正在尝试使用新的@react Google maps/api库访问Web应用程序中安装的Google Map的getBounds方法,该库取代了tomchentw不支持的react Google maps库。

与旧的react GoogleMaps不同,这个新库似乎无法访问此处定义的GoogleMap对象。根据您尝试访问Google Map对象的方式,您将获得以下两种情况之一:

1)简单地将ref放置在标签中,就会得到一个GoogleMap对象,它不是Map对象,也没有getBound方法或任何其他允许我检索地图边界的方法(据我所知)。它的一个子对象是下面描述的“Zh”对象。

2) 从第1点对ref调用getInstance()会得到一个神秘的、未记录的“Zh”对象,其中包含一组神秘的数据。此对象也作为GoogleMap的子对象出现。

他们在控制台:https://i.imgur.com/kGCToGv.jpg

下面是生成控制台输出的代码(我在应用程序中拖动地图后使用onDragEnd回调运行一些打印,因为在存储后尝试立即读取地图的内容会使代码在某种竞争条件下出错):

import React from 'react'
import { LoadScript, GoogleMap, Marker } from '@react-google-maps/api'

function NewMap(props){

    let mapRef = React.createRef()

    const boundsCallBack = () => {
        console.log(mapRef.current)
        console.log(mapRef.current.getInstance())
    }

    return (
        <LoadScript googleMapsApiKey={process.env.REACT_APP_MAP_KEY}>
            <GoogleMap
                {...props.theProps}
                onDragEnd={boundsCallBack}
                ref={mapRef}
            >
                <Marker position={props.theProps.center} />
            </GoogleMap>
        </LoadScript>
    )
}

export default NewMap

谷歌地图和Zh似乎都没有提供任何访问实际地图对象的方法,也没有提供任何返回其生命统计数据(例如其边界)的方法。有人知道如何使用此库访问地图对象和/或其生命统计信息吗?

共有1个答案

马承
2023-03-14

您可以从onLoad事件处理程序中获取它,并将映射对象放在您的状态中,并在您想要的任何地方使用它,如下所示:

import React, {Component} from 'react'
import { LoadScript, GoogleMap, Marker } from '@react-google-maps/api'

class NewMap extends Component {

    state = {map: {}}

    boundsCallBack = () => {
        const {map} = this.state;
        console.log('map: ', map)
    }

    handleMapLoad = (map) => {
        this.setState((state) => ({ ...state, map }));
    }

    render () {
      return (
        <LoadScript googleMapsApiKey={process.env.REACT_APP_MAP_KEY}>
            <GoogleMap
                {...this.props.theProps}
                onDragEnd={this.boundsCallBack}
                onLoad={this.handleMapLoad}
            >
                <Marker position={this.props.theProps.center} />
            </GoogleMap>
        </LoadScript>
      )
    }
}

export default NewMap
 类似资料:
  • 最近Chrome开始发出以下警告: [违规]将非被动事件侦听器添加到阻止滚动的触摸移动事件。考虑将事件处理程序标记为“被动”,以使页面更具响应性。看https://www.chromestatus.com/feature/5745543795965952 这些都来自JavaScript谷歌地图API代码。我可以在自己的代码中将{passive:true}添加到addEventListener(),

  • 问题内容: 在这里反应新手,请忍受我:)希望这将很容易解决 目前,我只是想让地图显示在屏幕上,但是当我运行代码时,页面完全空白,甚至其他div也没有出现。这是我的代码,摘录如下:https : //gist.github.com/JoeyBodnar/f76c5d434d57c6cc6108513ad79d4cb7 需要注意的几件事:1)从项目目录中,我已经运行了npm install –save

  • 我如何使用https://maps.googleapis.com/maps/api/js在谷歌地图的webview中,我试图展示一张谷歌地图,就像来自waqi weather的地图一样,地图上包含关于空气污染的信息。就这样https://aqicn.org/faq/2015-09-18/map-web-service-real-time-air-quality-tile-api/

  • 我的项目内容粘贴在下面。我想我已经有了从所有这些不同的帖子中推荐的一切,但是,像许多其他人一样,我得到了这个通货膨胀运行时错误。 这个实际的项目取自Vogella教程,它甚至不会编译。我从其他帖子中应用了相同问题的修复。 谁能告诉我如何使这工作?有人知道任何地方有一个可行的例子吗?谢谢,加里 清单文件。.. 我的主布局XML文件。... MainActivity.java文件。..(祝代码粘贴在此

  • 是否可以使用Google API为网站创建一个与此完全相同的地图: https://www.google.pl/maps/place/Googleplex/@37.422,-122.0840835,19z/data=!4m2!3m1!1s0x808fba02425dad8f: 0x6c296c66619367e0 所以我想要的是将地点ID传递给API,以获得一个像Googleplex这样的地方,我

  • 我正在做一个项目,选择世界各地的随机地点,需要从谷歌街景的一些功能。我正在使用谷歌地图的API v3。我的问题是getPanoramaByLocation方法。根据谷歌文档,getPanoramaByLocation是: 谢谢大家,希望这对未来的任何人都有帮助。