google maps - geocoder परिणामों से शहर मिलता है?




google-maps geocoding (8)

अंत में यह काम कर रहा है:

var arrAddress = item.address_components;
var itemRoute='';
var itemLocality='';
var itemCountry='';
var itemPc='';
var itemSnumber='';

// iterate through address_component array
$.each(arrAddress, function (i, address_component) {
    console.log('address_component:'+i);

    if (address_component.types[0] == "route"){
        console.log(i+": route:"+address_component.long_name);
        itemRoute = address_component.long_name;
    }

    if (address_component.types[0] == "locality"){
        console.log("town:"+address_component.long_name);
        itemLocality = address_component.long_name;
    }

    if (address_component.types[0] == "country"){ 
        console.log("country:"+address_component.long_name); 
        itemCountry = address_component.long_name;
    }

    if (address_component.types[0] == "postal_code_prefix"){ 
        console.log("pc:"+address_component.long_name);  
        itemPc = address_component.long_name;
    }

    if (address_component.types[0] == "street_number"){ 
        console.log("street_number:"+address_component.long_name);  
        itemSnumber = address_component.long_name;
    }
    //return false; // break the loop   
});

Geocoder परिणामों से विभिन्न सरणी सामग्री प्राप्त करने में समस्याएं आ रही हैं।

item.formatted_address काम करता है लेकिन item.address_components.locality नहीं?

geocoder.geocode( {'address': request.term }, function(results, status) {

        response($.map(results, function(item) {

        alert(item.formatted_address+" "+item.address_components.locality)
    }            
}); 

// सरणी वापस आ गया है;

 "results" : [
      {
         "address_components" : [
            {
               "long_name" : "London",
               "short_name" : "London",
               "types" : [ "locality", "political" ]
            } ],
          "formatted_address" : "Westminster, London, UK" // rest of array...

किसी भी मदद की सराहना की!

डीसी


कुछ अलग अनुरोधों की कोशिश की:

MK107BX

क्लीवलैंड पार्क क्रिसेंट, यूके

जैसा कि आप कहते हैं, लौटा सरणी आकार असंगत है लेकिन दोनों परिणामों के लिए टाउन एड्रेस_कंपोनेंट आइटम में ["इलाके", "राजनीतिक"] के प्रकार के साथ प्रतीत होता है। शायद आप इसे एक संकेतक के रूप में इस्तेमाल कर सकते हैं?

संपादित करें : jQuery का उपयोग करके लोकेशन ऑब्जेक्ट प्राप्त करें , इसे अपने प्रतिक्रिया फ़ंक्शन में जोड़ें:

var arrAddress = item.results[0].address_components;
// iterate through address_component array
$.each(arrAddress, function (i, address_component) {
    if (address_component.types[0] == "locality") // locality type
        console.log(address_component.long_name); // here's your town name
        return false; // break the loop
    });

मुझे लगता है कि आप शहर और राज्य / प्रांत प्राप्त करना चाहते हैं:

var map_center = map.getCenter();
reverseGeocode(map_center);


function reverseGeocode(latlng){
  geocoder.geocode({'latLng': latlng}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
            var level_1;
            var level_2;
            for (var x = 0, length_1 = results.length; x < length_1; x++){
              for (var y = 0, length_2 = results[x].address_components.length; y < length_2; y++){
                  var type = results[x].address_components[y].types[0];
                    if ( type === "administrative_area_level_1") {
                      level_1 = results[x].address_components[y].long_name;
                      if (level_2) break;
                    } else if (type === "locality"){
                      level_2 = results[x].address_components[y].long_name;
                      if (level_1) break;
                    }
                }
            }
            updateAddress(level_2, level_1);
       } 
  });
}

function updateAddress(city, prov){
   // do what you want with the address here
}

परिणामों को वापस करने की कोशिश न करें क्योंकि आप पाएंगे कि वे अनिर्धारित हैं - एक असीमित सेवा का परिणाम। आपको एक फ़ंक्शन कॉल करना होगा, जैसे UpdateAddress ();


मुझे लगता है कि यह एक वास्तविक दर्द है कि Google इन्हें प्राप्त करने के लिए कुछ प्रकार की कार्यक्षमता प्रदान नहीं करता है। किसी भी तरह से मुझे लगता है कि सही वस्तु खोजने का सबसे अच्छा तरीका यह है:

geocoder.geocode({'address': request.term }, function(results, status){

   response($.map(results, function(item){

      var city = $.grep(item.address_components, function(x){
         return $.inArray('locality', x.types) != -1;
      })[0].short_name;

      alert(city);
   }            
}); 

मौजूद होने पर इलाके लौटाता है। यदि नहीं - administrative_area_1 area_1 देता है

city = results[0].address_components.filter(function(addr){
   return (addr.types[0]=='locality')?1:(addr.types[0]=='administrative_area_level_1')?1:0;
});

यह मेरे लिए काम किया:

const localityObject = body.results[0].address_components.filter((obj) => {
  return obj.types.includes('locality');
})[0];
const city = localityObject.long_name;

या एक बार में:

const city = body.results[0].address_components.filter((obj) => {
  return obj.types.includes('locality');
)[0].long_name;

मैं इसे नोड में कर रहा हूं, इसलिए यह ठीक है। यदि आपको IE का समर्थन करने की आवश्यकता है तो आपको Array.prototype.includes लिए Array.prototype.includes का उपयोग करने या इसे करने का दूसरा तरीका खोजने की आवश्यकता है।


            //if (arrAddress[ac].types[0] == "street_number") { alert(arrAddress[ac].long_name) } // SOKAK NO
            //if (arrAddress[ac].types[0] == "route") { alert(arrAddress[ac].short_name); } // CADDE
            //if (arrAddress[ac].types[0] == "locality") { alert(arrAddress[ac].long_name) } // İL
            //if (arrAddress[ac].types[0] == "administrative_area_level_1") { alert(arrAddress[ac].short_name) } // İL
            //if (arrAddress[ac].types[0] == "postal_code") { alert(arrAddress[ac].long_name); } // POSTA KODU
            //if (arrAddress[ac].types[0] == "neighborhood") { alert(arrAddress[ac].long_name); } // Mahalle
            //if (arrAddress[ac].types[0] == "sublocality") { alert(arrAddress[ac].long_name); } // İlçe
            //if (arrAddress[ac].types[0] == "country") { alert(arrAddress[ac].long_name); } // Ülke

// Use Google Geocoder to get Lat/Lon for Address
function codeAddress() {
    // Function geocodes address1 in the Edit Panel and fills in lat and lon
    address = document.getElementById("tbAddress").value;
    geocoder.geocode({ 'address': address }, function (results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            loc[0] = results[0].geometry.location.lat();
            loc[1] = results[0].geometry.location.lng();
            document.getElementById("tbLat").value = loc[0];
            document.getElementById("tbLon").value = loc[1];
            var arrAddress = results[0].address_components;
            for (ac = 0; ac < arrAddress.length; ac++) {
                if (arrAddress[ac].types[0] == "street_number") { document.getElementById("tbUnit").value = arrAddress[ac].long_name }
                if (arrAddress[ac].types[0] == "route") { document.getElementById("tbStreet").value = arrAddress[ac].short_name }
                if (arrAddress[ac].types[0] == "locality") { document.getElementById("tbCity").value = arrAddress[ac].long_name }
                if (arrAddress[ac].types[0] == "administrative_area_level_1") { document.getElementById("tbState").value = arrAddress[ac].short_name }
                if (arrAddress[ac].types[0] == "postal_code") { document.getElementById("tbZip").value = arrAddress[ac].long_name }
            }
            document.getElementById("tbAddress").value = results[0].formatted_address;
        }
        document.getElementById("pResult").innerHTML = 'GeoCode Status:' + status;
    })
}