Пользовательские маршруты / пути / дороги на Google Maps - PullRequest
9 голосов
/ 30 апреля 2010

Привет, ребята. Мне нужно знать, достижимо ли то, что мне нужно.

Мне нужно иметь возможность, используя V2 ИЛИ V3 (предпочтительно 3), создавать пути, которые в некотором смысле игнорируют здания.

Я пытался создать даже файл kml, чтобы самостоятельно нарисовать все пути, а затем найти способ включить / выключить их при необходимости.

Например. Пользователь хочет перейти из точки А в точку Б. Между этими точками находится ряд зданий. Пользователь физически МОЖЕТ пройти через эти здания (это кампус). Я хочу показать им это на карте.

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

Если ВСЕ есть способ сделать это, я бы хотел знать.

Пример того, что мне нужно, можно найти здесь: http://www.uottawa.ca/maps/

Это все предопределенные пути, основанные на двух входах пользователя в выпадающее меню. Я могу ясно видеть это. Но я понятия не имею, если а) это можно сделать в v3, и б) как на земле они это сделали сами.

Требуется помощь и высоко ценится!

Ответы [ 2 ]

6 голосов
/ 30 апреля 2010

Если ваш кампус не очень большой, вы можете рассмотреть возможность определения всех маршрутов полилиний вручную для каждой перестановки, так что если у вас есть 4 здания A, B, C и D, вам нужно будет определить 6 маршрутов:

A:B, A:C, A:D, B:C, B:D, C:D 

Затем просто создайте некоторую базовую логику JavaScript, чтобы при выборе здания A в качестве отправной точки и здания C в качестве пункта назначения вы скрывали все полилинии и отображали только линию A: C. Вы также можете использовать методы полилинии Google , чтобы получить длину в метрах каждого маршрута, если это требуется.

Это краткая таблица того, сколько маршрутов вам нужно определить, в зависимости от количества зданий, которые у вас есть:

+-------------+--------+
|  Buildings  | Routes |
|-------------+--------+
|         5   |    10  |
|        10   |    45  |
|        15   |   105  |
|        20   |   190  |
|        25   |   300  |
+-------------+--------+

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


Интересное примечание: Я заметил, что предоставленная вами демонстрация Ottawa не выполняет никаких вызовов AJAX при запросе указаний. Поэтому есть большая вероятность, что они делают то же самое, что предложено выше.


UPDATE:

Вот рабочая демонстрация с использованием v3 Maps API , которая, я надеюсь, поможет вам начать:

<!DOCTYPE html>
<html> 
<head> 
  <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
  <title>Google Maps Campus</title> 
  <script src="http://maps.google.com/maps/api/js?sensor=false" 
           type="text/javascript"></script> 
</head> 
<body> 
  <div id="map" style="width: 550px; height: 400px"></div> 

  <div>Start: 
    <select id="start">
      <option>Building 1</option>
      <option>Building 2</option>
      <option>Building 3</option>
    </select>
  </div>

  <div>End: 
    <select id="end">
      <option>Building 1</option>
      <option>Building 2</option>
      <option>Building 3</option>
    </select>
  </div>

  <input type="button" onclick="drawDirections();" value="GO" />

  <script type="text/javascript"> 
    var mapOptions = { 
      mapTypeId: google.maps.MapTypeId.TERRAIN,
      center: new google.maps.LatLng(47.690, -122.310),
      zoom: 12
    };

    var map = new google.maps.Map(document.getElementById("map"), 
                                  mapOptions);

    // Predefine all the paths
    var paths = [];                         

    paths['1_to_2'] = new google.maps.Polyline({
      path: [
          new google.maps.LatLng(47.656, -122.360),
          new google.maps.LatLng(47.656, -122.343),
          new google.maps.LatLng(47.690, -122.310)
      ], strokeColor: '#FF0000'
    });

    paths['1_to_3'] = new google.maps.Polyline({
       path: [
          new google.maps.LatLng(47.656, -122.360),
          new google.maps.LatLng(47.656, -122.343),
          new google.maps.LatLng(47.690, -122.270)
       ], strokeColor: '#FF0000'
    });

    paths['2_to_3'] = new google.maps.Polyline({
       path: [
           new google.maps.LatLng(47.690, -122.310),
           new google.maps.LatLng(47.690, -122.270)
       ], strokeColor: '#FF0000'
    });

    function drawDirections() {
      var start = 1 + document.getElementById('start').selectedIndex;
      var end = 1 + document.getElementById('end').selectedIndex;
      var i;

      if (start === end) {
        alert('Please choose different buildings');
      }
      else {
        // Hide all polylines
        for (i in paths) {
          paths[i].setOptions({ map: null });
        }

        // Show the route
        if (typeof paths['' + start + '_to_' + end] !== 'undefined') {
          paths['' + start + '_to_' + end].setOptions({ map: map });
        }
        else if (typeof paths['' + end + '_to_' + start] !== 'undefined') {
          paths['' + end + '_to_' + start].setOptions({ map: map });
        }
      }
    }
  </script> 
</body> 
</html>

Скриншот:

Google Maps Campus

1 голос
/ 30 апреля 2010

Почему вы не можете просто добавить ломаную линию, чтобы показать "как летит ворона"?

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