如何在 Leaflet 中将具有权重的多段线转换为多边形?
How to convert polyline with weight to polygon in Leaflet?
我需要允许用户绘制一条具有指定道路半径的路线(使用折线)(视觉上它是使用 "weight" 参数完成的)。
视觉上看起来像这样:
所以我想知道如何围绕这条具有一定偏移量的多段线构建一个多边形?像这样:
就像你说的,你可以使用L.Polyline
的getLatLngs
方法来访问坐标并用它们来初始化一个L.Polygon
。如果您需要访问在折线上设置的权重,您可以使用它的选项对象来实现:
var polyline = new L.Polyline([[25, -25], [25, 25], [-25, 25], [-25, -25]], {
weight: 10,
}).addTo(map);
var polygon = new L.Polygon(polyline.getLatLngs(), {
weight: polyline.options.weight
}).addTo(map);
如果您有更多需要复制的东西,您甚至可以使用整个选项对象:
var polygon = new L.Polygon(polyline.getLatLngs(), polyline.options).addTo(map);
因为 L.Polygon
是从 L.Polyline
扩展而来的,所以不会有问题,因为它具有相同的选项。
最后我用 JSTS 库 (https://www.npmjs.com/package/jsts) 实现了。
很简单:
//pathCoords should be an array of jsts.geom.Coordinate
var pathCoords = [];
var geometryFactory = new jsts.geom.GeometryFactory();
// on what distance new polygon should be built
var distance = (meters * 0.0001) / 111.12;
var shell = geometryFactory.createLineString(pathCoords);
// building a new polygon
var polygon = shell.buffer(distance);
// finally get your new polygon coordinates
var polygonCoords = polygon.getCoordinates();
我需要允许用户绘制一条具有指定道路半径的路线(使用折线)(视觉上它是使用 "weight" 参数完成的)。
视觉上看起来像这样:
所以我想知道如何围绕这条具有一定偏移量的多段线构建一个多边形?像这样:
就像你说的,你可以使用L.Polyline
的getLatLngs
方法来访问坐标并用它们来初始化一个L.Polygon
。如果您需要访问在折线上设置的权重,您可以使用它的选项对象来实现:
var polyline = new L.Polyline([[25, -25], [25, 25], [-25, 25], [-25, -25]], {
weight: 10,
}).addTo(map);
var polygon = new L.Polygon(polyline.getLatLngs(), {
weight: polyline.options.weight
}).addTo(map);
如果您有更多需要复制的东西,您甚至可以使用整个选项对象:
var polygon = new L.Polygon(polyline.getLatLngs(), polyline.options).addTo(map);
因为 L.Polygon
是从 L.Polyline
扩展而来的,所以不会有问题,因为它具有相同的选项。
最后我用 JSTS 库 (https://www.npmjs.com/package/jsts) 实现了。
很简单:
//pathCoords should be an array of jsts.geom.Coordinate
var pathCoords = [];
var geometryFactory = new jsts.geom.GeometryFactory();
// on what distance new polygon should be built
var distance = (meters * 0.0001) / 111.12;
var shell = geometryFactory.createLineString(pathCoords);
// building a new polygon
var polygon = shell.buffer(distance);
// finally get your new polygon coordinates
var polygonCoords = polygon.getCoordinates();