根据用户的地理位置居中谷歌地图

Posted

技术标签:

【中文标题】根据用户的地理位置居中谷歌地图【英文标题】:Centering google map based on user's geolocation 【发布时间】:2013-12-30 23:11:06 【问题描述】:

我的网站上有一个谷歌地图 (v2),我用它来获取用户的纬度和经度,以将它们作为表单发送。我需要的是使这张地图最初以用户的地理位置为中心。我知道这不是一个实际的问题,但我对 google maps api 不是很熟悉,并且网络上的所有教程都基于 google map v3,我不想麻烦迁移到 v3 并重新编写所有的东西.因此,如果有人引导我朝着正确的方向使此功能在 gmap(v2) 上运行,我将不胜感激。这是我的代码的样子:

if (GBrowserIsCompatible()) 
    var map = new GMap2(document.getElementById("map"));
    map.addControl(new GSmallMapControl());
    map.addControl(new GMapTypeControl());

    var center = new GLatLng(43.65323, -79.38318);

    map.setCenter(center, 15);

    if (navigator.geolocation) 
        navigator.geolocation.getCurrentPosition(function (position) 
            initialLocation = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
            map.setCenter(initialLocation);
        );
    

    geocoder = new GClientGeocoder();
    var marker = new GMarker(center, 
        draggable: true
    );
    map.addOverlay(marker);
    document.getElementById("b-lat").value = center.lat().toFixed(5);
    document.getElementById("b-longt").value = center.lng().toFixed(5);

    GEvent.addListener(marker, "dragend", function () 
        var point = marker.getPoint();
        map.panTo(point);
        document.getElementById("b-lat").value = point.lat().toFixed(5);
        document.getElementById("b-longt").value = point.lng().toFixed(5);

    );
    GEvent.addListener(map, "moveend", function () 
        map.clearOverlays();
        var center = map.getCenter();
        var marker = new GMarker(center, 
            draggable: true
        );
        map.addOverlay(marker);
        document.getElementById("b-lat").value = center.lat().toFixed(5);
        document.getElementById("b-longt").value = center.lng().toFixed(5);


        GEvent.addListener(marker, "dragend", function () 
            var point = marker.getPoint();
            map.panTo(point);
            document.getElementById("b-lat").value = point.lat().toFixed(5);
            document.getElementById("b-longt").value = point.lng().toFixed(5);

        );

    );


【问题讨论】:

【参考方案1】:

查看我的其他帖子:android maps v2 - get map zoom

要简单放大,请使用:

float zoomLevel = 20.0f;
map.animateCamera(CameraUpdateFactory.zoomTo(zoomLevel); 

要缩放到标记,请使用:

LatLng l = new LatLng(LATPOSITION, LONGPOSITION); float zoomLevel =
20.0f; map.animateCamera(CameraUpdateFactory.newLatLngZoom(l, zoomLevel)); 

将这些添加到您希望发生缩放的位置。

注意:这是针对 Java android 的,您可能需要为网络编辑它。

【讨论】:

【参考方案2】:

我通过navigator 对象找到了解决方案。初始化地图后,我用这段代码找到了用户的纬度和经度:

if (navigator.geolocation) 
    navigator.geolocation.getCurrentPosition(function (position) 
        userLatitude = position.coords.latitude;
        userLongitude = position.coords.longitude;
        center = new GLatLng(position.coords.latitude, position.coords.longitude);
        map.setCenter(center, 15);
        addMapMarker();
    );
    if(typeof userLatitude == 'undefined' && typeof userLongitude == 'undefined') 
        center = new GLatLng(43.65323, -79.38318);
        map.setCenter(center, 15);
        addMapMarker();
    
 else 
    center = new GLatLng(43.65323, -79.38318);
    map.setCenter(center, 15);
    addMapMarker();

【讨论】:

以上是关于根据用户的地理位置居中谷歌地图的主要内容,如果未能解决你的问题,请参考以下文章

将谷歌地图中心放在kml上,而不是位置

Android 谷歌地图缩放以适​​合标记和当前位置

谷歌地图 - 当前位置

怎么用百度地图api自动获取当前位置(谷歌的也行)

地理位置 - 将地图居中

将 Google 地图居中到当前用户位置