Leaflet 在传单L.circle()函数创建的圆上添加文本
我使用以下函数在传单地图上的单击点周围创建一系列圆圈。我希望通过将距离(r或半径)放置在圆线本身上来标记每个圆。但我找不到任何选项或功能来实现这一点。有人能告诉我怎么做吗Leaflet 在传单L.circle()函数创建的圆上添加文本,leaflet,Leaflet,我使用以下函数在传单地图上的单击点周围创建一系列圆圈。我希望通过将距离(r或半径)放置在圆线本身上来标记每个圆。但我找不到任何选项或功能来实现这一点。有人能告诉我怎么做吗 function circleKoords(e) { var myJSON = JSON.stringify(e.latlng); //alert("myJSON "+myJSON); // myJSON {"lat":39.257778150283364,"lng":-94.4192504882812
function circleKoords(e) {
var myJSON = JSON.stringify(e.latlng);
//alert("myJSON "+myJSON);
// myJSON {"lat":39.257778150283364,"lng":-94.41925048828126}
// myJSON {"lat":39.39587712612034,"lng":-93.54583740234376}
var LatLng = e.latlng;
var lat = e.latlng["lat"]; //alert(lat); // 39.172658670429946
var lng = e.latlng["lng"]; //lert(lng);
var i;
var r = 1609.34; // in meters = 1 mile, 4,828.03 meters in 3 miles
//https://jsfiddle.net/3u09g2mf/2/
//https://gis.stackexchange.com/questions/240169/leaflet-onclick-add-remove-circles
var group1 = L.featureGroup(); // Allows us to group the circles for easy removal
var circleOptions = {
color: 'blue',
fillColor: '#69e',
fillOpacity: 0.1
}
var milesbetween = 0; var numberofrings = 0;
var milesbetween = prompt("How many miles between circles?");
if (milesbetween <= 0) {milesbetween = 1;}
var numberofrings = prompt("How many circles do you want to see?");
if (numberofrings <= 0) {numberofrings = 5;}
// The actual circles are created here at the var Cname =
for (i=0 ; i < numberofrings; i++ ) {
var Cname = 'circle'+i; //alert(Cname); // circle0, circle1, circle2, etc.
r = (r * i) + r; r=r*milesbetween;
//alert(lat+", "+lng); // lat and lng of clicked point.
//alert('r= '+r); // r= 1609.34, r= 3218.68, r= 4828.0199999999995, etc. up to the number of rings
var Cname = L.circle([lat, lng], r, circleOptions);
Cname.addTo(group1);
// r = 1609.34; // reset r so r calculation above works for each 1 mile step
map.addLayer(group1);
r = 1609.34;
}
alert("All "+numberofrings+" rings are "+milesbetween+" mile apart.");
// This part allows us to delete the circles by simply clicking anywhere in the circles.
group1.on('click', function() {
if(map.hasLayer(group1)) {map.removeLayer(group1);}
//else {map.addLayer(group1);}
});
}
函数循环库(e){
var myJSON=JSON.stringify(e.latlng);
//警报(“myJSON”+myJSON);
//myJSON{“lat”:39.257778150283364,“液化天然气”:-94.419250488282126}
//myJSON{“lat”:39.39587712612034,“lng”:-93.5458374023476}
var LatLng=e.LatLng;
var lat=e.latlng[“lat”];//警报(lat);//39.172658670429946
var lng=e.latlng[“lng”];//lert(lng);
var i;
var r=1609.34;//以米为单位=1英里,以4828.03米为单位=3英里
//https://jsfiddle.net/3u09g2mf/2/
//https://gis.stackexchange.com/questions/240169/leaflet-onclick-add-remove-circles
var group1=L.featureGroup();//允许我们对圆进行分组,以便于删除
变量循环次数={
颜色:“蓝色”,
填充颜色:'#69e',
填充不透明度:0.1
}
var milesbetween=0;var numberofrings=0;
var milesbetween=提示(“圆圈之间有多少英里?”);
如果(milesbetween你能试着把它放在“var Cname=L.circle([lat,lng],r,circleOptions);”之后吗?这会尝试在相同的坐标中添加一个标签,文本“radius”后跟计算出的半径值
var label = L.marker([lat, lng], {
icon: L.divIcon({
className: 'label',
html: `radius ${r}`,
iconSize: [0, 0]
})
});
label.addTo(group1);
添加L.GeometryUtil库:
<script src="https://cdn.jsdelivr.net/npm/leaflet-geometryutil@0.9.1/src/leaflet.geometryutil.min.js"></script>
// The actual circles are created here at the var Cname =
for (i=0 ; i < numberofrings; i++ ) {
var Cname = 'circle'+i; //alert(Cname); // circle0, circle1, circle2, etc.
r = (r * i) + r; r=r*milesbetween;
//alert(lat+", "+lng); // lat and lng of clicked point.
//alert('r= '+r); // r= 1609.34, r= 3218.68, r= 4828.0199999999995, etc. up to the number of rings
var Cname = L.circle([lat, lng], r, circleOptions);
Cname.addTo(group1);
mymap.addLayer(group1);
//180° from top
var p_c = L.GeometryUtil.destination(L.latLng([lat, lng]),180,r);
var icon = L.divIcon({ className: 'dist-marker', html: r.toFixed(0)+';iles', iconSize: [null, 16] });
var marker = L.marker(p_c, { title: r.toFixed(0)+'Miles', icon: icon});
marker.addTo(mymap);
// r = 1609.34; // reset r so r calculation above works for each 1 mile step
r = 1609.34;
}
.dist-marker {
margin-left: -8px !important;
font-size: 9px;
border: 1px solid #777;
border-radius: 10px;
text-align: center;
color: #000;
background: #fff;
padding: 0 3px;
}