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细化。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)