0

Я пытаюсь получить указания на позицию маркера Google Maps из почтового индекса, который пользователь может ввести в текстовое поле. Я использую Карты Google, места и направления Google.Проложить маршрут к маркерам Google Maps

Я нашел этот пример из Google, и я пытаюсь работать от него http://code.google.com/apis/maps/documentation/directions/

Я думаю, что я очень много там. Я хочу, чтобы пользователь мог щелкнуть маркер с карты, а затем щелкнуть ссылку, в которой говорится «Направления от маркера один». Я могу заставить это выглядеть правильно, и я передаю правильное местоположение в функцию, но по какой-то причине он не сохраняет все координаты latlng. Похоже, что он падает на одного из них, и поэтому он выдает ошибку. Если я распечатаю то, что я передаю новой функции (placeLoc), она отображает только одну из координат.

ошибка дает это: Uncaught Ошибка: Недопустимое значение для объекта: -0,5796900000000278

Херес код, который я получил до сих пор:

 function addPlaceResults(){ 

    var request = { 
     location: midWayPoint, 
     radius: 7000, 
     types: [type] 
    }; 

    infowindow = new google.maps.InfoWindow(); 
    var service = new google.maps.places.PlacesService(map); 
    service.search(request, callback); 
    service.getDetails(request, callback); 


    function callback(results, status) { 
     if (status == google.maps.places.PlacesServiceStatus.OK) { 
      for (var i = 0; i < results.length; i++) { 
      createMarker(results[i]); 
      } 
     } 
    } 

    function createMarker(place) { 
     var placeLoc = place.geometry.location; 
     var marker = new google.maps.Marker({ 
      map: map, 
      position: place.geometry.location 
     }); 

     var request = { reference: place.reference }; 
     service.getDetails(request, function(details, status) { 

      google.maps.event.addListener(marker, 'click', function() { 
       infowindow.setContent(
        details.name + "<br />" 
        + details.formatted_address + "<br />" 
        + "<a target='_blank' href='" + details.website +"'>Visit Website</a>" + "<br />" 
        + details.formatted_phone_number + "<br />" 
        + "<a href='#' onclick='dPoint1(" +placeLoc+ ")'>Directions from Marker One</a>" + "<br />" 

       ); 
      infowindow.open(map, this); 
      }); 
     }); 
    } 
}; 

     //directions from point one 
     function dPoint1(x) { 
    console.log(x); 
    directionsService = new google.maps.DirectionsService(); 
    directionsDisplay = new google.maps.DirectionsRenderer({ 
     suppressMarkers: true, 
     suppressInfoWindows: true 
    }); 

    directionsDisplay.setMap(map); 
    directionsDisplay.setPanel(document.getElementById('directions-panel')); 

    var request = { 
     origin: address1, 
     destination: x, 
     travelMode: google.maps.DirectionsTravelMode.DRIVING 
    }; 

    directionsService.route(request, function(response, status){ 
     if (status == google.maps.DirectionsStatus.OK) 
     { 
      directionsDisplay.setDirections(response); 
     } 
    }); 
}; 

Я попытался включить только соответствующий код и детали в этом вопросе. Если есть что-то, что я пропустил или что-то непонятное, сообщите мне, и я добавлю его/сделаю все возможное, чтобы прояснить себя.

Еще раз, я буду очень признателен за любую помощь.

Приветствия JA


Редактировать

Хорошо, что имеет смысл. Спасибо, парни.

Я пробовал использовать метод toString(), но это не работает. Я могу успешно передать строку с двумя значениями, разделенными запятой на функцию dPoint1, используя toUrlValue(). Когда я это сделаю, я могу напечатать их на консоли с помощью console.log (x, y), но я не могу запустить код. Я получаю ту же ошибку, что и раньше.

Я думаю, проблема в том, что мне нужно, чтобы они были одной, поэтому я могу добавить ее в пункт назначения: например, она должна быть в конечном счете назначена: x, но потому что мне нужно передать x & y у меня есть имеют назначение: x, y, которое выдает ошибку.

Я предполагаю, что мне нужно использовать метод google.maps.LatLng().

Я добавил это в конце прошлой ночью:

newlatlng = new google.maps.LatLng((placeLoc.lat()+placeLoc.lat())); 

, который дал мне несколько направлений, но не в нужном месте!

Есть ли у кого-нибудь идеи о том, как я могу это использовать?

Большое спасибо за всю помощь, которую вы мне дали.

JA

+0

Используйте запятую, чтобы произвести два аргумента для LatLng (которая нуждается в два номера, я удивлен, что работал только один!): 'Newlatlng = новый google.maps.LatLng (placeLoc.lat(), placeLoc .lat()); ' –

+0

Не уверен, что опечатка или нет, но попробуйте второе значение как placeLoc.lng() ' newlatlng = new google.maps.LatLng (placeLoc.lat(), placeLoc.lng()); ' –

+0

Спасибо за помощь, ребята. Вчера я его отсортировал. Новый код выглядит следующим образом: '+" Directions from Marker One "" Затем я изменил dPoint1, чтобы принять x & y, тогда я создал 'var newlatlng = new google.maps.LatLng (x, y);' в верхней части функции dPoint1 и использовал newlatlng как источник. Спасибо за то, что вы наклеились на меня со мной! JA – Jim

ответ

1

Это не будет работать

onclick='dPoint1(" +placeLoc+ ")' 

, потому что вы не можете передавать объекты в функции как то: конкатенации его в виде строки будет производить строковое представление, которое, вероятно, будет в форме «х, у». Вам нужно определить функцию dPoint1, чтобы взять x и y - что может хорошо работать, - но было бы лучше передать литеральные значения, явно выведенные из placeLoc.

0

Как отметил Andrew Leach:

onclick='dPoint1(" +placeLoc+ ")' 

Привычка работать как place.geometry.location является google.maps.LatLng объект: http://code.google.com/apis/maps/documentation/javascript/reference.html#PlaceGeometry

Однако google.maps.LatLng класс имеет toString() метод: http://code.google.com/apis/maps/documentation/javascript/reference.html#LatLng

Вы можете попробовать использовать что вместо передачи объекта google.maps.LatLng на dPoint1().

E.g.

onclick='dPoint1(" +placeLoc.toString()+ ")' 
+1

Вот что я сказал. 'onclick = 'dPoint1 (" + placeLoc + ")'' использует метод '.toString()', а существующая функция dPoint1() принимает только один аргумент. Возможно, будет работать функция для принятия двух аргументов; но это не очень удобно, потому что не очевидно, что 'placeLoc' превращается в два числа, разделенные запятыми. Это должно быть сделано в явном виде, чтобы упростить работу в будущем (а также в будущем - против изменений в формате '.toString()'). –

Смежные вопросы