我有一个使用谷歌地图Javascript API V3的网站。 我想通过在地图顶部放置半透明颜色并在中间切出一个孔来突出显示感兴趣的区域。见附图。
切口的位置可以是任何地方。我能够计算出切口的像素(或纬度/经度)坐标,但我所挣扎的是如何最好地创建一个蒙版。我已经看过谷歌的图像平铺覆盖图和多边形,但看不到实现这一目标的简单方法。任何人都可以提供关于最佳方式的指示吗?
答案 0 :(得分:3)
想出来。任何其他人都需要这样做......
function MaskClass( map ){
//constants
var MAP_MAX_LAT = 85;
var MAP_MIN_LAT = -85;
var MAP_MAX_LNG = 179;
var MAP_MIN_LNG = -179;
// Object initialisation - create 4 rectangles to mask off the area
var rectangleInitialisationOptions = {
map: map,
fillColor: "#F00",
fillOpacity: 0.3,
strokeOpacity: 0,
clickable: false
};
this.rectangle1 = new google.maps.Rectangle(rectangleInitialisationOptions);
this.rectangle2 = new google.maps.Rectangle(rectangleInitialisationOptions);
this.rectangle3 = new google.maps.Rectangle(rectangleInitialisationOptions);
this.rectangle4 = new google.maps.Rectangle(rectangleInitialisationOptions);
// Method to place the cut-out
this.setMask = function(boundsSouthWest, boundsNorthEast){
var swLat = boundsSouthWest.lat();
var swLng = boundsSouthWest.lng();
var neLat = boundsNorthEast.lat();
var neLng = boundsNorthEast.lng();
this.rectangle1.setBounds(
new google.maps.LatLngBounds(
new google.maps.LatLng(neLat, MAP_MIN_LNG),
new google.maps.LatLng(MAP_MAX_LAT, MAP_MAX_LNG)));
this.rectangle2.setBounds(
new google.maps.LatLngBounds(
new google.maps.LatLng(MAP_MIN_LAT, MAP_MIN_LNG),
new google.maps.LatLng(swLat, MAP_MAX_LNG)));
this.rectangle3.setBounds(
new google.maps.LatLngBounds(
new google.maps.LatLng(swLat, MAP_MIN_LNG),
new google.maps.LatLng(neLat, swLng)));
this.rectangle4.setBounds(
new google.maps.LatLngBounds(
new google.maps.LatLng(swLat, neLng),
new google.maps.LatLng(neLat, MAP_MAX_LNG)));
this.setVisible(true);
};
// Method to show/hide the mask
this.setVisible = function(visibility){
this.rectangle1.setVisible(visibility);
this.rectangle2.setVisible(visibility);
this.rectangle3.setVisible(visibility);
this.rectangle4.setVisible(visibility);
};
}
使用它......
theMask = new MaskClass( referenceToYourMap ); //create mask
theMask.setMask(boundsSouthWest, boundsNorthEast); //place mask somewhere
theMask.setVisible(false); //hide mask