如何将 openweathermap api 中的数据添加到 google 地图中的 windowinfo?
how to add data from openweathermap api to windowinfo in google maps?
我正在尝试从
打开天气图 api 并在每个点击点的 google 地图上的信息窗口中显示它,我从前一个标记而不是当前标记获取数据。
var map;
var markers = [];
var s = "";
function initMap() {
var currentLat;
var currentLng;
var coords;
var contentString;
map = new google.maps.Map(document.getElementById('map'), {
center: { lat: 40.295308, lng: 62.164714 },
zoom: 4
});
// get lng and lat
google.maps.event.addListener(map, 'click', function (event) {
currentLat = event.latLng.lat();
currentLng = event.latLng.lng();
coords = { lat: currentLat, lng: currentLng };
getWeather(coords);
addMarker(coords);
s = "";
});
function addMarker(coords) {
var marker = new google.maps.Marker({
position: coords,
map: map
});
var infoWindow = new google.maps.InfoWindow({
content: s
});
marker.addListener('click', function () {
infoWindow.open(map, marker);
});
///
}
}
function getWeather(coords) {
fetch('https://api.openweathermap.org/data/2.5/weather?lat=' + coords.lat + '&lon=' + coords.lng + '&units=metric&appid=MYAPI')
.then((response) => {
return response.json();
})
.then((myJson) => {
console.log(myJson);
s += myJson.name;
}).catch((err) => {
console.log("Error: " + err);
});
}
我尝试使用全局字符串,我也尝试了几次在 getWeather 函数上使用 setTimeOut,但在将点发送到地图之前我无法获取信息
您正在使用异步调用获取天气的结果填充全局变量 s
。在执行 addMarker()
并创建 InfoWindow
.
时调用可能尚未完成
您应该仅在 getWeather
成功完成时调用 addMarker
,并避免使用全局 s
变量。删除当前对 addMarker
的调用并将方法签名更改为;
function addMarker(coords, s) { ... }
然后修改getWeather
函数;
function getWeather(coords) {
fetch('https://api.openweathermap.org/data/2.5/weather?lat=' + coords.lat + '&lon=' + coords.lng + '&units=metric&appid=MYAPI')
.then((response) => {
return response.json();
})
.then((myJson) => {
addMarker(coords, myJson.name);
}).catch((err) => {
console.log("Error: " + err);
});
}
我正在尝试从 打开天气图 api 并在每个点击点的 google 地图上的信息窗口中显示它,我从前一个标记而不是当前标记获取数据。
var map;
var markers = [];
var s = "";
function initMap() {
var currentLat;
var currentLng;
var coords;
var contentString;
map = new google.maps.Map(document.getElementById('map'), {
center: { lat: 40.295308, lng: 62.164714 },
zoom: 4
});
// get lng and lat
google.maps.event.addListener(map, 'click', function (event) {
currentLat = event.latLng.lat();
currentLng = event.latLng.lng();
coords = { lat: currentLat, lng: currentLng };
getWeather(coords);
addMarker(coords);
s = "";
});
function addMarker(coords) {
var marker = new google.maps.Marker({
position: coords,
map: map
});
var infoWindow = new google.maps.InfoWindow({
content: s
});
marker.addListener('click', function () {
infoWindow.open(map, marker);
});
///
}
}
function getWeather(coords) {
fetch('https://api.openweathermap.org/data/2.5/weather?lat=' + coords.lat + '&lon=' + coords.lng + '&units=metric&appid=MYAPI')
.then((response) => {
return response.json();
})
.then((myJson) => {
console.log(myJson);
s += myJson.name;
}).catch((err) => {
console.log("Error: " + err);
});
}
我尝试使用全局字符串,我也尝试了几次在 getWeather 函数上使用 setTimeOut,但在将点发送到地图之前我无法获取信息
您正在使用异步调用获取天气的结果填充全局变量 s
。在执行 addMarker()
并创建 InfoWindow
.
您应该仅在 getWeather
成功完成时调用 addMarker
,并避免使用全局 s
变量。删除当前对 addMarker
的调用并将方法签名更改为;
function addMarker(coords, s) { ... }
然后修改getWeather
函数;
function getWeather(coords) {
fetch('https://api.openweathermap.org/data/2.5/weather?lat=' + coords.lat + '&lon=' + coords.lng + '&units=metric&appid=MYAPI')
.then((response) => {
return response.json();
})
.then((myJson) => {
addMarker(coords, myJson.name);
}).catch((err) => {
console.log("Error: " + err);
});
}