Подтвердить что ты не робот

Показать мое местоположение в Google Maps API v3

"Мое местоположение" в API javascript Google Карт

Этот вопрос задавали более полугода назад. Обновлен ли API Google Maps v3 для использования кнопки "Мое местоположение", найденной на http://maps.google.com?

My Location - это контроль между человеком Street View и элементами управления, похожими на геймпад.

Если API Карт Google не предоставляет мое местоположение, мне нужно написать мою собственную функцию привязки HTML5 с помощью navigator.gelocation, а затем создать свой собственный контроль на Картах Google?

4b9b3361

Ответ 1

Нет, но добавить свой маркер на основе текущего местоположения легко:

var myloc = new google.maps.Marker({
    clickable: false,
    icon: new google.maps.MarkerImage('//maps.gstatic.com/mapfiles/mobile/mobileimgs2.png',
                                                    new google.maps.Size(22,22),
                                                    new google.maps.Point(0,18),
                                                    new google.maps.Point(11,11)),
    shadow: null,
    zIndex: 999,
    map: // your google.maps.Map object
});

if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(pos) {
        var me = new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude);
        myloc.setPosition(me);
    }, function(error) {
        // ...
    });
}

Ответ 2

Мы сделали такой компонент для Google Maps API v3. Любой может использовать в пользовательских проектах, чтобы добавить элемент управления, показывающий текущую геолокацию только с одной строкой кода:

var geoloccontrol = new klokantech.GeolocationControl(map, mapMaxZoom);

после включения в заголовок HTML этот JavaScript:

<script src="https://cdn.klokantech.com/maptilerlayer/v1/index.js"></script>

Увидеть:

http://www.maptiler.com/maptilerlayer/

для примера кода и документации.

Show My Location Control on Google Maps API v3

Он добавляет на карту стандартный элемент управления - и после его нажатия - показывает синий круг вокруг вашего местоположения с размером, полученным из точности доступных данных о местоположении. Если вы не перетаскиваете карту, она будет удерживать вас после перемещения.

Этот элемент управления был разработан для средства просмотра, автоматически генерируемого программным обеспечением http://www.maptiler.com/, которое создает листы для наложений карт и пользовательских слоев, созданных из изображений и растровых геоданных.

Ответ 3

вы должны сделать это сами. Вот фрагмент кода для добавления кнопки "Ваше местоположение". HTML

<div id="map">Map will be here</div>

CSS

#map {width:100%;height: 400px;}

JS

var map;
var faisalabad = {lat:31.4181, lng:73.0776};

function addYourLocationButton(map, marker) 
{
    var controlDiv = document.createElement('div');

    var firstChild = document.createElement('button');
    firstChild.style.backgroundColor = '#fff';
    firstChild.style.border = 'none';
    firstChild.style.outline = 'none';
    firstChild.style.width = '28px';
    firstChild.style.height = '28px';
    firstChild.style.borderRadius = '2px';
    firstChild.style.boxShadow = '0 1px 4px rgba(0,0,0,0.3)';
    firstChild.style.cursor = 'pointer';
    firstChild.style.marginRight = '10px';
    firstChild.style.padding = '0px';
    firstChild.title = 'Your Location';
    controlDiv.appendChild(firstChild);

    var secondChild = document.createElement('div');
    secondChild.style.margin = '5px';
    secondChild.style.width = '18px';
    secondChild.style.height = '18px';
    secondChild.style.backgroundImage = 'url(https://maps.gstatic.com/tactile/mylocation/mylocation-sprite-1x.png)';
    secondChild.style.backgroundSize = '180px 18px';
    secondChild.style.backgroundPosition = '0px 0px';
    secondChild.style.backgroundRepeat = 'no-repeat';
    secondChild.id = 'you_location_img';
    firstChild.appendChild(secondChild);

    google.maps.event.addListener(map, 'dragend', function() {
        $('#you_location_img').css('background-position', '0px 0px');
    });

    firstChild.addEventListener('click', function() {
        var imgX = '0';
        var animationInterval = setInterval(function(){
            if(imgX == '-18') imgX = '0';
            else imgX = '-18';
            $('#you_location_img').css('background-position', imgX+'px 0px');
        }, 500);
        if(navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(function(position) {
                var latlng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
                marker.setPosition(latlng);
                map.setCenter(latlng);
                clearInterval(animationInterval);
                $('#you_location_img').css('background-position', '-144px 0px');
            });
        }
        else{
            clearInterval(animationInterval);
            $('#you_location_img').css('background-position', '0px 0px');
        }
    });

    controlDiv.index = 1;
    map.controls[google.maps.ControlPosition.RIGHT_BOTTOM].push(controlDiv);
}

function initMap() {
    map = new google.maps.Map(document.getElementById('map'), {
        zoom: 15,
        center: faisalabad
    });
    var myMarker = new google.maps.Marker({
        map: map,
        animation: google.maps.Animation.DROP,
        position: faisalabad
    });
    addYourLocationButton(map, myMarker);
}

$(document).ready(function(e) {
    initMap();
}); 

Ответ 4

//copy and paste this in your script section.
if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(success, error);
} else {
    alert('location not supported');
}

//callbacks
function error(msg) {
    alert('error in geolocation');
}

function success(position) {
    var lats = position.coords.latitude;
    var lngs = position.coords.longitude;
    alert(lats);
    alert(lngs)
};