UNPKG

ol-ext

Version:

A set of cool extensions for OpenLayers (ol) in node modules structure

93 lines (84 loc) 4.39 kB
/* Copyright (c) 2018 Jean-Marc VIGLINO, released under the CeCILL-B license (French BSD license) (http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt). */ import ol_ext_inherits from '../util/ext' import ol_control_Control from 'ol/control/Control' import ol_geom_LineString from 'ol/geom/LineString'; import ol_Feature from 'ol/Feature' import ol_ext_element from '../util/element'; import ol_control_SearchGeoportail from './SearchGeoportail' import ol_source_Vector from 'ol/source/Vector' import ol_geom_Point from 'ol/geom/Point' import {transform as ol_proj_transform} from 'ol/proj' /** * Geoportail routing Control. * @constructor * @extends {ol_control_Control} * @fires select * @fires change:input * @param {Object=} options * @param {string} options.className control class name * @param {string | undefined} options.apiKey the service api key. * @param {string | undefined} options.authentication: basic authentication for the service API as btoa("login:pwd") * @param {Element | string | undefined} options.target Specify a target if you want the control to be rendered outside of the map's viewport. * @param {string | undefined} options.label Text label to use for the search button, default "search" * @param {string | undefined} options.placeholder placeholder, default "Search..." * @param {string | undefined} options.inputLabel label for the input, default none * @param {string | undefined} options.noCollapse prevent collapsing on input blur, default false * @param {number | undefined} options.typing a delay on each typing to start searching (ms) use -1 to prevent autocompletion, default 300. * @param {integer | undefined} options.minLength minimum length to start searching, default 1 * @param {integer | undefined} options.maxItems maximum number of items to display in the autocomplete list, default 10 * @param {integer | undefined} options.maxHistory maximum number of items to display in history. Set -1 if you don't want history, default maxItems * @param {function} options.getTitle a function that takes a feature and return the name to display in the index. * @param {function} options.autocomplete a function that take a search string and callback function to send an array * @param {number} options.timeout default 10s */ var ol_control_RoutingDSR = function(options) { ol_control_RoutingGeoportail.call(this, options); this.set('url', 'https://api-dscr.ign.fr/api/v1/route'); /* https://api-dscr.ign.fr/api/v1/route??gp-access-lib=1.1.0&origin=-1.1645594062499982,47.48751276204655&destination=1.9555577812500002,48.77791251471987&method=time&graphName=Voiture&waypoints=&format=STANDARDEXT https://wxs.ign.fr/h1osiyvfm7c4wu976jv6gpum/itineraire/rest/route.json?gp-access-lib=1.1.0& origin=-1.1466776392462616,47.73963314471081&destination=-0.2856532767853664,47.517200591317135&method=time& graphName=Voiture&waypoints=&format=STANDARDEXT https://api-dscr.ign.fr/api/v1/route?origin=2.423725%2C48.845765&destination=2.428789%2C48.845406&method=time&tolerance=50 */ }; ol_ext_inherits(ol_control_RoutingDSR, ol_control_RoutingGeoportail); ol_control_RoutingDSR.prototype.handleResponse = function (data, start, end) { if (data.status === 'ERROR') { this.dispatchEvent({ type: 'errror', status: '200', statusText: data.message }) return; } var format = new ol.format.GeoJSON(); var routing = format.readFeature(data.features[0], { featureProjection: this.getMap().getView().getProjection() }) console.log(data, routing); this.dispatchEvent({ type: 'routing', feature: routing }); this.path = routing; return routing; }; ol_control_RoutingDSR.prototype.listRouting = function (routing) { this.resultElement.innerHTML = ''; ol_ext_element.create('I', { html: routing.get('distance') + ' ('+routing.get('duration')+')', parent: this.resultElement }); var ul = document.createElement('ul'); this.resultElement.appendChild(ul); var routes = routing.get('routes') routes.forEach(function(r) { var d = this.getDistanceString(r.longueur); ol_ext_element.create('LI', { html: r.numero + ' ' + r.nom_gestionnaire +' ' + '<i>' + d +'</i>', parent: ul }) }.bind(this)); }; export default ol_control_RoutingDSR