Search code examples
javascriptgoogle-mapsgmaps.js

Marker coming outside the geofence not showing any alert in google maps


i want to make fencing when ever a marker goes out from polygon geofence it should give alert , but its not showing any alert message.im using third party api for implementing geofencing - https://hpneo.github.io/gmaps/examples/geofences.html. in this link its working but its not working in my code. while dragging marker to outside the fence its giving below error.

showing error - fence.containsLatLng is not a function

code

<head>
  <meta charset="utf-8">
  <title>GMaps.js &mdash; Geofences</title>
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
  <!--<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script>-->
  <script type="text/javascript" src="../gmaps.js"></script>
    <script type="text/javascript"
            src="https://maps.googleapis.com/maps/api/js?sensor=true&key=AIzaSyDci4vYApOxVdKqwlpXSv9h77AcWbNuzmQ&libraries=drawing&callback=initMap">
    </script>
  <link rel="stylesheet" href="http://twitter.github.com/bootstrap/1.3.0/bootstrap.min.css" />
  <link rel="stylesheet" type="text/css" href="examples.css" />
  <script type="text/javascript">
    var map;
    $(document).ready(function(){
      map = new GMaps({
        el: '#map',
        lat: -12.043333,
        lng: -77.028333
      });
      var path = [
            [-12.040397656836609,-77.03373871559225],
            [-12.040248585302038,-77.03993927003302],
            [-12.050047116528843,-77.02448169303511],
            [-12.044804866577001,-77.02154422636042]
          ];

      polygon = map.drawPolygon({
        paths: path,
        strokeColor: '#BBD8E9',
        strokeOpacity: 1,
        strokeWeight: 3,
        fillColor: '#BBD8E9',
        fillOpacity: 0.6
      });

      var circle = map.drawCircle({
        lat: -12.040504866577001,
        lng: -77.02024422636042,
        radius: 350,
        strokeColor: '#432070',
        strokeOpacity: 1,
        strokeWeight: 3,
        fillColor: '#432070',
        fillOpacity: 0.6
      });

      map.addMarker({
        lat: -12.041111,
        lng: -77.028333,
        draggable: true,
        fences: [polygon],
        outside: function(m, f){
          alert('This marker has been moved outside of its fence');
        }
      });
      map.addMarker({
          lat: -12.044444,
          lng: -77.028333,
          draggable: true,
          fences: [polygon],
          outside: function (m, f) {
              alert('This marker has been moved outside of its fence');
          }
      });

      map.addMarker({
        lat: -12.040504866577001,
        lng: -77.02024422636042,
        draggable: true,
        fences: [circle],
        outside: function(m, f){
          alert('This marker has been moved outside of its fence');
        }
      });
    });
  </script>
</head>
<body>
  <h1>GMaps.js &mdash; Geofences</h1>
  <div class="row">
    <div class="span11">
      <div id="map"></div>
    </div>
    <div class="span6">
      <p>You can attach a geofence (which can be a polygon or a bounds) to a marker with:</p>
      <pre>polygon = map.drawPolygon({
  paths: path,
  strokeColor: '#BBD8E9',
  strokeOpacity: 1,
  strokeWeight: 3,
  fillColor: '#BBD8E9',
  fillOpacity: 0.6
});
map.addMarker({
  lat: -12.043333,
  lng: -77.028333,
  draggable: true,
  fences: [polygon],
  outside: function(marker, fence){
    alert('This marker has been moved outside of its fence');
  }
});</pre>
      <p>You must define an <strong>outside</strong> callback, which will use this <code>marker</code> and its <code>fence</code>.</p>
      <p><span class="label notice">Note: </span>You also can use <code>checkMarkerGeofence</code> or <code>checkGeofence</code> methods.</p>
    </div>
  </div>
</body>
</html>

Solution

  • Include your scripts in order:

    <script type="text/javascript" src="../gmaps.js"></script>
    <script type="text/javascript"
            src="https://maps.googleapis.com/maps/api/js?sensor=true&key=AIzaSyDci4vYApOxVdKqwlpXSv9h77AcWbNuzmQ&libraries=drawing&callback=initMap">
    </script>
    

    should be:

    <script type="text/javascript"
            src="https://maps.googleapis.com/maps/api/js?sensor=true&key=AIzaSyDci4vYApOxVdKqwlpXSv9h77AcWbNuzmQ&libraries=drawing&callback=initMap">
    </script>
    <script type="text/javascript" src="../gmaps.js"></script>
    

    Since gmaps is based on googlemaps, the latter should be referenced first, followed by gmaps.js.