Как добиться кругового маркера на карте Google с помощью react?

#javascript #reactjs #google-maps #react-google-maps

#javascript #reactjs #google-карты #react-google-maps

Вопрос:

Я использую react-google-maps для реализации карты. Я могу добиться создания по умолчанию, в частности, в широте и локальной сети

Но я пытаюсь добиться кругового маркера. Я использую google.maps.drawing.OverlayType.CIRCLE для достижения кругового маркера, но получаю ошибку

введите описание изображения здесь

Не могли бы вы подсказать мне, как этого добиться?

Код

 import React, { Component } from 'react';
import { withGoogleMap, GoogleMap, Marker } from 'react-google-maps';

class HomeComponent extends Component {

    constructor(props) {
        super(props);

        this.state = {
            data: [
                { "name": "Delhi", "coordinates": { lng: 77.1025, lat: 28.7041 }, "mag": 3.3 },
                { "name": "Seoul", "coordinates": { lng: 126.9780, lat: 37.5665 }, "mag": 5.0 },
                { "name": "Shanghai", "coordinates": { lng: 121.4737, lat: 31.2304 }, "mag": 3.3 },
                { "name": "Beijing", "coordinates": { lng: 116.4074, lat: 39.9042 }, "mag": 5.0 },
                { "name": "Mumbai", "coordinates": { lng: 72.8777, lat: 19.0760 }, "mag": 3.3 },
                { "name": "Moscow", "coordinates": { lng: 37.6173, lat: 55.7558 }, "mag": 5.2 },
                { "name": "Dhaka", "coordinates": { lng: 90.4125, lat: 23.8103 }, "mag": 1.5 },
                { "name": "Kolkata", "coordinates": { lng: 88.3639, lat: 22.5726 }, "mag": 4.9 },
                { "name": "Istanbul", "coordinates": { lng: 28.9784, lat: 41.0082 }, "mag": 2.1 },
                { "name": "Tampa", "coordinates": { lng: -82.452606, lat: 27.964157 }, "mag": 3.1 },
                { "name": "canada", "coordinates": { lat: 56.1304, lng: -106.3468 }, "mag": 6.1 },
                { "name": "Karnataka", "coordinates": { lat: 15.3173, lng: 75.7139 }, "mag": 6.1 },
            ]
        }
    }

    render() {
        const GoogleMapExample = withGoogleMap(props => (
            <GoogleMap
                defaultCenter={{ lat: 40.756795, lng: -73.954298 }}
                defaultZoom={4}
            >
                { 
                    this.state.data.map(item =>
                        <Marker
                            icon={{
                                path: google.maps.drawing.OverlayType.CIRCLE,
                                fillColor: 'red',
                                fillOpacity: .2,
                                scale: Math.pow(2, item.mag) / 2,
                                strokeColor: 'white',
                                strokeWeight: .5}
                            }
                            key={item.id}
                            title={item.name}
                            name={item.name}
                            position={{ lat: item.coordinates.lat, lng: item.coordinates.lng }}
                        />
                    )
                }
            </GoogleMap>
        ));
        return (
            <div>
                <GoogleMapExample
                    containerElement={<div style={{ height: `500px`, width: '100%' }} />}
                    mapElement={<div style={{ height: `100%` }} />}
                />
            </div>
        );
    }
}

export default HomeComponent;
  

Вот ссылка для CodeSandbox

Ожидаемый результат

введите описание изображения здесь

Комментарии:

1. Можете ли вы добавить sscce в свой вопрос? Вы можете использовать CodeSandbox .

2. @Pagemag обновил мой вопрос с помощью CodeSandbox

Ответ №1:

google на самом деле это не так, undefined поскольку вы включили его в свой index.html . На самом деле, если вы это сделаете console.log(google) , вы увидите, что объект правильно доступен и определен.

Что касается кругов, вы можете использовать google.maps.SymbolPath.CIRCLE вместо google.maps.drawing.OverlayType.CIRCLE

Редактировать рекурсию-коэн-5ci1i

Комментарии:

1. Хорошо понял, но есть ли какой-либо параметр, присутствующий в react-google-maps , с помощью которого мы можем добиться кругового маркера?

2. Что вы имеете в виду? Если вы просматриваете мою песочницу, она уже круглая и очень похожа на изображение внизу вашего вопроса. Если вы хотите настроить его дальше, я полагаю, вы можете изменить реквизит или вы имели в виду этот тип реализации? при необходимости вы также можете использовать пользовательские данные изображения

3. Извините, я этого не видел. но я использую google.maps.SymbolPath.CIRCLE , и все же он показывает, что Google не определен

4. требуется ли загружать скрипт карты в компоненте?

5. Что касается google того, что он все еще не определен (хотя я уже объяснял, что это не так — это просто работа eslint) — просто сделайте то, что я сделал в своей песочнице, и включите этот комментарий поверх вашего компонента: /*global google*/ . Если это не работает для вашего проекта, тогда используйте window.google.maps.SymbolPath.CIRCLE . Если это все еще не работает, используйте withScriptjs для загрузки скрипта в компонент вместо index.html . Обратитесь к Шагу 3 и Шагу 4 этой документации