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

使用react google maps在装载后向map/clusterer添加标记

乐宜民
2023-03-14

使用react-google-map与MarkerClub sterer,我如何添加和删除标记从地图/群集后,地图被安装,例如。

我尝试过简单地创建一个新标记,将map设置为refs.map

      onMarkerClustererClick: () => (markerClusterer) => {
        const marker = new Marker({
          position: {lat: 56.565123, lng: 9.030908},
          map: refs.map,
          title: 'Hello World!'
        });
      },

以及使用. addMarker()函数,该函数定义在用于react-google-map中的MarkerClub sterer中的mark er屋而立rplus中,但没有任何功能。

  onMarkerClustererClick: () => (markerClusterer) => {
    const marker = new Marker({
      position: {lat: 56.565123, lng: 9.030908},
      title: 'Hello World!'
    });

    refs.markerClusterer.addMarker(marker);
  },

两者都返回错误未捕获类型错误:无法读取未定义的属性“\uu SECRET\u MARKER\u cluster\u DO\u NOT\u USE\u或\u YOU\u WILL\u FIRED”

基于以下示例的代码:https://tomchentw.github.io/react-google-maps/#markerclusterer

const MapWithAMarkerClusterer = compose(
  withProps({
    googleMapURL: "https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=geometry,drawing,places&key=AIzaSyATVkXuYRZCkB73ZsPEJisDy74GnVusIJw",
    loadingElement: <div style={{ height: `100%` }} />,
    containerElement: <div className="mapContainer" />,
    mapElement: <div style={{ height: `100%` }} />,
  }),
  withHandlers(() => {
    const refs = {
      map: undefined,
      markerClusterer: undefined,
    }

    return {
      onMapMounted: () => ref => {
        refs.map = ref
      },
      onMarkerClustererMounted: () => ref => {
        refs.markerClusterer = ref
      },
      onMarkerClustererClick: () => (markerClusterer) => {
        const marker = new Marker({
          position: {lat: 56.565123, lng: 9.030908},
          title: 'Hello World!'
        });

        refs.markerClusterer.addMarker(marker);
      },
    }
  }),
  withScriptjs,
  withGoogleMap
)(props =>
  <GoogleMap
    ref={props.onMapMounted}
    defaultZoom={3}
    defaultCenter={{ lat: 25.0391667, lng: 121.525 }}
  >
    <MarkerClusterer
      ref={props.onMarkerClustererMounted}
      onClick={props.onMarkerClustererClick}
      averageCenter
      enableRetinaIcons
      gridSize={60}
    >
      {props.hotels.results.map((item, index) => (
        <Marker
          key={index}
          position={{lat: parseFloat(item.latitude), lng: parseFloat(item.longitude) }}
        />
      ))}
    </MarkerClusterer>
  </GoogleMap>
);

共有1个答案

萧焱
2023-03-14

您必须在集群附近添加带有state lat和state lon的标记,如果您尝试更改道具(它们是不可变的),地图将不会更新。

下面是一个如何以友好方式添加标记的示例:沙盒示例

以下示例:

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

const Markers = ({ places }) => {
  return places.map(place => {
    return (
      <Marker key={place.id} position={{ lat: place.lat, lng: place.lng }} />
    );
  });
};

const Map = ({ places, zoom, center }) => {
  return (
    <GoogleMap defaultZoom={zoom} defaultCenter={center}>
      <Markers places={places} />
    </GoogleMap>
  );
};

const getRandomInRange = (from, to, fixed) => {
  return (Math.random() * (to - from) + from).toFixed(fixed) * 1;
};

class MapWithMarker extends React.Component {
  constructor(props) {
    super(props);
    this.state = { places: this.props.places }; //initialize initial state from props
  }

  addPlace() {
    const newPlace = {
      id: this.state.places.length + 1,
      lat: getRandomInRange(-30.0, -35.0, 3),
      lng: getRandomInRange(110.0, 150.0, 3)
    };
    this.setState(prevState => ({
      places: [...prevState.places, newPlace]
    }));

    /*if(this.state.places.length > 10) { 
      clearInterval(this.intervalId)
    }*/
  }

  componentDidMount() {
    this.intervalId = setInterval(this.addPlace.bind(this), 1000);
  }
  componentWillUnmount() {
    clearInterval(this.intervalId);
  }

  render() {
    return (
      <Map
        center={this.props.center}
        zoom={this.props.zoom}
        places={this.state.places}
      />
    );
  }
}

export default withScriptjs(withGoogleMap(MapWithMarker));

告诉我这是否对你有帮助:)

 类似资料:
  • 问题内容: 我正在使用jquery和Google Maps V3 API向Google Maps动态添加标记。当按钮被点击时,一个请求被使用AJAX,它返回经纬度的对应于该结果,这将被用于放置标记物的JSON数组发送到服务器。但是在我的Javascript Conole中,出现错误:。我哪里做错了?这是我的代码: HTML标头JS: jQuery的 问题答案: 您应该将全局变量称为map。就是这样

  • 问题内容: 我不想要做的是在地图上显示从某些移动设备上选择的位置。有关位置的数据在那里。 我这里需要根据从服务器接收到的数据在地图上添加标记。 假设我已经将位置数据 ({Lat,Lang}) 设置为 状态标记, 然后如何添加它以显示在地图中。 我的地图代码如下! 使用过的npm包:-谷歌地图反应 问题答案: 您可以尝试: 如果有错误,也请在此处显示,我们稍后可以修复 =========== 标记点

  • 我需要添加一个HTML块作为使用iText7的所有页面的标题。标题包含一个图像徽标和一些文本。 在关闭文档对象之前,我现在有这样一个问题: 页脚工作正常,但页眉工作正常。 标题是这样加载的: 其中,的定义如下: 当我使用方法,效果很好,但只适用于第一页。所有其他内容都遵循它。 当我尝试使用方法添加它时,所有页面中只呈现图像。 顺便问一下,有没有办法得到标题段落的实际高度?我想,一旦解决了标题定位,

  • 在我的应用程序中,我使用的是谷歌地图,首先我是通过标记显示用户当前的位置,并通过一个透明的圆圈显示其准确性,现在当我想添加另一个标记到代表我以前的位置的同一点时,相同的代码对我不起作用,请有人帮我找出代码的错误,我只是想在一个地图视图中添加多个标记 下面是我用来显示两个标记的代码:- 通过使用MapOverlay类,我可以在地图上放置一个显示用户当前位置的pin,但当我使用MapOverlay1显

  • 目前我有一个应用程序,可以在后台获取手机的GPS位置,并将经度和纬度坐标添加到两个独立的数组列表中,我知道这部分工作得很好,但当我按下按钮将点标到地图上时,它只会在数组列表中有数百个点时标出第一个点

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