【问题标题】:How to get only one marker in the Google Maps API with JavaScript如何使用 JavaScript 在 Google Maps API 中仅获取一个标记
【发布时间】:2016-01-16 14:20:19
【问题描述】:

我的代码:

<script
src="http://maps.googleapis.com/maps/api/js">
</script>

<script>
var map;
var myCenter=new google.maps.LatLng(51.508742,-0.120850);

function initialize()
{
var mapProp = {
  center:myCenter,
  zoom:5,
  mapTypeId:google.maps.MapTypeId.ROADMAP
  };

  map = new google.maps.Map(document.getElementById("googleMap"),mapProp);

  google.maps.event.addListener(map, 'click', function(event) {
    placeMarker(event.latLng);
  });
}

function placeMarker(location) {
  var marker = new google.maps.Marker({
    position: location,
    map: map,
  });
  var infowindow = new google.maps.InfoWindow({
    content: 'Latitude: ' + location.lat() + '<br>Longitude: ' + location.lng()
  });
  infowindow.open(map,marker);
}

google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>

<body>
<div id="googleMap" style="width:500px;height:380px;"></div>

我每公里都有一个新标记。如果我再次单击它,如何删除另一个?

顺便说一句:请阅读:Google Maps how to get to show only one marker?

想使用它,但它不起作用(在控制台中:CurrentPosition() 和 watchPosition() 在不安全的来源上已弃用,并且支持将在未来被删除。您应该考虑将您的应用程序切换到安全来源,例如 HTTPS。有关详细信息,请参阅https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-powerful-features-on-insecure-origins。)

【问题讨论】:

    标签: javascript google-maps google-maps-api-3


    【解决方案1】:

    如果您只需要一个标记,则可以选择一个,只需创建一个并根据需要移动它。

    proof of concept fiddle

    代码 sn-p:

    var map;
    var myCenter = new google.maps.LatLng(51.508742, -0.120850);
    var marker;
    var infowindow;
    
    function initialize() {
      var mapProp = {
        center: myCenter,
        zoom: 5,
        mapTypeId: google.maps.MapTypeId.ROADMAP
      };
    
      map = new google.maps.Map(document.getElementById("googleMap"), mapProp);
    
      google.maps.event.addListener(map, 'click', function(event) {
        placeMarker(event.latLng);
      });
    }
    
    function placeMarker(location) {
      if (!marker || !marker.setPosition) {
        marker = new google.maps.Marker({
          position: location,
          map: map,
        });
      } else {
        marker.setPosition(location);
      }
      if (!!infowindow && !!infowindow.close) {
        infowindow.close();
      }
      infowindow = new google.maps.InfoWindow({
        content: 'Latitude: ' + location.lat() + '<br>Longitude: ' + location.lng()
      });
      infowindow.open(map, marker);
    }
    
    google.maps.event.addDomListener(window, 'load', initialize);
    html,
    body,
    #googleMap {
      height: 100%;
      width: 100%;
      margin: 0px;
      padding: 0px
    }
    <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script>
    <div id="googleMap"></div>

    【讨论】:

      【解决方案2】:

      而不是这个:

      google.maps.event.addListener(map, 'click', function(event) {
          placeMarker(event.latLng);
        });
      

      尝试使用这个:

      google.maps.event.addListener(map, 'click', function(event) {
          setMapOnAll(null);
          placeMarker(event.latLng);
      }
      

      因此,您将在点击时删除所有当前标记并在 x,y 位置添加新标记

      【讨论】:

      • 出现此失败:newevent:227 Uncaught ReferenceError: setMapOnAll is not defined
      • 您可以尝试删除 setmaponall 并使用 placeMarker(null)
      猜你喜欢
      • 1970-01-01
      • 2012-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-09
      • 1970-01-01
      • 1970-01-01
      • 2013-12-27
      相关资源
      最近更新 更多