Google 地图 API: 鼠标悬停仅在一天中的特定时间有效
Google Maps API: Mouseover works only during a certain time of the day
我必须说这是我在编程冒险中遇到的最奇怪的错误。我真的不知道为什么会这样。
基本上,我的应用程序必须从 Mysql 数据库接收一些数据,并且当用户在某个国家/地区单击时,必须出现一个信息窗口,其中包含一些信息(来自数据库)。数据库通信工作正常,问题是:当我将鼠标经过一个国家时,有时不会调用 mouseover 事件,与 mouseout 相同。
但有时呢?以什么频率?这是最奇怪的部分:在一天中的特定时间。我是巴西人,我在这里使用 UTC -3 工作,如果我在 18:00 访问我的应用程序,它不起作用,但是如果我在早上访问它,比如早上 7 点,它就可以工作。
我真的不知道为什么会这样,试图在网上搜索但没有找到...
有人可以帮助我吗?这是我正在使用的代码(js控制台中没有出现错误,错误发生在chrome、firefox、IE...):
<script type="text/javascript" >
var colors = ['#FF0000', '#00FF00', '#0000FF', '#FFFF00'];
var map
var infowindow;
function initialize() {
var myOptions = {
zoom: 2,
center: new google.maps.LatLng(10, 0),
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById('map-canvas'),
myOptions);
geocoder = new google.maps.Geocoder();
// Initialize JSONP request
var script = document.createElement('script');
var url = ['https://www.googleapis.com/fusiontables/v1/query?'];
url.push('sql=');
var query = 'SELECT name, kml_4326 FROM ' +
'1foc3xO9DyfSIF6ofvN0kp2bxSfSeKog5FbdWdQ';
var encodedQuery = encodeURIComponent(query);
url.push(encodedQuery);
url.push('&callback=drawMap');
url.push('&key=AIzaSyAm9yWCV7JPCTHCJut8whOjARd7pwROFDQ');
script.src = url.join('');
var body = document.getElementsByTagName('body')[0];
body.appendChild(script);
}
function drawMap(data) {
var rows = data['rows'];
for (var i in rows) {
if (rows[i][0] != 'Antarctica') {
var newCoordinates = [];
var geometries = rows[i][1]['geometries'];
if (geometries) {
for (var j in geometries) {
newCoordinates.push(constructNewCoordinates(geometries[j]));
}
} else {
newCoordinates = constructNewCoordinates(rows[i][1]['geometry']);
}
//var randomnumber = Math.floor(Math.random() * 4);
var country = new google.maps.Polygon({
paths: newCoordinates,
//strokeColor: colors[randomnumber],
strokeOpacity: 0,
strokeWeight: 1,
//fillColor: colors[randomnumber],
fillOpacity: 0
});
infowindow = new google.maps.InfoWindow({
content: ''
});
google.maps.event.addListener(country, 'mouseover', function() {
alert("HIIIIII JOW");
this.setOptions({fillOpacity: 0.3});
});
google.maps.event.addListener(country, 'mouseout', function() {
this.setOptions({fillOpacity: 0});
});
google.maps.event.addListener(country, 'click', function(event) {
var lat = event.latLng.lat();
var lng = event.latLng.lng();
initialize2(lat,lng);
});
country.setMap(map);
}
}
}
function constructNewCoordinates(polygon) {
var newCoordinates = [];
var coordinates = polygon['coordinates'][0];
for (var i in coordinates) {
newCoordinates.push(
new google.maps.LatLng(coordinates[i][1], coordinates[i][0]));
}
return newCoordinates;
}
function initialize2(lat,lng){
var url = "http://maps.googleapis.com/maps/api/geocode/json?latlng=" + lat + "," + lng+ "&sensor=true&language=en";
jQuery.getJSON(url, function (data) {
for (var i = 0; i < data.results[0].address_components.length; i++){
//var formatted = results[0].formatted_address;//.short_name
var countryName
var shortname = data.results[0].address_components[i].short_name;
var longname = data.results[0].address_components[i].long_name;
var type = data.results[0].address_components[i].types;
if (type.indexOf("country") != -1){
if (isNullOrWhitespace(shortname)){
countryName = shortname;
}
else{
countryName = longname;
}
}
}
var lat2;
var lng2
geocoder.geocode( {'address' : countryName}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
lat2 = results[0].geometry.location.lat();
lng2 = results[0].geometry.location.lng();
//alert(results[0].geometry.location);//map.setCenter(results[0].geometry.location);
//alert(lat2+','+lng2);
var array = <?php echo json_encode($arr); ?>;
var str = 'Nenhuma exchange cadastrada neste país!';
for(var i = 0;i<array.length;i++){
if(countryName==array[i][0]){
var string = 'country_volume.php?country=' + countryName;
str = '<center><strong>'+array[i][0]+'</strong></center>' +
'<strong>Número de Exchanges: </strong>' + array[i][1] + '</br>' +
'<strong>Volume: </strong>' + array[i][2] + '</br>' +
'<strong>Ranking Mundial: </strong> ' + array[i][3] + 'º' + '</br>' +
'<strong>Porcentagem Mundial (%): </strong> ' + array[i][4] + '%' + '</br>' +
'<a href='+string+'>' + 'Mais Informações' + '</a>';
}
}
if (infowindow) infowindow.close();
infowindow = new google.maps.InfoWindow({
content: str,
map: map,
position: new google.maps.LatLng(lat2,lng2)
});
}
});
});
}
function isNullOrWhitespace(text) {
if (text == null) {
return true;
}
return text.replace(/\s/gi, '').length < 1;
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
您可能超过了 Fusion Tables 的每日 quota
API:
默认请求配额限制如下:
每个 API 项目每天 25,000 个请求,其中读取计为一个请求,写入计为五个请求。
每 table 每分钟 30 个写入请求
您可以在 "Quotas" 选项卡下的 Google APIs Console
请求更多配额。
存储配额限制为:
- 每个 table100 MB
- 您的 table 中的总计 250 MB
详情请参考here。
我必须说这是我在编程冒险中遇到的最奇怪的错误。我真的不知道为什么会这样。
基本上,我的应用程序必须从 Mysql 数据库接收一些数据,并且当用户在某个国家/地区单击时,必须出现一个信息窗口,其中包含一些信息(来自数据库)。数据库通信工作正常,问题是:当我将鼠标经过一个国家时,有时不会调用 mouseover 事件,与 mouseout 相同。
但有时呢?以什么频率?这是最奇怪的部分:在一天中的特定时间。我是巴西人,我在这里使用 UTC -3 工作,如果我在 18:00 访问我的应用程序,它不起作用,但是如果我在早上访问它,比如早上 7 点,它就可以工作。
我真的不知道为什么会这样,试图在网上搜索但没有找到...
有人可以帮助我吗?这是我正在使用的代码(js控制台中没有出现错误,错误发生在chrome、firefox、IE...):
<script type="text/javascript" >
var colors = ['#FF0000', '#00FF00', '#0000FF', '#FFFF00'];
var map
var infowindow;
function initialize() {
var myOptions = {
zoom: 2,
center: new google.maps.LatLng(10, 0),
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById('map-canvas'),
myOptions);
geocoder = new google.maps.Geocoder();
// Initialize JSONP request
var script = document.createElement('script');
var url = ['https://www.googleapis.com/fusiontables/v1/query?'];
url.push('sql=');
var query = 'SELECT name, kml_4326 FROM ' +
'1foc3xO9DyfSIF6ofvN0kp2bxSfSeKog5FbdWdQ';
var encodedQuery = encodeURIComponent(query);
url.push(encodedQuery);
url.push('&callback=drawMap');
url.push('&key=AIzaSyAm9yWCV7JPCTHCJut8whOjARd7pwROFDQ');
script.src = url.join('');
var body = document.getElementsByTagName('body')[0];
body.appendChild(script);
}
function drawMap(data) {
var rows = data['rows'];
for (var i in rows) {
if (rows[i][0] != 'Antarctica') {
var newCoordinates = [];
var geometries = rows[i][1]['geometries'];
if (geometries) {
for (var j in geometries) {
newCoordinates.push(constructNewCoordinates(geometries[j]));
}
} else {
newCoordinates = constructNewCoordinates(rows[i][1]['geometry']);
}
//var randomnumber = Math.floor(Math.random() * 4);
var country = new google.maps.Polygon({
paths: newCoordinates,
//strokeColor: colors[randomnumber],
strokeOpacity: 0,
strokeWeight: 1,
//fillColor: colors[randomnumber],
fillOpacity: 0
});
infowindow = new google.maps.InfoWindow({
content: ''
});
google.maps.event.addListener(country, 'mouseover', function() {
alert("HIIIIII JOW");
this.setOptions({fillOpacity: 0.3});
});
google.maps.event.addListener(country, 'mouseout', function() {
this.setOptions({fillOpacity: 0});
});
google.maps.event.addListener(country, 'click', function(event) {
var lat = event.latLng.lat();
var lng = event.latLng.lng();
initialize2(lat,lng);
});
country.setMap(map);
}
}
}
function constructNewCoordinates(polygon) {
var newCoordinates = [];
var coordinates = polygon['coordinates'][0];
for (var i in coordinates) {
newCoordinates.push(
new google.maps.LatLng(coordinates[i][1], coordinates[i][0]));
}
return newCoordinates;
}
function initialize2(lat,lng){
var url = "http://maps.googleapis.com/maps/api/geocode/json?latlng=" + lat + "," + lng+ "&sensor=true&language=en";
jQuery.getJSON(url, function (data) {
for (var i = 0; i < data.results[0].address_components.length; i++){
//var formatted = results[0].formatted_address;//.short_name
var countryName
var shortname = data.results[0].address_components[i].short_name;
var longname = data.results[0].address_components[i].long_name;
var type = data.results[0].address_components[i].types;
if (type.indexOf("country") != -1){
if (isNullOrWhitespace(shortname)){
countryName = shortname;
}
else{
countryName = longname;
}
}
}
var lat2;
var lng2
geocoder.geocode( {'address' : countryName}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
lat2 = results[0].geometry.location.lat();
lng2 = results[0].geometry.location.lng();
//alert(results[0].geometry.location);//map.setCenter(results[0].geometry.location);
//alert(lat2+','+lng2);
var array = <?php echo json_encode($arr); ?>;
var str = 'Nenhuma exchange cadastrada neste país!';
for(var i = 0;i<array.length;i++){
if(countryName==array[i][0]){
var string = 'country_volume.php?country=' + countryName;
str = '<center><strong>'+array[i][0]+'</strong></center>' +
'<strong>Número de Exchanges: </strong>' + array[i][1] + '</br>' +
'<strong>Volume: </strong>' + array[i][2] + '</br>' +
'<strong>Ranking Mundial: </strong> ' + array[i][3] + 'º' + '</br>' +
'<strong>Porcentagem Mundial (%): </strong> ' + array[i][4] + '%' + '</br>' +
'<a href='+string+'>' + 'Mais Informações' + '</a>';
}
}
if (infowindow) infowindow.close();
infowindow = new google.maps.InfoWindow({
content: str,
map: map,
position: new google.maps.LatLng(lat2,lng2)
});
}
});
});
}
function isNullOrWhitespace(text) {
if (text == null) {
return true;
}
return text.replace(/\s/gi, '').length < 1;
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
您可能超过了 Fusion Tables 的每日 quota
API:
默认请求配额限制如下:
每个 API 项目每天 25,000 个请求,其中读取计为一个请求,写入计为五个请求。
每 table 每分钟 30 个写入请求
您可以在 "Quotas" 选项卡下的 Google APIs Console
请求更多配额。
存储配额限制为:
- 每个 table100 MB
- 您的 table 中的总计 250 MB
详情请参考here。