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

在React中使用react-google-maps进行地理定位

江建明
2023-03-14

如何在react-google-maps中更改defaultCenter?我需要找到我的地理定位并更改缺省值lat和LNG。

import React from "react";
import { withScriptjs, withGoogleMap, GoogleMap, Marker } from "react-google-maps";

const getLocation = () =>{
   const pos = {};
   const geolocation = navigator.geolocation;
   if (geolocation) {
      geolocation.getCurrentPosition(findLocal, showEror);
   }
   function findLocal(position){
      pos.lat = position.coords.latitude;
      pos.lng = position.coords.longitude;
   }
   function showEror(){console.log(Error)}
   return pos;
};
const myLocation = getLocation(); // object has lat and lng

接下来,我需要将数据传输到组件MapWithAMarker:ecenter={myLocation}和Marker position={myLocation}

class GoogleMapCenter extends React.Component{
    render(){  
    const MapWithAMarker = withScriptjs(withGoogleMap(props =>
        <GoogleMap
            defaultZoom={10}
            defaultCenter={{ lat: -34.397, lng: 150.644 }}>
            {props.isMarkerShown && <Marker position={{ lat: -34.397, lng: 150.644 }} />}
        </GoogleMap>
    ));

    return(
        <MapWithAMarker
            isMarkerShown
            googleMapURL="https://maps.googleapis.com/maps/api/js?key=AIzaSyC4R6AN7SmujjPUIGKdyao2Kqitzr1kiRg&v=3.exp"
            loadingElement={<div style={{ height: `100%` }} />}
            containerElement={<div style={{ height: `400px` }} />}
            mapElement={<div style={{ height: `100%` }} />}
        />
    )
  }
}
export default GoogleMapCenter;
 <MapWithAMarker
            center={this.props.myLocation}
            position={this.props.myLocation}
            isMarkerShown
            googleMapURL="https://maps.googleapis.com/maps/api/js?key=AIzaSyC4R6AN7SmujjPUIGKdyao2Kqitzr1kiRg&v=3.exp"
            loadingElement={<div style={{ height: `100%` }} />}
            containerElement={<div style={{ height: `400px` }} />}
            mapElement={<div style={{ height: `100%` }} />}
        />
        <GoogleMap
            defaultZoom={10}
            defaultCenter={this.props.myLocation}>
            {props.isMarkerShown && <Marker position={this.props.myLocation} />}
        </GoogleMap>

共有1个答案

商辰钊
2023-03-14

DefaultCenter这样的默认属性只能设置为初始状态,center属性可以用来重新呈现(居中)地图。

下面的示例演示如何基于当前位置将地图居中

class App extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      currentLatLng: {
        lat: 0,
        lng: 0
      },
      isMarkerShown: false
    }
  }

  showCurrentLocation = () => {
    if (navigator.geolocation) {
      navigator.geolocation.getCurrentPosition(
        position => {
          this.setState(prevState => ({
            currentLatLng: {
              ...prevState.currentLatLng,
              lat: position.coords.latitude,
              lng: position.coords.longitude
            },
            isMarkerShown: true
          }))
        }
      )
    } else {
      error => console.log(error)
    }
  }


  componentDidMount() {
    this.showCurrentLocation()
  }

  render() {
    return (
      <div>
        <MapWithAMarker
          isMarkerShown={this.state.isMarkerShown}
          currentLocation={this.state.currentLatLng} />
      </div>
    );
  }
}

哪里

const MapWithAMarker = compose(
    withProps({
        googleMapURL: "https://maps.googleapis.com/maps/api/js",
        loadingElement: <div style={{ height: `100%` }} />,
        containerElement: <div style={{ height: `400px` }} />,
        mapElement: <div style={{ height: `100%` }} />,
    }),
    withScriptjs,
    withGoogleMap
)((props) =>
    <GoogleMap
        defaultZoom={8}
        center={{ lat: props.currentLocation.lat, lng: props.currentLocation.lng }}
    >
        {props.isMarkerShown && <Marker position={{ lat: props.currentLocation.lat, lng: props.currentLocation.lng }} onClick={props.onMarkerClick} />}
    </GoogleMap>
)

演示(编辑)

 类似资料:
  • React Native Mapping Integration 这个包提供了一个兼容React Native,并且可以使用相同的JavaScript API在iOS和Android平台上运行的谷歌地图UI组件。 安装 npm install --save react-native-maps-google

  • 使用pathTemplate指向my tiles位置,该位置必须具有以下层次结构: 因此,我真正的问题是如何为我的区域获取瓷砖。 我可以通过从google maps瓷砖服务器中保存瓷砖来手动完成,但是我不知道它是否合法,而且它也会花费很多时间和计算(当放大时,我需要计算下一个瓷砖的协调) 所以这将是很好的,如果google map API提供了一种下载一个区域瓷砖的方法(需要缩放), 另一种选择是

  • 所以我正在使用google-maps-react库呈现一些地图。但是,我对google maps组件产生的最外层的div有一个问题。我不希望div比它的父div大,但默认设置为100%宽度+高度以及位置绝对(所以oveflow:hidden不起作用)。它也没有id或类名,因此我无法直接获取div。 下面是我如何在一个react方法的return语句中使用映射的代码。样式更改对最外的div下面的di

  • 我正在使用Google Maps API v3 Geolocation来获取用户的实际位置。我从谷歌开发者那里找到了这篇帖子: https://developers.google.com/maps/documentation/javascript/examples/map-geolocation 这里是我的代码(相当于Google Maps示例的代码): 这在Firefox中工作得很好,但在Goo

  • 问题内容: 我正在使用NPM包创建Google Map和几个标记。 问题: 我们如何将默认的Google Maps标记添加到地图? 从这个Github问题来看,似乎我们需要使用onGoogleApiLoaded函数访问内部Google Maps API 。 参考Google Maps JS API文档中的示例 ,我们可以使用以下代码来呈现标记,但是如何定义对的引用? 当前代码: 问题答案: 从自述