Google maps 谷歌地图API V3:热图创建问题
我正在尝试使用google.maps.visualization库。我已经在我的代码中包含了这个库以及所有的东西,而且大部分看起来都在工作,但是当我开始创建热图时,我得到了一个关于“位置96677:[对象]处的无效值”的错误。我不确定这个问题是关于什么的,但错误报告包含一行Google API代码:Google maps 谷歌地图API V3:热图创建问题,google-maps,google-maps-api-3,heatmap,Google Maps,Google Maps Api 3,Heatmap,我正在尝试使用google.maps.visualization库。我已经在我的代码中包含了这个库以及所有的东西,而且大部分看起来都在工作,但是当我开始创建热图时,我得到了一个关于“位置96677:[对象]处的无效值”的错误。我不确定这个问题是关于什么的,但错误报告包含一行Google API代码: var c; M(b,function(b,e){ try{ a(b)||(c="Invalid value at position "+(e+(": "+b)))
var c;
M(b,function(b,e){
try{
a(b)||(c="Invalid value at position "+(e+(": "+b)))
}catch(f){
c="Error in element at position "+(e+(": ("+(f[Pb]+")")))}});c&&aa(ja(c));return j
}
}
我浏览了一下API代码,但很难在其中找到任何有用的东西。我用于创建热图层的代码如下所示:
$.ajax({
url: "../Yield/getYieldData.php",
success: function(text) {
var data;
// var yieldPoints = new google.maps.MVCArray();
var yieldPoints = [];
try{
data = $.parseJSON(text);
} catch (e) {
alert("ERROR: " + e);
}
for(i=0; i < data.points.length; i++) {
// yieldPoints.push({ location: new google.maps.LatLng(data.points[i].lat, data.points[i].lon), weight: data.points[i].yield });
yieldPoints[i] = { location: new google.maps.LatLng(data.points[i].lat, data.points[i].lon), weight: data.points[i].yield };
}
var heatMap = new google.maps.visualization.HeatmapLayer({ data: yieldPoints });
heatMap.setMap(map);
}
});
$.ajax({
url:“../Yield/getYieldData.php”,
成功:函数(文本){
var数据;
//var yieldPoints=new google.maps.MVCArray();
var yieldPoints=[];
试一试{
数据=$.parseJSON(文本);
}捕获(e){
警报(“错误:+e”);
}
对于(i=0;i
我不确定问题是从哪里来的,但我使用了GoogleAPI文档作为模板,如在(页面下方大约三分之一的地方,标题是“添加加权数据点”)。如您所见,我还尝试将数组创建为MVCArray,如文档中所述,但这并没有改变任何事情。如果相关,下面是从“getYieldData.php”调用接收的JSON数据的一个简短示例:
{“points”:[{“lat”:“38.1513366000”,“lon”:-97.4341659000”,“yield”:“0”},{“lat”:“38.1513748000”,“lon”:-97.4341125000”,“yield”:“0”;{“lat”:“38.1513938000”,“lon”:-97.4341125000”,“yield”:“0”;“{“lat“-97.4339447000”,“收益率”:“0”},{“lat”:“38.1483650000”,“lon”:“-97.4358291000”,“收益率”:“0”},{“lat”:“38.1484031000”,“lon”:“-97.4358062000”,“收益率”:“0”},
希望这些信息足以让某人了解问题所在-任何帮助都将不胜感激。谢谢。
weight
应该是一个数字,而不是字符串。因此您有两个选择:
- 避免在JSON中使用引号:
{"lat":"38.1513366000","lon":"-97.4341659000","yield":0}
//no quote wraps 'yield' ------------^
- 将
产量
转换为数量
:
yieldPoints[i] = {
location: new google.maps.LatLng(data.points[i].lat, data.points[i].lon),
weight: +data.points[i].yield };
}; ^----- plus('+') is the fastest way for converting string to number
快速更新:我尝试删除数组的最后一个元素,但在位置96676处出现了相同的错误,因此显然它正在反向遍历数组,并发现元素总体上存在问题。谢谢-这就是问题所在。我使用了parseFloat()不是“+”而是我在速度方面会受到多大的影响?@Crash我想,在你的情况下,速度差异是不够明显的。所以parseFloat
也很合适。@Engineer嘿,我遇到了这个奇怪的问题。对于我的第一个热图,权重是字符串,热图有效。然后对于我的第二个热图,热图只有当权重为字符串时才有效。当我将其转换为数字时,热图不会显示。但是,对于第二个热图,“热”以某种方式显示为正方形,并且与我设置的梯度不起作用。你有什么想法吗?@hyperfkcb确保你将有效的数字字符串转换为数字,否则你将得到NaN、undefined或null