如何显示名称列表中的多个标记
How to show multiple markers from a list of names
javascript
function loadMap(){
<!--set Map Options -->
var options = {
zoom: 9
};
<!--New map-->
var map = new google.maps.Map(document.getElementById('map'), options );
<!--Get location to put marker-->
var locations = document.querySelectorAll("[id='playgroundName']");
var bounds= new google.maps.LatLngBounds();
var infoWindow = new google.maps.InfoWindow();
var marker = new google.maps.Marker();
var infoWindowContent;
<!-- Calculate Latitude and Longitude for location -->
for (i=0; i!=locations.length; i++){
var loc = locations[i].value;
axios.get('https://maps.googleapis.com/maps/api/geocode/json',{
params:{
address:locations[i].value,
key:'Your_Key'
}
})
.then(function(response){
// Geometry
var lat = response.data.results[0].geometry.location.lat;
var lng = response.data.results[0].geometry.location.lng;
<!-- Add marker -->
marker[i] = new google.maps.Marker({
position : {lat: lat, lng: lng},
map : map,
title: loc
});
<!-- Info window for marker -->
infoWindowContent= {content:'<h4> ' + marker[i].title +' </h4>'};
infoWindow[i] = new google.maps.InfoWindow( infoWindowContent );
marker[i].addListener('click', function(){
infoWindow.open(map, marker[i]);
});
<!-- Form a boundary for map -->
bounds = new google.maps.LatLngBounds();
bounds.extend(marker[i].getPosition());
<!-- Fit all markers on a map -->
map.setCenter(bounds.getCenter());
map.fitBounds(bounds);
});
}
map.setZoom(9);
}
var locations = document.querySelectorAll("[id='playgroundName']");
是从百里香叶传来的。
locations.value = "Amberg Park" 或 "Barrett Brothers Park" 之一
这是我想在地图上标记的公园名称之一。
我需要为每个名字创建 lat/lang 数组,并用这个数组放置标记
此代码在 google 地图上显示标记,但每个标记都有相同的名称,信息窗口为每个标记显示相同(最后)的信息窗口内容。适合范围也不起作用。原因一定是不能在回调函数中使用 for loop i 变量。我尝试使用不同的函数来获取位置数组,但效果也不佳。
我也尝试了 geocoder.geocode() 来获取经纬度。我不介意使用 axios/geocode() 只要我得到 lat/lang 作为单个标记。
这只是为那些苦苦挣扎的人提供的示例代码。我有 3 个不同的数组,我需要稍后处理其他内容,所以请不要判断代码。
这里的问题是,JavaScript 是在不等待地理编码工作的情况下异步加载所有代码。所以 putmarkers 函数在获取任何 lat/lang 之前执行。为确保地理编码获得所有位置的 lat/lang,我使用了 recordsLength 变量。
var locationLat = new Array();
var locationLng = new Array();
var locationAddress = new Array();
var map;
var recordsLength;
function loadMap(){
var options = {
zoom: 1
};
map = new google.maps.Map(document.getElementById('map'), options );
var locations = document.querySelectorAll("[id='playgroundName']");
hasGeocoded= false;
length = locations.length;
for (i=0; i!=locations.length; i++){
var address = locations[i].value;
var geocoder = new google.maps.Geocoder();
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var lat = results[0].geometry.location.lat();
var lng = results[0].geometry.location.lng();
var add = results[0].formatted_address;
createLatLngArray(lat,lng, add);
}
});
}
}
function createLatLngArray(lat, lng, add){
locationLat.push(lat);
locationLng.push(lng);
locationAddress.push(add);
if(locationLat.length == recordsLength)
{
putMarkers();
}
}
function putMarkers(){
var infowindow = new google.maps.InfoWindow();
var bounds = new google.maps.LatLngBounds();
var marker, i;
for (i = 0; i < locationLat.length; i++) {
marker = new google.maps.Marker({
position: new google.maps.LatLng(locationLat[i], locationLng[i]),
map: map
});
marker.setMap(map);
google.maps.event.addListener(marker, 'click', (function(marker, i) {
return function() {
infowindow.setContent(locationAddress[i]);
infowindow.open(map, marker);
}
})(marker, i));
bounds.extend(marker.getPosition());
}
map.fitBounds(bounds);
}
javascript
function loadMap(){
<!--set Map Options -->
var options = {
zoom: 9
};
<!--New map-->
var map = new google.maps.Map(document.getElementById('map'), options );
<!--Get location to put marker-->
var locations = document.querySelectorAll("[id='playgroundName']");
var bounds= new google.maps.LatLngBounds();
var infoWindow = new google.maps.InfoWindow();
var marker = new google.maps.Marker();
var infoWindowContent;
<!-- Calculate Latitude and Longitude for location -->
for (i=0; i!=locations.length; i++){
var loc = locations[i].value;
axios.get('https://maps.googleapis.com/maps/api/geocode/json',{
params:{
address:locations[i].value,
key:'Your_Key'
}
})
.then(function(response){
// Geometry
var lat = response.data.results[0].geometry.location.lat;
var lng = response.data.results[0].geometry.location.lng;
<!-- Add marker -->
marker[i] = new google.maps.Marker({
position : {lat: lat, lng: lng},
map : map,
title: loc
});
<!-- Info window for marker -->
infoWindowContent= {content:'<h4> ' + marker[i].title +' </h4>'};
infoWindow[i] = new google.maps.InfoWindow( infoWindowContent );
marker[i].addListener('click', function(){
infoWindow.open(map, marker[i]);
});
<!-- Form a boundary for map -->
bounds = new google.maps.LatLngBounds();
bounds.extend(marker[i].getPosition());
<!-- Fit all markers on a map -->
map.setCenter(bounds.getCenter());
map.fitBounds(bounds);
});
}
map.setZoom(9);
}
var locations = document.querySelectorAll("[id='playgroundName']");
是从百里香叶传来的。
locations.value = "Amberg Park" 或 "Barrett Brothers Park" 之一
这是我想在地图上标记的公园名称之一。
我需要为每个名字创建 lat/lang 数组,并用这个数组放置标记
此代码在 google 地图上显示标记,但每个标记都有相同的名称,信息窗口为每个标记显示相同(最后)的信息窗口内容。适合范围也不起作用。原因一定是不能在回调函数中使用 for loop i 变量。我尝试使用不同的函数来获取位置数组,但效果也不佳。
我也尝试了 geocoder.geocode() 来获取经纬度。我不介意使用 axios/geocode() 只要我得到 lat/lang 作为单个标记。
这只是为那些苦苦挣扎的人提供的示例代码。我有 3 个不同的数组,我需要稍后处理其他内容,所以请不要判断代码。
这里的问题是,JavaScript 是在不等待地理编码工作的情况下异步加载所有代码。所以 putmarkers 函数在获取任何 lat/lang 之前执行。为确保地理编码获得所有位置的 lat/lang,我使用了 recordsLength 变量。
var locationLat = new Array();
var locationLng = new Array();
var locationAddress = new Array();
var map;
var recordsLength;
function loadMap(){
var options = {
zoom: 1
};
map = new google.maps.Map(document.getElementById('map'), options );
var locations = document.querySelectorAll("[id='playgroundName']");
hasGeocoded= false;
length = locations.length;
for (i=0; i!=locations.length; i++){
var address = locations[i].value;
var geocoder = new google.maps.Geocoder();
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var lat = results[0].geometry.location.lat();
var lng = results[0].geometry.location.lng();
var add = results[0].formatted_address;
createLatLngArray(lat,lng, add);
}
});
}
}
function createLatLngArray(lat, lng, add){
locationLat.push(lat);
locationLng.push(lng);
locationAddress.push(add);
if(locationLat.length == recordsLength)
{
putMarkers();
}
}
function putMarkers(){
var infowindow = new google.maps.InfoWindow();
var bounds = new google.maps.LatLngBounds();
var marker, i;
for (i = 0; i < locationLat.length; i++) {
marker = new google.maps.Marker({
position: new google.maps.LatLng(locationLat[i], locationLng[i]),
map: map
});
marker.setMap(map);
google.maps.event.addListener(marker, 'click', (function(marker, i) {
return function() {
infowindow.setContent(locationAddress[i]);
infowindow.open(map, marker);
}
})(marker, i));
bounds.extend(marker.getPosition());
}
map.fitBounds(bounds);
}