Google地图数据图层,以编程方式单击几何图形

时间:2014-11-03 13:32:45

标签: google-maps google-maps-api-3 geojson

我有一个谷歌地图,我使用geoJSON将几何数据加载到数据层。我绑定到数据层中的以下事件。

map.data.addListener('click', function (event) { console.log(event);});

如何手动触发此事件?我知道我可以手动触发标记上的点击事件,但它是通过google.maps.event触发的。

2 个答案:

答案 0 :(得分:2)

应该使用google.maps.event.trigger。

试试这个(不确定):

// invoke a click
google.maps.event.trigger(map.data, 'click');

答案 1 :(得分:0)

虽然 Emmanuel 的回答在技术上是正确的,但我想扩展它,因为我努力了 2-3 个小时才能让它工作。 在我的代码中,我有一个使用特征对象的预定义点击事件函数。 这是我使用功能对象的点击事件:

        transLayerData.addListener('click', function (event) {
          var lfeature = event.feature;
          var html = lfeature.getProperty('popupInfo');
          infowindow.setContent(html);
          infowindow.setPosition(event.latLng);
          infowindow.setOptions({pixelOffset: new google.maps.Size(0,-34)});
          infowindow.open(myMap);
        });

如果您在预定义的数据层点击功能中使用特征对象(如上),重要的是您传递特征对象并创建一个包含特征对象的事件对象。 这是我的代码,它从要素对象中获取纬度和经度并创建一个事件对象:

            var featureGeometry = feature.getGeometry();
            var lsType = featureGeometry.getType();
            var isLineData = false;
            var lsType = featureGeometry.getType();
            if ((lsType == 'LineString') || (lsType == 'MultiLineString') || (lsType == 'LinearRing') || (lsType == 'Polygon') | (lsType == 'MultiPolygon')) {
                isLineData = true;
            }
            var featurePosition;
            if (isLineData) {
                // will center the map on the first vertex of the first LineString
                var tmp = featureGeometry.getAt(0);
                featurePosition = featureGeometry.getAt(0);
             // following will set line's storke weight to 10
                feature.setProperty('strokeWeight', 10);
            } else{
                featurePosition = featureGeometry.get();
            }
            myMap.setZoom(10);
            myMap.setCenter(featurePosition);
            var llat = featurePosition.lat();
            var llong = featurePosition.lng();

          // Creating event with the feature object is important. Especially if you have your very own feature click method defined
            var lEvent = {
                stop: null,
                latLng: new google.maps.LatLng(llat, llong),
                feature: feature,
            }

           // transLayerData is your data layer object. 
           // This is how I have defined my translayer object:
           // transLayerData = new google.maps.Data({ map: myMap });
            if (!isLineData) {
                    google.maps.event.trigger(transLayerData, 'click', lEvent);
                } else {
                    google.maps.event.trigger(transLayerData, 'mouseover', lEvent);
                }
            }