Javascript GooglePlacesAPI返回重复的位置

Javascript GooglePlacesAPI返回重复的位置,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我正在LatLngBounds数组中按关键字搜索位置 var boundsarr = new Array(); boundsarr[0] = new google.maps.LatLngBounds( new google.maps.LatLng(25.941886953491675, -80.17411103748543), new google.maps.LatLng(25.947676224813897, -80.1676733017794

我正在LatLngBounds数组中按关键字搜索位置

    var boundsarr = new Array();

    boundsarr[0] = new google.maps.LatLngBounds(
        new google.maps.LatLng(25.941886953491675, -80.17411103748543),
        new google.maps.LatLng(25.947676224813897, -80.16767330177947)
    );
    boundsarr[1] = new google.maps.LatLngBounds(
        new google.maps.LatLng(25.941886953491675, -80.16767330177947),
        new google.maps.LatLng(25.94622890698334, -80.1644544339265)
    );
    boundsarr[2] = new google.maps.LatLngBounds(
        new google.maps.LatLng(25.927413775186118, -80.1644544339265),
        new google.maps.LatLng(25.94622890698334, -80.15962613214703)
    );
    boundsarr[3] = new google.maps.LatLngBounds(
        new google.maps.LatLng(25.927413775186118, -80.15962613214703),
        new google.maps.LatLng(25.931755728677782, -80.15801669822054)
    );
    boundsarr[4] = new google.maps.LatLngBounds(
        new google.maps.LatLng(25.927413775186118, -80.15801669822054),
        new google.maps.LatLng(25.933203046508336, -80.15318839644107)
    );
    boundsarr[5] = new google.maps.LatLngBounds(
        new google.maps.LatLng(25.92886109301667, -80.15318839644107),
        new google.maps.LatLng(25.933203046508336, -80.15157896251458)
    );
然后在地图上添加标记,添加到和数组,并创建使用标记数组返回的位置列表。重复的条目出现在列表中,我不知道为什么


示例:。如何防止重复显示?非常感谢您的帮助

作为一个临时解决方案,您是否可以每次在回调中构建一个已找到位置的数组,然后在同一个循环中,查看该位置的计数是否大于1,如果是,则不调用createMarker

不确定是否完美,但请参见以下内容:

var foundPlaces = [];
var found;

function callback(results, status) { 
  if (status === google.maps.places.PlacesServiceStatus.OK) {
    for (var i = 0; i < results.length; i++) {
      found = 0;
      foundPlaces.push(results[i].id);
      for (var j = 0; j < foundPlaces.length; j++) {
        if (foundPlaces[j] === results[i].id) {
          found++;
          console.log(foundPlaces[j], results[i].id);
        }
      }

      if (found < 2) {
        createMarker(results[i]);
      }
    }
  }
}
var foundPlaces=[];
var发现;
函数回调(结果、状态){
if(status==google.maps.places.PlacesServiceStatus.OK){
对于(var i=0;i

边界参数描述如下:

要搜索位置的范围。位置和半径 如果设置了边界,则将忽略

但是对于代码示例中的第二个边界,边界外的两个结果进入结果

可以使用以下命令显示边界区域:

new google.maps.Rectangle({
    strokeColor: 'red',
    strokeOpacity: 0.8,
    strokeWeight: 2,
    fillColor: 'bulue',
    fillOpacity: 0.6,
    map: map,
    bounds: bounds
});
然后你就可以看到结果了


这可能是google map api的一个缺陷。

在添加新边界之前,您需要进行检查,因为当您再次单击时,它会在同一位置生成新标记。。 用这个。。。
map.getBounds().contains(marker.getPosition())

提及

这将返回
true
false
选中此选项后,您可以渲染/添加标记

我试过小提琴,但还是没有成功。。。因为它的语法。。 而JavaScript需要用户定义数据类型的特定函数。。我正在尝试创建自定义函数以消除重复的JSON对象

我会尽快向您发布最新的小提琴,直到您可以自己试一试


我希望这样就可以了。

对不起,现在才意识到,您正在一个循环中调用nearbySearch,每次调用都有一个LatLngBounds,我没有机会检查它,但我认为这可能是问题所在。.也许您的边界重叠了,或者可能是一个精确的问题?没问题。是的,我正在对每个边界进行近距离搜索。我确信它与循环有关,但我一直在查看代码,无法确定它在哪里重叠……它在某个地方没有重叠,重复项是搜索boundsarr[1]的结果。创建边界矩形时,您将看到返回的位置(Cafe Que Rico和Net Place Cafe Inc.)不在定义的边界内。这样,你可以称之为bug,我会称之为不准确的结果。@Dr.Molle谢谢!您认为这是API错误吗?谢谢,如果无法避免请求本身的重复,这可能是唯一的解决方案。更简单的方法是使用
markersArray[i].getPosition().equals(marker.getPosition())
比较现有标记和新标记的标记数组。最好使用哈希映射。最坏情况下,该值可能为n^2或更大。foundPlaces可以是一本字典,一个散列,而不是一个dictionary@TravisDelly是的,ES6现在支持这种行为是的,这是一种非常奇怪的行为。在循环中搜索多个边界中的任何内容时,我会得到重复的标记。@CyberJunkie是的,结果再次出现在您的第三个边界中。您知道是否有解决方法吗?谢谢,每个请求都会在相同的边界中创建标记,但问题是重复标记是在它们的边界之外创建的(在另一个边界中)。只需将每个标记存储在数组中,并在每次创建新标记时检查其是否存在,即可检查标记是否已在地图上。Matt发布了一个示例是的,我已经尝试过了,但是由于标记是使用JSON符号创建的,所以在将其放入数组之前无法进行比较。。。。我一直在努力,但是马特解决了你的问题,所以他做到了:)尽管我们可以通过比较使它变得更好。。在这里,马特检查它,数组中的标记超过2,它将不再检查。。因此,这在计数基础上起作用……)通过从json符号中删除map对象
map:map
,可以在推送到数组之前进行检查,然后进行比较/推送到数组,最后使用
marker.setMap(map)将标记放在映射上