根据地理编码IP中心化谷歌地图

5 投票
5 回答
6207 浏览
提问于 2025-04-15 14:00

基本上,我希望每当有人打开我的(谷歌)地图时,它能默认显示他们的大致位置。

有没有简单的方法可以通过谷歌的接口来实现,还是说我需要写一些自定义代码(这是一个基于Python的应用)?

5 个回答

0

根据文档,你只需要用这段代码 map.setCenter(new GLatLng(37.4419, -122.1419), 13); 来设置地图中心,或者用其他的坐标也可以。通常在网页的JavaScript中这样做是比较好的选择。

如果你是想把一个IP地址转换成经纬度,我觉得谷歌的API不支持这个功能,不过有其他一些网络服务可以做到,比如maxmindhostip,还有很多其他的服务。我不太确定推荐哪个,建议你可以试试几个不同的服务!

8

你可以使用谷歌API自带的 ClientLocation 对象:

if (GBrowserIsCompatible()) 
{   
    var map = new google.maps.Map2(document.getElementById("mapdiv"));

    if (google.loader.ClientLocation) 
    {        
        var center = new google.maps.LatLng(
            google.loader.ClientLocation.latitude,
            google.loader.ClientLocation.longitude
        );
        var zoom = 8;

        map.setCenter(center, zoom);
    }
}
3

你可以去看看 http://www.ipinfodb.com/。通过这个网站,你可以输入一个IP地址,然后它会给你返回这个地址的经纬度。我最近做了一个简单的服务,它会获取当前的IP地址,然后把这个地址传给这个网站的服务("api/location/city" 其实就是一个调用ipinfodb服务的接口)。使用jquery的代码如下:

$.get("api/location/city", null, function(data, textStatus)
{        
    if (data != null)
    {
        if (data.Status == "OK")
        {
            var lat = parseFloat(data.Latitude);
            var lng = parseFloat(data.Longitude);

            $.setCenter(lat, lng, $.settings.defaultCityZoom);

            manager = new MarkerManager(map, {trackMarkers : true });

            var e = $.createUserMarker(map.getCenter());
            e.bindInfoWindowHtml($("#marker-content-event").html());

            var m = [];
            m.push(e);

            // map.addOverlay(e);
            manager.addMarkers(m, 10);
            manager.refresh();
        }
        else
        {
            $.setCenter($.settings.defaultLat, $.settings.defaultLng, $.settings.defaultZoom);
        }
    }
}, "json");

这里的关键在于这一行:

$.setCenter(lat, lng, $.settings.defaultCityZoom);

就是把中心点设置为服务调用返回的经纬度。

撰写回答