Javascript 打开纸箱/传单标记的火灾事件
我有一个非常具体的问题,我并不期望得到直接的答案,但任何指导都会很有帮助 简单明了,我想通过编程在传单地图上的标记上触发一个单击事件,由CartoDB提供支持。我在地图上有一个包含标记的图层,每个标记都有与其关联的单击事件。因此,本质上,我只需要找到标记并在其上触发click事件 对于上下文,Mapbox实际上正是这样做的,但不幸的是,我无法将Mapbox用于此特定实现: 我愿意接受建议,但我更愿意做与上面链接中的代码类似的事情——通过javascript查询传单或CartoDB,通过自定义属性/lat lng/??查找并访问标记??。我想从那开始就足够简单了 另一种方法是在创建标记时钩住事件,将它们存储在散列中,然后在需要手动单击时访问该存储。然而,我不知道有任何这样的事件存在,我也找不到列出支持的事件的文档 因为我不是自己创建标记,也不能(出于某些原因),所以在将它们添加到地图时存储它们在这里不是一个选项 我想既然Mapbox在做这件事,肯定有一些钩子,但我找不到任何有价值的文档来为我指明正确的方向Javascript 打开纸箱/传单标记的火灾事件,javascript,leaflet,Javascript,Leaflet,我有一个非常具体的问题,我并不期望得到直接的答案,但任何指导都会很有帮助 简单明了,我想通过编程在传单地图上的标记上触发一个单击事件,由CartoDB提供支持。我在地图上有一个包含标记的图层,每个标记都有与其关联的单击事件。因此,本质上,我只需要找到标记并在其上触发click事件 对于上下文,Mapbox实际上正是这样做的,但不幸的是,我无法将Mapbox用于此特定实现: 我愿意接受建议,但我更愿意做与上面链接中的代码类似的事情——通过javascript查询传单或CartoDB,通过自定义属
有什么建议或建议吗?对于任何偶然发现这一点的人,我已经为我的特殊情况找到了一个可行的解决方案。此呼叫将为您完成以下操作:
layer.trigger 'featureClick', event, latlng, pos, data, layer_count
基本上,您需要抓取有问题的图层并触发单击,传递适当的数据:
- 事件:由于没有事件,因此可以为null
- latlng:横向/纵向位置
- 数据:类似于
的对象。cartodb_id是必需的{cartodb\u id:123}
- 层计数:层的索引(可能为0)
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可能会有所不同。有关详细信息,请参阅和。希望有帮助。