0

Google지도를 사용하는 프로젝트에서 작업하고 있습니다. HTML5 geolocalization을 사용하여지도를 설정합니다. geolocalisation이 지원되지 않거나 거부 된 경우지도 센터를 임의로 설정합니다.웹 브라우저에서의 표시 동작이 매우 이상합니다.

내 문제에 대해 두 가지이다 :

  • 구글 맵 로딩에 대한 제 1의 다음 geolocaization이 승인 될 때,지도를 할 수 있었다, 내가 지금 중국에있어 (로드 anormaly 느린 이유가 되겠습니까?). 파이어 폭스에서는로드하지 않는다 ... 자바 스크립트 오류는 없다.

  • 더 일반적으로 전체 웹 사이트의 디스플레이는 매우 버그가 있습니다. 지도를 충분히 축소 한 후에 마커가 표시되어야합니다. 괜찮습니다. 그러나 특정 콘텐츠는 일반적으로지도 아래에 표시됩니다. 이 콘텐츠는, 또는 거의 보이지 ... 윈도우의 전체 폭에 확산 uggly 검은 색 블록에 의해 내가 awesomefont (반응 CSS 파일과 자바 스크립트 플러그인 포함) 부트 스트랩을 사용하고

을 숨겨하고, 몇 가지 추가 자바 스크립트 코드.

혹시 궁금하십니까? 이 it's here

+0

Google 크롬에서 JS 오류가 발생합니다. '잡히지 않은 유형 오류 : victorinox.pythonanywhere.com : 56'에 'lat'의 메서드 'lat'를 호출 할 수 없습니다. – ComFreek

+0

어떻게이 오류가 발생 했습니까? 지도를 확대/축소하여 다시 확인했습니다. 오류가 발생하지 않았습니다 ... – renard

+0

이상해, 더 이상 오류를 재현 할 수 없습니다. 그러나 어쨌든지도를 볼 수는 없으며 단지 회색 사각형입니다. – ComFreek

답변

1

: 특히 날 미치게 두 번째 점 ...

감사

편집 나는이 문제를 조사하기 위해 URL을 제공하지 않는 경우 어떻게 당신이 나를 도울 수에 대한 에러 http://victorinox.pythonanywhere.com/static/js/manager_functions.js에, 라인 143 :

map.setCenter(google.maps.LatLng(loc.coords.latitude, loc.coords.longitude)); 

는이어야

,
map.setCenter(newgoogle.maps.LatLng(loc.coords.latitude, loc.coords.longitude)); 
//------------^

기타 : 사용자가 HTML5-geolocation에 대한 권한을 거부하면 Firefox가 오류 콜백을 실행하지 않습니다. 그렇기 때문에 센터가 필수 옵션이므로지도가로드되지 않는 다른 위치에지도 센터를 설정하지 않았다는 사실 때문에.

센터가 초기화 될 것으로 생각할 수 있지만 사용자가 geolocation에 대한 권한을 거부하면 firefox initialize가 호출되지 않습니다. 이것 좀보세요 :

$(function() { 
    //creates the map, no center will be set in createMap() 
    map = createMap(); 
    //in firefox there will not be set a center 
    //when user denies permission, because error-callback will not execute 
    geolocalize(); 
    // when the map 
    center = map.getCenter(); 
    //will never run, because when the map doesn't have a center 
    //there will no tiles load 
    google.maps.event.addListenerOnce(map, 'tilesloaded', function() { 
     initialize(); 
    }); 
}) 

제안 : 는 현재 당신이 마커의 깜박 거리는 선물을 가지고있다. 여러 이벤트 (확대/축소, 드래그, 크기 조정)에 마커를 다시로드하고 모든 마커를 삭제 한 다음 XHR 응답을 기반으로 마커를 새로 만듭니다.

대신 마커 용 캐시를 만들어야합니다 (예 : XHR 응답에서 제공 한 일부 ID를 기반으로 식별 할 수있는 위치). 새 응답을 받으면 캐시 내에 있지 않은 경우에만 새 마커를 만들고 다른 마커는지도에 계속 표시됩니다 (뷰포트에 표시되지 않는 마커를 제거하거나 숨길 때 어떤 이점도 보이지 않음)

3 이벤트 대신 bounds_changed의 마커를 업데이트하는 것만으로도 충분합니다.

+0

고마워요. 빠진 새로운 것을 알아 냈습니다. 오류 콜백에 대해 어떤 버전을 사용했는지 확신 할 수 없지만 업데이트 된 최신 버전이이 측면을 고려한다고 생각합니다. 그것은 마커 업데이트 정책을 위해 만들어진 훌륭한 제안입니다. 나는 그것이 나쁜 접근 이었지만 지금까지 더 나은 방법을 생각할 수 있음을 알고있었습니다. 글로벌 변수 지향형 캐시는 마커를 캐시해도 괜찮은 것 같아요? 다시 한 번 감사드립니다! – renard

+1

은 error-callback과 관련이 있습니다. 아니요, 그렇지 않습니다. 권한을 거부하면 FF로로드되지 않습니다. 오류 콜백은 실행되지 않습니다. (현재의 firefox 구현입니다.)하지만 else 분기도 실행되지 않습니다. FF로 geolocation을 사용할 수 있기 때문입니다. 어떤 버전입니까? 현재. 캐시와 관련된 –

+1

: 괜찮습니다.하지만 구현의 재 설계에 대해 생각해야합니다. 현재 수십 개의 글로벌 액세스 가능한 함수 및 변수가 있으므로 단일 객체에서 전체 응용 프로그램을 실행하는 것이 좋습니다. (maps-API를 살펴보면, "google"이라는 이름의 전역 객체가 하나 뿐이며, 다른 API를 추가하면 "google"의 일부가 될 것이므로 제어가 강화되고 이름 충돌이 줄어 듭니다. –

관련 문제