0

我在 Google Fusion Table 中有一个名为“xy”的列。每个单元格中的值都完全采用这种格式:30.319067,-97.739454

我创建了一个包含这些值的数组,var locationList = []。尝试使用此数组并检索经纬度数据以放入位置选项,但它无法识别它。我在下面有一个警报功能,可以查看正在传递的内容,它会发出警报(NaN,NaN)。

for (var i = 0; i < locationList.length ; i++){
    if (obj.id == i){
        alert(locationList[0]);

        marker = new google.maps.Marker({
            map:Map,
            position: new google.maps.LatLng(locationList[i]),
            animation: google.maps.Animation.DROP,
            zoom: 0});

        break;}


}

谁能告诉我这些值被传递时发生了什么?是格式问题吗...?数据类型问题?

我的 Fusion Table 中也有这种格式的“几何”列:

<Point><coordinates>-97.739454,30.319067,0.0</coordinates></Point>

不确定哪一列最适合标记位置。无论哪一列,我只想看到那个标记弹跳!

谢谢你的帮助!


我为纬度和经度创建了两个不同的列,它们位于我的 Fusion Table 中的数字数据类型中。数据在数组中 var latitudeList = []; 和 var longitudeList = [];。

for (var i = 0; i < numRow ; i++){
    if (obj.id == i){
        alert(latitudeList[3]);
        alert(nameList[i]);

        var LatLng = new google.maps.LatLng(parseFloat(latitudeList[i]),parseFloat(longitudeList[i]));

        marker = new google.maps.Marker({
            map:PuppyMap,
            position: LatLng,
            animation: google.maps.Animation.DROP,
            zoom: 0});

        alert([i]); break;}
};

现在我再次使用警报来查看发生了什么,并且 alert(latitudeList[0]); 警报(30.23423,NaN),带括号,我不明白。每个单元格都包含纬度值 30.xxxxx 作为数字,它们应该以这种方式在数组中。和 alert(parseFloat(latitudeList[0]),parseFloat(longitudeList[0])); 警告 NaN。

我想我不确定 NaN 是什么,,,

4

1 回答 1

0

google.maps.LatLng 对象将两个数字作为其参数,而不是包含两个用逗号分隔的数字的字符串。这是不正确的:

    marker = new google.maps.Marker({
        map:Map,
        position: new google.maps.LatLng(locationList[i]),
        animation: google.maps.Animation.DROP,
        zoom: 0});

应该

    var coords = locationList[i].split(',');
    var latlng = new google.maps.LatLng(coords[0], coords[1]);
    marker = new google.maps.Marker({
        map:Map,
        position: latlng,
        animation: google.maps.Animation.DROP,
        zoom: 0});

更安全的是:

    var coords = locationList[i].split(',');
    var latlng = new google.maps.LatLng(parseFloat(coords[0]), parseFloat(coords[1]));
    marker = new google.maps.Marker({
        map:Map,
        position: latlng,
        animation: google.maps.Animation.DROP,
        zoom: 0});;

由于来自 FusionTable,它是一个字符串。您甚至可以通过在使用它们构建 google.maps.LatLng 之前测试“isNaN”来验证它们是有效数字。

于 2013-10-03T16:42:18.170 回答