使用传单创建圆(使用正半径)

Creating a circle with Leaflet (using a positive radius)

本文关键字:单创建 创建      更新时间:2023-09-26

根据文档,在传单中画一个圆圈似乎很直接,你只需要提供坐标、半径和可选的选项对象:

L.circle( <LatLng> latlng, <Number> radius, <Path options> options? ) 

我试着在我正在绘制的地图上做这件事,但无论我指定的半径有多大,都只能产生一个点而不是一个圆。我让这件事让我抓狂了一段时间,然后离开代码去做其他项目。我最近又回来了,一时兴起,我试着用一个负值来表示半径:

"use strict";
var theMap = L.map("map", {
    minZoom: 0,
    maxZoom: 7,
    crs: L.CRS.Simple
  }).setView([0, 0], 0),
  eventsLayer = new L.LayerGroup(),
  unproject = function (coord) {
    return theMap.unproject(coord, theMap.getMaxZoom());
  },
  coord = unproject([12057.79, 13661.21]),
  southWest = unproject([0, 32768]),
  northEast = unproject([32768, 0]),
  radius = -8653.18, // Why isn't it working with a positive radius?!?!?
  circ = L.circle(coord, radius, {color: '#f00', fillColor: '#00f'});
theMap.setMaxBounds(new L.LatLngBounds(southWest, northEast));
L.tileLayer("https://tiles.guildwars2.com/1/1/{z}/{x}/{y}.jpg", {
    minZoom: 2,
    maxZoom: 7,
    continuousWorld: true
}).addTo(theMap);
eventsLayer.addTo(theMap);
theMap.setView(coord, 7, {animate: true});
circ.addTo(eventsLayer);

出于某种原因,它会创建一个半径为负的圆。

这似乎是一个错误,因为文档中使用了正值表示半径。是我在代码中做错了什么导致了这种错误行为,还是可能是传单中的错误?

看到这个答案后,我认为这是传单中的一个错误。我下载了当前版本的开发主机并添加到fiddle中。

radius = 1,

新版本确实接受正值,并做了一个圆圈。然而,它在另一方面有缺陷。0.7指定圆的半径应设置为米。在当前的开发版本中,即使值为1也会覆盖数百米。