Как удалить вершину из многоугольника с несколькими путями? - PullRequest
0 голосов
/ 30 мая 2019

В googlemaps api при редактировании многоугольника с несколькими путями removeAT удаляет неправильную вершину

Для простых полигонов, removeAT удалит правильную вершину, но для многоугольников с несколькими путями, похоже, удалит только номер вершины из первого пути.

Учитывая это определение многоугольника для нескольких путей:

var blockpolygon = newgoogle.maps.Polygon({
paths: [blockcoords0,blockcoords1,blockcoords2,blockcoords3,blockcoords4,blockcoords5]
});

где пути определены ранее, например:

var blockcoords4 = [{lat:51.799693211411,lng:-114.12380330669},{lat:51.799109509173,lng:-114.12273800578},{lat:51.799558197929,lng:-114.1223323167},{lat:51.799684004911,lng:-114.12232429316},{lat:51.799876802912,lng:-114.12248608283},{lat:51.800102904916,lng:-114.12290678386},{lat:51.800133809341,lng:-114.12306439938},{lat:51.800077007986,lng:-114.12331471639},{lat: 51.799693211411, lng: -114.12380330669}];

и полигон устанавливается как редактируемый

Когда происходит это событие:

blockpolygon.addListener("rightclick", function(event)
{
this.getPath().removeAt(event.vertex);
}

Удаляется вершина из первого пути в списке, а не вершина, которая была "нажата"

Есть ли способ удалить вершину из правильного пути?

Если бы я мог определить, какой путь и если бы removeAT указывал на правильный путь, это сделало бы мой день.

1 Ответ

0 голосов
/ 31 мая 2019

подсказки из геокодезипа было достаточно. Вот решение:

blockpolygon.addListener("rightclick", function(event)
    {
    for (i=0; i<this.getPaths().getLength(); i++)
        {
        for (j=0; j< this.getPaths().getAt(i).getLength(); j++)
            {
            var distance = google.maps.geometry.spherical.computeDistanceBetween(event.latLng, this.getPaths().getAt(i).getAt(j));
            if (distance==0) this.getPaths().getAt(i).removeAt(j);
            }
        }
}
...