如何在不使用D3的情况下在Leaflet上制作自定义SVG叠加层?

时间:2015-01-15 12:03:03

标签: javascript css svg leaflet geo

我最近开始了一个小项目,涉及在Leaflet地图上绘制运输方案。我有一个表示停靠点的集合(数组),每个点都有一个属性location(LatLng)。如何在不使用原生标记的情况下将它们放置在地图上,而是使用带路径和SVG的SVG图层。相反,并确保在每次拖动或缩放地图时保证元素的正确地理位置?

到目前为止,我已经想过:

  1. 在地图上的叠加窗格中使用Leaflet提供的SVG叠加层。这种方法的问题在于我感觉它是专为标记,折线等原生元素设计的等等,但不适用于自定义SVG元素(我还没有找到很多信息)。此外,每次我缩放地图和& out,其元素'坐标似乎不一致&一直不同。

  2. 将SVG叠加层添加到地图窗格顶部的地图容器中。这看起来很好,您可能确定Leaflet不会损坏'你的叠加层以任何方式,直到你发现SVG不可拖动。这似乎有2个解决方案:

    2.1。将地图容器的变换traslate3d值分配给叠加层。这似乎工作&它的工作同时取代了地图图块层和叠加创建幻觉,就好像它们被绑定在一起一样。每个点现在在SVG上具有恒定位置,只要地图没有被缩放,这等于其在容器上的预计位置减去容器& s之间的差异。叠加层的左上角。因此,假设叠加层应适合所有点和用户被显示在地图的中心,SVG应该从屏幕开始,因此具有负值x& y属性'或left& top CSS属性。实际上,它们似乎都没有正常工作,因为地图的尺寸​​为零或仅适合左上角(在原始视口之外)的极少数点的尺寸。

    2.2。 创建一个覆盖地图整个图块层的大型SVG覆盖图。它与之前的解决方案几乎相同,但现在可以直接将点投影到图块层上,从而消除了需要计算容器& amp;叠加层的位置始终不同。与上述负值相同的问题。

    2.3。 在地图容器内使用静态SVG叠加层&重新计算所有元素在拖动/缩放上的位置。,这会导致传单中的本地'叠加方法&似乎计算成本很高。

  3. 那么,有没有更好的方法来实现这一目标(没有D3,因为我想要一个更多的本地解决方案)或者我只是做一些根本错误的事情阻止我实现目标?

    CSS&元素定位一直是我的弱点,所以我不太熟悉使用SVG的x&的负值的副作用。 y属性,left& CSS中的toptransform' s translate&将它们组合在一起似乎让我很困惑。

0 个答案:

没有答案