【问题标题】:Google Maps - Trigger a click event on a data layer at a specific point (long/lat)谷歌地图 - 在特定点(经度/纬度)的数据层上触发点击事件
【发布时间】:2017-07-26 03:46:34
【问题描述】:

我正在使用 GeoJSON 加载谷歌地图,在加载地图并应用数据层后,我想在特定点为用户自动触发点击事件。随后,他们可以点击整个地图进行交互。

所以对于自动加载部分,我尝试了这样的事情:

var x = new google.maps.LatLng(myLongitude, myLatitude);
google.maps.event.trigger(map.data, 'click', WHAT_GOES_HERE?);

但我不知道该函数的最后一部分发生了什么。点击对应的函数是这样的:

 map.data.addListener('click', function (event) {
    ...
    code
    ...
   }

事件触发,但事件当然是空的。我需要(事件)填充一个特征(这是预期的类型),但我似乎无法弄清楚如何从 long/lat 获取该特征。

所以我加载了我的数据层,我有我的经度/纬度,但我似乎无法从经度/纬度检索特征。关于如何检索这个的任何建议?

【问题讨论】:

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


    【解决方案1】:

    A (on)Click 看起来像这样(假设我们在那里放置了一个标记):

    map.addListener('click', function (event) {
      var position = {lat: event.latLng.lat(), lng: event.latLng.lng()}
      //alert(JSON.stringify(position));
      var marker = new google.maps.Marker({position: position, map: map});
    });
    

    所以让我们反过来吧。

    假设您有一个按钮可以触发对布鲁塞尔或巴黎的点击

    <input type="button" value="click on Brussels" onclick="clickOnMap(50.85, 4.35)">
    <input type="button" value="click on Paris" onclick="clickOnMap(48.84, 2.35)">
    <script>
    function clickOnMap(lat, lng) {
      var event = {latLng: {}};
      event.latLng.lat = function() { return lat };
      event.latLng.lng = function() { return lng };
      google.maps.event.trigger(map, 'click', event);
    }   
    </script>
    

    在相同的坐标上单击按钮将具有与单击地图相同的效果。

    当然你也可以自动调用clickOnMap函数。

    您对此有帮助吗?


    编辑:假设您需要更多事件属性,例如 event.feature.getProperty("name");

    尝试添加如下内容: 我不知道还有什么预期,但您可以继续添加这样的属性。

    function clickOnMap(lat, lng, name) {
      var event = {latLng: {}, feature: {}};
      event.latLng.lat = function() { return lat };
      event.latLng.lng = function() { return lng };
      event.feature.getProperty = function(property) { return name; };
      google.maps.event.trigger(map, 'click', event);
    }
    

    【讨论】:

    • 您好伊曼纽尔,感谢您的回复。当点击触发时,我的代码尝试访问它: event.feature.getProperty("name");它说 event.feature 为空(大概是因为我们将事件实例化为 long/lat,但我真正需要的是它是数据层本身)。此外,我将您的点击触发器更改为 map.data,而不是地图,因为我希望点击触发不是在地图上的数据层功能(b/c 这是两个不同的点击处理程序)。说得通?有任何想法吗?谢谢!
    • 查看我为 feature.getProperty 编辑的答案。看看有没有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    相关资源
    最近更新 更多