6

我正在按关键字在 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)
    );

然后在地图上添加标记,到和数组,并创建使用标记数组返回的地点列表。重复的条目出现在列表中,我不知道为什么..

示例:http: //jsfiddle.net/2KrmY/。如何防止重复显示?任何帮助是极大的赞赏!

4

3 回答 3

3

bounds 参数描述如下:

搜索地点范围。如果设置了边界,则位置和半径都将被忽略。

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

您可以使用以下方法显示边界区域:

new google.maps.Rectangle({
    strokeColor: 'red',
    strokeOpacity: 0.8,
    strokeWeight: 2,
    fillColor: 'bulue',
    fillOpacity: 0.6,
    map: map,
    bounds: bounds
});

然后你可以看到结果。

检查演示

这可能是 google map api 的错误。

于 2013-06-17T03:43:15.387 回答
3

作为一个临时解决方案,您是否可以每次在您的回调中构建一个找到的位置数组,然后在同一个循环中,查看该位置的计数是否大于 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]);
      }
    }
  }
}

http://jsfiddle.net/2KrmY/15/

于 2013-06-17T03:05:42.003 回答
1

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

参考旧帖

这将返回truefalse在检查后您可以渲染/添加标记

我已经尝试过,但仍然没有成功......因为它的 JASON 语法......并且 JavaScript 需要用户定义的数据类型的特定函数......我正在尝试创建自定义函数来消除重复的 JSON 对象......

准备好后,我会尽快向您发布更新的小提琴,直到那时您可以自己尝试..

我希望这会做..

于 2013-06-21T12:59:10.097 回答