Javascript 打开纸箱/传单标记的火灾事件

Javascript 打开纸箱/传单标记的火灾事件,javascript,leaflet,Javascript,Leaflet,我有一个非常具体的问题,我并不期望得到直接的答案,但任何指导都会很有帮助 简单明了,我想通过编程在传单地图上的标记上触发一个单击事件,由CartoDB提供支持。我在地图上有一个包含标记的图层,每个标记都有与其关联的单击事件。因此,本质上,我只需要找到标记并在其上触发click事件 对于上下文,Mapbox实际上正是这样做的,但不幸的是,我无法将Mapbox用于此特定实现: 我愿意接受建议,但我更愿意做与上面链接中的代码类似的事情——通过javascript查询传单或CartoDB,通过自定义属

我有一个非常具体的问题,我并不期望得到直接的答案,但任何指导都会很有帮助

简单明了,我想通过编程在传单地图上的标记上触发一个单击事件,由CartoDB提供支持。我在地图上有一个包含标记的图层,每个标记都有与其关联的单击事件。因此,本质上,我只需要找到标记并在其上触发click事件

对于上下文,Mapbox实际上正是这样做的,但不幸的是,我无法将Mapbox用于此特定实现:

我愿意接受建议,但我更愿意做与上面链接中的代码类似的事情——通过javascript查询传单或CartoDB,通过自定义属性/lat lng/??查找并访问标记??。我想从那开始就足够简单了

另一种方法是在创建标记时钩住事件,将它们存储在散列中,然后在需要手动单击时访问该存储。然而,我不知道有任何这样的事件存在,我也找不到列出支持的事件的文档

因为我不是自己创建标记,也不能(出于某些原因),所以在将它们添加到地图时存储它们在这里不是一个选项

我想既然Mapbox在做这件事,肯定有一些钩子,但我找不到任何有价值的文档来为我指明正确的方向


有什么建议或建议吗?

对于任何偶然发现这一点的人,我已经为我的特殊情况找到了一个可行的解决方案。此呼叫将为您完成以下操作:

layer.trigger 'featureClick', event, latlng, pos, data, layer_count
基本上,您需要抓取有问题的图层并触发单击,传递适当的数据:

  • 事件:由于没有事件,因此可以为null
  • latlng:横向/纵向位置
  • 数据:类似于
    {cartodb\u id:123}
    的对象。cartodb_id是必需的
  • 层计数:层的索引(可能为0)
要在此处获取latlng和cartodb_id,您可能需要执行我所做的操作--查询:

function openMarker(layer, my_object_id) {
  vars = { database_id: my_object_id };
  opts = { format: 'geojson' };
  query = "SELECT * FROM my_table WHERE my_object_id = {{ my_object_id }}"
  sql = new cartodb.SQL({user: my_user_id});
  sql.execute(query, vars, opts).done(function(data) {
    if (data.features != undefined && data.features.length == 1)
      row = data.features[0];
      latlng = [ row.geometry.coordinates[1], row.geometry.coordinates[0] ];
      layer.trigger('featureClick', null, latlng, null, { cartodb_id: row.properties.cartodb_id }, 0);
  });
}
然后,您可以调用open_marker,传递要打开标记的图层和对象标识符。只要它在您的cartodb数据库中,您就可以获取它。当然,查询可以根据您的方式进行调整

对于我的特定实现,我必须使用setTimeout调用来获得正确的控制流,就像我在页面加载时调用一样。但是如果你在页面加载后打电话,应该没问题

所以,这是一种非常简单的方法,可以在给定本地标识符的情况下打开标记。希望这对其他人有帮助

此解决方案的灵感来源于:

当我从CartoDB查询SQL API时,row.coordinates以GeoJSON格式返回,这给了我一个双值数组[long,lat]。对于layer.trigger的调用,我需要[lat,long],所以我反转数组。注意,我的数据库有点,所以它对row.coordinates使用这种格式;根据特定的数据库实现,返回的GeoJSON可能会有所不同。有关详细信息,请参阅和。希望有帮助。