我的问题有点棘手,如果我的问题并不清楚,我表示歉意。
我使用的是GoogleMap v3 API。用户可以在地图上单击以创建一个标记,如果他单击标记,我会将纬度和经度信息放入infoWindow(已完成)。
我尝试的事情是:用户可以给出尺寸(公里/英里),我必须画出给定尺寸的矩形(创建标记应该是该区域的中心)。问题来自于只采用纬度和经度的latlng或bounds。所以我试图进行转换。
以下是代码的主要部分。
我使用的是GoogleMap v3 API。用户可以在地图上单击以创建一个标记,如果他单击标记,我会将纬度和经度信息放入infoWindow(已完成)。
我尝试的事情是:用户可以给出尺寸(公里/英里),我必须画出给定尺寸的矩形(创建标记应该是该区域的中心)。问题来自于只采用纬度和经度的latlng或bounds。所以我试图进行转换。
以下是代码的主要部分。
//latitude
// 1°lat = 111,11 km
//for me: 1km = 0.00900 .
//longitude
//1°lat = 111,11 km * cos latitude
// for me : 1 km = ((1/Math.cos(latitude)) /111.11)
var myBounds = new Array();
var longkm = 5;
var largkm = 2;
myBounds[0] = new google.maps.LatLngBounds(
new google.maps.LatLng(positionmarqueur.lat()-(0.009*longkm), positionmarqueur.lng()-(Math.abs(((1/Math.cos(positionmarqueur.lat()-(0.009*longkm))) /111.11))*largkm)),
new google.maps.LatLng(positionmarqueur.lat()+(0.009*longkm), positionmarqueur.lng()+(Math.abs(((1/Math.cos(positionmarqueur.lat()+(0.009*longkm))) /111.11))*largkm))
);
var overlay1 = new google.maps.Rectangle({
map: map,
bounds: myBounds[0],
strokeColor: "green",
strokeWeight: 1
});
var longkm = 10;
var largkm = 10;
myBounds[1] = new google.maps.LatLngBounds(
new google.maps.LatLng(positionmarqueur.lat()-(0.009*longkm), positionmarqueur.lng()-(Math.abs(((1/Math.cos(positionmarqueur.lat()-(0.009*longkm))) /111.11))*largkm)),
new google.maps.LatLng(positionmarqueur.lat()+(0.009*longkm), positionmarqueur.lng()+(Math.abs(((1/Math.cos(positionmarqueur.lat()+(0.009*longkm))) /111.11))*largkm))
);
var overlay2 = new google.maps.Rectangle({
map: map,
bounds: myBounds[1],
strokeColor: "blue",
strokeWeight: 1
});
这应该绘制一个5*2的矩形和一个10*10公里的正方形(信息:在代码中上面是 var positionmarqueur = latLng)。
如果我看一下结果:第一个矩形看起来超过50/20公里。(我在除以10时有误吗?我不是很擅长数学,但看起来正确)。
第二个……就像一个200*40公里的矩形……
那么问题出在哪里?是公式有误吗?还是我太傻了,漏了什么?
谢谢。
LatLngBounds.getSouthWest()
和getNorthEast()
时,我得到的是西北和东南边界?发生了什么导致这些被颠倒 - http://jsfiddle.net/mtpultz/dspqxLzr/24/. 我添加了控制台日志记录。 - mtpultz