Как преобразовать полилинию с весом в многоугольник в Leaflet?

Мне нужно разрешить пользователю рисовать маршрут (с помощью полилинии) с заданным радиусом дороги (визуально это было сделано с параметром «вес»).

Визуально это выглядит так:

введите описание изображения здесь

Поэтому мне интересно, как можно построить многоугольник вокруг этой полилинии с некоторым смещением? Как это:

введите описание изображения здесь


person Ruslan Nigmatulin    schedule 21.03.2016    source источник


Ответы (2)


Наконец, я сделал это с помощью библиотеки 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();
person Ruslan Nigmatulin    schedule 24.03.2016
comment
Я попробовал библиотеку JSTS в своем веб-приложении, и она отлично работает, мне нужно сделать то же самое на Android, но я не смог найти аналогичную библиотеку для Android или Java. - person AymanKun; 17.06.2016

Как вы сказали, вы можете использовать метод getLatLngs L.Polyline для доступа к координатам и использовать их для инициализации 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, это не будет проблемой, так как у него те же параметры.

person iH8    schedule 21.03.2016
comment
Возможно, я не совсем понял вопрос, мне не нужно применять стиль полилинии к многоугольнику, мне нужно построить его вокруг полилинии. Прикрепил новую картинку для лучшего понимания. - person Ruslan Nigmatulin; 22.03.2016