javascript - 当它被覆盖时,如何检测哪个图形(圆形,多边形)发生一些事件?谷歌地图 API JavaScript

标签 javascript events google-maps-api-3 geometry polygons

我对谷歌地图中的几何图形(圆形和多边形)有问题,例如:当我有两个重叠的圆圈并且我使用事件鼠标悬停或鼠标悬停时,谷歌地图仅打印更大的圆圈的信息,因为大数字放在小数字之后。如果我有 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>

最佳答案

您不能为此使用鼠标悬停/鼠标悬停。您需要处理所有对象并确定 mouseevent 是否在对象内部(对于圆,到中心的距离小于半径,对于多边形,使用 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);
      }
    }
  }
});

proof of concept fiddle (for the circles in your example)

关于javascript - 当它被覆盖时,如何检测哪个图形(圆形,多边形)发生一些事件?谷歌地图 API JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40776291/

相关文章:

javascript - Chrome 扩展程序 : Remove body attributes from content script

javascript - 使用 Angularjs 时更新 shell 页面上的导航 CSS

events - Firefox OS 中的广播事件

c# - this == null 怎么可能?

javascript - Google Map v3 marker点击功能问题和触发外链

jquery - 没有 map 的地理编码

google-maps - 如何自定义谷歌地图以摆脱 3D 建筑效果?

javascript - 为什么我无法在客户端(在浏览器中)打开 UDP 连接?

javascript - 如何在javascript中向按钮添加点击事件?

javascript - 如何在 JavaScript/jQuery 中捕获屏幕截图