Source: ol/ZoomSearch.js

/**
 * @module nyc/ol/ZoomSearch
 */

import $ from 'jquery'

import OlGeoJSON from 'ol/format/GeoJSON'
import {getCenter as olExtentGetCenter} from 'ol/extent'

import NycZoomSearch from 'nyc/ZoomSearch'
import NycLocator from 'nyc/Locator'

/**
 * @desc Class for providing a set of buttons to zoom and search.
 * @public
 * @class
 * @extends {module:nyc/ZoomSearch~ZoomSearch}
 * @fires module:nyc/ZoomSearch~ZoomSearch#search
 * @fires module:nyc/ZoomSearch~ZoomSearch#geolocate
 * @fires module:nyc/ZoomSearch~ZoomSearch#disambiguated
 */
class ZoomSearch extends NycZoomSearch {
  /**
   * @desc Create an instance of ZoomSearch
   * @constructor
   * @param {ol.Map} map The OpenLayers map that will be controlled
   */
  constructor(map) {
    super($(map.getTargetElement()).find('.ol-overlaycontainer-stopevent'))
    /**
  	 * @private
  	 * @member {ol.Map}
  	 */
  	this.map = map
    /**
  	 * @private
  	 * @member {ol.View}
  	 */
  	this.view = map.getView()
    /**
  	 * @private
  	 * @member {ol.format.GeoJSON}
  	 */
  	this.geoJson = new OlGeoJSON()
  	this.getContainer().on('click dblclick mouseover mousemove', () => {
      $('.f-tip').hide()
    })
  }
	/**
	 * @public
	 * @override
	 * @method
	 * @param {ol.Feature} feature The feature object
	 * @param {module:nyc/ZoomSearch~ZoomSearch.FeatureSearchOptions} options Describes how to convert feature
	 * @return {module:nyc/Locator~Locator.Result} The location
	 */
	featureAsLocation(feature, options) {
		const geom = feature.getGeometry()
		return {
			name: options.nameField ? feature.get(options.nameField) : feature.getName(),
			coordinate: olExtentGetCenter(geom.getExtent()),
			geometry: JSON.parse(this.geoJson.writeGeometry(geom)),
			data: feature.getProperties(),
			type: 'geocoded',
			accuracy: NycLocator.Accuracy.HIGH
		}
	}
	/**
	 * @desc Handle the zoom event triggered by user interaction
	 * @public
	 * @override
	 * @method
	 * @param {jQuery.Event} event The event triggered by the zoom buttons
	 */
	zoom(event) {
		this.view.animate({
      zoom: this.view.getZoom() + ($(event.target).data('zoom-incr') * 1)
    })
	}
}

export default ZoomSearch