Google maps 如何使用谷歌地图绘图库绘制经度超过180度的矩形?

Google maps 如何使用谷歌地图绘图库绘制经度超过180度的矩形?,google-maps,google-maps-api-3,Google Maps,Google Maps Api 3,这个问题可以在谷歌的示例页面上看到。如果缩小到一个可以看到整个世界的点,并尝试绘制一个矩形,当覆盖的经度超过180度时,它将捕捉到相反的方向 我在文档中没有找到任何方法来改变这种行为。有办法解决这个问题吗?如果没有,我是否可以使用另一个javascript库来完成此任务?我最终实现了自己的绘图方法/选择工具,因为绘图库不支持此功能。单击地图将其置于“选择”模式,从而使矩形在mousemove上绘制。第二次单击完成选择并将渲染矩形保留在地图上。“魔力”发生在calculateBounds函数中 s

这个问题可以在谷歌的示例页面上看到。如果缩小到一个可以看到整个世界的点,并尝试绘制一个矩形,当覆盖的经度超过180度时,它将捕捉到相反的方向


我在文档中没有找到任何方法来改变这种行为。有办法解决这个问题吗?如果没有,我是否可以使用另一个javascript库来完成此任务?

我最终实现了自己的绘图方法/选择工具,因为绘图库不支持此功能。单击地图将其置于“选择”模式,从而使矩形在mousemove上绘制。第二次单击完成选择并将渲染矩形保留在地图上。“魔力”发生在calculateBounds函数中

self.map = new google.maps.Map(document.getElementById('map'), {
        center: new google.maps.LatLng(0,0),
        zoom: 1,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    });

    self.rectangle = new google.maps.Rectangle ({
        map: null,
        clickable:  false,
        selectable: false,
        dragable: true,
        fillColor:  "#000000",
        fillOpacity:    0.2,
        strokeColor:    "#000000",
        strokeOpacity:  1.0,
        strokeWeight:   1
    });

    google.maps.event.addListener(self.map, 'click', function(e) {
        self.select = !self.select;

        if (self.select) {
            self.startPoint = e.latLng;
        } else {
            self.drawRectangle(e.latLng);

            self.north(self.rectangle.getBounds().getNorthEast().lat().toFixed(15));
            self.south(self.rectangle.getBounds().getSouthWest().lat().toFixed(15));
            self.east(self.rectangle.getBounds().getNorthEast().lng().toFixed(15));
            self.west(self.rectangle.getBounds().getSouthWest().lng().toFixed(15));
        }
    });

    google.maps.event.addListener(self.map, 'mousemove', function(e) {
        if (self.select) {
            self.drawRectangle(e.latLng);
        }
    });

    self.calculateBounds = function(newEndPoint) {
        var north = self.startPoint.lat() >= newEndPoint.lat() ? self.startPoint.lat() : newEndPoint.lat();
        var south = self.startPoint.lat() <= newEndPoint.lat() ? self.startPoint.lat() : newEndPoint.lat();
        var sw = new google.maps.LatLng(south, self.startPoint.lng());
        var ne = new google.maps.LatLng(north, newEndPoint.lng());

        return new google.maps.LatLngBounds(sw, ne);
    };

    self.drawRectangle = function(newEndPoint) {
        self.rectangle.setBounds(self.calculateBounds(newEndPoint));
        self.rectangle.setMap(self.map);
    };
self.map=new google.maps.map(document.getElementById('map'){
中心:新google.maps.LatLng(0,0),
缩放:1,
mapTypeId:google.maps.mapTypeId.ROADMAP
});
self.rectangle=新的google.maps.rectangle({
map:null,
可点击:false,
可选:false,
可拖动:是的,
fillColor:#000000“,
填充不透明度:0.2,
strokeColor:#000000“,
笔划不透明度:1.0,
冲程重量:1
});
google.maps.event.addListener(self.map,'click',函数(e){
self.select=!self.select;
if(self.select){
self.startPoint=e.latLng;
}否则{
自绘制矩形(如板条);
self.north(self.rectangle.getBounds().getNorthern().lat().toFixed(15));
self.south(self.rectangle.getBounds().getSouthWest().lat().toFixed(15));
self.east(self.rectangle.getBounds().getNorthEast().lng().toFixed(15));
self.west(self.rectangle.getBounds().getSouthWest().lng().toFixed(15));
}
});
google.maps.event.addListener(self.map,'mousemove',函数(e){
if(self.select){
自绘制矩形(如板条);
}
});
self.calculateBounds=函数(newEndPoint){
var north=self.startPoint.lat()>=newEndPoint.lat()?self.startPoint.lat():newEndPoint.lat();

var south=self.startPoint.lat()我最终实现了自己的绘制方法/选择工具,因为绘图库不支持此功能。单击地图会将其置于“选择”模式,这会导致矩形在mousemove上绘制。再次单击完成选择并将渲染的矩形保留在地图上。calculateBounds功能中会出现“魔法”离子

self.map = new google.maps.Map(document.getElementById('map'), {
        center: new google.maps.LatLng(0,0),
        zoom: 1,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    });

    self.rectangle = new google.maps.Rectangle ({
        map: null,
        clickable:  false,
        selectable: false,
        dragable: true,
        fillColor:  "#000000",
        fillOpacity:    0.2,
        strokeColor:    "#000000",
        strokeOpacity:  1.0,
        strokeWeight:   1
    });

    google.maps.event.addListener(self.map, 'click', function(e) {
        self.select = !self.select;

        if (self.select) {
            self.startPoint = e.latLng;
        } else {
            self.drawRectangle(e.latLng);

            self.north(self.rectangle.getBounds().getNorthEast().lat().toFixed(15));
            self.south(self.rectangle.getBounds().getSouthWest().lat().toFixed(15));
            self.east(self.rectangle.getBounds().getNorthEast().lng().toFixed(15));
            self.west(self.rectangle.getBounds().getSouthWest().lng().toFixed(15));
        }
    });

    google.maps.event.addListener(self.map, 'mousemove', function(e) {
        if (self.select) {
            self.drawRectangle(e.latLng);
        }
    });

    self.calculateBounds = function(newEndPoint) {
        var north = self.startPoint.lat() >= newEndPoint.lat() ? self.startPoint.lat() : newEndPoint.lat();
        var south = self.startPoint.lat() <= newEndPoint.lat() ? self.startPoint.lat() : newEndPoint.lat();
        var sw = new google.maps.LatLng(south, self.startPoint.lng());
        var ne = new google.maps.LatLng(north, newEndPoint.lng());

        return new google.maps.LatLngBounds(sw, ne);
    };

    self.drawRectangle = function(newEndPoint) {
        self.rectangle.setBounds(self.calculateBounds(newEndPoint));
        self.rectangle.setMap(self.map);
    };
self.map=new google.maps.map(document.getElementById('map'){
中心:新google.maps.LatLng(0,0),
缩放:1,
mapTypeId:google.maps.mapTypeId.ROADMAP
});
self.rectangle=新的google.maps.rectangle({
map:null,
可点击:false,
可选:false,
可拖动:是的,
fillColor:#000000“,
填充不透明度:0.2,
strokeColor:#000000“,
笔划不透明度:1.0,
冲程重量:1
});
google.maps.event.addListener(self.map,'click',函数(e){
self.select=!self.select;
if(self.select){
self.startPoint=e.latLng;
}否则{
自绘制矩形(如板条);
self.north(self.rectangle.getBounds().getNorthern().lat().toFixed(15));
self.south(self.rectangle.getBounds().getSouthWest().lat().toFixed(15));
self.east(self.rectangle.getBounds().getNorthEast().lng().toFixed(15));
self.west(self.rectangle.getBounds().getSouthWest().lng().toFixed(15));
}
});
google.maps.event.addListener(self.map,'mousemove',函数(e){
if(self.select){
自绘制矩形(如板条);
}
});
self.calculateBounds=函数(newEndPoint){
var north=self.startPoint.lat()>=newEndPoint.lat()?self.startPoint.lat():newEndPoint.lat();
var south=self.startPoint.lat()