我在js-code中设置了一些值的问题。我试图弄清楚问题是什么,但仍然无法在代码中找到问题。
这是我想要设置的最多,最多,最多,最多的S值。
代码末尾的警报“未定义”。为什么?我该如何解决? THX!
var mostN,
mostE,
mostW,
mostS;
for (i = 1; i < opts.markers.length; i += 1) //loops 5 times
{
$geocoder.geocode(
{
address: opts.markers[i].address},
function (result, status)
{
if (status === google.maps.GeocoderStatus.OK)
{
var str = [result[0].geometry.location]; // "(42.456465, -48.74116)"
var realString = str.toString();
var stop = realString.length - 1;
var real = realString.substring(1,stop); // "42.456465, -48.74116"
var arr = real.split(", ");
var lat = arr[0].toString(); // "42.456465"
var lng = arr[1].toString(); // "-48.74116"
if(mostN > lat) { mostN = lat; }
if(mostE < lng) { mostE = lng; }
if(mostW > lng) { mostW = lng; }
if(mostS < lat) { mostS = lat; }
alert(mostN); // returns "Undefined"
}
else
{
if (opts.log) {console.log("Geocode was not successful for the following reason: " + status); }
}
}
);
}
答案 0 :(得分:1)
尝试类似:
var SOMETHING_HUGE = 100000000;
var mostN = -SOMETHING_HUGE,
mostE = -SOMETHING_HUGE,
mostW = SOMETHING_HUGE,
mostS = SOMETHING_HUGE;
//...
if(lat > mostN) { mostN = lat; }
if(lng > mostE) { mostE = lng; }
if(lng < mostW) { mostW = lng; }
if(lat < mostS) { mostS = lat; }
答案 1 :(得分:1)
您似乎没有考虑到lat和long的符号。例如,
> var mostN,
> ...
> var lat = arr[0].toString(); // "42.456465"
在帖子中,lat已经是一个字符串,所以将其转换为字符串似乎毫无意义。鉴于后来进行了算术比较,最好将其转换为前面的数字:
var lat = Number(arr[0]); // 42.456465
或
var lat = +(arr[0]); // 42.456465
> ...
> if(mostN > lat) { mostN = lat; }
> if(mostE < lng) { mostE = lng; }
> if(mostW > lng) { mostW = lng; }
> if(mostS < lat) { mostS = lat; }
变量mostN
尚未初始化,因此在比较中它等于零,不大于42.456465,因此测试返回false并且未设置mostN。但是,mostS
将被设置。
但比较的标志是错误的 - 如果纬度是一个更大的+ ve数,那么它更偏向北方:
if (mostN < lat) { mostN = lat; }
是你想要的,其他测试也一样。但是,你还必须考虑到-10比-20更偏北的半球,所以(假设大多数N和纬度是数字,而不是字符串):
if ((mostN + 90) < (lat + 90)) { mostN = lat; }
因为纬度从不大于90度。对于经度,请使用180.您可以使用任何您喜欢的数字,对于lat为90或更高,长度为180或更高,因此您可以使用180,但这可能会让维护者感到困惑。
答案 2 :(得分:0)
应该按原样运行,因为在检查变量mostN
时,未定义,条件mostN > lat
为false。
答案 3 :(得分:0)
你的大多数N没有明确地用一些值初始化。试着在
中放置警报 if(mostN > lat) { mostN = lat; }
条件。并检查比较是否正确。