Как определить событие клика на карте Google с помощью наложения? - PullRequest
8 голосов
/ 21 марта 2010

Моя проблема в том, что у меня есть наложение карты круга, но я хочу иметь возможность перемещать круг, щелкая карту, чтобы установить новый центр, реальная проблема заключается в том, что когда я нажимаю на наложение и вызываю мой метод 'setCenter(overlay, latlng) ', я получаю неопределенный latlang и допустимое наложение.

Вот пример, который может проиллюстрировать проблему, если вы щелкаете карту, то нарисован многоугольник, и если вы щелкаете внутри многоугольника, нет новогонарисован многоугольник, если щелкнуть где-нибудь еще на карте, нарисован многоугольник http://code.google.com/apis/maps/documentation/examples/polygon-simple.html

Я хочу иметь возможность щелкнуть многоугольник и нарисовать новый, делая их перекрывающимися

спасибо

1 Ответ

12 голосов
/ 23 марта 2010

Все, что вам нужно сделать, это установить параметр clickable: false в конструкторе GPolygon, как показано в следующем примере ( GPolygonOptions: Справочник по API ):

<!DOCTYPE html>
<html> 
<head> 
   <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
   <title>Google Maps Non Clickable Polygon Demo</title> 
   <script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=false" 
              type="text/javascript"></script>
</head> 
<body onunload="GUnload()">
   <div id="map" style="width: 450px; height: 300px"></div> 

   <script type="text/javascript"> 
      var map = new GMap2(document.getElementById("map"));
      map.setCenter(new GLatLng(37.4419, -122.1419), 13);

      GEvent.addListener(map, "click", function(overlay, latlng) {
         var lat = latlng.lat();
         var lon = latlng.lng();
         var latOffset = 0.01;
         var lonOffset = 0.01;
         var polygon = new GPolygon([
            new GLatLng(lat, lon - lonOffset),
            new GLatLng(lat + latOffset, lon),
            new GLatLng(lat, lon + lonOffset),
            new GLatLng(lat - latOffset, lon),
            new GLatLng(lat, lon - lonOffset)
         ], "#f33f00", 5, 1, "#ff0000", 0.2, { clickable: false });

         map.addOverlay(polygon);
      });
   </script> 
</body> 
</html>

Снимок экрана с доказательствами:

Google Maps Non Clickable Polygon Demo

Обратите внимание, что событие click(overlay: GOverlay, latlng: GLatLng, overlaylatlng: GLatLng) передает различные аргументы в зависимости от контекста клика и от того, произошел ли клик в оверлейном клике.Если щелчок не происходит при наложении, активируемом щелчком, аргумент overlay равен null, а аргумент latlng содержит географические координаты точки, по которой щелкнули.Если пользователь нажимает на оверлей, который можно кликнуть, аргумент overlay содержит объект оверлея, а аргумент overlaylatlng содержит координаты наложенного клика ( Источник: API Reference ).

...