0

我正在尝试将变量传递给 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
        );

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

4

2 回答 2

3

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

x1让我们使用与 Maps API 中的术语相对应的名称,而不是像之类的名称。对于初学者,我将重命名xLat为 aslatyLonas 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)小于South ( y1) 的代码中。当您的变量名没有意义时,这很容易发生。

另一个有趣的点是代码不再需要// sw// ne注释。事实上,即使你回到不使用swandne变量的样式,仍然清楚哪个是西南,哪个是东北:

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

var imageBounds = new google.maps.LatLngBounds(
    new google.maps.LatLng( s, w ),
    new google.maps.LatLng( n, e )
);

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

不要误会我的意思,我完全赞成好的评论,但是当你可以使用有意义的变量名而不是评论时,这是一个真正的改进。

于 2013-05-14T02:10:48.287 回答
1

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

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 以响应迈克尔的评论和回答,因为他们错了

于 2013-05-13T15:31:43.620 回答