我想用Javascript API V3创建一个甜甜圈(里面像洞一样的空白空间)



我想在我的Javascript Google API V3中创建一个洞,所以我遵循Beginning Google Map API V3。但是代码正在渲染整个区域。这是我的Javascript代码。

(function() {
    window.onload = function() {
        // Creating a map
        var options = {
            zoom: 6,
            center: new google.maps.LatLng(36.5, -79.8),
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var map = new google.maps.Map(document.getElementById('map'), options);
        // Creating an array with the points for the outer polygon
        var polyOuter = [
            new google.maps.LatLng(37.303, -81.256),
            new google.maps.LatLng(37.303, -78.333),
            new google.maps.LatLng(35.392, -78.333),
            new google.maps.LatLng(35.392, -81.256)
        ];
        // Creating an array with the points for the inner polygon
        var polyInner = [
            new google.maps.LatLng(36.705, -80.459),
            new google.maps.LatLng(36.705, -79),
            new google.maps.LatLng(35.9, -79),
            new google.maps.LatLng(35.9, -80.459)
        ];
        var points = [polyOuter, polyInner];
        // Creating the polygon
        var polygon = new google.maps.Polygon
        ({
            paths: points,
            map: map,
            strokeColor: '#ff0000',
            strokeOpacity: 0.6,
            strokeWeight: 3,
            fillColor: '#FF0000',
            fillOpacity: 0.35
        }); 
    };
})();

必须还原其中一条路径,以便将多边形绘制到不同的方向,例如:

var polyInner = [
    new google.maps.LatLng(35.9, -80.459),
    new google.maps.LatLng(35.9, -79),
    new google.maps.LatLng(36.705, -79),
    new google.maps.LatLng(36.705, -80.459)
];

我的假设是,原因是 SVG 或画布如何呈现闭环。如果我没记错的话,解释在于非零缠绕规则。请参阅维基百科上的解释。

外路径顺时针绘制

,内路径逆时针绘制。

将计数器设置为零。在对象区域中选取一个点,并在对象空间之外绘制一条方向线。如果该线沿顺时针方向交叉路径,请添加一个。如果线与逆时针路径段交叉,则减去一个。如果所选点的最终结果不为零,浏览器将填充该区域。如果最终结果为零,则浏览器不会填充它。

因此,如果您在"孔"中拾取点,结果将为零,并且区域不会被填充。

相关内容

最新更新