const _ = require('lodash'); const leaflet = require('leaflet'); import draw_base_map from './base_map'; import {ACTUAL_ROUTE_COLOR, PLAN_ROUTE_COLOR} from './config'; /** * Show some popup text when a feature is clicked on * @param feature * @param layer */ export const onFeaturePointClick = (feature, layer) => { let popup_html = ""; if (feature.properties && feature.properties.popup) { popup_html += feature.properties.popup; } layer.bindPopup(popup_html); }; /** * Show each point as a marker * @param feature * @param latlng * @returns {*} */ export const pointToLayer = (feature, latlng) => { return leaflet.circleMarker(latlng, { radius: 12, fillColor: "#ff7800", color: "#000", weight: 1, opacity: 1, fillOpacity: 0.8 }); }; /** * * @param opts * @private */ export default (opts) => { opts = _.defaults(opts, { route_points: null, planned_route_line: null, actual_route_points: null, actual_route_line: null, render_elem: 'map', }); console.log(opts); let map = draw_base_map(opts); let geodesicLayer = leaflet.geodesic([], { weight: 7, opacity: 0.9, color: PLAN_ROUTE_COLOR, steps: 50, wrap: false, }).addTo(map); geodesicLayer.geoJson(opts.planned_route_line); try { map.fitBounds(geodesicLayer.getBounds()); } catch (e) { console.log(e); } // Draw the route points after if (opts.route_points !== null) { let route_points = leaflet.geoJSON(opts.route_points, { onEachFeature: onFeaturePointClick, pointToLayer: pointToLayer, style: { "color": PLAN_ROUTE_COLOR, "weight": 5, "opacity": 0.65, }, }); route_points.addTo(map); } /** * draw the actual route */ if (opts.actual_route_line !== null && opts.actual_route_line.features.length > 0) { let geodesicLayer = leaflet.geodesic([], { weight: 7, opacity: 0.9, color: ACTUAL_ROUTE_COLOR, steps: 50, wrap: false, }).addTo(map); geodesicLayer.geoJson(opts.actual_route_line); try { map.fitBounds(geodesicLayer.getBounds()); } catch (e) { console.log(e); } } if (opts.actual_route_points !== null && opts.actual_route_points.features.length > 0) { let route_points = leaflet.geoJSON(opts.actual_route_points, { onEachFeature: onFeaturePointClick, pointToLayer: pointToLayer, style: { "color": ACTUAL_ROUTE_COLOR, "weight": 5, "opacity": 0.65, }, }); route_points.addTo(map); } };