Как я могу узнать фактический масштаб, в котором сейчас находятся мои карты Google?

У меня есть карта Google (v3) на моем сайте, и я хочу знать, какой масштаб у меня в данный момент. Дело в том, что пользователь может изменить его масштаб, чтобы масштаб мог измениться.

Мне нужна информация о фактической ширине моей карты в километрах. Я знаю, что могу использовать Bounds... но есть ли другой способ? Я действительно не хочу использовать Bounds.

Спасибо!


person Joaquín M    schedule 04.11.2010    source источник
comment
В порядке. Я решил использовать Bounds :P. В любом случае, есть ли способ получить фактический масштаб?   -  person Joaquín M    schedule 04.11.2010
comment
Масштаб проекции Меркатора меняется в зависимости от широты, так что это не так просто, как кажется.   -  person Ossama    schedule 08.11.2010
comment
Ты прав. Но я не понимаю, почему Google предоставляет график масштаба, который вы можете добавить на свою карту, если хотите. Похоже, Google может сказать вам реальный масштаб вашей карты.   -  person Joaquín M    schedule 09.11.2010


Ответы (1)


Таким образом, вы можете вызвать map.getBounds(). Затем вы можете использовать функции на google.maps.geometry.spherical класс, например computeDistanceBetween или computeLength. Что-то вроде этого, я думаю, должно дать вам то, что вам нужно:

<!DOCTYPE html>
<html>
<head>
<title></title>

<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<style type="text/css">
html { height: 100% }
body { height: 100%; margin: 0; padding: 0 }
#map_canvas { height: 100% }
</style>

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false&libraries=geometry"></script>

<script type="text/javascript">
    function initialize() {
        var homeLatlng = new google.maps.LatLng(51.476706,0); // London

        var myOptions = {
            zoom: 15,
            center: homeLatlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };

        var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);


        google.maps.event.addListener(map, 'bounds_changed', function() {           
            // find out the map's bounds:
            var bounds = map.getBounds();

            // from that, get the coordinates for the NE and SW corners
            var NE = bounds.getNorthEast();
            var SW = bounds.getSouthWest();

            // from that, figure out the latitudes and the longitudes
            var lat1 =  NE.lat();
            var lat2 =  SW.lat();

            var lng1 =  NE.lng();
            var lng2 =  SW.lng();

            // construct new LatLngs using the coordinates for the horizontal distance between lng1 and lng2
            var horizontalLatLng1 = new google.maps.LatLng(lat1,lng1);
            var horizontalLatLng2 = new google.maps.LatLng(lat1,lng2);

            // construct new LatLngs using the coordinates for the vertical distance between lat1 and lat2
            var verticalLatLng1 = new google.maps.LatLng(lat1,lng1);
            var verticalLatLng2 = new google.maps.LatLng(lat2,lng1);

            // work out the distance horizontally
            var horizontal = google.maps.geometry.spherical.computeDistanceBetween(horizontalLatLng1,horizontalLatLng2);

            // work out the distance vertically
            var vertical = google.maps.geometry.spherical.computeDistanceBetween(verticalLatLng1,verticalLatLng2);

            // round to kilometres to 1dp
            var horizontalkm = convertMetresToKm(horizontal);
            var verticalkm = convertMetresToKm(vertical);

            alert(horizontalkm + ' km horizontal, ' + verticalkm + ' km vertical');
        });
    }

    function convertMetresToKm(metres) {
        return Math.round(metres / 1000 *10)/10;    // distance in km rounded to 1dp
    }


    google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>
<body>
    <div id="map_canvas"></div>
</body>
</html>
person duncan    schedule 16.10.2013
comment
Я признателен за ваш ответ. Я новичок в Google Maps API v3, и я до сих пор не знаю, как получить масштаб по юго-западному и северо-восточному углам карты. - person huanhuanw; 16.10.2013
comment
Спасибо, но, похоже, это не работает. Я хочу получить значение масштаба из ScaleControl, например 1 км / 2000 футов, 200 м / 1000 футов. Извините, у меня недостаточно репутации для публикации изображений. - person huanhuanw; 16.10.2013
comment
Я не уверен, что вы имеете в виду, и как это получить. Я только что видел. Мне нужна информация о фактической ширине моей карты в километрах, например, 50 км. что и делает приведенный выше код. - person duncan; 16.10.2013
comment
См. также мою статью здесь, где я расширяю идею отображения размера карты: duncan99.wordpress.com/2013/10/19/google-maps-size - person duncan; 12.11.2014