mapboxgl.accessToken = 'pk.eyJ1IjoibXBtY2tlbm5hOCIsImEiOiJfYWx3RlJZIn0.v-vrWv_t1ytntvWpeePhgQ'; var coordinates = document.getElementById('coordinates'); var map = new mapboxgl.Map({ container: 'map', style: 'mapbox://styles/mapbox/streets-v9', center: [0, 0], zoom: 2 }); var canvas = map.getCanvasContainer(); var geojson = { "type": "FeatureCollection", "features": [{ "type": "Feature", "geometry": { "type": "Point", "coordinates": [0, 0] } }] }; var parent = { "type": "FeatureCollection", "features": [{ "type": "Feature", "geometry": { "type": "Point", "coordinates": [13, 4] } }] }; var liner = { "type": "FeatureCollection", "features": [{ "type": "Feature", "geometry": { "type": "LineString", "coordinates": [ parent.features[0].geometry.coordinates, geojson.features[0].geometry.coordinates ] } }] }; function onMove(e) { var coords = e.lngLat; // Set a UI indicator for dragging. canvas.style.cursor = 'grabbing'; // Update the Point feature in `geojson` coordinates // and call setData to the source layer `point` on it. geojson.features[0].geometry.coordinates = [coords.lng, coords.lat]; liner.features[0].geometry.coordinates[1] = [coords.lng, coords.lat]; map.getSource('point').setData(geojson); map.getSource('liner').setData(liner); } function onUp(e) { var coords = e.lngLat; // Print the coordinates of where the point had // finished being dragged to on the map. coordinates.style.display = 'block'; coordinates.innerHTML = 'Longitude: ' + coords.lng + '
Latitude: ' + coords.lat; canvas.style.cursor = ''; // Unbind mouse/touch events map.off('mousemove', onMove); map.off('touchmove', onMove); } map.on('load', function() { // Add a single point to the map map.addSource('point', { "type": "geojson", "data": geojson }); map.addSource('parent', { "type": "geojson", "data": parent }); map.addLayer({ "id": "point", "type": "circle", "source": "point", "paint": { "circle-radius": 10, "circle-color": "#3887be" } }); map.addLayer({ "id": "parent", "type": "circle", "source": "parent", "paint": { "circle-radius": 30, "circle-color": "#e887be" } }); map.addLayer({ 'id': 'liner', 'type': 'line', 'source': { 'type': 'geojson', 'data': liner }, 'layout': { 'line-cap': 'round', 'line-join': 'round' }, 'paint': { 'line-color': '#ed6498', 'line-width': 5, 'line-opacity': .8 } }); // When the cursor enters a feature in the point layer, prepare for dragging. map.on('mouseenter', 'point', function() { map.setPaintProperty('point', 'circle-color', '#3bb2d0'); canvas.style.cursor = 'move'; }); map.on('mouseleave', 'point', function() { map.setPaintProperty('point', 'circle-color', '#3887be'); canvas.style.cursor = ''; }); map.on('mousedown', 'point', function(e) { // Prevent the default map drag behavior. e.preventDefault(); canvas.style.cursor = 'grab'; map.on('mousemove', onMove); map.once('mouseup', onUp); }); map.on('touchstart', 'point', function(e) { if (e.points.length !== 1) return; // Prevent the default map drag behavior. e.preventDefault(); map.on('touchmove', onMove); map.once('touchend', onUp); }); });