leaflet 如何绘制圆

leaflet 如何绘制圆,第1张

方法1(根据指定的半径和中心点去绘制圆)

var polygon1 = new L.Circle([34, 108], 120000, {

color: 'red', //颜色

fillColor: '#f03',

fillOpacity: 0.4, //透明度

})

方法2(根据半径和中心点去构造polygon类型的圆)

var radius = 2

//点集

var parts = []

//计算圆的边缘所有点

for (var i = 0i <360i++) {

var radians = (i + 1) * Math.PI / 180

var circlePoint = [Math.cos(radians) * radius + 34, Math.sin(radians) * radius + 108]

parts[i] = circlePoint

}

var polygon1 = L.polygon(parts, {

color: 'green'

})

方法3,(地图上绘制一点拖动鼠标动态绘制圆形)

function DrawCircle() {

var r = 0

var i = null

var tempCircle = new L.circle()

map.dragging.disable()//将mousemove事件移动地图禁用

map.on('mousedown', onmouseDown)

map.on('mouseup', onmouseUp)

map.on('mousemove', onMove)

function onmouseDown(e) {

i = e.latlng

//确定圆心

}

function onMove(e) {

if (i) {

r = L.latLng(e.latlng).distanceTo(i)

tempCircle.setLatLng(i)

tempCircle.setRadius(r)

tempCircle.setStyle({

color: '#ff0000',

fillColor: '#ff0000',

fillOpacity: 1

})

map.addLayer(tempCircle)

}

}

function onmouseUp(e) {

r = L.latLng(e.latlng).distanceTo(i) //计算半径

L.circle(i, {

radius: r,

color: '#ff0000',

fillColor: '#ff0000',

fillOpacity: 1

}).addTo(map)

alert('圆心坐标为:' + i + '半径为:' + r)

i = null

r = 0

map.dragging.enable()

}

}

方法4,(使用draw插件绘制圆)

var editableLayers = new L.FeatureGroup()

map.addLayer(editableLayers)

var drawControl = new L.Control.Draw({

position: 'topleft',

draw: {

polyline: false,

polygon: false,

circle: {},

rectangle: false,

marker: false,

remove: true

},

edit: {

featureGroup: editableLayers,

remove: true

}

})

map.addControl(drawControl)

handleMapEvent(drawControl._container, map)

map.on(L.Draw.Event.CREATED, function (e) {

var type = e.layerType,

layer = e.layer

if (type === 'marker') {

layer.bindPopup('A popup!')

}

editableLayers.addLayer(layer)

})

leaflet可以实现交互式地图,这里直接一中国为例,展示不同省份的population以及mapview上的实现。

leaflet基础篇可以去 官网 ;

该文章内容的地图图层文件,均是sf形式。leaflet可以直接加载sf,省去转换Polygons的麻烦。

这里直接加载到leaflet图层上,可以看到China的轮廓及各个省份的位置

在上述的图层中,再添加安徽内部的市及区的地图。

有时候,需要根据不同省份的人口或者经济,进行不同颜色渲染,突出地区间的比较。现在以各个省份内部所包含的市及县数量,来进行一个等级划分。 其中重点是将连续性变量转成分类变量,还要匹配上对应颜

# set categories and color bins bins = c(0, 5, 10, 15, 20, 30, Inf) pal = colorBin("Reds", domain = China$childrenNum, bins = bins)

其实谈到交互地图,mapview包已经做到了精简,详细教程见 官网 ,

这里只需要一行code即可;

但是缺点是,不容易个性化设置,譬如legend名称,legend设置等。

主要是简单,快速。

但是官方文档,里面有更详细的 *** 作步骤。

后续还会更新,包括怎样将leaflet与mapview结合到shiny中。

及legend细化。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11326966.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存