4

我有 GeoJSON 数据,用于在地图上创建带有 react-leafet 的 CircleMarkers,并使用 D3.js 在其下方创建散点图。

我想将两者联系起来,这样当您将鼠标悬停在 CircleMarker 上时,图表上匹配的圆圈也会改变填充和描边颜色。

我尝试给每个人一个独特的课程,但这只会分别突出每个圆圈,而不是同时突出显示。

我不确定如何进行。我可以设置一个 id 或使用每个键来执行此操作吗?

以下是我为地图创建 CircleMarkers 和为图表创建圆圈的方法:

    const chartDots = pointsData.features.map( (pt, index) => {
        return (
            <circle
               key={"circle-" + index}
               className={"myClass-" + index}
               fill="dodgerBlue"
               cx={xScale(pt.properties.value1)}
               cy={yScale(pt.properties.value2)}
               opacity={0.5}
               r={10}
             >
             <title>Name: {pt.properties.name}</title> 
            </circle>
    )
})

    const myPoints = pointsData.features.map( (pt, index) => {
    const coord = [pt.geometry.coordinates[1], pt.geometry.coordinates[0]]
    return (
            <CircleMarker
               key={'cm-' + index}
               className={"myClass-" + index}
               center={coord}
               opacity={0.5}
             >
               <Popup>
                 <span>{pt.properties.name}</span>
               </Popup>
          </CircleMarker>
        )
})

链接到 jsfiddle 上的完整代码:https ://jsfiddle.net/mendoza_line/39n4rs4q/

4

2 回答 2

2

:hover 适用于您主动悬停的任何内容,因此在这种情况下将不起作用。

您可以在 circleMarker 上使用 onMouseOver 和 onMouseOut,我对 D3 不熟悉,但我确信它有类似的东西

<CircleMarker
      key={'cm-' + index}
      className={"myClass-" + index}
      center={coord}
      opacity={0.5}
      onMouseOver={(e) => e.target.setStyle({fillColor: 'green'})}
      onMouseOut={(e) => e.target.setStyle({fillColor: 'blue'})}
    >

应该让你朝着正确的方向开始

于 2017-09-11T16:24:29.353 回答
-1

您在 opacity 属性的正确轨道上。这就是您可以直接添加到 react-leaflet 组件的路径选项之一。如果要更改颜色,可以设置颜色属性,该属性相当于路径中的颜色选项。看这个例子:

<CircleMarker
  key={'cm-' + index}
  color={index === 0 ? 'red' : 'blue'}
  center={coord}
  opacity={0.5}
  >
于 2017-09-10T20:30:27.997 回答