在没有墨卡托投影失真的情况下在Google地图上渲染一个大圆圈?

时间:2011-12-29 18:03:57

标签: google-maps-api-3

当在Google地图上绘制大圆圈时,当圆圈变得非常大(数千英里转换为米)时,圆圈开始在地图上形成正弦波。

Example

以下是设置和绘制圆圈的代码:

   //larger, outer circle
    var options = {
    strokeWeight: 0,
    fillColor: '#AA0000',
    fillOpacity: 0.5,
    map: map,
    radius: distance
    };

    //smaller inner circle
    var options2 = {
    strokeWeight: 0,
    fillColor: '#AA0000',
    fillOpacity: 0.5,
    map: map,
    radius: distance/2
    };

    circles[circles.length]=new google.maps.Circle(options);
    circles[circles.length]=new google.maps.Circle(options2);

    for(var i=0; i<=circles.length-1; i++)
    {
        circles[i].bindTo('center', marker, 'position');
    }

有没有办法避免这种情况?

1 个答案:

答案 0 :(得分:2)

这是一个令人兴奋的问题!

如果您对重复的sin模式感到不安,但实际上希望您的圆圈覆盖半径为米的地球上的地理区域,那么您最好的选择是增加缩放级别(或缩小地图的宽度)以减少正在呈现的整体大小。或者,您可以将距离减少到不包含北极的值(这是我认为会引发尴尬的罪恶模式)

如果您尝试在几何中绘制一个圆,而不是地理,那么谷歌地图圆覆盖不适合您。相反,您应该使用GroundOverlay(在某处呈现透明的PNG服务器端)或CustomOverlay(技术上更先进的解决方案)。 CustomOverlay可以包含带有您使用任何HTML技术(例如CSSSVG)绘制的圆的DIV。