OpenLayers-使用ol / control / Control比定义定制控件有什么好处?

在OpenLayers中创建“控件”时-即按钮可以覆盖地图并在单击时可以执行操作,我可以想到至少两种实现方法:

提供您自己的DOM元素,并直接与Map Object交互

这是我目前的做法。在我目前正在使用的网站上:https://seacrifog.saeon.ac.za/atlas,右上角有2个小按钮。这些按钮打开侧菜单,其中包含DOM组件树和用于通过引用OpenLayers地图对象与地图进行交互的逻辑。

map引用可用于通过render-props模式包装OpenLayers库的组件的所有子组件:

class MyMap extends Component {
  // Constructor/lifecycle methods/etc.
  this.map = new Map(...)
  ...
  render() {
    return (
      <>
        <div ref={this.mapRef} />
        {this.props.children({map: this.map})}
      </>
    )
  }
}

然后我发现无需使用OpenLayers Control类即可轻松构建“控件”:

<MyMap>
{({map}) => (
  <>
    {/* Each of these renders a button and other DOM elements */}
    <Component1ThatUsesTheMap map={map} />
    <Component2ThatUsesTheMap map={map} />
    <Component3ThatUsesTheMap map={map} />
  </>
 )}
</MyMap>

使用OpenLayers ol / control / Control类

我从the example看到,也可以通过定义其他Control来向地图添加按钮。据我所知,此示例显示了如何定义将添加到Map中的DOM元素,以及如何编写eventHandlers(在这种情况下为click),该事件处理程序将允许您以您希望的方式与地图进行交互。基本上与我最初使用的方法相同。

问题

与不使用此API相比,使用ol/control/Control定义地图控件有什么好处吗?我不认为不立即使用Control类有任何弊端(实际上...使用React,我可以想到不直接与DOM进行交互的原因,除非我确实需要,以及可能进行交互与来自父组件的地图对象)。尽管我使用的是OpenLayers 6,但在这种情况下,我认为版本并不重要。

richard88888 回答:OpenLayers-使用ol / control / Control比定义定制控件有什么好处?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3153510.html

大家都在问