Leaflet

一个开源的 JavaScript 库
用于移动友好的交互式地图

← 返回博客文章列表

Leaflet.draw 0.2 发布

这是一篇来自 Jacob Toye 的客座文章,他是一位活跃的 Leaflet 贡献者,也是目前最复杂的矢量绘制和编辑插件的作者,本文将介绍该插件。

Leaflet.draw 诞生于为用户提供在地图上绘制多边形的能力的需要。Leaflet 已经提供了一种非常好的方法来编辑现有的折线和多边形。下一步的逻辑是扩展此功能,以允许创建这些图层,最终创建其他矢量图层。

发布后,Leaflet 社区立即给出了非常积极的回应。很明显,下一步是将此工具发展到用户能够编辑和删除形状以及创建形状的状态。这就是 Leaflet.draw 0.2 的最终目标。

经过几个月的断断续续的开发,其中大部分时间由我的雇主 Smartrak 慷慨地赞助,我们自豪地推出 Leaflet.draw 0.2 – 您在 Leaflet 地图上绘制、编辑和删除矢量和标记的一站式插件。 :)

来自 Vladimir 的提示:Leaflet 核心中的折线/多边形编辑功能已移至该插件,因为它更适合在这里。该插件反过来已移至 GitHub 上的 Leaflet 组织,现在由 Leaflet 开发团队正式支持。请注意,0.2 版目前依赖于 Leaflet master(正在开发的版本)才能正常工作。

您可以从 github 库 下载最新版本。如果您遇到任何错误,请在 问题页面 上报告。

特性

Leaflet.draw 的设计不仅方便最终用户使用,而且还方便开发人员集成。

如何使用

Leaflet.draw 非常容易添加到您的 Leaflet 应用程序中。以下示例将向地图添加绘制和编辑工具栏。

// create a map in the "map" div, set the view to a given place and zoom
var map = L.map('map').setView([175.30867, -37.77914], 13);

// add an OpenStreetMap tile layer
L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
	attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);

// Initialize the FeatureGroup to store editable layers
var drawnItems = new L.FeatureGroup();
map.addLayer(drawnItems);

// Initialize the draw control and pass it the FeatureGroup of editable layers
var drawControl = new L.Control.Draw({
	edit: {
		featureGroup: drawnItems
	}
});
map.addControl(drawControl);

处理新创建的图层

在成功将 Leaflet.draw 插件添加到地图后,您将需要对用户可以触发的不同操作做出响应。

map.on('draw:created', function (e) {
	var type = e.layerType,
		layer = e.layer;

	if (type === 'marker') {
		// Do marker specific actions
	}

	// Do whatever else you need to. (save to db, add to map etc)
	drawnItems.addLayer(layer);
});

map.on('draw:edited', function () {
	// Update db to save latest changes.
});

map.on('draw:deleted', function () {
	// Update db to save latest changes.
});

有关如何配置插件的更多详细信息,请参阅 Leaflet.draw 自述文件

感谢

首先我要感谢我的雇主 Smartrak。如果没有他们对开源软件的态度,我将没有时间完成此插件。

Leaflet 开发者社区通过灵感、拉取请求和问题报告为该插件提供了极大的支持。特别感谢:@mourner@danzel@brunob@tnightingale@Starefossen@shramov

结束语

我很高兴实施这个插件。希望您喜欢使用它。如果您有任何问题,或者只是想打个招呼,请给我发送邮件至 [email protected]

干杯,Jacob Toye