Google Maps API Polygon с "Отверстием" в центре - PullRequest
14 голосов
/ 21 сентября 2011

Вставка многоугольника внутри другого многоугольника должна создать «дыру» в центре (см. Пример «Пентагон» на картах Google).Тем не менее, моя программа не может сделать дыру и вместо этого делает два слоя многоугольных линий внутри.

http://cl.ly/1c243E1V1G2M1D3H3c0O <- изображение моей карты </p>

Кто-то сказал, что изменение координатыПорядок исправил их проблему, поэтому я выбрал именно те координаты бермудского треугольника, которые были заданы Google в их примере, однако с той же проблемой я столкнулся и раньше.Соответствующий код ниже:

    var everythingElse = [
       new google.maps.LatLng(25.774252, -82.190262),
       new google.maps.LatLng(17.466465, -65.118292),
       new google.maps.LatLng(34.321384, -63.75737),
       new google.maps.LatLng(25.774252, -82.190262)
     ];

    var circleOverlay = [
       new google.maps.LatLng(25.774252, -80.190262),
       new google.maps.LatLng(18.466465, -66.118292),
       new google.maps.LatLng(32.321384, -64.75737),
       new google.maps.LatLng(25.774252, -80.190262)
     ];

    PropertySearch.tintPolygon = new google.maps.Polygon({
         paths: [ everythingElse, circleOverlay ],
        strokeColor: "#000000",
        strokeOpacity: 0.8,
        strokeWeight: 2,
        fillColor: "#000000",
        fillOpacity: 0.5
    });

    PropertySearch.tintPolygon.setMap(PropertySearch.map);

1 Ответ

26 голосов
/ 21 сентября 2011

Это действительно вопрос направления индексов в ваших полигонах, в то время как один - по часовой стрелке, другой - против часовой стрелки. Измените ваш второй массив на:

var circleOverlay = [
   new google.maps.LatLng(25.774252, -80.190262),
   new google.maps.LatLng(32.321384, -64.75737),  //second and third coordinates
   new google.maps.LatLng(18.466465, -66.118292), //are swapped compared to your original
   new google.maps.LatLng(25.774252, -80.190262)
 ];

, и в вашем треугольнике появится хорошая дыра

...