当它被覆盖时,我如何检测到哪个图形(圆形,多边形)出现了一些事件? google 地图 api javascript
How can I detect of which figure(circle, polygon) comes some events when this is overlaid it? google maps api javascript
我在 google 地图(圆形和多边形)中遇到几何图形问题,例如:当我有两个重叠的圆并且我使用事件鼠标悬停或鼠标移开时,google 地图仅把圆圈的信息打印得更大一些,因为大的数字在小的后面。如果我在几乎相同的位置有 7 个圆或多边形,我也会遇到同样的问题。
这是一个有两个圆圈的例子,但问题出在数字的组合上。
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<meta charset="utf-8">
<title>Circles</title>
<style>
html, body {
height: 100%;
margin: 0;
padding: 0;
}
#map {
height: 80%;
}
</style>
</head>
<body>
<div id="map"></div>
<script>
// This example creates circles on the map, representing populations in North
// America.
// First, create an object containing LatLng and population for each city.
var citymap = {
chicago: {
center: {lat: 41.878, lng: -87.629},
population: 845837
},
chicago1: {
center: {lat: 41.878, lng: -87.629},
population: 2714856
},
losangeles: {
center: {lat: 34.052, lng: -118.243},
population: 3857799
},
vancouver: {
center: {lat: 49.25, lng: -123.1},
population: 603502
}
};
function initMap() {
// Create the map.
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 4,
center: {lat: 37.090, lng: -95.712},
mapTypeId: google.maps.MapTypeId.TERRAIN
});
// Construct the circle for each value in citymap.
// Note: We scale the area of the circle based on the population.
var cont=0;
for (var city in citymap) {
// Add the circle for this city to the map.
var cityCircle = new google.maps.Circle({
text:'hola'+cont,
strokeColor: '#FF0000',
strokeOpacity: 0.8,
title:'hola'+cont,
strokeWeight: 2,
fillColor: '#FF0000',
fillOpacity: 0.35,
optimized: false,
zIndex:10,
map: map,
center: citymap[city].center,
radius: Math.sqrt(citymap[city].population) * 100
});
cont++;
google.maps.event.addListener(cityCircle, 'mouseover', function(event) {
var lat = this.getCenter().lat();
var lon = this.getCenter().lng();
var lat2 = event.latLng.lat();
var lon2 = event.latLng.lng();
console.log(lat+lon+"Circulo"+this.text);
console.log(lat2+lon2+"mouse");
console.log(this.zIndex+"index"+this.text);
});
google.maps.event.addListener(cityCircle,'mouseout',function(event){
var lat = this.getCenter().lat();
var lon = this.getCenter().lng();
var lat2 = event.latLng.lat();
var lon2 = event.latLng.lng();
console.log(lat+lon+"Circulo"+this.text);
console.log(lat2+lon2+"mouse");
console.log(this.zIndex+"index"+this.text);
});
}
}
</script>
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBwm19SMHtEZaXzloVeyMeMULkciJuatEo&signed_in=true&callback=initMap"></script>
</script>
</body>
</html>
你不能为此使用 mouseover/mouseout。您需要处理所有对象并确定鼠标事件是否在对象内部(对于圆,距中心的距离小于半径,对于多边形,containsLocation
方法)。
示例map
mousemove 侦听器:
google.maps.event.addListener(map, 'mousemove', function(event) {
var lat = event.latLng.lat();
var lon = event.latLng.lng();
for (var i = 0; i < areaArray.length; i++) {
if (areaArray[i].getRadius) {
// circle
if (google.maps.geometry.spherical.computeDistanceBetween(areaArray[i].getCenter(), event.latLng) < areaArray[i].getRadius()) {
console.log("in circle:"+event.latLng.toUrlValue(6) + "Circulo center="+areaArray[i].getCenter().toUrlValue(6)+" radius="+areaArray[i].getRadius()+" meters, " + areaArray[i].text);
// console.log(lat2 + lon2 + "mouse");
// console.log(this.zIndex + "index" + this.text);
}
}
}
});
我在 google 地图(圆形和多边形)中遇到几何图形问题,例如:当我有两个重叠的圆并且我使用事件鼠标悬停或鼠标移开时,google 地图仅把圆圈的信息打印得更大一些,因为大的数字在小的后面。如果我在几乎相同的位置有 7 个圆或多边形,我也会遇到同样的问题。
这是一个有两个圆圈的例子,但问题出在数字的组合上。
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no">
<meta charset="utf-8">
<title>Circles</title>
<style>
html, body {
height: 100%;
margin: 0;
padding: 0;
}
#map {
height: 80%;
}
</style>
</head>
<body>
<div id="map"></div>
<script>
// This example creates circles on the map, representing populations in North
// America.
// First, create an object containing LatLng and population for each city.
var citymap = {
chicago: {
center: {lat: 41.878, lng: -87.629},
population: 845837
},
chicago1: {
center: {lat: 41.878, lng: -87.629},
population: 2714856
},
losangeles: {
center: {lat: 34.052, lng: -118.243},
population: 3857799
},
vancouver: {
center: {lat: 49.25, lng: -123.1},
population: 603502
}
};
function initMap() {
// Create the map.
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 4,
center: {lat: 37.090, lng: -95.712},
mapTypeId: google.maps.MapTypeId.TERRAIN
});
// Construct the circle for each value in citymap.
// Note: We scale the area of the circle based on the population.
var cont=0;
for (var city in citymap) {
// Add the circle for this city to the map.
var cityCircle = new google.maps.Circle({
text:'hola'+cont,
strokeColor: '#FF0000',
strokeOpacity: 0.8,
title:'hola'+cont,
strokeWeight: 2,
fillColor: '#FF0000',
fillOpacity: 0.35,
optimized: false,
zIndex:10,
map: map,
center: citymap[city].center,
radius: Math.sqrt(citymap[city].population) * 100
});
cont++;
google.maps.event.addListener(cityCircle, 'mouseover', function(event) {
var lat = this.getCenter().lat();
var lon = this.getCenter().lng();
var lat2 = event.latLng.lat();
var lon2 = event.latLng.lng();
console.log(lat+lon+"Circulo"+this.text);
console.log(lat2+lon2+"mouse");
console.log(this.zIndex+"index"+this.text);
});
google.maps.event.addListener(cityCircle,'mouseout',function(event){
var lat = this.getCenter().lat();
var lon = this.getCenter().lng();
var lat2 = event.latLng.lat();
var lon2 = event.latLng.lng();
console.log(lat+lon+"Circulo"+this.text);
console.log(lat2+lon2+"mouse");
console.log(this.zIndex+"index"+this.text);
});
}
}
</script>
<script async defer
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBwm19SMHtEZaXzloVeyMeMULkciJuatEo&signed_in=true&callback=initMap"></script>
</script>
</body>
</html>
你不能为此使用 mouseover/mouseout。您需要处理所有对象并确定鼠标事件是否在对象内部(对于圆,距中心的距离小于半径,对于多边形,containsLocation
方法)。
示例map
mousemove 侦听器:
google.maps.event.addListener(map, 'mousemove', function(event) {
var lat = event.latLng.lat();
var lon = event.latLng.lng();
for (var i = 0; i < areaArray.length; i++) {
if (areaArray[i].getRadius) {
// circle
if (google.maps.geometry.spherical.computeDistanceBetween(areaArray[i].getCenter(), event.latLng) < areaArray[i].getRadius()) {
console.log("in circle:"+event.latLng.toUrlValue(6) + "Circulo center="+areaArray[i].getCenter().toUrlValue(6)+" radius="+areaArray[i].getRadius()+" meters, " + areaArray[i].text);
// console.log(lat2 + lon2 + "mouse");
// console.log(this.zIndex + "index" + this.text);
}
}
}
});