我想在我的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 或画布如何呈现闭环。如果我没记错的话,解释在于非零缠绕规则。请参阅维基百科上的解释。
外路径顺时针绘制,内路径逆时针绘制。
将计数器设置为零。在对象区域中选取一个点,并在对象空间之外绘制一条方向线。如果该线沿顺时针方向交叉路径,请添加一个。如果线与逆时针路径段交叉,则减去一个。如果所选点的最终结果不为零,浏览器将填充该区域。如果最终结果为零,则浏览器不会填充它。
因此,如果您在"孔"中拾取点,结果将为零,并且区域不会被填充。