以不同的方式创建LatLng时“太多递归”

时间:2014-04-04 05:36:23

标签: google-maps google-maps-api-3

我只想向错误提出一些有关递归的帮助。如果我有这种代码

在我的ajax请求中

var arr=["10.296954, 123.896785","10.298750, 123.895974",
         "10.299524, 123.898862","10.294086, 123.897424"];

$.ajax({
    ....
    ... 
    ....
    success:function(data){
       for(var i=0;i<arr.length;i++){
        path.push(new google.maps.LatLng((arr[i]));
     }
   }

 });

但如果我改变了这样的话

var arr=["10.296954, 123.896785","10.298750, 123.895974",
         "10.299524, 123.898862","10.294086, 123.897424"];

$.ajax({
    ....
    ... 
    ....
    success:function(data){
       for(var i=0;i<arr.length;i++){
                       path.push(new google.maps.LatLng(10.296954, 123.896785),
                                 new google.maps.LatLng(10.298750, 123.895974),
                                 new google.maps.LatLng(10.299524, 123.898862),
                                 new google.maps.LatLng(10.294086, 123.897424));


                   }
   }

 });

它可以正常工作,它会在地图中绘制折线

你能帮我这个吗?如果我将循环坐标

,我的代码有什么问题

3 个答案:

答案 0 :(得分:4)

正如其他人所说,您需要将单独的latslongs传递给path。 尝试将阵列更改为更细粒度的模型,例如:

var arr=[{lat: 10.296954, lng: 123.896785},
         {lat: 10.298750, lng: 123.895974},
         {lat: 10.299524, lng: 123.898862},
         {lat: 10.294086, lng: 123.897424}];

然后改变:

path.push(new google.maps.LatLng(arr[i].lat, arr[i].lng);

答案 1 :(得分:1)

LatLng takes two numeric arguments for the coordinates,但只有一个 - 字符串,例如提供了“10.296954,123.896785”,这是构造函数的无效值。遗憾的是错误并没有多大帮助,但这就是原因。

虽然可以更改源数据,并且这样做可能总体上更好,但可以考虑使用辅助“工厂”功能作为替代方案。

// Create a LatLng given coordinates from a string
// in the form of "lat, lng" or an array of [lat, lng].
function mkLatLng (coords) {
    var parts = ("" + coords).split(/,\s+/);       
    var lat = parseFloat(parts[0]);
    var lng = parseFloat(parts[1]);
    if (parts.length != 2 || isNaN(lat) || isNaN(lng)) {
        throw "invalid data";
    }
    // Now passing in TWO NUMERIC ARGUMENTS, as per the API
    return new google.maps.LatLng(lat, lng);
}

然后它可以用作代理来正确强制/转换数据。

 path.push(mkLatLng(arr[i]));

答案 2 :(得分:0)

试试这个,

for(var i=0;i<arr.length;i+=2){// increment i by 2
   path.push(new google.maps.LatLng(arr[i],arr[i+1]); // now you get lat,long
}

在上面的例子中,您的数组应该是

var arr=[10.296954, 123.896785,10.298750, 123.895974,
         10.299524, 123.898862,10.294086, 123.897424];

否则,请尝试以下代码,

for(var i=0;i<arr.length;i++){
   var latlng=arr[i].replace('"','').split(',');
   path.push(new google.maps.LatLng(latlng[0],latlng[1]);
}