Как сделать два маркера в буклете

Я хочу добавить два маркера после метода componentDidUpdate в реагировать. маркер не на первых порах. Я получаю положение маркера в методе componentDidUpate. проблема в том, когда я пытаюсь условно добавить маркер после воспроизведения анимации. это показывает мне другую ошибку в другой ситуации.

вот мой основной компонент рендера

 return (
      <div>
        <Map
          id="map"
          ref="leaflet"
          bounds={mapBounds}
          boundsOptions={{ padding: [10, 10] }}
          center={position}
          zoom={this.state.zoom}
          minZoom={this.state.minZoom}
          maxZoom={this.state.maxZoom}
        >
          <LayersControl position="topright">
            <LayersControl.BaseLayer name="OpenStreetMap">
              <TileLayer url="http://{s}.tile.osm.org/{z}/{x}/{y}.png" />
            </LayersControl.BaseLayer>
            <LayersControl.BaseLayer name="Google Streets" checked={true}>
              <GoogleLayer googlekey={key} maptype={road} />
            </LayersControl.BaseLayer>
          </LayersControl>

          <Polyline
            color="#111B24"
            weight="4"
            lineCap="round"
            positions={polylines}
            smoothFactor={1}
          />

          {this.props.currentAsset !== null ? (
            <Circle
              center={this.props.currentAsset.info.position}
              radius={this.props.currentAsset.radius * 1000}
            />
          ) : null}

          <AssetIcon markers={markers} />
          <LandMarkPopUp landMarkList={markers} />




        </Map>



        {isAnimating ? (
          <div className="mapOverLay">
            <Grid>
              <Grid.Column floated="left" width={5}>
                <div>
                  <h3>
                    <strong className="overlayHead">Speed: </strong>{" "}
                    {layoutData.speed} km/h
                  </h3>
                  <h3>
                    <strong className="overlayHead">Date: </strong>{" "}
                    {layoutData.date}
                  </h3>
                  <h3>
                    <strong className="overlayHead">Time: </strong>{" "}
                    {layoutData.time}
                  </h3>
                </div>
              </Grid.Column>
              <Grid.Column width={10}>
                <Button.Group>
                  <Button
                    icon="backward"
                    content="Slow Speed"
                    onClick={this.animationBackwardSpeedBtn}
                  />

                  <Button
                    icon={this.state.icon}
                    content={this.state.content}
                    onClick={this.animationOnOffButton}
                  />

                  <Button
                    icon="forward"
                    content="Fast Speed"
                    onClick={this.animationForwardSpeedBtn}
                  />
                </Button.Group>
              </Grid.Column>
            </Grid>
          </div>
        ) : null}
      </div>
    );

в моем компоненте сделал метод обновления я получаю значение позиции маркера

 componentDidUpdate(prevProps, prevState) {
    if (prevProps.currentAsset !== this.props.currentAsset) {
      this.circleBound(this.props.currentAsset);
    } else if (prevProps.animate !== this.props.animate) {
      var markerInfo = this.props.animate;
      console.log("markerInfo");
      var bounds = [];
      for (var i in markerInfo) {
        if (markerInfo[i].position[0] != 0 || markerInfo[i].position[1] != 0) {
          bounds.push(markerInfo[i].position);
        }
      }
      this.setState({
        mapBounds: bounds
      });

      var result = [];

      markerInfo.map((x, i) => {
        result.push({
          key: i,
          position: markerInfo[i].position,
          children: [markerInfo[i].children[3], markerInfo[i].children[2]],
          time: markerInfo[i].children[4]
        });
      });

      this.cardata = result;

      console.log("carData", result);

      const MyFirstmarker = result[0].position;  ///marker one

      const MyLastmarker = result[result.length - 1].position;  ///marker two

      console.log("animation start point ", MyFirstmarker);

      console.log("animation last point ", MyLastmarker);


      this.playAnimation();

      this.props.sendAnimationTime(true);


    } else if (prevProps.route !== this.props.route) {


      var markerInfo = this.props.route;

      var bounds = [];
      for (var i in markerInfo) {
        if (markerInfo[i].position[0] != 0 || markerInfo[i].position[1] != 0) {
          bounds.push(markerInfo[i].position);
        }
      }
      this.setState({
        // markers: markerInfo,
        polylines: bounds,
        mapBounds: bounds
      });
    } else if (prevProps.data !== this.props.data) {
      const nearLm = this.props.data;

      var markerPromise = new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve(this.props.data);
        }, 1500);
      });

      markerPromise.then(markerInfo => {
        var bounds = [];
        var nearLanMark = [];
        for (var i in markerInfo) {
          if (
            markerInfo[i].position[0] != 0 ||
            markerInfo[i].position[1] != 0
          ) {
            bounds.push(markerInfo[i].position);
          }
        }
        if (bounds.length == 0) {
          this.setState({
            markers: markerInfo,
            polylines: [[0, 0], [0, 0]],
            mapBounds: this.state.mapBounds
          });
        } else {
          this.setState({
            markers: markerInfo,
            polylines: [[0, 0], [0, 0]],
            mapBounds: bounds
          });
        }
      });
    }
  }

я хочу, чтобы значения myFirstMarker и MylastMarker отображались в качестве маркера в компоненте карты в начале анимации. Как я могу это сделать?

если понадобится какая-либо иллюстрация, я опишу. Благодарю.

0 ответов

Другие вопросы по тегам