gpt4 book ai didi

javascript - 打开 CartoDB/传单标记的火灾事件

转载 作者:行者123 更新时间:2023-11-28 01:16:45 24 4
gpt4 key购买 nike

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

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

就上下文而言,Mapbox 实际上就是这样做的,但不幸的是我不能使用 Mapbox 来实现这个特定的实现: https://www.mapbox.com/mapbox.js/example/v1.0.0/open-popup-externally/

我愿意接受建议,但最好,我想做一些类似于上面链接中的代码的事情——通过 javascript 询问 Leaflet 或 CartoDB,以通过自定义属性/lat-lng 查找和访问标记/??。我认为从那里开始就足够简单了。

另一种方法可能是在创建标记时 Hook 事件,将它们存储在哈希中,然后在我需要手动单击时访问该存储。但是,我不知道存在任何此类事件,也找不到列出支持的事件的文档。

由于我自己没有创建标记,也不能(由于某些原因),因此在将它们添加到 map 时存储它们不是一个选项。

我认为既然 Mapbox 正在这样做,那么一定有一些钩子(Hook),但我找不到任何有值(value)的文档来为我指明正确的方向。

有什么建议或指示吗?

最佳答案

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

layer.trigger 'featureClick', event, latlng, pos, data, layer_count

本质上,您需要抓取有问题的图层并触发点击,传递适当的数据:

  • 事件:这可以为 null,因为没有事件
  • latlng:纬度/经度位置
  • 数据:类似 { car​​todb_id: 123 } 的对象。 cartodb_id 是必需的。
  • layer_count:图层的索引(可能为 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 调用来获得正确的控制流,就像我在页面加载时进行调用一样。但如果您在页面加载后调用,应该没问题。

因此,在给定本地标识符的情况下,打开标记的方法足够简单。希望这对其他人有帮助!

感谢此解决方案的灵感: https://gist.github.com/javisantana/7b817fda1e7511c451c7#file-index-html-L39

关于javascript - 打开 CartoDB/传单标记的火灾事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23746456/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com