#google-maps #google-geocoder
#google-карты #google-геокодер
Вопрос:
Я пытаюсь подключить локальный контекст Google Maps к своему веб-сайту, и я хочу использовать строку адреса (1234 Main St, город, штат, США) для центрирования и отображения маркера на моей карте.
Вот код, который у меня есть, который отображает простую карту на сайте, но мне нужна помощь, чтобы заставить адрес работать вместо координат.
Я должен использовать геокодер, но мне нужна помощь, чтобы связать его с локальной контекстной картой Google Maps.
let map;
function initMap() {
const localContextMapView = new google.maps.localContext.LocalContextMapView({
element: document.getElementById("map"),
placeTypePreferences: ["restaurant", "tourist_attraction"],
maxPlaceCount: 12,
});
const center = { lat: 37.4219998, lng: -122.0840572 };
map = localContextMapView.map;
new google.maps.Marker({ position: center, map: map });
map.setOptions({
center: center,
zoom: 14,
});
}
https://jsfiddle.net/cegytdj6/
фрагмент кода:*
let map;
function initMap() {
const localContextMapView = new google.maps.localContext.LocalContextMapView({
element: document.getElementById("map"),
placeTypePreferences: ["restaurant", "tourist_attraction"],
maxPlaceCount: 12,
});
const center = {
lat: 37.4219998,
lng: -122.0840572
};
map = localContextMapView.map;
new google.maps.Marker({
position: center,
map: map
});
map.setOptions({
center: center,
zoom: 14,
});
}
/* Always set the map height explicitly to define the size of the div
* element that contains the map. */
#map {
height: 100%;
}
/* Optional: Makes the sample page fill the window. */
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
<!DOCTYPE html>
<html>
<head>
<title>Local Context Basic</title>
<script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script>
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qkamp;callback=initMapamp;libraries=localContextamp;v=beta" defer></script>
<!-- jsFiddle will insert css and js -->
</head>
<body>
<div id="map"></div>
</body>
</html>
Ответ №1:
Смотрите пример простого геокодера, чтобы узнать, как использовать геокодер в Google Maps Javascript API v3. Приведенный ниже код будет использовать геокодер для возврата координат для «1600 Amphitheatre Parkway, Маунтин-Вью, Калифорния».
let geocoder = new google.maps.Geocoder();
geocoder.geocode({ address: "1600 Amphitheatre Parkway, Mountain View, CA" }, (results, status) => {
if (status === "OK") {
const center = results[0].geometry.location;
map.setCenter(center);
new google.maps.Marker({ position: center, map: map });
map.setOptions({
center: center,
zoom: 14,
});
включение этого в существующий код:
let map;
function initMap() {
const localContextMapView = new google.maps.localContext.LocalContextMapView({
element: document.getElementById("map"),
placeTypePreferences: ["restaurant", "tourist_attraction"],
maxPlaceCount: 12,
});
map = localContextMapView.map;
let geocoder = new google.maps.Geocoder();
geocoder.geocode({
address: "1600 Amphitheatre Parkway, Mountain View, CA"
}, (results, status) => {
if (status === "OK") {
const center = results[0].geometry.location;
map.setCenter(center);
new google.maps.Marker({
position: center,
map: map
});
map.setOptions({
center: center,
zoom: 14,
});
} else {
alert("Geocode was not successful for the following reason: " status);
}
});
}
фрагмент кода:
let map;
function initMap() {
const localContextMapView = new google.maps.localContext.LocalContextMapView({
element: document.getElementById("map"),
placeTypePreferences: ["restaurant", "tourist_attraction"],
maxPlaceCount: 12,
});
map = localContextMapView.map;
let geocoder = new google.maps.Geocoder();
geocoder.geocode({
address: "1600 Amphitheatre Parkway, Mountain View, CA"
}, (results, status) => {
if (status === "OK") {
const center = results[0].geometry.location;
map.setCenter(center);
new google.maps.Marker({
position: center,
map: map
});
map.setOptions({
center: center,
zoom: 14,
});
} else {
alert("Geocode was not successful for the following reason: " status);
}
});
}
/* Always set the map height explicitly to define the size of the div
* element that contains the map. */
#map {
height: 100%;
}
/* Optional: Makes the sample page fill the window. */
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
<!DOCTYPE html>
<html>
<head>
<title>Local Context Basic</title>
<script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script>
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qkamp;callback=initMapamp;libraries=localContextamp;v=beta" defer></script>
<!-- jsFiddle will insert css and js -->
</head>
<body>
<div id="map"></div>
</body>
</html>
Ответ №2:
Похоже, у вас уже есть адрес, и вам просто нужно использовать API геокодирования для преобразования адреса в координаты. Внутри вашего скрипта вам нужно получить CDN API геокодирования с перезагрузкой страницы. Для этого я буду использовать axios. Вот код; Добавьте эти две строки в начало вашей HTML-страницы.
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script>
Теперь вы можете сделать AJAX-запрос с помощью axios.
Внутри вашего скрипта;
axios.get(`https://maps.googleapis.com/maps/api/geocode/json?address=Your_addressamp;key=YOUR_API_KEY`)
.then(response => {
var lt = response.geometry.location.lat;
var ln = response.geometry.location.lng;
map.setCenter({lat: lt, lng:ln});
marker.setCenter({lat: lt, lng: ln});
})
.catch(error => {
console.log(error) //or whatever you want
})
Комментарии:
1. Спасибо за ваш комментарий, Ирфан. У меня возникли проблемы с этим, но в другом сообщении было рекомендовано другое решение, которое сработало. Еще раз спасибо, мой друг.
2. Спасибо! Но вы все равно можете использовать axios где угодно, чтобы сделать AJAX-запрос без написания необработанного кода. Оставьте положительный отзыв, если это помогло. Спасибо!
3. Вам это абсолютно не нужно. Геокодирование — это служба, которая является частью JS API, и поэтому нет необходимости вызывать веб-службу (и использовать для этого дополнительные библиотеки …).