如何将事件附加到TileMill中创建的Natural Earth地图数据?

时间:2014-05-27 20:23:02

标签: javascript mapbox

我意识到我的知识中存在一些概念上的差距 - 我并不是100%清楚地知道Mapbox中的所有内容是如何组合在一起的。希望有人可以帮我直截了当,帮助我实现我想要做的事情。

我们的客户是一家跨国公司,其地理位置分为全球区域:北美,南美,欧洲和欧洲。非洲,亚太地区等

他们想要的是初始地图视图是缩小的世界地图。当这些单个区域中的每个区域都被覆盖时,属于该区域的国家/地区将突出显示,标签将显示该区域的名称,单击将缩放视口以居中/显示该区域。

问题是地图中没有区域概念,我不确定如何以编程方式添加区域。

底层国家地图是由设计师使用TileMill创建和设计的。它使用自然地球国家地图。当我在TileMill中查看项目并检查图层“features”时,shapefile似乎有一个包含一些关联元数据的各个国家/地区的列表。到目前为止一切都很好。

理想情况下,在客户端,我会列出属于每个地区的国家/地区列表。当用户将鼠标悬停在某个国家/地区时,我会找出它所属的区域,遍历国家/地区列表并应用效果(如不透明度)来突出显示该区域。

问题是,我无法弄清楚如何在TileMill文件中获取当前正在被鼠标悬停的国家/地区的国家/地区元数据。是否可以附加事件并访问TileMill中添加的功能?

仅供参考:我尝试的另一种方法是在运行时添加this地图数据。我能够将事件附加到GeoJSON功能,但是地图的粒度比底层地图低,因此在更高的缩放级别时它不能正确排列。

1 个答案:

答案 0 :(得分:1)

  

问题是地图中没有区域概念,我不确定如何以编程方式添加区域。

好的,这里要理解的基本要素是你在TileMill中添加的交互性与Mapbox.js中GeoJSON的交互性之间的区别。

  • TileMill支持基于UTFGrid raster 交互,并导出 tiles 。它可以处理高水平的细节和数千个功能,但由于地理数据本身不会传输到您的浏览器,您无法进行悬停交互,如突出显示数据 - 您只能打开工具提示和弹出窗口
  • Mapbox.js / Leaflet支持 vector 互动。它们可以处理更低级别的细节和数据量。但地理数据会传输到您的浏览器,因此您可以进行悬停互动以及添加工具提示。