Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Gmap:如何在地球上画正方形(纬度、经度)_Javascript_Google Maps_Geolocation - Fatal编程技术网

Javascript Gmap:如何在地球上画正方形(纬度、经度)

Javascript Gmap:如何在地球上画正方形(纬度、经度),javascript,google-maps,geolocation,Javascript,Google Maps,Geolocation,我想画一个正方形 rectangle = new google.maps.Rectangle(); var rectOptions = { strokeColor : "#FF0000", strokeOpacity : 0.8, strokeWeight : 2, fillOpacity : 0, map : map }; rectangle.setOptions(rectOptions); 长度为0.005' google.maps.event.ad

我想画一个正方形

rectangle = new google.maps.Rectangle();
var rectOptions = {
    strokeColor : "#FF0000",
    strokeOpacity : 0.8,
    strokeWeight : 2,
    fillOpacity : 0,
    map : map
};
rectangle.setOptions(rectOptions);
长度为0.005'

google.maps.event.addListener(map, 'dragend', function() {

    var center = map.getCenter();
    rectangle.setBounds(new google.maps.LatLngBounds(
            new google.maps.LatLng(center.lat()-0.005, center.lng()-0.005),
            new google.maps.LatLng(center.lat()+0.005, center.lng()+0.005)));
});
但我意识到这个正方形是赤道附近的一个正方形,但在其他地方变形很大, 是否有一个随纬度减小的函数来获得经度的等效长度?谢谢你的帮助


编辑:正方形的高度=cos(横向)宽度

来自Andrew Leach的评论:

function drawSquare(position=new google.maps.LatLng(41, 36.12), radius=0.001){

    var rectangle = new google.maps.Rectangle();
    var rectOptions = {
        strokeColor : "#FF0000",
        strokeOpacity : 0.8,
        strokeWeight : 2,
        fillOpacity : 0
    };
    rectangle.setOptions(rectOptions);

    var c = Math.cos(position.lat()* Math.PI / 180);
    rectangle.setBounds(new google.maps.LatLngBounds(
            new google.maps.LatLng(position.lat()-c*radius/2, position.lng()-radius/2),
            new google.maps.LatLng(position.lat()+c*radius/2, position.lng()+radius/2)));
    return rectangle;
}

您需要准确定义如何测量要查看的正方形。等角“长度”的边在地图上至少看起来是矩形的。如果你想让你的正方形在地球上有真正的直角角,那么边会在地图上呈八字形,而最靠近极点的边看起来会太长。您的公式可能是
dX(a)=cos(a)*dY
,但我认为这不会根据任何定义生成一个正方形;var c=Math.cos(center.lat()*Math.PI/180);矩形.setBounds(新的google.maps.LatLngBounds(新的google.maps.LatLng(center.lat()-crad,center.lng()-rad),新的google.maps.LatLng(center.lat()+crad,center.lng()+rad))@andrew,同样是thx,也要把这个角度转换成kms,它是θ*6371*Pi/180,对吗?因为它在地图上看起来很大,地球的周长平均为40075km,所以对于大圆距离,换算为
(θ/360)*40075
km。我仍然不知道你到底在做什么,或者你最终会得到什么。拥有像这样1000公里长的正方形