2011-09-01 13 views
19

Używam google map API w wersji 3. Chcę wyłączyć działanie kliknięcia w domyślnym punkcie kontrolnym/poi Google. Na przykład, gdy przybliżam UCLA, pojawia się ikona szkoły (jest to w porządku), ale nie chcę, aby użytkownik kliknął i wyświetlił szczegóły tej lokalizacji. Którą funkcję interfejsu API powinienem użyć?wyłącza klikalny punkt orientacyjny na mapie google

+0

znalazłem przykład na powietrzu Wyszukiwanie mapy bnb. Wyłączono kliknięcie z kliknięciem bez ukrywania punktów orientacyjnych. Jak oni to zrobili? – Clark

+0

Myślę, że możesz wymusić wcześniejszą wersję swojego API, np. 3.3 lub 3.4, i to może zadziałać, lub możesz użyć rozwiązania, które zamieściłem poniżej z najnowszym API. – Glenn

+0

spróbuję. dzięki. – Clark

Odpowiedz

7

Napotkałem ten sam problem. Wygląda na to, że Google ostatnio zmienił swoje api, aby uczynić etykietę mapy podstawowej "klikalną" i nie ma jeszcze prostego wywołania API, aby wyłączyć ich klikalność. http://groups.google.com/group/google-maps-js-api-v3/browse_thread/thread/f1ac9ad4da3606fe

Chciałbym zobaczyć google dodać prostą opcję mapę tak, ale niestety nie istnieje jeszcze

var opts = { clickableLabels:false }; 
var map = new maps.google.com.map(div,opts); 

Poniżej rozwiązanie działa, ale dlatego, że opiera się na niestandardowe urządzone płytek map, darmowe mapy są ograniczone do (2 500 map ładunków dziennie) - See Google Maps FAQ.

function initialize() { 

    // For more details see 
// http://code.google.com/apis/maps/documentation/javascript/styling.html 
    var noPOILabels = [ 
    { 
     featureType: "poi", 
     elementType: "labels", 
     stylers: [ { visibility: "off" } ] 

    } 
    ]; 

    // Create a new StyledMapType object, passing it the array of styles, 
    // as well as the name to be displayed on the map type control. 
    var noPOIMapType = new google.maps.StyledMapType(noPOILabels, 
    {name: "NO POI"}); 

    // Create a map object, and include the MapTypeId to add 
    // to the map type control. 
    var mapOptions = { 
    zoom: 11, 
    center: new google.maps.LatLng(55.6468, 37.581), 
    mapTypeControlOptions: { 
     mapTypeIds: [google.maps.MapTypeId.ROADMAP, 'no_poi'] 
    } 
    }; 
    var map = new google.maps.Map(document.getElementById('map_canvas'), 
    mapOptions); 

    //Associate the styled map with the MapTypeId and set it to display. 
    map.mapTypes.set('no_poi', noPOIMapType); 
    map.setMapTypeId('no_poi'); 
} 
+1

Po przeczytaniu tego, wygląda na to, że całkowicie ukryłoby się znaczniki, a nie tylko uniemożliwiło ich kliknięcie. Czy to jest poprawne? –

+0

To prawda. W przypadku nieoficjalnego (niestabilnego) rozwiązania, które pozostawia je widoczne, zobacz mój komentarz pod powyższym pytaniem dotyczący wymuszania wcześniejszej wersji interfejsu API. Jeśli znajdziesz lepsze rozwiązanie, chciałbym o tym usłyszeć. – Glenn

+1

Dzięki! To całkowicie pomogło. :) –

0

Rozumiem, że to pytanie jest stary, ale może ta odpowiedź będzie pomagać innym:

Nie jestem pewien, czy to jest legalne, ale skończyło się na odkrywanie i uczynił ten kod:

$("#google-map").on("mousedown",function(){ 
    setTimeout(function(){ 
     disableInfoWindows(); 
    },500); 
}); 

function disableInfoWindows() 
{ 
    $(".gm-iw.gm-sm").parent().parent().remove(); 
    $("[style='position: absolute; left: -2px; top: -336px; width: 59px; height: 492px; -webkit-user-select: none; border: 0px; padding: 0px; margin: 0px;']") 
    .parent() 
    .parent() 
    .remove(); 
} 

To działało dla mnie, nie wyświetla się informacja, przy jednoczesnym zachowaniu wszystkich ikon. Każdy, kto ma pomysł ulepszenia kodu, jest mile widziany, infoWindow pojawia się tylko trochę za pierwszym razem, kiedy się otworzy, po tym pierwszym całkowicie zniknął.

1

Rozumiem, że OP chce rozwiązania, które utrzymuje etykiety/ikony, ale zawiesza zdarzenia kliknięcia. Nie jestem pewien, czy to możliwe; proszę star this issue

Jednak niektórzy z nas rysują kształty Sans Drawing Manager, a etykiety/ikony utrudniają dodawanie nowych punktów. Jeśli spełnia Twoje wymagania, możesz tymczasowo usunąć ikony/etykiety. Odkryłam, że tranzyt, poi i krajobraz wszystkie muszą być przełączana:

var map = new google.maps.Map(document.getElementById("map"), {}); 
map.poi = function(state){ 

    var styles = [ 
    { 
     "featureType": "transit", 
     "stylers": [ 
     { "visibility": "off" } 
     ] 
    },{ 
     "featureType": "poi", 
     "stylers": [ 
     { "visibility": "off" } 
     ] 
    },{ 
     "featureType": "landscape", 
     "stylers": [ 
     { "visibility": "off" } 
     ] 
    } 
    ]; 

    this.set("styles", (state)? {} : styles); 

} 

A Zastosowanie:

//turn the labels/icons off 
map.poi(false); 

//turn them back on 
map.poi(true); 
17

Google ujawnił opcję dla tego produktu. Zobacz clickableIcons z google.maps.MapOptionsin the docs.

Przykładowy kod inicjalizacji:

map = new google.maps.Map(document.getElementById('map'), { 
    clickableIcons: false 
}); 
+1

To powinno być teraz oznaczone jako odpowiedź. – keaukraine

1

dodać tę opcję, aby mapOption clickableIcons: false

to więcej opcji myślę, że będzie

draggable: true, // this is for disable the Draggable 
 
disableDefaultUI: true, // this for disable Default UI 
 
fullscreenControl: false, // this is for disable Full Screen 
 
scrollwheel: true, // this is for disable Scroll Wheel 
 
disableDoubleClickZoom: false, // this is for disable Double Click Zoom 
 
draggableCursor:'crosshair',// this is for cursor type 
 
draggingCursor:'move', // this is for dragging cursor type 
 
minZoom: 3, // this is for min zoom for map 
 
maxZoom: 18 , // this is for max zoom for map 
 
//note : max, min zoom it's so important for my design. 
 
zoom: 14, // this is to make default zoom 
 
clickableIcons: false, // this is to disable all labels icons except your custom infowindow or Infobox.

Powiązane problemy