[Goolge map api v3] According to location to detect city and set viewport of this city

Tools: Draw bounding box.

复制代码
    var ne = this.viewport.getNorthEast();
    var sw = this.viewport.getSouthWest();
    g_map.setBounds(this.viewport);               

    var boundingBoxPoints = [
        ne, new google.maps.LatLng(ne.lat(), sw.lng()),
        sw, new google.maps.LatLng(sw.lat(), ne.lng()), ne
    ];

    var boundingBox = new google.maps.Polyline({
        path: boundingBoxPoints,
        strokeColor: '#FF0000',
        strokeOpacity: 1.0,
        strokeWeight: 2
    });

    boundingBox.setMap(g_map.map);
复制代码

 

MVC:

复制代码
function MopsiAddress(geocoderResult){
    this.addresses=null;
    if(geocoderResult==null || geocoderResult.length==0){
        //alert("problem");
    }else{
        this.addresses=new Array();
    
        for(var i=0;i<geocoderResult.length;i++){
        
            var googleFormattedAddress=geocoderResult[i].formatted_address;
            this.addresses.push(googleFormattedAddress);
        }
        
        var geocoderAddressComponent=geocoderResult[0].address_components;
        var geocoderGeometry=geocoderResult[0].geometry;
        // google.maps.LatLng
        this.latlng=geocoderGeometry.location;
        this.viewport = geocoderGeometry.viewport;

        this.addressShortNames = new Array();
        this.addressLongNames = new Array();

        for(i=0;i<geocoderAddressComponent.length;i++){

            this.addressShortNames[geocoderAddressComponent[i].types]=geocoderAddressComponent[i].short_name;
            this.addressLongNames[geocoderAddressComponent[i].types]=geocoderAddressComponent[i].long_name;
            this.formattedAddress=geocoderResult[0].formatted_address;    
        }    
    }
}
复制代码
复制代码
MopsiAddress.prototype.getCity=function(){

    if(this.addressLongNames["locality,political"] != undefined){
        return this.addressLongNames["locality,political"];
    }else if(this.addressLongNames["administrative_area_level_1,political"] != undefined){
        return this.addressLongNames["administrative_area_level_1,political"];
    }else if(this.addressLongNames["administrative_area_level_2,political"] != undefined){
        return this.addressLongNames["administrative_area_level_2,political"];
    }else if(this.addressLongNames[CITY] != undefined){
        return this.addressLongNames[CITY];
    }
}
复制代码

 

复制代码
function fitCityViewport(location){

    var geocoder = new google.maps.Geocoder();
    geocoder.geocode({'location' :location}, function (results, status) { 

        if(status == "OK"){
            g_map.mopsiAddress=new MopsiAddress(results);
            var city = g_map.mopsiAddress.getCity();    
            geocoder.geocode({'address' :city}, function (results, status) { 
            
                if(status == "OK"){
                    g_map.mopsiAddress=new MopsiAddress(results);
                    g_map.mopsiAddress.setGeoBounds();        
                }
            });            
        }
    });    
}
复制代码

 

Calling:

    var point = makePoint(g_lat, g_lon);
    fitCityViewport(point);

http://stackoverflow.com/questions/2494756/fitbounds-in-google-maps-api-v3-does-not-fit-bounds

posted @   Zhentiw  阅读(473)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示