如何将功能与谷歌地图 API 中的自定义控件相关联



在下面的代码中,我使用 Google Maps API V3 在地图上添加了一个自定义控件。

<html>
  <head>
    <title>Simple Map</title>
    <meta name="viewport" content="initial-scale=1.0">
    <meta charset="utf-8">
    <style>
      /* Always set the map height explicitly to define the size of the div
       * element that contains the map. */
      #map {
        height: 100%;
      }
      /* Optional: Makes the sample page fill the window. */
      html, body {
        height: 100%;
        margin: 0;
        padding: 0;
      }
    </style>
  </head>
  <body>
    <div id="map"></div>
    <script>
      var map;
      function initMap() {
      var myOptions = {
          zoom: 8,
          center: {lat: -34.397, lng: 150.644},
          mapTypeId: google.maps.MapTypeId.ROADMAP
      };
      var map = new google.maps.Map(document.getElementById("map"), myOptions);
      //### Add a button on Google Maps ...
      var controlMarkerUI = document.createElement('DIV');
      controlMarkerUI.style.cursor = 'pointer';
      controlMarkerUI.style.backgroundColor = 'blue';
      controlMarkerUI.style.height = '28px';
      controlMarkerUI.style.width = '25px';
      controlMarkerUI.style.top = '11px';
      controlMarkerUI.style.left = '120px';
      controlMarkerUI.title = 'Click to get the coordinates';
   map.controls[google.maps.ControlPosition.LEFT_TOP].push(controlMarkerUI);
}
    </script>
    <script src="https://maps.googleapis.com/maps/api/js?key=<PUT_YOUR_KEY_HERE>&callback=initMap"
    async defer></script>
  </body>
</html>

现在我想在自定义控件上关联一个函数,只需在用户单击地图时返回单击坐标即可。

我可以这样做(无需将函数关联到自定义控件... (,以这种方式

  google.maps.event.addListener(map, 'click', function (e) {
                  alert("Latitude: " + e.latLng.lat() + "rnLongitude: " + e.latLng.lng());
              });

但我想激活/停用此功能,单击我的自定义控件。

建议/示例?

<html>
<head>
  <title>Simple Map</title>
  <meta name="viewport" content="initial-scale=1.0">
  <meta charset="utf-8">
  <style>
    /* Always set the map height explicitly to define the size of the div
     * element that contains the map. */
    #map {
      height: 70%;
    }
    /* Optional: Makes the sample page fill the window. */
    html, body {
      height: 100%;
      margin: 0;
      padding: 0;
    }
  </style>
</head>
<body>
<div id="map"></div>
<button id="start">Start</button>
<button id="clearClick">Clear</button>
<script>
  var map;
  var listener1;

  function initMap() {
    var myOptions = {
      zoom: 8,
      center: {lat: -34.397, lng: 150.644},
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById("map"), myOptions);
    //### Add a button on Google Maps ...
    var controlMarkerUI = document.createElement('DIV');
    controlMarkerUI.style.cursor = 'pointer';
    controlMarkerUI.style.backgroundColor = 'blue';
    controlMarkerUI.style.height = '28px';
    controlMarkerUI.style.width = '25px';
    controlMarkerUI.style.top = '11px';
    controlMarkerUI.style.left = '120px';
    controlMarkerUI.title = 'Click to get the coordinates';
    listener1= google.maps.event.addListener(map, 'click', function
      (e) {
      alert("Latitude: " + e.latLng.lat() + "rnLongitude: " + e.latLng.lng());
    });
    document.getElementById("clearClick").onclick = function(){
      google.maps.event.removeListener(listener1);
    }
    document.getElementById("start").onclick = function(){
      listener1= google.maps.event.addListener(map, 'click', function
        (e) {
        alert("Latitude: " + e.latLng.lat() + "rnLongitude: " + e.latLng.lng());
      });
    }
    map.controls[google.maps.ControlPosition.LEFT_TOP].push(controlMarkerUI);
  }
</script>
<script>
</script>
<script src="https://maps.googleapis.com/maps/api/js?key=&callback=initMap"
        async defer></script>
</body>
</html>

有关以下链接的进一步参考

https://developers.google.com/maps/documentation/javascript/events

合并@Murali答案和这个答案 https://gis.stackexchange.com/questions/244132/how-to-associate-function-to-custom-controls-in-google-maps-api/244141#244141,我以这种方式解决了....

<html>
  <head>
    <title>Simple Map</title>
    <meta name="viewport" content="initial-scale=1.0">
    <meta charset="utf-8">
    <style>
      /* Always set the map height explicitly to define the size of the div
       * element that contains the map. */
      #map {
        height: 100%;
      }
      /* Optional: Makes the sample page fill the window. */
      html, body {
        height: 100%;
        margin: 0;
        padding: 0;
      }
    </style>
  </head>
  <body>
    <div id="map"></div>
    <script>
      var map;
      var listenerHandle;
      //Enable-Disable the functionality
      function show_XY(e){
           listenerHandle = google.maps.event.addListener(map, 'click', alert_XY);
       }
      function alert_XY(e){
         alert("Latitude: " + e.latLng.lat() + "rnLongitude: " + e.latLng.lng());
       }
       function removeListener(e){
          google.maps.event.removeListener(listenerHandle);
        }
      function initMap() {
        var myOptions = {
            zoom: 8,
            center: {lat: -34.397, lng: 150.644},
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById("map"), myOptions);
        //### Add a button on Google Maps ...
        var controlEditUI = document.createElement('DIV');
        controlEditUI.id = "controlEditUI";
        controlEditUI.style.cursor = 'pointer';
        controlMarkerUI.style.backgroundColor = 'blue';
        controlEditUI.style.height = '28px';
        controlEditUI.style.width = '25px';
        controlEditUI.style.top = '11px';
        controlEditUI.style.left = '120px';
        controlEditUI.title = 'Click to get the coordinates';
        map.controls[google.maps.ControlPosition.LEFT_TOP].push(controlEditUI);
        controlEditUI.addEventListener('click', show_XY);
        //### Add a button on Google Maps ...
        var controlTrashUI = document.createElement('DIV');
        controlTrashUI.id = 'controlTrashUI';
        controlTrashUI.style.cursor = 'pointer';
        controlMarkerUI.style.backgroundColor = 'black';
        controlTrashUI.style.height = '28px';
        controlTrashUI.style.width = '25px';
        controlTrashUI.style.top = '11px';
        controlTrashUI.style.left = '150px';
        controlTrashUI.title = 'Click to set the map to Home';
        map.controls[google.maps.ControlPosition.LEFT_TOP].push(controlTrashUI);
        controlTrashUI.addEventListener('click', removeListener);
      };
    </script>
    <script src="https://maps.googleapis.com/maps/api/js?key=<PUT_YOUR_KEY_HERE>&callback=initMap"
    async defer></script>
  </body>
</html>

最新更新