UNL Map JSUNL Map JS DocsExamplesCreate a draggable point

Create a draggable point

Drag the point to a new location on a map and populate its coordinates in a display.

Note
If you want to test this example, edit it in JSFiddle or CodePen and replace the "YOUR-OWN-API-KEY" and "YOUR-OWN-VPM-ID" placeholders with your actual api key and vpm id.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Create a draggable point</title>
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" />
<script src="https://unpkg.com/unl-map-js@0.1.5/lib/unl-map-js.js"></script>
<link href="https://unpkg.com/unl-map-js@0.1.5/lib/unl-map-js.css" rel="stylesheet" />
<link
href="https://unpkg.com/maplibre-gl@2.1.9/dist/maplibre-gl.css"
rel="stylesheet"
/>
<style>
body { margin: 0; padding: 0; }
#map { position: absolute; top: 0; bottom: 0; width: 100%; }
</style>
</head>
<body>
<style>
.coordinates {
background: rgba(0, 0, 0, 0.5);
color: #fff;
position: absolute;
bottom: 40px;
left: 10px;
padding: 5px 10px;
margin: 0;
font-size: 11px;
line-height: 18px;
border-radius: 3px;
display: none;
}
</style>
<div id="map"></div>
<pre id="coordinates" class="coordinates"></pre>
<script>
var coordinates = document.getElementById("coordinates");
var map = new UnlSdk.Map({
container: "map",
apiKey: "YOUR-OWN-API-KEY",
vpmId: "YOUR-OWN-VPM-ID",
center: [0, 0],
zoom: 2,
});
var canvas = map.getCanvasContainer();
var geojson = {
type: "FeatureCollection",
features: [
{
type: "Feature",
geometry: {
type: "Point",
coordinates: [0, 0],
},
},
],
};
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];
map.getSource("point").setData(geojson);
}
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 + "<br />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.addLayer({
id: "point",
type: "circle",
source: "point",
paint: {
"circle-radius": 10,
"circle-color": "#3887be",
},
});
// 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);
});
});
</script>
</body>
</html>