[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 @ 2014-01-10 20:56  Zhentiw  阅读(476)  评论(0)    收藏  举报