2013-06-14 3 views
6

LatLngBounds 배열 내에서 키워드로 장소를 검색하고 있습니다.Google 장소 API 반환 중복 위치

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) 
    ); 

지도에 마커, to 및 배열을 추가하고 마커 배열을 사용하여 반환 된 장소 목록을 만듭니다. 중복 된 항목이 목록에 표시되고 이유를 파악할 수 없습니다.

예 : http://jsfiddle.net/2KrmY/. 복제물이 보이지 않게하려면 어떻게합니까? 어떤 도움이라도 대단히 감사합니다!

+0

죄송합니다, 당신이 각 통화에 대한 위도 경도 경계와 루프 내부에 nearbySearch를 호출하고, 지금 실현 ..이 할 것입니다 희망하지만, 그게 문제가 될지도 모른다 ..어쩌면 경계가 겹치거나 정밀한 것일 수 있습니까? –

+0

문제 없습니다. 네, 각 바운드에 대해 nearbySearch를하고 있습니다. 나는 그것이 루프와 관련이 있다고 확신하지만, 코드를보고 겹치는 부분을 파악할 수 없다. – CyberJunkie

+1

어딘가에 겹치지 않는다. 중복은 boundsarr [1]에 대한 검색 결과이다. 경계의 사각형을 만들면 반환 된 장소 (Cafe Que Rico 및 Net Place Cafe Inc)가 정의 된 범위 내에 있지 않음을 알 수 있습니다. 이것으로, 당신은 버그라고 부를 수 있습니다. 나는 그것을 부정확 한 결과라고 부릅니다. –

답변

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/

+0

요청 자체에서 중복을 피할 수있는 방법이 없다면이 방법이 유일한 해결책 일 수 있습니다. – CyberJunkie

+1

더 쉬운 방법은 기존 마커 배열과 새로운 마커를 비교하는 것입니다. 'markerersArray [i] .getPosition(). equals (marker.getPosition())' – CyberJunkie

3

경계 매개 변수가 다음과 같이 설명되어 있습니다 :

경계 장소를 검색 할 수 내 합니다. 범위가 설정된 경우 위치 및 반경 은 무시됩니다.

그러나 코드 예제에서 두 번째 경계의 경우 경계 외부의 2 개의 결과가 결과로 나타납니다.

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

을 그리고 당신은 결과를 볼 수 있습니다

당신은 사용하여 경계 영역을 표시 할 수 있습니다.

.

Google지도 API의 버그 일 수 있습니다. 당신이 같은 장소에서 새로운 마커 .. 사용이 생성을 다시 클릭하면이 true을 반환합니다

+0

예. 매우 이상한 행동입니다. 루프의 여러 경계에서 아무 것도 검색 할 때 중복을 얻습니다. – CyberJunkie

+0

@CyberJunkie 예, 결과가 다시 세 번째 경계에 있습니다. – xdazz

+0

수정 사항이 있는지 알고 계십니까? – CyberJunkie

1

당신은 map.getBounds().contains(marker.getPosition())

old Post

을 참조 ...로, 새로운 경계를 추가하기 전에 확인해야 또는 false을 확인한 후 마커를 렌더링/추가 할 수 있습니다.

나는 피들에서 시도했지만 성공하지 못했습니다 ... JASON 구문으로 ... 및 JavaScript requir 전자 특정 사용자 정의 데이터 형식에 대한 특정 기능을 ... 나는 중복 JSON 개체를 제거하는 사용자 정의 함수를 만들려고 노력하고있어 ....

나는 준비가 되 자마자 업데이트 된 피들과 함께 게시됩니다, 그때까지 시도 할 수 있습니다 자신에 ..

나는, 내가 기회를 확인하지 않았다

+0

마커가 각 요청마다 같은 범위 내에서 생성되지만 중복 된 마커가 다른 경계에서 생성된다는 것은 문제입니다. – CyberJunkie

+0

각 마커를 배열에 저장하고 새 마커를 만들 때마다 마커가 있는지 확인하여 마커가 이미지도에 있는지 확인할 수 있습니다. 매트 예를 게시 http://stackoverflow.com/a/17139868/468312 – CyberJunkie

+0

그래,하지만 마커 JSON 표기법을 사용하여 그것을 배열에 밀어 넣기 전에 비교지고 만들었습니다 .... 노력하고 있습니다. 그 매트하지만 당신의 문제를 해결 그래서 :) 우리가 그것을 비교하여 더 좋게 만들 수 있습니다. 매트 여기에 배열에서 마커를 확인합니다 2 다음에 다시 확인하지 않습니다 .. 그래서 카운트 기준으로 작동합니다 :) – MarmiK