Javascript GooglePlacesAPI返回重复的位置
我正在LatLngBounds数组中按关键字搜索位置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
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)将标记放在映射上代码>