Как повернуть значок маркера (изображение svg) в реагирующих картах Google

Для моего приложения React я внедряю Google Maps. Я использую библиотеку react-google-maps для карт. Я хочу повернуть значок маркера настройки.

У меня есть файл SVG (который имеет несколько путей и полигонов), но Карты Google требуются только в строковом типе (я думаю, что они создадут SVG после указания пути к значку) та же проблема, что и ссылка.

Я следовал тому же ответу, но реализую его в React, поэтому не могу преобразовать этот код в React.

Рабочий код на JS

var measle = new google.maps.Marker({
    position: map.getCenter(),
    map: map,
    optimized: false,
    icon: {
      url: "https://maps.gstatic.com/intl/en_us/mapfiles/markers2/measle.png",
      size: new google.maps.Size(7, 7),
      anchor: new google.maps.Point(3.5, 3.5)
    }
  })

var rotationAngle = 10;
  google.maps.event.addListenerOnce(map, 'idle', function() {
    setInterval(function() {
    console.log("transform: rotate(" + rotationAngle + 'deg)');  $('img[src="http://www.geocodezip.com/mapIcons/SO_20170925_multiplePaths_mod.svg"]').css({
        'transform': 'rotate(' + rotationAngle + 'deg)',
        'transform-origin': '39px 60px'
      });
      rotationAngle += 10;
      rotationAngle %= 360;
    }, 1000);
  });
}

Мой код в React (в React Google Maps)

componentWillUpdate(){
      var rotationAngle = 10;
      if(this.props.refs.map){
        setInterval(() => {
                let img = React.createElement("img", {
                src: "../../../public/images/amb.svg",
                style: {transform: "rotate(" + rotationAngle + "deg)", transformOrigin: "39px 60px"},
                ref: image => {
                  // this.handleSize(image);
                }
              });
              rotationAngle += 10;
              rotationAngle %= 360;
            }, 1000);
     
      }
    }
    
    ---------------------------------------------
    <GoogleMap
        defaultCenter={props.MapCenter}
        defaultZoom={15}
        ref={props.onMapMounted}
        onCenterChanged={props.onCenterChanged}
        defaultOptions={{streetViewControl: false,mapTypeControl: false,
        styles:[
      {
        "featureType": "poi.business",
        "stylers": [
          {
            "visibility": "off"
          }
        ]
      },
      {
        "featureType": "poi.park",
        "elementType": "labels.text",
        }}
      >
      {(BStatus !== 'picked' || BStatus !== 'dropped' || BStatus !== 'completed') && props.directions  && <DirectionsRenderer directions={props.directions} options={{suppressMarkers: true}} />}
        {props.pickupLocation && 
           <Marker 
           position={props.pickupLocation}
           visible={props.isShowPickMarker ? true : false}
           icon={require('../../../public/images/pick.png')}
         >
         </Marker>
         }  
         {props.dropoffLocation && <Marker
           position={props.dropoffLocation}
           visible={props.isShowDropMarker ? true : false} 
           icon={require('../../../public/images/drop.png')}
         >
            </Marker>
           }
        { props.waypoints && <Marker
            position={props.waypoints}
            visible={props.isShowDropMarker ? true : false} 
            icon = {{
                  url: require('../../../public/images/amb.svg'),
                }}
            >
            </Marker>
           }
      </GoogleMap>

Моя проблема в том, что я не могу установить значение rotationAngle для значка карты. помогите пожалуйста, я уже давно застрял.


person zulqarnain    schedule 10.10.2018    source источник


Ответы (1)


Вы можете добиться того же с документом WEB API.

document.querySelector('[src*="../../../public/images/amb.svg"]').style.transform = 'rotate(' + rotationAngle + 'deg)';
document.querySelector('[src*="../../../public/images/amb.svg"]').style.transition = 'transform 1s linear';

Пожалуйста, убедитесь, что ваш src правильный. Кроме того, вам не нужно добавлять 100 КБ в размер вашего приложения, добавляя Jquery. Вы можете пропустить это с помощью этого подхода.

person Sakhi Mansoor    schedule 28.10.2018
comment
Это работает, но когда вы пытаетесь обновить вращение значка через некоторое время, значок выравнивается в положении по умолчанию, а затем вращается. Например: если начальная позиция 45 градусов, а новая позиция 90 градусов, значок станет 0 градусов примерно на секунду, а затем 90 градусов. Который выглядит глючным. Любое решение для этого? PS это происходит только с маркером Gmaps, а не тогда, когда значок/изображение выходит за рамки Gmap. то есть в ДОМ. - person Saurabh; 05.05.2021