Добавление маркера в Карты Google в Google-карте-реагировании
Я использую google-map-react
пакет НПМ, чтобы создать карту Google и несколько маркеров.
Вопрос: Как мы можем добавить маркеры Google Maps по умолчанию на карту?
Из этой проблемы Github нам кажется, что нам нужно получить доступ к внутреннему API Карт Google, используя функцию onGoogleApiLoaded.
Обратившись к примеру из документов API JS API Google Maps, мы можем использовать следующий код для рендеринга маркера, но как определить ссылки на map
?
var marker = new google.maps.Marker({
position: myLatLng,
map: map,
title: 'Hello World!'
});
Текущий код:
renderMarkers() {
...
}
render() {
return (
<div style={{'width':800,'height':800}}>
<GoogleMap
bootstrapURLKeys={{key: settings.googleMapApiKey}}
defaultZoom={13}
defaultCenter={{
lat: this.props.user.profile.location.coordinates[1],
lng: this.props.user.profile.location.coordinates[0]
}}
onGoogleApiLoaded={({map, maps}) => this.renderMarkers()}
yesIWantToUseGoogleMapApiInternals
>
</GoogleMap>
</div>
);
}
Ответы
Ответ 1
Это может быть не совсем ясно из описания в Readme, но аргумент maps
является, по сути, объектом API карт (а map
- это, конечно, текущий экземпляр Google Map). Поэтому вы должны передать оба метода:
onGoogleApiLoaded={({map, maps}) => this.renderMarkers(map, maps)}
и использовать их:
renderMarkers(map, maps) {
let marker = new maps.Marker({
position: myLatLng,
map,
title: 'Hello World!'
});
}
Ответ 2
Добавление маркера на карту не так просто, как хотелось бы, в основном из-за запутанных документов, но здесь у вас есть простой пример:
const Map = props => {
return (
<GoogleMapReact
bootstrapURLKeys={{ props.key }}
defaultCenter={{lat: props.lat, lng: props.lng}}
defaultZoom={props.zoom}>
{/* This is the missing part in docs:
*
* Basically, you only need to add a Child Component that
* takes 'lat' and 'lng' Props. And that Component should
* returns a text, image, super-awesome-pin (aka, your marker).
*
*/}
<Marker lat={props.lat} lng={props.lng}} />
</GoogleMapReact>
)
}
const Marker = props => {
return <div className="SuperAwesomePin"></div>
}