【问题标题】:alerts are not showing in geofencing when marker is outside of polygon geofence in google maps当标记位于谷歌地图中的多边形地理围栏之外时,地理围栏中不会显示警报
【发布时间】:2017-03-28 08:22:07
【问题描述】:

我有地理围栏的代码,在那个多边形形状那里,同时将一个标记拖到多边形之外它发出警报,但我需要它应该在页面加载时自动发出警报,而不是手动拖动到外面。

代码

<head>
    <meta charset="utf-8">
    <title>GMaps.js &mdash; Geofences</title>
    <script type="text/javascript"
            src="https://maps.googleapis.com/maps/api/js?sensor=true&key=AIzaSyDci4vYApOxVdKqwlpXSv9h77AcWbNuzmQ&libraries=drawing">
    </script> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
    <script src="../gmaps.js"></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" />
</head>
    <body onload="runMaps()">
        <script>

            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]
                ];
                var drawingManager = new google.maps.drawing.DrawingManager({
                    drawingMode: google.maps.drawing.OverlayType.MARKER,
                    drawingControl: true,
                    drawingControlOptions: {
                        position: google.maps.ControlPosition.TOP_CENTER,
                        drawingModes: ['marker', 'circle', 'polygon', 'polyline', 'rectangle']
                    },
                    markerOptions: { icon: 'https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png' },
                    circleOptions: {
                        fillColor: '#ffff00',
                        fillOpacity: 1,
                        strokeWeight: 5,
                        clickable: false,
                        editable: true,
                        zIndex: 1
                    }
                });
                drawingManager.setMap(map);


                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');
                    }
                });
                map.addMarker({
                    lat: -12.041111,
                    lng: -77.021111,
                    draggable: true,
                    fences: [polygon],
                    outside: function (marker, fence) {
                        alert('This marker has been moved outside of its fence');
                    }
                });
            });

        </script>
        <div id="map" style="height:800px"></div>
    </body>

【问题讨论】:

  • 在加载 Google Maps API 时不再需要 sensor 参数。

标签: javascript google-maps google-maps-api-3 gmaps.js


【解决方案1】:

我认为应该这样做。 Gmaps.js 在后台所做的所有事情都是

if (marker.fences) {
    google.maps.event.addListener(marker, 'dragend', function() {
      self.checkMarkerGeofence(marker, function(m, f) {
        outside(m, f);
      });
    });
}

https://github.com/hpneo/gmaps/blob/master/gmaps.js#L851

因此,将您的标记分配给变量。在加载时,触发它们每个的 'dragend' 事件:

var marker1 = 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');
    }
});

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

google.maps.event.trigger(marker1, 'dragend');
google.maps.event.trigger(marker2, 'dragend');

【讨论】:

  • 我试过你的代码,但我得到的结果和以前一样。在页面加载时,它应该检测到标记是在围栏内还是围栏外。如果它应该显示 alert ,但它不会那样发生。 plnkr.co/edit/ObAzjKjy10xRuhsvuvwH?p=preview
  • 你的代码充满了错误;检查您的浏览器控制台。
猜你喜欢
  • 1970-01-01
  • 2013-05-06
  • 1970-01-01
  • 2013-08-31
  • 2014-07-10
  • 2016-10-18
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
相关资源
最近更新 更多