将变量传递给LatLngBounds

时间:2013-05-13 14:44:52

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

我正在尝试将变量传递给google.maps.LatLngBounds,但它不起作用。唯一似乎有用的是如果我将数字硬编码为浮点数(文字)如果我尝试下面的数据就失败了。我已尝试过各种铸造方式,但它不会显示出来。以下示例是我尝试过的最后一件事。

我正在从一个地址对中心进行地理编码,并尝试创建一个围绕中心的叠加层,以便图像叠加层始终位于中心后面。

var x1 = (parseFloat(xLat) - 0.0003).toFixed(6);
var y1 = (parseFloat(yLon) + 0.0003).toFixed(6);
var x2 = (parseFloat(xLat) + 0.0003).toFixed(6);
var y2 = (parseFloat(yLon) - 0.0003).toFixed(6);
var coordinates1 = x1 + "," + y1;
var coordinates2 = x1 + "," + y1;
        var imageBounds = new google.maps.LatLngBounds(
           new google.maps.LatLng( parseFloat(coordinates1.split(",")[0]), parseFloat(coordinates1.split(",")[1]) ), //sw
           new google.maps.LatLng( parseFloat(coordinates2.split(",")[0]), parseFloat(coordinates2.split(",")[1]) )  //ne
        );

为什么会失败的任何想法?我知道还有其他类似的问题,这些解决方案都没有奏效。我想我已经尝试了所有这些,字面意思。

2 个答案:

答案 0 :(得分:3)

只是对大卫的好答案的跟进,将其作为答案而不是评论发布,因为我无法在评论中进行代码格式化。

让我们使用与Maps API中的术语相对应的名称,而不是像x1这样的名称。首先,我要将xLat重命名为lat,将yLon重命名为lng,然后我们将从那里开始。此外,为了清晰起见,我们将逐步完成:

var s = lat - 0.0003;
var w = lng - 0.0003;
var n = lat + 0.0003;
var e = lng + 0.0003;

var sw = new google.maps.LatLng( s, w );
var ne = new google.maps.LatLng( n, e );

var imageBounds = new google.maps.LatLngBounds( sw, ne );

请注意我们最终修复了一个错误,因为这些名称现在更清晰了。南方总是小于北方,西方小于东方(忽略180经线)。使用x1样式名称,不清楚哪个是哪个,并且一个错误潜入代码中North(y2 less 而不是South({{1 }})。当您的变量名称没有意义时,这很容易发生。

另一个有趣的观点是代码不再需要y1// sw条评论。事实上,即使你回到不使用// nesw变量的风格,它仍然清楚哪个是西南,哪个是东北:

ne

请注意这些评论在这里仍然是不必要的。

不要误会我的意思,我都是好评,但是当你可以使用一个有意义的变量名代替时,这是一个真正的改进。

答案 1 :(得分:1)

google.maps.LatLng类构造函数LatLng(lat:number,lng:number)Documentation

var x1 = xLat - 0.0003;
var y1 = yLon - 0.0003;//Was + 1 in Question & Origonal Answer
var x2 = xLat + 0.0003;
var y2 = yLon + 0.0003;//Was - 1 in Question & Origonal Answer

var imageBounds = new google.maps.LatLngBounds(
          new google.maps.LatLng( x1, y1), //sw
          new google.maps.LatLng( x2, y2) //ne
        );

编辑更改了y1& y2回应迈克尔的评论和答案,因为他们错了