Карты Google рисуют маршрут по заданным координатам - PullRequest
0 голосов
/ 01 марта 2019

Я использую google-maps-react модуль и все до последнего растяжения в порядке.Используя этот пакет, я могу нажимать на карту, устанавливать несколько маркеров и определять свой маршрут «визуально».Я не думал, что Polygon не будет принимать во внимание фактические улицы и геометрию карты (глупо, я).Может ли кто-нибудь мне помочь и предложить, как правильно нарисовать маршруты на карте вместо прямых линий, соединяющих маркер X с маркером Y?Это то, что у меня пока что визуально:

enter image description here

И это массив координат, который я формирую в своем приложении и рисую многоугольник с помощью:

enter image description here

Я использую API Google Maps и пакет google-maps-react.

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Как правильно упоминалось в комментарии, для этой цели необходимо использовать API направлений :

Направления отображаются в виде ломаной линии, рисующей маршрут на карте, или дополнительнов виде последовательности текстового описания внутри элемента (например, «Поверните направо на съезд моста Уильямсбург»)

В следующем примере показано, как интегрировать Google Maps API Directions Service в google-maps-react для отображения маршрута.

Предполагается, что data prop содержит координаты, представленные в формате, указанном в предоставленном вопросе.Направления Сервисный код был адаптирован из этого примера

Пример

class MapContainer extends React.Component {
  constructor(props) {
    super(props);
    this.handleMapReady = this.handleMapReady.bind(this);
  }

  handleMapReady(mapProps, map) {
    this.calculateAndDisplayRoute(map);
  }

  calculateAndDisplayRoute(map) {
    const directionsService = new google.maps.DirectionsService();
    const directionsDisplay = new google.maps.DirectionsRenderer();
    directionsDisplay.setMap(map);


    const waypoints = this.props.data.map(item =>{
      return{
        location: {lat: item.lat, lng:item.lng},
        stopover: true
      }
    })
    const origin = waypoints.shift().location;
    const destination = waypoints.pop().location;

    directionsService.route({
      origin: origin,
      destination: destination,
      waypoints: waypoints,
      travelMode: 'DRIVING'
    }, (response, status) => {
      if (status === 'OK') {
        directionsDisplay.setDirections(response);
      } else {
        window.alert('Directions request failed due to ' + status);
      }
    });
  }

  render() {
    return (
      <div className="map-container">
        <Map
          google={this.props.google}
          className={"map"}
          zoom={this.props.zoom}
          initialCenter={this.props.center}
          onReady={this.handleMapReady}
        />
      </div>
    );
  }
}

Демо

0 голосов
/ 01 марта 2019

Возможно, вы захотите проверить эту страницу https://developers.google.com/maps/documentation/roads/snap

Ответ от этого вызова API с данными, которые вы уже получили из нарисованных линий, должен дать вам данные JSON, которые вам нужнынаметьте свой путь к дорогам.Возможно, это не самое элегантное решение, так как вам может понадобиться добавить кнопку или что-то для расчета маршрута к дорогам или что-то подобное.

В качестве альтернативы вы можете отправить вызов API после того, как у вас есть две точки и обновление карты после каждого сегмента линии.Это потребует много вызовов API, хотя.Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...