基于Leaflet.draw的gis图形标绘实战

简介: 本文将通过编码的方式讲解如何引入Leaflet.draw组件,并绘制点、线、面、圆对象,同时可以计算线的距离,面积,圆半径和点的经纬度等信息。通过本文可了解基本操作,可以基于leaflet扩展相关的绘制组件,为空间检索等

     本文将通过编码的方式讲解如何引入Leaflet.draw组件,并绘制点、线、面、圆对象,同时可以计算线的距离,面积,圆半径和点的经纬度等信息。通过本文可了解基本操作,可以基于leaflet扩展相关的绘制组件,为空间检索等功能奠定基础。

       本文需要使用的组件:

       1、Leaflet.js

       2、Leaflet.draw.js 地址:https://github.com/Leaflet/Leaflet.draw

第一步、到github上下载相应的组件包

image.png

第二步、在页面上引入绘制组件

<scriptsrc="libs/leaflet-src.js"></script><linkrel="stylesheet"href="libs/leaflet.css"/><scriptsrc="../../src/Leaflet.draw.js"></script><scriptsrc="../../src/Leaflet.draw.cn.js"></script><scriptsrc="../../src/Leaflet.Draw.Event.js"></script><linkrel="stylesheet"href="../../src/leaflet.draw.css"/><scriptsrc="../../src/Toolbar.js"></script><scriptsrc="../../src/Tooltip.js"></script><scriptsrc="../../src/ext/GeometryUtil.js"></script><scriptsrc="../../src/ext/LatLngUtil.js"></script><scriptsrc="../../src/ext/LineUtil.Intersect.js"></script><scriptsrc="../../src/ext/Polygon.Intersect.js"></script><scriptsrc="../../src/ext/Polyline.Intersect.js"></script><scriptsrc="../../src/ext/TouchEvents.js"></script><scriptsrc="../../src/draw/DrawToolbar.js"></script><scriptsrc="../../src/draw/handler/Draw.Feature.js"></script><scriptsrc="../../src/draw/handler/Draw.SimpleShape.js"></script><scriptsrc="../../src/draw/handler/Draw.Polyline.js"></script><scriptsrc="../../src/draw/handler/Draw.Marker.js"></script><scriptsrc="../../src/draw/handler/Draw.Circle.js"></script><scriptsrc="../../src/draw/handler/Draw.CircleMarker.js"></script><scriptsrc="../../src/draw/handler/Draw.Polygon.js"></script><scriptsrc="../../src/draw/handler/Draw.Rectangle.js"></script><scriptsrc="../../src/edit/EditToolbar.js"></script><scriptsrc="../../src/edit/handler/EditToolbar.Edit.js"></script><scriptsrc="../../src/edit/handler/EditToolbar.Delete.js"></script><scriptsrc="../../src/Control.Draw.js"></script><scriptsrc="../../src/edit/handler/Edit.Poly.js"></script><scriptsrc="../../src/edit/handler/Edit.SimpleShape.js"></script><scriptsrc="../../src/edit/handler/Edit.Rectangle.js"></script><scriptsrc="../../src/edit/handler/Edit.Marker.js"></script><scriptsrc="../../src/edit/handler/Edit.CircleMarker.js"></script><scriptsrc="../../src/edit/handler/Edit.Circle.js"></script>

第三步、定义map及layerGroup对象

varmap=L.map('map').setView([28.234863, 112.944946], 9);
//底图varosm=L.tileLayer('http://localhost:8086/data/basemap_nowater/1_10_tms/{z}/{x}/{y}.jpg', {
maxZoom: 13,
minZoom:1,
attribution: '本地影像',
id: 'mapbox/streets-v11',
tileSize: 256,
zoomOffset: -1  });
vardrawnItems=L.featureGroup().addTo(map);
osm.addTo(map);
L.control.layers({
'本地影像': osm.addTo(map)
    }, { '绘制': drawnItems }, { position: 'topleft', collapsed: false }).addTo(map);

请注意以上代码中drawItems对象很重要,绘制图层需要跟这个对象进行绑定完成对象的绘制,同时定义了一个controls对象对图层进行显示控制。

第四步、map和绘制图层绑定

map.addControl(newL.Control.Draw({
edit: {
featureGroup: drawnItems,
poly : {
allowIntersection : false                }
            },
draw: {
polygon : {
allowIntersection: false,
showArea:true                }
            }
        }));

第五步、事件绑定

定义绘制对象创建的时候的回调事件,可以获取绘制的图形做一些输出

// Object created - bind popup to layer, add to feature groupmap.on(L.Draw.Event.CREATED, function(event) {
varlayer=event.layer;
varcontent=getPopupContent(layer);
if (content!==null) {
layer.bindPopup(content);
    }
drawnItems.addLayer(layer);
});

通过以上的步骤,可以完成绘制对象的基本功能,最终效果图如下:

image.png

细心的朋友会发现,绘制的提示语句是英文的(国际化操作),如何变成中文的呢?经过查找,在Leaflet.draw.js文件中定义了相关操作描述,我们可以新增一个中文js文件来覆盖默认的提示文件,如Leaflet.draw.cn.js,内容如下:

toolbar: {
// #TODO: this should be reorganized where actions are nested in actions// ex: actions.undo  or actions.cancelactions: {
title: '取消绘制',
text: '取消'      },
finish: {
title: '完成绘制',
text: '完成'      },
undo: {
title: '删除最后一个点',
text: '删除最后一个点'      },
buttons: {
polyline: '绘制一条线',
polygon: '绘制一个多边形',
rectangle: '绘制一个矩形',
circle: 'Draw a circle',
marker: 'Draw a marker',
circlemarker: 'Draw a circlemarker'      }
    }

通过这种方式就可以完成汉化处理,其它语言也是同样的办法处理即可。

目录
相关文章
|
定位技术 API
基于Leaflet.draw的自定义绘制实战
本文介绍了如何基于leaflet.draw进行自定义绘制,同时获取对象的bbox和geojson信息。
528 0
基于Leaflet.draw的自定义绘制实战
|
11天前
|
缓存 Linux API
如何使用Matplotlib绘制出美观实用的图形?
如何使用Matplotlib绘制出美观实用的图形?
|
11天前
使用Plotly库创建图形的使用案例
【4月更文挑战第29天】导入plotly.express库,以iris数据集为例,展示如何创建图形。使用px.density_contour绘制密度轮廓图或px.scatter创建极坐标图,其中&quot;x&quot;,&quot;y&quot;定义坐标,&quot;theta&quot;定义极坐标的半径。最后通过fig.show显示图形。 ```
9 2
|
4月前
|
定位技术 Python
pyecharts从入门到精通-地图专题Map-带时间轴与网格的复杂绘图
pyecharts从入门到精通-地图专题Map-带时间轴与网格的复杂绘图
|
4月前
|
XML Web App开发 前端开发
如何使用 UI5 前端框架进行图表(Chart)的绘制
如何使用 UI5 前端框架进行图表(Chart)的绘制
29 0
|
5月前
|
数据可视化 数据挖掘 API
C++ Qt开发:Charts绘制各类图表详解
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍`TreeWidget`与`QCharts`的常用方法及灵活运用。在之前的文章中笔者介绍了如何使用`QCharts`模块来绘制简单的折线图并对通用API接口进行了概括,本章我们通过在`TreeWidget`组件中提取数据,并依次实现柱状图、饼状图、堆叠图、百分比图、散点图等。
79 5
C++ Qt开发:Charts绘制各类图表详解
|
5月前
|
数据可视化 数据挖掘 Python
seaborn从入门到精通03-绘图功能实现05-构建结构化的网格绘图
seaborn从入门到精通03-绘图功能实现05-构建结构化的网格绘图
seaborn从入门到精通03-绘图功能实现05-构建结构化的网格绘图
|
8月前
|
C# 图形学
C# GDI+绘图(一)GDI+介绍及基础
最近,项目中,有一块比较发杂的网格,并在网格上绘有各种颜色和文本,在Dev库中并未找到能实现这种功能的现有或可以二次开发的控件,因此,涉及到GDI+绘图这块陌生的领域。下面即时我在本次学习过程中的笔记,本次内容一共分为4篇,分别都有各自的代码或工程文件提供,有需要的朋友可以下载。
|
9月前
|
Java BI API
探索Batik库:优雅处理SVG图形的利器
在现代的应用开发中,矢量图形的使用越来越广泛,特别是在Web开发和图像处理领域。Batik库作为一款优雅的SVG图形处理工具,可以帮助我们生成、操作和展示矢量图形。本文将深入探讨Batik库的基本概念、特点,以及如何在实际应用中使用它进行SVG图形处理。
790 0
|
10月前
|
定位技术
GIS开发:mapbox gl几种底图的加载
GIS开发:mapbox gl几种底图的加载
172 0