OpenLayers - в чем преимущество использования ol / control / Control для определения индивидуальных элементов управления? - PullRequest
1 голос
/ 06 ноября 2019

При создании «элементов управления» в OpenLayers - т. Е. Кнопок, которые накладываются на карту и которые выполняют действия при нажатии, я могу придумать как минимум два способа достижения таких целей:

Предоставление собственных элементов DOM и взаимодействиенепосредственно с объектом карты

Это мой текущий подход. На веб-сайте, над которым я сейчас работаю: https://seacrifog.saeon.ac.za/atlas, есть две маленькие кнопки в правом верхнем углу. Эти кнопки открывают боковые меню, которые содержат деревья компонентов DOM и логику для взаимодействия с картой через ссылку на объект карты OpenLayers.

Эта ссылка map доступна всем дочерним элементам компонента, который переносит OpenLayersбиблиотека с помощью шаблона render-props:

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>

Использование OpenLayersol / control / Control class

Я вижу из примера , что можно добавлять кнопки на карту, определяя также дополнительные Control s. Насколько я могу судить, этот пример показывает, как определить элементы DOM, которые будут добавлены на карту, и как написать eventHandlers (в этом случае щелкните), который позволит вам взаимодействовать с картой так, как вы хотите,По сути, это то же самое, что и мой первоначальный подход.

Вопрос

Есть ли какая-то польза от определения элементов управления картой с использованием ol/control/Control по сравнению с этим API? Я не могу думать о каких-либо недостатках, связанных с неприменением класса Control (и на самом деле ... с использованием React. Я могу подумать о причинах НЕ взаимодействовать напрямую с DOM, если мне это действительно не нужно, а также о потенциальном взаимодействии собъект карты из родительского компонента). Хотя я использую OpenLayers 6, я не думаю, что версия имеет значение в этом случае.

...