You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
5.9 KiB
146 lines
5.9 KiB
2 years ago
|
<!DOCTYPE html>
|
||
|
<html>
|
||
|
<head>
|
||
|
<title>Leaflet.draw popup event example</title>
|
||
|
|
||
|
<script src="libs/leaflet-src.js"></script>
|
||
|
<link rel="stylesheet" href="libs/leaflet.css" />
|
||
|
|
||
|
<script src="../../src/Leaflet.draw.js"></script>
|
||
|
<script src="../../src/Leaflet.Draw.Event.js"></script>
|
||
|
<link rel="stylesheet" href="../../src/leaflet.draw.css" />
|
||
|
|
||
|
<script src="../../src/Toolbar.js"></script>
|
||
|
<script src="../../src/Tooltip.js"></script>
|
||
|
|
||
|
<script src="../../src/ext/GeometryUtil.js"></script>
|
||
|
<script src="../../src/ext/LatLngUtil.js"></script>
|
||
|
<script src="../../src/ext/LineUtil.Intersect.js"></script>
|
||
|
<script src="../../src/ext/Polygon.Intersect.js"></script>
|
||
|
<script src="../../src/ext/Polyline.Intersect.js"></script>
|
||
|
<script src="../../src/ext/TouchEvents.js"></script>
|
||
|
|
||
|
<script src="../../src/draw/DrawToolbar.js"></script>
|
||
|
<script src="../../src/draw/handler/Draw.Feature.js"></script>
|
||
|
<script src="../../src/draw/handler/Draw.SimpleShape.js"></script>
|
||
|
<script src="../../src/draw/handler/Draw.Polyline.js"></script>
|
||
|
<script src="../../src/draw/handler/Draw.Marker.js"></script>
|
||
|
<script src="../../src/draw/handler/Draw.CircleMarker.js"></script>
|
||
|
<script src="../../src/draw/handler/Draw.Circle.js"></script>
|
||
|
<script src="../../src/draw/handler/Draw.Polygon.js"></script>
|
||
|
<script src="../../src/draw/handler/Draw.Rectangle.js"></script>
|
||
|
|
||
|
|
||
|
<script src="../../src/edit/EditToolbar.js"></script>
|
||
|
<script src="../../src/edit/handler/EditToolbar.Edit.js"></script>
|
||
|
<script src="../../src/edit/handler/EditToolbar.Delete.js"></script>
|
||
|
|
||
|
<script src="../../src/Control.Draw.js"></script>
|
||
|
|
||
|
<script src="../../src/edit/handler/Edit.Poly.js"></script>
|
||
|
<script src="../../src/edit/handler/Edit.SimpleShape.js"></script>
|
||
|
<script src="../../src/edit/handler/Edit.Marker.js"></script>
|
||
|
<script src="../../src/edit/handler/Edit.CircleMarker.js"></script>
|
||
|
<script src="../../src/edit/handler/Edit.Circle.js"></script>
|
||
|
<script src="../../src/edit/handler/Edit.Rectangle.js"></script>
|
||
|
|
||
|
</head>
|
||
|
<body>
|
||
|
<div id="map" style="width: 800px; height: 600px; border: 1px solid #ccc"></div>
|
||
|
|
||
|
<script>
|
||
|
var osmUrl = 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
|
||
|
osmAttrib = '© <a href="http://openstreetmap.org/copyright">OpenStreetMap</a> contributors',
|
||
|
osm = L.tileLayer(osmUrl, {maxZoom: 18, attribution: osmAttrib}),
|
||
|
map = new L.Map('map', {center: new L.LatLng(29.9792, 31.1344), zoom: 15}),
|
||
|
drawnItems = L.featureGroup().addTo(map);
|
||
|
|
||
|
L.control.layers({
|
||
|
"osm": osm.addTo(map),
|
||
|
"google": L.tileLayer('http://www.google.cn/maps/vt?lyrs=s@189&gl=cn&x={x}&y={y}&z={z}', {
|
||
|
attribution: 'google'
|
||
|
})
|
||
|
}, {'drawlayer':drawnItems}, { position: 'topright', collapsed: false }).addTo(map);
|
||
|
|
||
|
map.addControl(new L.Control.Draw({
|
||
|
edit: {
|
||
|
featureGroup: drawnItems,
|
||
|
poly : {
|
||
|
allowIntersection : false
|
||
|
}
|
||
|
},
|
||
|
draw: {
|
||
|
polygon : {
|
||
|
allowIntersection: false,
|
||
|
showArea:true
|
||
|
}
|
||
|
}
|
||
|
}));
|
||
|
|
||
|
// Truncate value based on number of decimals
|
||
|
var _round = function(num, len) {
|
||
|
return Math.round(num*(Math.pow(10, len)))/(Math.pow(10, len));
|
||
|
};
|
||
|
// Helper method to format LatLng object (x.xxxxxx, y.yyyyyy)
|
||
|
var strLatLng = function(latlng) {
|
||
|
return "("+_round(latlng.lat, 6)+", "+_round(latlng.lng, 6)+")";
|
||
|
};
|
||
|
|
||
|
// Generate popup content based on layer type
|
||
|
// - Returns HTML string, or null if unknown object
|
||
|
var getPopupContent = function(layer) {
|
||
|
// Marker - add lat/long
|
||
|
if (layer instanceof L.Marker || layer instanceof L.CircleMarker) {
|
||
|
return strLatLng(layer.getLatLng());
|
||
|
// Circle - lat/long, radius
|
||
|
} else if (layer instanceof L.Circle) {
|
||
|
var center = layer.getLatLng(),
|
||
|
radius = layer.getRadius();
|
||
|
return "Center: "+strLatLng(center)+"<br />"
|
||
|
+"Radius: "+_round(radius, 2)+" m";
|
||
|
// Rectangle/Polygon - area
|
||
|
} else if (layer instanceof L.Polygon) {
|
||
|
var latlngs = layer._defaultShape ? layer._defaultShape() : layer.getLatLngs(),
|
||
|
area = L.GeometryUtil.geodesicArea(latlngs);
|
||
|
return "Area: "+L.GeometryUtil.readableArea(area, true);
|
||
|
// Polyline - distance
|
||
|
} else if (layer instanceof L.Polyline) {
|
||
|
var latlngs = layer._defaultShape ? layer._defaultShape() : layer.getLatLngs(),
|
||
|
distance = 0;
|
||
|
if (latlngs.length < 2) {
|
||
|
return "Distance: N/A";
|
||
|
} else {
|
||
|
for (var i = 0; i < latlngs.length-1; i++) {
|
||
|
distance += latlngs[i].distanceTo(latlngs[i+1]);
|
||
|
}
|
||
|
return "Distance: "+_round(distance, 2)+" m";
|
||
|
}
|
||
|
}
|
||
|
return null;
|
||
|
};
|
||
|
|
||
|
// Object created - bind popup to layer, add to feature group
|
||
|
map.on(L.Draw.Event.CREATED, function(event) {
|
||
|
var layer = event.layer;
|
||
|
var content = getPopupContent(layer);
|
||
|
if (content !== null) {
|
||
|
layer.bindPopup(content);
|
||
|
}
|
||
|
drawnItems.addLayer(layer);
|
||
|
});
|
||
|
|
||
|
// Object(s) edited - update popups
|
||
|
map.on(L.Draw.Event.EDITED, function(event) {
|
||
|
var layers = event.layers,
|
||
|
content = null;
|
||
|
layers.eachLayer(function(layer) {
|
||
|
content = getPopupContent(layer);
|
||
|
if (content !== null) {
|
||
|
layer.setPopupContent(content);
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
</script>
|
||
|
</body>
|
||
|
</html>
|