-1

У меня проблема с принятием значений lat и lng с места с помощью google maps javascript api places searchbox.Получить lat и lng из места с картами google

Это код, который предоставляет Google для поиска мест внутри поискового запроса.

<!DOCTYPE html> 
<html> 
    <head> 
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no"> 
    <meta charset="utf-8"> 
    <style> 
     html, body { 
     height: 100%; 
     margin: 0; 
     padding: 0; 
     } 
     #map { 
     height: 100%; 
     } 
.controls { 
    margin-top: 10px; 
    border: 1px solid transparent; 
    border-radius: 2px 0 0 2px; 
    box-sizing: border-box; 
    -moz-box-sizing: border-box; 
    height: 32px; 
    outline: none; 
    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3); 
} 

#pac-input { 
    background-color: #fff; 
    font-family: Roboto; 
    font-size: 15px; 
    font-weight: 300; 
    margin-left: 12px; 
    padding: 0 11px 0 13px; 
    text-overflow: ellipsis; 
    width: 300px; 
} 

#pac-input:focus { 
    border-color: #4d90fe; 
} 

.pac-container { 
    font-family: Roboto; 
} 

#type-selector { 
    color: #fff; 
    background-color: #4d90fe; 
    padding: 5px 11px 0px 11px; 
} 

#type-selector label { 
    font-family: Roboto; 
    font-size: 13px; 
    font-weight: 300; 
} 

    </style> 
    <title>Places Searchbox</title> 
    <style> 
     #target { 
     width: 345px; 
     } 
    </style> 
    </head> 
    <body> 
    <input id="pac-input" class="controls" type="text" placeholder="Search Box"> 
    <div id="map"></div> 
    <script> 
// This example adds a search box to a map, using the Google Place Autocomplete 
// feature. People can enter geographical searches. The search box will return a 
// pick list containing a mix of places and predicted search terms. 

function initAutocomplete() { 
    var map = new google.maps.Map(document.getElementById('map'), { 
    center: {lat: -33.8688, lng: 151.2195}, 
    zoom: 13, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
    }); 

    // Create the search box and link it to the UI element. 
    var input = document.getElementById('pac-input'); 
    var searchBox = new google.maps.places.SearchBox(input); 
    map.controls[google.maps.ControlPosition.TOP_LEFT].push(input); 

    // Bias the SearchBox results towards current map's viewport. 
    map.addListener('bounds_changed', function() { 
    searchBox.setBounds(map.getBounds()); 
    }); 

    var markers = []; 
    // [START region_getplaces] 
    // Listen for the event fired when the user selects a prediction and retrieve 
    // more details for that place. 
    searchBox.addListener('places_changed', function() { 
    var places = searchBox.getPlaces(); 

    if (places.length == 0) { 
     return; 
    } 

    // Clear out the old markers. 
    markers.forEach(function(marker) { 
     marker.setMap(null); 
    }); 
    markers = []; 

    // For each place, get the icon, name and location. 
    var bounds = new google.maps.LatLngBounds(); 
    places.forEach(function(place) { 
     var icon = { 
     url: place.icon, 
     size: new google.maps.Size(71, 71), 
     origin: new google.maps.Point(0, 0), 
     anchor: new google.maps.Point(17, 34), 
     scaledSize: new google.maps.Size(25, 25) 
     }; 

     // Create a marker for each place. 
     markers.push(new google.maps.Marker({ 
     map: map, 
     icon: icon, 
     title: place.name, 
     position: place.geometry.location 

     })); 

     if (place.geometry.viewport) { 
     // Only geocodes have viewport. 
     bounds.union(place.geometry.viewport); 
     } else { 
     bounds.extend(place.geometry.location); 
     } 
    }); 
    map.fitBounds(bounds); 
    }); 
    // [END region_getplaces] 
} 

    </script> 
    <script src="https://maps.googleapis.com/maps/api/js?key=[API-KEY]&libraries=places&callback=initAutocomplete" 
     async defer></script> 
    </body> 
</html> 

И теперь я хочу получить точные значения lat и lng для некоторых переменных в javascript. После некоторых исследований я нашел этот

var location = place.geometry.location; 
var lat = location.lat(); 
var lng = location.lng(); 

Так что, когда я console.log переменные lat и lng быть appearead на консоли хрома. Проблема в том, что я не могу понять, где я должен интегрировать код lat и lng из местоположения, чтобы он мог работать с примером из Google?

Любая идея?

Спасибо!

+0

Что вы хотите сделать с широтой и долготой? – geocodezip

+0

@geocodezip Я хотел бы поместить их в две разные переменные (lat и lng) и распечатать их с помощью console.log. Как я уже говорил в последнем абзаце –

+0

Вы помещаете их в отдельные значения. Какая польза от печати в журнале консоли? В настоящее время 'console.log' запускается до того, как возвращаются значения автозаполнения (я получаю ошибку javascript' Uncaught TypeError: location.lat не является функцией ', она находится вне функции обратного вызова). – geocodezip

ответ

0

Попробуйте этот код:

<!DOCTYPE html> 
 
<html> 
 
    <head> 
 
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no"> 
 
    <meta charset="utf-8"> 
 
    <style> 
 
     html, body { 
 
     height: 100%; 
 
     margin: 0; 
 
     padding: 0; 
 
     } 
 
     #map { 
 
     height: 100%; 
 
     } 
 
.controls { 
 
    margin-top: 10px; 
 
    border: 1px solid transparent; 
 
    border-radius: 2px 0 0 2px; 
 
    box-sizing: border-box; 
 
    -moz-box-sizing: border-box; 
 
    height: 32px; 
 
    outline: none; 
 
    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3); 
 
} 
 

 
#pac-input { 
 
    background-color: #fff; 
 
    font-family: Roboto; 
 
    font-size: 15px; 
 
    font-weight: 300; 
 
    margin-left: 12px; 
 
    padding: 0 11px 0 13px; 
 
    text-overflow: ellipsis; 
 
    width: 300px; 
 
} 
 

 
#pac-input:focus { 
 
    border-color: #4d90fe; 
 
} 
 

 
.pac-container { 
 
    font-family: Roboto; 
 
} 
 

 
#type-selector { 
 
    color: #fff; 
 
    background-color: #4d90fe; 
 
    padding: 5px 11px 0px 11px; 
 
} 
 

 
#type-selector label { 
 
    font-family: Roboto; 
 
    font-size: 13px; 
 
    font-weight: 300; 
 
} 
 

 
    </style> 
 
    <title>Places Searchbox</title> 
 
    <style> 
 
     #target { 
 
     width: 345px; 
 
     } 
 
    </style> 
 
    </head> 
 
    <body> 
 
    <input id="pac-input" class="controls" type="text" placeholder="Search Box"> 
 
    <div id="map"></div> 
 
    <script> 
 
\t \t // This example adds a search box to a map, using the Google Place Autocomplete 
 
\t \t // feature. People can enter geographical searches. The search box will return a 
 
\t \t // pick list containing a mix of places and predicted search terms. 
 

 
\t \t function initAutocomplete() { 
 
\t \t var map = new google.maps.Map(document.getElementById('map'), { 
 
\t \t \t center: {lat: -33.8688, lng: 151.2195}, 
 
\t \t \t zoom: 13, 
 
\t \t \t mapTypeId: google.maps.MapTypeId.ROADMAP 
 
\t \t }); 
 

 
\t \t // Create the search box and link it to the UI element. 
 
\t \t var input = document.getElementById('pac-input'); 
 
\t \t var searchBox = new google.maps.places.SearchBox(input); 
 
\t \t map.controls[google.maps.ControlPosition.TOP_LEFT].push(input); 
 

 
\t \t // Bias the SearchBox results towards current map's viewport. 
 
\t \t map.addListener('bounds_changed', function() { 
 
\t \t \t searchBox.setBounds(map.getBounds()); 
 
\t \t }); 
 

 
\t \t var markers = []; 
 
\t \t // [START region_getplaces] 
 
\t \t // Listen for the event fired when the user selects a prediction and retrieve 
 
\t \t // more details for that place. 
 
\t \t searchBox.addListener('places_changed', function() { 
 
\t \t \t var places = searchBox.getPlaces(); 
 

 
\t \t \t if (places.length == 0) { 
 
\t \t \t return; 
 
\t \t \t } 
 

 
\t \t \t // Clear out the old markers. 
 
\t \t \t markers.forEach(function(marker) { 
 
\t \t \t marker.setMap(null); 
 
\t \t \t }); 
 
\t \t \t markers = []; 
 

 
\t \t \t // For each place, get the icon, name and location. 
 
\t \t \t var bounds = new google.maps.LatLngBounds(); 
 
\t \t \t places.forEach(function(place) { 
 
\t \t \t var icon = { 
 
\t \t \t \t url: place.icon, 
 
\t \t \t \t size: new google.maps.Size(71, 71), 
 
\t \t \t \t origin: new google.maps.Point(0, 0), 
 
\t \t \t \t anchor: new google.maps.Point(17, 34), 
 
\t \t \t \t scaledSize: new google.maps.Size(25, 25) 
 
\t \t \t }; 
 
\t \t \t console.log("latitude: " + place.geometry.location.lat() + ", longitude: " + place.geometry.location.lng()); 
 

 
\t \t \t // Create a marker for each place. 
 
\t \t \t markers.push(new google.maps.Marker({ 
 
\t \t \t \t map: map, 
 
\t \t \t \t icon: icon, 
 
\t \t \t \t title: place.name, 
 
\t \t \t \t position: place.geometry.location 
 

 
\t \t \t })); 
 

 
\t \t \t if (place.geometry.viewport) { 
 
\t \t \t \t // Only geocodes have viewport. 
 
\t \t \t \t bounds.union(place.geometry.viewport); 
 
\t \t \t } else { 
 
\t \t \t \t bounds.extend(place.geometry.location); 
 
\t \t \t } 
 
\t \t \t }); 
 
\t \t \t map.fitBounds(bounds); 
 
\t \t }); 
 
\t \t // [END region_getplaces] 
 
\t \t } 
 
    </script> 
 
    <script src="https://maps.googleapis.com/maps/api/js?key=[API-KEY]&libraries=places&callback=initAutocomplete" 
 
     async defer></script> 
 
    </body> 
 
</html>

+0

Спасибо, помощник! Вы просто! –

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