Маркер геолокации не отображается, Google Maps API V3 - PullRequest
0 голосов
/ 26 ноября 2011

Я создаю мобильную карту с помощью Google Map API V3. Она немного отличается от стандартной карты тем, что у меня есть категории маркеров, которые вы можете включать / выключать. Все отлично работает, но я не могу заставить работать геолокацию. Я перепробовал каждую комбинацию и фрагмент кода, который смог найти, и, самое большее, смог заставить его зарегистрировать запрос местоположения, но там не будет отображаться маркер, независимо от того, что я делаю. Я уверен, что делаю что-то очень простое неправильно, но я очень плохо знаком с Javascript, поэтому ответ уклоняется от меня.

Вот сокращенная версия моего текущего кода (содержит пример всего, но вырезает много повторяющихся переменных). Этот пример не включает в себя функции геолокации, так как я пробовал так много разных способов, я не уверен, какую из них я бы даже добавил сюда. Функция toggleMarkers () - это то, что я использую для включения / выключения маркеров, и я предполагаю, что именно в этом проблема отображаемого маркера геолокации. Если бы вы могли показать мне, как реализовать геолокацию в этом коде, я был бы очень признателен!

var markers = [];
function initialize() {

//Setting Map
    var mapOptions = {
        zoom: 18,
        center: new google.maps.LatLng(45.73158,-122.636277),
        mapTypeId: 'satellite'
    }
    var map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
        map.setTilt(0);

//Marker Categories
    var markerBuildings = {
        category: 'buildings',
    }

    var markerParking = {
        category: 'parking',
    }

// Icons
    var iconBuilding = new google.maps.MarkerImage('images/building.png',
        new google.maps.Size(32, 37),
        new google.maps.Point(0,0),
        new google.maps.Point(16,32));

    var iconAmphitheater = new google.maps.MarkerImage('images/amphitheater.png',
        new google.maps.Size(32, 37),
        new google.maps.Point(0,0),
        new google.maps.Point(16,32));

//Coordinates

//Buildings
    var vmcb = new google.maps.Marker({
        position: new google.maps.LatLng(45.730513,-122.638106),
        map: map,
        url: 'http://www.google.com/',
        icon: iconBuilding,
        data: markerBuildings
    });
    markers.push(vmcb);     
    var vadm = new google.maps.Marker({                        
        position: new google.maps.LatLng(45.730899,-122.637742),
        map: map,
        url: 'http://www.google.com/',
        icon: iconBuilding,
        data: markerBuildings
    });
    markers.push(vadm);
}

function toggleMarkers(attr,val) {
    if (markers){
        for (i in markers) {
            if(markers[i].data[attr] == val){
                var visibility = (markers[i].getVisible() == true) ? false : true;
                markers[i].setVisible(visibility);
            }
        }
    }
}

1 Ответ

1 голос
/ 18 февраля 2014

Если бы вы могли показать мне, как реализовать геолокацию в этом коде, я был бы очень признателен!

вызовите getGeoLocation () (ниже) после создания объекта карты

    function getGeoLocation() {
          // /4026710/navigator-geolocation-getcurrentposition-inogda-rabotaet-inogda-ne
    var options = null;

    if (navigator.geolocation) {

        if (!browserChrome) {
            // By using the 'maximumAge' option, the position
            // object is guaranteed to be at most 15 seconds old.
            // FF and Safari seem to like these options; Chrome does not
            options={enableHighAccuracy: false, maximumAge: 15000, timeout: 30000};
          }
        else {
            // Request a position. We only accept cached positions, no matter what 
            // their age is. If the user agent does not have a cached position at
            // all, it will immediately invoke the error callback.
            // http://dev.w3.org/geo/api/spec-source.html
            // Chrome will not allow this submitted via the file:// protocol
            options={maximumAge:Infinity, timeout:0};
          }

        navigator.geolocation.getCurrentPosition(function(position) {

            centerIsSet = true
            canGeolocate = true;

            var pos = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);

            map.setCenter(pos);

          },
             getGeoLocationErrorCallback(true),

            options);
    }
    else {

      // browser doesn't support geolocation
      getGeoLocationErrorCallback(false);
    }

    }
...