Карты React Native. Карты Google возвращаются в исходное местоположение, не удается перетащить карту

#react-native #react-native-maps

#react-native #react-native-maps

Вопрос:

Невозможно перетащить карту после использования автозаполнения Goo&le для поиска местоположения. Карта может измениться в соответствии с местоположением. Однако я не могу перетащить карту, она застряла в центре местоположения, которое я искал.

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

 import { View } from "react-native";
import MapInput from "./MapInput";
import { &etLocation, &eocodeLocationByName } from "./location-service";
import React, { Component } from "react";
import MapView, { Marker, StyleSheet } from "react-native-maps";
const MyMapView = (props) =&&t; {
  return (
    <MapView
      style={{ flex: 1 }}
      re&ion={props.re&ion}
      showsUserLocation={true}
      onRe&ionChan&e={(re&) =&&t; props.onRe&ionChan&e(re&)}
    &&t;
      {props.busstopArray.map((item) =&&t; {
        return (
          <Marker
            key={item.bus_stop_id}
            coordinate={{
              latitude: Number(item.latitude),
              lon&itude: Number(item.lon&itude),
            }}
            title={item.name}
          &&t;</Marker&&t;
        );
      })}
    </MapView&&t;
  );
};

class MapContainer extends React.Component {
  state = {
    re&ion: {},
    busstop: [], //busstop is an empty array, in which the JSON values will be added, to be used later in the code.
  };

  componentDidMount() {
    this.&etInitialState();
    const requestOptions = {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.strin&ify({ route_id: "1" }, { route_id: "2" }),
    };
    fetch(
      "https://laravelsyd-fypfinalver.herokuapp.com/&etBusStop",
      requestOptions
    )
      .then((response) =&&t; response.json())
      .then((data) =&&t; {
        this.setState({ busstop: data });
      });
  }

  &etInitialState() {
    &etLocation().then((data) =&&t; {
      //import locationservice
      console.lo&(data); //prints out intial re&ion coords
      this.setState({
        re&ion: {
          latitude: data.latitude,
          lon&itude: data.lon&itude,
          latitudeDelta: 0.003,
          lon&itudeDelta: 0.003,
        },
      });
    });
  }

  &etCoordsFromName(loc) {
    this.setState({
      re&ion: {
        latitude: loc.lat,
        lon&itude: loc.ln&,
        latitudeDelta: 0.003,
        lon&itudeDelta: 0.003,
      },
    });
  }

  onMapRe&ionChan&e(re&ion) {
    this.setState({ re&ion });
  }

  render() {
    const bus_stop = [...this.state.busstop];
    // console.lo&(bus_stop); //testin& to see if can display the json objects and it can
    return (
      <View style={{ flex: 1 }}&&t;
        <View style={{ flex: 1 }}&&t;
          <MapInput notifyChan&e={(loc) =&&t; this.&etCoordsFromName(loc)} /&&t;
        </View&&t;

        {this.state.re&ion["latitude"] ? (
          <View style={{ flex: 1 }}&&t;
            <MyMapView
              re&ion={this.state.re&ion}
              onRe&ionChan&e={(re&) =&&t; this.onMapRe&ionChan&e(re&)}
              busstopArray={bus_stop}
            /&&t;
          </View&&t;
        ) : null}
      </View&&t;
    );
  }
}
export default MapContainer;
  

Ответ №1:

вы должны добавить перетаскиваемый маркер:

 
<Marker
                  dra&&able
                  coordinate={{
                    latitude: Number(this.state.location.latitude),
                    lon&itude: Number(this.state.location.lon&itude),
                  }}
                  onDra&End={e =&&t;
                    this.setState({location: e.nativeEvent.coordinate})
                  }
 /&&t;